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) {
		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;

		var topString = (typeof (top) == "undefined" || top == null) ? "10%" : top + "px";
		var heightString = (typeof (top) == "undefined" || top == null) ? "80%" : "";
		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 };
		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;
		//		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.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, 60);

			//			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.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))
			Controls.EventHelper.CancelEvent(e);
		
		Controls.EventHelper.CancelBubble(e);
	}
}
