/*$Id$*/


var oDialog, doc, srcEl, closeOnEscKey = true, closeOnBodyClick = false, needIframe = true, iframeIEHack;
var dialogProperties = new Array("position", "top", "left", "height", "width", "srcElement", "modal", "draggable",
								 "title", "closeButton", "closeOnEscKey", "transitionType", "transitionInterval","closeOnBodyClick", "needIframe");
var oCloseClBk = null;


function showDialog(content, features, callBackFunc, closeClBk) {
	oCloseClBk = closeClBk;
	if (typeof(features) == "undefined") var features = "position=absmiddle";
	features = features.split(",");
	
	var featurePresent;
	for (var i = 0; i < dialogProperties.length; i++) {
		featurePresent = false;
		for (var j = 0; j < features.length; j++) {
			if (features[j].indexOf(dialogProperties[i]) >= 0) {
				featurePresent = true;
				break;
			}
 		}
		
		self["dialog_" + dialogProperties[i]] = (featurePresent) ? features[j].substr(features[j].indexOf("=") + 1, features[j].length).trim() : "undefined";
	}
	
	if(document.getElementById("_DIALOG_LAYER") != null && oDialog) {
		oDialog.parentNode.removeChild(oDialog);
	}
	
	oDialog = document.createElement("DIV");
	oDialog.id = "_DIALOG_LAYER";
	document.body.appendChild(oDialog);
	
	var content = '<div id="_DIALOG_CONTENT">' + content + '</div>';
	
	var box = '<table class="DialogBox" border="0" cellspacing="0" cellpadding="0"><tr><td class="boxTL">&nbsp;</td>';

	if (dialog_draggable != "undefined" && dialog_draggable == "no") box += '<td class="boxHeader">';
	else box += '<td class="boxHeader drag" onMouseDown="captureDialog(event)">';

	if (dialog_title != "undefined") {
		if (dialog_title.charAt(0) == "'" && dialog_title.charAt(dialog_title.length - 1) == "'") 
			dialog_title = dialog_title.substr(1, dialog_title.length - 2);
		if (dialog_title.trim().length == 0) 
			dialog_title = "&nbsp;";
	} else dialog_title = "&nbsp;";

	box += dialog_title + '</td><td class="boxCtrlButtonPane">';
	
	if (dialog_closeButton != "undefined" && dialog_closeButton == "no") box += '&nbsp;</td>';
	else box += '<input type="button" class="closeButton" onClick="closeDialog()"></td>';
	
	box += '<td class="boxTR">&nbsp;</td></tr><tr><td colspan="4" class="boxContent">' + content + '</td></tr>';
	box += '<tr><td class="boxBL"></td><td class="boxBC" colspan="2"></td><td class="boxBR"></td></tr></table>';
	
	//oDialog.style.visibility = "visible";
	oDialog.style.display = "block";
	
	var showInBox = true;
	if (dialog_closeButton != "undefined")
		if (dialog_title == "&nbsp;" && dialog_closeButton == "no") showInBox = false;

	if (showInBox) 
		oDialog.innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td height='100%' style='display:block'>" + box + "</td></tr></table>";	
	else
		oDialog.innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td height='100%' style='display:block'>" + content + "</td></tr></table>";	

	oDialog.style.position = "absolute";
	oDialog.style.left = "-1000px";
	oDialog.style.top = "-1000px";
	oDialog.style.zIndex = "100";
	
	var scriptTags = oDialog.getElementsByTagName("SCRIPT");
	for (var i = 0; i < scriptTags.length; i++) {
		var scriptTag = document.createElement("SCRIPT");
		scriptTag.type = "text/javascript";
		scriptTag.language = "javascript";
		if (scriptTags[i].src != "") { scriptTag.src = scriptTags[i].src;}
		scriptTag.text = scriptTags[i].text;
		
		if (typeof document.getElementsByTagName("HEAD")[0] == "undefined") {
			document.createElement("HEAD").appendChild(scriptTag)
		} else {
			document.getElementsByTagName("HEAD")[0].appendChild(scriptTag);
		}			
	}

	if (browser_opera) {
		var temp = content;
		var styleTags = oDialog.getElementsByTagName("STYLE");
		for (var i = 0; i < styleTags.length; i++) {
			styleTags[i].innerHTML = temp.substring(temp.indexOf("<style>") + 7, temp.indexOf("</style>") - 1);
			temp = temp.substring(temp.indexOf("</style>") + 8, temp.length);
		}
	}

	if (dialog_width != "undefined") {
		if (browser_ie)	oDialog.childNodes[0].style.width = parseInt(dialog_width) + "px";
		else if (browser_nn4 || browser_nn6) oDialog.childNodes.item(0).style.width = parseInt(dialog_width) + "px";
	}
	
	if (dialog_height != "undefined") {
		if (browser_ie) oDialog.childNodes[0].style.height = parseInt(dialog_height) + "px";
		else if (browser_nn4 || browser_nn6) oDialog.childNodes.item(0).style.height = parseInt(dialog_height) + "px";
	}

	oDialogContent = getObj("_DIALOG_CONTENT");
	
	var left = 0, top = 0;

	if (browser_opera) {
		if (dialog_width != "undefined") {
			oDialogContent.style.width = parseInt(dialog_width) + "px";
		} else {
			oDialogContent.style.width = oDialogContent.offsetWidth + "px";
			oDialog.style.width = oDialogContent.offsetWidth + "px";
		}
	}

	if (browser_nn4 || browser_nn6) {
		if (dialog_width != "undefined") oDialogContent.style.width = parseInt(dialog_width) + "px";
		else oDialogContent.style.width = (oDialogContent.offsetWidth + 20) + "px";
	}

	if (dialog_height != "undefined") {
		if (browser_ie && (parseInt(dialog_height) < oDialogContent.offsetHeight)) left = -15;
		oDialogContent.style.height = parseInt(dialog_height) + "px";
    }
	
    oDialogContent.style.overflow = "auto";

	var width = oDialog.offsetWidth;
	var height = oDialog.offsetHeight;
	doc = findDocDim();
	
	if (dialog_closeOnEscKey != "undefined" && dialog_closeOnEscKey == "no") closeOnEscKey = false;
	else closeOnEscKey = true;
	
	if (dialog_closeOnBodyClick != "undefined" && dialog_closeOnBodyClick == "yes") closeOnBodyClick = true;
	else closeOnBodyClick = false;
	if (dialog_needIframe != "undefined" && dialog_needIframe == "no") needIframe = false;
	else 
	needIframe = true;
	if (!browser_opera) {
		if (dialog_modal != "undefined" && dialog_modal == "yes") freezeBackground();
		else if (document.getElementById("FreezeLayer") != null) document.body.removeChild(document.getElementById("FreezeLayer"));
	}

	if (dialog_left != "undefined")	left += parseInt(dialog_left);
	if (dialog_top != "undefined") top += parseInt(dialog_top);
	
	var scrlBarWd = (document.body.scrollLeft > 0) ? 15 : 0;
	var scrlBarHt = (document.body.scrollTop > 0) ? 15 : 0;

	if (dialog_position != "undefined" && dialog_position == "relative") {
		if (dialog_srcElement != "undefined") srcEl = getObj(dialog_srcElement);
		else if (srcEl == null) srcEl = document.body;
		
	//	if (((width + scrlBarWd + ((srcEl.offsetWidth) ? srcEl.offsetWidth : 0)) - (doc.width - findPosX(srcEl))) + scrollConst > 0)
	//		left += findPosX(srcEl) + ((srcEl.offsetWidth) ? srcEl.offsetWidth : 0) - width;
	//	else
	//		left += findPosX(srcEl);

	//	if (((height + scrlBarHt + ((srcEl.offsetHeight) ? srcEl.offsetHeight : 0)) - (doc.height - findPosY(srcEl))) + scrollConst > 0)
	//		top += findPosY(srcEl) - height;
	//	else
	//		top += findPosY(srcEl) + ((srcEl.offsetHeight) ? srcEl.offsetHeight : 0) + 2;
	
		var srcElWidth = (srcEl.offsetWidth) ? srcEl.offsetWidth : 0;
		var srcElHeight = (srcEl.offsetHeight) ? srcEl.offsetHeight : 0;
				
		if (findPosX(srcEl) + width > doc.width - scrlBarWd) left += findPosX(srcEl) + srcElWidth - width;
		else left += findPosX(srcEl);					
		
		if (findPosY(srcEl) + srcElHeight + height > doc.height - scrlBarHt) top += findPosY(srcEl) - height;
		else top += findPosY(srcEl) + srcElHeight + 2;
	} else if (dialog_position != "undefined" && dialog_position == "current") {
		if (dialog_cursor_left != null && dialog_cursor_top != null) {
			left = dialog_cursor_left;
			top = dialog_cursor_top;
		} else left = top = 0;
		
		left = (dialog_cursor_left != null) ? dialog_cursor_left : 0;
		top = (dialog_cursor_top != null) ? dialog_cursor_top : 0;
		
		if (left + width > doc.width - scrlBarWd) left -= width;		
		if (top + height > doc.height - scrlBarHt) top -= height;
	} else if (dialog_position != "undefined" && dialog_position == "absolute") {
		left += document.body.scrollLeft;
		top += document.body.scrollTop;
	} else {
		left = (doc.width / 2 ) - (width / 2) + document.body.scrollLeft;
		top = (doc.height / 2) - (height / 2) + document.body.scrollTop;		
	}
	
	left = (left > 0) ? left : 0;
	top = (top > 0) ? top : 0;
	
	if (dialog_transitionType != "undefined") {
		if (dialog_transitionInterval == "undefined") dialog_transitionInterval = 10;	
		Effect.init( 
			{ 
				type : dialog_transitionType, speed : dialog_transitionInterval ,
				layerId : "_DIALOG_LAYER", layerTop : top, layerLeft : left
			 } 
		);
		Effect.display();		
	} else {
		oDialog.style.left = parseInt(left) + "px";
		oDialog.style.top = parseInt(top) + "px";
	}
	


	if (browser_ie && !browser_opera && needIframe == true) {
		iframeIEHack = document.createElement("IFRAME");
		iframeIEHack.scrolling = "no";
		iframeIEHack.frameBorder = 0;
                if(window["CONTEXT_PATH"] != null)
                {
                   iframeIEHack.src= CONTEXT_PATH + "/framework/html/blank.html";
                }
		iframeIEHack.style.position = "absolute";
		iframeIEHack.style.zIndex = "98";
		iframeIEHack.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
		
		if (dialog_modal != "undefined" && dialog_modal == "yes") {
			iframeIEHack.style.width = document.getElementById("FreezeLayer").style.width;
			iframeIEHack.style.top = "0px";
			iframeIEHack.style.left = "0px";
		} else { 
			iframeIEHack.style.width = oDialog.offsetWidth + "px";
			iframeIEHack.style.height = oDialog.offsetHeight + "px";
			iframeIEHack.style.top = parseInt(top) + "px";
			iframeIEHack.style.left = parseInt(left) + "px";
		}
		
		document.body.appendChild(iframeIEHack);
	}
	
/*
	scrollEnd = (height - (doc.height - (top - document.body.scrollTop))) + scrollConst;
	if (scrollEnd > 0) {
		cnt = 0;
		scrollInterval = setInterval("scrollPage()", 7);
	}
*/
	
	if (!browser_opera) {
		if (dialog_modal != "undefined" && dialog_modal == "yes") {
			var docDim = findDocDim();
			document.getElementById("FreezeLayer").style.width = docDim.width + "px";
			document.getElementById("FreezeLayer").style.height = docDim.height + "px";
			if (browser_ie && iframeIEHack != null) iframeIEHack.style.height = document.getElementById("FreezeLayer").style.height;
		}
	}
	
	if (callBackFunc != null && typeof callBackFunc != "undefined") callBackFunc();
	
/*
	if (dialog_closeOnBodyClick == "yes") {
		
		if (browser_ie) {
			window.event.cancelBubble = true;
		} else if (browser_nn6) {
			event.stopPropagation();
		}
		document.onclick = closeDialog;
	}
*/

	return oDialog;
}

