var dd = {
    delay : 250,
    init : function() {
        // snag the container div
        var topNav = document.getElementById('nav');
        // the list
        topList = topNav.getElementsByTagName('ul')[0];
        // items
        var allItems = topList.getElementsByTagName('li');
        for(var i = 0; i < allItems.length; i++) {
            var li = allItems[i];
            if(dd.isTop(li)) {
                // top level items
                dd.initTop(li);
            } else {
                // sub menu items
                dd.initSub(li);
            }
            if(i + 1 == allItems.length) {
                dd.lastItem(li);
            }
        }
    },
    initTop : function(li) {
        var topLink = li.getElementsByTagName('a')[0];
        if(dd.hasSub(li)) {
            // has a sub menu
            addEvent(topLink, 'mouseover', dd.topOver, false);
            addEvent(topLink, 'mouseout', dd.topOut, false);
        } else {
            // flyin solo
            topLink.className = 'solo';
            addEvent(topLink, 'mouseover', dd.hideAll, false);
        }
    },
    initSub : function(li) {
		var subLink = li.getElementsByTagName('a')[0];
		addEvent(subLink, 'mouseover', dd.subOver, false);
		addEvent(subLink, 'mouseout', dd.subOut, false);
    },
    lastItem : function(li) {
        while(!dd.isTop(li)) li = li.parentNode;
        li.className = 'last';
    },
    isTop : function(li) {
        return li.parentNode == topList;
    },
    hasSub : function(li) {
        return li.getElementsByTagName('ul').length != 0;
    },
    subOver : function(e) {
        e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
        var el = e.srcElement ? e.srcElement : e.target;
        while(el.nodeName != 'UL') el = el.parentNode;
        clearTimeout(el.to);
    },
    subOut : function(e) {
        var el = e.srcElement ? e.srcElement : e.target;
        while(el.nodeName != 'UL') el = el.parentNode;
        var topLink = el.parentNode.getElementsByTagName('a')[0];
        el.to = setTimeout("dd.mOutDelay('" + topLink.id + "');", dd.delay);
    },
    topOver : function(e) {
        e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
        var el = e.srcElement ? e.srcElement : e.target;
        var subMenu = el.parentNode.getElementsByTagName('ul')[0];
        clearTimeout(subMenu.to);
        subMenu.to = false;
        dd.hideAll();
        el.className = 'hover';
        dd.showChildMenu(el);
    },
    topOut : function(e) {
        var el = e.srcElement ? e.srcElement : e.target;
		while(el.nodeType == 3) el = el.parentNode;
        el.parentNode.getElementsByTagName('ul')[0].to = 
            setTimeout("dd.mOutDelay('" + el.id + "');", dd.delay);
    },
    mOutDelay : function(id) {
		var el = document.getElementById(id);
        el.className = null;
        dd.hideChildMenu(el);
    },
    hideAll : function() {
        var subs = topList.getElementsByTagName('ul');
        for(var i = 0; i < subs.length; i++) {
            subs[i].style.display = 'none';
        }
        var subLinks = topList.getElementsByTagName('a');
        for(var i = 0; i < subLinks.length; i++) {
            if(subLinks[i].className == 'hover') 
                subLinks[i].className = null;
        }
    },
    showChildMenu : function(el) {
        el.parentNode.getElementsByTagName('ul')[0].style.display = 'block';
    },
    hideChildMenu : function(el) {
        el.parentNode.getElementsByTagName('ul')[0].style.display = 'none';
    }
}

window.onload = dd.init;

