<?php
  $theme = "solstice";
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();
$Nav  = NULL;
$Menu   = new Menu();
include($App->getProjectCommon());

  #*****************************************************************************
  #
  #
  #****************************************************************************

  #
  # Begin: page-specific settings.  Change these.
  $pageTitle     = "Orbit Documents";
  $pageKeywords  = "Orbit, bundles, documents";

  # 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", 3);
  # $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

  # End: page-specific settings
  #

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

  <div id="midcolumn">
    <h1><?= $pageTitle ?></h1>

      <h2>Documents</h2>
        <ul>
          <li><a href="RCP_Chapter20.pdf"><i>Integrating Code Libraries</i></a> A chapter from the <a href="http://eclipsercp.org">Eclipse RCP book</a>.</li>
          <li><a href="http://eclipse.org/proposals/orbit/">The original Orbit project proposal.</a></li>
        </ul>

      <h2>Meeting Minutes</h2>
        <ul>
        <li> <a href="http://wiki.eclipse.org/index.php/Orbit#Meeting_minutes">Meeting Minutes are on the Orbit Wiki.</a></li>
      </ul>

      <h2>Related Documents</h2>
        <ul>
        <li> <a href="http://osgi.org/osgi_technology/download_specs.asp?section=2">OSGi specifications</a></li>
      </ul>
  </div>

<?php
  include ("https://www.eclipse.org/orbit/global-links.html");

  $html = ob_get_contents();
  ob_end_clean();

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