<?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());

#
# Begin: page-specific settings.  Change these. 
$pageTitle 	= "Henshin";
$pageKeywords	= "EMF, Henshin, model transformation, state space analysis";
$pageAuthor	= "Christian Krause";

# Load project description from a separate file:
ob_start();
include 'description.html';
$description = ob_get_contents();
ob_end_clean();

# Load project news from a separate file:
ob_start();
include 'news.html';
$news = ob_get_contents();
ob_end_clean();

# Load screenshots from a separate file:
ob_start();
include 'screenshots.html';
$screenshots = ob_get_contents();
ob_end_clean();

# 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", 3);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

# End: page-specific settings
#
		
# Paste your HTML content between the EOHTML markers!	
$html = <<<EOHTML

<div id="maincontent">

    <div id="midcolumn">
	<h1>$pageTitle</h1>
	<img style="float:right" src="henshin_small.png" alt="" style="border-width:0px"/>
	
	$description
	
	<div class="homeitem">
	$news
	</div>
	
	$screenshots
	
	<!--
		
	<div class="homeitem">
		<h3>Narrow column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
		
	<div class="homeitem">
		<h3>Narrow column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
	
	<div class="homeitem3col">
		<h3>This is a wide column</h3>
		<ul>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		<li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
		</ul>
	</div>
	
	<hr class="clearer" />
	<p>Some free text</p>
	<ul class="midlist">
	<li>list of items in free text</li>
	<li>list of items in free text</li>
	<li>list of items in free text</li>
	</ul>
	<ol>
	<li>Ordered list</li>
	<li>Ordered list</li>
	<li>Ordered list</li>
	</ol>
		
	-->
		
	</div>
		
	<div id="rightcolumn">
	<div class="sideitem">
		<div class="sideitem">
		<h6>Incubation</h6>
		<div align="center"><a href="/projects/what-is-incubation.php"><img align="center" src="egg-incubation.png" border="0" alt="Incubation" /></a></div>
		</div>
	</div>
	
</div>

EOHTML;

# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);

?>
