/*
 * sfDelay - Suckerfish CSS menu with JS delay.
 *
 * Copyright (c) 2008 Peter Ryan (peter-ryan.co.uk)
 * This function is free for anyone to use, modify and redistribute.
 *
 * $Id: sfdelay.js 19 2008-05-19 15:33:48Z pryan $
 */
/* http://simonwillison.net/2004/May/26/addLoadEvent/ */
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
};
sfHover = function() {
    var timeout = 400;
    // leeh 10JUN08
    //var timeout = 0;
    var cssClass = "sfhover";
    var queue = [];
    var reCSS = new RegExp("\\b" + cssClass + "\\b");
    var sfEls = document.getElementById("nav").getElementsByTagName("li");
    for (var i=0; i<sfEls.length; i++) {
  
        // mouseover and mouseout handlers for regular mouse based interface.
        sfEls[i].onmouseover = function() {
            queueFlush();
            this.className += " " + cssClass;
        }
        sfEls[i].onmouseout = function() {
            queue.push([setTimeout(queueTimeout, timeout), this]);
        }
        // focus and blur handlers for keyboard based navigation.
        sfEls[i].onfocus = function() {
            queueFlush();
            this.className += " " + cssClass;
        }
        sfEls[i].onblur = function() {
            queue.push([setTimeout(queueTimeout, timeout), this]);
        }
        // click event handler needed for tablet type interfaces (e.g. Apple iPhone).
        sfEls[i].onclick = function(e) {
            if (this.className.search(reCSS) == -1) {
                // CSS not set, so clear all sibling (and decendants) menus, and then set CSS on this menu...
                var elems = this.parentNode.getElementsByTagName("li");
                for (var i=0; i<elems.length; i++) {
                    elems[i].className = elems[i].className.replace(reCSS, "");
                }
                this.className += " " + cssClass;
            } else {
                // CSS already set, so clear all decendant menus and then this menu...
                var elems = this.getElementsByTagName("li");
                for (var i=0; i<elems.length; i++) {
                    elems[i].className = elems[i].className.replace(reCSS, "");
                }
                this.className = this.className.replace(reCSS, "");
            }
            if (e && e.stopPropagation)
                e.stopPropagation();
            else
                window.event.cancelBubble = true;
        }
    }
    queueFlush = function () {
        while (queue.length) {
            clearTimeout(queue[0][0]);
            queueTimeout();
        }
    }
    queueTimeout = function() {
        if (queue.length) {
            var el = queue.shift()[1];
            el.className = el.className.replace(reCSS, "");
        }
    }
}
addLoadEvent(sfHover);