var focusfieldId;
var beginrequesttimer = null;
var mainDialog = null;
var mainDialogCover = null;

// use css class: dialogBig, dialogMed, dialogSmall, dialogWarn for different formats
function RenderDialog(result, css) {
	CreateOverlayDialog(result, false, css);
}

// Function to create overlay dialogs with fixed sizes
function CreateOverlayDialog(result, overwriteDialog, className) {
	var direct = false;

	if (typeof (DnDManager) != "undefined") {
		var draggable = DnDManager.get_objDisplay();
		if (draggable) {
			draggable.style.display = "none";
		}
	}

	captureMousePosition;

	if (windowsize == null) { windowsize = { width: 0, height: 0, windowWidth: 0, windowHeight: 0, scrollTop: 0, scrollLeft: 0 }; }

	mainDialogCover = $get("maindialogcover");
	mainDialogCover.style.visibility = "visible";
	mainDialogCover.style.width = (isIE ? windowsize.windowWidth : windowsize.windowWidth - 18) + "px";
	mainDialogCover.style.top = "0px";
	mainDialogCover.style.height = windowsize.height + "px";
	
	if (isIE6) {
		var iframedialog = $get("iframedialog");

		if (!iframedialog) {
			iframedialog = document.createElement("iframe");
			iframedialog.setAttribute("id", "iframedialog");
			iframedialog.style.display = "none";
			iframedialog.style.position = "absolute";
			iframedialog.src = iframesrc;
			iframedialog.frameBorder = "0";
			iframedialog.scrolling = "no";
			iframedialog.style.top = "0px";
			iframedialog.style.left = "0px";
			iframedialog.style.width = windowsize.windowWidth + "px";
			iframedialog.style.height = windowsize.height + "px";
			iframedialog.style.zIndex = mainDialogCover.style.zIndex - 1;
			iframedialog.style.display = mainDialogCover.style.display;
			mainDialogCover.appendChild(iframedialog);
		}
	}

	var overwrite = false;
	if (mainDialog && mainDialog.style.display != "none" && !overwriteDialog) {
		if ($get("maindialoghidden")) {
			$get("maindialoghidden").id = "maindialogsecond";
		}
		mainDialog.id = "maindialoghidden";
		mainDialog.style.display = "none";
		mainDialog = $get("maindialogsecond");
		mainDialog.id = "maindialog";
		overwrite = true;
	}
	else {
		mainDialog = $get("maindialog");
	}

	if (mainDialog) {

		if (mainDialog.innerHTML.length > 0) {
			mainDialog.innerHTML = "";
			direct = true;
		}
		else {
			direct = false;
			mainDialog.style.visibility = "hidden";
		}
		
		mainDialog.style.top = "0px";
		mainDialog.style.left = "0px";

		if (className) {
			mainDialog.className = className;
		}
		else {
			mainDialog.className = "maindialog";
		}

		if (result) {
			mainDialog.innerHTML = result;
			mainDialogCover.style.display = "block";
			mainDialog.style.display = "block";
		}

		var floatingBehavior = null;
		var hidden = $get("maindialoghidden");
		if (!overwrite && !hidden) {
			var dialogTop = $get('dialogTop');
			if (dialogTop) {
				if (mainDialog._behaviors != null) {
					floatingBehavior = mainDialog._behaviors[0];
					floatingBehavior.set_handle(dialogTop);

					var el = floatingBehavior.get_element();

					var location;
					if (floatingBehavior._location) {
						var numbers = floatingBehavior._location.split(',');
						location = { x: parseInt(numbers[0]), y: parseInt(numbers[1]) };
					}
					else {
						location = Sys.UI.DomElement.getLocation(el);
					}

					if (el.offsetWidth) {
						el.style.width = el.offsetWidth + "px";
					}
					if (el.offsetHeight) {
						el.style.height = el.offsetHeight + "px";
					}
					el.style.position = "absolute";
					Sys.UI.DomElement.setLocation(el, location.x, location.y);

				}
				else {
					floatingBehavior = new Sys.Preview.UI.FloatingBehavior(mainDialog);
					floatingBehavior.set_handle(dialogTop);
					floatingBehavior.initialize();
					floatingBehavior.drop = CheckFloatingPosition;
				}
			}
		}

		jQuery(mainDialog).hide();
		mainDialog.style.visibility = "visible";
		HideLoadingDialog();

		showdialogdirect();
		
		if (direct) {
			showdialogdirect();
		}
		else {
			dialogfadein();
		}
		
		ResizeOverlayDialog();
	}
}

function ToggleBack() {
	var hiddendiv = $get("maindialoghidden");
	if (hiddendiv) {
		mainDialog = $get("maindialog");
		mainDialog.style.display = "none";
		mainDialog.id = "maindialogsecond";

		mainDialog = hiddendiv;
		hiddendiv.id = "maindialog";
		hiddendiv.style.display = "block";
		window.postValidate();
	}
	else {
		CloseDialog();
	}
}

var iloading = null;
function ShowLoadingDialog() {
	if (typeof (pe) != "undefined") {
		pe.ShowLoadingDialog();
	}
	else {
		if ($get("loadingindicator")) {
			$get("loadingindicator").style.visibility = "visible";
			document.body.style.cursor = "wait";
		}
		clearTimeout(iloading);
		iloading = setTimeout("loadingdialog.show()", 100);
	}
}

function HideLoadingDialog() {
	if (typeof (pe) != "undefined") {
		pe.HideLoadingDialog();
	}
	else {
		clearTimeout(iloading);
		loadingdialog.close();
		if ($get("loadingindicator")) {
			$get("loadingindicator").style.visibility = "hidden";
			document.body.style.cursor = "default";
		}
	}
}

