	var currentMenu = null;
	var currentFrame = null;
	var mytimer = null;
	var timerOn = false;
	var opera = window.opera ? true : false;

	if (!document.getElementById)
		document.getElementById = function() { return null; }

	function initialiseControlMenu(menuId, frameId, starterId) {
		var menu = document.getElementById(menuId);
		var frame = document.getElementById(frameId);
		var starter = document.getElementById(starterId);

		if (menu == null || starter == null) return;

		initialiseGenericMenu(menu, frame, starter);
		
		starter.showMenu = function() {
			if (!opera) {
				menu.style.left = this.offsetLeft + "px";
				menu.style.top = this.offsetTop + this.offsetHeight + "px";
			}
			else {
				menu.style.left = this.offsetLeft + "px";
				menu.style.top = this.offsetHeight + "px";
			}
			menu.style.visibility = "visible";
			currentMenu = menu;
			if (frame) {
				frame.style.visibility = "visible";
				currentFrame = frame;
			}
		}

	}

	function initialisePulloutMenu(menuId, frameId, starterId) {
		var menu = document.getElementById(menuId);
		var frame = document.getElementById(frameId);
		var starter = document.getElementById(starterId);

		if (menu == null || starter == null) return;

		initialiseGenericMenu(menu, frame, starter);
		
		starter.showMenu = function() {
			currentMenu = menu;
			currentFrame = frame;
			menu.style.left = "100%";
			menu.style.bottom = "0px";
			mytimer = setTimeout("showMenu('" + menuId + "', '" + frameId + "');", 500);
			timerOn = true;
		}
	}

	function initOptions(menu) {
		var i = 1;
		
		var options = menu.getElementsByTagName('a');
		
		for (var i = 0; i < options.length; i++) {
			options[i].onfocus = function() {
				stopTime();
			}
			options[i].onblur = function() {
				currentMenu.onmouseout();
			}
		}
	}

	function initialiseGenericMenu(menu, frame, starter) {
		currentMenu = menu;
		currentFrame = frame;

		starter.onmouseover = function() {
			if (currentFrame) {
				currentFrame.style.visibility = "hidden";
			}
			if (currentMenu) {
				currentMenu.style.visibility = "hidden";
				stopTime();
				this.showMenu();
			}
		}

		menu.onmouseover = function() {
			if (currentFrame) {
				currentFrame.style.visibility = "hidden";
			}
			if (currentMenu) {
				currentMenu.style.visibility = "hidden";
				this.showMenu();
			}
		}
		starter.onfocus	= function() {
			this.onmouseover();
		}

		starter.onblur = function() {
			this.onmouseout();
		}

		menu.onfocus = function() {
			stopTime();
		}

		menu.onblur	= function() {
			this.onmouseout();
		}

		menu.showMenu = function() {
			menu.style.visibility = "visible";
			if (frame) {
				frame.style.visibility = "visible";
				currentFrame = frame;
			}
			currentMenu = menu;
			stopTime();
		}

		menu.hideMenu = function()  {
			if (timerOn) {
				killMenu(menu, frame);
			} else {
				mytimer = setTimeout("killMenu('" + (menu != null ? menu.id : null) + "', '" + (frame != null ? frame.id : null) + "');", 1000);
				timerOn = true;
			}
		}

		menu.onmouseout = function(event) {
			this.hideMenu();
		}

		starter.onmouseout = function() {
			menu.hideMenu();
		}
		
		initOptions(menu);	
	}

	function showMenu(amenu, aframe) {
		if (amenu) {
			var menu = document.getElementById(amenu);
			if (menu) menu.style.visibility = "visible";
		}
		if (aframe) {
			var frame = document.getElementById(aframe);
			if (frame) frame.style.visibility = "visible";
		}
		stopTime();
	}

	function killMenu(amenu, aframe) {
		stopTime();
		if (amenu) {
			var menu = document.getElementById(amenu);
			if (menu)  menu.style.visibility = "hidden";
		}
		if (aframe) {
			var frame = document.getElementById(aframe);
			if (frame)  frame.style.visibility = "hidden";
		}
	}

	function stopTime() {
		if (mytimer) {
			clearTimeout(mytimer);
			mytimer = null;
			timerOn = false;
		}
	}