<?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'

	#*****************************************************************************
	#
	# sample_3col.php
	#
	# Author: 		Denis Roy
	# Date:			2005-11-07
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org Terms of Use";
	$pageKeywords	= "Type, page, keywords, here";
	$pageAuthor		= "Type your name here";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>$pageTitle</h1>

		<p>15th November, 2004</p>	

		<p><strong>Terms and Conditions of Use for the Eclipse Foundation Web Site</strong></p>

		<p>BY ACCESSING, BROWSING OR USING THIS WEB SITE, YOU
		ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTAND AND AGREE TO BE BOUND BY THESE TERMS
		AND CONDITIONS.</p>

		<p>This Web site is a service made available by the Eclipse Foundation. 
		All software, documentation, information and/or other materials provided on and through this Web site
		(&quot;Content&quot;) may be used solely under the following terms and conditions (&quot;Terms of Use&quot;).</p>

		<p>This Web site may contain other proprietary notices and copyright information, the terms of which must
		be observed and followed.  The Content on this Web site may contain technical inaccuracies or typographical
		errors and may be changed or updated without notice. The Eclipse Foundation may also make improvements
		and/or changes to the Content at any time without notice.</p>

		<p>The Eclipse Foundation, its members ("Members") assume no responsibility regarding the
		accuracy of the Content and use of the Content is at the recipient&rsquo;s own risk.  The Eclipse Foundation and
		the Members provide no assurances that any reported problems with any Content will be resolved.
		Except as otherwise expressly stated, by providing the Content, neither the Eclipse Foundation or the Members
		grant any licenses to any copyrights, patents or any other intellectual property rights.</p>

		<p>The Eclipse Foundation and the Members do not want to receive confidential information from you
		through this Web site.  Please note that any information or material sent to The Eclipse Foundation or the Members
		will be deemed NOT to be confidential.</p>

		<p>You are prohibited from posting or transmitting to or from this Web site any unlawful, threatening, libelous,
		defamatory, obscene, scandalous, inflammatory, pornographic, or profane material, or any other material that
		could give rise to any civil or criminal liability under the law.</p>

		<p>The Eclipse Foundation and the Members make no representations whatsoever about any other
		Web site that you may access through this Web site. When you access a non-Eclipse Foundation Web site,
		even one that may contain the organization&rsquo;s name or mark, please understand that it is independent from
		The Eclipse Foundation, and that the the Eclipse Foundation and the Members have no control over
		the content on such Web site. In addition, a link to a non-Eclipse Foundation Web site does not mean that
		the Eclipse Foundation or the Members endorse or accept any responsibility for the content, or the use,
		of such Web site. It is up to you to take precautions to ensure that whatever you select for your use is free of such
		items as viruses, worms, Trojan horses and other items of a destructive nature.  </p>

		<p>IN NO EVENT WILL THE ECLIPSE FOUNDATION AND/OR THE MEMBERS BE LIABLE TO YOU
		(AN INDIVIDUAL OR ENTITY) OR ANY OTHER INDIVIDUAL OR ENTITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
		PUNITIVE, SPECIAL OR CONSEQUENTIAL DAMAGES RELATED TO ANY USE OF THIS WEB SITE, THE CONTENT,
		OR ON ANY OTHER HYPER LINKED WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, LOST SALES,
		LOST REVENUE, LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON
		YOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN IF THE ECLIPSE FOUNDATION OR THE MEMBERS
		ARE EXPRESSLY ADVISED OR AWARE OF THE POSSIBILITY OF SUCH DAMAGES OR LOSSES.</p>

		<p>ALL CONTENT IS PROVIDED BY THE ECLIPSE FOUNDATION AND/OR THE MEMBERS ON AN
		"AS IS" BASIS ONLY.  THE ECLIPSE FOUNDATION AND THE MEMBERS PROVIDE NO REPRESENTATIONS,
		CONDITIONS AND/OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
		WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY AND NONINFRINGEMENT.</p>

		<p>The Eclipse Foundation and the Members reserve the right to investigate complaints or reported
		violations of these Terms of Use and to take any action they deem appropriate including, without limitation,
		reporting any suspected unlawful activity to law enforcement officials, regulators, or other third parties and
		disclosing any information necessary or appropriate to such persons or entities relating to user profiles,
		e-mail addresses, usage history, posted materials, IP addresses and traffic information.</p>

		<p>The Eclipse Foundation and the Members reserve the right to seek all remedies available at law
		and in equity for violations of these Terms of Use, including but not limited to the right to block access from
		a particular Internet address to this Web site.</p>

		<p><strong>Licenses</strong></p>

		<p>The Content provided on this Web site is provided under the terms and conditions of the
		<a href="epl/notice.php">Eclipse Foundation Software User Agreement</a> and
		those additional terms, conditions and notices referenced therein.</p>

		<p>If the Content is licensed to you under the terms and conditions of the <a href="http://www-128.ibm.com/developerworks/library/os-cpl.html" target="_blank">Common Public License </a>("CPL")
		or the <a href="../org/documents/epl-v10.php">Eclipse Public License</a> ("EPL"), any Contributions, as defined in the
		applicable license(s), uploaded, submitted, or otherwise made available to the Eclipse Foundation and/or the Members,
		by you that relate to such Content are provided under the terms and conditions of both the CPL and the EPL and can be made
		available to others under the terms of the CPL and/or the EPL.</p>
	
		<p>If the Content is licensed to you under license terms and conditions other than the CPL or the EPL
		(&quot;Other License&quot;), any modifications, enhancements and/or other code and/or documentation
		(&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to the Eclipse Foundation and/or the
		Members, by you that relate to such Content are provided under terms and conditions of the
		Other License and can be made available to others under the terms of the Other License. In addition, with regard
		to Modifications for which you are the copyright holder, you are also providing the Modifications under the terms
		and conditions of both the CPL and the EPL and such Modifications can be made available to others under the
		terms of the CPL and/or the EPL.</p>

		<p>For all other software, information and other material including, without limitation, ideas, concepts, know-how
		and techniques, uploaded, submitted or otherwise made available to The Eclipse Foundation, the Members,
		and/or users of this Web-site, (collectively &quot;Material&quot;), you grant (or warrant that the
		owner of such rights has expressly granted) the Eclipse Foundation, the Members and the users of
		this Web-site a worldwide, unrestricted, royalty free, fully paid up, irrevocable, perpetual, non-exclusive license
		to use, make, reproduce, prepare derivative works of, publicly display, publicly perform, transmit, sell, distribute,
		sublicense or otherwise transfer such Materials, and/or derivative works thereof, and authorize third parties to do
		any, some or all of the foregoing including, but not limited to, sublicensing others to do any some or all of
		the foregoing indefinitely. You represent and warrant that to your knowledge, you have sufficient rights in the
		Materials to grant the foregoing rights and licenses.</p>

		<p>All logos and trademarks contained on this Web site are and remain the property of their respective owners.
		No licenses or other rights in or to such logos and/or trademarks are granted to you.</p>

		<p>You can learn more about the <a
		href="privacy.php">Eclipse.org privacy practices</a> on the Web.</p>

	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
			<li><a href="index.php">Legal resources</a></li>
			<li><a href="guidetolegaldoc.php">Guide to legal documents</a></li>
			<li><a href="cpl2epl/">CPL to EPL conversion</a></li>
			</ul>
		</div>
	</div>
EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
