<?php

/*
 *   File : _projectCommon.php
 *   Author : Diego Madruga Sandin (dmadruga)
 *   Date :	2008-03-12
 *   Description : This is common page block for all MTJ page.
 */

# Set the theme for your project's web pages.
# See the Committer Tools "How Do I" for list of themes
# https://dev.eclipse.org/committers/
# Optional: defaults to system theme

include 'vars.php';

$theme = "";

/* For test purposes */
$local = true;

# Define your project-wide Nav bars here.
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# these are optional

if($local == true){

    /* Remove the Navbar default links : Committers, Newsgroups, Bugs and Articles*/
    $Nav->setLinkList(array());

    $Nav->addNavSeparator("About This Project", $projectRoot);
     
    $Nav->addNavSeparator("Mobile Tools for Java&trade;", "/mtj/index.php");
    $Nav->addCustomNav("Getting Started", "/mtj/development/tutorial/gettingstarted.php", "", 2);
    //$Nav->addCustomNav("New & Noteworthy", "/mtj/development/releasenotes/MTJ1.1.x/newsNoteworthy.php", "", 2);
    $Nav->addCustomNav("Forum", "/mtj/forum.php", "", 2);
    $Nav->addCustomNav("Bugs", "/mtj/development/bugs", "", 2);
    $Nav->addCustomNav("Downloads", "/mtj/download/downloads.php", "", 2);
    
    $Nav->addNavSeparator("Contrubuting", "");
    $Nav->addCustomNav("Contributing", "/mtj/contributing.php", "", 2);
    $Nav->addCustomNav("Mailing Lists", "/mtj/mailinglist.php", "", 2);
    $Nav->addCustomNav("Developer Resources", "/mtj/development/", "", 2);
    
    $Nav->addNavSeparator("Legal", "");
    $Nav->addCustomNav("IP Log", "/projects/ip_log.php?projectid=$projectId", "", 2);
     
} else {

    /* Required eclipse basic classes */
    require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");

    $projectInfo = new ProjectInfo($projectId);
    $projectInfo->generate_common_nav( $Nav );

}

#$Nav->addNavSeparator("Events", "/mtj/events.php");
?>
