var activeMenuItem;

// add event capture
window.document.onmousedown = pageMouseDown;

function pageMouseDown(event) {
	var control;
	
	// check if there is an active menu item
	if (activeMenuItem == null) {
		return;
		}
	
	// get the control that was clicked
	control = window.event.srcElement;
	
	// do nothing if active menu item was clicked
	if (control == activeMenuItem) {
		return;
		}
	
	// if control is not part of a menu or submenu then
	// reset current active menu item
	if (findContainer(control, "DIV", "submenu") == null) {
		deactivateMenuItem(activeMenuItem);
		activeMenuItem = null;
		}
	}
function findContainer(element, tagName, className) {
	// find out if given element or any parent element has the specified tag name and class name
	while (element != null) {
		if (element.tagName != null && element.tagName == tagName && hasClassNamePart(element, className)) {
			return element;
			}
		element = element.parentNode;
		}
	return element;
	}
function hasClassNamePart(element, classnamepart) {
	// return true if given element has the given class name part
	// return false otherwise
	var i;
	var list;
	// get class name parts
	list = element.className.split(' ');
	// loop through class
	for (i=0; i<list.length; i++) {
		if (list[i] == classnamepart) {
			return true;
			}
		}
	// class name part not found
	return false;
	}
function menuMouseOver(menuItem, identifier) {
	//alert('menuMouseOver');
	if (activeMenuItem != menuItem) {
		// deactivate current active menu item
		deactivateMenuItem(activeMenuItem);
		// set active menu item
		setActiveMenuItem(menuItem);
		// get menu item submenu
		setMenuItemSubMenu(menuItem, identifier);
		// position menu item submenu
		positionSubMenu(menuItem);
		// show menu item submenu
		showSubMenu(menuItem.submenu);
		}
	}
function deactivateMenu() {
	//alert('deactivateMenu');
	deactivateMenuItem(activeMenuItem);
	}
function deactivateMenuItem(menuItem) {
	//alert('deactivateMenuItem');
	if (menuItem != null) {
		closeSubMenu(menuItem.submenu);
		menuItem.className = 'menuitem';
		}
	}
function closeSubMenu(submenu) {
	//alert('closeSubMenu');
	if (submenu != null) {
		submenu.style.visibility = 'hidden';
		}
	}
function setActiveMenuItem(menuItem) {
	//alert('setActiveMenuItem');
	if (activeMenuItem == null) {
		activeMenuItem = menuItem;
		}
	else if (activeMenuItem != menuItem) {
		hideSubMenu(activeMenuItem.submenu);
		activeMenuItem = menuItem;
		}
	menuItem.className = 'menuitemactive';
	}
function setMenuItemSubMenu(menuItem, identifier) {
	//alert('setMenuItemSubMenu');
	if (menuItem.submenu == null) {
		menuItem.submenu = window.document.getElementById(identifier);
		}
	}
function showSubMenu(submenu) {
	//alert('showSubMenu');
	if (submenu != null) {
		submenu.style.visibility = 'visible';
		}
	}
function hideSubMenu(submenu) {
	//alert('hideSubMenu');
	if (submenu != null) {
		submenu.style.visibility = 'hidden';
		}
	}
function positionSubMenu(menuItem) {
	//alert('positionSubMenu');
	var x;
	var y;
	if (menuItem.submenu != null) {
		// get coordinates
		x = getPageOffsetLeft(menuItem);
		y = getPageOffsetTop(menuItem) + menuItem.offsetHeight;
		// set submenu position
		menuItem.submenu.style.left = x;
		menuItem.submenu.style.top = y+3;
		}
	}
function getPageOffsetLeft(control) {
	var x;
	x = control.offsetLeft;
	if (control.offsetParent != null) {
		x += getPageOffsetLeft(control.offsetParent);
		}
	return x;
	}

function getPageOffsetTop(control) {
	var y;
	y = control.offsetTop;
	if (control.offsetParent != null) {
		y += getPageOffsetTop(control.offsetParent);
		}
	return y;
	}
