var fileLoadingImage = sImagePath + 'lightbox/loading.gif';		
var fileBottomNavCloseText = 'schliessen';

var overlayOpacity = 0.8;	// controls transparency of shadow overlay

var animate = true;			// toggles resizing animations
var resizeSpeed = 7;		// controls the speed of the image resizing animations (1=slowest and 10=fastest)

var borderSize = 10;		//if you adjust the padding in the CSS, you will need to update this variable

var oUVEffect = false;

var bLightbox = false; //Lightbox oder nicht

var bFade = true; //Faden oder Switchen

var bZoom = false; //Zoom an oder aus

var bDiashow = false; //Diashow an oder aus 

var aLightboxText = new Array();

var iTooltipInfo = '';

var aVideoText = new Array();

var bVideo = false;

Lightbox.prototype.updateDetails = function() {
	
	// if image is part of set display 'Image x of x' 
	Element.show('numberDisplay');

	if (imageArray[activeImage][1])
	{
		var sLightboxText = aLightboxText[8] + ' ' + aLightboxText[0] + ' <span class="buy">' + aLightboxText[9] + '</span>';

		if (imageArray[activeImage][4] == 0)
		{
			sLightboxText = aLightboxText[8];
		}
		
		Element.setInnerHTML( 'numberDisplay', '<a href="' + imageArray[activeImage][1] + '" id="buy">' + sLightboxText + '</a>');
	}

	if (imageArray[activeImage][5])
	{
		Element.setInnerHTML('video', aLightboxText[10]);
		getVideoContent(imageArray[activeImage][5], '50%', '46%');
	}
	else
	{
		Element.setInnerHTML('video', '');
	}

	new Effect.Parallel(
		[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration, from: 0.0, to: 1.0 }), 
		  new Effect.Appear('imageDataContainer', { sync: true, duration: resizeDuration }) ], 
		{ duration: resizeDuration, afterFinish: function() {
			// update overlay size and update nav
			var arrayPageSize = getPageSize();
			Element.setHeight('overlay', arrayPageSize[1]);
			myLightbox.updateNav();
			}
		} 
	);
	
	if (imageArray[activeImage][2])
	{
		Element.show('lightboxImageUV');
	}
	
	fadeBackgroundElement = 'lightbox';
	
	if (document.layers)
		document.captureEvents(Event.MOUSEMOVE);
	document.onmousemove = mousemoveLightbox;
}

Lightbox.prototype.updateImageList = function() {	

	if (!document.getElementsByTagName){ return; }
	var anchors = document.getElementsByTagName('a');
	var areas = document.getElementsByTagName('area');

	// loop through all anchor tags
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];
		
		var relAttribute = String(anchor.getAttribute('rel'));

		// use the string.match() method to catch 'lightbox' references in the rel attribute
		if (relAttribute.toLowerCase().match('lightbox')){
			anchor.onclick = function () {myLightbox.start(this); return false;}
		}
	}

	// loop through all area tags
	// todo: combine anchor & area tag loops
	for (var i=0; i< areas.length; i++){
		var area = areas[i];
		
		var relAttribute = String(area.getAttribute('rel'));
		
		// use the string.match() method to catch 'lightbox' references in the rel attribute
		if (relAttribute.toLowerCase().match('lightbox')){
			area.onclick = function () {myLightbox.start(this); return false;}
		}
	}
}

