<!--
var __arrSAFishMenuItems = new Array();
var __arrSAFishMenuItemsByName = new Array();
var __SAFishMenus = new Array();
var __SAFish_Vis = false;
var __SAFish_Curr_Menu = null;

// constructor for class SAFish_Menu
function SAFish_Menu(parent) {
	// public properties
	this.cellHeight = 20;
	this.cellWidth = 100;
	this.defaultPadding = 8;
	this.left = __SAFish_MenuItem_getLeft(parent) + 'px';
	this.menuItems = new Array();
	this.top = __SAFish_MenuItem_getTop(parent) + 'px';
	// public methods
	this.addMenuItem = SAFish_Menu_addMenuItem;
	this.hideChildren = SAFish_Menu_hideChildren;
	this.setVisible = SAFish_Menu_setVisible;
	// add to array of menus
	var menuCount = __SAFishMenus.length
	__SAFishMenus[menuCount] = this;
}

// method to add a menu item to the menu
function SAFish_Menu_addMenuItem(menuItem) {
	this.menuItems[this.menuItems.length] = menuItem;
	menuItem.height = this.cellHeight + 'px';
	menuItem.paddingLeft = this.defaultPadding;
	menuItem.paddingRight = this.defaultPadding;
	menuItem.menu = this;
}

function SAFish_Menu_hideChildren() {
	for (var i=0; i<this.menuItems.length; i++) {
		this.menuItems[i].setChildrenVisible(false);
	}
}

// hides/shows the menu
function SAFish_Menu_setVisible(vis) {
	// get reference to table
	var iTop = parseInt(this.top);
	for (var i=0; i<this.menuItems.length; i++) {
		var oMenuItem = this.menuItems[i];
		var oDiv = oMenuItem.div;
		if (vis) {
			// make sure any other menus are invisible
			if ((__SAFish_Curr_Menu != null) && (__SAFish_Curr_Menu != this)) {
				__SAFish_Curr_Menu.setVisible(false);
				__SAFish_Curr_Menu.hideChildren();
			}
			oDiv.style.visibility = 'visible';
			oDiv.style.left = parseInt(this.left) + 'px';
			oDiv.style.top = iTop + 'px';
			oDiv.style.height = parseInt(this.cellHeight) + 'px';
			oDiv.style.width = this.cellWidth + 'px';
			// create border if first menu item
			if (i == 0) { 
				oDiv.style.borderTop = '1px solid ' + oMenuItem.borderColour;
				iTop += 1;
			}
			oMenuItem.updatePresentation();
			iTop += parseInt(this.cellHeight) + 1 + oMenuItem.paddingTop + oMenuItem.paddingBottom;
			__SAFish_Vis = true;
			__SAFish_Curr_Menu = this;
		}
		else {
			oDiv.style.visibility = 'hidden';
			// make sure second level disappears
			for (var j=0; j<oMenuItem.menuItems.length; j++) {
				oMenuItem.menuItems[j].div.style.visibility = 'hidden';
			}
		}
	}
}

//______________________________________________________________________________

// constructor for class SAFish_MenuItem
function SAFish_MenuItem(text, url, bgColour, fgColour) {
	// create the div that this menu item comprises of
	var oAnchor = null;
	var oDiv = document.createElement("DIV");
	var oText = null;
	oDiv.id = "__SAFish_MenuItem_" + __arrSAFishMenuItems.length;
	oDiv.style.position = 'absolute';
	oDiv.style.visibility = 'hidden';
	// add identifier attribute
	oDiv.setAttribute("safish_menu", "1");
	// add the anchor
	oAnchor = document.createElement("A");
	if (url != "") {
		oAnchor.setAttribute("href", url);
	}
	oText = document.createTextNode(text);
	oAnchor.appendChild(oText);
	oDiv.appendChild(oAnchor);
	document.body.appendChild(oDiv);
	// add event handlers
	oDiv.onmouseover = __SAFishMenuItem_MouseOver;
	oDiv.onmouseout = __SAFishMenuItem_MouseOut;
	oAnchor.onmouseover = __SAFishMenuItem_MouseOver;
	// private properties
	this.anchor = oAnchor;
	this.div = oDiv;
	this.id = oDiv.id;
	this.menuItems = new Array();
	this.parent = -1;
	// public properties
	this.backgroundColour = 'white';
	if (arguments.length > 2) this.backgroundColour = bgColour;
	this.bold = false;
	this.borderColour = 'black';
	this.className = '';
	this.fontFamily = 'Arial, Helvetica, sans-serif';
	this.fontSize = '10pt';
	this.foregroundColour = 'black';
	if (arguments.length > 3) this.foregroundColour = fgColour;
	this.height = 0;
	this.url = url;
	this.menu = null;
	this.paddingBottom = 0;
	this.paddingLeft = 8;
	this.paddingRight = 8;
	this.paddingTop = 4;
	this.text = text;
	// public methods
	this.addMenuItem = SAFish_MenuItem_addMenuItem;
	this.getTop = SAFish_MenuItem_getTop;
	this.setChildrenVisible = SAFish_MenuItem_setChildrenVisible;
	// private methods
	this.updatePresentation = SAFish_MenuItem_updatePresentation;
	// add to global array of objects and increment counter
	__arrSAFishMenuItemsByName[this.id] = this;
	__arrSAFishMenuItems[__arrSAFishMenuItems.length] = this;
	// update presentation
	this.updatePresentation();
}