function CloseDialog() {
	dialogfadeout();
}

function PerformCloseDialog() {
	if (mainDialog) {
		if (mainDialog.innerHTML) {
			mainDialog.innerHTML = "";
		}
		mainDialog.style.left = "";
		mainDialog.style.top = "";
		mainDialog.style.width = "";
		mainDialog.style.height = "";
		mainDialog.style.display = "none";
		// remove added css class
		Sys.UI.DomElement.removeCssClass(mainDialog, mainDialog.className);
	}

	if (mainDialogCover) {
		mainDialogCover.style.display = "none";
	}

	HideLoadingDialog();
}

function CheckFloatingPosition() {
	if (mainDialog) {
		var dt = getStyle(mainDialog, "top");
		var dl = getStyle(mainDialog, "left");
		var resize = false;

		if (dt.length > 0) {
			var t = parseInt(dt.substring(0, dt.length - 2));
			if (t + 150 > windowsize.height) {
				mainDialog.style.top = (windowsize.height - 150 >= 0 ? windowsize.height - 150 : 0) + "px";
				resize = true;
			}
			else {
				if (t < 0) {
					mainDialog.style.top = "0px";
				}
			}
		}
		if (dl.length > 0 && resize == false) {
			var l = parseInt(dl.substring(0, dl.length - 2));
			if (l < 0) {
				mainDialog.style.left = "0px";
			}
			else {
				if (l + 150 > windowsize.width)
					mainDialog.style.left = windowsize.width - 150 + "px";
			}
		}
	}
}

function ResizeOverlayDialog() {
	capturePageDimensions();

	if (mainDialog) {
		var minXOffset = 200;
		var minYOffset = parseInt(getStyle(mainDialog, "height").replace("px", "")) / 2;
		if (isNaN(minYOffset)) { minYOffset = 200; }
		var divWidth = getStyle(mainDialog, "width");
		if (divWidth) {
			divWidth = parseInt(divWidth.replace("px", ""))
			if (divWidth > 10) {
				minXOffset = divWidth / 2;
			}
		}
		var divHeight = getStyle(mainDialog, "height");
		if (divHeight) {
			divHeight = parseInt(divHeight.replace("px", ""))
			if (divHeight > 10) {
				minYOffset = divHeight / 2;
			}
		}
		if (divWidth >= windowsize.width) {
			mainDialog.style.left = "0px";
		}
		else {
			mainDialog.style.left = (Math.floor(windowsize.windowWidth / 2 - minXOffset)) + "px";
		}
		if (divHeight >= windowsize.height) {
			mainDialog.style.top = "0px";
		}
		else {
			var top = Math.floor(windowsize.windowHeight / 2 - minYOffset) + windowsize.scrollTop;
			mainDialog.style.top = (top > 0 ? top : 0) + "px";
		}

		if (mainDialogCover) {
			if (windowsize.windowWidth < 640) {
				mainDialogCover.style.width = "640px";
			}
			else {
				mainDialogCover.style.width = (isIE ? windowsize.windowWidth : windowsize.windowWidth - 18) + "px";
			}
			if (windowsize.windowHeight < 480) {
				mainDialogCover.style.height = "480px";
			}
			else {
				mainDialogCover.style.height = windowsize.height + "px";
			}

			var iframedialog = $get("iframedialog")
			if (iframedialog) {
				if (iframedialog.style) {
					if (windowsize.width < 640) {
						iframedialog.style.width = "640px";
					}
					else {
						iframedialog.style.width = windowsize.width + "px";
					}
					if (windowsize.height < 480) {
						iframedialog.style.height = "480px";
					}
					else {
						if (window.document.body.offsetHeight > windowsize.height)
							iframedialog.style.height = window.document.body.offsetHeight + "px";
						else
							iframedialog.style.height = windowsize.height + "px";
					}
				}
				iframedialog.style.display = "block";
			}
			mainDialog.style.display = "block";

			FocusMainDialog();
		}
	}
}

// Focus functions
function FocusMainDialog() {
	if (mainDialog) {
		var focusElement = null;

		if (focusfieldId)
			focusElement = $get(focusfieldId);

		if (!focusElement)
			focusElement = FindFocusableElement(mainDialog);

		if (focusElement) {
			try {
				focusElement.focus();
				if (focusElement.select && (focusElement.tagName == "TEXTAREA" || (focusElement.getAttribute("type") != null && focusElement.getAttribute("type").toUpperCase() == "TEXT")))
					focusElement.select();
			}
			catch (e) {
				//_alert ( e );
			}
		}
	}
}

// helper functions for predefined css classes
function RenderBigDialog(result) {
	CreateOverlayDialog(result, false, "dialogLarge");
}
function RenderMedDialog(result) {
	CreateOverlayDialog(result, false, "dialogMedium");
}
function RenderSmallDialog(result) {
	CreateOverlayDialog(result, false, "dialogSmall");
}
function RenderWarnDialog(result) {
	CreateOverlayDialog(result, false, "dialogSmall");
}
function RenderErrorDialog(result) {
	CreateOverlayDialog(result, false, "dialogWarning");
}

//-------------------------------------------

function dialogfadein() {
	jQuery(mainDialog).fadeIn("slow");
}

function dialogfadeout() {
	jQuery(mainDialog).fadeOut(500, PerformCloseDialog);
	return false;
}

function showdialogdirect() {
	if (mainDialog) {
		jQuery(mainDialog).fadeIn(0);
	}
}