<?php
/**
 * Copyright (c) 2005-2015, 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Eclipse Foundation - initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="midcolumn">
  <h1><?php print $pageTitle; ?></h1>
  <p>Each year, the Eclipse Foundation holds elections for board members representing two very
    important groups within the Eclipse membership: the committers and the Sustaining Members
    (Solutions Members and Enterprise Members). The terms of office for these elected board members
    is one year, commencing April 1.</p>
  <div class="homeitem3col">
    <h3>
      <a name="Dates"></a>Key Dates
    </h3>
    The $year elections have ended. The key dates are retained below for informational purposes.</p>
    
    <ul>
      <li>January 6, <?php print $year; ?>: Nominations open. Nominations are to be sent as an email to <a
        href="mailto:elections@eclipse.org"
      >elections@eclipse.org</a>, with the subject "Sustaining Member Nomination" or "Committer
        Nomination." As soon as possible after an individual is nominated, the Foundation will
        contact the nominee to confirm their willingness to participate in the election and to serve
        if elected.
      </li>
      <li>January 31, <?php print $year; ?>: Nominations close. The list of nominees and their HTML pages will be available on the
    eclipse.org website as soon as possible thereafter. Each nominee will be provided with an
    HTML template that outlines their background and vision for Eclipse as they are nominated. If the nominee
    does not have an HTML editor handy, plain text submissions for formatting by the EMO staff will be accepted
    via email.
    </li>
      <li>February 3, <?php print $year; ?>: List of nominees made available on www.eclipse.org.
      <li>February 5, <?php print $year; ?>: Deadline for nominees to return their content to <a
        href="mailto:elections@eclipse.org"
      >elections@eclipse.org</a>.
      </li>
      
      <li>February 7, <?php print $year; ?>: Individual candidate pages ready for candidate review.</li>
      <li>February 11, <?php print $year; ?>: Candidate personal pages made available on www.eclipse.org.
    Discussion of the issues on the eclipse.foundation forum will be encouraged.
    </li>
      <li>February 12, <?php print $year; ?>: Voting begins.</li>
      <li>March 3, <?php print $year; ?>: Voting ends at 3pm Eastern time. </li>
      <li>March 10, <?php print $year; ?>: New representatives announced.</li>
    </ul>
  </div>
</div>
<div id="rightcolumn">
  <div class="sideitem">
    <h6>Quick Links</h6>
    <ul>
      <li><a href=".">Election Home</a></li>
      <li><a href="nominees.php">Candidates</a></li>
      <li><a href="keydates.php">Key Dates</a></li>
      <li><a href="election_process.php">Election Process</a></li>
    </ul>
  </div>
</div>
