﻿if(typeof(window['Type']) != 'function')
	throw 'BXAspnetFormDispatcher.js: Could not find Type function!';
	
if(typeof(Bitrix) == "undefined" || !Type.isNamespace(Bitrix))
	Type.registerNamespace("Bitrix");

Bitrix.PopupDialogScriptPreEvaluteArgs = function(){
	Bitrix.PopupDialogScriptPreEvaluteArgs.initializeBase(this);
	this._content = null;
	this._cancel = false;
	this._isChanged = false;
	this._isInitialized = false;
}

Bitrix.PopupDialogScriptPreEvaluteArgs.prototype = {
    initialize: function(sourceScript){
        if(this._isInitialized) return;
		this._content = sourceScript;
        this._isInitialized = true;
    },
	getContent: function(){
		return this._content;
	},
	setContent: function(value){
		this._content = value;
		if(!this._isChanged)
			this._isChanged = true;
	},
	getCancel: function(){
		return this._cancel;
	},
	setCancel: function(value){
		this._cancel = value;
	},
	isChanged: function(){
		return this._isChanged;
	}	
}


Bitrix.PopupDialogScriptPreEvaluteArgs.create = function(sourceScript){
	var self = new Bitrix.PopupDialogScriptPreEvaluteArgs();
	self.initialize(sourceScript);
	return self;
}

Bitrix.PopupDialogScriptPreEvaluteArgs.registerClass("Bitrix.PopupDialogScriptPreEvaluteArgs");

Bitrix.AspnetFormDispatcher = function(){
	Bitrix.AspnetFormDispatcher.initializeBase(this);
	//this._currentForm = null;
	this._previousForm = null;
	//this._previousPageRequestManager = null;
	this._previousScriptManagerID = null;
	this._previousScriptManagerUpdatePanelIDs = null;
	this._previousScriptManagerUpdatePanelClientIDs = null;
	this._previousScriptManagerUpdatePanelHasChildrenAsTriggers = null;
	this._previousScriptManagerAsyncPostBackTimeout = null;
	this._previousScriptManagerAsyncPostBackControlIDs = null;
	this._previousScriptManagerAsyncPostBackControlClientIDs = null;
	this._previousScriptManagerPostBackControlIDs = null;
	this._previousScriptManagerPostBackControlClientIDs = null;
	this._previousValidatorsArray = null;	
	this._initialized = false;
}

