<?php
	# Set the theme for your project's web pages.
	# See http://eclipse.org/phoenix/
	$theme = "Nova";
	
	# Define your project-wide Navigation here
	# This appears on the left of the page if you define a left nav
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# these are optional
	
	# If you want to override the eclipse.org navigation, uncomment below.
	$Nav->setLinkList(array());
	
	# Break the navigation into sections
	$Nav->addNavSeparator("About Subversive", "http://www.eclipse.org/projects/project_summary.php?projectid=technology.subversive");
	$Nav->addCustomNav("Subversive Home", "/subversive/index.php", "_self", 1);	
	
	$Nav->addNavSeparator("Downloads", "/subversive/downloads.php", "_self");
	$Nav->addCustomNav("Latest Releases", "/subversive/latest-releases.php", "_self", 1);
	$Nav->addCustomNav("Installation Instructions", "/subversive/installation-instructions.php", "_self", 1);
	$Nav->addCustomNav("Special Builds", "/subversive/special-builds.php", "_self", 1);
	$Nav->addCustomNav("Previous Releases", "/subversive/previous-releases.php", "_self", 1);		
	
	$Nav->addNavSeparator("Documentation", "/subversive/documentation.php");
	$Nav->addCustomNav("Getting Started", "/subversive/documentation/gettingStarted.php", "_self", 1);
	$Nav->addCustomNav("User Guide", "/subversive/documentation/index.php", "_self", 1);	
	$Nav->addCustomNav("New & Noteworthy", "http://wiki.eclipse.org/Subversive_New_and_Noteworthy", "_self", 1);
	$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/index.php/Subversive", "_self", 1);		
	
	$Nav->addNavSeparator("Support", "/subversive/support.php");
	$Nav->addCustomNav("Newsgroup", "/subversive/newsgroup.php", "_self", 1);	
	$Nav->addCustomNav("Mailing Lists", "/subversive/mailinglists.php", "_self", 1);
	$Nav->addCustomNav("Issues (Bugzilla)", "https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&classification=Technology&product=Subversive&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED", "_self", 1);
	$Nav->addCustomNav("Report a Bug", "https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Subversive&rep_platform=All&op_sys=All", "_self", 1);	
	
	$Nav->addNavSeparator("Getting Involved", "/subversive/getting-involved.php");
	$Nav->addCustomNav("Repository", "http://dev.eclipse.org/viewcvs/viewvc.cgi/?root=Technology_SUBVERSIVE", "_self", 1);
	$Nav->addCustomNav("Integrations", "/subversive/integrations.php", "_self", 1);
	$Nav->addCustomNav("Project Plan", "http://www.eclipse.org/projects/project-plan.php?projectid=technology.subversive", "_self", 1);
	$Nav->addCustomNav("IP Log", "http://www.eclipse.org/projects/ip_log.php?projectid=technology.subversive", "_self", 1);

	# Define keywords, author and title here, or in each PHP page specifically
	# $pageKeywords	= "xtext, dsl, modeling, domain specific language, textual";
	# $pageAuthor		= "Your name";
	# $pageTitle 		= "Xtext";

	# top navigation bar
	# To override and replace the navigation with your own, uncomment the line below.
	$Menu->setMenuItemList(array());
	$Menu->addMenuItem("Subversive Home", "/subversive/index.php", "_self");
	$Menu->addMenuItem("Downloads", "/subversive/downloads.php", "_self");
	$Menu->addMenuItem("Documentation", "/subversive/documentation.php", "_self");
	$Menu->addMenuItem("Support", "/subversive/support.php", "_self");
	$Menu->addMenuItem("Getting Involved", "/subversive/getting-involved.php", "_self");		
	$Menu->addMenuItem("About", "http://www.eclipse.org/projects/project_summary.php?projectid=technology.subversive", "_self");			

	
	# To define additional CSS or other pre-body headers
	# $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/subversive/css/style.css"/>');
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/subversive/css/default.css"/>');	
	
	# To enable occasional Eclipse Foundation Promotion banners on your pages (EclipseCon, etc)
	# $App->Promotion = TRUE;
	
	# If you have Google Analytics code, use it here
	$App->SetGoogleAnalyticsTrackingCode("UA-129970-16");
?>