<?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">
		<?php include_once('includes/header.php');?>
		<div id="container">	
			<?php include_once('includes/nav.php');?>			
			<div id="window">				
				<div id="main">					
					<h2>Friends of Juno</h2>
					<p>Everyday millions of people use Eclipse. <a href="/donate/">Friends of Eclipse</a> allows you to contribute back to the Eclipse community.</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>Join 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"/><!--[if IE 7]> <link rel="stylesheet" type="text/css" href="/home/content/ie7_nova.css" media="screen"/> <![endif]-->');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
