addLoadEvent(menu);

var current_open = new Array();

function menu(){
    var menu = document.getElementById('nav');
    menu.className = '';

    if (menu.addEventListener){
        menu.addEventListener('mouseover',function(e){menu_over(e);},false);
        menu.addEventListener('mouseout',function(e){menu_out(e);},false);
    }else{
        menu.attachEvent('onmouseover',function(e){menu_over(window.event)});
        menu.attachEvent('onmouseout',function(e){menu_out(window.event)});
    }
}

function target_li(event){
    var target = event.target ? event.target : event.srcElement;

    var li = target;

    while (li.parentNode && li.tagName != 'LI'){
        li = li.parentNode;
    }
    return li;
    
}

function menu_over(event){

    var li = target_li(event);

    li.over_state = true;

    if (! li.open_timer){
        li.open_timer = setTimeout(function(){set_over(li);},500);
    }

    if (li.close_timer){
        clearTimeout(li.close_timer);
        li.close_timer = null;
    }

    var par = li.parentNode.parentNode;
    while (par.tagName == 'LI'){
        if (par.close_timer){
            clearTimeout(par.close_timer);
            par.close_timer = null;
        }
        par = par.parentNode.parentNode;       
    }
}

function menu_out(event){
    var li = target_li(event);

    li.over_state = false;
    li.close_timer = setTimeout(function(){set_out(li);},500);

    if (li.open_timer){
        clearTimeout(li.open_timer);
        li.open_timer = null;
    }
}

function set_over(li){
    
    add_class(li,'jshover');
    li.open_timer = null;
}

function add_class(el,css_class){
    if (el.className.indexOf(css_class) == -1){
        if (el.className){
            el.className += ' ' + css_class;
        }else{
            el.className = css_class;
        }
    }
}

function remove_class(el,css_class){
    el.className = el.className.replace(css_class,'');
}

function set_out(li){
    remove_class(li,'jshover');
    li.close_timer = null;

    var ul = li.parentNode;

    for (var i = 0; i < ul.childNodes.length; i++){
        if (ul.childNodes[i].over_state){
            return;
        }
    }

    var par = li.parentNode.parentNode;

    while (par.tagName == 'LI'){
        if (! par.over_state){
            remove_class(par,'jshover');
        }
        
        for (var i = 0; i < par.parentNode.childNodes.length; i++){
            if (par.parentNode.childNodes[i].over_state){
                return;
            }
        }

        par = par.parentNode.parentNode;
    }
}

