/*
	Slimbox v1.71 - 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 : "Kép {x} / {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() {
	$$("a").filter(function(el) {
		return el.rel && el.rel.test(/^lightbox/i);
	}).slimbox({/* Put custom options here */}, null, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
};
if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
	window.addEvent("domready", Slimbox.scanPage);
}
