<?php  																														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");    # All on the same line to unclutter the user's desktop'


	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Denis Roy
	# Date:			2005-10-11
	#
	# Description: display list of projects for downloads
	#
	#****************************************************************************

	#
	# 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.";

	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank)
	# $Nav->addCustomNav("My Link", "mypage.php", "_self");
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank");

	# End: page-specific settings
	#
	# Enable polls on this page
	# Polls are good for 3 months!
	#$App->usePolls();

	# Poll 1 - without a bar graph
	#$Poll = new Poll(1, "How could we improve the way you obtain Eclipse?", "http://www.eclipse.org/downloads/");
	#$Poll->addOption(1, "Sell DVD subscriptions");
	#$Poll->addOption(2, "Use BitTorrent");
	#$Poll->addOption(3, "Get more mirrors");
	#$Poll->addOption(4, "Get faster mirrors");
	#$Poll->addOption(5, "Add more bandwidth");
	#$Poll->addOption(6, "It works fine as it is");
	# $Poll->noGraph();  # uncomment to disable bar graph
	#$pollHTML = $Poll->getHTML();


	 # require_once "/home/data/httpd/eclipse-php-classes/downloads/livedownload.class.php";

	# $LiveDownload = new LiveDownload();
	# $dl_count = number_format($LiveDownload->selectDownloadCount("SDK_31"), 0, '', ',');




	# Place your html content in a file called content/en_pagename.php
	$downloadBasepath = $App->getDownloadBasePath();
	// UnComment this line to restore the old download page.
	// include("content/en_" . $App->getScriptName());
	// Comment this line to restore the old download page.

	ob_start(); ?>
	<h1>What is a Promoted Download?</h1>
	<p>A Promoted Download is an advertisement for an Eclipse-based product.   Eclipse Foundation member companies are able to promote their products through this marketing program offered by the Eclipse Foundation.   The revenue from these advertisements is used by the Eclipse Foundation to provide services for the Eclipse community.</p>
	<p>If you have questions or concerns, please e-mail <a href="mailto:emo@eclipse.org">emo@eclipse.org</a>.

	<?php $html = ob_get_clean();
	# Generate the web page
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="helios.css" media="screen" />');
	$App->generatePage("solstice", $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
