﻿Type.registerNamespace("Telerik.Web.UI");

Telerik.Web.UI._PostbackWrapper = function ()
{
	this._doPostbackReplaced = false;
	this._events = new Sys.EventHandlerList();
	this._originalDoPostBack = null;
	this._onWindowUnloadHandler = null;
	this._postbackEventRaised = false;
	this._beginRequestHandler = null;
	this._onsubmitHandler = null;
	this._partialRenderingEnabledChecked = false;
	this._partialRenderingEnabled = false;
}

Telerik.Web.UI._PostbackWrapper.prototype =
{
	initialize : function()
	{
        this._onWindowUnloadHandler = Function.createDelegate(this, this._onWindowUnload);

        Sys.UI.DomEvent.addHandler(window, 'unload', this._onWindowUnloadHandler);
	},

	_raiseBeforePostback : function(eventArgs)
	{
		var handler = this._events.getHandler("beforePostback");
		if (handler)
		{
			if (!eventArgs)
			{
				eventArgs = Sys.EventArgs.Empty;
			}
			handler(this, eventArgs);
		}
		this._postbackEventRaised = true;
	},
	
	_doPostback : function(eventTarget, eventArgument)
	{
		this._raiseBeforePostback(Sys.EventArgs.Empty);
		this._originalDoPostBack(eventTarget, eventArgument);
	},
	
	_onSubmit : function()
	{
		if (!this._postbackEventRaised)
		{
			this._raiseBeforePostback(Sys.EventArgs.Empty);
		}
		return true;
	},
	
	_endRequest : function()
	{
		this._postbackEventRaised = false;
	},
	
	_isPartialRenderingEnabled : function()
	{
		if (!this._partialRenderingEnabledChecked)
		{
			this._partialRenderingEnabled = true;
			if (typeof(Sys) == "undefined")
			{
				this._partialRenderingEnabled = false;
			}
			else if (typeof(Sys.WebForms) == "undefined")
			{
				this._partialRenderingEnabled = false;
			}
			else if (typeof(Sys.WebForms.PageRequestManager) == "undefined")
			{
				this._partialRenderingEnabled = false;
			}
			else if (!Sys.WebForms.PageRequestManager.getInstance())
			{
			    this._partialRenderingEnabled = false;
			}
			this._partialRenderingEnabledChecked = true;
		}
		return this._partialRenderingEnabled;
	},
	
	add_beforePostback : function(handler)
	{
		if (!this._isPartialRenderingEnabled())
		{
			return;
		}
		if (!this._onsubmitHandler)
		{
			this._onsubmitHandler = Function.createDelegate(this, this._onSubmit);
			Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmitHandler);
		}
		if (!this._endRequestHandler)
		{
			this._endRequestHandler = Function.createDelegate(this, this._endRequest);
			Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler);
		}
		if (!this._doPostbackReplaced)
		{
			this._replaceDoPostback();
		}
		this._events.addHandler("beforePostback", handler);
	},

	remove_beforePostback : function(handler)
	{
		this._events.removeHandler("beforePostback", handler);
	},

	_replaceDoPostback : function()
	{
		if (typeof(Page_IsValid) != "undefined")
		{
			return;
		}
		this._originalDoPostBack = window.__doPostBack;
		if (this._originalDoPostBack)
		{
			window.__doPostBack = Function.createDelegate(this, this._doPostback);
        }

		this._doPostbackReplaced = true;
	},
	
    _onWindowUnload : function(rawEvent)
    {
        this.dispose();
    },

    dispose : function()
    {
		Sys.UI.DomEvent.removeHandler(window, 'unload', this._onWindowUnloadHandler);
		if (this._endRequestHandler)
		{
			Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);
			this._endRequestHandler = null;
		}

        if (this._originalDoPostBack)
        {
			window.__doPostBack = this._originalDoPostBack;
			this._originalDoPostBack = null;
        }
    }
}

Telerik.Web.UI._PostbackWrapper.registerClass("Telerik.Web.UI._PostbackWrapper");

Telerik.Web.UI.PostbackWrapper = new Telerik.Web.UI._PostbackWrapper();
Telerik.Web.UI.PostbackWrapper.initialize();
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();