<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
if (basename ( __FILE__ ) == basename ( $_SERVER ['PHP_SELF'] )) {
  exit ();
}
?>

<div id="fullcolumn">
  <div id="midcolumn">
    <h1><?php print $pageTitle;?></h1>
    <h2>Current releases</h2>
    <ul>
      <li><a href="http://help.eclipse.org/mars/index.jsp"><b><img
            src="/newsgroups/images/discovery.gif" /> Eclipse Mars (4.5)
            Documentation</b></a><b> (HTML Help Center) </b></li>
    </ul>
    <h2>Older releases</h2>
    <ul>
      <li><a href="http://help.eclipse.org/luna/index.jsp"><b><img
            src="/newsgroups/images/discovery.gif" /> Eclipse Luna (4.3)
            Documentation</b></a><b> (HTML Help Center) </b></li>
      <li><a href="http://help.eclipse.org/kepler/index.jsp"><b><img
            src="/newsgroups/images/discovery.gif" /> Eclipse Kepler (4.3)
            Documentation</b></a><b> (HTML Help Center) </b></li>
      <li><a href="http://help.eclipse.org/juno/index.jsp"><b><img
            src="/newsgroups/images/discovery.gif" /> Eclipse Juno (4.2)
            Documentation</b></a><b> (HTML Help Center) </b></li>
    </ul>
    <div class="homeitem3col">
      <h3>Eclipse 3.1 Documentation</h3>
      <ul>
        <li><a
          href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/org.eclipse.platform.doc.user.3.1.pdf.zip"><img
            src="/images/zip.png" /> Workbench User Guide</a></li>
        <li><a
          href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/org.eclipse.jdt.doc.user.3.1.pdf.zip"><img
            src="/images/zip.png" /> Java Development User Guide</a></li>
        <li><a
          href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/org.eclipse.pde.doc.user.3.1.pdf.zip"><img
            src="/images/zip.png" /> PDE Guide</a></li>
        <li><a
          href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/org.eclipse.platform.doc.isv.3.1.pdf.zip"><img
            src="/images/zip.png" /> Platform Plug-in Developer Guide</a></li>
        <li><a
          href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/org.eclipse.jdt.doc.isv.3.1.pdf.zip"><img
            src="/images/zip.png" /> JDT Plug-in Developer Guide</a>

      </ul>
    </div>
  </div>
  <div id="rightcolumn">
    <div class="sideitem">
      <h6>Related links</h6>
      <ul>
        <li><a href="http://www.eclipse.org/home/newcomers.php">New to
            Eclipse? Start here.</a></li>
        <li><a href="/articles/">Eclipse articles</a></li>
        <li><a href="/forums/">Forums</a></li>
        <li><a href="/resources/">Resources</a></li>
      </ul>
    </div>
  </div>
</div>