<?php
/*******************************************************************************
 * Copyright (c) 2014, 2016 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
 *    Eric Poirier (Eclipse Foundation)
 *******************************************************************************/

  require_once(realpath(dirname(__FILE__) . "/../eclipse.org-common/system/app.class.php"));
  require_once(realpath(dirname(__FILE__) . "/../eclipse.org-common/classes/downloads/eclipseInstaller.php"));

  $App = New App();
  $EclipseInstaller = new EclipseInstaller('neon/R');
  $EclipseInstaller->setInstallerLayout('layout_a');

  #redirect the user if he already saw the luna landing page
  $uri = explode("/", $_SERVER['REQUEST_URI']);
  if (strtolower($uri[1]) != 'neon') {
    if (!isset($_COOKIE['eclipse_neon'])){
      setcookie('eclipse_neon', 'eclipse_neon', time()+3600*24*365, "/");
    }
    else {
      header('Location: /home/index.php', TRUE, 302);
      exit();
    }
  }

  $Theme = $App->getThemeClass($theme);

  $App->setThemeVariables(array('hide_breadcrumbs' => TRUE));

  // @todo: There seems to be a bug with the Breadcrumbs.
  // The download links does not get added automatically if $pageTitle
  // is not set.
  $pageTitle = 'Eclipse Neon';

  //$Theme->setBreadcrumb($Breadcrumb);
  //$Theme->setNav($Nav);
  //$Theme->setMenu($Menu);
  $Theme->setPageAuthor('Eclipse Foundation');
  $Theme->setPageKeywords("eclipse neon, release, simultaneous, release train, neon");
  $Theme->setPageTitle($pageTitle);

    // Custom theme variables
  $variables = array();
  $variables['main_container_classes'] = 'container-full breadcrumbs-offset footer-offset';
  // CFA Link - Big orange button in header

  $App->setThemeVariables($variables);

  // Place your html content in a file called content/en_pagename.php
  ob_start();
  include("content/en_" . $App->getScriptName());
  $html = ob_get_clean();

  $Theme->setHtml($html);

  $Theme->setExtraHeaders("<link href='https://fonts.googleapis.com/css?family=Lato:400,700,300' rel='stylesheet' type='text/css'>");
  $Theme->setExtraHeaders('<link href="/neon/assets/public/stylesheets/neon.min.css" media="screen" rel="stylesheet" type="text/css"/>');
  $Theme->generatePage();
