// D. Kasimowsky 2013 ©

(function ($) {
    $.fn.menu = function (__options) {
        var __menu = new $.menu(this, __options || {"show_speed": 50, "hide_speed": 50});
        ///
        return this;
    };
    //---

    $.menu = function (__menu, __options) {  
        var __menu_base = __menu.find("ul"), __l_direction_class = "l_direction", __r_direction_class = "r_direction";
        ///
        __menu_base.parent().each(function () {
            var __current = $(this), __sub = __current.children("ul"), __sub_first_child = undefined, __sub_first_child_top_offset = undefined, __dimensions = {"width": __current.innerWidth(), "height": __current.innerHeight(), "sub_width": __sub.outerWidth(true), "sub_height": __sub.outerHeight(true)}, __is_top = __current.parents("ul").length === 1;
            ///
            // уличная магия
            if (! __is_top) { // по-хорошему нужно определять один раз, вынести из цикла
                __sub_first_child = __sub.children("li:first-child");
                ///
                __sub_first_child_top_offset = parseInt(__sub_first_child.css("padding-top")) + parseInt(__sub_first_child.css("margin-top"), 10) + 3; // 2[3] - ascent текста 
            }
            ///
            __sub.css({"top": __is_top ? __dimensions.height - 7 /* визуальный отступ */ : (-__sub_first_child_top_offset)}); // уличная магия для приспособления к божественной верстке
            ///
            __current.hover(
                function (__event) {            
                    var __current_offset = __current.offset(), __left_offset = __is_top ? 0 : __dimensions.width, __window_width = $(window).width(), __direction = __left_offset + __current_offset.left + __dimensions.sub_width > __window_width, __parent_pane = __sub.parents("ul.sub_sub_mainnav:eq(0)"), __parent_pane_offset = __parent_pane.offset();
                    ///
                    if (__parent_pane.hasClass(__l_direction_class) && !! __parent_pane_offset && __parent_pane_offset.left - __dimensions.sub_width > 0) __direction = true;
                    ///
                    if (__direction)
                        __left_offset = __is_top ? (-__dimensions.sub_width) + __dimensions.width : (-__dimensions.sub_width);
                    ///
                    __sub.css({"left": __left_offset, "width": __dimensions.sub_width}).show(/*__options.show_speed*/).addClass(__direction ? __l_direction_class : __r_direction_class);
                },
                function (__event) {
                    __sub.hide(/*__options.hide_speed*/);
            });
        });
        ///
        __menu_base.css("visibility", "visible").hide();
    };
}(jQuery))