<?php
/*******************************************************************************
 * Copyright (c) 2014 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
 *******************************************************************************/

	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] != 'luna') {
		if (!isset($_COOKIE['luna'])){
			setcookie("luna", "Are you ready for Java 8?", time()+3600*24*365, "/", ".eclipse.org");
		}
		else {
			header('Location: /home/index.php');
			exit();
		}
	}
	
	# Begin: page-specific settings.  Change these.
	$pageTitle 		= "Eclipse Luna";
	$pageKeywords	= "eclipse Luna, release, simultaneous, release train, luna";
	$pageAuthor		= "Christopher Guindon";

  // Custom theme variables
	$variables = array();
	$variables['hide_breadcrumbs'] = TRUE;
	$variables['main_container_classes'] = 'container-full  footer-offset  breadcrumbs-offset padding-top';
	$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();

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