<?php
	$documentRoot = $_SERVER['DOCUMENT_ROOT'];
	require_once ($documentRoot . "/membership/promo/promos.php");
	if (isset($_GET['adNo'])) {
		$adNo = $_GET['adNo'];
	}
	$promo = chooseRandomPromo($adNo);
	ob_start();

	if ($_GET['osType'] == NULL)
	{
		$osDisplay = $App->getClientOS();
	}
	else {
		$osDisplay = $_GET['osType'];
	}
	$osWarning = "";
	$defaultPath = '/home/data/httpd/writable/community/';
	//$defaultPath = $documentRoot . '/downloads/content/';
	switch ($osDisplay) {
		case "win32":
			$display = "Windows";
			$packagesDetails = "heliosCacheWin.xml";
			$osWarning = "<b>Problems extracting the ZIP file?</b> Please read these <a href='http://wiki.eclipse.org/SDK_Known_Issues#Windows_issues'>Known Issues</a>.<br />";
			break;
		case "win64":
			$display = "Windows";
			$packagesDetails = "heliosCacheWin.xml";
			$osWarning = "<b>Problems extracting the ZIP file?</b> Please read these <a href='http://wiki.eclipse.org/SDK_Known_Issues#Windows_issues'>Known Issues</a>.<br />";
			break;
		case "linux":
			$display = "Linux";
			$packagesDetails = "heliosCacheLinux.xml";
			$osWarning = "<b>Linux users please note:</b> Eclipse on GCJ is untested.  Please see the Linux <a href='http://wiki.eclipse.org/SDK_Known_Issues#Linux_issues'>Known Issues</a> document.<br />";
			break;
		case "linux-x64":
			$display = "Linux";
			$packagesDetails = "heliosCacheLinux.xml";
			$osWarning = "<b>Linux users please note:</b> Eclipse on GCJ is untested.  Please see the Linux <a href='http://wiki.eclipse.org/SDK_Known_Issues#Linux_issues'>Known Issues</a> document.<br />";
			break;
		case "macosx":
			$packagesDetails = "heliosCacheCocoa.xml";
			$display = "Mac OS X";
			break;
		case "carbon";
			$packagesDetails = "heliosCacheCarbon.xml";
			$display = "Mac OS X";
			break;
		case "cocoa64":
			$packagesDetails = "heliosCacheCocoa.xml";
			$display = "Mac OS X";
			break;
		default:
			$display = "Windows";
			$packagesDetails = "heliosCacheWin.xml";
			//$packagesDetails = $documentRoot . "/downloads/content/heliosCacheWin.xml";
			$osWarning = "<b>We were unable to find Eclipse packages for your platform ($osDisplay)</b>. Below are the packages for Windows. Downloads for your platform may be available <a href=\"$classOtherDownloads\">here</a>.<br />";
			break;
	}
	function featuredRow ($package, $display, $zebra) {
	ob_start();
		?>
				<div class="row  clearfix <?php if ($zebra) { print 'zebra'; }?>">
					<div class="icon"><img src="<?php print $package['icon'];?>" width="32"/></div>
					<div class="text">
						<span class="title"><a href="<?php print $package['url']?>"><?php print $package['name'];?></a></span>, <?php print $package['size'];?></a><br/>
						<span class="downloadCounts">Downloaded <?php print number_format($package['downloadCount']);?> Times</span><a class="details" href="<?php print $package['url']?>">Details</a>
						<?php if (stripos($package['name'], 'classic') != 0) {?>&nbsp; <a class="details" href="http://download.eclipse.org/eclipse/downloads/">Other Downloads</a><?php }?>
					</div>
					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png"><br/>
						</div>
						<a class="downloadLink" href="<?php print $package['downloadurl'];?>"><?php print $display;?> 32 Bit</a><br/>
						<?php if ($package['downloadurl64'] != "") {?>
						<a class="downloadLink" href="<?php print $package['downloadurl64'];?>"><?php print $display;?> 64 Bit</a>
						<?php } ?>

					</div>
				</div>
	<?php
	return ob_get_clean();
	}

	function otherRow ($package) {
		ob_start();
		?>
					<li class="row">
						<span class="title"><a href="<?php print $package['url']?>"><?php print $package['name'];?></a></span>, <?php print $package['size'];?></span>
						<a class="downloadLink" href="<?php print $package['downloadurl'];?>">Download</a>
					</li>
	<?php
	return ob_get_clean();
	}

	$xml = simplexml_load_file($defaultPath . $packagesDetails);
	$featuredRows = 15;
	$count = 0;
	$zebra = TRUE;
	foreach ($xml->package as $package) {
		if ($count < $featuredRows) {
			$count ++;
			$featuredRowsHTML .= featuredRow($package, $display, $zebra);
			$zebra = !$zebra;
		}
		else {
			$otherRowsHTML .= otherRow($package);
		}
	}
