var Framework = {
    
    dropDistance: 25,
    opacity: 1,
    resetDelaySeconds: 5,
    
    init: function(){
        /* Menu Seperator Cleaner */
        Framework.cleanSeperators();
        /*------------------------*/
        
        $("#menu > li ul").each(function(){
            $(this).css("top", "0px");
            $(this).parent("li").addClass("hasMenu");
        });
        
        $("#menu > li.hasMenu").each(function(){
            var link = $("> a", this).attr("href");
            if(link == "#")link = "";
            var thisHTML = $("> a", this).html();
            $("> a", this).attr("href", link + "#" + thisHTML);
            
            $("ul > li > a", this).each(function(){
                var innerLink = $(this).attr("href");
                if(innerLink == "#")innerLink = "";
                $(this).attr("href", innerLink + "#" + thisHTML);
            });
        });
        
        if(location.hash.length > 1){
            $("#menu > li.hasMenu > a").each(function(){
                if($(this).html() == location.hash.substring(1)){
                    $(this).parent("li").children("ul").css({
                        top: Framework.dropDistance,
                        opacity: Framework.opacity
                    }).addClass("expanded");
                }
            });
        }
        
        $("#menu > li.hasMenu").mouseover(function(){
            /* Error Handler */
            var i = 0, j = 0;
            $("#menu li.hasMenu ul").each(function(){
                if($(this).css("top") == Framework.dropDistance + "px") i++;
            });
            $("#menu li.hasMenu ul").each(function(){
                if($(this).hasClass("expanded")) j++;
            });
            if(i >= 2 || j >= 2) {
                $("#menu li.hasMenu ul").animate({
                    top: 0,
                    opacity: 0
                }, function(){
                    $("#menu li.hasMenu ul").removeClass().addClass("hidden");
                    $("#menu li.hasMenu").each(function(){
                        $("> a", this).removeClass("emphasis");
                    });
                });
            }
            /*---------------*/
            $(this).children("a").addClass("emphasis");
            Framework.expand($("> ul", this));
        });
    },
    
    cleanSeperators: function(){
        $('#menu > li:last').css('border', 'none');
        $('#menu li ul').each(function(){
            $('> li', this).css('border', 'none')
        });
    },
    
    expand: function(object){
        if(!$(object).hasClass("expanded")){
            Framework.hide();
            $(object).stop().animate({
                top: Framework.dropDistance,
                opacity: Framework.opacity
            }, function(){
                $(object).removeClass("hidden").addClass("expanded");
            });
        }
    },
    
    hide: function(){
        $("#menu > li ul.expanded").animate({
            top: 0,
            opacity: 0
        }, function(){
            $(this).removeClass("expanded").addClass("hidden");
            $(this).parent("li").children("a").removeClass("emphasis");
        });
    }
}

Framework.init();
