<?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 Community";
	$pageKeywords	= "eclipse resources, courses, books, events, plug-ins";
	$pageAuthor		= "susan iwai";
	
	# 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.
	$root = $_SERVER['DOCUMENT_ROOT'];
	require_once($root . '/community/events/scripts/events.php');
	$events = get_events_summary_for_community_page(3);
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<h2>Learn more about the Eclipse Community</h2>
		<p>The Community Section is where you can find out more about events, resources and projects that are happening
		in the Eclipse community and ecosystem. </p>

		<h2>Getting involved</h2>
		<p>Here's how you can play an active role in the community:</p>
		<p><ul class="midlist">	
				<li><a href="../newsgroups/">Newsgroups</a> - Follow the newsgroup discussions, answer questions, help others use Eclipse and Eclipse tools.<br />
					<a href="../newsportal/thread.php?group=eclipse.platform">eclipse.platform</a> - General Eclipse user's forum<br /> 
					<a href="../newsportal/thread.php?group=eclipse.newcomer">eclipse.newcomer</a> - Eclipse Newcomers
				</li>
				<li><a href="https://bugs.eclipse.org/bugs/">Bugzilla</a> - Look at the bugs, submit code patches.</li>
				<li>Test software and tools, report bugs you can reproduce.</li>
				<li>Suggest and discuss new features and enhancements in bugzilla.</li>
				<li><a href="../articles/">Articles</a> - Write an article, a tutorial, a how-to or do a screencast.</li>
		</ul></p>
		<div class="homeitem">
			<h3>See Eclipse Live&nbsp;<a href="/community/events"><img src="/images/more.gif" title="More..." alt="[More]" /></a></h3>
			<ul>
				$events
			</ul>
		</div>
		<div class="homeitem">
			<h3>Foundation Member Working Groups</h3>
			<ul>
				<li><a href="http://www.eclipse.org/japanwg/">Japan Working Group</a> </li>
			</ul>
		</div>		
		<div class="homeitem">
			<h3>Eclipse In Action - Case Studies</h3>
			<ul>
				<li><a href="casestudies/Alterpointfinal.pdf">Eclipse RCP Helps AlterPoint Simplify Network Management</a></li>
				<li><a href="casestudies/NASAfinal.pdf">NASA Uses Eclipse for Interplanetary Operations</a></li>
				<li><a href="casestudies/SASfinal.pdf">SAS Delivers Architectural and Aesthetic Consistency with Eclipse</a></li>
			</ul>
		</div>
		
		<hr class="clearer" />
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Community Resources Highlights</h6>
			<ul>
				<li><a href="../technology/research.php">Research community</a></li>
				<li><a href="/community/books/">Books on Eclipse</a></li>
				<li><a href="pluginsites.php">Community plug-in websites</a></li>
			</ul>
		</div>
		<div class="sideitem">
			<h6>Getting started</h6>
			<ul>
				<li><a href="/downloads/">Downloads</a></li>
				<li><a href="/documentation/">Documentation</a></li>
				<li><a href="../articles">Eclipse Technical Articles</a></li>
				<li><a href="http://help.eclipse.org/help31/topic/org.eclipse.platform.doc.user/gettingStarted/qs-02a.htm">Eclipse Workbench</a></li>								
				<li><a href="/newsgroups/">Newsgroups</a></li>
				<li><a href="http://wiki.eclipse.org" target="_blank">Eclipse Project Wiki</a></li>			
				<li><a href="/community/">Community Resources</a></li>
				<li><a href="http://planeteclipse.org/planet/" target="_blank">PlanetEclipse</a></li>
				<li><a href="/legal/eplfaq.php">Licensing FAQ</a></li>
			</ul>
		</div>
		
<!-- comment out these until we have some content for them....		
		<div class="sideitem">
			<h6>Recent Updates</h6>
			<ul>
				<li><a href="#">OS Plug-in</a></li>
				<li><a href="#">RCP App</a></li>
				<li><a href="#">Book </a></li>
			</ul>
		</div>
		<div class="sideitem">
			<h6>Eclipse wins Awards!</h6>
			<ul>
				<li><a href="#">JDJ</a></li>
				<li><a href="#">..more awards</a></li>
			</ul>
		</div>
-->		
	</div>
</div>


EOHTML;


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