<?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("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);

	# 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("YOUR_CODE");
?>