Event.observe(window,'load', addLightboxContainer);

/**
* Adds the lightbox elements to the page if they're not already there
*/
function addLightboxContainer ()
{
	if (document.getElementById('hidden_iframe') == null) {
		
		var lb_iframe = document.createElement('iframe');
		lb_iframe.id = 'hidden_iframe';
		lb_iframe.setAttribute('src', '/site/custom_scripts/lightboxes/blank.html');
		lb_iframe.style.display = 'none';
		lb_iframe.title = 'Hidden iframe for lightbox';
		document.body.appendChild(lb_iframe);

		var lb_bgdiv = document.createElement('div');
		lb_bgdiv.id = 'lightbox_background';
		lb_bgdiv.style.display = 'none';
		document.body.appendChild(lb_bgdiv);
	}

	var lb_loading = document.createElement('div');
	lb_loading.id = 'lb_loading';
	lb_loading.style.display = 'none';
	document.body.appendChild(lb_loading);

	if (document.getElementById('lb') == null) {
		var lb = document.createElement('div');
		lb.id = 'lb';
		lb.style.display = 'none';
		document.body.appendChild(lb);
	}

	if (document.getElementById('lb2') == null) {
		var lb2 = document.createElement('div');
		lb2.id = 'lb2';
		lb2.style.display = 'none';
		document.body.appendChild(lb2);
	}

	if (document.getElementById('lb3') == null) {
		var lb3 = document.createElement('div');
		lb3.id = 'lb3';
		lb3.style.display = 'none';
		document.body.appendChild(lb3);
	}
}

function positionLightbox (elem, params)
{
	var _pageSize = getPageSize();
	var yScroll = 0;
	var _arrayPageScroll = getPageScrollTop();
	var lbWidth = 640;
	var lbTop = 100;
	var lb = document.getElementById(elem);

	if (window.innerHeight && window.scrollMaxY) {
		yScroll = window.innerHeight + window.scrollMaxY;
	}
	else if (document.body.scrollHeight > document.body.offsetHeight) {
		yScroll = document.body.scrollHeight;
	}
	else if (_pageSize[1] > document.body.offsetHeight) {
		yScroll = _pageSize[1];
	}
	else {
		yScroll = document.body.offsetHeight;
	}
	
	lb.style.left = ((_pageSize[0] - lbWidth)/2) + 'px';
	lb.style.top = lbTop + _arrayPageScroll[1] + 'px';
	
	document.getElementById('lightbox_background').style.height = yScroll + 'px';
	document.getElementById('hidden_iframe').style.height = yScroll + 'px';
}

function generateLightbox (filename, elem, params)
{
	var url = '/site/custom_scripts/lightboxes/' + filename + '.php';
	var url2 = '/site/custom_scripts/lightboxes/' + filename + '.js';
	var nonce = Math.floor(Math.random() * 100);
	
	if (params != '') {
		params = "&" + params;
	}
	if ($(elem)) {
		$(elem).style.display = 'none';
		$(elem).innerHTML = '';

		new Ajax.Updater(elem, url, {
			method: 'post',
			parameters: params,
			evalScripts: true,
			asynchronous: true,
			onComplete: function(e)
			{
				var head = document.getElementsByTagName('head')[0];
				// look for marked script tags containing plugins and remove
				var old_js = head.getElementsByTagName('script');
				for (var i = 0; i < old_js.length; i++) {
					if(old_js[i].getAttribute('rel') == 'lb') {
						old_js[i].parentNode.removeChild(old_js[i]);
					}
				}
				
				// add new script tag to head
				var js = document.createElement('script');
				var nonce = Math.floor(Math.random() * 100);
				js.src = url2 + '?nonce=' + nonce;
				js.setAttribute('rel', 'lb');
				js.type = 'text/javascript';
				head.appendChild(js);
	
				
				$('lb_loading').style.display = 'none';
				$(elem).style.display = 'block';
				
				positionLightbox (elem, params);
			}
		} );
	}
}


function toggleLightbox (elem)
{
	if (document.getElementById('hidden_iframe') || document.getElementById('lightbox_background')) {
		var lb = document.getElementById(elem);

		if (lb && lb.style.display != 'block') {
			if (elem == 'lb2') {
				document.getElementById('hidden_iframe').style.zIndex = 4020;
				document.getElementById('lightbox_background').style.zIndex = 4025;
			}
			else if (elem == 'lb3') {
				document.getElementById('hidden_iframe').style.zIndex = 8040;
				document.getElementById('lightbox_background').style.zIndex = 8050;			
			}
			else {
				document.getElementById('hidden_iframe').style.display = 'block';
				document.getElementById('lightbox_background').style.display = 'block';
				document.getElementById('hidden_iframe').style.zIndex = 1000;
				document.getElementById('lightbox_background').style.zIndex = 1010;
			}
			$('lb_loading').style.display = 'block';
			// lb.style.display = 'block';
		}
		else {
			if (elem != 'lb2' && elem != 'lb3') {
				document.getElementById('hidden_iframe').style.display = 'none';
				document.getElementById('lightbox_background').style.display = 'none';
			}
			else if (elem == 'lb3') {
				document.getElementById('hidden_iframe').style.zIndex = 4020;
				document.getElementById('lightbox_background').style.zIndex = 4025;		
			}
			else {
				document.getElementById('hidden_iframe').style.zIndex = 1000;
				document.getElementById('lightbox_background').style.zIndex = 1010;
			}
			
			if (document.getElementsByTagName('iframe') != null) {
				document.getElementsByTagName('iframe')[0].style.display = 'none';
			}
			document.getElementById('lightbox').style.display = 'none';
			lb.style.display = 'none';
		}
	}
}

function destroyLightboxContents (elem)
{
	if (document.getElementById('hidden_iframe') || document.getElementById('lightbox_background')) {
		var lb = document.getElementById(elem);
		lb.innerHTML = '';
	}
}

function loadLightbox (filename, elem, params)
{
	toggleLightbox(elem);
	generateLightbox(filename, elem, params);
	return false;
}

/* Additional functions for positioning */ 

function getPageScrollTop ()
{
	var yScrollTop;
	if (self.pageYOffset) {
		yScrollTop = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop) {
		yScrollTop = document.documentElement.scrollTop;
	}
	else if (document.body) {
		yScrollTop = document.body.scrollTop;
	}
	var _arrayPageScroll = new Array('', yScrollTop);
	return _arrayPageScroll;
}

function getPageSize ()
{
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;

	var _arrayPageSize = new Array(w, h);

	return _arrayPageSize;
};


