<?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();	$theme = "Phoenix"; include($App->getProjectCommon());   # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	# index.php
	#
	# Author: 	 	Nathan Gervais
	# Date:			2008-04-21
	#
	# Description: Ganymede Landing Page
	#
	#****************************************************************************
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Corporate Sponsors";
	$pageKeywords	= "corporate sponsorship, sponsor, eclipse";
	$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
	#
	# Place your html content in a file called content/en_pagename.php
	ob_start();


	?>	
	<div id="fullcolumn" class="galileo">
		<div id="midcolumn">
			<h1>Become an Eclipse Corporate Sponsor</h1>
			<p>The Eclipse Foundation relies on the support of our members and contributions from the user community to service and grow the Eclipse ecosystem. 
			 We encourage companies that make extensive use of Eclipse technology to support the Eclipse community through the Eclipse Corporate Sponsor Program.  The
			 generous support of these Corporate Sponsors allows the Foundation to provide world-class support for the Eclipse open source projects.</p>
			
			<p>A company may become a corporate sponsor by making a financial contribution or an in-kind contribution of goods and services to the Eclipse Foundation.  
			There are three tiers of sponsorship: 1) Platinum, 2) Gold and 3) Silver; each tier representing the level of annual sponsorship to the Eclipse Foundation.
		
			  		
			<h4>Platinum Sponsorship</h4>
			<ul>
			<li>Annual contribution of at least US$100,000</li>
			<li>Corporate logo placed on the Eclipse Foundation Sponsor page.</li>
			<li>Joint-press release issued between the Eclipse Foundation and Platinum sponsor.</li>
			</ul>
			<h4>Gold Sponsorship</h4>
			<ul>
			<li>Annual contribution of at least US$25,000</li>
			<li>Corporate logo recognized on the Eclipse Foundation Sponsor page.</li>
			<li>Supporting press quote from the Eclipse Foundation for sponsor announcement.</li>
			</ul>
	
			<h4>Silver Sponsorship</h4>
			<ul>
			<li>Annual contribution of at least US$5000</li>
			<li>Corporate logo recognized on the Eclipse Foundation Sponsor page.</li></ul>
			<br/>
			
		<h3>How to Become a Corporate Sponsor</h3>	
		<ul>
		<li><h4>Step 1</h4>Determine the level of sponsorship your company would like to make.   
		<li><h4>Step 2</h4>Contact the <a href="mailto:membership@eclipse.org">Eclipse Foundation</a> to determine method of payment.  In-kind contributions will require previous agreement from the Eclipse Foundation.  Please note that 
		is Eclipse Foundation is a not-for-profit corporation. Contributions or gifts to the Eclipse Foundation Inc. are not tax deductible as charitable contributions. 
		<li><h4>Step 3</h4>Corporate sponsors, by signing our <a href="http://www.eclipse.org/org/documents/Eclipse%20Logo%20Agreement%20%202008_04_30%20final.pdf">logo agreement</a>, agree to have their corporate logo listed on the Eclipse Corporate Sponsor page.   If you do not want your logo listed, please inform the Eclipse Foundation.
		</ul>
<br>

<h3>Other Ways to Support Eclipse</h3>
<p>The Eclipse Foundation is supported by our member companies through their contributions to the Eclipse projects and membership dues.
 If your company would like to <a href="http://www.eclipse.org/membership/">become more involved in the Eclipse community</a>, please explore the different membership options.
  Individuals may also contributed to the Eclipse Foundation through the <a href="http://eclipse.org/donate/">'Friends of Eclipse'</a> program.</p>
			
		</div>			
		<div id="rightcolumn">

		
			<div class="sideitem" style="text-align:left;">
			<h6>Support Eclipse</h6>
				<div class="modal noBG">
					<ul>
						<li class=""> 
						<a href="http://www.eclipse.org/corporate_sponsors/" class="link">Corporate Sponsors</a><br/>
						</li>					
						<li class=""> 
						<a href="http://www.eclipse.org/membership/showAllMembers.php" class="link">Eclipse Members</a><br/>
						</li>
						<li class=""> 
						<a href="http://eclipse.org/donate/donorlist.php" class="link">Friends of Eclipse</a><br/>
						</li>
					</ul>
				</div>		
			</div>		
		</div>	
		
	</div>
	
			

	<?
	$html = ob_get_clean();
	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link type="text/css" href="style.css" rel="stylesheet"/>');
	$App->generatePage("Nova", $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>