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

	#*****************************************************************************
	#
	# 2009training.php
	#
	# Author: 		Lynn Gayowski + Nathan Gervais
	# Date:			2009-02-17
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Training Series";
	$pageKeywords	= "eclipse, training, rcp, equinox, modeling, emf, gef, gmf";
	$pageAuthor		= "Lynn Gayowski";
	
	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	

	$cookie = @$_COOKIE['activeTabTrainingSpring2009'];
	if ($cookie == "")
	{
		$cookie = "developingRCP";
	}	
	
ob_start();
?>		
<link rel="stylesheet" type="text/css" href="training.css" media="screen" />
<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.5.2/build/yahoo/yahoo-min.js&2.5.2/build/dom/dom-min.js&2.5.2/build/event/event-min.js&2.5.2/build/dragdrop/dragdrop-min.js&2.5.2/build/animation/animation-min.js&2.5.2/build/connection/connection-min.js&2.5.2/build/container/container-min.js"></script>
<script type="text/javascript"> var activeCookie = 'activeTabTrainingSpring2009'; </script>
<script type="text/javascript" src="functions.js"></script>

<div id="maincontent">
	<div id="midcolumn">

		<table>
			<tr>
				<td>
					<h1><?= $pageTitle ?></h1>
					<p>The Eclipse Foundation, in partnership with Eclipse member companies, is offering a series of training classes. This is
					your opportunity to learn Eclipse techniques, tips and tricks from experts.  The instructor-led training courses will be held
					from April 6 to May 29, 2009 and feature classes on <b>Eclipse Developing with RCP</b>, <b>Eclipse
					Advanced RCP</b>, <b>Eclipse Equinox</b> and <b>Eclipse Modeling</b>.    
					<br><br>		
					To register, choose a course below and click on a city near you. Sign up by March 20, 2009 for a 5% early bird discount!
					<br><br>
					For a consolidated list of ongoing Eclipse training classes, see the <a href="http://wiki.eclipse.org/Training_Schedule">training
					schedule wiki</a>.
					</p>
				</td>
				<td>
					<img src="traininggraphic_125x125.gif">
				</td>
			</tr>
		</table>		
		<div id="tabNav">
			<ul id="tabNavUl">
				<li id="developingRCP"  class="start <? if ($cookie == "developingRCP") echo "active";?>""><a onclick="updateContent('developingRCP');">Developing with RCP</a></li>
				<li id="advancedRCP" class="middle <? if ($cookie == "advancedRCP") echo "active";?>"><a onclick="updateContent('advancedRCP');">Advanced RCP</a></li>
				<li id="equinox" class="middle <? if ($cookie == "equinox") echo "active";?>"><a onclick="updateContent('equinox');">Equinox &amp; OSGi</a></li>
				<li id="modeling"  class="end <? if ($cookie == "modeling") echo "active";?>"><a onclick="updateContent('modeling');">Modeling</a></li>
			</ul>
		</div>
		<div id="ajaxContent">
			<? include ('fetch/'.$cookie. '.php'); ?>
		</div>
		<br/><br/>
	</div>
</div>

<!-- remove the entire <div> tag to omit the right column!  -->
<div id="rightcolumn">
	<div class="sideitem">

	<h6>Sponsored by:</h6>
            <table cellspacing="0" cellpadding="20" border="0" valign="top">
                <tr>
                    <td align="center">
                    <a target="blank" href="http://www.eclipse.org"><img border="0" src="https://www.regonline.com/custImages/240004/Eclipse%20Logo%20S%204%20colour%20cropped.JPG" /></a><br />
                    <br />
                    <a href="http://www.ancitconsulting.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=884&size=small" /></a><br />
                    <br />
                    <a href="http://www.anyware-tech.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=843&size=small" /></a><br />
                    <br />
                    <a href="http://www.avantsoft.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=671&size=small" /></a><br />
                    <br />
                    <a href="http://www.eclipsesource.com" target="blank"><img border="0" width="125" src="http://www.eclipse.org/community/training/images/EclipseSourceLogo.jpg" /></a><br />
                    <br />
                    <a href="http://www.eteration.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=856&size=small" /></a><br />
                    <br />
                    <a href="http://www.gerhardtinformatics.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=886&size=small" /></a><br />
                    <br />
                    <a href="http://www.industrial-tsi.com" target="blank"><img border="0" width="125" height="28" src="https://www.regonline.com/custImages/240004/TSIw150.jpg" /></a><br />
                    <br />
                    <a href="http://www.itemis.de" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=817&size=small" /></a><br />
                    <br />
                    <a href="http://www.obeo.fr" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=863&size=small" /></a><br />
                    <br />
                    <a href="http://www.rcp-company.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=869&size=small" /></a><br />
                    <br />
                    <a href="http://www.soyatec.com" target="blank"><img border="0" src="http://www.eclipse.org/membership/scripts/get_image.php?id=930&size=small" /></a><br />
                    <br />
                    <a href="http://www.3mill.org/" target="blank"><font size="4">Third<br>Millennium</font></a><br />
                    <br />
                    <a href="http://www.weiglewilczek.com" target="blank"><img border="0" src="https://www.regonline.com/custImages/240004/weiglewilczek_72dpi.jpg" /></a><br />
                    <br><br></td>
                </tr>
            </table>
	</div>
</div>	
			
<?php
	$html = ob_get_contents();
	ob_end_clean();

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