<?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'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Blogathon for the Eclipse Galileo Release";
	$pageKeywords	= "eclipse, galileo, release, review, 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
	#
	// This file is linked to from lots of different places.
	// Use absolute paths to make sure that we can actually test
	// that the file renders properly (i.e. testing using) "/index.php",
	// and "/home/index.php" both work.

	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>

		<p>
		The Eclipse Foundation wants to hear what you think of the <a href="http://wiki.eclipse.org/Galileo#Projects">Eclipse
      	projects</a> that are being released as part of Galileo.  As an added bonus, all qualified reviewers
      	will receive a thank you gift. One lucky winner will also win a pass to
      	<a href="http://www.eclipsecon.org">EclipseCon 2010</a> or
      	<a href="http://www.eclipsecon.org/summiteurope2009/">Eclipse Summit Europe 2009</a>!
      	Entries must be received by <b>July 31</b>, 2009 at 4:00 pm EST.
      	</p>
	
		<h3>Receive a Thank You</h3>
		<ul>
		<li>Best review: Full pass to <a href="http://www.eclipsecon.org">EclipseCon 2010</a> or
      	<a href="http://www.eclipsecon.org/summiteurope2009/">Eclipse Summit Europe 2009</a></li>
		<li>3 top reviews: Eclipse jacket</li>
		<li>All other qualified reviews get a choice of:
			<ul>
				<li><a href="http://www.eclipse.org/donate/">Friend of Eclipse</a> membership with access to the Friends mirror site</li>
				<li><a href="http://www.zazzle.com/eclipseide">Eclipse t-shirt</a> printed with a message customized by you</li>
				<li>Golf shirt embroidered with the Eclipse logo</li>
			</ul>
		</li>
		</ul>	
		
		<a href="http://www.eclipse.org/donate/"><img src="http://www.eclipse.org/donate/images/friendslogo.jpg"  width="142" height="75" border="0" halign="center" style="padding-right: 25px;"></a>
		<a href="http://www.zazzle.com/eclipseide"><img src="GalileoShirt.png" width="73" height="75" border="0" halign="center" style="padding-right: 25px;"></a>
		<img src="GolfShirt.png" width="60" height="75" border="0" halign="center" style="padding-right: 25px;"></a>
		
		<p>
		The best and top reviews will be selected by a panel of judges.
		</p>
		
		<p style="font-size:10px">Prizes have no cash value and quantities are limited.
		The full pass to EclipseCon or Eclipse Summit Europe only covers conference registration and does not 
 		include travel expenses. The pass is non-transferable and non-refundable, so if you can't go to either
 		conference or you receive a free pass some other way (as a speaker, for example), 
 		you won't be able to take advantage of the prize.</font>
 		</p>

		<h3>Review Guidelines</h3>
		<ul>
		<li>A review will be eligible for a prize if it conveys sufficient technical content.</li>
		<li>Three to five points of what you like or don't like about one or more Galileo	projects should be enough. Long
		essays aren't necessary.</li>
		<li>Eclipse is a global community, so feel free to write a review in your native language.</li>
		</ul>
	
		<h3>Entry Instructions</h3>
		<ul>
		<li>Publish your review on your blog, a newsgroup, or portal such as <a href="http://www.eclipsezone.com"
		target="blank">EclipseZone</a>, <a href="http://www.javalobby.com" target="blank">Javalobby</a>,
		<a href="http://www.theserverside.com" target="blank">The ServerSide</a>, <a href="http://www.infoq.com"
		target="blank">InfoQ</a> or other technology portal</li>
		<li>Send your name and the link to your review to <a href="mailto:galileo-reviews@eclipse.org">galileo-reviews@eclipse.org</a></li>
		</ul>
		
		<p>
		Individuals are allowed to submit multiple entries, but only one prize per person will be awarded.
		</p>
		
		<h3>Questions?</h3>
		<p>
		<a href="mailto:galileo-reviews@eclipse.org">galileo-reviews@eclipse.org</a>
		</p>
		
		<br><br>
				
	</div>

	<!-- remove the entire <div> tag to omit the right column!  -->
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
				<li><a href="reviews.php">Submitted Reviews</a></li>
			</ul>
		</div>
	</div>	
	
</div>

	
EOHTML;


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