	var _menu_isIE = navigator.userAgent.indexOf("MSIE") >= 0;
	var _menu_isSafari = navigator.userAgent.indexOf("Safari") >= 0;
	var _menu_active = null;


	/* EVENT HANDLERS */
	function _menu_handleMouseOver(event, id, id2) {
		var trigger = _menu_isIE ? window.event.srcElement : event.currentTarget;

		if (_menu_active == null || (_menu_active != null && _menu_active != trigger)) {
			trigger.blur();
			if (trigger.menu == null) {
				trigger.menu = document.getElementById(id);
				trigger.menuhdr = document.getElementById(id2);
				if (trigger.menu.init == null) {
					_menu_init(trigger.menu);
				}
			}
			if (trigger.onmouseout == null) trigger.onmouseout = _menu_handleMouseOut;

			if (trigger == _menu_active) return false;
			if (_menu_active != null) _menu_deactivate(_menu_active);
			if (trigger != _menu_active) {
				_menu_activate(trigger);
				_menu_active = trigger;
			} else {
				_menu_active = null;
			}
		}
	}


	function _menu_handleMouseOut(event) {
		if (_menu_active == null) return;

		var obj = null;
		if (_menu_isIE) {
			obj = window.event.toElement;
		} else if (event.relatedTarget != null) {
			obj = event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode;
		}
		if (obj != null) {
			if (!_menu_isMenu(obj)) {
				_menu_deactivate(_menu_active);
				_menu_active = null;
			}
		}
	}


	/* CONTROL FUNCTIONS */
	function _menu_init(obj) {
		if (obj.isMenu == null) obj.isMenu = true;

		var elements = obj.getElementsByTagName("div");
		if (elements.length > 0) {
			for (var i = 0; i < elements.length; i++) {
				elements[i].isMenu = true;

/*
				var width = elements[0].offsetWidth;
				elements[0].style.width = width + "px";
				var difference = elements[0].offsetWidth - width;
				width -= difference;
				elements[0].style.width = width + "px";

				var iframe = document.createElement("IFRAME");
				iframe.frameBorder = 0;
				iframe.src = "javascript:void(0);"
				iframe.style.position = "absolute";
				iframe.style.display = "none";
				iframe.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
				obj.iframe = obj.parentNode.insertBefore(iframe, obj);
				obj.iframe.ismenu = true;
				obj.iframe.onMouseOver = _menu_handleMouseOver;
*/

				var elements2 = elements[i].getElementsByTagName("A");
				if (elements2.length > 0) {
					for (var j = 0; j < elements2.length; j++) {
						elements2[j].isMenu = true;
					}
				}
			}
		}
/*
		var elements = obj.getElementsByTagName("A");
		if (elements.length > 0) {
			for (var i = 0; i < elements.length; i++) {
				elements[i].isMenu = true;
			}
			if (_menu_isIE) {
				var width = elements[0].offsetWidth;
				elements[0].style.width = width + "px";
				var difference = elements[0].offsetWidth - width;
				width -= difference;
				elements[0].style.width = width + "px";

				var iframe = document.createElement("IFRAME");
				iframe.frameBorder = 0;
				iframe.src = "javascript:void(0);"
				iframe.style.position = "absolute";
				iframe.style.display = "none";
				iframe.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
				obj.iframe = obj.parentNode.insertBefore(iframe, obj);
			}
		}
*/
		obj.init = true;
	}

	function _menu_activate(obj) {
/*
		if (obj.inactiveClass == null) obj.inactiveClass = obj.className;
		if (obj.activeClass == null) obj.activeClass = obj.attributes["activeClass"] == null ? obj.className : obj.attributes["activeClass"].value;
		obj.className = obj.activeClass;
*/
		if (obj.menuhdr != null) {
			var toggleimg = obj.menuhdr.src;
			toggleimg = toggleimg.replace(/_off/gi,'_on');
			obj.menuhdr.src = toggleimg;
		}
		if (obj.onmouseout == null) obj.onmouseout = _menu_handleMouseOut;
		if (!_menu_isSafari) {
			if (obj.menu != null) {
				if (obj.menu.onmouseout == null) obj.menu.onmouseout = _menu_handleMouseOut;
	
				var x = _menu_offsetX(obj);
				var y = _menu_offsetY(obj);
				if (obj.vertical) {
					x += obj.offsetWidth;
				} else {
					y += obj.offsetHeight;
				}
				if (_menu_isIE) {
					x += obj.offsetParent.clientLeft;
					y += obj.offsetParent.clientTop;
				}
				obj.menu.style.left = x + "px";
				obj.menu.style.top = y + "px";
				obj.menu.style.visibility = "visible";
	/*
				if (obj.menu.iframe != null) {
					obj.menu.iframe.style.left = obj.menu.style.left;
					obj.menu.iframe.style.top = obj.menu.style.top;
					obj.menu.iframe.style.width = obj.menu.offsetWidth + "px";
					obj.menu.iframe.style.height = obj.menu.offsetHeight + "px";
					obj.menu.iframe.style.display = "";
					if (obj.menu.iframe.onmouseout == null) obj.menu.iframe.onmouseout = _menu_handleMouseOut;
				}
	*/
	
				var elements = obj.menu.getElementsByTagName("div");
				if (elements.length > 0) {
					for (var i = 0; i < elements.length; i++) {
						elements[i].style.visibility = "visible";
						elements[i].onmouseout = _menu_handleMouseOut;
						var elements2 = elements[i].getElementsByTagName("A");
						if (elements2.length > 0) {
							for (var j = 0; j < elements2.length; j++) {
								elements2[j].isMenu = true;
							}
						}
					}
				}
			}
		}
	}

	function _menu_deactivate(obj) {
/*
		obj.className = obj.inactiveClass;
*/
		if (obj.menuhdr != null) {
			var toggleimg = obj.menuhdr.src;
			toggleimg = toggleimg.replace(/_on/gi,'_off');
			obj.menuhdr.src = toggleimg;
		}

		if (!_menu_isSafari) {
			if (obj.menu != null) {
				obj.menu.style.visibility = "hidden";
				var elements = obj.menu.getElementsByTagName("div");
				if (elements.length > 0) {
					for (var i = 0; i < elements.length; i++) {
						elements[i].style.visibility = "hidden";
					}
				}
			}
			if (obj.menu.iframe != null) {
				obj.menu.iframe.style.display = "none";
			}
		}
	}


	/* UTILITY FUNCTIONS */
	function _menu_offsetX(obj) {
		var x = obj.offsetLeft;
		if (obj.offsetParent != null) x += _menu_offsetX(obj.offsetParent);
		return x;
	}

	function _menu_offsetY(obj) {
		var y = obj.offsetTop;
		if (obj.offsetParent != null) y += _menu_offsetY(obj.offsetParent);
		return y;
	}

	function _menu_isMenu(obj) {
		return obj.isMenu != null ? obj.isMenu : false;
	}
	