var oDialog, doc, srcEl, closeOnEscKey = true, closeOnBodyClick = false, iframeIEHack, onCloseCallBack, dialogHidden, dialogOpened;
var dialogProperties = new Array("position", "top", "left", "height", "width", "srcElement", "modal", "draggable",
"title", "closeButton", "closeOnEscKey", "transitionType", "transitionInterval", "closeOnBodyClick", "freezeLayerBGColor", "freezeLayerOpacity");
var dialogEl, dialogContentEl;
var onDialogOpen, onDialogClose;
function showDialog(content, features, callBackFunc, closeCallBackFunc) {
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) closeDialog();
oDialog = document.createElement("DIV");
oDialog.id = "_DIALOG_LAYER";
document.body.appendChild(oDialog);
dialogEl = oDialog;
if (typeof closeCallBackFunc != "undefined" && closeCallBackFunc != null) onCloseCallBack = closeCallBackFunc;
var isContentDOMElement = ((typeof content) != "string");
var contentElement = content;
content = '<div id="_DIALOG_CONTENT">' + ((isContentDOMElement) ? "" : 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.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:;'>" + box + "</td></tr></table>";	
else
oDialog.innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td height='100%' style='display:;'>" + content + "</td></tr></table>";	
oDialog.style.position = "absolute";
oDialog.style.left = "-1000px";
oDialog.style.top = "-1000px";
oDialog.style.zIndex = "100000";
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");
dialogContentEl = oDialogContent;
if (isContentDOMElement) oDialogContent.appendChild(contentElement);
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 (!browser_opera) {
if (dialog_modal != "undefined" && dialog_modal == "yes") {
if (dialog_freezeLayerBGColor == "undefined") self["dialog_freezeLayerBGColor"] = "";
if (dialog_freezeLayerOpacity == "undefined") self["dialog_freezeLayerOpacity"] = "";			
freezeBackground( { "BGColor" : dialog_freezeLayerBGColor, "opacity" : dialog_freezeLayerOpacity} );
} 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;
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") {
if (dialog_left == "undefined" || dialog_left == "absmiddle") left = (doc.width / 2 ) - (width / 2) + document.body.scrollLeft;
if (dialog_top == "undefined" || dialog_top == "absmiddle") top = (doc.height / 2) - (height / 2) + document.body.scrollTop;
left += document.body.scrollLeft;
top += document.body.scrollTop;
} else {
left = (doc.width / 2 ) - (width / 2) + document.body.scrollLeft + left;
top = (doc.height / 2) - (height / 2) + document.body.scrollTop + top;		
}
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) {
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 = "99998";
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);
}
if (!browser_opera) {
if (dialog_modal != "undefined" && dialog_modal == "yes") {
var freezeLayerHt = 0;
if (browser_ie) {
if (document.documentElement.scrollHeight < document.documentElement.offsetHeight) {
freezeLayerHt = document.documentElement.offsetHeight;
} else {
freezeLayerHt = document.documentElement.scrollHeight;
}				
} else {
freezeLayerHt = document.body.scrollHeight;
}
document.getElementById("FreezeLayer").style.height = freezeLayerHt;
if (browser_ie) iframeIEHack.style.height = freezeLayerHt;
}
}
dialogHidden = false;
dialogOpened = true;
if (typeof callBackFunc != "undefined" && callBackFunc != null && callBackFunc != "") callBackFunc();
if (typeof onDialogOpen == "function") onDialogOpen();
return oDialog;
}
function freezeBackground(properties) {
var oFreezeLayer = document.createElement("DIV");
oFreezeLayer.id = "FreezeLayer";
oFreezeLayer.className = "freezeLayer";
oFreezeLayer.style.width = "100%";
oFreezeLayer.style.zIndex = "99999";
if (properties.BGColor != "") oFreezeLayer.style.backgroundColor = properties.BGColor;
if (properties.opacity != "") {
var opacity = (properties.opacity.indexOf("%") < 0) ? properties.opacity : properties.opacity.substr(0, properties.opacity.length - 1);
if (browser_ie) oFreezeLayer.style.filter = "alpha(opacity=" + opacity +")";
else oFreezeLayer.style.opacity = opacity / 1000;;
}
document.body.appendChild(oFreezeLayer);
}
var diffLeft=0, diffTop=0;
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;
}
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) {
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";	
}
}
function releaseDialog() {
oDialog.style.cursor = "default";
document.onmousemove = null;
document.onmouseup = null;
}
function closeDialog(callBackFunc) {
if (oDialog != null && (oDialog.style.display != "none" || dialogHidden)) {
oDialog.style.display = "none";
if (document.getElementById("FreezeLayer") != null) document.body.removeChild(document.getElementById("FreezeLayer"));
if (browser_ie && !browser_opera) {
document.body.removeChild(iframeIEHack);
iframeIEHack = null;
}
closeOnBodyClick = false;
if (typeof callBackFunc != "undefined" && callBackFunc.srcElement == "undefined")
callBackFunc();
if (typeof onCloseCallBack != "undefined" && onCloseCallBack != null)
onCloseCallBack();
dialogHidden = false;
dialogOpened = false;
onCloseCallBack = null;
document.body.removeChild(oDialog);
oDialog = null;
dialogEl = null;
if (typeof onDialogClose == "function") onDialogClose();
}
}
function hideDialog() {
if (oDialog != null && oDialog.style.display != "none") {
oDialog.style.display = "none";
var freezeLayer = document.getElementById("FreezeLayer");
if (freezeLayer != null) freezeLayer.style.display = "none";
if (browser_ie && !browser_opera) iframeIEHack.style.display = "none";
dialogHidden = true;
}
}
function recallDialog() {
if (oDialog != null && oDialog.style.display == "none") {
if (browser_ie && !browser_opera) iframeIEHack.style.display = "";
var freezeLayer = document.getElementById("FreezeLayer");
if (freezeLayer != null) freezeLayer.style.display = "";	
oDialog.style.display = "";
dialogHidden = false;     
}
}
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.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();
}
}
var scrollEnd = 0, cnt = 0;
function scrollPage() {
if (cnt <= scrollEnd) {
document.body.scrollTop += 10;
cnt += 10;
} else {
scrollEnd = cnt = 0;
clearInterval(scrollInterval);
}
}
function showURLInDialog(url, features, callBackFunc, openerId, closeCallBackFunc) {
callBack = function(xmlhttp) {
var oDialog = showDialog(xmlhttp.responseText, features, callBackFunc, closeCallBackFunc);
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")});
}
}
