<?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:
 *    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();
	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";

	$page = 'installer';
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.eclipseInstaller.php");
	//$Downloads->setFriendsEarlyAccess(TRUE);


  $EclipseInstaller = new EclipseInstaller();
  $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/mars/R/eclipse-inst-win32.exe', '32 bit');
  $EclipseInstaller->addlink('Windows', 'download.php?file=/oomph/epp/mars/R/eclipse-inst-win64.exe', '64 bit');
  $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/mars/R/eclipse-inst-linux32.tar.gz', '32 bit');
  $EclipseInstaller->addlink('Linux', 'download.php?file=/oomph/epp/mars/R/eclipse-inst-linux64.tar.gz', '64 bit');
  $EclipseInstaller->addlink('Mac OS X', 'download.php?file=/oomph/epp/mars/R/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';
	$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);
