// menu.js
// A basic menu script
// Requires:
//	utils.js
//  timer.js
// by Greg Poole | greg@webengine.com.au | www.webengine.com.au

var menus = new Array();

function Menu(obj) {
	
	obj.style.visibility = "hidden";
	
	this.menuobj = obj;
	this.showing = false;
	this.timer = new Timer(this);
	this.hideTimeout = -1;
	this.menubtn;
	this.topOffset = 0;
	this.leftOffset = 0;
	
	this.show = function() {
		this.timer.clearTimeout(this.hideTimeout);
		this.hideTimeout = -1;
		this.menuobj.style.visibility = "visible";
		this.menubtn.oldClassName = this.menubtn.className;
		this.menubtn.className += " selected";
	}
	
	this.hide = function() {
		this.menuobj.style.visibility = "hidden";
		this.hideTimeout = -1;
	}
	
	this.startHide = function() {
		this.hideTimeout = this.timer.setTimeout("hide", 150);
		this.menubtn.className = this.menubtn.oldClassName;
	}
	
	this.bindTo = function(button, id) {
		this.menubtn = button;
		var top = getAbsOffsetTop(button) + button.offsetHeight;
		var left = getAbsOffsetLeft(button);
		this.menuobj.style.position = "absolute";
		this.menuobj.style.top = top + this.topOffset + "px";
		this.menuobj.style.left = left + this.leftOffset + "px";
		this.menubtn.oldClassName = this.menubtn.className;
		addEventHandler(button, "onmouseover", function() { eval("menu_show('" + id + "')") });
		addEventHandler(button, "onmouseout", function() { eval("menu_hide('" + id + "')") });
	}
	
}

function menu_show(id) {
	menus[id].show();
}

function menu_hide(id) {
	menus[id].startHide();
}

function menu_create(id, div_id, button_id, offset_top, offset_left) {
	var div = document.getElementById(div_id);
	var button = document.getElementById(button_id);
	menus[id] = new Menu(div);
	menus[id].topOffset = offset_top;
	menus[id].leftOffset = offset_left;
	menus[id].bindTo(button, id);
	addEventHandler(div, "onmouseover", function() { eval("menu_show('" + id + "')") });
	addEventHandler(div, "onmouseout", function() { eval("menu_hide('" + id + "')") });
}