Event.addEvent(window,"load",prepareLightboxes);

var JSLightboxPreloader = "images/ani_circle_black.gif";
var JSLightboxPreloaderBack = "../images/ani_circle_black.gif";
var JSOverlayOpacity = 80;
var JSTextAllowance = 50;
var JSBorderAllowance = 40;

function prepareLightboxes(){
	var pageLightboxes = Document.getElementsByClassMatch("JS:LightBox");
	pageLightboxes.each(Lightbox);
	var imageLightboxes = Document.getElementsByClassMatch("JS:ImageLightBox");
	imageLightboxes.each(ImageLightbox);
	// get right preloader
	var preloader = new Image();
	preloader.onerror = function(){
		JSLightboxPreloader = JSLightboxPreloaderBack;
	}
	preloader.src = JSLightboxPreloader;
}


// IMAGE LIGHTBOX
function ImageLightbox(element){
	Event.addEvent(element,"click",ImageLightbox.open);
}
ImageLightbox.open = function(evt){
	var element = Event.getTarget(evt);
	Event.preventDefault(evt);
	element = (element.tagName.toLowerCase() == "img") ? element.parentNode : element;
	var imagePath = element.href;
	Lightbox.setOverlay();
	var frame = Lightbox.createFrame();
	Lightbox.showPreloader();
	var image = new Image();
	image.onload = function(){
		ImageLightbox.load(element,image);
	}
	image.src = imagePath;
	// style sheet
	var linkTag = document.createElement ("link");
	linkTag.href = "../css/js_lightbox_print.css";
	linkTag.rel = "stylesheet";
	linkTag.media = "print";
	var head = document.getElementsByTagName ("head")[0];
	head.appendChild (linkTag);
	frame.linkTag = linkTag;
}
ImageLightbox.load = function(element,image){
	var imageTitle = element.title;
	var imageDescription = element.rel;
	var imageWidth = image.width;
	var imageHeight = image.height;
	Lightbox.removePreloader();
	var frame = document.getElementById("lightbox_frame");
	var leftPadding = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var rightPadding = Number(Document.getStyle(frame,"padding-right").replace("px",""));
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var bottomPadding = Number(Document.getStyle(frame,"padding-bottom").replace("px",""));
	var currentWidth = frame.offsetWidth - leftPadding - rightPadding;
	var currentHeight = frame.offsetHeight - topPadding - bottomPadding;
	
	// UPDATED 05/07/2010
	var targetWidth = Document.getWindowWidth() - leftPadding - rightPadding - JSBorderAllowance;
	if(imageWidth > targetWidth){
		var oldWidth = imageWidth;
		imageWidth = targetWidth;
		imageHeight = (imageHeight / oldWidth) * imageWidth;
	}
	var targetHeight = Document.getWindowHeight() - topPadding - bottomPadding - JSBorderAllowance - JSTextAllowance;
	if(imageHeight > targetHeight){
		var oldHeight = imageHeight;
		imageHeight = targetHeight;
		imageWidth = (imageWidth / oldHeight) * imageHeight;
	}
	//alert(imageHeight);
	var aniWidth = new Tween(frame,"scaleX",Strong.easeOut,currentWidth,imageWidth,0.5);
	var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,currentHeight,imageHeight,0.5);
	aniWidth.onMotionFinished = function(){
		ImageLightbox.show(image, element, imageWidth, imageHeight);
	}
}
ImageLightbox.show = function(image, element, imageWidth, imageHeight){
	var frame = document.getElementById("lightbox_frame");
	var leftPadding = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var xpos = Document.getX(frame) + leftPadding;
	var ypos = Document.getY(frame) + topPadding;
	image.setAttribute("id","lightbox_image");
	/*image.setAttribute("width",imageWidth+"px");
	image.setAttribute("height",imageHeight+"px");*/
	image.width = imageWidth;
	image.height = imageHeight;
	image.style.left = xpos + "px";
	image.style.top = ypos + "px";
	image.style.opacity = 0;
	image.style.filter = "alpha(opacity=0)"; 
	document.getElementsByTagName("body")[0].appendChild(image);
	var fadeIn = new Tween(image,"alpha",Strong.easeOut,0,100,0.2);
	fadeIn.onMotionFinished = function(){
		ImageLightbox.showDetails(image,element);
		
	}
}
ImageLightbox.showDetails = function(image,element){
	var title = element.title;
	var description = element.rel;
	var frame = document.getElementById("lightbox_frame");
	var leftPadding = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var rightPadding = Number(Document.getStyle(frame,"padding-right").replace("px",""));
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var bottomPadding = Number(Document.getStyle(frame,"padding-bottom").replace("px",""));
	var xpos = Document.getX(frame) + leftPadding;
	var ypos = Document.getY(frame) + topPadding + image.offsetHeight;
	var details = document.createElement("div");	
	details.setAttribute("id","lightbox_details");
	details.style.top = ypos + "px";
	details.style.left = xpos + "px";
	details.style.visibility = "hidden";
	details.style.width = (frame.offsetWidth - leftPadding - rightPadding - ImageLightbox.getCloseWidth()) + "px";
	document.getElementsByTagName("body")[0].appendChild(details);
	var titleElement = document.createElement("p");
	titleElement.setAttribute("id","lightbox_title");
	titleElement.innerHTML = title;
	details.appendChild(titleElement);
	var descriptionElement = document.createElement("p");
	descriptionElement.setAttribute("id","lightbox_description");
	descriptionElement.innerHTML = description;
	details.appendChild(descriptionElement);
	var stretchTo = details.offsetHeight + frame.offsetHeight - bottomPadding - topPadding;
	var stretchHeight = new Tween(frame,"height",Regular.easeOut,frame.offsetHeight,stretchTo,0.1);
	stretchHeight.onMotionFinished = function(){
		details.style.visibility = "visible";	
		ImageLightbox.createCloseButton(leftPadding,rightPadding,topPadding,bottomPadding);
		ImageLightbox.navigation(element);
	}
}
ImageLightbox.createCloseButton = function(lPadding,rPadding,tPadding,bPadding){
	var frame = document.getElementById("lightbox_frame");
	var image = document.getElementById("lightbox_image");
	var details = document.getElementById("lightbox_details");
	var closeButton = document.createElement("a");
	closeButton.setAttribute("id","lightbox_close");
	closeButton.setAttribute("href","#");
	frame.appendChild(closeButton);
	Event.addEvent(closeButton,"click",Lightbox.close);
	var xpos = frame.offsetWidth - closeButton.offsetWidth - (lPadding - rPadding);
	var ypos = image.offsetHeight + (closeButton.offsetHeight / 2) + (details.offsetHeight / 2);
	closeButton.style.left = xpos + "px";
	closeButton.style.top = ypos + "px";
}
ImageLightbox.getCloseWidth = function(){
	var closeButton = document.createElement("a");
	closeButton.setAttribute("id","lightbox_close");
	document.getElementsByTagName("body")[0].appendChild(closeButton);
	var returnWidth = closeButton.offsetWidth;
	closeButton.parentNode.removeChild(closeButton);
	return returnWidth;
}
ImageLightbox.navigation = function(element){
	var imageLinks = Document.getElementsByClassMatch("JS:ImageLightBox");
	var currentImage = 0;
	var imageContainer = new Array();
	for(var i = 0; i < imageLinks.length; i ++){
		imageContainer.push(imageLinks[i]);
		if(imageLinks[i].href == element.href){
			currentImage = i;
		}
	}
	var totalImages = imageContainer.length;
	if(totalImages > 1 && currentImage != 0){
		ImageLightbox.createPrevLink(imageLinks[currentImage - 1]);
	}
	if(totalImages > 1 && currentImage != (totalImages - 1)){
		ImageLightbox.createNextLink(imageLinks[currentImage + 1]);
	}
}
ImageLightbox.createPrevLink = function(targetElement){
	var image = document.getElementById("lightbox_image");
	var prevLink = document.createElement("a");
	prevLink.setAttribute("id","lightbox_previous");
	prevLink.setAttribute("href","#");
	prevLink.style.left = Document.getX(image) + "px";
	prevLink.style.top = Document.getY(image) + "px";
	prevLink.style.width = Math.ceil(image.offsetWidth / 2) + "px";
	prevLink.style.height = image.offsetHeight + "px";
	prevLink.innerHTML = "Previous Image";
	document.getElementsByTagName("body")[0].appendChild(prevLink);
	prevLink.onclick = function(){
		ImageLightbox.removeImage(targetElement);
		return false;
	}
}
ImageLightbox.createNextLink = function(targetElement){
	var image = document.getElementById("lightbox_image");
	var nextLink = document.createElement("a");
	nextLink.setAttribute("id","lightbox_next");
	nextLink.setAttribute("href","#");
	nextLink.style.left = Math.ceil(Document.getX(image) + (image.offsetWidth / 2)) + "px";
	nextLink.style.top = Document.getY(image) + "px";
	nextLink.style.width = image.offsetWidth / 2 + "px";
	nextLink.style.height = image.offsetHeight + "px";
	nextLink.innerHTML = "Next Image";
	document.getElementsByTagName("body")[0].appendChild(nextLink);
	nextLink.onclick = function(){
		ImageLightbox.removeImage(targetElement);
		return false;
	}
}
ImageLightbox.removeImage = function(element){
	var frame = document.getElementById("lightbox_frame");
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var bottomPadding = Number(Document.getStyle(frame,"padding-bottom").replace("px",""));
	var currentImage = document.getElementById("lightbox_image");
	var currentDetails = document.getElementById("lightbox_details");
	var closeButton = document.getElementById("lightbox_close");
	var prevLink = document.getElementById("lightbox_previous");
	var nextLink = document.getElementById("lightbox_next");
	//remove navigation links
	try{
		prevLink.parentNode.removeChild(prevLink);
	}catch(e){}
	try{
		nextLink.parentNode.removeChild(nextLink);
	}catch(e){}
	try{
		closeButton.parentNode.removeChild(closeButton);
	}catch(e){}
	try{
		currentDetails.parentNode.removeChild(currentDetails);
	}catch(e){}
	var startHeight = frame.offsetHeight - topPadding - bottomPadding;
	var finalHeight = currentImage.offsetHeight;
	var shortenHeight = new Tween(frame,"height",Regular.easeOut,startHeight,finalHeight,0.2);
	shortenHeight.onMotionFinished = function(){
		var fadeOut = new Tween(currentImage,"alpha",Regular.easeOut,100,0,0.1);	
		fadeOut.onMotionFinished = function(){
			currentImage.parentNode.removeChild(currentImage);
			ImageLightbox.gotoImage(element);
		}
	}
}
ImageLightbox.gotoImage = function(element){
	element = (element.tagName.toLowerCase() == "img") ? element.parentNode : element;
	var imagePath = element.href;
	var image = new Image();
	Lightbox.showPreloader();
	image.onload = function(){
		ImageLightbox.load(element,image);
	}
	image.src = imagePath;
}
// CALL FROM FLASH
function ImageLightboxFromFlash(imagePath, title, description){
	Lightbox.setOverlay();
	var frame = Lightbox.createFrame();
	Lightbox.showPreloader();
	var image = new Image();
	image.onload = function(){
		ImageLightboxFromFlash.load(image, title, description);
	}
	image.src = imagePath;
}
ImageLightboxFromFlash.load = function(image, imageTitle, imageDescription){
	var imageWidth = image.width;
	var imageHeight = image.height;
	Lightbox.removePreloader();
	var element = new Object();
	element.title = imageTitle;
	element.rel = imageDescription;
	var frame = document.getElementById("lightbox_frame");
	var leftPadding = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var rightPadding = Number(Document.getStyle(frame,"padding-right").replace("px",""));
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var bottomPadding = Number(Document.getStyle(frame,"padding-bottom").replace("px",""));
	var currentWidth = frame.offsetWidth - leftPadding - rightPadding;
	var currentHeight = frame.offsetHeight - topPadding - bottomPadding;
	var aniWidth = new Tween(frame,"scaleX",Strong.easeOut,currentWidth,imageWidth, 0.5);
	var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,currentHeight,imageHeight,0.5);
	aniWidth.onMotionFinished = function(){
		ImageLightbox.show(image,element);
	}
}





