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

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "BPEL Designer Project";
	$pageKeywords	= "BPEL, process, designer, team";
	$pageAuthor		= "BPEL Team";
	
	# 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>
		<h2>The Team</h2>
		People involved in the BPEL Project, in no particular order ...
		really.

		<div class="homeitem3col">
			<h3>Leads</h3>
			
			<table cellpadding="4px" width="500">
				<tr>
					<td>
						<img height="100px" alt="Bob" src="people/bbrodt.jpg" />
					</td>
					<td>
						<a href="mailto:bbrodt@redhat.com">Bob Brodt</a>
						<br />
						Location: Colorado Springs, CO
						<br/>
						Blamed for: Whatever breaks from now until the end of time.
					</td>
				</tr>
			</table>
		</div>


		<div class="homeitem3col">
			<h3>Committers</h3>
			<table cellpadding="4px" width="500">
				<tr>
					<td>
						<img height="100px" alt="Sara" src="people/unknown.jpg" />
					</td>
					<td>
						<a href="mailto:sara.ayoubi@hotmail.com">Sara Ayoubi</a>
						<br />
						Location: Somewhere in West Beirut, Lebanon
						<br />
						Blamed for: Aspect BPEL.
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Nick" src="people/nboldt.jpg" />
					</td>
					<td>
						<a href="mailto:nboldt@redhat.com">Nick Boldt</a>
						<br />
						Location: Somewhere in Toronto, ON Canada
						<br />
						Blamed for: releng stuff.
						<br />
						Website: <a href="http://divby0.blogspot.com">DivByZero.com</a>
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Tobias" src="people/unknown.jpg" />
					</td>
					<td>
						<a href="mailto:eclipse@liefke.biz">Tobias Liefke</a>
						<br />
						Location: Somewhere in Karlsruhe, Deutschland
						<br />
						Blamed for: various bug fixes.
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Azzam" src="people/AzzamMourad.jpg" />
					</td>
					<td>
						<a href="mailto:azzam.mourad@lau.edu.lb">Azzam Mourad</a>
						<br />
						Location: Somewhere in West Beirut, Lebanon
						<br />
						Blamed for: Aspect BPEL.
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Hanine" src="people/HanineTout.jpg" />
					</td>
					<td>
						<a href="mailto:hanine.tout@lau.edu">Hanine Tout</a>
						<br />
						Location: Somewhere in Montreal, Canada
						<br />
						Blamed for: Aspect BPEL.
					</td>
				</tr>
				
			</table>
		</div>

		
		<div class="homeitem3col">
			<h3>Contributors</h3>
			<table cellpadding="4px" width="500">
				<tr>
					<td>
						<img height="100px" alt="Ed" src="people/unknown.jpg" />
					</td>
					<td>
						<a href="mailto:edward.gee@oracle.com">Edward Gee</a>
						<br/>
						Location: Somewhere in Redwood City, CA
						<br/>
						Blamed for: XPath Editor
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Michael" src="people/milliger.jpg" />
					</td>
					<td>
						<a href="mailto:milliger@de.ibm.com">Michael Illiger</a>
						<br/>
						Location: Somewhere in Boeblingen, Germany
						<br/>
						Blamed for: Quite a few things in the BPEL Designer
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Dennis" src="people/dushakov.jpg" />
					</td>
					<td>
						<a href="mailto:dennis.ushakov@intel.com">Dennis Ushakov</a>
						<br/>
						Location: Somewhere in St.Petersburg, Russia
						<br />
						Blamed for: The XML source tab
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Tammo" src="people/tammo.png" />
					</td>
					<td>
						<a href="mailto:tammo.van.lessen@iaas.uni-stuttgart.de">Tammo van Lessen</a>
						<br/>
						Location: Somewhere in Stuttgart, Germany
						<br/>
						Blamed for: Runtime Integration with Apache ODE
					</td>
				</tr>
			</table>
		</div>

		<div class="homeitem3col">
			<h3>Team Members &amp; Committers Emeriti</h3>
			<table cellpadding="4px" width="500">
				<tr>
					<td>
						<img height="100px" alt="Simon" src="people/smoser.jpg" />
					</td>
					<td>
						<a href="mailto:smoser@de.ibm.com">Simon Moser</a>
						<br />
						Location: Somewhere in Boeblingen, Germany
						<br/>
						Blamed for: Blamed for BPEL EMF Model and parts of the BPEL Specification
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Bruno" src="people/bruno.jpg" />
					</td>
					<td>
						<a href="mailto:B.Wassermann@cs.ucl.ac.uk">Bruno Wasserman</a>
						<br />
						Location: Somewhere in London, UK &nbsp; 
						<a href="http://www.cs.ucl.ac.uk/staff/B.Wassermann/">(More ...)</a>
						<br/>
						Blamed for: Runtime integration framework
			    	</td>
			    </tr>
			    <tr>
			    	<td>
						<img height="100px" alt="Michal" src="people/michal.png" />
					</td>
					<td>
						<a href="mailto:michal.chmielewski@oracle.com">Michal Chmielewski</a>
						<br />
						Location: Somewhere in Redwood City, CA
						<br />
						Blamed for: Wizards, Partner Links, Type/WSDL Browser,
						XPath Editor, Releases, Screen-Captures &amp; Spelling
			    	</td>
			    </tr>
			    <tr>
			    	<td>
						<img height="100px" alt="Benjamin" src="people/bpelBenny.jpg" />
					</td>
					<td>
						<a href="mailto:hoehenbn@studi.informatik.uni-stuttgart.de">Benjamin Hoehensteiger</a>
						<br />
						Location: Somewhere in Stuttgart, Germany
						<br/>
						Blamed for: The great extension activity tutorial.
			    	</td>
			    </tr>
				<tr>
					<td>
						<img height="100px" alt="Oleg" src="people/olegDanilov.jpg" />
					</td>
					<td>
						<a href="mailto:oleg.v.danilov@intel.com">Oleg Danilov</a>
						<br />
						Location: Somewhere in St. Petersburg, Russia
						<br />
						Blamed for: The XML source tab and other stuff.
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Grid" src="people/grid.jpg" />
					</td>
					<td>
						<a href="mailto:fqian@redhat.com">Grid Qian</a>
						<br />
						Location: Somewhere in Beijing, China
						<br />
						Blamed for: Various bug fixes.
					</td>
				</tr>
				<tr>
					<td>
						<img height="100px" alt="Vincent" src="people/unknown.jpg" />
					</td>
					<td>
						<a href="mailto:vincent.zurczak@petalslink.com">Vincent Zurczak</a>
						<br />
						Location: Somewhere in Toulouse, France
						<br />
						Blamed for: Various.
					</td>
				</tr>
			</table>
		</div>
	</div>
	
	$rightcolumn_links
</div>


EOHTML;


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