<?php
	function actuateDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_ACTUATE', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/home/images/BIRT-Icon-32x32.gif" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_ACTUATE">Actuate BIRT iHub Evaluation Package</a>
							<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Schedule, distribute & secure BIRT output - plus dashboards, analytics and more.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_ACTUATE">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}	
	
	
	function jbossDownload ($package, $display, $zebra) {
		$impression = new CampaignImpression('PROMO_DOWNLOAD_JBOSS', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
		$impression->recordImpression();
		if ($zebra === TRUE){
			$zebra = 'zebra';
		}
		elseif ($zebra == 'promo') {
			$zebra = 'promo';
		}
		ob_start();
		?>
					<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
						
						<div class="icon"><img src="http://www.eclipse.org/home/images/jboss-icon-32x32.png" width="32" height="32"/></div>
						<div class="text">
							<span class="title">
								<a href="http://eclipse.org/go/PROMO_DOWNLOAD_JBOSS">JBoss Developer Studio</a>
								<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
								<br/>
								<span class="promotedDesc">Download JBoss Developer Studio 5.0 with packages for Mac, Windows or Linux.</span>
								
							</span>
							
							<br/>
						</div>
						
	
						<div class="download">
							<div class="downloadArrow">
								<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
							</div>
							<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_JBOSS">Download</a><br/>
						</div>
					</div>
		
		<?php
		return ob_get_clean(); 
		}	
	
		function jrebelDownload ($package, $display, $zebra) {
			$impression = new CampaignImpression('PROMO_DOWNLOAD_ZEROTURNAROUND', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
			$impression->recordImpression();
			if ($zebra === TRUE){
				$zebra = 'zebra';
			}
			elseif ($zebra == 'promo') {
				$zebra = 'promo';
			}
			ob_start();
			?>
							<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
								
								<div class="icon"><img src="http://www.eclipse.org/home/images/jrebel-icon-32x32.png" width="32" height="32"/></div>
								<div class="text">
									<span class="title">
										<a href="http://eclipse.org/go/PROMO_DOWNLOAD_ZEROTURNAROUND">JRebel for Eclipse</a>
										<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
										<br/>
										<span class="promotedDesc">View Java Code Changes Instantly! Free JRebel Trial...Terminate Redeploys!</span>
										
									</span>
									
									<br/>
								</div>
								
			
								<div class="download">
									<div class="downloadArrow">
										<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
									</div>
									<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_ZEROTURNAROUND">Download</a><br/>
								</div>
							</div>
				
				<?php
				return ob_get_clean(); 
				}

	function umllabDownload ($package, $display, $zebra) {
		$impression = new CampaignImpression('PROMO_DOWNLOAD_UMLLAB', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
		$impression->recordImpression();
		if ($zebra === TRUE){
			$zebra = 'zebra';
		}
		elseif ($zebra == 'promo') {
			$zebra = 'promo';
		}
		ob_start();
		?>
		<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
			<div class="icon"><img src="http://www.eclipse.org/home/images/umllab-icon-32x32.png" width="32" height="32"/></div>
			<div class="text">
				<span class="title">
					<a href="http://eclipse.org/go/PROMO_DOWNLOAD_UMLLAB">UML Lab Modeling IDE</a>
					<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
					<br/>
					<span class="promotedDesc">Agile modeling and coding with template-based reverse and round-trip engineering.</span>														
				</span>													
				<br/>
			</div>
			<div class="download">
				<div class="downloadArrow">
					<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
				</div>
				<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_UMLLAB">Download</a><br/>
			</div>
		</div>
		<?php
		return ob_get_clean(); 
	}	
								

	function nuxeoDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_NUXEO', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/nuxeo.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_NUXEO">Nuxeo Enterprise Platform</a>
							<span class="promotedText"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Java platform to develop content-centric enterprise applications </span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_NUXEO">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}

	
	function googleDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_GOOGLE', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/google32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_GOOGLE">Google Plugin for Eclipse</a>
							<span class="promotedText"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Development tools to design, build, optimize and deploy cloud applications.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_GOOGLE">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}	
	
	function motorolaDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_MOTOROLA', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/moto32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_MOTOROLA">MOTODEV Studio for Android</a>
							<span class="promotedText motorola"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Developing for Android? Get there faster with award-winning Eclipse-based tools and plug-ins from MOTODEV.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_MOTOROLA">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}	
	
	function springsourceDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_SPRINGSOURCE', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/springsource32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_SPRINGSOURCE">Spring Tool Suite</a>
							<span class="promotedText motorola"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Complete IDE for enterprise Java, Spring, Groovy, Grails and the Cloud.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_SPRINGSOURCE">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}	
	
	function cloudbeesDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_CLOUDBEES', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/cloudbees32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_CLOUDBEES">CloudBees Toolkit for Eclipse</a>
							<span class="promotedText cloudbees"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Making it easy to create and monitor Jenkins builds from Eclipse.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_CLOUDBEES">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}
	
	function yattaDownload ($package, $display, $zebra) {
	$impression = new CampaignImpression('PROMO_DOWNLOAD_YATTA', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
	$impression->recordImpression();		
	if ($zebra === TRUE){
		$zebra = 'zebra';
	}
	elseif ($zebra == 'promo') {
		$zebra = 'promo';
	}
	ob_start();
		?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
					
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/yatta32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_YATTA">UML Lab Modeling IDE</a>
							<span class="promotedText yatta"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
							<br/>
							<span class="promotedDesc">Agile modeling and coding with customizable reverse and round-trip 
engineering.</span>
							
						</span>
						
						<br/>
					</div>
					

					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_YATTA">Download</a><br/>
					</div>
				</div>
	
	<?php
	return ob_get_clean(); 
	}
	function eucalyptusDownload_2 ($package, $display, $zebra) {
		$impression = new CampaignImpression('PROMO_DOWNLOAD_EUCALYPTUS_2', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
		$impression->recordImpression();
		if ($zebra === TRUE){
			$zebra = 'zebra';
		}
		elseif ($zebra == 'promo') {
			$zebra = 'promo';
		}
		ob_start();
		?>
						<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
							
							<div class="icon"><img src="http://www.eclipse.org/downloads/images/eucalyptus32x32.gif" width="32" height="32"/></div>
							<div class="text">
								<span class="title">
									<a href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS_2">Eucalyptus 3.3 with Auto Scaling, ELB, CloudWatch</a>
									<?php /*<a href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS_2">Eucalyptus: AWS-compatible Private Cloud</a>*/ ?>
									<span class="promotedText eucalyptus"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
									<br/>
									<span class="promotedDesc">Cost-effective dev and test with a Eucalyptus private cloud. Scalable production on AWS.</span>
									<?php /*<span class="promotedDesc">Develop, test and deploy Java applications faster on a private cloud.</span>*/?>
								</span>
								
								<br/>
							</div>
							
		
							<div class="download">
								<div class="downloadArrow">
									<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
								</div>
								<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS_2">Download</a><br/>
							</div>
						</div>
			
			<?php
			return ob_get_clean(); 
			}	
	
	function eucalyptusDownload ($package, $display, $zebra) {
		$impression = new CampaignImpression('PROMO_DOWNLOAD_EUCALYPTUS', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
		$impression->recordImpression();
		if ($zebra === TRUE){
			$zebra = 'zebra';
		}
		elseif ($zebra == 'promo') {
			$zebra = 'promo';
		}
		ob_start();
		?>
					<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">
						
						<div class="icon"><img src="http://www.eclipse.org/downloads/images/eucalyptus32x32.gif" width="32" height="32"/></div>
						<div class="text">
							<span class="title">
								<a href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS">Eucalyptus 3.3 for Dev/Test in the Cloud</a>
								<?php /* <a href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS">Eucalyptus Private and Hybrid Cloud Software</a>*/?>
								<span class="promotedText eucalyptus"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
								<br/>
								<span class="promotedDesc">Cost-effective dev and test with a Eucalyptus private cloud. Scalable production on AWS.</span>
								<?php /*<span class="promotedDesc">Develop, test and deploy Java applications faster on a private cloud.</span>*/?>
							</span>
							
							<br/>
						</div>
						
	
						<div class="download">
							<div class="downloadArrow">
								<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
							</div>
							<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_EUCALYPTUS">Download</a><br/>
						</div>
					</div>
		
		<?php
		return ob_get_clean(); 
		}

		function xoredDownload ($package, $display, $zebra) {
			$impression = new CampaignImpression('PROMO_DOWNLOAD_XORED', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
			$impression->recordImpression();
			if ($zebra === TRUE){
				$zebra = 'zebra';
			}
			elseif ($zebra == 'promo') {
				$zebra = 'promo';
			}
			ob_start();
			?>
				<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">											
					<div class="icon"><img src="http://www.eclipse.org/downloads/images/xored-q7-32x32.png" width="32" height="32"/></div>
					<div class="text">
						<span class="title">
							<a href="http://eclipse.org/go/PROMO_DOWNLOAD_XORED">Xored Q7 UI Testing Tools for RCP</a>
								<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
								<br/>
								<span class="promotedDesc">GUI test automation in the same order of magnitude as manual testing.</span>												
						</span>
						<br/>
					</div>
					<div class="download">
						<div class="downloadArrow">
							<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
						</div>
						<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_XORED">Download</a><br/>
					</div>
				</div>
							
		<?php
			return ob_get_clean(); 
		}
		
		function japersoftDownload ($package, $display, $zebra) {
			$impression = new CampaignImpression('PROMO_DOWNLOAD_JAPERSOFT', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
			$impression->recordImpression();
			if ($zebra === TRUE){
				$zebra = 'zebra';
			}
			elseif ($zebra == 'promo') {
				$zebra = 'promo';
			}
			ob_start();
			?>
						<div class="row clearfix <?php if ($zebra) { print $zebra; }?>">											
							<div class="icon"><img src="http://www.eclipse.org/downloads/images/jss_32x32.png" width="32" height="32"/></div>
							<div class="text">
								<span class="title">
									<a href="http://eclipse.org/go/PROMO_DOWNLOAD_JAPERSOFT">Jaspersoft Studio</a>
										<span class="promotedText actuate"><a target="_blank" href="promotedDownload.php">Promoted Download</a></span>
										<br/>
										<span class="promotedDesc">The new and improved report designer for JasperReports.</span>												
								</span>
								<br/>
							</div>
							<div class="download">
								<div class="downloadArrow">
									<img src="http://dev.eclipse.org/large_icons/actions/go-bottom.png" width="32" height="32"><br/>
								</div>
								<a class="downloadLink" href="http://eclipse.org/go/PROMO_DOWNLOAD_JAPERSOFT">Download</a><br/>
							</div>
						</div>
									
				<?php
					return ob_get_clean(); 
			}
					
