<?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>Latest Release</h3>
	<p>
		Version 0.6 of Tigerstripe will be released very soon.  A project's build has to be approved by the foundation before it can be "marked" as n official release.
		This is currently in the works and once the process is complete, an update site will be available to host the latest release of Tigerstripe.  
		For the time being, please use the update site listed under Interim Builds.
	</p>
	 
</div>
EOHTML;

$html = $html . <<<EOHTML
	<h3>Interim Builds</h3>
	<p>
		The Tigerstripe team follows an agile methodology involving three-week iterations. <br/>
		Each release is typically made up of 5-6 iterations and each iteration is three-weeks long.  The following update site hosts the build released at the end of each iteration.
		<ul>
			<li>Update Site: http://download.eclipse.org/technology/tigerstripe/updates/3.6/latest</li> </br>
			This update site hosts iteration 24 of Tigerstripe.  This build is compatible with the latest release  of Eclipse (Helios 3.6.1).
		</ul>
	</p>

	<h3>Past Releases</h3>
	<p>
		Please click <a href="???">here</a> for past releases of Tigerstripe.
	</p>
		
		
EOHTML;

$html = $html . <<<EOHTML
	<div id="rightcolumn">
 		<div class="sideitem">
		   <h6>Related Links</h6>
		   <ul>
		   	<li><a href="http://wiki.eclipse.org/Tigerstripe_Release_Notes">Release Notes</a></li>
		   	<li><a href="http://wiki.eclipse.org/Tigerstripe_Download_instructions">Download Instructions</a></li>
		   	<li><a href="http://wiki.eclipse.org/Tigerstripe_Hello_World">Hello World Application</a></li>
		   	<li><a href="/tigerstripe/downloads/past_releases.php">Past Releases</a></li>
		   	<li><a href="/tigerstripe/generators">Generators</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);
?>
