<?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 : Projects";
	$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 projects">
		<h1><?php print($pageTitle);?></h1>
		<a href="/juno/"><img id="junoLogo" src="/juno/images/juno-logo.png"/></a>
		<div id="container">	
			<?php include_once('includes/nav.php');?>			
			<div id="window">
				<?php include_once('includes/sidebar-1.php');?>	
				<div id="main">			
					<table class="projects ">
						<thead>
							<tr>
								<td class="td_name textshadow darkbg">Project Name</td>
								<td class="td_version textshadow darkbg">Version</td>
								<td class="td_download textshadow darkbg">Download</td>
							</tr>	
						</thead>		
					</table>
					<div class="content-scroll">
					<table class="projects" cellpadding="2" cellspacing="2">
						<tfoot>
							<tr">							
							<td id="td_count" colspan="3">Project count : <?php print $number_projects;?></td>
						</tr>
						</tfoot>
						<?php 
						$count = 0;
						$new = 0;
						if(is_array($projects)){
							foreach ($projects as $project) {
							/* var Project $project */	
								$projectName = $project->getName();
								$projectid = $project->getId();
								$download = $project->getDownloadsUrl();
								if ($download) $download = "<a href=\"$download\"><img src=\"$images->download_small\"/></a>";
								$url = $project->getProjectUrl();
								$info = $project->getSimultaneousReleaseInfo($release);
								if (!$info) continue;
		
								if ($info->isNew()) {
									$projectName = "$projectName [new]";
									$new++;
								}
							
								$versions = array();
								foreach($info->getReleases() as $projectRelease) {
									if ($projectRelease->getName()) $versions[] = $projectRelease->getName();
								}
							
								$version = implode(', ', $versions);
								$version = preg_replace('/ /', '&nbsp;', $version);
		
								$count++;

								print "<tr>
											<td class=\"td_name\"><a href=\"$url\">$projectName</a>  <a href=\"http://www.eclipse.org/projects/project.php?id=$projectid\" class=\"gear_link\">Project information</a></td>
											<td class=\"td_version\">$version</td>
											<td class=\"td_download\">$download</td>
										</tr>";
							}//end foreach
						
						}
						?>
				</table>
			</div>				
		</div>	
			</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"/>');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