/**
 *@private
 */
function freezeBackground() {
	var oFreezeLayer = document.createElement("DIV");
	oFreezeLayer.id = "FreezeLayer";
	oFreezeLayer.className = "freezeLayer";
	oFreezeLayer.style.width = "100%";
	oFreezeLayer.style.zIndex = "99";

	document.body.appendChild(oFreezeLayer);
}

var diffLeft=0, diffTop=0;
/**
 *@private
 */
function captureDialog(ev) {
	oDialog.style.cursor = "move";
	
	if (browser_ie) {
		diffLeft = window.event.clientX + document.body.scrollLeft - parseInt(findPosX(oDialog));
		diffTop = window.event.clientY + document.body.scrollTop - parseInt(findPosY(oDialog));
	} else if (browser_nn4 || browser_nn6) {
		diffLeft = ev.pageX - parseInt(findPosX(oDialog));
		diffTop = ev.pageY - parseInt(findPosY(oDialog));
	}
	
	document.onmousemove = moveDialog;
	document.onmouseup = releaseDialog;
}

/**
 *@private
 */
function moveDialog(ev) {
	clearTextSelection();
	if (browser_ie) {
		var left = window.event.clientX + document.body.scrollLeft - diffLeft;
		var top = window.event.clientY + document.body.scrollTop - diffTop;
		
		left = (left >= 0) ? left : 0;
		top = (top >= 0) ? top : 0;
	
		if (document.getElementById("FreezeLayer") != null || browser_opera || iframeIEHack == null) {
			oDialog.style.left = left + "px";
			oDialog.style.top = top + "px";
		} else {
			oDialog.style.left = iframeIEHack.style.left = left + "px";
			oDialog.style.top = iframeIEHack.style.top = top + "px";
		}
	} else if (browser_nn4 || browser_nn6) {
		oDialog.style.left = ((ev.pageX - diffLeft > 0) ? ev.pageX - diffLeft : 0) + "px";
		oDialog.style.top = ((ev.pageY - diffTop > 0) ? ev.pageY - diffTop : 0) + "px";	
	}
}


