$(function () {

    var maxElementsPerColumn = 7;
    var widthOfColumn = 195;
    var timeOutMillisecs = 500;
    var opacityWhenShown = 0.96;

    var fadeOutInProgress = false;

    jQuery.fn.outerHtml = function (s) {
        return (s) ? this.before(s).remove() : jQuery("<p>").append(this.eq(0).clone()).html();
    };

    function menuHoverOver() {
        var position = jQuery(this).find(".sub").position();
        var menu_position = jQuery("ul#topnav li").position();
        var width_menu_item = jQuery("ul#topnav li").width();

        while (fadeOutInProgress);
        jQuery(this).find(".sub").stop().fadeTo('fast', opacityWhenShown).show();

        jQuery(this).find(".sub").each(function () {
            var newWidth = jQuery(this).find(".column").length * widthOfColumn
            jQuery(this).css('width', newWidth + 'px');
        });
    }

    function menuHoverOut() {
        fadeOutInProgress = true;
        setTimeout(function () { }, Math.abs(timeOutMillisecs));
        jQuery(this).find(".sub").stop().fadeTo('fast', 0, function () {
            jQuery(this).hide()
        });
        fadeOutInProgress = false;
    }

    var config = {
        sensitivity: 2,
        interval: 100,
        over: menuHoverOver,
        timeout: 0,
        out: menuHoverOut
    };

    //    jQuery("#main-menu-col-left li .sub").css();
    jQuery("#main-menu-col-left li").hoverIntent(config);

    function splitColumn(column) {
        if (maxElementsPerColumn <= 0) return;

        column.css('width', widthOfColumn + 'px');
        if (column.find("li").length > maxElementsPerColumn) {
            var nodeToInjectInto = column.parent();
            var originalColumn = column;
            var newColumn = originalColumn.clone();

            nodeToInjectInto.append(newColumn);

            originalColumn.find("li").each(function (index) {
                if ((index + 1) > maxElementsPerColumn) jQuery(this).remove();
            });

            newColumn.find("li").each(function (index) {
                var subelements = jQuery(this).find("ul.level_3:first");
                if ((index + 1) < maxElementsPerColumn) jQuery(this).remove();

                if ((index + 1) == maxElementsPerColumn) {
                    if (subelements.length > 0) {
                        jQuery(this).html(subelements.outerHtml());
                    }
                    else jQuery(this).remove();
                }
            });
            newColumn.css('width', widthOfColumn + 'px');
            splitColumn(newColumn);
        }
    }

    jQuery("li.rightmenu").hover(function () {
        jQuery(this).find(".sub ul li").each(function () {

        });
    });

    jQuery(".sub .column").each(function () {
        splitColumn(jQuery(this));
    });

    jQuery("ul#topnav > li").each(function (index) {
        if (jQuery("ul#topnav > li").length - index > 2) return;

        if (jQuery(this).find(".sub .column").length == 1) {
            jQuery(this).find(".column ul").css('float', 'right');
            jQuery(this).find(".column ul li h2 a").css('float', 'right');
        }
    });

});
