<?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
<script type="text/javascript" src="scripts/countdown.js"></script>	
<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, 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>
		        </td>
        		<td valign="top" style="padding-left:10px;"><img src="/callisto/images/largecallisto.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="http://wiki.eclipse.org/index.php/Callisto_experiences">Callisto Experiences</a> from the Blogshere</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>




EOHTML;

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