/**
 *@private
 */
function releaseDialog() {
	oDialog.style.cursor = "default";
	document.onmousemove = null;
	document.onmouseup = null;
}

function closeDialog(callBackFunc) {
//	if (oDialog != null && oDialog.style.visibility != "hidden") {
	if (oDialog != null && oDialog.style.display != "none") {
	//	oDialog.style.visibility = "hidden";
		oDialog.style.display = "none";
		if (document.getElementById("FreezeLayer") != null) document.getElementById("FreezeLayer").parentNode.removeChild(document.getElementById("FreezeLayer"));
		if (browser_ie && !browser_opera && iframeIEHack != null) {
			document.body.removeChild(iframeIEHack);
			iframeIEHack = null;
		}
		closeOnBodyClick = false;
		if(oCloseClBk && oCloseClBk != null && oCloseClBk != "undefined")  {
			oCloseClBk();
		}
		if (typeof callBackFunc != "undefined" && callBackFunc.srcElement == "undefined")
			callBackFunc();
	}

/*
	if(document.onclick == closeDialog)
	{
		document.onclick = null;
	}
*/
}

document.onkeydown = function(ev) {
	if (browser_ie) var keyCode = window.event.keyCode;
	else if (browser_nn4 || browser_nn6) var keyCode = ev.which;
	
//	if (keyCode == 27 && closeOnEscKey == true && oDialog != null && oDialog.style.visibility != "hidden")
	if (keyCode == 27 && closeOnEscKey == true && oDialog != null && oDialog.style.display != "none")
		closeDialog();
}

