// based on http://www.alistapart.com/articles/dropdowns and http://www.htmldog.com/articles/suckerfish/dropdowns/if ((document.all) && (document.getElementById)) {	function MenuListElementHoverFix() {		var _this	= this;				if (typeof(Array.prototype.push) == 'undefined') {			// IE < 5.5 does not support push/pop			function push() {				var j = this.length;				for (var i = 0; i < push.arguments.length; ++i) {					this[j] = push.arguments[i];					j++;				}			}			function pop() {				var i = this[this.length - 1];				this.length--;				return i;			}			Array.prototype.push	= push;			Array.prototype.pop		= pop;		}				this.className				= 'hover';	// change the class name to use here if you are not happy with it		this.classNameSuffix		= ' ' + this.className;		this.removeClassNameRegExp	= new RegExp("\\b ?" + this.className + "\\b");		this.hoverElementStack		= new Array();				this.onmouseover	= function() {			if (!_this.isHover(this)) {				if (this.getAttribute('is_hover_class_removing') != 'true') {					this.className	+= _this.classNameSuffix;				}				this.setAttribute('is_hover', 'true');			}		}		this.isHover	= function(element) {			return (element.getAttribute('is_hover') == 'true');		}		this.checkNonHoverState	= function(element) {			if (!_this.isHover(element)) {				element.className	= element.className.replace(_this.removeClassNameRegExp, '');			}			element.removeAttribute('is_hover_class_removing');		}		this.checkLastNonHoverState	= function() {			var hoverElement	= null;			if (_this.hoverElementStack.length > 0) {				hoverElement	= _this.hoverElementStack.pop();			}			for (var i = _this.hoverElementStack.length - 1; i >= 0; i--) {				// we need to apply the "non-hover" class to the children first - else the result is mixed in the IE				var o = _this.hoverElementStack[i];				while (o != null) {					o	= o.offsetParent;					if (o == hoverElement) {						_this.checkNonHoverState(_this.hoverElementStack[i]);						break;					}				}			}			if (hoverElement != null) {				_this.checkNonHoverState(hoverElement);			}		}		this.onmouseout		= function() {			// all this mess to not change the class immediately (which would cause flickering in the IE)			this.setAttribute('is_hover', 'false');			if (this.getAttribute('is_hover_class_removing') != 'true') {				this.setAttribute('is_hover_class_removing', 'true');				_this.hoverElementStack.push(this);				window.setTimeout(_this.checkLastNonHoverState, 100);			}		}		this.fixElement		= function(elementRoot) {			for (var i=0; i < elementRoot.childNodes.length; i++) {				var node = elementRoot.childNodes[i];				if (node.nodeName == "LI") {					node.onmouseover	= this.onmouseover;					node.onmouseout		= this.onmouseout;				}				this.fixElement(node);			}		};		this.findElement	= function(elementRoot) {			for (var i=0; i< elementRoot.childNodes.length; i++) {				var node = elementRoot.childNodes[i];				if (node.nodeName == "UL") {					if ((node.id != '') && ((node.id.indexOf("menu") >= 0) || (node.id.indexOf("nav") >= 0))) {						this.fixElement(node);						continue;	// do not iterate through children of already fixed element					}				}				this.findElement(node);			}		};		this.fix			= function() {			var node = document.body;			if (node) {				_this.findElement(node);			}		}		this.addOnLoad		= function() {			if (window.attachEvent) {				window.attachEvent("onload", this.fix);			} else {				window.onload	= this.fix;			}		}	}	(new MenuListElementHoverFix()).addOnLoad();}
