<?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; Forum";
	$pageKeywords	= "mtj, Forum, user";
	$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>Forum</h3>
            <ul>
            	<br>
                <li>
                Join the <a href="http://www.eclipse.org/forums/eclipse.dsdp.mtj">MTJ</a> forum to participate in technical and general discussions about how to make Eclipse to be a better Mobile Java development environment. Also please indicate your needs if you are planning to extend with your product MTJ.
                </li>
                <li>
                  You can also subscribe to the forum RSS feed <a href="http://www.eclipse.org/forums/rdf.php?mode=m&l=1&basic=1&frm=6&n=10">
                  <img src="http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/rss_btn.gif"></a>
                </li>
                <br>
            </ul>
            <br>
    		</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);
?>