<?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";
  $pageKeywords = "orbit, bundles, third party, code, equinox, osgi, framework, runtime";

  # 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>Mission Statement</h2>
        <p>This project will provide a repository of bundled versions of third party
          libraries that are approved for use in one or more Eclipse projects. The
          repository will maintain old versions of such libraries to facilitate rebuilding
          historical output. It will also clearly indicate the status of the library
          (i.e., the approved scope of use). The repository will be structured such
          that the contained bundles are easily obtained and added to a developer's
        workspace or target platform.</p>
        <p>Read more in the <a href="overview.php">Orbit overview</a>.
        <p><b>Note:</b> The Orbit mandate does not allow the project to be used for building or
        maintaining third-party libraries that are not approved by the Eclipse foundation for use in
        Eclipse projects.</p>
      <h2>Getting Started and Getting Involved</h2>
      <p>Anyone is welcome to participate in Orbit.  Orbit committers are
      committers on other Eclipse projects -- since Orbit's mission is to provide third-party libraries
      as needed in other Eclipse projects.  If you want to become an Orbit committer (which includes the initial commit of
      a third party library, with correct OSGi manifest, and any on-going maintenance or bug fixes) then
      post a message on the
      <a href="mailto:orbit-dev@eclipse.org">Orbit mailing list</a>. Be sure to state which project you are already a
      committer on, in addition to which package you want to contribute and maintain.</p>
      <p>But you do not need to be a committer to participate. If you see a flaw in a Orbit bundle, open a
      bug, state the problem clearly, and preferably submit a patch with an explanation of how it fixes the problem.
      (In general, we can only fix what we contribute, if you find a bug in the third-party code itself, you can open a bug
      with that third-party project and is then a good idea to open an Orbit bug too, pointing to the third-party bug, so it will
      be clearer if/when someone might want to pickup up a fixed version of the library and add it to Orbit.</p>

  </div>

<?php
   include ("global-links.html");
?>

<?php
  $html = ob_get_clean();

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