(function (i) {
    var l, t, r, q, a, p, h, o, j, w, b = {
        boxId: "superbox",
        boxClasses: "",
        overlayOpacity: 0.8,
        boxWidth: "600",
        boxHeight: "400",
        loadTxt: "Loading...",
        closeTxt: "Close",
        prevTxt: "Previous",
        nextTxt: "Next",
        beforeShow: function () {}
    },
    x = {},
    m = false,
    s = i([]);
    i.superbox = function () {
        w = i.extend({},
        b, i.superbox.settings);
        if (i.browser.msie && i.browser.version < 7) {
            s = s.add("select")
        }
        n();
        z()
    };
    function z() {
        i("a[rel^=superbox],area[rel^=superbox]").each(function () {
            var D = i(this),
            F = D.attr("rel"),
            B = F.match(/^superbox\[([^#\.\]]+)/)[1],
            E = F.replace("superbox", "").match(/([#\.][^#\.\]]+)/g) || [],
            C = w.boxId,
            A = w.boxClasses;
            this._relSettings = F.replace("superbox[" + B + E.join("") + "]", "");
            i.each(E, function (G, H) {
                if (H.substr(0, 1) == "#") {
                    C = H.substr(1)
                } else {
                    if (H.substr(0, 1) == ".") {
                        A += " " + H.substr(1)
                    }
                }
            });
            if (B.search(/^image|gallery|iframe|content|ajax$/) != -1) {
                D.superbox(B, {
                    boxId: C,
                    boxClasses: A
                })
            }
        })
    }
    i.fn.superbox = function (B, A) {
        A = i.extend({},
        w, A);
        i.superbox[B](this, A)
    };
    i.extend(i.superbox, {
        image: function (C, A, B) {
            var E = f(C.get(0)),
            D = false;
            if (E && B == "gallery") {
                D = E[1]
            } else {
                if (E) {
                    D = E[0]
                }
            }
            C.click(function (F) {
                F.preventDefault();
                k();
                if (B == "gallery") {
                    c(C, E[0])
                }
                y(function () {
                    var H = false,
                    G;
                    if (D) {
                        H = D.split("x")
                    }
                    G = i('<img src="' + C.attr("href") + '" title="' + (C.attr("title") || C.text()) + '" />');
                    G.load(function () {
                        g(G, H);
                        e({
                            boxClasses: "image " + A.boxClasses,
                            boxId: A.boxId
                        });
                        u()
                    }).appendTo($innerbox)
                })
            })
        },
        gallery: function (B, A) {
            var C = f(B.get(0));
            if (!x[C[0]]) {
                x[C[0]] = []
            }
            x[C[0]].push(B);
            B.get(0)._superboxGroupKey = (x[C[0]].length - 1);
            i.superbox.image(B, A, "gallery")
        },
        iframe: function (B, A) {
            var C = f(B.get(0));
            B.click(function (D) {
                D.preventDefault();
                k();
                y(function () {
                    var F = false,
                    E;
                    if (C) {
                        F = C[0].split("x")
                    }
                    A = i.extend({},
                    A, {
                        boxWidth: F[0] || A.boxWidth,
                        boxHeight: F[1] || A.boxHeight
                    });
                    E = i('<iframe src="' + B.attr("href") + '" name="' + B.attr("href") + '" frameborder="0" scrolling="auto" hspace="0" width="' + A.boxWidth + '" height="' + A.boxHeight + '"></iframe>');
                    E.load(function () {
                        q.width(A.boxWidth + "px");
                        $innerbox.height(A.boxHeight + "px");
                        e({
                            boxClasses: "iframe " + A.boxClasses,
                            boxId: A.boxId
                        });
                        u()
                    }).appendTo($innerbox)
                })
            })
        },
        content: function (B, A) {
            var C = f(B.get(0));
            B.click(function (D) {
                D.preventDefault();
                k();
                y(function () {
                    var E = false;
                    if (C) {
                        E = C[0].split("x")
                    }
                    A = i.extend({},
                    A, {
                        boxWidth: E[0] || A.boxWidth,
                        boxHeight: E[1] || A.boxHeight
                    });
                    q.width(A.boxWidth + "px");
                    $innerbox.height(A.boxHeight + "px");
                    i(B.attr("href")).clone().appendTo($innerbox).show();
                    e({
                        boxClasses: "content " + A.boxClasses,
                        boxId: A.boxId
                    });
                    u()
                })
            })
        },
        ajax: function (B, A) {
            var C = f(B.get(0));
            B.click(function (D) {
                D.preventDefault();
                k();
                y(function () {
                    var E = false;
                    if (C && C[3]) {
                        E = C[3].split("x")
                    }
                    A = i.extend({},
                    A, {
                        boxWidth: E[0] || A.boxWidth,
                        boxHeight: E[1] || A.boxHeight
                    });
                    q.width(A.boxWidth + "px");
                    $innerbox.height(A.boxHeight + "px");
                    i.get(C[2], function (F) {
                        i(F).appendTo($innerbox)
                    });
                    e({
                        boxClasses: "ajax " + A.boxClasses,
                        boxId: A.boxId
                    });
                    u()
                })
            })
        }
    });
    function f(A) {
        return A._relSettings.match(/([^\[\]]+)/g)
    }
    function g(A, B) {
        q.width(A.width() + ($innerbox.css("paddingLeft").slice(0, -2) - 0) + ($innerbox.css("paddingRight").slice(0, -2) - 0));
        $innerbox.height(A.height());
        if (B && B[0] != "") {
            q.width(B[0] + "px")
        }
        if (B && B[1] != "" && B[1] > A.height()) {
            $innerbox.height(B[1] + "px")
        }
    }
    function c(C, D) {
        h.show();
        m = true;
        var A = C.get(0)._superboxGroupKey + 1,
        B = A - 2;
        if (x[D][A]) {
            o.removeClass("disabled").unbind("click").bind("click", function () {
                x[D][A].click()
            })
        } else {
            o.addClass("disabled").unbind("click")
        }
        if (x[D][B]) {
            j.removeClass("disabled").unbind("click").bind("click", function () {
                x[D][B].click()
            })
        } else {
            j.addClass("disabled").unbind("click")
        }
    }
    function e(A) {
        q.attr("id", A.boxId).attr("class", A.boxClasses)
    }
    function d() {
        i(document).unbind("keydown");
        p.hide();
        h.hide();
        t.hide().css({
            position: "fixed",
            top: 0
        });
        $innerbox.empty()
    }
    function v(A) {
        d();
        l.fadeOut(300, function () {
            s.show()
        });
        m = false
    }
    function y(B) {
        var A = function () {
            if (i.browser.msie && i.browser.version < 7) {
                t.css({
                    position: "absolute",
                    top: "50%"
                })
            }
            s.hide();
            p.show();
            B()
        };
        if (m) {
            l.css("opacity", w.overlayOpacity).show();
            A()
        } else {
            l.css("opacity", 0).show().fadeTo(300, w.overlayOpacity, A)
        }
    }
    function k() {
        t.show();
        $innerbox.empty();
        q.css({
            position: "absolute",
            top: "-99999px"
        })
    }
    function u(A, B) {
        p.hide();
        i(document).unbind("keydown").bind("keydown", function (C) {
            if (C.keyCode == 27) {
                v()
            }
            if (C.keyCode == 39 && o.is(":visible")) {
                o.click()
            }
            if (C.keyCode == 37 && j.is(":visible")) {
                j.click()
            }
        });
        q.css({
            position: "static",
            top: 0,
            opacity: 0
        });
        if (i.browser.msie && i.browser.version < 8) {
            q.css({
                position: "relative",
                top: "-50%"
            });
            if (i.browser.msie && i.browser.version < 7) {
                t.css({
                    position: "absolute",
                    top: "50%"
                })
            }
        }
        if (i(window).height() < t.height()) {
            t.css({
                position: "absolute",
                top: (t.offset().top + 10) + "px"
            })
        }
        w.beforeShow();
        q.fadeTo(300, 1)
    }
    function n() {
        if (!i.superbox.elementsReady) {
            l = i('<div id="superbox-overlay"></div>').appendTo("body").hide();
            t = i('<div id="superbox-wrapper"></div>').appendTo("body").hide();
            r = i('<div id="superbox-container"></div>').appendTo(t);
            q = i('<div id="superbox"></div>').appendTo(r);
            $innerbox = i('<div id="superbox-innerbox"></div>').appendTo(q);
            h = i('<p class="nextprev"></p>').appendTo(q).hide();
            j = i('<a class="prev"><strong><span>' + w.prevTxt + "</span></strong></a>").appendTo(h);
            o = i('<a class="next"><strong><span>' + w.nextTxt + "</span></strong></a>").appendTo(h);
            a = i('<p class="close"><a><strong><span>' + w.closeTxt + "</span></strong></a></p>").prependTo(q).find("a");
            p = i('<p class="loading">' + w.loadTxt + "</p>").appendTo(r).hide();
            l.add(t).add(a).click(function () {
                v()
            });
            q.click(function (A) {
                A.stopPropagation()
            });
            i.superbox.elementsReady = true
        }
    }
})(jQuery);