var dialog_cursor_left, dialog_cursor_top;
document.onmousedown = function(ev) {
	if (browser_ie) {
		srcEl = window.event.srcElement;		
	} else if (browser_nn4 || browser_nn6) {
		srcEl = ev.target;
	}
	
	var cursorPos = getCursorPos(ev);
	var x = cursorPos.x;
	var y = cursorPos.y;
	
	dialog_cursor_left = x;
	dialog_cursor_top = y;

	if (typeof closeOnBodyClick != "undefined" && closeOnBodyClick == true && oDialog != null && oDialog.style.visibility != "hidden") {
		if ((x < findPosX(oDialog) || x >= findPosX(oDialog) + oDialog.offsetWidth) || (y < findPosY(oDialog) || y >= findPosY(oDialog) + oDialog.offsetHeight))
			closeDialog();
	}
}

function getCursorPos(ev) {
	if (browser_ie) {
		var x = window.event.clientX + document.body.scrollLeft;
		var y = window.event.clientY + document.body.scrollTop;
	} else if (browser_nn6) {
		var x = ev.pageX;
		var y = ev.pageY;
	}
	
	return { x : x, y : y };
}

var scrollEnd = 0, cnt = 0;

/**
 *@private
 */
function scrollPage() {
	if (cnt <= scrollEnd) {
		document.body.scrollTop += 10;
		cnt += 10;
	} else {
		scrollEnd = cnt = 0;
		clearInterval(scrollInterval);
	}
}


/**
 * Used to show the contents of the url in a dialog.
 * @param sURL		Mandatory. String that specifies the URL to display.
 * @param Features	Optional. Sames as mentioned in showDialog() function
 * <h3>Example:</h3>
 *  showURLInDialog( "InstantFeedback.cc", "position=relative" );	
 */

function showURLInDialog(url, features, callBackFunc, openerId) {
  callBack = function(xmlhttp) {
    var oDialog = showDialog(xmlhttp.responseText, features, callBackFunc);
    if(openerId)
    {
        oDialog.setAttribute("opener", openerId);
    }
  }	
  AjaxAPI.sendRequest({METHOD:"GET",URL:url,ONSUCCESSFUNC:callBack});
}

function closeParentDialog(element, refreshOpener)
{
   closeDialog();
   if (refreshOpener)
   {
      var parent = DOMUtils.getParentWithAttr(element, "opener");
      AjaxAPI.refreshOpener({OPENER:parent.getAttribute("opener")});
   }
}


