<?php 
//ini_set("display_errors", "true");
//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();

       #*****************************************************************************
       #
       # poll2011name.php
       #
       # Author:            David Williams
       # Date:                     2010-04-07
       #
       # Description: Quick poll to get input for Helios +1 Sim. Release name. 
       #
       #
       #****************************************************************************
       
       #
       # Begin: page-specific settings.  Change these. 
       $pageTitle           = "Community Poll Runoff Vote";
       $pageKeywords = "Eclipse Simultaneous Release 2011";
       $pageAuthor          = "David Williams";
       $theme = "Nova";

ob_start();
?>            


<div id="maincontent" style="width: 90%; padding: 5%;">

              <h1><?= $pageTitle ?></h1>
                     <h2>Thanks for your help deciding the name for the 2012 Eclipse Simultaneous Release</h2>
	                     
                     <p>The results of the poll is now available, and pending approval from the EMO, the 2012 name will be <b>Juno</b>.</p> 
			                     
                     <p>
                                     <div style="padding: 10px; margin-left: 5%; margin-right: 5%;">
                                                 <p><b>Results: Runoff vote - What is your favorite name for the 2012 Simultaneous Release?</b></p>Juno: 47 %<br /><br />Jupiter: 34 %<br /><br />Jubilate: 0 %<br /><br />Jura: 4 %<br /><br />Juliet: 4 %<br /><br />Jules: 2 %<br /><br />Jasmine: 6 %<br /><br />Jason: 3 %<br /><br /><p><b>Total votes: </b>289</p>                           
                                     </div>
                      </p>
                     <p>Thanks for your vote. And your help with Eclipse!</p>              
                     
</div>

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

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


