<?php
	set_include_path($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common" . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . "/projects" . PATH_SEPARATOR . get_include_path());
	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());
	
	$localVersion = false;
	
	# Define these here, or in _projectCommon.php for site-wide values
	$pageTitle 		= "Previous Releases - Eclipse Subversive";
	$pageKeywords	= "subversive, download, svn, subversion";
	$pageAuthor		= "Igor Vinnykov";
	
	$sidebar = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/subversive/sidebars/download.php");	
	$notes = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/subversive/include/installation-notes.php");	
	
	// 	# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

	<div id="midcolumn">
		<h1>Previous Releases</h1>
		<p>
			Here you can find a list of Subversive builds for previous Eclipse Simultaneous Releases.
		</p>
		$notes
		<h2>Subversive major version Update Notes</h2>
		<p>
			If need to perform a major version update of Subversive plug-in (from 1.x.x to the 2.0.0 version, for example), then uninstall the previously installed Subversive plug-in version first. Otherwise during the installation process you'll be blocked by the old connectors that are incompatible with the release you're installing and couldn't be installed simultaneously with the main plug-in due to the installation UI restrictions.
		</p>		
		<h2>Mars (Eclipse 4.5) Release</h2>
		<p>
			This is the stable Subversive plug-in release that is a part of Eclipse Mars Simultaneous Release. The Subversive plug-in is included into Mars Update Site, so you can install Subversive directly from Eclipse Mars.
		</p>
		<p>
			<b>Release Date:</b> 31 January 2015<br/>
			<b>Version:</b> 3.0.4.I20160131-1700 (<a href="/subversive/changelogs/releasenotes-mars.txt">Release notes</a>)
		</p>
		<p>
			<b>Update Site:</b><br/>
			The Subversive plug-in is an integral part of the Eclipse Mars update site. To install Subversive, select the Mars update site in Eclipse Update Manager, then select the Subversive features under the Collaboration section of the update site (check the <a href="/subversive/installation-instructions.php">installation instructions</a>).
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/3.0/builds/mars/Subversive-3.0.4.I20160131-1700.zip">Subversive-3.0.4.I20160131-1700.zip</a>
		</p>
		<h2>Luna (Eclipse 4.4) Release</h2>
		<p>
			This is the stable Subversive plug-in release that is a part of Eclipse Luna Simultaneous Release. The Subversive plug-in is included into Luna Update Site, so you can install Subversive directly from Eclipse Luna.
		</p>
		<p>
			<b>Release Date:</b> 23 January 2015<br/>
			<b>Version:</b> 2.0.4.I20150123-1700 (<a href="/subversive/changelogs/releasenotes-luna.txt">Change log</a>)		
		</p>
		<p>
			<b>Update Site:</b><br/>	
			The Subversive plug-in is an integral part of the Eclipse Luna update site. To install Subversive, select the Luna update site in Eclipse Update Manager, then select the Subversive features under the Collaboration section of the update site (check the <a href="/subversive/installation-instructions.php">installation instructions</a>).
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/2.0/builds/luna/Subversive-2.0.4.I20150123-1700.zip">Subversive-2.0.4.I20150123-1700.zip</a>
		</p>	
		<h2>Kepler (Eclipse 4.3) Release</h2>
		<p>
			This is the stable Subversive plug-in release that is a part of Eclipse Kepler Simultaneous Release. The Subversive plug-in is included into Kepler Update Site, so you can install Subversive directly from Eclipse Kepler.
		</p>
		<p>
			<b>Release Date:</b> 06 February 2014<br/>
			<b>Version:</b> 1.1.3.I20140206-1700 (<a href="/subversive/changelogs/releasenotes-kepler.txt">Release notes</a>)
		</p>
		<p>
			<b>Update Site:</b><br/>
			The Subversive plug-in is an integral part of the Eclipse Kepler update site. To install Subversive, select the Kepler update site in Eclipse Update Manager, then select the Subversive features under the Collaboration section of the update site (check the <a href="/subversive/installation-instructions.php">installation instructions</a>).
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/1.1/builds/juno/Subversive-1.1.3.I20140206-1700.zip">Subversive-1.1.3.I20140206-1700.zip</a>
		</p>
		<h2>Juno (Eclipse 3.8/4.2) Release</h2>
		<p>
			This is the stable Subversive plug-in release that is a part of Eclipse Juno Simultaneous Release. The Subversive plug-in is included into Juno Update Site, so you can install Subversive directly from Eclipse Juno.
		</p>
		<p>
			<b>Release Date:</b> 22 January 2013<br/>
			<b>Version:</b> 1.0.0.I20130122-1700 (<a href="/subversive/changelogs/releasenotes-juno.txt">Release notes</a>)
		</p>
		<p>
			<b>Update Site:</b><br/>
			The Subversive plug-in is an integral part of the Eclipse Juno update site. To install Subversive, select the Juno update site in Eclipse Update Manager, then select the Subversive features under the Collaboration section of the update site (check the <a href="/subversive/installation-instructions.php">installation instructions</a>).
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/1.0/builds/juno/Subversive-1.0.0.I20130122-1700.zip">Subversive-1.0.0.I20130122-1700.zip</a>
		</p>
	</div>
	
	<div id="rightcolumn">
        $sidebar		
	</div>	

EOHTML;
		

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