<?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!	
	$donarList = sideDonorList(10);
	ob_start();	
	?>
	<div id="fullcolumn" class="kepler subpage friends">
		<ul id="mainmenu" class="no_bullets">
			<li id="item_downloads"><a href="/downloads/"><span class="icon"></span><span class="caption">Downloads</span></a></li>
			<li id="item_highlights"><a href="/kepler/highlights.php"><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>
		
		<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>
				<?php print ($donarList != "") ? '<ul id="ul_donorList" class="clearfix no_bullets">' . $donarList . '</ul>' : '';?>
				<a class="button-more button" href="/donate/donorlist.php?showAll=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.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);
?>
