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

  #*****************************************************************************
  #
  # sample_3col.php
  #
  # Author:     Denis Roy
  # Date:      2005-11-07
  #
  # Description: Type your page comments here - these are not sent to the browser
  #
  #
  #****************************************************************************

  #
  # Begin: page-specific settings.  Change these.
  $pageTitle     = "Meeting Minutes";
  $pageKeywords  = "foundation, minutes, legal";
  $pageAuthor    = "Mike Milinkovich, Nov 24, 2005";

  # 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
  #

  # Paste your HTML content between the EOHTML markers!
  $html = <<<EOHTML

  <div id="midcolumn">
    <h1><a name="top">$pageTitle</a></h1>
        <ul>
      <li><a href="#board">Board of Directors Meetings</a></li>
      <li><a href="#members">Members Meetings</a></li>
      <li><a href="#councils">Council Meetings</a></li>
      <li><a href="minutes_archive.php">Meeting minutes archive</a> (for older content)</li>
    </ul>

    <div class="homeitem3col">
      <h3><a name="board">Board of Directors Meetings</a></h3>
      <ul>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_12_13_Minutes.pdf">December 13, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_10_23_Minutes.pdf">October 23, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_09_20_Minutes.pdf">September 20, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_08_16_Minutes.pdf">August 16, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_06_13-14_Minutes.pdf">June 13-14, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_05_17_Minutes.pdf">May 17, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_04_19_Minutes.pdf">April 19, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_03_21_Minutes.pdf">March 21, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2017_02_15_Minutes.pdf">February 15, 2017 (pdf)</a> </li>
              <li>Abridged Minutes
                - <a href="boardminutes/2017_01_18_Minutes.pdf">January 18, 2017 (pdf)</a> </li>
        <li>Abridged Minutes
                - <a href="boardminutes/2016_12_14_Minutes.pdf">December 12, 2016 (pdf)</a> </li>
              <li>Abridged Minutes
                - <a href="boardminutes/2016_10_24_Minutes.pdf">October 24, 2016 (pdf)</a> </li>
              <li>Abridged Minutes
                - <a href="boardminutes/2016_09_21_Minutes.pdf">September 21, 2016 (pdf)</a> </li>

                <!-- <img src="../../images/new.gif" alt="new"> --> </li>

            </ul>

    Abridged minutes for older board meetings can be found in the <a href="minutes_archive.php#board">minutes archive</a>.

    </div>
    <div class="homeitem3col">
      <h3><a name="members">Members Meetings</a></h3>

    <p>The minutes for Members meetings after June, 2008 are hosted on <a target="_memonly" href="https://dev.eclipse.org/members-only/index.php">members only content page.</a></p>

    <p>Minutes for Members meetings prior to June, 2008 can be found in the <a href="minutes_archive.php#members">minutes archive</a>.</p>

    </div>
  <div class="homeitem3col">
      <h3><a name="councils">Council Meetings</a></h3>
      <ul>
           <li><a href="council.php">Council Meeting minutes are categorized on the council page.</a></li>
       </ul>
    </div>

  </div>

EOHTML;


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