Lightbox.prototype.start = function(imageLink)
{
	hideSelectBoxes();
	
	if (bZoom)
	{
		toggleZoom();
	}

	if (bDiashow)
	{
		toggleDiashow();
	}

	bLightbox = true;

// stretch overlay to fill page and fade in
	var arrayPageSize = getPageSize();
	Element.setWidth('overlay', arrayPageSize[0]);
	Element.setHeight('overlay', arrayPageSize[1]);

	new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, to: overlayOpacity });

	imageArray = [];
	imageNum = 0;		

	if (!document.getElementsByTagName){ return; }
	var anchors = document.getElementsByTagName( imageLink.tagName);

	var sParam = '';

	// if image is NOT part of a set..
	if((imageLink.getAttribute('rel') == 'lightbox'))
	{
		sParam = '';
		for (var j=0; j<imageLink.childNodes.length; j++)
		{
			if (imageLink.childNodes[j].tagName == 'SPAN')
			{
				sParam = imageLink.childNodes[j].innerHTML;
				break;
			}
		}
		aParam = sParam.split(':::');

		// add single image to imageArray
		imageArray.push(
			new Array(
				aParam[0],
				aParam[3],
				aParam[1],
				aParam[2],
				aParam[4],
				aParam[5]
			)
		);			
	}
	else
	{
	// if image is part of a set..

		// loop through anchors, find other images in set, and add them to imageArray
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			if (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))
			{
				sParam = '';
				for (var j=0; j<anchor.childNodes.length; j++)
				{
					if (anchor.childNodes[j].tagName == 'SPAN')
					{
						sParam = anchor.childNodes[j].innerHTML;
						break;
					}
				}
				
				aParam = sParam.split(':::');

			
				imageArray.push(
					new Array(
						aParam[0],
						aParam[3],
						aParam[1],
						aParam[2],
						aParam[4],
						aParam[5],
						aParam[6]
					)
				);
			}
		}
		imageArray.removeDuplicates();
		while(imageArray[imageNum][6] != imageLink.id)
		{
			imageNum++;
		}
	}

	// calculate top and left offset for the lightbox 
	var arrayPageScroll = getPageScroll();
	var lightboxTop = 0;
	var lightboxLeft = arrayPageScroll[0];
	Element.setTop('lightbox', lightboxTop);
	Element.setLeft('lightbox', lightboxLeft);
	
	Element.show('lightbox');
	
	this.changeImage(imageNum);
	
	document.styleSheets[1].disabled = false;

	for (var i = 2; i < document.styleSheets.length; i++)
	{
		if (document.styleSheets[i].media.mediaText == "print")
			document.styleSheets[i].disabled = true;
	}
}

Lightbox.prototype.changeImage = function(imageNum) {	
	
	activeImage = imageNum;	// update global var

	// hide elements during transition
	if(animate){ Element.show('loading');}
	Element.hide('lightboxImage');
	Element.hide('hoverNav');
	Element.hide('prevLink');
	Element.hide('nextLink');
	Element.hide('imageDataContainer');
	Element.hide('numberDisplay');
	Element.hide('lightboxImageUV');
	video(false);
	$('lightboxImageUV').setOpacity(0);
	
	bFade = true;
	iTooltipInfo = oToolTip.add(getToolTipText(aLightboxText[5]));
	
	if (imageArray[activeImage][3] == 1)
	{
		bFade = false;
		iTooltipInfo = oToolTip.add(getToolTipText(aLightboxText[12]));
	}
	
	imgPreloader = new Image();
	
	// once image is preloaded, resize image container
	imgPreloader.onload=function(){
		var iHeight = imgPreloader.height;
		var iWidth  = imgPreloader.width;
		var iMaxHeight = window.document.body.offsetHeight - 2 * borderSize - 40;

		if (bZoom == false && 480 < iMaxHeight)
		{
			iMaxHeight = 480;
		}
		
		if (iHeight > iMaxHeight)
		{
			iWidth = Math.round(iWidth * (iMaxHeight / iHeight));
			iHeight = iMaxHeight;
		}

		Element.setTop('lightbox', window.document.body.offsetHeight / 2 - iHeight / 2 - borderSize - 20);

		Element.setSrc('lightboxImage', imageArray[activeImage][0]);
		Element.setSrc('lightboxImageUV', imageArray[activeImage][2]);
		Element.setHeight('lightboxImage', iHeight);
		Element.setHeight('lightboxImageUV', iHeight);
		Element.setWidth('lightboxImage', iWidth);
		Element.setWidth('lightboxImageUV', iWidth);
		$('lightboxImageUV').style.marginTop = '-' + iHeight + 'px';
		myLightbox.resizeImageContainer(iWidth, iHeight);
		
		imgPreloader.onload=function(){};	//	clear onLoad, IE behaves irratically with animated gifs otherwise 
	}
	imgPreloader.src = imageArray[activeImage][0];
}

