

var submenu = {

	_items: [],
	getObjPos: function (obj) {
		return { y: this.GetElementTop(obj), x: this.GetElementLeft(obj) };
	},
	GetElementTop: function (obj) {
		if (!obj) { return 0; }
		var _t = obj.offsetTop;
		if (obj.offsetParent) { _t += this.GetElementTop(obj.offsetParent); }
		return _t;
	},
	GetElementLeft: function (obj) {
		if (!obj) { return 0; }
		var _t = obj.offsetLeft;
		if (obj.offsetParent) { _t += this.GetElementLeft(obj.offsetParent); }
		return _t;
	},
	open: function (srcObj, listID) {
		if (srcObj) { this.close(srcObj, null); }
		var list = document.getElementById(listID);
		if (list && srcObj) {
			var pos = this.getObjPos(srcObj);
			var rect = { width: srcObj.offsetWidth, height: srcObj.offsetHeight };
			//var cssText = "position:absolute; z-index:1000; left:" + (pos.x + parseInt(rect.width - rect.width / 4)) + "px; top:" + (pos.y - 6) + "px;";
			var cssText = "position:absolute; z-index:1000; left:" + (pos.x + rect.width - 36) + "px; top:" + (pos.y - 7) + "px;";
			list.style.cssText = cssText;
			list.className = "submenu";
			srcObj.className = "highlight";
			// add to list
			var foundInList = false;
			for (var i = 0; i < this._items.length; i++) {
				var item = this._items[i];
				if (item.menu == list) {
					item.closing = false;
					foundInList = true;
					break;
				}
			}
			if (!foundInList) {
				this._items[this._items.length] = { src: srcObj, menu: list, css: cssText, closing: false };
			}
		}
		return true;
	},
	submenufadeaway: function (item) {
		var obj = item.menu, oldcss = item.css;
		var srcObj = item.src;
		var t = null;
		var fadeaway = function () {
			if (!item.closing) { return; }
			//var alpha = "filter: alpha(opacity=20); -moz-opacity: 0.2; opacity: 0.2;";
			var cssText = obj.style.cssText;
			var r = /opacity\:\s*?([\.\d]+);/i;
			var result = r.exec(cssText), oldalphaStr = "1";
			if (result) {
				oldalphaStr = result[1];
				//alert(oldalphaStr);
			}
			var newalpha = 0;
			var oldalpha = parseInt(parseFloat(oldalphaStr) * 100);
			if (oldalpha >= 20) {
				newalpha = oldalpha - 20; // parseInt(oldalpha / 2);
			} else {
				newalpha = 0;
			}
			if (newalpha >= 10) {
				//alert(newalpha);
				item.menu.className = "submenu";
				obj.style.cssText = oldcss + " filter:alpha(opacity=" + newalpha + "); -moz-opacity:" + (newalpha / 100) + "; opacity:" + (newalpha / 100) + ";";
				//alert(cssText + "\n\n" + obj.style.cssText);
				return;
			}
			//alert("close");
			obj.className = "";
			obj.style.cssText = "display:none;visibility:hidden;";
			if (t) { window.clearInterval(t); }
		};
		//fadeaway();
		srcObj.className = "normal";
		t = window.setInterval(fadeaway, 50);
	},
	close: function (srcObj, targetMenuID) {
		if (this._items) {
			//if (srcObj) { if (srcObj.id) { (srcObj.id); } }
			//
			for (var i = 0; i < this._items.length; i++) {
				var item = this._items[i];
				if (item.menu && (!targetMenuID || item.menu.id == targetMenuID)) {
					var isOutOfParent = false;
					if (srcObj) {
						if (item.src == srcObj) {
							isOutOfParent = true;
						}
					}
					if (/*!isOutOfParent && */!item.closing) {
						//item.menu.className = "";
						//item.menu.style.cssText = "display:none;visibility:hidden;";
						item.closing = true;
						this.submenufadeaway(item);
					}
				} else if (item.menu && targetMenuID != item.menu.id) {
					item.menu.className = "";
					item.menu.style.cssText = "display:none;visibility:hidden;";
					item.src.className = "normal";
				}
			}
		}
		return true;
	},
	_t: null,
	cancelidleclose: function () {
		if (this._t) { window.clearTimeout(this._t); }
	},
	idleclose: function () {
		if (this._t) { this.cancelidleclose(); }
		var root = this;
		var handler = function () {
			root.close.call(root, null);
		};
		var t = window.setTimeout(handler, 500);
		this._t = t;
	}

};
