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


	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Default Eclipse Foundation Copyright and License Notice";
	$pageKeywords	= "legal, documents, cpl, epl";
	$pageAuthor		= "M. Milinkovich Nov 21/05";
	
	# 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="maincontent">
    <div id="midcolumn">
    <h1>$pageTitle</h1>
	<p>Last updated November 21st, 2005</p>

	<p>Eclipse Foundation projects use the EPL as its default license.  
	</p>

	<p>For EPL projects, the notice template is:</p>

	<p>
	/*******************************************************************************<br>
	&nbsp;* Copyright (c) {DATE} {INITIAL COPYRIGHT OWNER} {OTHER COPYRIGHT OWNERS}.<br>
	&nbsp;* All rights reserved. This program and the accompanying materials<br>
	&nbsp;* are made available under the terms of the Eclipse Public License v1.0<br>
	&nbsp;* which accompanies this distribution, and is available at<br>
	&nbsp;* http://www.eclipse.org/legal/epl-v10.html<br>
	&nbsp;*<br>
	&nbsp;* Contributors:<br>
	&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;{INITIAL AUTHOR} - initial API and implementation and/or initial documentation<br>
	&nbsp;*******************************************************************************/
	</p>
	
	<p>If the contents of the file are to be governed by another license, different text will be required.
	Contact the relevant PMC for assistance with this.</p>

	<p><strong>{DATE}</strong> is either a year or a range of years with the first and last years
	of the range separated by a comma.  So for example: &quot;2004&quot; or &quot;2000, 2004&quot;.
	The first year is when the contents of the file were first created and the last year is the last
	year is when the contents were last modified.</p>
		
	<p><strong>{INITIAL COPYRIGHT OWNER}</strong> is the copyright owner that created the initial content.
	If the content is subsequently modified and appended to by other copyright owners, the words
	&quot;and others&quot; are typically appended.  So for example: &quot;XYZ Corp.&quot; or &quot;XYZ Corp. and others&quot;.
	The words &quot;and others&quot; are used to avoid having to list every copyright owner and because often,
	most of the content in the file was contributed the by initial copyright owner with subsequent modifications by others
	being smaller.  However especially if the number of copyright owners is small (e.g. two), there is nothing wrong with
	listing all of them especially if their contributions are more proportionately equal.  For example:
	&quot;XYZ Corp., John Smith, and ABC Enterprises.&quot;</p>
	
	<p>NOTE:  Do not confuse copyright owners with authors (which is explained below).  A copyright owner may be either
	an individual or an entity.  If a person is making their contributions on behalf of their employer, then the copyright
	owner is usually the employer (i.e. &quot;XYZ Corp.&quot; and not &quot;John Smith&quot;).</p>
	
	<p><strong>{INITIAL AUTHOR}</strong> is the name of the person that wrote the initial content.  Subsequent authors
	are listed on proceding lines with a short description of the contribution.  If there is an associated Bugzilla report
	number, then it is good practice to include it here.  Over time, this section actually
	becomes a log of the contributions.  Although it could become quite lengthy in some cases, it should be maintained for
	two important reasons - to acknowledge the contributions of individuals (especially when their contribution is 
	owned by their employer), and to assist with tracking the pedigree of the code (who wrote what).  It is good practice to
	list the name of the author with their employer if the latter owns the copyright.  For example: &quot;John Smith (XYZ Corp.)&quot;.</p>

	</div>		
  </div>

EOHTML;

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