<?php
/*******************************************************************************
 *  File : status.php
 *  Author : Diego Madruga Sandin (dmadruga)
 *  Date :  2008-03-31
 *  Description : This is the status page for the MTJ project. 
 ******************************************************************************/


    /* 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. */ 
    $pageTitle      = "DSDP&nbsp; - &nbsp;Mobile Tools for Java &nbsp; (MTJ) &nbsp; Status";
    $pageKeywords   = "mobile, tools, Java, runtime, design, framework, ";
    $pageAuthor     = "Diego Madruga Sandin";
    
    /* 
     * 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)
     * 
     * Examples:
     *   $Nav->addNavSeparator("My Page Links",     "downloads.php"); 
     *   $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
     *   $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
     */

    /* Generate Events content according to the 2008 year */
    $events = generateContent("2008","Events","homeitem");

    
    /* 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>
            <p>
            <br>
            The MTJ status is currently available in the <a href="http://wiki.eclipse.org/index.php/DSDP/MTJ/MTJ_status">wiki</a> pages. 
            </p>
        </div> <!-- rightcolumn -->
    </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);
    ?>