<?php  		error_reporting(E_ALL);																												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'

	#*****************************************************************************
	#
	# sample_3col.php
	#
	# Author: 		Denis Roy
	# Date:			2005-11-07
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Helios Reviews";
	$pageKeywords	= "eclipse, helios, review, blog, blogathon, contest";
	$pageAuthor		= "Lynn Gayowski";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
	require_once("scripts/review.php");	
	# Paste your HTML content between the EOHTML markers!	
	ob_start();
	?>	  
	<script src="/home/scripts/functions.js" type="text/javascript" language="javascript"></script>

<div id="maincontent">
	<div id="fullcolumn">
	<div id="midcolumn">
		<link rel="stylesheet" type="text/css" href="layout.css" media="screen" />

		<h1><?=$pageTitle;?></h1>
		
		<p>
			Members of the Eclipse community are invited to write a review of the
			<a href="http://eclipse.org/helios/projects.php">Eclipse projects</a> being released as part of Helios
			and to publish the review on a blog, newsgroup or portal.  Following is a list of links to the
			reviews that have been submitted to the blogathon.	
		</p>
		
		<p><a href="guidelines.php">See details on the Helios Blogathon</a></p>

		<table  cellpadding="3" cellspacing="0" width="100%">
			<tr bgcolor=#b599e4>
				<td><font color="#ffffff"><strong>Link</strong></font></td>
				<td><font color="#ffffff"><strong>Author</strong></font></td>
				<td><font color="#ffffff"><strong>Date</strong></font></td>
				<td><font color="#ffffff"><strong>Language</strong></font></td>
			</tr>
		
 	<? 
       	$reviewsCatalog = $reviewsParser->reviewsCatalog;
        $counter = count($reviewsCatalog);
        $i =0;
       	while ($i < $counter)
       	{
       		$title = mb_convert_encoding(trim(htmlspecialchars($reviewsCatalog[$i][0])), "HTML-ENTITIES", "auto");
       		$link = mb_convert_encoding($reviewsCatalog[$i][1], "HTML-ENTITIES", "auto");
       		$author = mb_convert_encoding($reviewsCatalog[$i][2], "HTML-ENTITIES", "auto");
       		$date = mb_convert_encoding($reviewsCatalog[$i][3], "HTML-ENTITIES", "auto");
       		$language = mb_convert_encoding($reviewsCatalog[$i][4], "HTML-ENTITIES", "auto");
			$shortDesc = mb_convert_encoding($reviewsCatalog[$i][5], "HTML-ENTITIES", "auto");
       		?>
		       		<tr>
						<td>
							<div class="invisible" id="<?=$title;?>"><a name="<?=$title;?>" class="norgie" onClick="t('<?=$title;?>','<?=$title;?>a')"></a>
								<a target="_blank" href="<?=$link;?>"><?=$title;?></a>
							</div>
						</td>
						<td><?=$author;?></td>
						<td><?=$date;?></td>
						<td><?=$language;?></td>
					</tr>
					<tr class="bottomBorder">
						<td colspan="4">
							<div class="invisible" id="<?=$title;?>a">
								<div class="item_contents">
								<?=$shortDesc;?>
								</div>
							</div>
						</td>
					</tr>
				
	
		<? 
		$i++;
       	}
        ?>        
       					
		</table>

	</div>
	</div>

	<!-- remove the entire <div> tag to omit the right column!  -->

	
	</div>

	<? 
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage("Nova", $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
