<?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();

       #*****************************************************************************
       #
       # poll2014.php
       #
       # Author:                   Chris Aniszczyk
       # Date:                     2014-01-28
       #
       # Description: Quick poll to get input for Luna +1 Sim. Release name. 
       #
       #
       #****************************************************************************
       
       #
       # Begin: page-specific settings.  Change these. 
       $pageTitle           = "Community Poll Vote";
       $pageKeywords = "Eclipse Simultaneous Release 2015";
       $pageAuthor          = "Chris Aniszczyk";
       $theme = "Nova";

	   # Polls are good for 3 months!
	   $App->usePolls();

	   # Poll 1
	   $Poll = new Poll(10, "Vote: What is your favorite name for the 2015 Eclipse Simultaneous Release?");
	   $Poll->addOption(1, "Magellan"); 
           $Poll->addOption(2, "Mandelbrot");
	   $Poll->addOption(3, "Mars");
	   $Poll->addOption(4, "Mercury"); 
	   $Poll->addOption(5, "Meridian");
	   $Poll->addOption(6, "Metis");
	   $Poll->addOption(7, "Mira");
	   $Poll->addOption(8, "Mimas");
	   $Poll->addOption(9, "Mithril");
	   $Poll->noGraph();  # uncomment to disable bar graph
	   $pollHTML = $Poll->getHTML();

	   $Poll->requireLogin(); # no anonymous votes

	       # Paste your HTML content between the markers!   
	ob_start();
	?>            


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

	              <h1><?= $pageTitle ?></h1>
	                     <h2>Help decide the name for the 2015 Eclipse Simultaneous Release!</h2>
	
	                     <p>There will be an Eclipse Simultaneous Release on the fourth Wednesday of
	                     June, 2015. But what to call it? Please vote, for your favorite name for the 2015
	                     release. Remember, the simultaneous release name is an informal <i>marketing name</i>. It
	                     should be recognizable, pronounceable, relatively distinct and not obvious
	                     to confuse with other software or trademarks. Be sure to
	                     consider how it sounds in context, such as...</p>
						
						<p>
	                      <i>"Hey, go download the <b>Eclipse xyz Release</b> and see all the cool stuff in there!"</i>
						</p>

	                     <p>The following list was arrived at with input from the community (see
	                     <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422883">bug
	                     422883</a>) and discussions inside the Eclipse Planning Council.</p>

	                            <div style="padding: 5px; margin-left: 1%; margin-right: 1%;">
	                            <?= $pollHTML ?>
	                            </div>

	                     <p>Thanks for your vote and your help with Eclipse! The poll will open until Jan 15th.</p>              

	                     <p><b>Note: The Planning Council reserves the right to make the final decision, in case some
	                     popularly voted item is later found to be unsuitable for some reason.</b><p>

	                     <p>Current time: <?php echo date("d/m/y : H:i (T)", time()); ?></p>

	</div>

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

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

