<?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: 		Mike Milinkovich
	# Date:			2015-12-09
	#
	# Description: Revision of the Eclipse.org Privacy Policy
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org Privacy Policy";
	$pageKeywords	= "legal, privacy, policy";
	$pageAuthor		= "Mike Milinkovich";
	
	# 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>
		<h2>Eclipse.org Privacy Practices</h2>

		<p>May 12, 2016</p>	
		
		<p><strong>Privacy</strong></p>
	
		<p>You can visit Eclipse.org without revealing who you are or
		any information about yourself. There are times, however, when the Eclipse Foundation or its Members
		(&quot;We&quot; or &quot;Us&quot;) may need information from you.
		You may choose to give personal information, such as your name
		and address or e-mail id that may be needed, for example, to correspond with
		you. We intend to let you know how such information will be used before it is
		collected from you on the Internet.  If
		you tell Us that you do not want Us to use this information as a basis for
		further contact with you, We will respect your wishes.</p>

		<p><strong>Information Security and Quality</strong></p>

		<p>We intend to protect the quality and integrity of your
		personally identifiable information. We
		have tried to implement appropriate technical and organizational measures, such
		as using encryption for transmission of certain forms of information, to help
		keep that information secure, accurate, current, and complete.</p>

		<p>We will make a sincere effort to respond in a timely manner
		to your requests to correct inaccuracies in your personal information. To
		correct inaccuracies in your personal information please return the message
		containing the inaccuracies to the sender with details of the correction
		requested.</p>
		
		<p>We offer as a service to our community the ability for users of Eclipse software 
		to store data on Eclipse Foundation servers through services including but not limited to
		the User Storage Service and the Automated Error Reporting Initiative.  
		Any data stored through these services will be publicly available on the Internet in 
		unencrypted form and without access restriction. Therefore you should not use this 
		service to store passwords, any personally identifiable information, any confidential 
		business information, or anything else that you do not want to be generally and publicly 
		available.</p>

		<p><strong>Clickstream Data and Cookies</strong></p>

		<p>We sometimes collect anonymous information from visits to
		this Web site to help provide better service.  For example, We keep track of the
		domains from which people visit and We
		also measure visitor activity on Eclipse.org, but in ways that keep the
		information anonymous. This anonymous
		information is sometimes known as &quot;clickstream data.&quot; We may use this data to analyze trends and statistics and to help
		us tailor the Web site to better serve Eclipse participants.</p>
	
		<p>Also, when personal data is collected from you in connection
		with a transaction (such as contribution of code or posting to newsgroups) We
		may extract some information about that transaction in an anonymous format and
		combine it with other anonymous information such as clickstream data. This anonymous information is used and
		analyzed only at an aggregate level to help Us understand trends and patterns.</p>

		<p>Some Eclipse.org pages use cookies to better serve you when
		you return to the site. You can set
		your browser to notify you before you receive a cookie, giving you the chance
		to decide whether to accept it. You can
		also set your browser to turn off cookies. If you do so, however, some areas of some sites
		may not function
		properly.</p>

		<p>To the extent Contributions and other Material (as defined
		in the Terms of Use) contain personal information about you, including, but not
		limited to, your name, we have the right to provide that information to others
		pursuant to the Term of Use.</p>

		<p><strong>Business Relationships</strong></p>

		<p>This Web site contains links to other Web sites. We are not responsible for the privacy
		practices or the content of such Web sites.</p>

		<p><strong>Notification of Changes</strong></p>

		<p>This privacy statement was last updated on May 12, 2016.
		A notice will be posted on this Web site home page for thirty (30) days
		whenever this privacy statement is changed.</p>

		<p><strong>Questions Regarding This Statement</strong></p>

		<p>Questions regarding this statement should be directed to: <a
		href="mailto:license@eclipse.org">license@eclipse.org</a>.</p>
		<br/>
	</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>
			</ul>
		</div>
	</div>

EOHTML;


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