<?php

/*******************************************************************************
 * Copyright (c) 2009 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    
 *******************************************************************************/

	# 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 This Project-", "/projects/project_summary.php?projectid=mylyn.reviews.r4e");
	$Nav->addNavSeparator("R4E", 	"/r4e/");
	$Nav->addCustomNav("Download", "/r4e/download/", "_self", 3);
	$Nav->addCustomNav("Documentation", "/r4e/documentation/", "_blank", 3);
	$Nav->addCustomNav("Support", "/r4e/support/", "_blank", 3);
	$Nav->addCustomNav("Getting Involved", "/r4e/developers/", "_blank", 3);
	$Nav->addCustomNav("News and Noteworthy", "/r4e/news/", "_blank", 3);
	
	# Define keywords, author and title here, or in each PHP page specifically
	$pageKeywords	= "eclipse, r4e, reviews, mylyn reviews, models";
	$pageAuthor		= "Alvaro Sanchez-Leon";
	$pageTitle 		= "R4E";

	# top navigation bar
	# To override and replace the navigation with your own, uncomment the line below.
	$Menu->setMenuItemList(array());
	$Menu->addMenuItem("Home", "/r4e/", "_self");
	$Menu->addMenuItem("Download", "/r4e/download/", "_self");
	$Menu->addMenuItem("Documentation", "/r4e/documentation/", "_self");
	$Menu->addMenuItem("Support", "/r4e/support/", "_self");
	$Menu->addMenuItem("Developers", "/r4e/developers/", "_self");
	$Menu->addMenuItem("About", "/projects/project_summary.php?projectid=mylyn.reviews.r4e", "_self");
	
	# To define additional CSS or other pre-body headers
	# $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/default/style.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-37131233-1");
?>