var d = document;
var loadingImage = '/images/loading.gif';
var closeButton = '/images/close.gif';
var wTo = null;
var galCount=0;

function getYScroll(){
	if (self.pageYOffset) {
		return self.pageYOffset;
	} else if (d.documentElement && d.documentElement.scrollTop){	
		return d.documentElement.scrollTop;
	} else if (d.body) {// all other Explorers
		return d.body.scrollTop;
	}
}

function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = d.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (d.body.scrollHeight > d.body.offsetHeight){ // all but Explorer Mac
		xScroll = d.body.scrollWidth;
		yScroll = d.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = d.body.offsetWidth;
		yScroll = d.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (d.documentElement && d.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = d.documentElement.clientWidth;
		windowHeight = d.documentElement.clientHeight;
	} else if (d.body) { // other Explorers
		windowWidth = d.body.clientWidth;
		windowHeight = d.body.clientHeight;
	}	

	pageHeight =yScroll < windowHeight?windowHeight:yScroll;
	pageWidth = xScroll < windowWidth?windowWidth:xScroll;
	
	return {'pgW':pageWidth,'pgH':pageHeight,'wdW':windowWidth,'wdH':windowHeight};
}

function showPhotobox(imageName, showImage) {
    if(!d.getElementById('photobox')){
    		alert('Page Still Loading... \nPlease Wait.');
    		return;
    }
    if (galCount == null) galCount = 1;
    if (showImage != null) {
        imageName = imageName.replace(/[0-9]\./gi, showImage.toString() + ".");
    }
    else {
        showImage = 0;
    }
    
	// prep objects
	var objOverlay = d.getElementById('overlay');
	var objPhotobox = d.getElementById('photobox');
	var objImage = d.getElementById('photoboxImage');
	var objLoadingImage = d.getElementById('loadingImage');
	var objPhotoboxDetails = d.getElementById('photoboxDetails');
	
	var pageSize = getPageSize();
	var yScroll = getYScroll();

	// center loadingImage if it exists
	if (objLoadingImage) {
		objLoadingImage.style.top = (pageSize.pgH + ((pageSize.wdH - 35 - objLoadingImage.height) / 2) + 'px');
		objLoadingImage.style.left = (((pageSize.pgW - 20 - objLoadingImage.width) / 2) + 'px');
		objLoadingImage.style.display = 'block';
	}

	// set height of Overlay to take up whole page and show
	objOverlay.style.height = (pageSize.pgH + 'px');
	objOverlay.style.display = 'block';

	// preload image
	imgPreload = new Image();

	imgPreload.onload=function(){
		objImage.src = imageName;

		// center photobox and make sure that the top and left values are not negative
		// and the image placed outside the viewport
		var photoboxTop = yScroll + ((pageSize.wdH - 35 - imgPreload.height) / 2);
		var photoboxLeft = ((pageSize.pgW - 20 - imgPreload.width) / 2);
	
		objPhotobox.style.top = (photoboxTop < 0) ? "0px" : photoboxTop + "px";
		objPhotobox.style.left = (photoboxLeft < 0) ? "0px" : photoboxLeft + "px";
		objPhotoboxDetails.style.width = imgPreload.width + 'px';
		

		
		// A small pause between the image loading and displaying is required with IE,
		// this prevents the previous image displaying for a short burst causing flicker.
		if (navigator.appVersion.indexOf("MSIE")!=-1){
			pause(250);
		} 

		if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }
	
		objPhotobox.style.display = 'block';
		pageSize = getPageSize();
		objOverlay.style.height = (pageSize.pgH + 'px');
		
		return false;
	}
	imgPreload.src = imageName;

	if (galCount > 1) {
	    showImage++;
	    if (showImage > galCount) {
	        showImage = 0;
	    }
	    wTo=window.setTimeout("showPhotobox('" + imageName + "'," + showImage.toString() + ");", 3000);
	}
}

function hidePhotobox() {
    if(wTo){
        window.clearTimeout(wTo);
    }
	d.getElementById('overlay').style.display = 'none';
	d.getElementById('photobox').style.display = 'none';
}

function initPhotoBox()
{
	var objBody = d.getElementsByTagName("body").item(0);
	// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
	var objOverlay = d.createElement("div");
	objOverlay.id='overlay';
	objOverlay.onclick = hidePhotobox;
	objOverlay.style.cssText="display:none;filter:alpha(opacity=90);opacity:0.9;background-color:#444444;position:absolute;top:0px;left:0px;z-Index:90;width:100%";
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	// preload and create loader image
	var imgPreloader = new Image();
	
	imgPreloader.onload=function(){
		var objLoadImageLink = d.createElement("a");
		objLoadImageLink.setAttribute('href','#');
		objLoadImageLink.onclick = hidePhotobox;
		objOverlay.appendChild(objLoadImageLink);
		
		var objLoadingImage = d.createElement("img");
		objLoadingImage.src = loadingImage;
		objLoadingImage.id='loadingImage';
		objLoadingImage.style.cssText = 'position:absolute;z-Index:150';
		objLoadImageLink.appendChild(objLoadingImage);

		imgPreloader.onload=function(){};	//	clear onLoad, as IE will flip out w/animated gifs

		return false;
	}

	imgPreloader.src = loadingImage;

	// create photobox div, same note about styles as above
	var objPhotobox = d.createElement("div");
	objPhotobox.id='photobox';
	objPhotobox.style.cssText = 'background-color:#FFFFFF;display:none;position:absolute;z-Index:100';
	objBody.insertBefore(objPhotobox, objOverlay.nextSibling);
	
	// create link
	var objLink = d.createElement("a");
	objLink.href='#';
	objLink.title='Click to close';
	objLink.onclick = hidePhotobox;
	objPhotobox.appendChild(objLink);

	// preload and create close button image
	var imgPreloadCloseButton = new Image();

	// if close button image found, 
	imgPreloadCloseButton.onload=function(){

		var objCloseButton = d.createElement("img");
		objCloseButton.src = closeButton;
		objCloseButton.id='closeButton';
		objCloseButton.style.cssText = 'width:100px;position:absolute;z-Index:200';
		objLink.appendChild(objCloseButton);

		return false;
	}

	imgPreloadCloseButton.src = closeButton;

	// create image
	var objImage = d.createElement("img");
	objImage.id='photoboxImage';
	objLink.appendChild(objImage);
	
	// create details div, a container for the caption and keyboard message
	var objPhotoboxDetails = d.createElement("div");
	objPhotoboxDetails.id='photoboxDetails';
	objPhotobox.appendChild(objPhotoboxDetails);
}

function addOnLoad(func) {
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        var oldonload = window.onload;
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

addOnLoad(initPhotoBox);
