<?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 - Indigo Simultaneous Release";
	$pageKeywords	= "indigo, release, simultaneous, release train, 3.7";
	$pageAuthor		= "Nathan Gervais";
	include('scripts/friendsFunctions.php');		
	# Paste your HTML content between the EOHTML markers!	
	ob_start();
	?>
	<div id="fullcolumn" class="indigo">
		<a href="/indigo"><img id="indigoLogo" src="images/indigologo.png"/></a>
		<div id="container">
		
			<div id="nav">
				<ul>
					<li><a href="/downloads/">Downloads</a></li>
					<li><a href="/indigo/projects.php">Projects</a></li>
					<li><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011">DemoCamps</a></li>					
					<li class="last active"><a href="/indigo/friends.php">The Indigo 500</a></li>
				</ul>
			</div>
			<div id="window">
				<div class="wantedDesc main">
					<h1 class="wanted">The Indigo 500</h1>
					<div class="wrapper">
						<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 Indigo Release Train we want to recruit 500 new Friends of Eclipse.</p>
					</div>
					<div class="wrapper">
						<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="/indigo/">Indigo release</a>, direct from the download server at the Eclipse Foundation.  Your contribution will also help support the Eclipse community.</p>
					</div>
					<div class="wrapper spacing">
						<div class="star"><img src='images/icons/star.png'/></div>	
						<a class="donate" href="/donate">Donate Now!</a>
					</div>
					<div class="progressBar">
						<div class="progress" style="width:<?=round(getWantedCount() * (980/500));?>px">&nbsp;</div>
						<div class="counter"><span class="active"><?=getWantedCount();?></span> / 500 friends recruited.</div>
					</div>				

				</div>
				<div class="wantedDesc recent">					
					<h3>Recent Friends</h3>
					<ul class="donorList clearfix"><?=sideDonorList(8);?></ul>
					<div class="more"><a href="/donate/donorlist.php?showAll=0">More</a></div>
				</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>
		</div>
	</div>
	<?
	$html = ob_get_clean();

	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link type="text/css" href="/indigo/style.css" rel="stylesheet"/>');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
