<?php 
/*******************************************************************************
 * Copyright (c) 2006 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 (Eclipse Foundation)- initial API and implementation
 *******************************************************************************/

	#*****************************************************************************
	#
	# header.php
	#
	# Author: 		Wayne Beaton
	# Date:			February 16, 2006
	#
	# Description:
	#    This file adds a header (with menu) to the page.
	#****************************************************************************
	
	include("../html/header.php");
	if (file_exists("/home/data/httpd/eclipse-php-classes/menu/menu.class.php")) {
		require_once("/home/data/httpd/eclipse-php-classes/menu/menu.class.php");
		$Menu = new Menu("en");
		$Menu->addMenuItem("Tags Management", "/committers/membership/tags_management.php", "_self");
		$Menu->addMenuItem("Member Management", "/committers/membership/member_management.php", "_self");
		$Menu->addMenuItem("Add Tags To Member", "/committers/membership/member_tags.php", "_self");
		$Menu->addMenuItem("Add Members To Tag", "/committers/membership/tags_member.php", "_self");
				
		include("../modules/menu.php");
		echo "</tr></table>";
	}
	
?>

<script language="Javascript">

// fieldname, warningname, remainingname, maxchars
function CheckFieldLength(fn,rn,mc) {
  var len = fn.value.length;
  if (len > mc) {
    fn.value = fn.value.substring(0,mc);
    len = mc;
  }
  document.getElementById(rn).innerHTML = mc - len;
}
</script>
<link rel="stylesheet" type="text/css" href="./membership.css" />
