// Previous version of suckerfish not working in IE7
// JavaScript Document
//sfHover = function() {
//    var sfEls = document.getElementById("nav").getElementsByTagName("LI");
//    for (var i=0; i<sfEls.length; i++) {
//        sfEls[i].onmouseover=function() {
//            this.className+=" sfhover";
//            /* if (document.getElementById("sermonLists")) {
//                document.getElementById("sermonLists").style.visibility="hidden";
//             }*/
//        }
//        sfEls[i].onmouseout=function() {
//            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
//            /*if (document.getElementById("sermonLists")) {
//            document.getElementById("sermonLists").style.visibility="visible";
//            }*/
//        }
//    }
//}
//if (window.attachEvent) window.attachEvent("onload", sfHover);

//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                = 'sfhover';    // 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();
}