<?php
/*******************************************************************************
 * Copyright (c) 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eric Poirier (Eclipse Foundation) - Initial 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();

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

# Begin: page-specific settings.  Change these.
$pageTitle = "Mars Eclipse";
$pageKeywords = "eclipse Mars, release, simultaneous, release train, mars";
$pageAuthor = "Eric Poirier";

// Custom theme variables
$variables = array();
$variables['main_container_classes'] = 'container-full';

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

$App->setThemeVariables($variables);

# Generate the web page
$App->AddExtraHtmlHeader('<link href="//fonts.googleapis.com/css?family=Raleway:100,300,500,400,700" rel="stylesheet" type="text/css">');
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="assets/public/stylesheets/styles.min.css" media="screen" />');
$App->AddExtraJSFooter('<script type="text/javascript" src="/mars/assets/public/javascript/scripts.min.js"></script>');
$App->generatePage("solstice", $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
