<?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'

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Tigerstripe Update Site (Deprecated - this is for past releases)";
$pageKeywords	= "Type, page, keywords, here";
$pageAuthor		= "Eric Dillon";
# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML
<div id="maincontent">

<div id="midcolumn">
<h1>$pageTitle</h1>
	<div class="homeitem3col">
		<h3>Tigerstripe Update Site </h3>
		<p>To install Tigerstripe, point your Eclipse Update Manager at this following sites.</p>
		<small>There is no official release of 0.5. In the meantime, stable releases can be installed from our interim update site.</small>
		<ul>
			<li>Help
			<ul>
				<li>install New Software
				<ul>
					<li>Add...<br/>
								Name: <strong>Tigerstripe Interim Update Site</strong><br/>
								Location: <a href="http://download.eclipse.org/technology/tigerstripe/updates-3.5-interim/">http://download.eclipse.org/technology/tigerstripe/updates-3.5-interim/</a><small> (Interim Builds)</small><br/>
								<strong>The interim site is not categorized. Make sure you uncheck the "Group Items by Categories" option.</strong>
					</li>
				</ul>
				</li>
			</ul>
			</li>
		</ul>
		
		<h3>Access to Continuous Builds (Unstable)</h3>
		<p>In particular cases, you may want to update to our latest continuous builds. Please understand however that these builds
		may be highly unstable.</p>
		<small>It typically takes 30mn for the update to be fully available, so if you experience problems during an update,
		please try again later, the mirroring may take time.</small>
		<ul>
			<li>Help
			<ul>
				<li>install New Software
				<ul>
					<li>Add...<br/>
								Name: <strong>Tigerstripe Continous (Unstable) Update Site</strong><br/>
								Location: <a href="http://download.eclipse.org/technology/tigerstripe/updates-3.5/unstable/">http://download.eclipse.org/technology/tigerstripe/updates-3.5/unstable</a><small> (Continuous Builds)</small><br/>
								<strong>The unstable site is not categorized. Make sure you uncheck the "Group Items by Categories" option.</strong>
					</li>
				</ul>
				</li>
			</ul>
			</li>
		</ul>
			</div>
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
		   <h6>Related Links</h6>
		   <ul>
		   	<li><a href="/tigerstripe/downloads/allDownloads.php">New Releases</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);

?>