<?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";
		
	# Paste your HTML content between the EOHTML markers!	
	ob_start();
	?>
	<div id="fullcolumn" class="indigo">
		<a href="/indigo/"><img id="indigoLogo" src="/indigo/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"><a href="/friends/friends.php">The Indigo 500</a></li>
				</ul>
			</div>
			<div id="window">
			<div class="whiteout"><p class="bang"><img class="bang" src="/indigo/images/bang.png"/></p>
			<p class="indigo">Indigo is the annual release of Eclipse projects on June&nbsp;22&nbsp;2011; <br/>this year 62 project teams are part of the release.</p> 
					</div>
				<h4 class="highlights">Highlights</h4>
				<ul id="ticker"></ul>
				<ul id="hide"></ul>
			
				<span class="train"><a style="color:#FFF;" href="/home">Click here to continue to Eclipse.org</a> </p></span>
			</div>
		</div>
	</div>
	
	<script>
	var t = 0;
	var s = 4;
	var interval = 5000;
	var c = 0;
	$.getJSON('/indigo/highlights.php', function (data) {
		var ul = $('<ul/>');
		var tul = $('<ul/>');
		$.each(data, function(key, val) {
			c++;
			if (c <= s) {
				$('<li/>', { html: val, }).appendTo(tul);
			}
			$('<li/>', { text: val, }).appendTo(ul);
		});
		
		$('#hide').append(ul.contents());
		$('#ticker').append(tul.contents());
	})
	.error(function() { alert('invalid'); }
	);
	t = setTimeout(tick, interval);
	function tick() {
		smoothAdd('ticker',$('#hide li:last').text());
		$('#hide').prepend($('#hide li:last'));
				
		t = setTimeout(tick, interval);
	}
	</script>
		
	
	<?
	$html = ob_get_clean();

	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>');
	$App->AddExtraHtmlHeader('<script type="text/javascript" src="/indigo/scripts/smooth-add.js"></script>');
	$App->AddExtraHtmlHeader('<link type="text/css" href="/indigo/style.css" rel="stylesheet"/>');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
