(function (b) {
    b.fn.superfish = function (k) {
        var g = b.fn.superfish,
            j = g.c,
            f = b(['<span class="', j.arrowClass, '"> &#187;</span>'].join("")),
            i = function () {
            var c = b(this),
                l = d(c);
            clearTimeout(l.sfTimer);
            c.showSuperfishUl().siblings().hideSuperfishUl()
        },
            e = function () {
            var c = b(this),
                m = d(c),
                l = g.op;
            clearTimeout(m.sfTimer);
            m.sfTimer = setTimeout(function () {
                l.retainPath = (b.inArray(c[0], l.$path) > -1);
                c.hideSuperfishUl();
                if (l.$path.length && c.parents(["li.", l.hoverClass].join("")).length < 1) {
                    i.call(l.$path)
                }
            }, l.delay)
        },
            d = function (c) {
            var l = c.parents(["ul.", j.menuClass, ":first"].join(""))[0];
            g.op = g.o[l.serial];
            return l
        },
            h = function (c) {
            c.addClass(j.anchorClass).append(f.clone())
        };
        return this.each(function () {
            var c = this.serial = g.o.length;
            var m = b.extend({}, g.defaults, k);
            m.$path = b("li." + m.pathClass, this).slice(0, m.pathLevels).each(function () {
                b(this).addClass([m.hoverClass, j.bcClass].join(" ")).filter("li:has(ul)").removeClass(m.pathClass)
            });
            g.o[c] = g.op = m;
            b("li:has(ul)", this)[(b.fn.hoverIntent && !m.disableHI) ? "hoverIntent" : "hover"](i, e).each(function () {
                if (m.autoArrows) {
                    h(b(">a:first-child", this))
                }
            }).not("." + j.bcClass).hideSuperfishUl();
            var l = b("a", this);
            l.each(function (n) {
                var o = l.eq(n).parents("li");
                l.eq(n).focus(function () {
                    i.call(o)
                }).blur(function () {
                    e.call(o)
                })
            });
            m.onInit.call(this)
        }).each(function () {
            var c = [j.menuClass];
            if (g.op.dropShadows && !(b.browser.msie && b.browser.version < 7)) {
                c.push(j.shadowClass)
            }
            b(this).addClass(c.join(" "))
        })
    };
    var a = b.fn.superfish;
    a.o = [];
    a.op = {};
    a.IE7fix = function () {
        var c = a.op;
        if (b.browser.msie && b.browser.version > 6 && c.dropShadows && c.animation.opacity != undefined) {
            this.toggleClass(a.c.shadowClass + "-off")
        }
    };
    a.c = {
        bcClass: "sf-breadcrumb",
        menuClass: "sf-js-enabled",
        anchorClass: "sf-with-ul",
        arrowClass: "sf-sub-indicator",
        shadowClass: "sf-shadow"
    };
    a.defaults = {
        hoverClass: "sfHover",
        pathClass: "overideThisToUse",
        pathLevels: 1,
        delay: 5,
        animation: {
            opacity: "show"
        },
        speed: 500,
        autoArrows: true,
        dropShadows: true,
        disableHI: false,
        onInit: function () {},
        onBeforeShow: function () {},
        onShow: function () {},
        onHide: function () {}
    };
    b.fn.extend({
        hideSuperfishUl: function () {
            var e = a.op,
                d = (e.retainPath === true) ? e.$path : "";
            e.retainPath = false;
            var c = b(["li.", e.hoverClass].join(""), this).add(this).not(d).removeClass(e.hoverClass).find(">ul").hide().css("visibility", "hidden");
            e.onHide.call(c);
            return this
        },
        showSuperfishUl: function () {
            var e = a.op,
                d = a.c.shadowClass + "-off",
                c = this.addClass(e.hoverClass).find(">ul:hidden").css("visibility", "visible");
            a.IE7fix.call(c);
            e.onBeforeShow.call(c);
            c.animate(e.animation, e.speed, function () {
                a.IE7fix.call(c);
                e.onShow.call(c)
            });
            return this
        }
    })
})(jQuery);