<?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();  
$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">
        <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.</p>
  </div>

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