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

	#*****************************************************************************
	#
	# team.php of Java Workflow Tooling (JWT)
	#
	# Author: 		Florian Lautenbacher
	# Date:			2007-02-26, adapted 2008-05-08
	#
	# Description: The team/committer page of the Java Workflow Tooling project
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Java Workflow Tooling (JWT)";
	$pageKeywords	= "JWT , Java Workflow Tooling Project, Workflow Editor, Workflow Administration and Monitoring, Eclipse";
	$pageAuthor		= "Florian Lautenbacher";
	
	# 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)
	# Reiniting navbar content (suppresses generic Eclipse links Committers, Newsgroups, Bugs, Articles) :
	# $Nav->setLinkList( array() );
	# Adding Portal-based "About" information, to be "Standard left menu"-compliant (see http://www.eclipse.org/projects/dev_process/project-status-infrastructure/left-menu.php) :
	# $Nav->addCustomNav( "Information about JWT", "/projects/project_summary.php?projectid=soa.jwt", "", 1  );
	# Adding JWT specific menus :

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

<div id="midcolumn">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
 <tr>
  <td valign="top" align="left"><h1>JWT Team</h1></td>
 </tr>
</table>

<div class="homeitem">
<h3>JWT Project Leads</h3>
<ul>
	<li><span>Marc Dutoo <br>(project co-lead)<br><a href="http://www.openwide.fr">Open Wide SA</a></span></li>
	<li><span>Christian Saad<br><a href="http://www.informatik.uni-augsburg.de/ds/">University of Augsburg</a></span></li>
</ul>
<h3>JWT Release Engineer</h3>
<ul>
	<li><span>Christian Saad<br><a href="http://www.informatik.uni-augsburg.de/ds/">University of Augsburg</a></span></li>
</ul>
<h3>JWT Board Members</h3>
<ul>
	<li><span>Alain Boulze<br><a href="http://www.inria.fr/">INRIA</a></span></li>
	<li><span>Fabrice Dewasmes<br><a href="http://www.pragmaconsult.lu/">Pragma Consult</a></span></li>
	<li><span>Miguel Valdez Faura<br><a href="http://www.bonitasoft.com/">bonitasoft SA</a></span></li>
	<li><span>Gunther Palfinger<br><a href="http://www.e-mundo.de/">eMundo GmbH</a></span></li>
</ul>
<h3>JWT Mentor</h3>
<ul>
	<li><span>John Graham<br><a href="http://www.jboss.org">JBoss - a division of Red Hat</a></span></li>
</ul>
</div>
<div class="homeitem">
<h3>JWT Committers and Contributors</h3>

<ul>
	<li><span>Florian Lautenbacher</a> <br>(former project co-lead)<br><a href="http://www.ds-lab.org/">University of Augsburg</a></span></li>
	<li><span>Bernhard Bauer<br><a href="http://www.ds-lab.org">University of Augsburg</a></span></li>
	<li><span>Marc Blanchon<br><a href="http://www.bull.com/fr/index.php">Bull SA</a></span></li>
	<li><span>Guenther Palfinger<br><a href="http://www.e-mundo.de/">eMundo GmbH</a></span></li>
	<li><span>Guillaume Decarnin<br><a href="http://www.openwide.fr">Open Wide SA</a></span></li>
	<li><span>Stephane Drapeau<br><a href="http://www.obeo.fr/">Obeo SA</a></span></li>
	<li><span>Melanie Hesselbart<br><a href="http://www.informatik.uni-augsburg.de/ds/">University of Augsburg</a></span></li>
	<li><span>Mickael Istria<br><a href="http://www.openwide.fr">Open Wide SA</a></span></li>
	<li><span>Rodrigue Le-Gall<br><a href="http://www.bonitasoft.com/">bonitasoft SA</a></span></li>
	<li><span>Emmanuel Rias<br><a href="http://www.bull.com/fr/index.php">Bull SA</a></span></li>
	<li><span>Christian Seitz<br><a href="http://www.informatik.uni-augsburg.de/ds/">University of Augsburg</a></span></li>
</ul>
	</div>

	<li><span>Pierre Vigneras<br><a href="http://www.bull.com/fr/index.php">Bull SA</a></span></li>
	eMundo GmbH


<table border="0" cellspacing="0" cellpadding="0" width="100%">
 <tr>
  <td valign="top" align="left"><h1>Contact us at <a href="mailto:jwt-dev@eclipse.org">jwt-dev@eclipse.org</a>!</h1></td>
 </tr>
</table>
</div>

<div id="rightcolumn">
   	 <div class="sideitem">
 	</div>       			
</div>
EOHTML;


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