?>
<script type="text/javascript" src="http://www.eclipse.org/forums/jquery.js"></script>
<script type="text/javascript" src="content/helios.js"></script>
<div class="wideContainer">
	<div class="downloadHeader">
		<ul class="selector">
			<li><a href="/downloads/">Packages</a></li>
			<li><a href="/downloads/index-helios.php" class="active">Developer Builds</a></li>
			<li><a href="/downloads/?tab=project">Projects</a></li>
		</ul>
		<a id="bug" href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=310525'>Give us your feedback on this new page.</a>
	</div>
	<div class="contentArea">

		<div class="leftContent">
			<div class="descriptionBar">
				<div class="descriptionRight">
					<span id="texttwo"><a href="http://www.eclipse.org/downloads/packages/compare-packages">Compare Packages</a></span>
					<span id="textthree"><a href="http://wiki.eclipse.org/Older_Versions_Of_Eclipse">Older Versions</a></span>
				</div>
				<div class="descriptionOS">
					<span id="descriptionText">Eclipse Helios (3.6 RC4) Packages</span> for
					<select id="osSelect">
						<option <?php if ($osDisplay == 'win32') echo "selected"?> value="win32">Windows</option>
						<option <?php if ($osDisplay == 'linux' || $osDisplay == 'linux-x64') echo "selected"?> value="linux">Linux</option>
						<option <?php if ($osDisplay == 'macosx') echo "selected"?> value="macosx">Mac OS X (Cocoa)</option>
					</select>
				</div>
			</div>
			<div class="featuredRows clearfix">
			<?php print	$featuredRowsHTML; ?>
			</div><!--

			<div class="moreBlock clearfix">
			<h3>Other Packages</h3>
				<ul class="col1">
			<?php print	$otherRowsHTML; ?>
				</ul>
			</div>

			--><div id="googleAds">
				<script type="text/javascript"><!--
				google_ad_client = "pub-6797025590085056"; google_ad_slot = "4661560739"; google_ad_width = 468; google_ad_height = 60;
				//-->
				</script><script type="text/javascript" src="//pagead2.googlesyndication.com/pagead/show_ads.js"></script>
			</div>
		</div>

		<div class="rightContent">
			<h3 class="">Hint:</h3>
			<p class="jre">You will need a <a href="/downloads/moreinfo/jre.php">Java runtime environment (JRE)</a> to use Eclipse (Java 5 JRE recommended). All downloads are provided under the terms and conditions of the <a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>

			<div class="ad">
				<?php print $promo; ?>
			</div>

			<h3>Installing Eclipse</h3>
				<ul id="installingEclipse">
					<li><a href="http://wiki.eclipse.org/FAQ_Where_do_I_get_and_install_Eclipse%3F">Install Guide</a></li>
					<li><a href="http://wiki.eclipse.org/SDK_Known_Issues">Known Issues</a></li>
					<li><a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-129.htm">Updating Eclipse</a></li>
				</ul>

			<h3>Related Links</h3>
				<ul id="relatedLinks">
					<li><a href="http://wiki.eclipse.org/CVS_Howto">Source Code</a></li>
					<li><a href="http://help.eclipse.org">Documentation</a></li>
					<li><a href="/donate/">Make a Donation</a></li>
					<li><a href="/forums/">Forums</a></li>
					<li><a href="/helios/">Eclipse Helios (3.6) <span class="helios">Jun '10</span></a></li>
					<li><a href="/galileo/">Eclipse Galileo (3.5)</a></li>
					<li><a href="/ganymede/">Eclipse Ganymede (3.4)</a></li>
				</ul>
		</div>
	</div>
</div>

<?
	$html = ob_get_clean();
?>