<?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:
 *		Eclipse Foundation - Initial version
 *      Thomas Shuetz and Henrik Rentz-Reichert - changes for eTrice
 *    
 *******************************************************************************/

	# 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("eTrice", 	"/etrice");
	$Nav->addCustomNav("Download", "/etrice/download.php", "_self", 3);
	$Nav->addCustomNav("Documentation", "/etrice/documentation", "_blank", 3);
	$Nav->addCustomNav("Support", "/etrice/support", "_blank", 3);
	$Nav->addCustomNav("Getting Involved", "/etrice/developers", "_blank", 3);

	# Define keywords, author and title here, or in each PHP page specifically
	$pageKeywords	= "ROOM, Real-Time Object-Oriented Modeling, dsl, modeling, textual, graphical, code generator, hierarchical state machine, inheritance";
	$pageAuthor		= "Henrik Rentz-Reichert";
	$pageTitle 		= "eTrice";


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