<?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><b>Update Site: http://download.eclipse.org/technology/tigerstripe/updates/3.6/latest</b></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);
?>
