if (typeof (Controls) == "undefined")
	Controls = {};

if (typeof (Controls.PopupLayerManager) == "undefined") {

	Controls.PopupLayerManager = {};
	Controls.PopupLayerManager.LanguageID = null;
	Controls.PopupLayerManager._popupContainerTemplate = null;
	Controls.PopupLayerManager._popupContainerBackgroundTemplate = null;

	//Controls.PopupLayerManager._popupContainer = null;
	//Controls.PopupLayerManager._popupContainerBackground = null;
	Controls.PopupLayerManager._currentCloseHandler = null;
	Controls.PopupLayerManager._openPopups = new Array();
	Controls.PopupLayerManager._openPopup = null;

	Controls.PopupLayerManager.Open = function(target, top, width, onCloseHandler, arguments, onResizeHandler) {
		var query = window.location.search.substr(1);
		var queryParts = query.split('&');

		var request = new CHttpRequest();
		request.QueryString = "AjaxType=HTML&RequestFile=" + target + "&MethodName=XRender&InstanceCall=1&LanguageID=" + Controls.PopupLayerManager.LanguageID;
		for (var i = 0; i < queryParts.length; i++) {
			var variable = queryParts[i].split('=');
			if (variable != 'Template') {
				request.QueryString += "&" + queryParts[i];
			}
		}
		request.AsyncCall = true;

		if (typeof (arguments) != 'undefined') {
			for (var i = 0; i < arguments.length; i++) {
				request.AddProperty("Arguments[" + arguments[i].Name + "]", arguments[i].Value);
			}
		}

		if (typeof (onCloseHandler) != "function")
			onCloseHandler = null;

		if (typeof (onResizeHandler) != "function") {
			onResizeHandler = null;
		}

		if (typeof (top) == "undefined" || top == null) {
			top = null;
		} else {
			top = top.toString();
		}

		if (typeof (width) == "undefined" || width == null) {
			width = null;
		} else {
			width = width.toString();
		}

		if (top != null && top.indexOf("%") != -1) {
			var topNumber = parseInt(top.replace("%", ""));
			var topString = top;
			var heightString = (100 - 2 * topNumber) + "%";
		} else {
			var topString = (typeof (top) == "undefined" || top == null) ? "10%" : top + "px";
			var heightString = (typeof (top) == "undefined" || top == null) ? "80%" : "";
		}

		if (width != null && width.indexOf("%") != -1) {
			var widthNumber = parseInt(width.replace("%", ""));
			var widthString = width;
			var leftString = ((100 - widthNumber) / 2) + "%";
		} else {
			var leftString = (typeof (width) == "undefined" || width == null) ? "10%" : (document.documentElement.offsetWidth - width) / 2 + "px";
			var widthString = (typeof (width) == "undefined" || width == null) ? "80%" : width + "px";
		}

		request.State = { Top: topString, Left: leftString, Width: widthString, Height: heightString, OnCloseHandler: onCloseHandler, OnResizeHandler: onResizeHandler };
		request.OnResponse = Controls.PopupLayerManager.OpenCallback;
		request.Send();
	}

	Controls.PopupLayerManager.OpenCallback = function(request, state) {
		var popup = Controls.PopupLayerManager.CreatePopup();
		popup.Container.style.top = state.Top;
		popup.Container.style.left = state.Left;
		popup.Container.style.width = state.Width;
		popup.Container.style.height = state.Height;
		Controls.Ajax.LoadContent(popup.Container, request.responseText);
		popup.Container.focus();
		popup.OnCloseHandler = state.OnCloseHandler;
		popup.OnResizeHandler = state.OnResizeHandler;
		//		alert(popup.Container.style.top);
		//		alert(popup.Container.style.left);
		//		alert(popup.Container.style.width);
		//		alert(popup.Container.style.height);
		Controls.PopupLayerManager._openPopup = popup;
		Controls.PopupLayerManager._openPopups.push(popup);
		//document.documentElement.style.overflow = "hidden";
		if (Controls.PopupLayerManager._openPopups.length == 1) {
			Controls.EventHelper.CaptureMouseWheel(document.documentElement, Controls.PopupLayerManager.Body_MouseWheel);
			Controls.EventHelper.RegisterEventHandler(window, "onresize", Controls.PopupLayerManager.Window_Resize);
			var objects = document.getElementsByTagName("object");
			for (var i = 0; i < objects.length; i++) {
				objects[i].style.visibility = "hidden";
			}
		}
		if (Controls.PopupLayerManager._openPopup.OnResizeHandler != null)
			Controls.PopupLayerManager._openPopup.OnResizeHandler(Controls.PopupLayerManager._openPopup.Container, null);
	}

	Controls.PopupLayerManager.CreatePopup = function() {
		if (Controls.PopupLayerManager._popupContainerTemplate == null) {

			Controls.PopupLayerManager._popupContainerTemplate = document.createElement("DIV");
			Controls.PopupLayerManager._popupContainerTemplate.id = "PopupContainer";
			Controls.PopupLayerManager._popupContainerTemplate.className = "PopupContainer";
			Controls.PopupLayerManager._popupContainerTemplate.style.position = "fixed";
			Controls.PopupLayerManager._popupContainerBackgroundTemplate = document.createElement("DIV");
			Controls.PopupLayerManager._popupContainerBackgroundTemplate.id = "PopupContainerBackground";
			Controls.PopupLayerManager._popupContainerBackgroundTemplate.className = "PopupContainerBackground";
			Controls.UI.Effects.SetOpacity(Controls.PopupLayerManager._popupContainerBackgroundTemplate, 40);

			//			var browser = Controls.BrowserHelper.GetBrowserName(true);
			//			if (browser == "IE6") {
			//				Controls.PopupLayerManager._popupContainerBackground.style.position = "absolute";
			//				var body = document.documentElement;
			//				window.attachEvent("onscroll", Controls.PopupLayerManager.Body_Scroll);
			//				Controls.PopupLayerManager._popupContainerBackground.style.width = body.clientWidth;
			//				Controls.PopupLayerManager._popupContainerBackground.style.height = body.clientHeight;
			//				Controls.PopupLayerManager._popupContainer.style.position = "absolute";
			//			}
		}

		var background = document.body.appendChild(Controls.PopupLayerManager._popupContainerBackgroundTemplate.cloneNode(true));
		var container = document.body.appendChild(Controls.PopupLayerManager._popupContainerTemplate.cloneNode(true));

		background.style.zIndex = 100 + Controls.PopupLayerManager._openPopups.length;
		container.style.zIndex = background.style.zIndex;

		var popup = { Container: container, Background: background };

		Controls.EventHelper.RegisterEventHandler(popup.Container, "onkeydown", Controls.PopupLayerManager.Popup_KeyDown);
		popup.Container.style.visibility = "visible";
		popup.Background.style.visibility = "visible";
		return popup;
	}

	//	Controls.PopupLayerManager.Body_Scroll = function(e) {
	//		if (Controls.PopupLayerManager._popupContainerBackground != null) {
	//			Controls.PopupLayerManager._popupContainerBackground.style.top = document.documentElement.scrollTop;
	//			Controls.PopupLayerManager._popupContainer.style.top = (document.documentElement.clientHeight / 10) + document.documentElement.scrollTop;
	//		}
	//	}

	Controls.PopupLayerManager.ClosePopup = function() {
		var e = new Object();
		e.Cancel = false;

		if (Controls.PopupLayerManager._openPopup.OnCloseHandler != null)
			Controls.PopupLayerManager._openPopup.OnCloseHandler(Controls.PopupLayerManager._openPopup.Container, e);
		if (!e.Cancel) {
			//			Controls.PopupLayerManager._openPopup.Container.style.visibility = "hidden";
			//			Controls.PopupLayerManager._openPopup.Background.style.visibility = "hidden";
			//			Controls.PopupLayerManager._openPopup.Container.innerHTML = "";
			var popup = Controls.PopupLayerManager._openPopups.pop();
			Controls.EventHelper.UnRegisterEventHandler(popup.Container, "onkeydown", Controls.PopupLayerManager.Popup_KeyDown);
			popup.Container.parentNode.removeChild(popup.Container);
			popup.Background.parentNode.removeChild(popup.Background);

			if (Controls.PopupLayerManager._openPopups.length > 0) {
				Controls.PopupLayerManager._openPopup = Controls.PopupLayerManager._openPopups[Controls.PopupLayerManager._openPopups.length - 1];
				Controls.PopupLayerManager._openPopup.Container.focus();
			} else {
				Controls.PopupLayerManager._openPopup = null;
				Controls.EventHelper.ReleaseMouseWheel(document.documentElement, Controls.PopupLayerManager.Body_MouseWheel);
				Controls.EventHelper.UnRegisterEventHandler(window, "onresize", Controls.PopupLayerManager.Window_Resize);
				var objects = document.getElementsByTagName("object");
				for (var i = 0; i < objects.length; i++) {
					objects[i].style.visibility = "visible";
				}
			}
		}
	}

	Controls.PopupLayerManager.Window_Resize = function(sender, e) {
		for (var i = 0; i < Controls.PopupLayerManager._openPopups.length; i++) {
			if (Controls.PopupLayerManager._openPopups[i].OnResizeHandler != null)
				Controls.PopupLayerManager._openPopups[i].OnResizeHandler(Controls.PopupLayerManager._openPopups[i].Container, e);
		}
	}

	Controls.PopupLayerManager.PopupClose_Click = function(sender, e) {
		Controls.PopupLayerManager.ClosePopup();
	}

	Controls.PopupLayerManager.Popup_KeyDown = function(e) {
		if (e.keyCode == 27)
			Controls.PopupLayerManager.ClosePopup();
	}

	Controls.PopupLayerManager.Body_MouseWheel = function(e) {
		var targetElement = Controls.EventHelper.GetSourceElement(e);
		if (Controls.DOMHelper.IsParentOf(Controls.PopupLayerManager._openPopup.Container, targetElement)) {
			var parentElement = targetElement;
			while ((parentElement = parentElement.parentNode) != Controls.PopupLayerManager._openPopup.Container) {
				if (parentElement.scrollHeight > parentElement.offsetHeight) {
					parentElement.scrollTop -= Controls.EventHelper.GetWheelDelta(e);
					break;
				}
			}
		}
		Controls.EventHelper.CancelEvent(e);

		Controls.EventHelper.CancelBubble(e);
	}
}