<?php
/*******************************************************************************
 * Copyright (c) 2011 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:
 *   Wayne Beaton - initial API and implementation
 *******************************************************************************/

/*
 * Add Google Charts library import to the header.
 * This is in a separate file which we can easily require_once as many times
 * as we need to. This makes it much easier to keep track of whether or not
 * we've already tried to add this library, and prevent us from attempting to
 * add it multiple times.
 */
global $App;
$App->AddExtraHtmlHeader('<script type="text/javascript" src="https://www.google.com/jsapi"></script>');
?>