<?php
/*******************************************************************************
 * Copyright (c) 2009, 2016 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*		Eclipse Foundation - Initial version
*		Anthony Hunter - changes for EMF Validation
********************************************************************************/
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());

$pageTitle 		= "EMF Validation Support";

$html  = <<<EOHTML
<div id="midcolumn">
<h2>$pageTitle</h2>
<p>EMF Validation support is provided by the community on a volunteer basis. You may use the following means to reach this community.</p>

<h3>Frequently Asked Questions (FAQs)</h3>
<p>For frequently asked questions and known pitfalls please refer to the <a href="http://wiki.eclipse.org/EMF-Validation-FAQ">EMF Validation FAQ</a>. You might also consider the
the <a href="http://wiki.eclipse.org/EMF/FAQ">EMF FAQ</a> or the <a href="http://wiki.eclipse.org/index.php/Eclipse_FAQs">Eclipse FAQs</a>.
</p>

<h3>Forum & Newsgroup</h3>
<p>Ask questions on the <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=108">EMF Community Forum</a>
or the <a href="news://news.eclipse.org/eclipse.tools.emf" target="_top">EMF newsgroup</a> (same contents).
</p>

<h3>Bugzilla</h3>
<p>Report defects and ask for enhancements by creating a
<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=EMF">new bug entry</a> in the <a href="https://bugs.eclipse.org/bugs/">Eclipse Bugzilla</a>.
</p>
</div>
EOHTML;

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