<?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 the necessary scripts and styles to the header to support
 * project summary information. This header information is kept separate
 * so that it can easily be added using require_once. This makes it
 * so we don't have to invent some clever way to keep track of whether or
 * not we've already done this.
 * 
 * Assumes that the $App variable has already been defined.
 */
require_once dirname(__FILE__) . '/jquery.php';

$App->AddExtraHtmlHeader('<style>
	.actions_holder {height:20px}
	.actions {display:none;}
	.actions img {vertical-align:text-top;}
	.slideup {display:none;}
</style>');
$App->AddExtraHtmlHeader('<script type="text/javascript">
	$(document).ready(function() {
		$(".actions_holder").hover(
     		function() {$(this).children(".actions").show();},
			function() {$(this).children(".actions").hide();}
 			);
 		$(".slideup_toggle").click(
 			function() {$(this).children(".slideup").toggle("slow");}
 			);
	});
</script>');
?>