<?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>Neon (Eclipse 4.6) Release</h2>
		<p>
			This is the stable Subversive plug-in release that is a part of Eclipse Neon Simultaneous Release. The Subversive plug-in is included into Neon Update Site, so you can install Subversive directly from Eclipse Neon.
		</p>
		<p>
			<b>Release Date:</b> 02 September 2016<br/>
			<b>Version:</b> 4.0.2.I20160902-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 Neon update site. To install Subversive, select the Neon 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/4.0/builds/neon/Subversive-4.0.2.I20160902-1700.zip">Subversive-4.0.2.I20160902-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> 02 September 2016<br/>
			<b>Version:</b> 4.0.2.I20160902-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/4.0/update-site/">http://download.eclipse.org/technology/subversive/4.0/update-site/</a>		
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/4.0/builds/Subversive-4.0.2.I20160902-1700.zip">Subversive-4.0.2.I20160902-1700.zip</a>
		</p>	
		<p>
			<b>Previous Release:</b> 01 July 2016<br/>
			<b>Version:</b> 3.0.5.I20160701-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/3.0/update-site/">http://download.eclipse.org/technology/subversive/3.0/update-site/</a>		
		</p>
		<p>
			<b>Archived Update Site:</b><br/>
			<a href="http://www.eclipse.org/downloads/download.php?file=/technology/subversive/3.0/builds/Subversive-3.0.5.I20160701-1700.zip">Subversive-3.0.5.I20160701-1700.zip</a>
		</p>	
		<h2>Requirements</h2>
		<p>
			The latest version of Subversive is compatible with JDK 1.6, Eclipse 4.4 and later versions. It supports SVN versions 1.8-1.9 and migration from SVN 1.1-1.6. 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;
		
/*
		<h2>Early Access</h2>
		<p>
			This is the most up-to-date version of the Subversive plug-in. It's aimed to the integration developers and provides you with access to the latest Subversive features before they become available in the Subversive build included into the yearly Eclipse Simultaneous Release.
		</p>
*/
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>