<?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 		= "Latest 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>Latest Releases</h1>
		<p>
			This page includes information about the latest stable release of Subversive and the Early Access Build with all the latest features.
		</p>
		$notes
		<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> 09 June 2014<br/>
			<b>Version:</b> 2.0.0.I20140609-1700 (<a href="/subversive/changelogs/releasenotes.txt">Release notes</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.0.I20140609-1700.zip">Subversive-2.0.0.I20140609-1700.zip</a>
		</p>
		<h2>Latest Stable Build</h2>
		<p>
			This is the most up-to-date version of the Subversive plug-in. It's aimed to provide you with access to the latest Subversive features before they become available in the Subversive build included into the yearly Eclipse Simultaneous Release.
		</p>
		<p>
			<b>Release Date:</b> 09 June 2014<br/>
			<b>Version:</b> 2.0.0.I20140609-1700 (<a href="/subversive/changelogs/changelog.txt">Change log</a>)		
		</p>
		<p>
			<b>Update Site:</b><br/>	
			<a href="http://download.eclipse.org/technology/subversive/2.0/update-site/">http://download.eclipse.org/technology/subversive/2.0/update-site/</a>		
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/2.0/builds/Subversive-2.0.0.I20140609-1700.zip">Subversive-2.0.0.I20140609-1700.zip</a>
		</p>	
		<p>
			<b>Release Date:</b> 06 February 2014<br/>
			<b>Version:</b> 1.1.3.I20140206-1700 (<a href="/subversive/changelogs/changelog-2.txt">Change log</a>)		
		</p>
		<p>
			<b>Update Site:</b><br/>	
			<a href="http://download.eclipse.org/technology/subversive/1.1/update-site/">http://download.eclipse.org/technology/subversive/1.1/update-site/</a>		
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/1.1/builds/Subversive-1.1.3.I20140206-1700.zip">Subversive-1.1.3.I20140206-1700.zip</a>
		</p>	
		<p>
			<b>Early Access build:</b> 09 June 2014<br/>
			<b>Version:</b> 2.0.0.I20140609-1700 (<a href="/subversive/changelogs/changelog.txt">Change log</a>)		
		</p>
		<p>
			<b>Update Site:</b><br/>	
			<a href="http://download.eclipse.org/technology/subversive/2.0/update-site/">http://download.eclipse.org/technology/subversive/2.0/update-site/</a>		
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/2.0/builds/Subversive-2.0.0.I20140609-1700.zip">Subversive-2.0.0.I20140609-1700.zip</a>
		</p>	
		<h2>Requirements</h2>
		<p>
			The latest version of Subversive is compatible with JDK 1.5, Eclipse 3.6 and later versions. It supports SVN versions 1.1 through 1.7. Subversive SVN Connectors are available for different platforms. For Windows x86/x64, you can install the JavaHL with corresponding binaries or SVNKit connectors. For other platforms, you have to install the SVNKit connector or if you're installing JavaHL, additionally install a package that contains JavaHL binaries for the platform (check the <a href="/subversive/installation-instructions.php">installation instructions</a>).
		</p>
	</div>
	
	<div id="rightcolumn">
		$sidebar	
	</div>	

EOHTML;
		

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