<?php
/*******************************************************************************
* Copyright (c) 2013, 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
*******************************************************************************/
  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("_projectCommon.php");

  # Begin: page-specific settings.  Change these.
  $pageTitle     = "Eclipse Downloads";
  $pageKeywords  = "eclipse,download,downloads,mirror,project,plug-ins,plugins,java,ide,swt,refactoring,free java ide,tools,platform,open source,development environment,development,ide";
  $pageAuthor    = "Eclipse Foundation, Inc.";

  $App->PageRSS = "/downloads/rss.php";
  $App->PageRSSTitle = "Eclipse Releases";


  # CONFIGURATION
  $page = 'developer';
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.compare.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.downloads.php");


  $Downloads = new Downloads($App);
  $Downloads->setReleaseTitle('Eclipse Neon (4.6) M2 Packages');
  $Downloads->setPrefixPackage('developer');
  $Downloads->setRelease('neon');
  //$Downloads->setFriendsEarlyAccess(TRUE);

  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.eclipseInstaller.php");
  $EclipseInstaller = new EclipseInstaller();
  $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/neon/M1/eclipse-inst-win32.exe', '32 bit');
  $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/neon/M1/eclipse-inst-win64.exe', '64 bit');
  $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/neon/M1/eclipse-inst-linux32.tar.gz', '32 bit');
  $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/neon/M1/eclipse-inst-linux64.tar.gz', '64 bit');
  $EclipseInstaller->addlink('Mac OS X', 'download.php?file=/oomph/epp/neon/M1/eclipse-inst-mac64.tar.gz', '64 bit');

  $release = array();
  $release['dev'] = array('caption' => 'Neon M2', 'url' => 'neon');
  //$release['alt'] = array('caption' => 'Mars.1 RC3', 'url' => 'mars');

  if (isset($_GET['release']) && $_GET['release'] == 'mars') {
    $Downloads->setPrefixPackage('developerAlt');
    $Downloads->setReleaseTitle("Eclipse Mars.1 (4.5.1) RC3 Packages");
    $Downloads->setRelease('mars');
    $EclipseInstaller = new EclipseInstaller();
    $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/mars/RC3/eclipse-inst-win32.exe', '32 bit');
    $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/mars/RC3/eclipse-inst-win64.exe', '64 bit');
    $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/mars/RC3/eclipse-inst-linux32.tar.gz', '32 bit');
    $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/mars/RC3/eclipse-inst-linux64.tar.gz', '64 bit');
    $EclipseInstaller->addlink('Mac OS X', 'download.php?file=/oomph/epp/mars/RC3/eclipse-inst-mac64.tar.gz', '64 bit');
  }

  $App->Promotion = TRUE;
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/view.tpl.php");

  // Custom theme variables
  $variables = array();
  $variables['main_container_classes'] = 'container-full';
  // CFA Link - Big orange button in header
  $variables['btn_cfa'] = array(
    'hide' => TRUE, // Optional - Hide the CFA button.
  );
  $App->setThemeVariables($variables);

  # Generate the web page
  $App->AddExtraHtmlHeader('<link href="/downloads/assets/public/stylesheets/downloads.min.css" media="screen" rel="stylesheet" type="text/css"/>');
  $App->AddExtraJSFooter('<script type="text/javascript" src="/downloads/assets/public/javascript/downloads.min.js"></script>');
  $App->generatePage("solstice", $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
