<?php
/*******************************************************************************
 * Copyright (c) 2014 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Anne Haugommard (Atos) - Initial implementation
 *******************************************************************************/

	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());	
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/gendoc/public/css/pages.css" media="screen"/><link rel="shortcut icon" href="/gendoc/public/images/favicon.ico" />');
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="styles.css"/>' . "\n\t");
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="_styles.css"/>' . "\n\t");

  $variables['hide_breadcrumbs'] = true;
  $App->setThemeVariables($variables);
	
	#### Project dependant variables ####
	$projectTitle = "Gendoc";
	$pageTitle = "Gendoc";
	$pageAuthor = "Anne Haugommard";
	$pageKeywords = "Gendoc, documentation, tutorial";

	
	$html = <<<EOHTML
			<div id="midcolumn">
			<h2> Documentation </h2>
			</br>
			<ul>
			<li> <b>Getting started</b> : see dedicated section in <a href='https://wiki.eclipse.org/gendoc'>Wiki</a> </li>
			<li> Download <a href="Gendoc_v0.5_tutorial.pdf"> Gendoc tutorial as PDF.</a></li>
			<li> Gendoc scripts are written in  <a href="http://eclipse.org/acceleo/">Acceleo </a> language  and use <a href="http://www.omg.org/spec/OCL/">OCL</a>. </li>
	</ul>
			<br/>
			<h3>Useful links </h3>
			<ul>
			<li><a href="http://wiki.eclipse.org/Acceleo/Acceleo_Operations_Reference">Acceleo operations reference</a> </li>
			</ul>
			</div>
      <div id="rightcolumn">				                  
        <div style="height:100px">				 				                  
        </div>				                  
        <div class="sideitem">					                      
          <h6><center>Incubation Phase</center>                      
          </h6>					                      
          <center>					                          
            <a href="http://www.eclipse.org/projects/what-is-incubation.php">					                              
              <img width="70" border="0" alt="Incubation" src="http://www.eclipse.org/images/egg-incubation.png">					</a>					                      
          </center>				                  
        </div>
      </div>	
EOHTML;
	
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
