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

var JSLightboxPreloader = "js_images/ani_circle_black.gif";
var JSOverlayOpacity = 80;
var JSTextAllowance = 40;

function prepareLightboxes(){
	var pageLightboxes = Document.getElementsByClassMatch("JS:LightBox");
	pageLightboxes.each(Lightbox);
	var imageLightboxes = Document.getElementsByClassMatch("JS:ImageLightBox");
	imageLightboxes.each(ImageLightbox);
}

// 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;
}
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;
	var aniWidth = new Tween(frame,"scaleX",Strong.easeOut,currentWidth,imageWidth,1);
	var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,currentHeight,imageHeight,1);
	aniWidth.onMotionFinished = function(){
		ImageLightbox.show(image,element);
	}
}
ImageLightbox.show = function(image, element){
	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.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.4);
	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.3);
	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 = 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 = (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.4);
	shortenHeight.onMotionFinished = function(){
		var fadeOut = new Tween(currentImage,"alpha",Regular.easeOut,100,0,0.2);	
		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,1);
	var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,currentHeight,imageHeight,1);
	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,1);
			var aniHeight = new Tween(frame,"scaleY",Strong.easeOut,100,height,1);
			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.3);
	extendFrame.onMotionFinished = function(){
		closeButton.style.visibility = "visible";
	}
}
Lightbox.close = function(evt){
	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;
	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";
		}
	}
}