(function($){
    $.fn["slideMenu"]=function(){
        var elements=this;
        elements.each(function(){
            var elm=$(this);
            var submenu=elm.find(".submenu").clone();
            if(submenu.length > 0){
                submenu.data("is_show",false);
                submenu.data("onover",false);
                function initSubmenu(submenu){
                    //console.debug("init",submenu.data("onover"));
                    $("body").append(submenu);
                    submenu.css({
                        height: "auto"
                    });
                    var h=submenu.height();
                    submenu.css({
                        overflow: "hidden",
                        margin: 0,
                        position: "absolute",
                        width: "300px",
                        height: 0,
                        top: elm.offset().top+elm.height(),
                        left: elm.offset().left
                    });
                    submenu.unbind("mouseover");
                    submenu.unbind("mouseout");
                    submenu.mouseover(function(e){
//                        console.debug("submenuover");
                        submenu.data("onover",true);
                        elm.mouseover();
                    });
                    submenu.mouseout(function(){
//                        console.debug("submenuout");
                        submenu.data("onover",false);
                        elm.mouseout();
                    });
                    submenu.find("li,div").hover(function(){
                        $(this).addClass("hover");
                    },function(){
                        $(this).removeClass("hover");
                    });
                    return h;
                }
                var h=initSubmenu(submenu);
                elm.mouseover(function(){
                    if(submenu.parent().length === 0){
                       h=initSubmenu(submenu);
                    }
                    if(submenu.data("timeout")){
                        clearTimeout(submenu.data("timeout"));
                    }

//                    console.debug("menuover");
                    submenu.show();
                    submenu.stop();
                    submenu.animate({
                        height: h
                    },200);
                });
                elm.mouseout(function(){
//                    console.debug("menuout event");
                    if(submenu.data("timeout")){
                        clearTimeout(submenu.data("timeout"));
                    }
                    submenu.data("timeout",setTimeout(function(){
//                        console.debug("menuout");
                        if(!submenu.data("onover")){
                            submenu.stop();
                            submenu.animate({
                                height: 0
                            },200,function(){
                                submenu.data("is_show",false);
                                submenu.data("timeout",null);
                                submenu.remove();
                            });
                        }
                    },100));
                });
            }
        });
    };
})(jQuery);