Bitrix.AspnetFormDispatcher.prototype = {
    initialize: function(){
        if(this._initialized) return;
		//if(typeof(window['theForm']) != undefined){
		//	this._currentForm = theForm;
		//}
		
        this._initialized = true;
    },	
	
	handlePopupDialogScriptPreEvalute: function(args){
		if(!Bitrix.PopupDialogScriptPreEvaluteArgs.isInstanceOfType(args)) 
			throw "Bitrix.AspnetFormDispatcherargs--handlePopupDialogScriptPreEvalute: is invalid argument!";
	    //var e = Function._validateParams(arguments, [
	    //    {name: "args", type: Bitrix.AspnetFormDispatcherargs, mayBeNull: false},
	    //]);
	    //if (e) throw e;		
		
		var srcScript = args.getContent();
		if(srcScript == null || srcScript.length == 0) return;
		
		if(srcScript.indexOf("BXAspnetFormDispatcher.js") >= 0){
				args.setCancel(true);
			return;
		}
		
		// MicrosoftAjax.js "Microsoft AJAX Framework"
		if(srcScript.indexOf("MicrosoftAjax.js") >= 0){
			if(typeof(window['Function']) == 'function'){
				args.setCancel(true);
			}
			return;
		}
		// MicrosoftAjaxWebForms.js "Microsoft AJAX ASP.NET WebForms Framework"
		if(srcScript.indexOf("MicrosoftAjaxWebForms.js") >= 0){
			if(typeof(window['Type']) == 'function' && Type.isNamespace(Sys.WebForms)){
				args.setCancel(true);
			}
			return;
		}
		
		//theForm
		if(srcScript.indexOf("var theForm =") >= 0){
			if(typeof(window['theForm']) != undefined && this._previousForm == null){
				this._previousForm = theForm;
			}
			
			if(typeof(window['Page_Validators']) != "undefined")
			{
				this._previousValidatorsArray = Page_Validators;
				Page_Validators = null;
			}
		    else
		        this._previousValidatorsArray = null;	

			if(typeof(Sys) != "undefined" && typeof(Sys.WebForms) != "undefined" && typeof(Sys.WebForms.PageRequestManager) != "undefined"){
				if(this._previousScriptManagerID == null){
					var mgr = Sys.WebForms.PageRequestManager.getInstance();
					if(mgr != null){
						this._previousScriptManagerID = mgr._scriptManagerID;
						this._previousScriptManagerUpdatePanelIDs = mgr._updatePanelIDs;
						this._previousScriptManagerUpdatePanelClientIDs = mgr._updatePanelClientIDs;
						this._previousScriptManagerUpdatePanelHasChildrenAsTriggers = mgr._updatePanelHasChildrenAsTriggers;
						this._previousScriptManagerAsyncPostBackTimeout = mgr._asyncPostBackTimeout;
						this._previousScriptManagerAsyncPostBackControlIDs = mgr._asyncPostBackControlIDs;
						this._previousScriptManagerAsyncPostBackControlClientIDs = mgr._asyncPostBackControlClientIDs;
						this._previousScriptManagerPostBackControlIDs = mgr._postBackControlIDs;
						this._previousScriptManagerPostBackControlClientIDs = mgr._postBackControlClientIDs;
						mgr.dispose();
					}
				}				
			}
			return;
		}
		
		//WebFormFunctions
		if(srcScript.indexOf("function WebForm_PostBackOptions") >= 0){
			if(typeof(window['WebForm_PostBackOptions']) == 'function'){
				args.setCancel(true);
			}
			return;			
		}
		
		
		//$create
		if(srcScript.indexOf("$create") >= 0){
			//отработать для нескольких 
			var rxCreate = /\$create\(.+\$get\("([^"]+)"\)\)/i;
			var m = rxCreate.exec(srcScript);
			if(m != null){
				if(Sys.Application.findComponent(m[1]) != null){
					args.setCancel(true);
				}
			}			
		}
			
		//Sys.WebForms.PageRequestManager
		if(srcScript.indexOf("Sys.WebForms.PageRequestManager._initialize") >= 0){
			if (Sys.WebForms.PageRequestManager.getInstance()) {
				//---	
				var rxInitialize = new RegExp("Sys\\.WebForms\\.PageRequestManager\\._initialize\\('([^']+)', document\\.getElementById\\('([^']+)'\\)\\);", "i");
				var m1 = rxInitialize.exec(srcScript);
				if(!m1)
				 throw "Could not find Sys.WebForms.PageRequestManager._initialize() parameters! Please validate regexp...";
				var rxUpdateControls = new RegExp("Sys\\.WebForms\\.PageRequestManager\\.getInstance\\(\\)\\._updateControls\\((.+?)\\);", "i");
				var m2 = rxUpdateControls.exec(srcScript);
				if(!m2)
				 throw "Could not find Sys.WebForms.PageRequestManager._updateControls() parameters! Please validate regexp...";
				
				var content = new Sys.StringBuilder();
				content.appendLine("//<![CDATA[");

				//content.appendLine("Sys.WebForms.PageRequestManager.getInstance().dispose();");
				content.appendLine("Sys.WebForms.PageRequestManager._instance = new Sys.WebForms.PageRequestManager();");

				content.append("Sys.WebForms.PageRequestManager.getInstance()._initializeInternal('");
				content.append(m1[1]);
				content.append("', document.getElementById('");
				content.append(m1[2]);
				content.appendLine("'));");
				content.append("Sys.WebForms.PageRequestManager.getInstance()._updateControls(");
				content.append(m2[1]);
				content.append(");");
				content.appendLine("//]]>");
				args.setContent(content.toString());
			}
		}
	},
	
	handlePopupDialogClose: function(){
		if(typeof(window['theForm']) != undefined && 
			this._previousForm != null){
			theForm = this._previousForm;
		
			if(typeof(Sys) != "undefined" && 
				typeof(Sys.WebForms) != "undefined" && 
				typeof(Sys.WebForms.PageRequestManager) != "undefined"){
				var mgrOld = Sys.WebForms.PageRequestManager.getInstance();
				if(mgrOld != null)
					mgrOld.dispose();
				Sys.WebForms.PageRequestManager._instance = new Sys.WebForms.PageRequestManager();
				var mgr = Sys.WebForms.PageRequestManager.getInstance();
				mgr._initializeInternal(this._previousScriptManagerID, this._previousForm);
				//mgr._scriptManagerID = this._previousScriptManagerID;
				mgr._updatePanelIDs = this._previousScriptManagerUpdatePanelIDs;
				mgr._updatePanelClientIDs = this._previousScriptManagerUpdatePanelClientIDs;
				mgr._updatePanelHasChildrenAsTriggers = this._previousScriptManagerUpdatePanelHasChildrenAsTriggers;
				mgr._asyncPostBackTimeout = this._previousScriptManagerAsyncPostBackTimeout;
				mgr._asyncPostBackControlIDs = this._previousScriptManagerAsyncPostBackControlIDs;
				mgr._asyncPostBackControlClientIDs = this._previousScriptManagerAsyncPostBackControlClientIDs;
				mgr._postBackControlIDs = this._previousScriptManagerPostBackControlIDs;
				mgr._postBackControlClientIDs = this._previousScriptManagerPostBackControlClientIDs;					
			}
			
		    if(typeof(window['Page_Validators']) != "undefined"){
		        Page_Validators = this._previousValidatorsArray;
		    }			
		}
		
		this._previousForm = null;
		this._previousScriptManagerID = null;
		this._previousScriptManagerUpdatePanelIDs = null;
		this._previousScriptManagerUpdatePanelClientIDs = null;
		this._previousScriptManagerUpdatePanelHasChildrenAsTriggers = null;
		this._previousScriptManagerAsyncPostBackTimeout = null;
		this._previousScriptManagerAsyncPostBackControlIDs = null;
		this._previousScriptManagerAsyncPostBackControlClientIDs = null;
		this._previousScriptManagerPostBackControlIDs = null;
		this._previousScriptManagerPostBackControlClientIDs = null;	
		this._previousValidatorsArray == null;	
		this._webRequestManager = null;
	}
}


