/**
  *Author: David Boggus
  *URL: www.boggusweb.com
  *Date: 9-15-06
  **/
var dbMenu = {
    init: function(){
        var uls = document.getElementsByTagName('ul');
        for(var i = 0; i < uls.length; i++){
            if(uls[i].className.search(/\bdbMenu/) == -1)
                continue;
            var menu = uls[i];

	    var i=0;            
            dbMenu.styleSubMenus(menu);
            
            addEvent(menu, 'mouseover', dbMenu.hover, false);
            addEvent(menu, 'mouseout', dbMenu.hoverOff, false);
            if(menu.className.search(/\bonMouse\b/) == -1){
                addEvent(menu, 'click', dbMenu.click, false);
            }
            addEvent(menu, 'click', dbMenu.nav, false);

	    return;
        }    
    },
    
    hover: function(e){
        var target = (window.event)? window.event.srcElement : (e)? e.target : null;
        
        if(target){
            target = dbMenu.getTarget(target, 'li');
            if(!target) return;
        }else{
            return;
        }

        target.className = target.className.replace(/hide/g, '');
        target.className += ' hover';
        if (target.timeout) clearTimeout(target.timeout);
	target.timeout = null;

        var t; 
	t= (target.parentSubMenu)? target.parentSubMenu : null;
        if(!t) return;
        if (t.timeout) clearTimeout(t.timeout);
	t.timeout = null;
	while (t.parentSubMenu.innerHTML != t.innerHTML) {
		t= (t.parentSubMenu)? t.parentSubMenu : null;
	        if(!t) return;
	        if (t.timeout) clearTimeout(t.timeout);
		t.timeout = null;
	};


        if(target.parentMenu.className.search(/\bonMouse/) != -1){
            t.className += ' click';
        }
    },
    
    hoverOff: function(e){
        var target = (window.event)? window.event.srcElement : (e)? e.target : null;
        
        if(target){
            target = dbMenu.getTarget(target, 'li');
            if(!target) return;
        }else{
            return;
        }
        
        target.className = target.className.replace(/hover/g, '');

        if(target.parentMenu.className.search(/\bonMouse/) != -1){
            var t = (target.className.search(/\bsubMenu\b/) != -1)? target : (target.parentSubMenu)? target.parentSubMenu: null;
            if(!t) return; 

	    if (!t.timeout) t.timeout = setTimeout(new Function("document.getElementById('" + t.id + "').className = document.getElementById('" + t.id + "').className.replace(/click/g, '') + ' hide';"), 100);
	    while (t.parentSubMenu.innerHTML != t.innerHTML) {
		t= (t.parentSubMenu)? t.parentSubMenu : null;
	        if(!t) return;
	        if (!t.timeout) t.timeout = setTimeout(new Function("document.getElementById('" + t.id + "').className = document.getElementById('" + t.id + "').className.replace(/click/g, '') + ' hide';"), 100);
	    };
        }

        target = (window.event)? window.event.toElement : null;
        
        if(target){
            target = dbMenu.getTarget(target, 'li');
            if(!target) return;
        }else{
            return;
        }

        target.className = target.className.replace(/hide/g, '');
        target.className += ' hover';
        if (target.timeout) clearTimeout(target.timeout);
	target.timeout = null;

        var t; 
	t= (target.parentSubMenu)? target.parentSubMenu : null;
        if(!t) return;
        if (t.timeout) clearTimeout(t.timeout);
	t.timeout = null;
	while (t.parentSubMenu.innerHTML != t.innerHTML) {
		t= (t.parentSubMenu)? t.parentSubMenu : null;
	        if(!t) return;
	        if (t.timeout) clearTimeout(t.timeout);
		t.timeout = null;
	};


        if(target.parentMenu.className.search(/\bonMouse/) != -1){
            t.className += ' click';
        }


    },
    
    click: function(e){
        if(window.event){
            window.event.cancelBubble = true;
        }
        if(e && e.stopPropagation){
            e.stopPropagation();
        }
        var target = (window.event)? window.event.srcElement : (e)? e.target : null;
        
        if(target){
            target = dbMenu.getTarget(target, 'li');
            if(!target) return;
        }else{
            return;
        }
        
        if(target.className.search(/\bclick\b/) == -1){
            target.className += ' click';
        }else{
            target.className = target.className.replace(/click/g, '');
        }
    },
    
    nav: function(e){
        if(window.event){
            window.event.cancelBubble = true;
        }
        if(e && e.stopPropagation){
            e.stopPropagation();
        }
        var target = (window.event)? window.event.srcElement : (e)? e.target : null;
        
        if(target){
            target = dbMenu.getTarget(target, 'li');
            if(!target) return;
        }else{
            return;
        }
        
        for(var i = 0; i < target.childNodes.length; i++){
            var node = target.childNodes[i];
            if(node.nodeName.toLowerCase() == 'a'){
                window.location = node.href;
                break;
            }
        }
    },
    
    getTarget: function(target, elm){
        if(target.nodeName.toLowerCase() != elm && target.nodeName.toLowerCase() != 'body'){
            return dbMenu.getTarget(target.parentNode, elm);
        }else if(target.nodeName.toLowerCase() == 'body'){
            return null;
        }else{
            return target;
        }
    },
    
    styleSubMenus: function(menu){
        var lis = menu.getElementsByTagName('li');
	if (!autoid) autoid=0;
        for(var i = 0; i < lis.length; i++){
            var node = lis[i];
            node.parentMenu = menu;
	    if (!node.id) {
		node.id = "li" + autoid;
		autoid +=1;
	    }
            if(node.getElementsByTagName('ul').length != 0){
                node.className += ' subMenu hide';
		if (!node.parentSubMenu) node.parentSubMenu = node;
    	        var sublist = node.getElementsByTagName('li');
		    for (var k = 0; k < sublist.length;k++)
		    sublist[k].parentSubMenu = node;		    

    	        var submenu = node.getElementsByTagName('ul');
		    for (k = 0; k < submenu.length;k++)
		    dbMenu.styleSubMenus(submenu[k]);

            }
        }
    }
}
    
function addEvent(elm, evType, fn, useCapture){  //cross-browser event handling for IE5+, NS6+, and Mozilla/Gecko By Scott Andrew
	if(elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}else if(elm.attachEvent){
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}else{
		elm['on' + evType] = fn;
	}
}

var autoid;
addEvent(window, 'load', dbMenu.init, false);
