<?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'] . "/dsdp/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 		= "DSDP&nbsp; - &nbsp;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. He is also leading the <a href="http://www.eclipse.org/ercp"> eRCP</a> project. 			  
            </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);
?>