Bitrix.AspnetFormDispatcher._instance = null;
Bitrix.AspnetFormDispatcher.get_instance = function(){
	if(this._instance == null){
        this._instance = new Bitrix.AspnetFormDispatcher();
		this._instance.initialize();
	}
    return this._instance;
}

Bitrix.AspnetFormDispatcher.registerClass("Bitrix.AspnetFormDispatcher");

Bitrix.GoogbyeWindow = function(){
	Bitrix.GoogbyeWindow.initializeBase(this);
	this._initialized = false;
	this._containerDivId = "bx_googbye_window_container";
	this._containerDivCssClass = "bx-goodbye-window ";
	this._content = "";
	this._timeToLive = 1;
	this._layoutType = "";
	this._onShowClientScript = null;
	this._onHideClientScript = null;
	this._layoutCssClassSuccess = "bx-goodbye-window-success";
	this._layoutCssClassError = "bx-goodbye-window-error";
}	

Bitrix.GoogbyeWindow.prototype = {
    initialize: function(){
        if(this._initialized) return;
		this.reset();
        this._initialized = true;
    },
	
	getContent: function(){
		return this._content;
	},
	setContent: function(value){
		this._content = value;
	},	
	
	getLayoutType: function(){
		return this._layoutType;
	},
	setLayoutType: function(value){
		this._layoutType = value;
	},		
	
	getTimeToLive: function(){
		return this._timeToLive;
	},
	setTimeToLive: function(value){
		if(isNaN(value))
			throw String.concat("'",value, "'", " is not a number!");
		this._timeToLive = parseInt(value);
	},		
	
	getOnHideClientScript: function(){
		return this._onHideClientScript;
	},
	setOnHideClientScript: function(value){
		this._onHideClientScript = value;
	},		
	
	getOnShowClientScript: function(){
		return this._onShowClientScript;
	},
	setOnShowClientScript: function(value){
		this._onShowClientScript = value;
	},	
	
	reset: function(){
		this._content = "Everything Is Fine...";
		this._timeToLive = 1800;
		this._layoutType = "SUCCESS";
		this._onShowClientScript = null;
		this._onHideClientScript = null;	
	},
	
	show: function(){
		if(this._onShowClientScript != null && this._onShowClientScript.length > 0)
			window.eval(this._onShowClientScript);
			
		var containerDiv = document.getElementById(this._containerDivId);
		if(containerDiv == null){
			containerDiv = document.createElement("DIV");
			containerDiv.style.visibility = "hidden";
			containerDiv = document.body.appendChild(containerDiv);
			containerDiv.id = this._containerDivId;		
		}
		
		containerDiv.className = this._containerDivCssClass;
		containerDiv.innerHTML = this._content;
		
		if(this._layoutType == "SUCCESS")
			containerDiv.className = containerDiv.className.concat(" ", this._layoutCssClassSuccess);
		else if(this._layoutType == "ERROR")
			containerDiv.className = containerDiv.className.concat(" ", this._layoutCssClassError);
			
		var windowSize = jsUtils.GetWindowInnerSize();
		var windowScroll = jsUtils.GetWindowScrollPos();	

		containerDiv.style.visibility = "visible";
		
		var left = parseInt(windowScroll.scrollLeft + windowSize.innerWidth/2 - containerDiv.offsetWidth/2);
		var top = parseInt(windowScroll.scrollTop + windowSize.innerHeight/2 - containerDiv.offsetHeight/2);
		
		containerDiv.style.top = top + "px";
		containerDiv.style.left = left + "px";
		
		window.setTimeout(function(){ Bitrix.GoogbyeWindow.getInstance().hide(); }, this._timeToLive);
	},
	
	hide: function(){
		var containerDiv = document.getElementById(this._containerDivId);
		if(containerDiv == null) return;
		containerDiv.style.visibility = "hidden";
		
		var onHideScript = this._onHideClientScript;
		this.reset();
		
		if(onHideScript != null && onHideScript.length > 0)
			window.eval(onHideScript);	
	}
}

Bitrix.GoogbyeWindow._instance = null;
Bitrix.GoogbyeWindow.getInstance = function(){
	if(this._instance == null){
        this._instance = new Bitrix.GoogbyeWindow();
		this._instance.initialize();
	}
    return this._instance;
}

Bitrix.GoogbyeWindow.registerClass("Bitrix.GoogbyeWindow");
