<?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: Christopher Guindon (Eclipse Foundation)
 * Nathan Gervais (Eclipse Foundation)
 *    
 *******************************************************************************/
	require_once 'includes/friendsFunctions.php';
	$progress = (getWantedCount()*100)/1000;
	$friend_count = getWantedCount();
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org - Kelper Simultaneous Release : Highlights";
	$pageKeywords	= "eclipse kepler, release, simultaneous, release train, kepler";
	$pageAuthor		= "Christopher Guindon";
	
	# Paste your HTML content between the EOHTML markers!	
	
	ob_start();	
	?>
	<div id="fullcolumn" class="kepler subpage friends">
		<ul id="mainmenu" class="no_bullets">
			<li id="item_downloads"><a href="http://www.eclipse.org/downloads/index-developer.php?release=kepler"><span class="icon"></span><span class="caption">Downloads</span></a></li>
			<li id="item_highlights"><a href="/kepler/"><span class="icon"></span><span class="caption">Highlights</span></a></li>
			<li id="item_projects"><a href="/kepler/projects.php"><span class="icon"></span><span class="caption">Projects</span></a></li>
			<li id="item_democamps"><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Kepler_2013"><span class="icon"></span><span class="caption">DemoCamps</span></a></li>
			<li id="item_friends" class="active"><a href="/kepler/friends.php"><span class="icon"></span><span class="caption">Friends of Kepler</span></a></li>
		</ul>
		<p id="release-date">June 26, 2013</p>
		<a href="/kepler/kepler.php" class="info-button">Who is Kepler?</a>
		<div id="page-right">
			<div class="page-container">				
				<h2 id="h2_friends">Friends of Kepler</h2>
				<div id="friend-scale" class="<?php print ($progress <= 50) ? 'scale-normal' : 'scale-invert'; ?>">
					<div id="friend-scale-level" style="width: <?php print $progress;?>%;"></div>
					<div id="friend-scale-count"><?php print $friend_count;?>/1000 Friends</div>
				</div>
				<ul id="ul_donorList" class="clearfix no_bullets">
					<?php sideDonorList(10);?> 
				</ul>
				<a class="button-more button" href="/donate/donorlist.php?showAll=0" style="padding-left:0;">More</a>	
				<h2 id="h2_join">Join now!</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="/kepler/">Kepler release</a>, direct from the download server at the Eclipse Foundation.  Your contribution will also help support the Eclipse community.</p>					
				<p class="center"><a href="/donate/" class="button bigger">Donate Now</a></p>	
				<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>
		</div>
	
	</div>
	<?
	$html = ob_get_clean();
	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link href="http://fonts.googleapis.com/css?family=EB+Garamond" rel="stylesheet" type="text/css"/>');
	$App->AddExtraHtmlHeader('<link type="text/css" href="/kepler/css/styles.min.css" rel="stylesheet"/>');	
	$App->AddExtraHtmlHeader('<!--[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);
?>
