/* jQuery MegaMenu Plugin */
var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
(function($) {
    $.fn.extend({
        isChildOf: function(filter_string) {
            var parents = $(this).parents().get();
            for (j = 0; j < parents.length; j++) {
                if ($(parents[j]).is(filter_string))
                    return true;
            }
            return false;
        }
    });
})(jQuery);

jQuery.fn.megamenu = function(ContentClass, Options) {
    var MenuClass = $(this).attr("class").split(" ")[0];
    var ParentNodeNumber = 0;
    Options = jQuery.extend({
        width: "auto",
        justify: "left"
    }, Options);
    $(ContentClass).after('  <div id="MegaMenuContent" style="display: none;"></div>');
    $(this).hover(function() {
        var MenuContent = $(this).next(ContentClass).html();
        ParentNodeNumber = $('.' + MenuClass).index(this);
        MegaMenuMouseOver(ParentNodeNumber, MenuContent, "click", MenuClass, ContentClass, Options);
        //setTimeout('MegaMenuMouseOver('+ParentNodeNumber+',"'+escape(MenuContent)+'","hover",\''+MenuClass+'\',\''+ContentClass+'\',\''+Options+'\')', 300);
    }, function() {
        MegaMenuMouseOut(ParentNodeNumber, MenuClass, ContentClass);
    });
    $(this).click(function() {
        var MenuContent = $(this).next('.MegaMenuContent').html();
        ParentNodeNumber = $('.' + MenuClass).index(this);
        MegaMenuMouseOver(ParentNodeNumber, MenuContent, "click", MenuClass, ContentClass, Options);
    });
    $(document).bind('click', function(e) {
        var $clicked = $(e.target);
        if ($clicked.isChildOf('#MegaMenuContent') || $clicked.is('#MegaMenuContent') || $clicked.is('.' + MenuClass)) {
        }
        else
            MegaMenuMouseOut(ParentNodeNumber, MenuClass, ContentClass);
    });
};

