function PopupMenu() {
	this.menus = new Array();
	this.prevMenuEls = new Array();
	this.poppedUp = new Array();
}

PopupMenu.prototype.mouseOver = function (el, level, menuToPopup) {
	level = this.gml(level);
	this.clearMenusFromLevel(level+1);
	if (el!=this.prevMenuEls[this.prevMenuEls.length-1]) {
		if (this.prevMenuEls[this.prevMenuEls.length-1]!=null) {
			this.unselectMenuItem(this.prevMenuEls[this.prevMenuEls.length-1]);
		}
	}
	el.style.background = 'red';
	this.prevMenuEls[this.prevMenuEls.length-1] = el;
	///If menuToPopup, pop it up
	if (menuToPopup) {
		this.createPopupMenu(document.getElementById(menuToPopup), menuToPopup, el);
	}
};

PopupMenu.prototype.clearMenus = function() {
	this.clearMenusFromLevel(0);
}

PopupMenu.prototype.clearMenusFromLevel = function(level) {
	level = this.gml(level);
	for (var i in this.menus) {
		if (this.menus[i] >= level) {
			if (gbid(i) && gbid(i).style.display!='none') {
				dismissPopup(gbid(i));
			}
		}
	}
	for (var i=level; i<this.poppedUp.length; i++) {
		if (typeof(this.poppedUp[i])!="undefined") {
			dismissPopup(this.poppedUp[i]);
		}
	}
	for (var i=level; i<this.prevMenuEls.length; i++) {
		if (this.prevMenuEls[i]!=null) {
			this.unselectMenuItem(this.prevMenuEls[i]);
		}
	}
	this.poppedUp.length -= (this.poppedUp.length-level);
	this.prevMenuEls.length -= (this.prevMenuEls.length-level);
}

PopupMenu.prototype.unselectMenuItem = function(el) {
	el.style.background = 'none';
}

PopupMenu.prototype.createPopupMenu = function(popup, level, top, left, alternateLeft) {
	level = this.gml(level);
	if (isNaN(top)) {
		el = top;
		top = getElTop(el);
		left = getElRight(el);
		alternateLeft = getElLeft(el);
	}
	this.clearMenusFromLevel(level);
	this.poppedUp.push(popup);
	this.prevMenuEls.push(null);
	popupElement(this.poppedUp[this.poppedUp.length-1], top, left, alternateLeft);
}

PopupMenu.prototype.setMenuLevel= function(txt, level) {
	this.menus[txt] = level;
}

PopupMenu.prototype.getMenuLevel = function(txt) {
	if (isNaN(txt)) {
		return this.menus[txt];
	}
	return txt;
}

PopupMenu.prototype.gml = PopupMenu.prototype.getMenuLevel;