Lightbox.prototype.initialize = function() {
	initWordAfterTooltip();
	this.updateImageList();
	
	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(); }
	objBody.appendChild(objOverlay);
	
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objLightbox.onclick = function(e) {	// close Lightbox is user clicks shadow overlay
		if (!e) var e = window.event;
		var clickObj = Event.element(e).id;
		if ( clickObj == 'lightbox') {
			myLightbox.end();
		}
	};
	objBody.appendChild(objLightbox);
		
	var objOuterImageContainer = document.createElement("div");
	objOuterImageContainer.setAttribute('id','outerImageContainer');
	objLightbox.appendChild(objOuterImageContainer);
	
	// When Lightbox starts it will resize itself from 250 by 250 to the current image dimension.
	// If animations are turned off, it will be hidden as to prevent a flicker of a
	// white 250 by 250 box.
	if(animate){
		Element.setWidth('outerImageContainer', 250);
		Element.setHeight('outerImageContainer', 250);			
	} else {
		Element.setWidth('outerImageContainer', 1);
		Element.setHeight('outerImageContainer', 1);			
	}
	
	var objImageContainer = document.createElement("div");
	objImageContainer.setAttribute('id','imageContainer');
	objOuterImageContainer.appendChild(objImageContainer);
	
	var objLightboxImage = document.createElement("img");
	objLightboxImage.setAttribute('id','lightboxImage');
	objImageContainer.appendChild(objLightboxImage);
	/* UV Image */
	var objLightboxImageUV = document.createElement("img");
	objLightboxImageUV.setAttribute('id','lightboxImageUV');
	objLightboxImageUV.setAttribute('style','position:relative;');
	objImageContainer.appendChild(objLightboxImageUV);
	/* End UV Image*/
	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');
	objLightbox.appendChild(objImageDataContainer);
	
	var objImageData = document.createElement("div");
	objImageData.setAttribute('id','imageData');
	objImageDataContainer.appendChild(objImageData);

	var objBottomNav = document.createElement("div");
	objBottomNav.setAttribute('id','bottomNav');
	objImageData.appendChild(objBottomNav);

	var objImageDetails = document.createElement("div");
	objImageDetails.setAttribute('id','imageDetails');
	objImageData.appendChild(objImageDetails);
	
	var objNumberDisplay = document.createElement("span");
	objNumberDisplay.setAttribute('id','numberDisplay');
	objImageDetails.appendChild(objNumberDisplay);
	
	var objBottomNavCloseLink = document.createElement("a");
	objBottomNavCloseLink.setAttribute('id','bottomNavClose');
	objBottomNavCloseLink.setAttribute('href','#');
	objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
	objBottomNav.appendChild(objBottomNavCloseLink);
	
	var objBottomNavCloseText = document.createElement("span");
	objBottomNavCloseText.setAttribute('id', 'schliessen');
	Element.setInnerHTML(objBottomNavCloseText, aLightboxText[6]);
	objBottomNavCloseLink.appendChild(objBottomNavCloseText);
	
	iTooltipInfo = oToolTip.add(getToolTipText(aLightboxText[5]));
	
	var objInfoDisplay = document.createElement("a");
	objInfoDisplay.setAttribute('id','infoDisplay');
	objInfoDisplay.setAttribute('href','#');
	objInfoDisplay.onmouseover = function(e)
	{
		oToolTip.show(iTooltipInfo, 15, 15);
	}
	objInfoDisplay.onmouseout = function(e)
	{
		oToolTip.hide();
	}
	objInfoDisplay.onclick = function() { this.blur(); return false; }
	objImageDetails.appendChild(objInfoDisplay);
	Element.setInnerHTML('infoDisplay', aLightboxText[7]);
	
	var objZoom = document.createElement("a");
	objZoom.setAttribute('id', 'zoom');
	objZoom.setAttribute('href', '#');
	objImageDetails.appendChild(objZoom);
	Element.setInnerHTML('zoom', aLightboxText[3]);
	Event.observe('zoom', 'click', toggleZoom, false);
	
	var objDiashow = document.createElement("a");
	objDiashow.setAttribute('id','diashow');
	objDiashow.setAttribute('href','#');
	objImageDetails.appendChild(objDiashow);
	Element.setInnerHTML('diashow', aLightboxText[1]);
	Event.observe('diashow', 'click', toggleDiashow, false);

	var objVideo = document.createElement("a");
	objVideo.setAttribute('id','video');
	objVideo.setAttribute('href','#');
	objImageDetails.appendChild(objVideo);
	Element.setInnerHTML('video', aLightboxText[10]);
	Event.observe('video', 'click', video, false);

	var objVideoContainer = document.createElement("div");
	objVideoContainer.setAttribute('id', 'video-container');
	document.body.appendChild(objVideoContainer);

	var objVideoDrag = document.createElement("p");
	objVideoDrag.setAttribute('id', 'video-drag');
	Element.setInnerHTML(objVideoDrag, '&nbsp;');
	objVideoContainer.appendChild(objVideoDrag);

	var objVideoPlayer = document.createElement("div");
	objVideoPlayer.setAttribute('id', 'video-player');
	objVideoContainer.appendChild(objVideoPlayer);

	var objVideoClose = document.createElement("p");
	objVideoClose.setAttribute('id', 'video-close');
	objVideoContainer.appendChild(objVideoClose);

	var objVideoCloseLink = document.createElement("a");
	objVideoCloseLink.setAttribute('id','video-close-link');
	objVideoCloseLink.setAttribute('href','#');
	Element.setInnerHTML(objVideoCloseLink, aLightboxText[6]);
	objVideoClose.appendChild(objVideoCloseLink);
    $j('#video-close-link').click(function() {
        if (bLightbox)
        {
            video(false);
        }
        else
        {
            myLightbox.end();
        }
        return false;
    });
	iTooltipVideoInfo = oToolTip.add(getToolTipText(aVideoText[3]));
	
	var objVideoInfo = document.createElement("a");
	objVideoInfo.setAttribute('id','videoInfo');
	objVideoInfo.setAttribute('href','#');
	objVideoInfo.onmouseover = function(e)
	{
		oToolTip.show(iTooltipVideoInfo, 15, 15);
	}
	objVideoInfo.onmouseout = function(e)
	{
		oToolTip.hide();
	}
	objVideoInfo.onclick = function() { this.blur(); return false; }
	objVideoClose.appendChild(objVideoInfo);
	$j('#videoInfo').html(aLightboxText[7]);

    new Draggable('video-container', {handle: objVideoDrag});
	
	if (!oUVEffect)
	{
		oUVEffect = new uvEffect('lightboxImageUV', 'outerImageContainer', borderSize);
	}
}
Lightbox.prototype.end = function()
{
	this.disableKeyboardNav();
	Element.hide('lightbox');
	stopPlayer();
	video(false);
	if (bDiashow)
	{
		toggleDiashow();
	}
	new Effect.Fade('overlay', { duration: overlayDuration});
	showSelectBoxes();
	document.styleSheets[1].disabled = true;

	for (var i = 2; i < document.styleSheets.length; i++)
	{
		if (document.styleSheets[i].media.mediaText == "print")
			document.styleSheets[i].disabled = false;
	}
}

