<?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'
/*******************************************************************************
 * Copyright (c) 2009-2010 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    
 *******************************************************************************/

	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org - Juno Simultaneous Release : Friends of Eclipse";
	$pageKeywords	= "juno, release, simultaneous, release train, eclipse 4, e4";
	$pageAuthor		= "Christopher Guindon";
		
	include_once 'includes/app.php';
	
	# Paste your HTML content between the EOHTML markers!	
	ob_start();
	?>
	<div id="fullcolumn" class="juno friends">
		<h1><?php print($pageTitle);?></h1>
		<a href="/juno/"><img id="junoLogo" src="/juno/images/juno-logo.png"/></a>
		<div id="container">	
			<?php include_once('includes/nav.php');?>			
			<div id="window">				
				<div id="main">					
					<h2>Friends of Eclipse</h2>
					<p>Millions of people use Eclipse. <a href="/donate/">Friends of Eclipse</a> allows you to contribute back to the Eclipse community.   To celebrate the upcoming Juno Release Train we want to recruit 444 new Friends of Eclipse.</p>
					<p>For a US$35 contribution, you can become a Friend of Eclipse.  As a special thank you, Friends will get early access to the <a href="/juno/">Juno release</a>, direct from the download server at the Eclipse Foundation.  Your contribution will also help support the Eclipse community.</p>					
					<div class="spacing">
						<a class="btn-donate" href="/donate"><img src='images/icons/star.png'/><span>Donate Now!</span></a>
						<?php include('includes/progress-bar.php');?>	
					</div>		
					<p class="legal">
						[1] Friends of Eclipse get special access to the Eclipse Foundation download server.  This server will be available to Friends of Eclipse while the download packages are being synchronized to our mirrors.  This typically means the packages will be available up to 24 hrs before everyone else.   The Eclipse Foundation will also be dedicating extra bandwidth to this download server, so Friends should experience a faster download.
					</p>				
				</div>
				<?php include_once('includes/sidebar-2.php');?>	
			</div>
		</div>
	</div>
	<?php include_once('includes/footer.php');?>
	<?
	$html = ob_get_clean();
	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link type="text/css" href="/juno/style.css" rel="stylesheet"/>');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
