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

  #*****************************************************************************
  #
  #
  #****************************************************************************
  
  #
  # 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();

  $Nav->setLinkList( array() );
  $Nav->addNavSeparator( "Orbit", "/orbit" );
  $Nav->addCustomNav( "About This Project",
    "/projects/project_summary.php?projectid=tools.orbit", "", 1  );


?>    

  <div id="midcolumn">
    <h1><?= $pageTitle ?></h1>
      <p class=bar>Mission Statement</p>
        <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>

      <p class=bar>Getting Started and Getting Involved</p>
      <p>Anyone is welcome to participate in Orbit.  For the most part the Orbit committers are 
      also committers on other Eclipse projects since Orbit's mission is to provide third-party libraries
      as needed in other Eclipse projects.  However, if you want to help out a project by 
      bundling a library that they need (and have approved), please post a message on the 
      <a href="mailto:orbit-dev@eclipse.org">Orbit</a> mailing list.</p>

  </div>

<?php
  include $_SERVER['DOCUMENT_ROOT'] . "/orbit/global-links.html";
  include "dir-links.html";
?>

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