<?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">
  <div class="col-md-24">
    <div class="che-installer">
      <h2><img class="logo img-responsive" src="/downloads/assets/public/images/che-installer-logo.png" alt="Eclipse Che"></h2>
      <p>Try the new Cloud IDE</p>
      <a class="link btn btn-warning" href="http://www.eclipse.org/che/getting-started/">Get Started</a>
    </div>
  </div>
</div>

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