function addEvent(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
    } 
    else if (elm.attachEvent) {
        var r = elm.attachEvent('on' + evType, fn);
        EventCache.add(elm, evType, fn);
        return r;
    } 
    else {
        elm['on' + evType] = fn;
    }
}

addEvent(window, 'unload', EventCache.flush, false);

function init() {
    var nav = document.getElementById('auxnav');
    var lis = nav.getElementsByTagName('li');
    for (var i = 0; i < lis.length; i++) {
        var node = lis[i];
        // attach events to menu items
        if (node.nodeName.toLowerCase() == 'li' && node.getElementsByTagName('ul').length > 0) {
            addEvent(node, 'mouseover', getMoverFor(node), false);
            addEvent(node, 'mouseout', getMoutFor(node), false);
        }
    }
}

addEvent(window, 'load', init, false);

function getMoverFor(node) {
    return function(e) { mover(e, node); };
}

function getMoutFor(node) {
    return function(e) { mout(e, node); };
}

// show submenu and background
function mover(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
    for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
            node.style.display = 'block';
        }
    }
}

// hide submenu and background
function mout(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    el.outTimeout = setTimeout(function() { mout2(el); }, 300);
}

function mout2(el) {
    for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
            node.style.display = 'none';
        }
    }
}