var fileLoadingImage="images/loading.gif";		
var fileBottomNavCloseImage="images/closelabel.gif";
var resizeSpeed=7;
var borderSize=10;
var imageArray=new Array;
var activeImage;
if(resizeSpeed>10){resizeSpeed=10;}
if(resizeSpeed<1){resizeSpeed=1;}
resizeDuration=(11-resizeSpeed)*0.15;
Object.extend(Element, {
getWidth: function(element){
element=$(element);
return element.offsetWidth; 
},
setWidth: function(element,w){
element=$(element);
element.style.width=w+"px";
},
setHeight: function(element,h){
element=$(element);
element.style.height=h+"px";
},
setTop: function(element,t){
element=$(element);
element.style.top=t+"px";
},
setSrc: function(element,src){
element=$(element);
element.src=src; 
},
setHref: function(element,href){
element=$(element);
element.href=href; 
},
setInnerHTML: function(element,content){
element=$(element);
element.innerHTML=content;
}});
Array.prototype.removeDuplicates=function(){
for(i=1; i<this.length; i++){
if(this[i][0]==this[i-1][0]){
this.splice(i,1);
}}}
Array.prototype.empty=function(){
for(i=0; i <= this.length; i++){
this.shift();
}}
var Lightbox=Class.create();
Lightbox.prototype={
initialize: function(){	
if(!document.getElementsByTagName){return;}
var anchors=document.getElementsByTagName('a');
for (var i=0; i<anchors.length; i++){
var anchor=anchors[i];
var relAttribute=String(anchor.getAttribute('rel'));
if(anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
anchor.onclick=function(){myLightbox.start(this); return false;}}}
var objBody=document.getElementsByTagName("body").item(0);
var objOverlay=document.createElement("div");
objOverlay.setAttribute('id','overlay');
objOverlay.style.display='none';
objOverlay.onclick=function(){ myLightbox.end(); return false; }
objBody.appendChild(objOverlay);
var objLightbox=document.createElement("div");
objLightbox.setAttribute('id','lightbox');
objLightbox.style.display='none';
objBody.appendChild(objLightbox);
var objOuterImageContainer=document.createElement("div");
objOuterImageContainer.setAttribute('id','outerImageContainer');
objLightbox.appendChild(objOuterImageContainer);
var objImageContainer=document.createElement("div");
objImageContainer.setAttribute('id','imageContainer');
objOuterImageContainer.appendChild(objImageContainer);
var objLightboxImage=document.createElement("img");
objLightboxImage.setAttribute('id','lightboxImage');
objImageContainer.appendChild(objLightboxImage);
var objHoverNav=document.createElement("div");
objHoverNav.setAttribute('id','hoverNav');
objImageContainer.appendChild(objHoverNav);
var objPrevLink=document.createElement("a");
objPrevLink.setAttribute('id','prevLink');
objPrevLink.setAttribute('href','#');
objHoverNav.appendChild(objPrevLink);
var objNextLink=document.createElement("a");
objNextLink.setAttribute('id','nextLink');
objNextLink.setAttribute('href','#');
objHoverNav.appendChild(objNextLink);
var objLoading=document.createElement("div");
objLoading.setAttribute('id','loading');
objImageContainer.appendChild(objLoading);
var objLoadingLink=document.createElement("a");
objLoadingLink.setAttribute('id','loadingLink');
objLoadingLink.setAttribute('href','#');
objLoadingLink.onclick=function(){ myLightbox.end(); return false; }
objLoading.appendChild(objLoadingLink);
var objLoadingImage=document.createElement("img");
objLoadingImage.setAttribute('src', fileLoadingImage);
objLoadingLink.appendChild(objLoadingImage);
var objImageDataContainer=document.createElement("div");
objImageDataContainer.setAttribute('id','imageDataContainer');
objImageDataContainer.className='clearfix';
objLightbox.appendChild(objImageDataContainer);
var objImageData=document.createElement("div");
objImageData.setAttribute('id','imageData');
objImageDataContainer.appendChild(objImageData);
var objImageDetails=document.createElement("div");
objImageDetails.setAttribute('id','imageDetails');
objImageData.appendChild(objImageDetails);
var objCaption=document.createElement("span");
objCaption.setAttribute('id','caption');
objImageDetails.appendChild(objCaption);
var objNumberDisplay=document.createElement("span");
objNumberDisplay.setAttribute('id','numberDisplay');
objImageDetails.appendChild(objNumberDisplay);
var objBottomNav=document.createElement("div");
objBottomNav.setAttribute('id','bottomNav');
objImageData.appendChild(objBottomNav);
var objBottomNavCloseLink=document.createElement("a");
objBottomNavCloseLink.setAttribute('id','bottomNavClose');
objBottomNavCloseLink.setAttribute('href','#');
objBottomNavCloseLink.onclick=function(){ myLightbox.end(); return false; }
objBottomNav.appendChild(objBottomNavCloseLink);
var objBottomNavCloseImage=document.createElement("img");
objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
objBottomNavCloseImage.setAttribute('width', '111');
objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
},
start: function(imageLink){	
hideSelectBoxes();
var arrayPageSize=getPageSize();
Element.setHeight('overlay', arrayPageSize[1]);
new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.5 });
imageArray=[];
imageNum=0;		
if(!document.getElementsByTagName){ return; }
var anchors=document.getElementsByTagName('a');
if((imageLink.getAttribute('rel')=='lightbox')){
imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
}else{
for (var i=0; i<anchors.length; i++){
var anchor=anchors[i];
if(anchor.getAttribute('href') && (anchor.getAttribute('rel')==imageLink.getAttribute('rel'))){
imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
}}
imageArray.removeDuplicates();
while(imageArray[imageNum][0] != imageLink.getAttribute('href')){ imageNum++;}}
var arrayPageSize=getPageSize();
var arrayPageScroll=getPageScroll();
var lightboxTop=arrayPageScroll[1]+(arrayPageSize[3] / 15);
Element.setTop('lightbox', lightboxTop);
Element.show('lightbox');
this.changeImage(imageNum);
},
changeImage: function(imageNum){	
activeImage=imageNum;
Element.show('loading');
Element.hide('lightboxImage');
Element.hide('hoverNav');
Element.hide('prevLink');
Element.hide('nextLink');
Element.hide('imageDataContainer');
Element.hide('numberDisplay');		
imgPreloader=new Image();
imgPreloader.onload=function(){
Element.setSrc('lightboxImage', imageArray[activeImage][0]);
myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
}
imgPreloader.src=imageArray[activeImage][0];
},
resizeImageContainer: function( imgWidth, imgHeight){
this.wCur=Element.getWidth('outerImageContainer');
this.hCur=Element.getHeight('outerImageContainer');
this.xScale=((imgWidth+(borderSize * 2)) / this.wCur) * 100;
this.yScale=((imgHeight+(borderSize * 2)) / this.hCur) * 100;
wDiff=(this.wCur-borderSize * 2)-imgWidth;
hDiff=(this.hCur-borderSize * 2)-imgHeight;
if(!( hDiff==0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
if(!( wDiff==0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }
if((hDiff==0) && (wDiff==0)){
if(navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); }else{ pause(100);} 
}
Element.setHeight('prevLink', imgHeight);
Element.setHeight('nextLink', imgHeight);
Element.setWidth( 'imageDataContainer', imgWidth+(borderSize * 2));
this.showImage();
},
showImage: function(){
Element.hide('loading');
new Effect.Appear('lightboxImage', { duration: 0.5, queue: 'end', afterFinish: function(){	myLightbox.updateDetails(); } });
this.preloadNeighborImages();
},
updateDetails: function(){
Element.show('caption');
Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
if(imageArray.length>1){
Element.show('numberDisplay');
Element.setInnerHTML( 'numberDisplay', "Bild "+eval(activeImage+1)+" von "+imageArray.length);
}
new Effect.Parallel(
[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration+0.25, from: 0.0, to: 1.0 }), 
new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 }) ], 
{ duration: 0.65, afterFinish: function(){ myLightbox.updateNav();} } 
);
},
updateNav: function(){
Element.show('hoverNav');				
if(activeImage != 0){
Element.show('prevLink');
document.getElementById('prevLink').onclick=function(){
myLightbox.changeImage(activeImage-1); return false;
}}
if(activeImage != (imageArray.length-1)){
Element.show('nextLink');
document.getElementById('nextLink').onclick=function(){
myLightbox.changeImage(activeImage+1); return false;
}}
this.enableKeyboardNav();
},
enableKeyboardNav: function(){
document.onkeydown=this.keyboardAction; 
},
disableKeyboardNav: function(){
document.onkeydown='';
},
keyboardAction: function(e){
if(e==null){
keycode=event.keyCode;
}else{
keycode=e.which;
}
key=String.fromCharCode(keycode).toLowerCase();
if((key=='x') || (key=='o') || (key=='c')){
myLightbox.end();
}else if(key=='p'){
if(activeImage != 0){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage-1);
}}else if(key=='n'){
if(activeImage != (imageArray.length-1)){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage+1);
}}},
preloadNeighborImages: function(){
if((imageArray.length-1)>activeImage){
preloadNextImage=new Image();
preloadNextImage.src=imageArray[activeImage+1][0];
}
if(activeImage>0){
preloadPrevImage=new Image();
preloadPrevImage.src=imageArray[activeImage-1][0];
}},
end: function(){
this.disableKeyboardNav();
Element.hide('lightbox');
new Effect.Fade('overlay', { duration: 0.2});
showSelectBoxes();
}}
function getPageScroll(){
var yScroll;
if(self.pageYOffset){
yScroll=self.pageYOffset;
}else if(document.documentElement && document.documentElement.scrollTop){
yScroll=document.documentElement.scrollTop;
}else if(document.body){
yScroll=document.body.scrollTop;
}
arrayPageScroll=new Array('',yScroll) 
return arrayPageScroll;
}
function getPageSize(){
var xScroll, yScroll;
if(window.innerHeight && window.scrollMaxY){	
xScroll=document.body.scrollWidth;
yScroll=window.innerHeight+window.scrollMaxY;
}else if(document.body.scrollHeight>document.body.offsetHeight){
xScroll=document.body.scrollWidth;
yScroll=document.body.scrollHeight;
}else{
xScroll=document.body.offsetWidth;
yScroll=document.body.offsetHeight;
}
var windowWidth, windowHeight;
if(self.innerHeight){
windowWidth=self.innerWidth;
windowHeight=self.innerHeight;
}else if(document.documentElement && document.documentElement.clientHeight){
windowWidth=document.documentElement.clientWidth;
windowHeight=document.documentElement.clientHeight;
}else if(document.body){
windowWidth=document.body.clientWidth;
windowHeight=document.body.clientHeight;
}	
if(yScroll<windowHeight){
pageHeight=windowHeight;
}else{ 
pageHeight=yScroll;
}
if(xScroll<windowWidth){	
pageWidth=windowWidth;
}else{
pageWidth=xScroll;
}
arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
return arrayPageSize;
}
function getKey(e){
if(e==null){
keycode=event.keyCode;
}else{
keycode=e.which;
}
key=String.fromCharCode(keycode).toLowerCase();
if(key=='x'){
}}
function listenKey (){	document.onkeypress=getKey; }
function showSelectBoxes(){
selects=document.getElementsByTagName("select");
for (i=0; i != selects.length; i++){
selects[i].style.visibility="visible";
}}
function hideSelectBoxes(){
selects=document.getElementsByTagName("select");
for (i=0; i != selects.length; i++){
selects[i].style.visibility="hidden";
}}
function pause(numberMillis){
var now=new Date();
var exitTime=now.getTime()+numberMillis;
while (true){
now=new Date();
if(now.getTime()>exitTime)
return;
}}
function initLightbox(){ myLightbox=new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);