<?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
$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("MTJ", "/mtj/" );
    $Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=tools.sequoyah.mtj", "", 1  );
    $Nav->addCustomNav("Team", "/mtj/participants.php", "", 2  );
     
    $Nav->addNavSeparator("Using MTJ", "");
    $Nav->addCustomNav("Getting Started", "/mtj/development/tutorial/gettingstarted.php", "", 2);
    $Nav->addCustomNav("User Documentation", "http://help.eclipse.org/helios/topic/org.eclipse.mtj.doc.user/html/gettingstarted/gettingstarted.html", "", 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("Update Sites", "/mtj/download/update.php", "", 2);
    
    /*$Nav->addNavSeparator("Downloads", "");
     We no longer support downloads
     $Nav->addCustomNav("Latest builds", "/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("Development Tools", "/mtj/development/", "", 2);
    $Nav->addCustomNav("Programmer's Guide", "http://help.eclipse.org/galileo/topic/org.eclipse.mtj.doc.isv/html/guide/guide.html", "", 2);
    
    $Nav->addNavSeparator("Legal", "");
    $Nav->addCustomNav("IP Log", "http://www.eclipse.org/projects/ip_log.php?projectid=tools.sequoyah.mtj", "", 2);
     
} else {

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

    $projectInfo = new ProjectInfo("tools.sequoyah.mtj");
    $projectInfo->generate_common_nav( $Nav );

}

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