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

	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Markus Knauer
	# Date:			2007-02-20
	#
	# Description: Download page of the Eclipse Packaging Project
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these.
	$theme = ""; 
	$pageTitle 		    = "EPP Nightly Package Builds";
	$pageKeywords	    = "eclipse, download, galileo, helios, ganymede, europa, packages, packaging, tools, nightly";
	$pageAuthor		    = "Markus Knauer";

$downloadBasePath = $App->getDownloadBasePath();
$statusContent36 = getEPPStatusContent($App->getDownloadBasePath().'/technology/epp/downloads/testing/status36.stub');
$statusContentIndigo = getEPPStatusContent($App->getDownloadBasePath().'/technology/epp/downloads/testing/statusIndigo.stub');

function getEPPStatusContent($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}
	
	# 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 EOHTML markers!	
	$html = <<<EOHTML

<div id="maincontent">


<!-- MIDCOLUMN START -->
<div id="midcolumn">

<h1>$pageTitle</h1>

<p>If you are looking for Indigo milestone and release candidate package builds, you will find these
on the <a href="http://www.eclipse.org/downloads/packages/">EPP Download Packages</a> 
page. This page contains the nightly builds only.</p>

<div class="homeitem3col">
<h3>Eclipse Indigo Nightly Builds</h3>

<ul>
 <li>EPP p2 repository build: 
     <a href="https://hudson.eclipse.org/hudson/view/Repository%20Aggregation/job/indigo.epp-repository-build/">indigo.epp-repository-build</a></li>
 <li>EPP packages build: 
     <a href="https://hudson.eclipse.org/hudson/view/Repository%20Aggregation/job/indigo.epp-package-build/">indigo.epp-package-build</a></li>
 <li>Build server download directory:
     <a href="http://build.eclipse.org/technology/epp/epp_build/indigo/download/">build.eclipse.org/.../download</a></li>
 <li>
    Eclipse Platform 3.7 Repository - http://download.eclipse.org/eclipse/updates/3.7milestones/<br>
    Indigo Staging Repository - http://download.eclipse.org/releases/staging/<br>
    EPP Packages Repository - http://download.eclipse.org/technology/epp/packages/indigo/
 </li>
</ul>

<table border="1">
<tr>
  <th>Build ID (GMT)</th>
  <th>CPP</th>
  <th>Java</th>
  <th>JavaScript</th>
  <th>JEE</th>
  <th>LinuxDev</th>
  <th>Modeling</th>
  <th>Parallel</th>
  <th>PHP</th>
  <th>Pulsar</th>
  <th>RCP</th>
  <th>Reporting</th>
</tr>
$statusContentIndigo
</table>
</div>

<hr class="clearer" />

<div class="homeitem3col">
<h3>Eclipse Helios Nightly Builds</h3>

<ul>
 <li>Eclipse Platform 3.6 - http://download.eclipse.org/eclipse/updates/3.6milestones/</li>
 <li>Helios Staging Update Site - http://download.eclipse.org/releases/staging/</li>
 <li>EPP Packages Repository - http://download.eclipse.org/technology/epp/packages/helios/</li>
<ul>

<table border="1">
<tr>
  <th>Build ID (GMT)</th>
  <th>CPP</th>
  <th>Java</th>
  <th>JavaScript</th>
  <th>JEE</th>
  <th>LinuxDev</th>
  <th>Modeling</th>
  <th>PHP</th>
  <th>Pulsar</th>
  <th>RCP</th>
  <th>Reporting</th>
  <th>SOA</th>
</tr>
$statusContent36
</table>
</div>

<hr class="clearer" />

</div>
<!-- MIDCOLUMN END -->

<!-- RIGHTCOLUMN START -->
<div id="rightcolumn">
<div class="sideitem">
<h6>Other downloads</h6>
<ul>
  <li><a href="/downloads">EPP Release Builds</a></li>
  <li><a href="http://www.eclipse.org/downloads/packages/">EPP Milestone Builds</a></li>
  <li><a href="http://download.eclipse.org/eclipse/">Eclipse Platform Downloads</a></li>
</ul>
</div>
<div class="sideitem">
<h6>EPP Links</h6>
<ul>
  <li><a href="https://build.eclipse.org/hudson/job/epp-package-build/">EPP Package Build</a></li>
  <li><a href="https://build.eclipse.org/hudson/job/epp-repository-build/">EPP Repository Build</a></li>
  <li><a href="http://wiki.eclipse.org/EPP/Galileo_Packages">EPP Build Description</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Helios Links</h6>
<ul>
  <li><a href="http://wiki.eclipse.org/Helios">Helios Wiki Page</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Galileo Links</h6>
<ul>
  <li><a href="https://build.eclipse.org/hudson/view/Galileo/">Galileo Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Galileo">Galileo Wiki Page</a></li>
  <li><a href="http://download.eclipse.org/releases/staging/">Galileo Staging</a></li>
  <li><a href="http://download.eclipse.org/releases/galileo/">Galileo Milestones</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Ganymede Links</h6>
<ul>
  <li><a href="http://build.eclipse.org/ganymede/">Ganymede Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Ganymede_Simultaneous_Release">Ganymede Wiki Page</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Europa Links</h6>
<ul>
  <li><a href="http://dash.eclipse.org/~bfreeman/europa/">Europa Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Europa_Simultaneous_Release">Europa Wiki Page</a></li>
</ul>
</div>
</div>
<!-- RIGHTCOLUMN END -->

</div>

EOHTML;


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