function VMenu(el) {
	this.interval = 200;
	this.selectedItem = null;
	this.timeout = null;
	this.clearTimer = function() {
		if (this.timeout) {
			window.clearTimeout(this.timeout);
			this.timeout = null;
		}
	};
	this.hide = function() {
		this.clearTimer();
		if (this.selectedItem) {
			if (this.selectedItem.vmenu_submenu) {
				this.selectedItem.vmenu_submenu.hideMenu();
			}
			var c = this.selectedItem.className;
			this.selectedItem.className = c.replace("vmenu_item_selected", "vmenu_item");
			this.selectedItem = null;
		}
	};
	this.over = function(item) {
		this.clearTimer();
		if (this.selectedItem != item) {
			this.hide();
			this.selectedItem = item;
			var c = this.selectedItem.className;
			this.selectedItem.className = c.replace("vmenu_item", "vmenu_item_selected");
			if (this.selectedItem.vmenu_submenu) {
				this.selectedItem.vmenu_submenu.showMenu(item);
			}
		}
	};
	this.out = function() {
		var self = this;
		this.timeout = window.setTimeout(function() {self.hide();}, this.interval);
	};
	this.init = function(el) {
		if (el.className) {
			if (el.className.indexOf("vmenu_item") >= 0) {
				el.onmouseover = this.onmouseover;
				el.onmouseout = this.onmouseout;
			} else if (el.className.indexOf("vmenu_submenu") >= 0) {
				el.parentNode.vmenu_submenu = new VMenuSubmenu(this, el);
			}
		}
		if (el.childNodes) {
			for (var i = 0; i < el.childNodes.length; i++) {
				this.init(el.childNodes[i]);
			}
		}
	};
	var self = this;
	this.onmouseover = function() {self.over(this);};
	this.onmouseout = function() {self.out();};
	this.init(el);
}

function VMenuSubmenu(vmenu, el) {
	this.vmenu = vmenu;
	this.submenuElement = el;
	this.selectedItem = null;
	this.showMenu = function(parentEl) {
		var d = document.getElementById("middle_menu");
		if (!d.onmouseover) {
			var vmenu = this.vmenu;
			d.onmouseover = function() {vmenu.clearTimer();};
			d.onmouseout = function() {vmenu.out();};
			var top = 0;
			for (var el = parentEl; el; el = el.offsetParent) {
				top += new Number(el.offsetTop);
			}
			d.topPosition = (top + parentEl.offsetHeight) + "px";
		}
		var m = window.frames.middle_menu.document.getElementById("menu");
		m.innerHTML = this.submenuElement.innerHTML;
		this.init(m);
		if (true || !this.submenuElement.leftPosition) {
			var left = 0;
			for (var el = parentEl; el; el = el.offsetParent) {
				left += new Number(el.offsetLeft);
			}
			d.style.display = "";
			var mm = window.frames.middle_menu.document.getElementById("middle_menu");
			this.submenuElement.widthPosition = mm.offsetWidth + "px";
			if (left + mm.offsetWidth > d.parentNode.offsetWidth) {
				left = d.parentNode.offsetWidth - mm.offsetWidth;
			}
			this.submenuElement.leftPosition = left + "px";
		}
		d.style.display = "";
		d.style.left = this.submenuElement.leftPosition;
		d.style.width = this.submenuElement.widthPosition;
		d.style.top = d.topPosition;
	};
	this.hideMenu = function() {
		document.getElementById("middle_menu").style.display = "none";
	};
	this.hide = function() {
		if (this.selectedItem) {
			var c = this.selectedItem.className;
			this.selectedItem.className = c.replace("vmenu_item_selected", "vmenu_item");
			this.selectedItem = null;
		}
	};
	this.over = function(item) {
		if (this.selectedItem != item) {
			this.hide();
			this.selectedItem = item;
			var c = this.selectedItem.className;
			this.selectedItem.className = c.replace("vmenu_item", "vmenu_item_selected");
		}
	};
	this.out = function() {
		this.hide();
	};
	this.init = function(el) {
		if (el.className && el.className.indexOf("vmenu_item") >= 0) {
			el.onmouseover = this.onmouseover;
			el.onmouseout = this.onmouseout;
			return;
		}
		if (el.childNodes) {
			for (var i = 0; i < el.childNodes.length; i++) {
				this.init(el.childNodes[i]);
			}
		}
	};
	var self = this;
	this.onmouseover = function() {self.over(this);};
	this.onmouseout = function() {self.out();};
}
