// Modal Dialog Popup Infrastructure

// General functions
function delegate(_func, _scope, event)
{
	return function(event)
	{
		_func.call(_scope,event);
	}
}

function $(id)
{
	return document.getElementById(id);
}

function getRunTimeValue(element, attributeName) 
{ 
   var doc = element.ownerDocument;
   if(doc.defaultView && doc.defaultView.getComputedStyle && doc.defaultView.getComputedStyle(element,null)) 
   {
		return doc.defaultView.getComputedStyle(element,null)[attributeName]; 
   }
   else if(typeof(doc.all)!="undefined" && element.currentStyle) 
   { 
		return element.currentStyle[attributeName]; 
   } 
   else if (element.style)
		return element.style[attributeName];
   else
		return 0; 
}
function observe(obj, eventName, callbackFunction, useCapture)
{
	if (obj.attachEvent)
	{
		obj.attachEvent("on" + eventName, callbackFunction);
	}
	else
	{
		obj.addEventListener(eventName, callbackFunction, useCapture);
	}
}
// -- End general functions

// -- End of modal dialog render styles (only image is currently supported

// Modal dialog class
var ModalDialog = function()
{
	var M = {
		overlayDivId: "overlay",
		closeDivClassName: "close",
		
		getOverlayDiv: function()
		{
			return $(this.overlayDivId);
		},
			
		getContentDiv: function()
		{
			return $(this.contentId);
		},
		
		getCloseBtn: function()
		{
			return $(this.contentId + "_closeBtn");
		},
		
		ensureOverlay: function()
		{
			var overlayObj = this.getOverlayDiv();
			
			if (!overlayObj)
			{
				overlayObj = document.createElement("div");
				overlayObj.id = this.overlayDivId;
				document.body.appendChild(overlayObj);
			}
			
			// close
			var closeHref = this.getCloseBtn();
			if (!closeHref)
			{
				var divObj = this.getContentDiv();
				if (divObj)
				{
					closeHref = document.createElement("a");
					closeHref.id = this.contentId + "_closeBtn";
					closeHref.className = "close";
					closeHref.href = "javascript:void(0)";
					closeHref.onclick = delegate(this.close, this);
					closeHref.title = "Close";
					divObj.appendChild(closeHref);
				}
			}

			overlayObj.style.display = "block";
		},		
		
		centerPopup: function()
		{
			var divObj = this.getContentDiv();
			if (divObj)
			{
				var height = document.documentElement.clientHeight || document.documentElement.scrollHeight;
				var width = document.documentElement.clientWidth || document.documentElement.scrollWidth;
				
				var scrollTop = window.pageYOffset || document.body.scrollTop;
				divObj.style.top = (height - divObj.offsetHeight)/2 + scrollTop + "px";
				divObj.style.left = (width - divObj.offsetWidth)/2 + "px";
			}
			
			var overlayDiv = this.getOverlayDiv();
			if (overlayDiv)
			{
				var bodyHeight = Math.max(document.documentElement.clientHeight, document.body.scrollHeight);
				overlayDiv.style.height = bodyHeight + "px";
				overlayDiv.onclick = delegate(this.close, this);
			}
		},
			
		removeElement: function(elementId)
		{
			var element = $(elementId);
			if (element)
			{
				element.onclick = null;
				element.parentNode.removeChild(element);
			}
		},

		attachResizeEvents: function()
		{
			window.onresize = delegate(this.centerPopup, this);
			window.onscroll = delegate(this.centerPopup, this);
		},
		
		detachResizeEvents: function()
		{
			window.onresize = null;
			window.onscroll = null;
		},
		
		close: function(evt)
		{
			evt = evt || window.event;
			this.showPopup();
			this.removeElement(this.overlayDivId);
			this.removeElement(this.contentId + "_closeBtn");
			this.detachResizeEvents();
			evt.returnValue = false;
			evt.cancelBubble = true;
			return false;
		},
		
		showPopup: function(bShow)
		{
			var disp = bShow ? "block" : "none";
			var divObj = this.getContentDiv();
			if (divObj)
			{
				divObj.style.display = disp;
			}
		},
		
		open: function(contentId)
		{
			this.contentId = contentId;
			this.ensureOverlay();
			var divObj = this.getContentDiv();
			if (divObj)
			{
				divObj.parentNode.removeChild(divObj);
				document.forms[0].appendChild(divObj);
			}
			this.showPopup(true);
			this.centerPopup();

			this.attachResizeEvents();		
		}
	}
	return M;
}
// -- End modal dialog class


// Class implementation for viewing images
function showLogin(id)
{
	var md = new ModalDialog();
	md.open(id);
	var form = $(id);
	if (form)
	{
		form.getElementsByTagName("input")[0].focus();
	}
}

function checkShowLogin()
{
	var errorMsg = $("dnn_ctr501_ctl00_lblMessage");
	if (errorMsg)
		showLogin("dnn_ctr501_ContentPane");
}

observe(window, "load", checkShowLogin);