// LIGHTBOX
function Lightbox(element){
	Event.addEvent(element,"click",Lightbox.open);
}
Lightbox.open = function(evt){
	var element = Event.getTarget(evt);
	Event.preventDefault(evt);
	Lightbox.setOverlay();
	var parameters = Document.getArguments(element,"JS:LightBox");
	var filePath = parameters[0];
	var width = parameters[1];
	var height = parameters[2];
	// create file frame
	var frame = Lightbox.createFrame();
	//create preloader image
	Lightbox.showPreloader();
	var requestFile = new Ajax(filePath,"GET",false,
		function getHTML(HTML){
			Lightbox.removePreloader();
			var aniWidth = new Tween(frame,"scaleX",Strong.easeOut,100,width,0.5);
			var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,100,height,0.5);
			aniWidth.onMotionFinished = function(){
				Lightbox.show(HTML);
			}
		}
	);
}
Lightbox.show = function(HTML){
	var frame = document.getElementById("lightbox_frame");
	var paddingLeft = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var paddingRight = Number(Document.getStyle(frame,"padding-right").replace("px",""));
	var paddingTop = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	var paddingBottom = Number(Document.getStyle(frame,"padding-bottom").replace("px",""));
	var xPos = Document.getX(frame) + paddingTop;
	var yPos = Document.getY(frame) + paddingLeft;
	// create lightbox
	var lightbox = document.createElement("div");
	lightbox.setAttribute("id","lightbox_content");
	lightbox.style.left = xPos + "px";
	lightbox.style.top = yPos + "px";
	lightbox.style.opacity = 0;
	lightbox.style.filter = "alpha(opacity=0)"; 
	lightbox.style.width = (frame.offsetWidth - (paddingLeft + paddingRight)) + "px";
	lightbox.style.height = (frame.offsetHeight - (paddingTop + paddingBottom)) + "px";
	document.getElementsByTagName("body")[0].appendChild(lightbox);
	var fadeIn = new Tween(lightbox,"alpha",Regular.easeOut,0,100,0.2);
	fadeIn.onMotionFinished = function(){
		Lightbox.createCloseButton(paddingLeft,paddingRight,paddingTop,paddingBottom);
		lightbox.innerHTML = HTML;
		if(HTML.indexOf("JS:Ajax") > -1){
			prepareAjax();
		}
	}
}
Lightbox.createCloseButton = function(lPadding,rPadding,tPadding,bPadding){
	var frame = document.getElementById("lightbox_frame");
	var closeButton = document.createElement("a");
	closeButton.setAttribute("id","lightbox_close");
	closeButton.setAttribute("href","#");
	closeButton.style.visibility = "hidden";
	frame.appendChild(closeButton);
	Event.addEvent(closeButton,"click",Lightbox.close);
	var xpos = frame.offsetWidth - closeButton.offsetWidth - (lPadding - rPadding);
	var ypos = frame.offsetHeight + (bPadding / 2);
	closeButton.style.left = xpos + "px";
	closeButton.style.top = ypos + "px";
	var extendFrame = new Tween(frame,"height",Regular.easeOut,frame.offsetHeight,frame.offsetHeight + closeButton.offsetHeight,0.2);
	extendFrame.onMotionFinished = function(){
		closeButton.style.visibility = "visible";
	}
}
Lightbox.close = function(evt){
	// remove print css
	var frame = document.getElementById("lightbox_frame");
	var linkTag = frame.linkTag;
	if(linkTag){
		linkTag.parentNode.removeChild(linkTag);
	}
	// remove elements
	var element = Event.getTarget(evt);
	Event.preventDefault(evt);
	var bodyElement = document.getElementsByTagName("body")[0];
	try{
		bodyElement.removeChild(document.getElementById("lightbox_content"));
	}catch(e){}
	try{
		bodyElement.removeChild(document.getElementById("lightbox_frame"));
	}catch(e){}
	try{
		bodyElement.removeChild(document.getElementById("lightbox_image"));
	}catch(e){}
	try{
		bodyElement.removeChild(document.getElementById("lightbox_details"));
	}catch(e){}
	try{
		bodyElement.removeChild(document.getElementById("lightbox_previous"));
	}catch(e){}
	try{
		bodyElement.removeChild(document.getElementById("lightbox_next"));
	}catch(e){}
	Lightbox.removeOverlay();
}
Lightbox.setOverlay = function(){
	var bodyHeight = Document.getBodyHeight();
	var overlay = document.createElement("div");
	overlay.setAttribute("id","lightbox_overlay");
	overlay.style.height = bodyHeight + "px";
	document.getElementsByTagName("body")[0].appendChild(overlay);
	Event.addEvent(overlay,"click",Lightbox.close);
	Lightbox.operaFix();
	Document.hideAllSelects();
}
Lightbox.removeOverlay = function(){
	var overlay = document.getElementById("lightbox_overlay");
	var fadeout = new Tween(overlay,"alpha",Regular.easeOut,JSOverlayOpacity,0,0.2);
	fadeout.onMotionFinished = function(){
		Document.showAllSelects();
		overlay.parentNode.removeChild(overlay);
		Lightbox.removeOperaFix();
	}
}
Lightbox.createFrame = function(){
	var xPos = (Document.getWindowWidth() / 2) - 50 - (JSBorderAllowance / 2);
	var yPos = Document.getScrollY() + (Document.getWindowHeight() / 2) - 50 - JSTextAllowance;
	var frame = document.createElement("div");
	frame.setAttribute("id","lightbox_frame");
	frame.style.width = "100px";
	frame.style.height = "100px";
	frame.style.left = xPos + "px";
	frame.style.top = yPos + "px";
	document.getElementsByTagName("body")[0].appendChild(frame);
	return frame;
}
Lightbox.showPreloader = function(){
	var frame = document.getElementById("lightbox_frame");
	var preloader = document.createElement("img");
	preloader.setAttribute("id", "lightbox_preloader");
	preloader.setAttribute("src", JSLightboxPreloader);
	preloader.setAttribute("alt", "content loading");
	frame.appendChild(preloader);
	
	var imageXPos = frame.offsetWidth / 2;
	var imageYPos = frame.offsetHeight / 2;
	var leftPadding = Number(Document.getStyle(frame,"padding-left").replace("px",""));
	var topPadding = Number(Document.getStyle(frame,"padding-top").replace("px",""));
	preloader.style.left = (imageXPos - leftPadding) + "px";
	preloader.style.top = (imageYPos - topPadding) + "px";
}
Lightbox.removePreloader = function(){
		var preloader = document.getElementById("lightbox_preloader");
	try{
		preloader.parentNode.removeChild(preloader);
	}catch(e){}
}
Lightbox.operaFix = function(){
	if(Browser.getBrowser() == "opera"){
		var flashElements = Document.getElementsByClassMatch("JS:Flash");
		var fontReplacements = Document.getElementsByClassMatch("JS:Font");
		for(var i = 0; i < flashElements.length; i ++){
			flashElements[i].style.visibility = "hidden";
		}
		for(var i = 0; i < fontReplacements.length; i ++){
			fontReplacements[i].style.visibility = "hidden";
		}
	}
}
Lightbox.removeOperaFix = function(){
	if(Browser.getBrowser() == "opera"){
		var flashElements = Document.getElementsByClassMatch("JS:Flash");
		var fontReplacements = Document.getElementsByClassMatch("JS:Font");
		for(var i = 0; i < flashElements.length; i ++){
			flashElements[i].style.visibility = "visible";
		}
		for(var i = 0; i < fontReplacements.length; i ++){
			fontReplacements[i].style.visibility = "visible";
		}
	}
}
