/*
	Slimbox v1.71 - The ultimate lightweight Lightbox clone
	(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/

var Slimbox = (function() {
	var win = window, ie6 = Browser.Engine.trident4, options, images, activeImage = -1, activeURL, compatibleOverlay, middle, centerWidth, centerHeight,
	preload = {}, preloadPrev = new Image(), preloadNext = new Image(),
	overlay, center, image, sizer, prevLink, nextLink, bottomContainer, bottom, caption, number,
	fxOverlay, fxResize, fxImage, fxBottom;
	win.addEvent("domready", function() {
		$(document.body).adopt(
			$$(
				overlay = new Element("div", {id: "lbOverlay", events: {click: close}}),
				center = new Element("div", {id: "lbCenter"}),
				bottomContainer = new Element("div", {id: "lbBottomContainer"})
			).setStyle("display", "none")
		);
		image = new Element("div", {id: "lbImage"}).injectInside(center).adopt(
			sizer = new Element("div", {styles: {position: "relative"}})
		);
		bottom = new Element("div", {id: "lbBottom"}).injectInside(bottomContainer).adopt(
			closeLink = new Element("a", {id: "lbCloseLink", href: "#", events: {click: close}}).set("html",'schließen'),
			nextLink = new Element("a", {id: "lbNextLink", href: "#", events: {click: next}}).set("html",'nächstes'),
			prevLink = new Element("a", {id: "lbPrevLink", href: "#", events: {click: previous}}).set("html",'voriges'),
			caption = new Element("div", {id: "lbCaption"}),
			number = new Element("div", {id: "lbNumber"}),
			new Element("div", {styles: {clear: "both"}})
		);
	});
	function position() {
		var scroll = win.getScroll(), size = win.getSize();
		$$(center, bottomContainer).setStyle("left", scroll.x + (size.x / 2));
		if (compatibleOverlay) overlay.setStyles({left: scroll.x, top: scroll.y, width: size.x, height: size.y});
		}
	function setup(open) {
		["object", ie6 ? "select" : "embed"].forEach(function(tag) {
			Array.forEach(document.getElementsByTagName(tag), function(el) {
				if (open) el._slimbox = el.style.visibility;
				el.style.visibility = open ? "hidden" : el._slimbox;
			});
		});
		overlay.style.display = open ? "" : "none";
		var fn = open ? "addEvent" : "removeEvent";
		win[fn]("scroll", position)[fn]("resize", position);
		document[fn]("keydown", keyDown);
		}
	function keyDown(event) {
		var code = event.code;
		return options.closeKeys.contains(code) ? close()
			: options.nextKeys.contains(code) ? next()
			: options.previousKeys.contains(code) ? previous()
			: false;
		}
	function previous() {
		return changeImage(prevImage);
		}
	function next() {
		return changeImage(nextImage);
		}
	function changeImage(imageIndex) {
		if (imageIndex >= 0) {
			activeImage = imageIndex;
			activeURL = images[imageIndex][0];
			prevImage = (activeImage || (options.loop ? images.length : 0)) - 1;
			nextImage = ((activeImage + 1) % images.length) || (options.loop ? 0 : -1);
			stop();
			center.className = "lbLoading";
			preload = new Image();
			preload.onload = animateBox;
			preload.src = activeURL;
			}
		return false;
		}
	function animateBox() {
		center.className = "";
		fxImage.set(0);
		image.setStyles({backgroundImage: "url(" + activeURL + ")", display: ""});
		sizer.setStyle("width", preload.width);
		$$(sizer, prevLink, nextLink).setStyle("height", preload.height);
		caption.set("html", images[activeImage][1] || "");
		number.set("html", (((images.length > 1) && options.counterText) || "").replace(/{x}/, activeImage + 1).replace(/{y}/, images.length));
		if (prevImage >= 0) preloadPrev.src = images[prevImage][0];
		if (nextImage >= 0) preloadNext.src = images[nextImage][0];
		centerWidth = image.offsetWidth;
		centerHeight = image.offsetHeight;
		var top = Math.max(0, middle - (centerHeight / 2)), check = 0, fn;
		if (center.offsetHeight != centerHeight) {
			check = fxResize.start({height: centerHeight, top: top});
			}
		if (center.offsetWidth != centerWidth) {
			check = fxResize.start({width: centerWidth, marginLeft: -centerWidth/2});
			}
		fn = function() {
			bottomContainer.setStyles({width: centerWidth-20, top: top + centerHeight, marginLeft: -centerWidth/2, visibility: "hidden", display: ""});
			fxImage.start(1);
			};
		if (check) {
			fxResize.chain(fn);
			}
		else {
			fn();
			}
		}
	function animateCaption() {
		if(images.length == 1){
			$$(nextLink,prevLink).setStyle('height',0);
			closeLink.setStyle('border','0px');
			}
		else{
			$$(nextLink,prevLink).setStyle('height',15);
			closeLink.setStyle('borderLeft','1px solid rgb(160,160,160)');
			}
		fxBottom.set(-bottom.offsetHeight).start(0);
		bottomContainer.style.visibility = "";
		}
	function stop() {
		preload.onload = $empty;
		preload.src = preloadPrev.src = preloadNext.src = activeURL;
		fxResize.cancel();
		fxImage.cancel();
		fxBottom.cancel();
		$$(image, bottomContainer).setStyle("display", "none");
		}
	function close() {
		if (activeImage >= 0) {
			stop();
			activeImage = prevImage = nextImage = -1;
			center.style.display = "none";
			fxOverlay.cancel().chain(setup).start(0);
			}
		return false;
		}
	Element.implement({
		slimbox: function(_options, linkMapper) {
			$$(this).slimbox(_options, linkMapper);
			return this;
		}
	});
	Elements.implement({
		slimbox: function(_options, linkMapper, linksFilter) {
			linkMapper = linkMapper || function(el) {
				return [el.href, el.title];
				};
			linksFilter = linksFilter || function() {
				return true;
				};
			var links = this;
			links.removeEvents("click").addEvent("click", function() {
				var filteredLinks = links.filter(linksFilter, this);
				return Slimbox.open(filteredLinks.map(linkMapper), filteredLinks.indexOf(this), _options);
				});
		return links;
		}
	});
	return {
		open: function(_images, startImage, _options) {
			options = $extend({
				loop: true,
				overlayOpacity: 0.8,
				overlayFadeDuration: 300,
				resizeDuration: 300,
				resizeTransition: false,
				initialWidth: 240,
				initialHeight: 180,
				imageFadeDuration: 300,
				captionAnimationDuration: 200,
				counterText: "Bild {x} von {y}",
				closeKeys: [27, 88, 67],
				previousKeys: [37, 80],
				nextKeys: [39, 78]
			}, _options || {});
			fxOverlay = new Fx.Tween(overlay, {property: "opacity", duration: options.overlayFadeDuration});
			fxResize = new Fx.Morph(center, $extend({duration: options.resizeDuration, link: "chain"}, options.resizeTransition ? {transition: options.resizeTransition} : {}));
			fxImage = new Fx.Tween(image, {property: "opacity", duration: options.imageFadeDuration, onComplete: animateCaption});
			fxBottom = new Fx.Tween(bottom, {property: "margin-top", duration: options.captionAnimationDuration});
			if (typeof _images == "string") {
				_images = [[_images, startImage]];
				startImage = 0;
				}
			middle = win.getScrollTop() + (win.getHeight() / 2);
			centerWidth = options.initialWidth;
			centerHeight = options.initialHeight;
			center.setStyles({top: Math.max(0, middle - (centerHeight / 2)), width: centerWidth, height: centerHeight, marginLeft: -centerWidth/2, display: ""}); 
			compatibleOverlay = ie6 || (overlay.currentStyle && (overlay.currentStyle.position != "fixed"));
			if (compatibleOverlay) overlay.style.position = "absolute";
			fxOverlay.set(0).start(options.overlayOpacity);
			position();
			setup(1);
			images = _images;
			options.loop = options.loop && (images.length > 1);
			return changeImage(startImage);
			}
		};
	})();
Slimbox.scanPage = function(){
	$$("a").filter(function(el){
		return el.rel && el.rel.test(/^lightbox/i);
	}).slimbox({}, 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);
	}
