/*
------------------------------------------

JavaScript Document - Lightbox JS

Design by RedStar Designs
http://www.redstardesigns.com.au/

------------------------------------------
*/

// Set Variables
var resizeSpeed = 15;
var boxDetailsHeight;
var currentOverlayOpacity = 0;
var overlayOpacity;
var lightboxPadding = 10;
var animate = true;
var windowWidth, windowHeight, scrollHeight;

// Animate Box Details
function animateBoxDetails()
{
	// Get Object
	objLightboxDetails = document.getElementById('lightboxDetails');
	// Lower Position
	objLightboxDetails.style.top = boxDetailsHeight+"px";
	boxDetailsHeight += 1;

	// Stop Once Limit Is Reached
	if (boxDetailsHeight == 0)
	{
		return false;
	}

	// Set Timeout
	setTimeout("animateBoxDetails()",resizeSpeed);
}

// Animate Overlay
function animateOverlay()
{
	// Get Object
	objOverlay = document.getElementById('overlay');
	
	// Set New Opacity
	objOverlay.style.opacity = (currentOverlayOpacity/100);
	objOverlay.style.filter = 'alpha(opacity=' + currentOverlayOpacity + ')';
	objOverlay.style.MozOpacity = (currentOverlayOpacity/100);

	// Stop Once Target Is Reached
	if (currentOverlayOpacity == overlayOpacity)
	{
		// If Decreasing, wait till end to Hide
		if (overlayOpacity == 0)
		{
			// Hide Overlay
			objOverlay.style.display = 'none';
		}

		return false;	
	}

	// Increase/Decrease Opacity
	if (currentOverlayOpacity < overlayOpacity)
	{
		currentOverlayOpacity += 10;
	}
	else if (currentOverlayOpacity > overlayOpacity)
	{
		currentOverlayOpacity -= 10;
	}

	// Set Timeout
	setTimeout("animateOverlay()",10);
}

// Hide Lightbox
function hideLightbox()
{
	// Get Objects
	objOverlay = document.getElementById('overlay');
	objLightbox = document.getElementById('lightbox');

	// Set Scroll
	window.scroll(0,scrollHeight);

	// Animate Overlay
	if (animate == true)
	{
		// Set New Target Opacity
		overlayOpacity = 0;
		animateOverlay();
	}
	else
	{
		// Hide Overlay
		objOverlay.style.display = 'none';
	}

	// Hide Lightbox
	objLightbox.style.display = 'none';

	// Deactivate Key Down Listener
	document.onkeydown = '';
}

// Show Lightbox
function showLightbox(objLink)
{
	// Prep objects
	var objOverlay = document.getElementById('overlay');
	var objLightbox = document.getElementById('lightbox');
	var objImage = document.getElementById('lightboxImage');
	var objLightboxDetails = document.getElementById('lightboxDetails');
	var objCaption = document.getElementById('lightboxCaption');
	var objLoadingImage = document.getElementById('loadingImage');

	// Get window size
	getWindowSize();

	// Scroll to Top
	window.scroll(0,0);

	// Set Size of Overlay
	if ((navigator.userAgent).indexOf('MSIE 6'))
	{
		objOverlay.style.height = windowHeight;
	}

	// Animate overlay
	if (animate == true)
	{
		// Set target Opacity
		overlayOpacity = 80;
		objOverlay.style.display = 'block';
		animateOverlay();
	}
	else
	{
		// Show overlay
		objOverlay.style.display = 'block';
	}

	// Preload image
	imgPreload = new Image();

	imgPreload.onload = function(){
		objImage.src = objLink.href;

		// Set size
		objLightbox.style.width = imgPreload.width + 'px';
		objLightboxDetails.width = imgPreload.width - lightboxPadding*2 + 'px';
			
		// Set left position
		objLightbox.style.left = ((windowWidth / 2) - (imgPreload.width / 2) - lightboxPadding + 'px');
		
		// Set Alt Tag
		objImage.alt = objLink.title;
	
		// Show Lightbox & Image
		objLightbox.style.display = 'block';
		objImage.style.display = 'block';

		// Set Caption if exists
		if (objLink.getAttribute('title'))
		{
			// Width too small?
			if (imgPreload.width > 150)
			{
				objCaption.style.visibility = 'visible';
				objCaption.innerHTML = objLink.getAttribute('title');
			}
			else
			{
				// Otherwise hide Caption
				objCaption.style.visibility = 'hidden';	
			}
		}
		else
		{
			// Otherwise hide Caption
			objCaption.style.visibility = 'hidden';	
		}

		// Animate lightboxDetails
		if (animate == true)
		{
			// Set Lightbox Details start height
			boxDetailsHeight = -31;
			animateBoxDetails();
		}
		else
		{
			// Show Lightbox Details at correct height
			objLightboxDetails.style.top = "0px";
		}
		
		// Activate Key Listener
		document.onkeydown = getKey;
	}

	// Image Source
	imgPreload.src = objLink.href;
}

