<?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: 		Nathan Gervais
	# Date:			2008-10-07
	#
	# Description:  New Categories Page Template
	#
	#
	#****************************************************************************
	$documentRoot = $_SERVER['DOCUMENT_ROOT'];

	include($documentRoot . '/home/categories/fetch/getStarted.php');
	
//	require_once ($documentRoot .'/home/categories/scripts/projectstablePIX.php');
//	require_once ($documentRoot .'/home/categories/scripts/epicTableTemplate.php');	
//	require_once ($documentRoot ."/home/categories/scripts/tabs.php");
//	require_once ($documentRoot . '/resources/scripts/resources_html.php');	
//	require_once ($documentRoot . '/home/categories/scripts/whatsnew.php');
//	$whatsnew = rss_to_sideitem_html('/community/news/2005inthenewsarchive', 3, "enterprise");	
//	$resource_filter = "enterprise";
//	$displayTabs = displayTabs();		
//	$resources_table = $Resources_HTML->get_pillar_resources_table($resource_filter);
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Categories Template";
	$pageKeywords	= "Categories Template";
	$pageAuthor		= "Nathan Gervais";
	 
	ob_start();
	?>
	<link rel="stylesheet" type="text/css" href="layout-new.css" media="screen" />
	<div id="widecolumn">
		<div id="categoryHeader">
			<div id="categoryIcon">
				<img src="http://dev.eclipse.org/huge_icons/places/network-server.png"/>
			</div>
			<div id="categoryMenu">
				<div id="categoryTitle">Enterprise Java</div>
				<div id="categorySubMenu">
					<ul>
						<li><a href="#">Equinox + RCP</a></li>
						<li><a href="#" class="active">Enterprise Java</a></li>
						<li><a href="#">Embedded + Mobile</a></li>
						<li><a href="#">Service Oriented Architecture</a></li>
						<li><a href="#">Web Development</a></li>
						<li><a href="#">Modeling</a></li>
						<li><a href="#">Application Frameworks</a></li>
						<li><a href="#">Language IDE</a></li>
					</ul>
				</div>
			</div>
		</div>

		<div id="categoryContent">
			<div id="categoryDescription">
				<fieldset>
					<legend>About Enterprise Java</legend>
					<p>Eclipse projects provide tools and frameworks that span the entire software development lifecycle, including modeling, development, deployment tools, reporting, data manipulation, testing and profiling. The tools and frameworks are primarily focused on building JEE, web services and web applications. Eclipse also provides support for other languages, such as C/C++, PHP, and others.</p>
				</fieldset>
			</div>
			<div id="tabNav">
				<ul id="tabNavUl">
					<li class="start"><a href="#">Discover the Possible</a></li>
					<li class="middle active"><a href="somerhwere.php">Get Started</a></li>
					<li class="middle"><a href="#">Become an Expert</a></li>
					<li class="end"><a href="#">Join the Community</a></li>
				</ul>
			</div>
			<div id="tabContainer">
				<div id="tabContent">
					<?=getStarted('enterprise');?>
				</div>
			</div>
		</div>
	</div>
	<script language="javascript">
		function t(i, j) {
			var e = document.getElementById(i);
			var f = document.getElementById(j);
			var t = e.className;
			if (t.match('invisible')) { t = t.replace(/invisible/gi, 'visible'); }
			else { t = t.replace(/visible/gi, 'invisible'); }
			e.className = t;
			f.className = t;
		}
	</script>
<? 
	$html = ob_get_contents();
	ob_end_clean();

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

