<?php
/*******************************************************************************
 * Copyright (c) 2013,2014.2015 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://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - initial API and implementation
 *******************************************************************************/

//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();}
require_once ($_SERVER['DOCUMENT_ROOT'] . "/membership/promo/promos.php");
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/ads/promotedPlugin.class.php");
$PromotedPlugin = new promotedPlugin('ECLIPSE.ORG - Downloads');
$random = rand(0,100);
?>
<div class="row">
  <?php if ($random <= 70): ?>
    <div class="ad col-sm-12 col-md-24 clearfix">
      <?php
        $adNo = (isset($_GET['adNo'])) ? $_GET['adNo'] : '';
        $promo = chooseDownloadAd($adNo);
        print $promo;
       ?>
    </div>
  <?php else:?>
    <div class="ad col-sm-12 col-md-24 clearfix">
      <?php print $PromotedPlugin->output();?>
    </div>
  <?php endif;?>
</div>
<div class="sideitem clearfix">
  <h6>Related Links</h6>
  <ul id="installingEclipse">
    <?php if (class_exists('Downloads')) :?>
      <li><a href="compare.php?release=<?php print($Downloads->getRelease());?>">Compare &amp; Combine Packages</a></li>
    <?php endif;?>
    <li><a href="/mars/noteworthy">New and Noteworthy</a></li>
    <li><a href="//wiki.eclipse.org/Eclipse/Installation">Install Guide</a></li>
    <li><a href="http://help.eclipse.org">Documentation</a></li>
    <li><a href="http://help.eclipse.org/luna/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-129.htm">Updating Eclipse</a></li>
    <li><a href="/forums/">Forums</a></li>
  </ul>
</div>
<div class="sideitem">
  <h6>More Downloads</h6>
  <ul id="installingEclipse">
    <li><a href="http://download.eclipse.org/eclipse/">Other builds</a></li>
    <li><a href="/mars/">Eclipse Mars (4.5)</a></li>
    <li><a href="/luna/">Eclipse Luna (4.4)</a></li>
    <li><a href="/kepler/">Eclipse Kepler (4.3)</a></li>
    <li><a href="/juno/">Eclipse Juno (4.2)</a></li>
    <li><a href="//wiki.eclipse.org/Older_Versions_Of_Eclipse">Older Versions</a></li>
  </ul>
</div>
<?php

if (class_exists('Downloads') && isset($_GET['testing'])) :
  $release = $Downloads->getReleaseName();
?>
<div id="composite_repo" class="sideitem">
  <h6>
    <a href="http://help.eclipse.org/<?php print strtolower($release);?>/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-124.htm">
      <span class="float-right"><i class="fa fa-question-circle"></i></span>
    </a>
    <?php print ucfirst($release);?> software repository
  </h6>
  <p>
    If the package you've downloaded does not contain the Mars software repository,
    you can add this URL to your software sites:
  </p>
  <p>
    <input class="form-control" type="text" value="http://download.eclipse.org/releases/<?php print strtolower($release);?>"/>

  </p>
</div>
<?php endif;?>
<h3 class="">Hint</h3>
<p class="jre">You will need a <a href="//wiki.eclipse.org/Eclipse/Installation#Install_a_JVM">Java runtime environment (JRE)</a> to use Eclipse (Java SE 7 or greater is recommended). All downloads are provided under the terms and conditions of the <a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>
