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

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Callisto Discovery Site";
	$pageKeywords	= "eclipse callisto release download what is";
	$pageAuthor		= "Nathan Gervais";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
	// This file is linked to from lots of different places.
	// Use absolute paths to make sure that we can actually test
	// that the file renders properly (i.e. testing using) "/index.php",
	// and "/home/index.php" both work.

	require_once("links.php");

	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<img src="callisto_slice.jpg">

		<h2>Using Callisto Discovery Site</h2>
 		<p>
 			The Callisto Discovery Site allows you to install any of the projects included 
 			in the Callisto Release from a single location.   Instead of downloading each project individually	and then installing 
 			them into your workspace, the Callisto Discovery Site simplifies the process.	</p>
 			
		<div class="homeitem3col">
		<h3>Instructions</h3>
		
		<p>To access the Callisto Discovery site:</p>
 		<ul>
 			<li> First download either the <a href="$eclipse_sdk">Eclipse SDK</a> or
 			the <a href="$platform_runtime_binaries">Eclipse Platform Runtime Binaries</a>.</li>
 			<li>You then need to use the update manager to load Callisto projects.  See <a href="http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-34.htm">Eclipse Help</a> for general information about using Update Manager. 
			You can also view a <a href="$install_callisto">screencam demonstration</a> of using the Callisto Discovery Site.</li>
			<li>For most distributions of Eclipse, there should already be a &quot;Callisto Discovery Site&quot; defined in its 
		Update Manager. If you do not see it you can try adding the following URL as a remote update site in your 
		update manager. http://download.eclipse.org/callisto/releases/  </li>
		<li>Alternatively, if you would like to view the list or projects by their Eclipse Project (PMC) 
			organization, you can define a new remote update site, and specify a site-byProject.xml file. In other 
			words, http://download.eclipse.org/callisto/releases/site-byProject.xml
			</li>
		</ul>
			</p>
		</div>
		<div class="homeitem3col">
			<h3>Tips</h3>
			<ul>
			<li>To lessen download time (by installing the minimum number of features), first select the desired feature in the Eclipse update install dialog, then use the &quot;Select Required&quot; button to select only the minimum required prerequisite features.
			<li>Any time you get a chance, export your bookmark files from the &quot;Add a Site&quot; dialog. Having them saved away in a safe place makes it much easier to re-create another development environment.
			<li>Since the workbench will have to shutdown and restart you can you do the upgrade and installs with an empty workspace and once satisfied all is well, then use the -data option on the Eclipse command line (or shortcut) to point to your workspace of interest.
			<li>Both before and after installing &quot;new&quot; features, you may want to use update manager to &quot;Check for updates to currently installed features&quot;. In some cases, just installing a feature will not necessarily upgrade all of its prerequisites to the highest available level.
			</ul>
		</div>
		
		<div class="homeitem3col">
			<h3>Example of Update Dialog</h3>
			Here is an example screen shot highlighting. The example is from having started with just the Eclipse Platform Feature installed.
			<br/>
			<p align="center"><img src="images/update-dialog.png"></p><br/>
		</div>
	</div>
</div>

	
EOHTML;


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