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

	#*****************************************************************************
	#
	# index.php (/membership)
	#
	# Author: 		Nathan Gervais
	# Date:			2008-10-01
	#
	# Description: Membership Landing Page
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Membership";
	$pageKeywords	= "eclipse membership, become a member, membership faq, membership explre";
	$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.
	$root = $_SERVER['DOCUMENT_ROOT'];
	//include ('scripts/whatsnew.php');
	//$whatsnew = rss_to_html('whatsnew');			
	# Paste your HTML content between the EOHTML markers!	
	
	ob_start();
	?>
<link rel="stylesheet" type="text/css" href="new.css" media="screen" />
<div id="widecontainer">
	<div id="infoDiv"><br/><br/>
		<h1><?=$pageTitle;?></h1>
		<p> The Eclipse Foundation is supported by its member organizations.   You do not have to be a 
		member to use the Eclipse technology or participate in an Eclipse open source project.  Member 
		organizations typically have or use Eclipse to build products and services that they offer to 
		the community. 
		</p>
	</div>
	<br/>
	<div id="buttons">
		<a href="exploreMembership.php">
			<div id="become" class="button">
				<p class="heading">Become a Member</p>
				<p class="subText">Join the Eclipse Foundation and Influence the Future</p>
			</div>
		</a>
		<a href="become_a_member/">			
			<div id="explore" class="button">
				<p class="heading">Explore the Membership</p>
				<p class="subText">Learn more about the products and services provided by the Eclipse Membership</p>
			</div>
		</a>		
		<a href="faq/">
			<div id="faq" class="button">
				<p class="heading">Membership FAQs</p>
				<p class="subText">Answers to questions frequently asked by, and about, membership</p>
			</div>
		</a>
	</div>
	<br/><br/><br/><br/>
</div>
	<?
	$html = ob_get_clean(); 
	$html = mb_convert_encoding($html, "HTML-ENTITIES", "auto");
	# Generate the web page
	$App->generatePage($theme, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>

