
	function Menu(id) {
    this.id = id;

		if (document.getElementById) {
			var div = document.createElement("DIV");
      div.id = id;
			div.className = "ddMenu";

      document.body.appendChild(div);
		}

		this.el = document.getElementById(id);
		this.options = new Array();
		this.isMouseOver = false;

    this.obj = id + "Object";
    eval(this.obj + "=this");
    return this;
	}

	function Menu_AddOption(text, href) {
		var optionIndex = this.options.length;
		this.options[optionIndex] = [text, href];
	}
	Menu.prototype.addOption = Menu_AddOption;

	function Menu_Create(activator) {
		var i, div;

		for (i=0; i<this.options.length; i++) {
			div = document.createElement("DIV");
      div.id = this.id+i;
      this.el.appendChild(div);

			div.innerHTML = "<a href='" + this.options[i][1] + "'>" + this.options[i][0] + "</a>";
		}
	}
	Menu.prototype.create = Menu_Create;

	function Menu_Show(activator) {
		var menu = this.el;

		menu.style.left = activator.offsetLeft + "px";
		menu.style.top = (activator.offsetHeight + _getOffsetTop(activator)) + "px";
		menu.style.visibility = "visible";

		var obj = this;

		_addEvent(menu, "mouseover", function() {obj.isMouseOver = true;});
		_addEvent(menu, "mouseout", function(e) {Menu_Hide(menu, activator, e)});
		_addEvent(activator, "mouseout", function(e) {Menu_Hide(menu, activator, e)});
	}
	Menu.prototype.show = Menu_Show;

	function Menu_Hide(menu, activator, e) {
		var mouseX = (e) ? e.clientX : event.x;
		var mouseY = (e) ? e.clientY : event.y;

		if (mouseX < menu.offsetLeft || mouseX > (menu.offsetLeft+menu.offsetWidth) || mouseY < menu.offsetTop || mouseY > (menu.offsetTop+menu.offsetHeight)) {
			menu.style.visibility = "hidden";
		}

		_removeEvent(menu, "mouseover", function() {obj.isMouseOver = true;});
		_removeEvent(menu, "mouseout", function(e) {Menu_Hide(obj, e)});
		_removeEvent(activator, "mouseout", function(e) {Menu_Hide(obj, e)});
	}

	function _addEvent(obj, eventName, handler) {
		if (obj.addEventListener) {
			obj.addEventListener(eventName, handler, false);
		}
		else if (obj.attachEvent)
			obj.attachEvent("on" + eventName, handler);
	}

	function _removeEvent(obj, eventName, handler) {
		if (obj.removeEventListener)
			obj.removeEventListener(eventName, handler, false);
		else if (obj.detachEvent)
			obj.detachEvent("on" + eventName, handler);
	}

	function _getOffsetTop(obj) {
		return (obj.offsetParent) ? (obj.offsetTop + obj.offsetParent.offsetTop) : obj.offsetTop;
	}


