<?php

/*******************************************************************************
 * Copyright (c) 2009-2015 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 = "solstice";
	

	# 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());
	$Nav->setLinkList(null);
	$branding = <<<EOBRANDING
<div id="branding">
<center>
<h2>Target Communication Framework (TCF)</h2>
</center>
</div>
EOBRANDING;
	$Menu->setProjectBranding($branding);
	
	# Page-specific Nav bars go here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	$Nav->addNavSeparator("TCF", 	"/tcf");
	# Break the navigation into sections
    $Nav->addCustomNav("About", "http://projects.eclipse.org/projects/tools.cdt.tcf", "_self", 1);
	$Nav->addCustomNav("Download", "/tcf/downloads.php", "_self", 2);
	$Nav->addCustomNav("Documentation", "/tcf/documentation.php", "_self", 2);
	$Nav->addCustomNav("Support", "/tcf/support.php", "_self", 2);
	$Nav->addCustomNav("Getting Involved", "/tcf/developers.php", "_self", 2);

	# Define keywords, author and title here, or in each PHP page specifically
	$pageKeywords = isset($pageKeywords) ? $pageKeywords : "eclipse, tcf, embedded, target, debugging, cdt, communication, linux";
	$pageAuthor = isset($pageAuthor) ? $pageAuthor : "Martin Oberhuber";

	## top navigation bar
	## To override and replace the navigation with your own, uncomment the line below.
	#$Menu->setMenuItemList(array());
	#$Menu->addMenuItem("Eclipse &gt;", "/", "_self");
	#$Menu->addMenuItem("CDT &gt;", "/cdt", "_self");
	#$Menu->addMenuItem("TCF |", "/tcf", "_self");
	#$Menu->addMenuItem("Download", "/tcf/downloads.php", "_self");
	#$Menu->addMenuItem("Documentation", "/tcf/documentation.php", "_self");
	#$Menu->addMenuItem("Support", "/tcf/support.php", "_self");
	#$Menu->addMenuItem("Developers", "/tcf/developers.php", "_self");
    #$Menu->addMenuItem("About", "http://projects.eclipse.org/projects/tools.cdt.tcf", "_self");
	
	## To define additional CSS or other pre-body headers
	#$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/tcf/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-312551-3");
?>