function mousemoveLightbox(e)
{
	if (bFade)
	{
		oUVEffect.mouseMove(e);
	}
	else
	{
		switchImage(e);
	}

	toolTip_mouseMove(e);
	fadeBackground(e);
}

function switchImage(e)
{
	var docEl = (typeof document.compatMode != "undefined" && document.compatMode != "BackCompat")? "documentElement" : "body";
	var iMouseXPos = e? e.pageX : event.clientX + document.body.scrollLeft;
	var iImageXPos = $('outerImageContainer').offsetLeft + borderSize;
	var iProzent = 0;
	var iImageWidth = Element.getWidth($('lightboxImage'));

	if (document.all && !document.captureEvents)
	{
		iMouseXPos += document[docEl].scrollLeft;
	}

	iXPos = (iMouseXPos - iImageXPos < 0) ? 0 : iMouseXPos - iImageXPos;
	
	if (iXPos > iImageWidth)
		iXPos = 0;

	if (iXPos > iImageWidth / 2)
		iXPos = iImageWidth - iXPos;
	iProzent = iXPos / (iImageWidth / 2);
	
	if (iProzent > 0.5)
	{
		Element.setSrc('lightboxImage', imageArray[activeImage][2]);
	}
	else
	{
		Element.setSrc('lightboxImage', imageArray[activeImage][0]);
	}
}

function toggleZoom()
{
	$('zoom').blur();
	
	if (bZoom)
	{
		bZoom = false;
		Element.setInnerHTML('zoom', aLightboxText[3]);
	}
	else
	{
		bZoom = true;
		Element.setInnerHTML('zoom', aLightboxText[4]);
	}
	
	myLightbox.changeImage(activeImage);
	
	return false;
}

function toggleDiashow()
{
	$('diashow').blur();
	
	if (bDiashow)
	{
		bDiashow = false;
		Element.setInnerHTML('diashow', aLightboxText[1]);
		window.clearTimeout(oDiashow);
	}
	else
	{
		bDiashow = true;
		Element.setInnerHTML('diashow', '<span class="important">' + aLightboxText[2] + '</span>');
		oDiashow = window.setTimeout('diashow()', 4000);
	}
	
	return false;
}

