﻿/*
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;
        //Verifica se a tecla Ctrl ou C está sendo pressionada para permitir o Copy.
        if (N == 67 || N == 17) return true;
        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 + 30, top: P }) } if (a.offsetWidth != M) { N = i.start({ width: M, marginLeft: -M / 2 }) } O = function() { H.setStyles({ width: M, top: P, 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], 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)
        }
    }
})();

