if (typeof (Controls) == "undefined")
	Controls = {};
if (typeof (Controls.PostBackHelper) == "undefined") {
	Controls.PostBackHelper = {};
	Controls.PostBackHelper.LanguageID = null;

	Controls.PostBackHelper.DoPostBack = function(target, command, eventArgument, refreshContainerID, asyncRequest, viewStateHandler) {
		var query = window.location.search.substr(1);
		var queryParts = query.split('&');

		if (typeof (asyncRequest) == "undefined")
			asyncRequest = true;

		var request = new CHttpRequest();
		request.QueryString = "AjaxType=HTML&RequestFile=" + target + "&MethodName=XPostBack&InstanceCall=1&LanguageID=" + Controls.PostBackHelper.LanguageID;
		for (var i = 0; i < queryParts.length; i++) {
			var variable = queryParts[i].split('=');
			if (variable != 'Template') {
				request.QueryString += "&" + queryParts[i];
			}
		}
		request.AsyncCall = asyncRequest;
		var inputs = document.getElementsByTagName("INPUT");
		for (var i = 0; i < inputs.length; i++) {
			if (inputs[i].type == "checkbox") {
				request.AddProperty("Arguments[" + inputs[i].name + "]", (!inputs[i].checked) ? "" : inputs[i].value);
			} else {
				request.AddProperty("Arguments[" + inputs[i].name + "]", inputs[i].value);
			}
		}
		var textAreas = document.getElementsByTagName("TEXTAREA");
		for (var i = 0; i < textAreas.length; i++) {
			request.AddProperty("Arguments[" + textAreas[i].name + "]", textAreas[i].value);
		}
		var selects = document.getElementsByTagName("SELECT");
		for (var i = 0; i < selects.length; i++) {
			request.AddProperty("Arguments[" + selects[i].name + "]", selects[i].value);
			request.AddProperty("Arguments[" + selects[i].name + "_Text]", selects[i].options[selects[i].selectedIndex].text);
		}
		request.AddProperty("Arguments[Command]", command);
		request.AddProperty("Arguments[EventArgument]", eventArgument);
		var refreshContainer = document.getElementById(refreshContainerID);
		//		if (refreshContainer == null) {
		//			alert("RefreshContainer is null");
		//			return;
		//		}
		request.State = { RefreshContainerID: refreshContainerID, ScrollPosition: document.documentElement.scrollTop, ViewStateHandler: viewStateHandler };
		if (asyncRequest)
			request.OnResponse = Controls.PostBackHelper.DoPostBackCallback;
		var response = request.Send();
		if (!asyncRequest) {
			return Controls.PostBackHelper.DoPostBackCallback(response, request.State);
		}
	}

	Controls.PostBackHelper.DoPostBackCallback = function(request, state) {

		if (state.RefreshContainerID != '' && state.RefreshContainerID != null && typeof (state.RefreshContainerID) != 'undefined') {
			var refreshContainer = document.getElementById(state.RefreshContainerID);
			if (refreshContainer == null) {
				alert("RefreshContainer is null");
				return false;
			}
		}

		if (request.responseText.indexOf("Fatal error:") != -1 || request.responseText.indexOf("!!!!!! ERROR") != -1) {
			alert("Error Processing Request!");
			//refreshContainer.innerHTML = state.RefreshContainerState;
			return false;
		} else if (request.responseText.indexOf("<UnhandledException>") != -1) {
			var regEx = new RegExp("<UnhandledException>([^<>]+)</UnhandledException>", "gi");
			var arr = regEx.exec(request.responseText);
			alert("Error Processing Request!\r\n\r\n" + RegExp.$1 + "");
			//refreshContainer.innerHTML = state.RefreshContainerState;
			return false;
		}

		var responseParts = request.responseText.split("|||");
		var error = false;
		if (responseParts[0].substr(0, 6) == "ERROR:") {
			alert(responseParts[0].substr(6));
			error = true;
		} else if (responseParts[0].substr(0, 8) == "MESSAGE:") {
			alert(responseParts[0].substr(8));
		} else if (responseParts[0].substr(0, 9) == "REDIRECT:") {
			window.location.href = responseParts[0].substr(9);
			return;
		} else if (refreshContainer != null) {
			//refreshContainer.innerHTML = responseParts[0];
			Controls.Ajax.LoadContent(refreshContainer, responseParts[0]);
		}

		if (responseParts.length > 1) {
			var resetScroll = false;
			for (var i = 1; i < responseParts.length; i += 2) {
				if (responseParts[i] == "VIEWSTATE") {
					if (typeof (state.ViewStateHandler) == 'function') {
						state.ViewStateHandler(responseParts[i + 1]);
					} else {
						var viewStateField = document.getElementById("__VIEWSTATE");
						if (viewStateField != null)
							viewStateField.value = responseParts[i + 1];
					}
					//alert(responseParts[i + 1].length);
				} else if (responseParts[i] == "FOCUS") {
					var ctrl = document.getElementById(responseParts[i + 1]);
					if (ctrl != null) {
						if (ctrl.focus)
							ctrl.focus();
						if (ctrl.select)
							ctrl.select();
						resetScroll = false;
					}
				} else if (responseParts[i] == "FOCUS_AND_SCROLL") {
					var ctrl = document.getElementById(responseParts[i + 1]);
					if (ctrl != null) {
						if (ctrl.focus)
							ctrl.focus();
						if (ctrl.select)
							ctrl.select();
						var coords = Controls.DOMHelper.GetCoordinates(ctrl);
						resetScroll = true;
						document.documentElement.scrollTop = coords[1] - 100;
					}
				} else if (responseParts[i] == "RESET_SCROLL" && responseParts[i + 1] == "1") {
					document.documentElement.scrollTop = 0;
					resetScroll = true;
				}
			}
		}
		if (!resetScroll) {
			document.documentElement.scrollTop = state.ScrollPosition;
		}
		return !error;
	}
}