function diashow()
{
	if (activeImage != (imageArray.length - 1))
	{
		myLightbox.changeImage(activeImage + 1);
	}
	else
	{
		myLightbox.changeImage(0);
	}

	oDiashow = window.setTimeout('diashow()', 4000);
	
	return false;
}

function video(bShow)
{
	$j('#video').blur();
	
	if (bShow)
	{
	    $j('#video-container').css({
	        'left': '50%',
	        'top': '41%'
	    });
	    startPlayer();
	    
		bVideo = true;
		$j('#video').html(aLightboxText[11]);

		if (bDiashow)
		{
			toggleDiashow();
		}
	}
	else
	{
        stopPlayer();
        $j('#video-container').css({
            'left': '-1000em',
            'top': '-1000em'
        });

		bVideo = false;
		$j('#video').html(aLightboxText[10]);
	}
	
	return false;
}

function getVideoContent(sVideoPath)
{
	flashembed(
		"video-player",
		{
			src:sImagePath + '/flash/FlowPlayerLight.swf',
			version: [9,115],
			expressInstall:sImagePath + '/flash/expressinstall.swf',
			onFail: function(sVersion)
			{
				return '<h2>' + searchAndReplace(aVideoText[0], '%version', this.version) + '<\/h2>'
					+ '<h3>' + searchAndReplace(aVideoText[1], '%version', sVersion) + '<\/h3>'
					+ aVideoText[2] + ' <a href="' +  this.pluginspage + '">Adobe</a>';
			}, 
			width: 400,
			height: 290,
			wmode: 'transparent'
		},
		{
			config:
			{
				autoPlay:true,
				loop:true,
				controlBarBackgroundColor:'0x00ff00',
				initialScale: 'scale',
				videoFile: sVideoPath,
				showVolumeSlider: false,
				showMuteVolumeButton: true,
				showMenu: false,
				controlBarBackgroundColor: 0,
				controlBarGloss: 'none',
				controlsOverVideo: 'ease'
			}
		}
	);
}

function getAudioContent(sImagePath, sAudioPath)
{
	$f('video-player', {
    	    src: sFlowplayer,
            wmode: 'transparent'
    	},
    	{
    	    key: sFlowplayerKey,
            plugins: {
                audio: {
                    url: sFlowplayerAudio
                },
        	    controls: {
                    time: false,
                    fullscreen: false,
        	        backgroundGradient: 'none',
        	        backgroundColor: '#000000',
        	        bufferColor: '#999999',
        	        progressColor: '#666666',
        	        volumeSliderColor: '#999999'
        	    }
    	    }
    	}
    );

    $f('video-player').setPlaylist([
        sImagePath,
        sAudioPath
    ]);
}

function stopPlayer()
{
    $('video-player').innerHTML = '';
}

function startPlayer()
{
}

var sPrevElement = false;
var fOpacity = overlayOpacity;
var bOverlay = false;
var fadeBackgroundElement = 'lightbox';

function fadeBackground(e)
{
	if (!e) var e = window.event;
	var sCurrElement = Event.element(e).id;

	if (sPrevElement == fadeBackgroundElement && sCurrElement != fadeBackgroundElement)
	{
		bOverlay = false;
		incOpacityBackground();
	}

	if (sPrevElement != fadeBackgroundElement && sCurrElement == fadeBackgroundElement)
	{
		bOverlay = true;
		decOpacityBackground();
	}
	
	sPrevElement = sCurrElement;
}

function incOpacityBackground()
{
	if (!bOverlay)
	{
		if (fOpacity < overlayOpacity)
		{
			fOpacity = fOpacity + 0.05;
			$('overlay').setOpacity(fOpacity);
			setTimeout('incOpacityBackground()', 10);
		}
	}
}


function decOpacityBackground()
{
	if (bOverlay)
	{
		if (fOpacity > 0.0)
		{
			fOpacity = fOpacity - 0.05;
			$('overlay').setOpacity(fOpacity);
			setTimeout('decOpacityBackground()', 10);
		}
	}
}

function openURI($sUri)
{
	window.location.href = $sUri;
	return false;
}

function afterloadLightbox()
{
	return false;
}
