/*
	Slimbox v1.7 - The ultimate lightweight Lightbox clone
	(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/
var Slimbox = (function () {
    var F = window,
    n = Browser.Engine.trident4,
    u, g, G = -1,
    o, w, E, v, y, M, s, m = {},
    t = new Image(),
    K = new Image(),
    I,
    a,
    h,
    q,
    J,
    e,
    H,
    c,
    A,
    L,
    x,
    i,
    d,
    C;
    F.addEvent("domready", function () {
        $(document.body).adopt($$(I = new Element("div", {
            id: "lbOverlay",
            events: {
                click: D
            }
        }), a = new Element("div", {
            id: "lbCenter"
        }), H = new Element("div", {
            id: "lbBottomContainer"
        })).setStyle("display", "none"));
        h = new Element("div", {
            id: "lbImage"
        }).injectInside(a).adopt(q = new Element("div", {
            styles: {
                position: "relative"
            }
        }).adopt(J = new Element("a", {
            id: "lbPrevLink",
            href: "#",
            events: {
                click: B
            }
        }), e = new Element("a", {
            id: "lbNextLink",
            href: "#",
            events: {
                click: f
            }
        })));
        c = new Element("div", {
            id: "lbBottom"
        }).injectInside(H).adopt(new Element("a", {
            id: "lbCloseLink",
            href: "#",
            events: {
                click: D
            }
        }), A = new Element("div", {
            id: "lbCaption"
        }), L = new Element("div", {
            id: "lbNumber"
        }), new Element("div", {
            styles: {
                clear: "both"
            }
        }))
    });
    function z() {
        var N = F.getScroll(),
        O = F.getSize();
        $$(a, H).setStyle("left", N.x + (O.x / 2));
        if (v) {
            I.setStyles({
                left: N.x,
                top: N.y,
                width: O.x,
                height: O.y
            })
        }
    }
    function l(N) {
        ["object", n ? "select" : "embed"].forEach(function (P) {
            Array.forEach(document.getElementsByTagName(P), function (Q) {
                if (N) {
                    Q._slimbox = Q.style.visibility
                }
                Q.style.visibility = N ? "hidden" : Q._slimbox
            })
        });
        I.style.display = N ? "" : "none";
        var O = N ? "addEvent" : "removeEvent";
        F[O]("scroll", z)[O]("resize", z);
        document[O]("keydown", p)
    }
    function p(O) {
        var N = O.code;
        return u.closeKeys.contains(N) ? D() : u.nextKeys.contains(N) ? f() : u.previousKeys.contains(N) ? B() : false
    }
    function B() {
        return b(w)
    }
    function f() {
        return b(E)
    }
    function b(N) {
        if (N >= 0) {
            G = N;
            o = g[N][0];
            w = (G || (u.loop ? g.length : 0)) - 1;
            E = ((G + 1) % g.length) || (u.loop ? 0 : -1);
            r();
            a.className = "lbLoading";
            m = new Image();
            m.onload = k;
            m.src = o
        }
        return false
    }
    function k() {
        a.className = "";
        d.set(0);
        h.setStyles({
            backgroundImage: "url(" + o + ")",
            display: ""
        });
        q.setStyle("width", m.width);
        $$(q, J, e).setStyle("height", m.height);
        A.set("html", g[G][1] || "");
        L.set("html", (((g.length > 1) && u.counterText) || "").replace(/{x}/, G + 1).replace(/{y}/, g.length));
        if (w >= 0) {
            t.src = g[w][0]
        }
        if (E >= 0) {
            K.src = g[E][0]
        }
        M = h.offsetWidth;
        s = h.offsetHeight;
        var P = Math.max(0, y - (s / 2)),
        N = 0,
        O;
        if (a.offsetHeight != s) {
            N = i.start({
                height: s,
                top: P
            })
        }
        if (a.offsetWidth != M) {
            N = i.start({
                width: M,
                marginLeft: -M / 2
            })
        }
        O = function () {
            H.setStyles({
                width: M,
                top: P + s,
                marginLeft: -M / 2,
                visibility: "hidden",
                display: ""
            });
            d.start(1)
        };
        if (N) {
            i.chain(O)
        } else {
            O()
        }
    }
    function j() {
        if (w >= 0) {
            J.style.display = ""
        }
        if (E >= 0) {
            e.style.display = ""
        }
        C.set(-c.offsetHeight).start(0);
        H.style.visibility = ""
    }
    function r() {
        m.onload = $empty;
        m.src = t.src = K.src = o;
        i.cancel();
        d.cancel();
        C.cancel();
        $$(J, e, h, H).setStyle("display", "none")
    }
    function D() {
        if (G >= 0) {
            r();
            G = w = E = -1;
            a.style.display = "none";
            x.cancel().chain(l).start(0)
        }
        return false
    }
    Element.implement({
        slimbox: function (N, O) {
            $$(this).slimbox(N, O);
            return this
        }
    });
    Elements.implement({
        slimbox: function (N, Q, P) {
            Q = Q ||
            function (R) {
                return [R.href, R.title]
            };
            P = P ||
            function () {
                return true
            };
            var O = this;
            O.removeEvents("click").addEvent("click", function () {
                var R = O.filter(P, this);
                return Slimbox.open(R.map(Q), R.indexOf(this), N)
            });
            return O
        }
    });
    return {
        open: function (P, O, N) {
            u = $extend({
                loop: false,
                overlayOpacity: 0.8,
                overlayFadeDuration: 400,
                resizeDuration: 400,
                resizeTransition: false,
                initialWidth: 250,
                initialHeight: 250,
                imageFadeDuration: 400,
                captionAnimationDuration: 400,
                counterText: "Image {x} of {y}",
                closeKeys: [27, 88, 67],
                previousKeys: [37, 80],
                nextKeys: [39, 78]
            },
            N || {});
            x = new Fx.Tween(I, {
                property: "opacity",
                duration: u.overlayFadeDuration
            });
            i = new Fx.Morph(a, $extend({
                duration: u.resizeDuration,
                link: "chain"
            },
            u.resizeTransition ? {
                transition: u.resizeTransition
            } : {}));
            d = new Fx.Tween(h, {
                property: "opacity",
                duration: u.imageFadeDuration,
                onComplete: j
            });
            C = new Fx.Tween(c, {
                property: "margin-top",
                duration: u.captionAnimationDuration
            });
            if (typeof P == "string") {
                P = [
                    [P, O]];
                O = 0
            }
            y = F.getScrollTop() + (F.getHeight() / 2);
            M = u.initialWidth;
            s = u.initialHeight;
            a.setStyles({
                top: Math.max(0, y - (s / 2)),
                width: M,
                height: s,
                marginLeft: -M / 2,
                display: ""
            });
            v = n || (I.currentStyle && (I.currentStyle.position != "fixed"));
            if (v) {
                I.style.position = "absolute"
            }
            x.set(0).start(u.overlayOpacity);
            z();
            l(1);
            g = P;
            u.loop = u.loop && (g.length > 1);
            return b(O)
        }
    }
})();

// AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED)
Slimbox.scanPage = function () {
    $$(document.links).filter(function (el) {
        return el.rel && el.rel.test(/^lightbox/i);
    }).slimbox(
		{	
			loop: true
		} ,
    null, function (el) {
        return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
    });
};
window.addEvent("domready", Slimbox.scanPage);