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

	#*****************************************************************************
	#
	# faq.php (/friends)
	#
	# Author: 		Roxanne	Joncas
	# Date:			2014-09-13
	#
	# Description: Original page was created by Nathan in 2007.
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Friends of Eclipse FAQ";
	$pageKeywords	= "friends of eclipse, donation, faq";
	$pageAuthor		= "Nathan Gervais";
	ob_start();
	?>
	<div id="fullcolumn">
	<div id="midcolumn">
		<h2><?=$pageTitle ?></h2>
		<div class="homeitem3col">
			<h3>Frequently Asked Questions</h3>
			<ul>
				<br/><li><b>Do I get a charitable tax receipt for my donation? </b><br/><br/>
				No. The Eclipse Foundation is a not-for-profit organization, not a charitable organization, so we are unable to provide charitable tax receipts.<br/><br/></li>
				
				<li><b>What methods of payment do you accept for contributions?</b><br/><br/>
				We are using PayPal to process your donation.   PayPal enables you to use a credit card or a PayPal account.<br/><br/></li>
				
				<li><b>What if I want to pay by cheque or direct deposit?</b><br/><br/>
				At this time, we are only set up to accept contributions through PayPal.  It is free to 
				sign up for an account at www.paypal.com.<br/><br/></li>
				
				<li><b>What is the difference between contributing money to Eclipse and becoming a Friend of Eclipse?</b><br/><br/>
				Individuals can contribute any amount of money they want to the Eclipse Foundation. However, those that give US$35 (but less than US$100) 
				qualify for "Friend" status. "Friend" status lasts for a period of 12 months and provides access to a Friends of Eclipse mirror and use 
				of the "Friend" logo. Individuals that give US$100 or more qualify for the "Best Friend" status. "Best Friend" status lasts for a period 
				of 12 months and provides access to the "Friend" benefits, an Eclipse t-shirt and a discount for EclipseCon events.<br/><br/></li>
				
				<li><b>What amounts may I contribute?</b><br/><br/>
				You may contribute any amount you like. A contribution between US$35 and US$99.99 gives you access to the "Friend of Eclipse" 
				benefits and a contribution US$100 or more qualifies you for the “Best Friend” benefits.<br/><br/></li>
				
				<li><b>What do you plan to do with the money?</b><br/><br/>
				We plan to use these donations to increase the services provided by the Eclipse Foundation.  Examples 
				of activities would include providing more bandwidth to users, hosting more servers for project 
				websites and sending students to EclipseCon. <br/><br/></li>
				
				<li><b>What should I do if I made a mistake when submitting my contribution?</b><br/><br/>
				Please email <a href="mailto:friends@eclipse.org">friends at eclipse.org</a> with all your contact 
				information and an explanation of what you need corrected.<br/><br/></li>
				
				<li><b>What is the Friends of Eclipse Mirror?</b><br/><br/>
				The Friends of Eclipse mirror is a high-capacity download server for Friends of Eclipse. Unlike our 
				main downloads servers, the Friends mirror has priority access to our bandwidth, typically resulting 
				in faster downloads. Although a local mirror in your country may still provide a faster download due 
				to the proximity,  the Friends mirror is our way of saying 'thank you' for your donation.<br/><br/></li>
				
				<li><b>Does this mean the Eclipse download site will be slower?</b><br/><br/>
				The Eclipse download site's performance varies from day to day, depending on new project releases. 
				Although Friends' downloads get priority bandwidth, the Eclipse Foundation will add bandwidth as 
				required to ensure an adequate level of performance from our main download site.<br/><br/></li>
				
				<li><b>How do I get access to the Friends of Eclipse mirror?</b><br/><br/>
				Everyone that donates US$35 or more to the Eclipse Foundation will automatically be flagged as a 
				Friend of Eclipse.  This gives them access to the Friends of Eclipse Mirror for 12 months.   
				When you register your donation, you will be asked to enter your Eclipse.org account email address.  This will be used 
				to login to the Friends of Eclipse Mirror.<br/><br/></li>
				
				<li><b>Who can use the Friend of Eclipse Logo?</b><br/><br/>
				Any individual that has donated more than US$35 to the Eclipse Foundation may use the Friend of 
				Eclipse logo on a personal blog or web site.  The Friends of Eclipse program is for individuals, so 
				the logo should not be used on an organization web site. <br/><br/></li>	
				
				<li><b>What does the t-shirt, included in the "Best Friend" package look like?</b><br/><br/>
				<img src="/donate/images/tshirt.png" width="200" alt ="tshirt"/><br/><br/></li>
				<br/><br/></li>	
			</ul>
		</div>
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
		<h6>Related Links</h6>
			<ul>
				<li><a href="index.php">Friends of Eclipse</a></li>
				<li><a href="donorlist.php">Public List of Donors</a></li>
			</ul>
		</div>
	</div>
	</div>	
<? $html = ob_get_clean();
	# Generate the web page
	$App->generatePage('solstice', $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>