<?php  	
	/* Required eclipse basic classes */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
    /* Functions and modules related to Navbar objects */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
    /* Functions and modules related to the page top eclipse menu */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
    /* Functions used for display events */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/mtj/events.func.php");
    
    $App 	= new App();
    /* Left Navbar */	
    $Nav	= new Nav();	
    /*  Page top eclipse menu */
    $Menu 	= new Menu();

    /* Find the _projectCommon.php file and include it */
    include($App->getProjectCommon());
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Mobile Tools for Java &nbsp; (MTJ) &nbsp; Project Team";
	$pageKeywords	= "device, mobile, contributor, committer, lead, author, developer, java";
	$pageAuthor		= "Diego Madruga Sandin";
	
	/* Paste your HTML content between the EOHTML markers!	*/
	$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<div class="homeitem3col">
		<h3>Project Lead</h3>
        <ul>
            <li>
               <b>Gorkem Ercan</b>, <a href="http://www.nokia.com/">Nokia</a><br> 
                Gorkem is working as the project lead for the MTJ. 			  
            </li>
        </ul>
		</div>
		<div class="homeitem3col">
    		<h3>Committers</h3>
    		<ul class="midlist">
                <li>
                	<b>Christian Kurzke</b>, <a href="http://developer.motorola.com">Motorola</a>
                </li>
    			<li>
                	<b>Craig Setera</b>, Individual (<a href="http://www.eclipseme.org/">EclipseME</a> lead)
                </li>
                <li>
                    <b>David Marques</b>, <a href="http://www.cesar.org.br/english/">C.E.S.A.R</a> (Motorola Contractor)
                </li>
                <li>
                	<b>Diego Madruga Sandin</b>, <a href="http://www.cesar.org.br/english/">C.E.S.A.R</a> (Motorola Contractor)
                </li>
                <li>
                    <b>Feng(Marvin) Wang</b>, <a href="http://www.sybase.com/">Sybase</a>
                </li>
                <li>
                    <b>Gang(Allen) Ma</b>, <a href="http://www.sybase.com/">Sybase</a>
                </li>
                <li>
                	<b>Gorkem Ercan</b>, <a href="http://www.nokia.com/">Nokia</a>
                </li>
                <li>
                    <b>Gustavo de Paula</b>, <a href="http://www.cesar.org.br/english/">C.E.S.A.R</a> (Motorola Contractor)
                </li>
                <li>
                	<b>Hugo Raniere</b>, <a href="http://www.cesar.org.br/english/">C.E.S.A.R</a> (Motorola Contractor)
                </li>

    		</ul>
		</div>
	</div>
</div>

<script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type="text/javascript">try {var pageTracker = _gat._getTracker("UA-9293663-1");pageTracker._trackPageview();} catch(err) {}</script>
EOHTML;


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