/*
	Slimbox v1.7 - The ultimate lightweight Lightbox clone
	(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
	
	2009-12-09 stegoe@bytebetrieb.com
	Kl. Änderungen für fhp.de
	
	2010-01-04 stegoe@bytebetrieb.com
	Weiter Änderungen für fhp.de, Bilder an Viewport skalieren & Bottom-Navi ohne Einblend-Animation.
	Dazu folgende Parameter Neu:
	mPad (default 20) : Padding des Bildes im Slimbox-Zentrum
	mBot (default 80) : Höhe der Navi-Leiste unter dem Bild (diese beiden sollte man eigentlich dyn machen, aber gerade keine Zeit mehr)
	scale (default false) : soll überhaupt an Viewport angepasst werden? Ansonsten Bild in voller Größe
	bottomAnimation (default true) : soll die Navi unten animiert eingeblendet werden?
	

*/
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,hImg,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(
		hImg=new Element("img",{styles:{position:"relative"}})
//		,q=new Element("div",{styles:{position:"relative"}})
	);
	c=new Element("div",{id:"lbBottom"}).injectInside(H).adopt(
		new Element("div",{id:"lbMeta"}).adopt(
			J=new Element("a",{id:"lbPrevLink",href:"#",events:{click:B}}),
			new Element("a",{id:"lbCloseLink",href:"#",events:{click:D}}),
			e=new Element("a",{id:"lbNextLink",href:"#",events:{click:f}})
		),
		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(){

// Soll Bild an Viewportgröße angepasste werden?
if(u.scale) {
// Viewportgröße
vpw = window.getWidth();
vph = window.getHeight();
// Seitenverhältnis
mRel = m.height/m.width;
// Viewport ist nicht so hoch wie das Bild?
if ((vph+u.mPad)<m.height+u.mBot){
	// Neue Höhe
	m.set('height',(vph-u.mPad-u.mBot));
	// Neue Breite, entsprechend ob VP hoch oder querformat ist
	m.set('width',(m.height/mRel));
}
// Viewport ist nicht so breit wie das Bild?
if ((vpw+u.mPad)<m.width){
	// Neue Breite
	m.set('width',(vpw-u.mPad));
	// Neue Höhe, entsprechend ob VP hoch oder querformat ist
	if(vpw>vph){m.set('height',(m.width/mRel))}else{m.set('height',(m.width*mRel))}
}
}
		a.className="";
		d.set(0);
		h.setStyles({display:""});
		hImg.set("src",o);
		hImg.setStyle("width",m.width);
		$$(hImg).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;
// Bild zu Tief positioniert (wenn Navi unten ausgeklappt ist). Gilt nur, wenn auch an Viewport angepasst wird, ansonsten kann es eh immer mal gut sein, dass die Navi unten aus dem Viewport rausgeht.
if(u.scale) {
Ph = P+m.height+u.mPad+u.mBot;
if (Ph>vph){P=Math.max(0,(vph-(m.height+u.mPad+u.mBot)))}
}
		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:(u.bottomAnimation ? "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=""}
// Soll die Navi unten animiert eingeblendet werden? (Siehe auch in func O)
		//C.set(-c.offsetHeight).start(0)
		if(u.bottomAnimation) {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();
// Soll die Navi unten animiert eingeblendet werden? (Siehe auch in func O)
		//$$(J,e,h,H).setStyle("display","none");
if (u.bottomAnimation){$$(J,e,h,H).setStyle("display","none")}else{$$(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(
				{
					mPad:20,
					mBot:80,
					scale:false,
					bottomAnimation:true,
					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({
		resizeDuration: 200,
		captionAnimationDuration: 200,
		loop: true,
		scale: true,
		bottomAnimation:false,
		counterText: false
	}, null, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
};