// Get Window Size
function getWindowSize()
{
	// All except Internet Explorer
	if (self.innerHeight)
	{
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
		scrollHeight = window.pageYOffset;
	}
	// Internet Explorer 6 Strict Mode
	else if (document.documentElement && document.documentElement.clientHeight)
	{
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
		scrollHeight = document.documentElement.scrollTop;
	}
	// All other Internet Explorers
	else if (document.body)
	{
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
		scrollHeight = document.body.scrollHeight;
	}
}

// Get Key
function getKey(evt)
{
	// Get Key
	if (window.event)
	{
		var charCode = window.event.keyCode;
	}
	else if (evt)
	{
		var charCode = evt.which;
	}

	// If Escape Close Popup
	if (charCode == 27)
	{
		hideLightbox();
	}
}

// Initiate Lightbox
function initLightbox()
{
	// Can we get tags?
	if (!document.getElementsByTagName)
	{
		return;
	}
	
	// Get anchor tags
	var anchors = document.getElementsByTagName("a");

	// Loop through tags
	for (var i=0; i<anchors.length; i++)
	{
		var anchor = anchors[i];

		// Do they have the rel?
		if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox"))
		{
			anchor.onclick = function ()
			{
				showLightbox(this);
				return false;
			}
		}
	}
	
	// Get body
	var objBody = document.getElementsByTagName("body").item(0);
	
	// Create Overlay div
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.onclick = function () {hideLightbox(); return false;}
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	// Create Lightbox div
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objBody.insertBefore(objLightbox, objOverlay.nextSibling);
	
	// Create Image
	var objImage = document.createElement("img");
	objImage.setAttribute('id','lightboxImage');
	objLightbox.appendChild(objImage);
	
	// Create Lightbox Details div
	var objLightboxDetails = document.createElement("div");
	objLightboxDetails.setAttribute('id','lightboxDetails');
	objLightbox.appendChild(objLightboxDetails);
	
	// Create Close link
	var objLink = document.createElement("a");
	objLink.setAttribute('href','#');
	objLink.setAttribute('title','Click to close');
	objLink.onclick = function () {hideLightbox(); return false;}
	objLightboxDetails.appendChild(objLink);
	
	// Preload and create Close button image
	var imgPreloadCloseButton = new Image();

	// If Close Button Image Found, 
	imgPreloadCloseButton.onload = function(){

		var objCloseButton = document.createElement("img");
		objCloseButton.src = "../images/misc/close.gif";
		objCloseButton.setAttribute('id','closeButton');
		objLink.appendChild(objCloseButton);

		return false;
	}

	imgPreloadCloseButton.src = "../images/misc/close.gif";

	// Create Caption div
	var objCaption = document.createElement("div");
	objCaption.setAttribute('id','lightboxCaption');
	objLightboxDetails.appendChild(objCaption);
}

// Add Load Event
function addLoadEvent(func)
{	
	var oldonload = window.onload;

	if (typeof window.onload != 'function')
	{
    	window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

// Initialize Lightbox onLoad
addLoadEvent(initLightbox);