<?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");
	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/downloads/eclipseInstaller.php");

	$App 	= new App();
	$Nav	= new Nav();
	$Menu 	= new Menu();
	$EclipseInstaller = new EclipseInstaller('mars/R2');
	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 = 'download';
	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 Mars.2 (4.5.2) Release');
	$Downloads->setPrefixPackage('release');
	$Downloads->setRelease('mars');
	//$Downloads->setFriendsEarlyAccess(TRUE);

	$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);
