<?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'] . "/downloads/downloads/controller.compare.php");

	$App 	= new App();
	$Nav	= new Nav();
	$Menu 	= new Menu();
	include("_projectCommon.php");    # All on the same line to unclutter the user's desktop.

	// Begin: page-specific settings.  Change these.
	$pageTitle 		= "Eclipse desktop & web IDE<span style=\"text-transform:lowercase;\">s</span>";
	$pageKeywords	= "eclipse,project,plug-ins,plugins,java,ide,swt,refactoring,free java ide,tools,platform,open source,development environment,development,ide";
	$pageAuthor		= "Christopher Guindon";

	$Packages = new CompareController($App);
	$Packages->setPrefixPackage('release');

	$jee = $Packages->getPackages('jee-package');
	$java = $Packages->getPackages('java-package');
	//$php = $Packages->getPackages('php-package');
	$cpp = $Packages->getPackages('cpp-package');


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

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

	//$html = mb_convert_encoding($html, "HTML-ENTITIES", 'auto');
	$App->generatePage($theme, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
