<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		
include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
require_once 'buildTypes.php'; 																														
require_once 'parseBuilds.php';

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Tigerstripe Downloads";
$pageKeywords	= "Tigerstripe, downloads";
$pageAuthor		= "Eric Dillon";
# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<script language="JavaScript" type="text/javascript">
<!--
function toggle(list){
var listElementStyle=document.getElementById(list).style;
if (listElementStyle.display=="none"){
listElementStyle.display="block";
}
else{ listElementStyle.display="none";
}
}// -->
</script>

<div id="maincontent">

<div id="midcolumn">
<h1>$pageTitle</h1>
<div class="homeitem3col">
	<h3>Getting Started</h3>
	<p><strong>First time users</strong> interested in using Tigerstripe as a modeling and generation tool should get the <i><a href="#latest">latest Workbench</a></i> feature which will provide all UI components and diagraming features on top of
			the model manager and the generation engine. Visit the <a href="http://wiki.eclipse.org/Tigerstripe_Hello_World">Tigerstripe Hello_World Page</a> to get started.
	</p>
	<p><strong>Note</strong> that Tigerstripe is in the process of evolving from a Commercial application to an open-source framework. In particular,
	although no official "eclipse release of Tigerstripe" is available as we are still stabilizing our internal APIs, the End-User modeling
	environment is functional. In fact it is being used in Production at Cisco Systems, inc on large projects.</p>
	<p>To use Eclipse Update Manager, use the <a href="/tigerstripe/downloads/updates.php">Tigerstripe Update Site</a></p>
	<p>
	<small>
	<strong>Minimum Requirements</strong>
	<ul>
		<li>Java 5, Eclipse 3.3.x</li>
	</ul>
	</small>
	</p>
</div>
EOHTML;

# loop over all build types
foreach( $buildTypes as $buildType ) {
	$html = $html . "<div class=\"homeitem3col\">";
	$html = $html . "<h3>" . $typeToLabels[$buildType] . "</h3>";

	$html = $html . "<ul>";
	$buildFound = false;
	foreach($builds as $build) {
		if ( strcmp( $build->getType(), $buildType) == 0 ) {
			$html = $html . "<li>";
			$html = $html . $build->render();
			$html = $html . "</li>";
			$buildFound = true;
		}
	}

	if ( !$buildFound ) {
		$html = $html . "<li><i><small>No Download available.</small></i></li>";
	}

	$html = $html . "</ul>";

	$html = $html . "</div>";
} #looped over build types

$html = $html . <<<EOHTML
	</div>
	<div id="rightcolumn">
 		<div class="sideitem">
		   <h6>Related Links</h6>
		   <ul>
		   	<li><a href="/tigerstripe/generators">Generators</a></li>
		   	<li><a href="http://wiki.eclipse.org/Tigerstripe_0.3_stream">0.3 Release Stream</a></li>
		   	<li><a href="http://wiki.eclipse.org/Tigerstripe_On-Going">On-going Activities</a></li>
		   	</ul>
 		</div>
 		<div class="sideitem">
		   <h6>Incubation</h6>
 		  <div align="center">
 		  	<a href="/projects/what-is-incubation.php">
 		  		<img align="center" src="/images/egg-incubation.png" border="0" alt="Incubation" />
 		  	</a>
 		  </div>
 		</div>
 	</div>
</div>
EOHTML;

# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
