<?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 an 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 Iteration Builds.
	</p>
	 
</div>
EOHTML;

$html = $html . <<<EOHTML
	<h3>Iteration 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><h3>Update Site: http://download.eclipse.org/technology/tigerstripe/updates/3.6/latest</h3></li> </br>
			For installation instructions, please click on the link to the right.  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="/tigerstripe/downloads/past_releases.php">here</a> for past releases of Tigerstripe.
	</p>
		
		
EOHTML;

$html = $html . <<<EOHTML
	</div>
	<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">Installation 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);
?>
