/**
  *Author: David Boggus
  *URL: www.boggusweb.com
  *Date: 10/11/2006
  *
  *Objective: To create a javascript menuu that supports three different types of
  *           menuus with little if any code that requires knowlege of the kind of
  *           menuu that is being created. This version will also support multiple
  *           levels of sub menuus.
  **/
var dbMenuu2 = {
    init: function(){
        var uls = document.getElementsByTagName('ul');
        for(var i = 0; i < uls.length; i++){
            if(uls[i].className.search(/\bdbMenuu2\b/) == -1) continue;
            var menuu2 = uls[i];
            var submenuus2 = menuu2.getElementsByTagName('ul');
            for(var j = 0; j < submenuus2.length; j++){
                var parentLI = submenuus2[j].parentNode;
                parentLI.hasSubmenuu = true;
                if(menuu2.className.search(/\bonClick\b/) !=-1){
                    addEvent(parentLI, 'click', dbMenuu2.click, false);
                    parentLI.getElementsByTagName('a')[0].href="#"
                }else{
                    addEvent(parentLI, 'mouseout', dbMenuu2.getMoutFor(parentLI), false);
                    addEvent(parentLI, 'mouseover', dbMenuu2.getMoverFor(parentLI), false);
                }
                parentLI.getElementsByTagName('a')[0].className += " submenuu";
            }
        }
    },

    getMoverFor:function(node){
        return function(){dbMenuu2.mOver(node);};
    },

    getMoutFor:function(node){
        return function(){dbMenuu2.mTimeout(node);};
    },

    mOver: function(targetElement){
        var target = targetElement;
        clearTimeout(target.timeout);
        for(var i = 0; i < target.childNodes.length; i++){
            var node = target.childNodes[i];
            if(node.nodeName.toLowerCase() == 'ul'){
                target.getElementsByTagName('a')[0].className += ' click';
                target.className += ' click';
                node.className += ' click';
            }
        }
    },

    mTimeout: function(targetElement){
        var target = targetElement;
        target.timeout = setTimeout(function(){dbMenuu2.mOut(target);}, 100);
    },

    mOut:function(target){
        for(var i = 0; i < target.childNodes.length; i++){
            var node = target.childNodes[i];
            if(node.nodeName.toLowerCase() == 'ul'){
                target.getElementsByTagName('a')[0].className = target.getElementsByTagName('a')[0].className.replace(/click/g, '');
                node.className = node.className.replace(/click/g, '');
                target.className = target.className.replace(/click/g, '');
            }
        }
    },

    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 = dbMenuu2.getTarget(target, 'li')))return;

        if(target.getElementsByTagName('a')[0].className.search(/\bclick\b/) == -1){
            dbMenuu2.mOver(target);
        }else{
            dbMenuu2.mOut(target);
        }
    },

    getTarget: function(target, elm){
        if(target.nodeName.toLowerCase() != elm && target.nodeName.toLowerCase() != 'body'){
            return dbMenuu2.getTarget(target.parentNode, elm);
        }else if(target.nodeName.toLowerCase() == 'body'){
            return null;
        }else{
            return target;
        }
    }
}

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;
	}
}

addEvent(window, 'load', dbMenuu2.init, false);
