<?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. */ 
	$pageTitle 		= "Mobile Tools for Java&trade; Contributing";
	$pageKeywords	= "contribute, mtj, developer, guide, mobile, tools, Java";
	$pageAuthor		= "Diego Madruga Sandin";
	
	/* End: page-specific settings */
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
	<div id="maincontent">
	
		<div id="midcolumn"> 
		    <!-- Project description -->
			<h1>$pageTitle</h1>
			<br>
			<div class="homeitem3col">
    		<h3>Get involved</h3>
    		<p>
    		If you are interested in participating in the development of the MTJ, 
    		check out the developer's mailing list: <a href="https://dev.eclipse.org/mailman/listinfo/mtj-dev">mtj-dev</a>. 
    		Chat with people there about your problems and interests, and find out what you can do to help. 
    		</p>
    		<p>
    		<a href="http://www.eclipse.org/committers/">Eclipse Committers</a> page give comprehensive information about how to start contributing, Here is a quick and dirty version. 
    		<ul>
    		<li><b>Use Eclipse mailing list</b><a href="https://dev.eclipse.org/mailman/listinfo/mtj-dev"> mtj-dev</a> to communicate the project related issues/questions.</li>
            <li><b>Use bugzilla</b> to discuss and follow up on the bugs and enhancements. See the MTJ <a href="./development/bugs/"> bug information page </a> for easy access to bugs & feature requests.
            </li>
            <li><b>Use Git</b> for code management. See the <a href="./development/">Developer Resources</a> page for more information</li>
            <li><b>Pick a bug report</b> of your liking and let everyone you have started working on it by adding a note to the bug report</li>
            </ul> 
    		</p> 
    		</div>
		</div> <!-- midcolumn -->
	</div> <!-- maincontent -->
	
<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);
?>