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

       #*****************************************************************************
       #
       # poll.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 2016 (Vote 2)";
       $pageAuthor          = "Chris Aniszczyk";
       $theme = "solstice";

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

	   # Poll 1
	   $Poll = new Poll(12, "Vote: What is your favorite name for the 2016 Eclipse Simultaneous Release?");
	   $Poll->addOption(1, "N"); 
           $Poll->addOption(2, "Namaste");
	   $Poll->addOption(3, "Nandini");
	   $Poll->addOption(4, "Narwhal"); 
	   $Poll->addOption(5, "Narvi");
	   $Poll->addOption(6, "Neon");
	   $Poll->addOption(7, "Neumond");
	   $Poll->addOption(8, "Nickel");
	   $Poll->addOption(9, "Nirvana");
           $Poll->addOption(10, "Noir");
           $Poll->addOption(11, "Nomad");
           $Poll->addOption(12, "Number 2016");

	   # $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 2016 Eclipse Simultaneous Release!</h2>
	
	                     <p>There will be an Eclipse Simultaneous Release on the fourth Wednesday of
	                     June, 2016. But what to call it? Please vote, for your favorite name for the 2016
	                     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=453927">bug
	                     453927</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!</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);
	?>

