<?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:
 *    Denis Roy (Eclipse Foundation)
 *    Christopher Guindon (Eclipse Foundation)
 *******************************************************************************/
//if name of the file requested is the same as the current file, the script will exit directly.
if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])){exit();}
?>
<div id="fullcolumn">
  <div id="midcolumn">
    <h1><?php print $pageTitle; ?></h1>
    <p>We're sorry, the page you requested cannot be found. Here are some reasons why:</p>
    <ul>
      <li>
        A file may have moved to the archives. You can try the link below:<br />
        <script language="javascript">
          var str = document.location.toString();
          str = str.replace(/download.eclipse.org/, "archive.eclipse.org");
          document.write("<a href='" + str + "'>" + str + "</a>");
        </script>
      </li>
      <li>This is an Eclipse <b>Update site</b>; you must access it from Eclipse (<a href="http://help.eclipse.org/topic//org.eclipse.platform.doc.user/tasks/tasks-127.htm">see how</a>).
      <li>Your file was part of a Nightly build which is no longer there. Simply download the latest version.</li>
      <li>The project is uploading a new build, and this file is not there yet. Try again in 30 minutes.</li>
    </ul>
    <h2>Other useful links</h2>
    <ul>
      <li><a href="//eclipse.org">Eclipse home</a> | <a href="//eclipse.org/downloads">Downloads Home</a></li>
      <li><a href="//eclipse.org/legal">Legal documents</a></li>
      <li><a href="//wiki.eclipse.org/index.php/Webmaster_FAQ">webmaster FAQ</a></li>
      <li><a href="mailto:webmaster@eclipse.org">Email the webmaster</a></li>
    </ul>
    <br /><br />
  </div>
  <div id="rightcolumn">
    <div class="sideitem">
      <h6>Useful links</h6>
      <ul>
        <li><a href="//archive.eclipse.org">Eclipse project archives</a></li>
        <li><a href="//download.eclipse.org/eclipse/downloads">Eclipse project downloads</a></li>
      </ul>
    </div>
  </div>
</div>