// method to add a menu item to the menu
function SAFish_MenuItem_addMenuItem(menuItem) {
	this.menuItems[this.menuItems.length] = menuItem;
	menuItem.height = this.height;
	menuItem.div.style.background = this.div.style.background;
	menuItem.parent = this;
}

// function to get the top position of the menu item
function SAFish_MenuItem_getTop() {
	var obj = document.getElementById(this.id);
	return __SAFish_MenuItem_getTop(obj) + 'px';
}

// function to show all child elements
function SAFish_MenuItem_setChildrenVisible(vis) {
	// set all sub menu items visible
	var iTop = parseInt(__SAFish_MenuItem_getTop(this.div)) - 1;
	var iHeight = parseInt(this.div.style.height);
	for (var i=0; i<this.menuItems.length; i++) {
		var oMenuItem = this.menuItems[i];
		var oDiv = oMenuItem.div;
		if (vis) {
			oDiv.style.left = parseInt(__SAFish_MenuItem_getLeft(this.div)) + 
				parseInt(this.div.offsetWidth) - 1 + 'px';
			oDiv.style.top = iTop + 'px';
			oDiv.style.height = iHeight + 'px';
			oDiv.style.width = this.menu.cellWidth + 'px';
			oMenuItem.anchor.style.height = iHeight + 'px';
			oMenuItem.updatePresentation();
			oDiv.style.visibility = 'visible';
			// create border if first menu item
			if (i == 0) { 
				oDiv.style.borderTop = '1px solid ' + this.borderColour;
				iTop += 1;
			}
			iTop += iHeight + 1 + this.paddingTop + this.paddingBottom;
			__SAFish_Vis = true;
		}
		else {
			oDiv.style.visibility = 'hidden';
			oMenuItem.setChildrenVisible(false);
		}
	}
}

// updates presentation properties of the menu item
function SAFish_MenuItem_updatePresentation() {
	var oAnchor = this.anchor;
	var oDiv = this.div;
	oDiv.style.background = this.backgroundColour;
	oDiv.style.borderBottom = '1px solid ' + this.borderColour;
	oDiv.style.borderLeft = '1px solid ' + this.borderColour;
	oDiv.style.borderRight = '1px solid ' + this.borderColour;
	oDiv.style.fontFamily = this.fontFamily;
	oAnchor.style.fontFamily = this.fontFamily;
	oAnchor.style.color = this.foregroundColour;
	oAnchor.style.fontWeight = (this.bold ? 'bold' : 'normal');
	oAnchor.className = this.className;
	oDiv.style.fontSize = this.fontSize;
	oAnchor.style.fontSize = this.fontSize;
	oDiv.style.paddingBottom = this.paddingBottom + 'px';
	oDiv.style.paddingLeft = this.paddingLeft + 'px';
	oDiv.style.paddingRight = this.paddingRight + 'px';
	oDiv.style.paddingTop = this.paddingTop + 'px';
	oDiv.style.whiteSpace = 'nowrap';
	oDiv.className = this.className;
}

//______________________________________________________________________________

// helper function to get the left position of an element
function __SAFish_MenuItem_getLeft(obj) {
	var left = 0;
	while (obj != null) {
		left = left + parseInt(obj.offsetLeft);
		obj = obj.offsetParent;
	}
	return left;
}

// helper function to get the top position of an element
function __SAFish_MenuItem_getTop(obj) {
	var top = 0;
	while (obj != null) {
		top = top + parseInt(obj.offsetTop);
		obj = obj.offsetParent;
	}
	return top;
}

// helper function to make sure the menus should still be showing
function __SAFish_Menu_Check() {
	if (!__SAFish_Vis) {
		for (var i=0; i<__SAFishMenus.length; i++) {
			__SAFishMenus[i].setVisible(false);
			__SAFishMenus[i].hideChildren();
		}
	}
}

//______________________________________________________________________________

// event handler for when the mouse off a menu item
function __SAFishMenuItem_MouseOut(e) {
	__SAFish_Vis = false;
}

// event handler for when the mouse moves over a menu item
function __SAFishMenuItem_MouseOver(e) {
	__SAFish_Vis = true;
	var cell = null;
	var oMenuItem = null;
	var oMenuItemTmp = null;
	var oParent = null;
	// get the target cell
	if (!e) var e = window.event;
	if (e.target) {
		cell = e.target;
	}
	else if (e.srcElement) {
		cell = e.srcElement;
	}
	// if hovering over the anchor, then get the parent object, so we can get a 
	// handle on the menu item
	if (cell.tagName == "A") {
		cell = cell.offsetParent;
	}
	if (cell.id == null) return;
	oMenuItem = __arrSAFishMenuItemsByName[cell.id];
	oParent = oMenuItem.parent;
	// make sure parent is visible
	if (oParent == -1) {
		oMenuItem.menu.setVisible(true);
	}
	// hide all other visible menu items not related to this menu
	for (var i=0; i<__arrSAFishMenuItems.length; i++) {
		oMenuItemTmp = __arrSAFishMenuItems[i];
		if (oMenuItemTmp.parent == oMenuItem.parent) {
			oMenuItemTmp.setChildrenVisible(false);
		}
	}
	// set children visible
	oMenuItem.setChildrenVisible(true);
}

// initialise interval to ensure all menus should still be showing
setInterval("__SAFish_Menu_Check()", 1000);
//-->
