function delay() {
    var date = new Date();
    var curDate = null;
    do { 
        curDate = new Date();
    } while(curDate-date < 150);
}
function mostraSubmenu(li) {
    var lis = $(li).up().immediateDescendants();
    lis.each(
        function(li_) {
            ul = li_.childElements()[1];
            if (ul && (li != li_)) {
                if (ul.effect) {
                    ul.effect.cancel();
                    ul.style.zIndex=0;
					li_.removeClassName("aberto");
                    ul.effect = Effect.Fade(ul, { duration: 0.1 } );
                }
            } else {
				li_.removeClassName("aberto");
			}
        }
    );
    li.addClassName("aberto");
    var ul = li.select("ul")[0];
    if (ul) {
        if (ul.effect) ul.effect.cancel();
        ul.style.zIndex=1;
        ul.effect = Effect.Appear(ul, { duration: 0.5 } );
    }
}

function escondeSubMenu(li) {
    var ul = li.select("ul")[0];
    if (ul) {
        li.addClassName("aberto");
        if (ul.effect) ul.effect.cancel();
		var delay = 0;
		if (ul.getStyles().opacity > 0.9)
			delay = 1;
        ul.effect = Effect.Fade(ul, { delay: delay, duration: 0.5, afterFinish: function() { li.removeClassName("aberto"); } });
    }
    else li.removeClassName("aberto");
}

function escondeSubMenuSemDelay(li) {
    var ul = li.select("ul")[0];
    if (ul) {
        li.addClassName("aberto");
        if (ul.effect) ul.effect.cancel();
		var delay = 0;
		if (ul.getStyles().opacity > 0.9)
			delay = 1;
        ul.effect = Effect.Fade(ul, {  duration: 0.15, afterFinish: function() { li.removeClassName("aberto"); } });
    }
    else li.removeClassName("aberto");
}

Event.observe(window, 'load', function() {
    $A($$("#menu ul li ul")).each( function(elem) {
        elem.hide();
    });
    $A($$("#menu ul li")).each( function(elem) {
        elem.onmouseover = function(){
            mostraSubmenu(this);
        };
        elem.onmouseout = function(){
            escondeSubMenu(this);
        }
    });

    $A($$("#menu ul > li > a")).each( function(elem) {
        elem.onfocus = function(){
            mostraSubmenu(this.up());
        };
        elem.onblur = function(){
			if (this.up().select('ul').length == 0)
	        	this.up().removeClassName("aberto");
        }
        elem.onkeypress = function(event) {
        	var key = event.keyCode ? event.keyCode : event.which;
        	var elem;
        	if (key == 39)
        		elem = this.up().next().down();
        	else if (key == 37)
        		elem = this.up().previous().down();
        	else if (key == 40) {
            	this.up().addClassName("aberto");
            	elem = this.next().down().down();
        	} else if (key == 38) {
        		elem = this.up().up().up().down();
        	}
        	if (elem)
        		elem.focus();
        	if (key >= 37 && key <= 40) {
				event.returnValue=false;
				event.stopPropagation();
				event.preventDefault();
        	}
        }
    });


    $A($$("#menu ul > li li > a")).each( function(elem) {
        elem.onkeypress = function(event) {
        	var key = event.keyCode ? event.keyCode : event.which;
        	var elem;
        	if (key == 40)
        		elem = this.up().next().down();
        	else if (key == 38)
        		elem = this.up().previous().down();
        	else if (key == 39) {
            	this.up().addClassName("aberto");
            	elem = this.next().down().down();
        	} else if (key == 37) {
        		elem = this.up().up().up().down();
        	}
        	if (elem)
        		elem.focus();
        	if (key >= 37 && key <= 40) {
				event.returnValue=false;
				event.stopPropagation();
				event.preventDefault();
        	}
        }
    });
});
link = function(href) {
	window.location = href;
}