<?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";
	$pageKeywords	= "callisto marketing ";
	$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.
	include ('scripts/whatsnew.php');
	$whatsnew = rss_to_html('whatsnew');	
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<link rel="stylesheet" type="text/css" href="callisto.css" media="screen" />
<div class="callistoRealEstate paddingLeft">
	    <h1>$pageTitle</h1>
		
       	<h3>What is Callisto</h3>
       	<table>
       		<tr>
       			<td valign="top">
		        Callisto is about improving the productivity of the developers working on top of Eclipse frameworks by providing a more transparent and predictable development cycle.  By releasing <a href="callistoprojects.php">10 projects</a> at the same time in 2006, the goal is to eliminate uncertainty about version compatibility and make it easier to incorporate multiple projects into your environment.
		        <br /><br />
		              
		        <em>While Callisto is about the simultaneous release of <a href="callistoprojects.php">ten projects</a>, it is
		        not a unification of the projects - each project remains a
		        separate open source project operating with its own project leadership,
		        its own committers, and its own project plan.</em>
		        <p>Click <a href="http://wiki.eclipse.org/Simultaneous_Release">here</a> to find out about the newest Eclipse Simultaneous Release</p>
		        </td>
        		<td valign="top" style="padding-left:10px;"><img src="/callisto/images/largeCallistoHere.gif" border=0 alt="The Next Total Eclipse" title="Callisto" style="float:right;clear:none;"></td>
        	</tr>
        </table>
        <h3>How do I get Callisto?</h3>
        <!--<div class="countdownBox">
        Callisto is coming in : <span class="countdown" id="cd"></span>
        </div>-->
        <table cellspacing=0 class="callistoButtons">
        	<tr>
        		<td width="50"><a href="java.php"><img src="images/java.jpg"></a></td>
				<td width="25%"class="noRightBorder"><a href="java.php">I Build Java / Web Applications</a></td>
        		<td width="50"><a href="plugin-dev.php"><img src="images/plugin.jpg"></a></td>
        		<td width="25%"class="noRightBorder"><a href="plugin-dev.php">I build Plugins / RCP Applications</a></td>
        		<td width="50"><a href="c-dev.php"><img src="images/c.jpg"></a></td>
        		<td width="25%"class="noRightBorder"><a href="c-dev.php">I Build C/C++ Applications</a></td>
        		<td width="50"><a href="custom.php"><img src="images/custom.jpg"></a></td>
        		<td width="25%"><a href="custom.php">Customize your Callisto Install</a></td>
        	</tr>
        </table>
        <br/>
        
        <div class="homeitem noMarginLeft">
        <h3>Learn more</h3>
        <ul>
        	<li><a href="callistotags.php">Callisto Experiences</a> from the Blogsphere</li>
        	<li>Check out the latest <a href="webinars.php">Webinars</a></li>
        	<li>ISVs adopting <a href="callistoeffect.php">Callisto projects</a></li>
        	<li> Listen to the <a href="http://www.eclipsezone.com/podcasts.jsp" target="blank">EclipseZone Callisto Podcasts</a>
        </ul>
        </div>
        
        $whatsnew

</div>
<div id="rightcolumn">
</div>



EOHTML;

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