
//////////////////////////////////////////////////////////////////////
// UL_Modal v1.0 by PIE 29-8-2007
// -------------------------------------------------------------------
// Safari 3 PC	OK
// IE6			OK
// IE7			OK	
// FireFox 2	OK
// FireFox 1.5	OK
// Opera 8		X -> zIndex on iframes bug
// Opera 9		OK
//////////////////////////////////////////////////////////////////////

// Settings
var UL_modalBackgroundHTML 		= '/modal_background.html'; // used as modal bg
var UL_modalBackgroundOpacity 	= 65 // 0..100
var UL_hideObjectElements 		= true; // hide embed and object elements
var UL_ModalZIndex 				= 200;

// Objects and vars
var UL_modalIframe;
var UL_modalDiv;
var UL_modalInitalized;
var UL_modalIsOpen = false;
var UL_bodyObj;
var UL_hiddenObjects = new Array();

//////////////////////////////////////////////////////////////////////
function UL_openModal(id)
{
	if(UL_modalInitalized == true && UL_modalIsOpen == false) 
	{
		UL_modalDiv = document.getElementById(id);
		if(UL_modalDiv) { // object is present?
			
			if(UL_hideObjectElements == true) UL_hideObjects(); // hide all embed and object elements

			// set correct z-index
			UL_modalIframe.style.zIndex = UL_ModalZIndex;
			UL_modalDiv.style.zIndex = UL_ModalZIndex+1;

			UL_modalIsOpen = true;
			UL_updateModal();
		}
	}
}

//////////////////////////////////////////////////////////////////////
function UL_closeModal()
{
	if(UL_modalIsOpen == true && UL_modalInitalized == true) 
	{
		UL_modalIframe.style.display = 'none';
		UL_modalDiv.style.display = 'none';
		UL_showObjects(); // show objects
		UL_modalIsOpen = false;
	}
}

//////////////////////////////////////////////////////////////////////
function UL_initModal() 
{
	UL_bodyObj = document.getElementsByTagName('body').item(0);
	UL_modalIframe = document.createElement('iframe');

	if(UL_modalIframe && UL_bodyObj) 
	{
		UL_modalIframe.setAttribute('src', UL_modalBackgroundHTML)
		UL_modalIframe.setAttribute('frameborder', '0')
		UL_modalIframe.setAttribute('scrolling', 'no')

		with(UL_modalIframe.style) {		
			position   		= 'absolute';
			display 		= 'none';
			opacity 		= UL_modalBackgroundOpacity/100;
			left			= '0px';
			top				= '0px';
			border			= '0px';
			filter 			= 'alpha(opacity='+UL_modalBackgroundOpacity+')';
			backgroundColor = 'transparent';
		}
		UL_bodyObj.appendChild(UL_modalIframe);
		UL_modalInitalized = true;

	} else {
		UL_modalInitalized = false;
	}
}

//////////////////////////////////////////////////////////////////////
function UL_getViewSize()
{
	var viewSize = new Object();
	viewSize.width = 0;
	viewSize.height = 0;
	
	var cW = document.documentElement.clientWidth;
	var cH = document.documentElement.clientHeight;
	var iW = window.innerWidth;
	var iH = window.innerHeight;

	if(cW && iW) {
		viewSize.width = Math.min(cW, iW);
		viewSize.height = Math.min(cH, iH);
	} else if (iW) {
		viewSize.width = iW;
		viewSize.height = iH;
	} else if (cW) {
		viewSize.width = cW;
		viewSize.height = cH;	
 	} else if(document.body) {
		viewSize.width = document.body.clientWidth;
		viewSize.height = document.body.clientHeight;
	}

	return viewSize;
}

//////////////////////////////////////////////////////////////////////
function UL_getScrollOffset()
{
	var scrollOffset = new Object();
	scrollOffset.x = 0;
	scrollOffset.y = 0;
	if(self.pageYOffset) {
		scrollOffset.x = self.pageXOffset;
		scrollOffset.y = self.pageYOffset;
	} else if (document.documentElement.scrollTop) {
		scrollOffset.x = document.documentElement.scrollLeft;
		scrollOffset.y = document.documentElement.scrollTop;
	} else if (document.body) {
		scrollOffset.x = document.body.scrollLeft;
		scrollOffset.y = document.body.scrollTop;
	}
	
	return scrollOffset;
}

//////////////////////////////////////////////////////////////////////
function UL_updateModal()
{
	if(UL_modalInitalized == true && UL_modalIsOpen == true) 
	{
		var viewSize = UL_getViewSize();
		var scrollOffset = UL_getScrollOffset();

		UL_modalIframe.style.width = (scrollOffset.x+viewSize.width)+'px';
		UL_modalIframe.style.height = (scrollOffset.y+viewSize.height)+'px';

		var xPos = scrollOffset.x+(viewSize.width/2)-(parseFloat(UL_modalDiv.style.width)/2);
		var yPos = scrollOffset.y+(viewSize.height/2)-(parseFloat(UL_modalDiv.style.height)/2);		
		UL_modalDiv.style.left = xPos+'px';
		UL_modalDiv.style.top = yPos+'px';

		UL_modalIframe.style.display = 'block'; 
		UL_modalDiv.style.display = 'block'; 		
	}
}

//////////////////////////////////////////////////////////////////////
function UL_hideObjects() 
{
	var UL_hideObjects = new Array();
	UL_hideObjects.push(document.getElementsByTagName('embed'));
	UL_hideObjects.push(document.getElementsByTagName('object'));
	
	// loop though objects and hide if possible
	for (var i = 0; i < UL_hideObjects.length; i++) {
		for (var j = 0; j < UL_hideObjects[i].length; j++) {
			var el = UL_hideObjects[i][j];
			if(el.style) { // item has style attribute?
				if(el.style.visibility != 'hidden') {  // item is visible?
					el.style.visibility = 'hidden';
					UL_hiddenObjects.push(el);
				}
			}
		}
	}
}

//////////////////////////////////////////////////////////////////////
function UL_showObjects() 
{
	if(UL_hideObjectElements == true) {
		for(var i in UL_hiddenObjects) {
			if(UL_hiddenObjects[i].style) { // item has style attribute?
				UL_hiddenObjects[i].style.visibility = 'visible';
			}
		}
	}
	UL_hiddenObjects = new Array();
}

//////////////////////////////////////////////////////////////////////
function UL_addEvent(obj, s_event, f_func) 
{
	if (obj.addEventListener){
		obj.addEventListener(s_event, f_func, false);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+s_event, f_func);
		return r;
	} else {
		return false;
	}
}


//////////////////////////////////////////////////////////////////////
if (window.addEventListener) {
	window.addEventListener("load", UL_initModal, false);
	window.addEventListener("resize", UL_updateModal, false);
	window.addEventListener("scroll", UL_updateModal, false);		
} else if (window.attachEvent) {
	window.attachEvent("onload", UL_initModal);
	window.attachEvent("onresize", UL_updateModal);
	window.attachEvent("onscroll", UL_updateModal);	
} else if (document.getElementById) {
	window.onload = UL_initModal;
	window.onresize = UL_updateModal;
	window.onscroll = UL_updateModal;
}