<?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());    
	# All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Igor Vinnykov
	# Date:			2008-07-01
	#
	# Description: Autogenerated for eclipse.org site pages from Eclipse IDE help
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Subversive - Documentation";
	$pageKeywords	= "Subversive, Subversion, SVN, Team Provider, documentation, user guid";
	$pageAuthor		= "Igor Vinnykov";
		
	include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">

	<br/>
<h1>Getting Started</h1>
	<p>In this part the user can find some basic concepts on Subversion&reg;, general information on Subversive plug-in, integration instructions and the answer for the common questions on the product.</p>
	<iframe width="560" height="315" src="https://www.youtube.com/embed/Szgs3jmo2YU" frameborder="0" allowfullscreen></iframe>	
	<p>Also the Subversive architecture, modules and extension points information is included for more experienced users. We hope this information might be quite useful.</p>
	<p>If you are new to SVN or version control systems please first of all refer to the <a href="gettingStarted/subversion/svn_intro.php">'Subversion&reg; (SVN)'</a>. You'll find there the introduction to Subversion&reg;, information about subversion folders and some useful links, which can help you to get closer to SVN&reg;.</p>
	<p>First of all the user would like to install the Team plug-in. Before installation the user should familiarize himself with <a href="gettingStarted/aboutSubversive/requirements.php">requirements</a>. To get detailed installation instructions refer to the <a href="gettingStarted/aboutSubversive/install.php">'Subversive installation instructions'</a> topic of this guide part.</p>
	<p>Subversive plug-in can be easily integrated with FastTrack, Buckminster and Mylyn. To get detailed instructions on Mylyn integration refer to <a href="gettingStarted/aboutSubversive/mylyn.php">Mylyn integration</a> topic of this guide part.</p>
	<h2>Where shall I go further?</h2>
	<p>In the <a href="prefs.php"><b>'Preferences'</b></a> part the user can find an information on Subversive plug-in options and configuring them.</p>
	<p>To find the information on an everyday work with the Subversive the user should refer <a href="teamSupport.php"><b>'Team support with SVN'</b></a> part. There he would find an information on GUI, SVN&reg; actions, example of a typical working cycle with SVN&reg; and a lot of useful recommendations.</p>
	<p>We do hope you'll find the structure of this guide comfortable.</p>
	<p>To get answers on a frequently asked questions refer to <a href="faq.php">'FAQ'</a> topic in the root of this guide.</p>
	<img src="images/inside.png"/>
	<br/>
	<a href="gettingStarted/subversion/svn_intro.php">Subversion (SVN)</a>
	<br/>
	<a href="gettingStarted/subversive.php">About Subversive and Subversive User Guide</a>
	<br/>
	<br/>
	</div>	

EOHTML;


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