﻿
/******************************************************************************************************************************

    http://geekswithblogs.net/rashid/archive/2007/08/08/Asp.net-Ajax-UpdatePanel-Simultaneous-Update---A-Remedy.aspx#355952
    
*******************************************************************************************************************************/

var PageRequestManagerEx =
{
    _initialized : false,

    init : function()
    {
        if (!PageRequestManagerEx._initialized)
        {
//            debugger;
        
            var _prm = Sys.WebForms.PageRequestManager.getInstance();
//            var _callQueue = new Array();
//            var _executingElement = null;

//            _prm = Sys.WebForms.PageRequestManager.getInstance();

            _prm.add_initializeRequest(initializeRequest);
            _prm.add_beginRequest(beginRequest);
            _prm.add_endRequest(endRequest);

            PageRequestManagerEx._initialized = true;
        }

        function initializeRequest(sender, args)
        {
            if (_prm.get_isInAsyncPostBack())
            {
                //if we are here that means there already a call pending.
                
//                debugger;
                
                //Get the element which cause the postback
//                var postBackElement = args.get_postBackElement();

                //We need to check this otherwise it will abort the request which we made from the
                //end request
//                if (_executingElement != postBackElement)
//                {
                    // Grab the event argument value
//                    var evArg = $get("__EVENTARGUMENT").value;

                    //Does not match which means it is another control
                    //which request the update, so cancel it temporary and
                    //add it in the call queue
//                    args.set_cancel(true);
//                    Array.enqueue(_callQueue, new Array(postBackElement, evArg));
//                }

                //Reset it as we are done with our matching
//                _executingElement = null;

            }            
        }
        
        
        function beginRequest(sender, args)
        {                                    
            var loading = $get('loading');
            
            loading.style.display = 'block';        
        }
        

        function endRequest(sender, args)
        {
            //Check if we have a pending call
//            if (_callQueue.length > 0)
//            {
//                debugger;
            
                //Get the first item from the call queue and setting it
                //as current executing item
//                _executingElement = Array.dequeue(_callQueue);

//                var _element = _executingElement[0];
//                var _eventArg = _executingElement[1];

                //Now Post the from which will also fire the initializeRequest
//                _prm._doPostBack(_element.id, _eventArg);
//            }
            
            if (!_prm.get_isInAsyncPostBack())
            {            
                var loading = $get('loading');
                
                loading.style.display = 'none';
            }
        }
    }
}

if (typeof(Sys) != 'undefined') Sys.Application.notifyScriptLoaded();

