var popuprules = {
    '#menu_vert ul.pnav li a' : function(el){
        el.onmouseover = function(){
            mouse_on(el);
        }
        el.onmouseout = function(){
            mouse_off(el);
        }
    },
    '#menu_vert ul.pnav li.menuactive a' : function(el){
        el.onmouseover = function(){
        }
        el.onmouseout = function(){
        }
    },
    '#menu_vert ul.pnav li ul li a' : function(el){
        el.onmouseover = function(){
            mouse_on_popup(el);
        }
        el.onmouseout = function(){
            mouse_off_popup(el);
        }
    }

};

function isChildOrSelf( possibleParent, subject )
{
	while ( subject != null && subject != possibleParent && 
		subject.nodeName != 'BODY')
			subject = subject.parentNode;
	return subject == possibleParent;
}

var currentHover = null;
var timeoutCounter = 0;

function set_popup(el, state) {
	 var theEl = el.parentNode.getElementsByTagName("ul");
	 if (theEl.length > 0)
	 	{
    	theEl[0].style.display = state ? "block" : "none";
		}
}

function mouse_on(el) {
    if (el != currentHover) {
        set_popup(el, true);
        if (currentHover) 
            set_popup(currentHover, false);
        currentHover = el;
    }
    timeoutCounter++;
}

function mouse_off(el) {
    if (el == currentHover) {
        var current = ++timeoutCounter;
        setTimeout( function() {
            if (currentHover && timeoutCounter == current)
            {
                set_popup(currentHover, false);
                currentHover = null;
            } }, 100);
    }
}

function mouse_on_popup(el) {
	if (isChildOrSelf(currentHover.parentNode, el))
		timeoutCounter++;
}

function mouse_off_popup(el) {
    mouse_off(currentHover);
}

Behaviour.register(popuprules);