function MegaMenuMouseOver(ParentNodeNumber, MenuContent, state, MenuLinkClass, MenuContentClass, Options) {
    var MenuLinkClass = (typeof (MenuLinkClass) == 'undefined') ? ".MegaMenuLink" : MenuLinkClass;
    var MenuContentClass = (typeof (MenuContentClass) == 'undefined') ? ".MegaMenuContent" : MenuContentClass;

    if (state == "hover")
        $('.' + MenuLinkClass).removeClass(MenuLinkClass + 'Active');
    $('.' + MenuLinkClass).eq(ParentNodeNumber).addClass(MenuLinkClass + 'Active');

    if (MenuContent == null) return;
    MenuContent = jQuery.trim(MenuContent);
    if (MenuContent.length <= 0) return;

    MenuContent = unescape(MenuContent);
    $("#MegaMenuContent").html('' + MenuContent);
    if (Options['width']) {
        $("#MegaMenuContent").css('width', Options['width']);
    }

    var selfNode = new Array();
    selfNode['width'] = $('.' + MenuLinkClass).eq(ParentNodeNumber).width();
    selfNode['padding-left'] = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css('padding-left').replace(/px/g, ''));
    selfNode['padding-right'] = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css('padding-right').replace(/px/g, ''));
    selfNode['border-left-width'] = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css('border-left-width').replace(/px/g, ''));
    selfNode['border-right-width'] = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css('border-right-width').replace(/px/g, ''));

    if (isIE6)
        selfNode['width'] = selfNode['width'] + 10;

    if (Options['justify'] == "left") {
        var LeftPos = $('.' + MenuLinkClass).eq(ParentNodeNumber).parent().position().left;
        if (Options['width'] == 'auto')
            LeftPos = $('.' + MenuLinkClass).eq(ParentNodeNumber).position().left - 10;
    }
    else {
        var RightPos = $('.' + MenuLinkClass).eq(ParentNodeNumber).parent().position().left;
        if (Options['width'] == 'auto')
            RightPos = $(document).width() - 10 - $('.' + MenuLinkClass).eq(ParentNodeNumber).position().left - selfNode['width'] - selfNode['padding-left'] - selfNode['padding-right'] - selfNode['border-left-width'] - selfNode['border-right-width'];
    }

    //    var TopPos = $('.' + MenuLinkClass).eq(ParentNodeNumber).height() + $('.' + MenuLinkClass).eq(ParentNodeNumber).position().top + parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("padding-top").replace(/px/g, '')) + parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("padding-bottom").replace(/px/g, '')) + parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("border-top-width").replace(/px/g, ''));

    var TopPos_A = $('.' + MenuLinkClass).eq(ParentNodeNumber).height();
    var TopPos_B = $('.' + MenuLinkClass).eq(ParentNodeNumber).position().top;
    var TopPos_C = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("padding-top").replace(/px/g, ''));
    var TopPos_D = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("padding-bottom").replace(/px/g, ''));
    var TopPos_E = parseInt($('.' + MenuLinkClass).eq(ParentNodeNumber).css("border-top-width").replace(/px/g, ''));
    var TopPos = (isNaN(TopPos_A) ? 0 : TopPos_A) +
                  (isNaN(TopPos_B) ? 0 : TopPos_B) +
                  (isNaN(TopPos_C) ? 0 : TopPos_C) +
                  (isNaN(TopPos_D) ? 0 : TopPos_D) +
                  (isNaN(TopPos_E) ? 0 : TopPos_E);


    //Adjust position - Start
    var sMargin = 1;
    //var sWidth = $(window).width() - sMargin;

    var sWidth = parseInt($(".MegaMenu").outerWidth()) + parseInt($(".MegaMenu").position().left) - sMargin;
    var mWidth = $("#MegaMenuContent").outerWidth();
    if (LeftPos != null && LeftPos > 0) {
        //alert("LeftPos:" + LeftPos);
        if ((LeftPos + mWidth) > sWidth) {
            LeftPos = LeftPos - ((LeftPos + mWidth) - sWidth);
        }
    }
    else {
        //alert("RightPos:" + RightPos);
        if ((RightPos + mWidth) > sWidth) {
            RightPos = RightPos - ((RightPos + mWidth) - sWidth);
        }
    }
    //Adjust position - End

    if (LeftPos || LeftPos === 0) {
        $("#MegaMenuContent").css('left', LeftPos + 'px');
    }
    else {
        $("#MegaMenuContent").css('right', RightPos + 'px');
    }
    $("#MegaMenuContent").css('top', TopPos + 'px');


    //$("#MegaMenuContent").fadeIn("fast");
    //$("#MegaMenuContent").show(500, "easeOutBounce", null);
    //$("#MegaMenuContent").show();
    //$("#MegaMenuContent").show(80, "easeOutBounce", null);
    //$("#MegaMenuContent").show(50, "swing", null);
    //$("#MegaMenuContent").show(150);
    //$("#MegaMenuContent").show(400, "easeOutBounce", null);
    //$("#MegaMenuContent").show(250, "easeOutExpo", null);
    //$("#MegaMenuContent").show(100, "easeOutSine", null);

    if (!isIE6) {
        $("#MegaMenuContent").slideDown(400, "easeOutBounce", null);
        //$("#MegaMenuContent").slideDown(200, "easeOutExpo", null);        
    }
    else {
        $("#MegaMenuContent td.btile").removeClass("btile");
        $("#MegaMenuContent td.lcb").removeClass("lcb");
        $("#MegaMenuContent td.rcb").removeClass("rcb");
        $("#MegaMenuContent td.ltile").removeClass("ltile");
        $("#MegaMenuContent td.rtile").removeClass("rtile");

        $("#MegaMenuContent").css('background', '#FFF');
        //$("#MegaMenuContent").css('border', 'solid 3px #DCCCCC');
        $("#MegaMenuContent").css('border', 'solid 1px #BABABA');
        $("#MegaMenuContent").css('border-top', 'none');
        $("#MegaMenuContent").fadeIn('fast');
    }

    if ($.fn._hover) {
        $("#MegaMenuContent")._hover(function() {
            MenuContentHoverIn(MenuLinkClass, ParentNodeNumber);
        }, function() {
            MenuContentHoverOut(MenuLinkClass, ParentNodeNumber);
        });
    } else {
        $("#MegaMenuContent").hover(function() {
            MenuContentHoverIn(MenuLinkClass, ParentNodeNumber);
        }, function() {
            MenuContentHoverOut(MenuLinkClass, ParentNodeNumber);
        });
    }
}

function MenuContentHoverIn(MenuLinkClass, ParentNodeNumber) {
    $('#MegaMenuContent').show();
    $('.' + MenuLinkClass).removeClass(MenuLinkClass + 'Active');
    $('.' + MenuLinkClass).eq(ParentNodeNumber).addClass(MenuLinkClass + 'Active');
}

function MenuContentHoverOut(MenuLinkClass, ParentNodeNumber) {
    $("#MegaMenuContent").hide()
    $('.' + MenuLinkClass).removeClass(MenuLinkClass + 'Active');
}

function MegaMenuMouseOut(ParentNodeNumber, MenuLinkClass, MenuContentClass) {
    $('#MegaMenuContent').hide();
    var MenuLinkClass = (typeof (MenuLinkClass) == 'undefined') ? ".MegaMenuLink" : MenuLinkClass;
    $('.' + MenuLinkClass).eq(ParentNodeNumber).removeClass(MenuLinkClass + 'Active');
}

