var AjaxQueue = {  
    batchSize: 1, //No.of simultaneous AJAX requests allowed, Default : 1  
    urlQueue: [], //Request URLs will be pushed into this array  
    elementsQueue: [], //Element IDs of elements to be updated on completion of a request ( as in Ajax.Updater )  
    optionsQueue: [], //Request options will be pushed into this array  
    setBatchSize: function(bSize){ //Method to set a different batch size. Recommended: Set batchSize before making requests  
        this.batchSize = bSize;  
    },  
    push: function(url, options, elementID){ //Push the request in the queue. elementID is optional and required only for Ajax.Updater calls  
        this.urlQueue.push(url);  
        this.optionsQueue.push(options);  
        if(elementID!=null){  
            this.elementsQueue.push(elementID);  
        } else {  
            this.elementsQueue.push("NOTSPECIFIED");  
        }  
  
        this._processNext();  
    },  
    _processNext: function() { // Method for processing the requests in the queue. Private method. Don't call it explicitly  
        if(Ajax.activeRequestCount < AjaxQueue.batchSize) // Check if the currently processing request count is less than batch size  
        {  
            if(AjaxQueue.elementsQueue.first()=="NOTSPECIFIED") { //Check if an elementID was specified  
                // Call Ajax.Request if no ElementID specified  
                //Call Ajax.Request on the first item in the queue and remove it from the queue  
                new Ajax.Request(AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());   
  
                var junk = AjaxQueue.elementsQueue.shift();  
            } else {  
                // Call Ajax.Updater if an ElementID was specified.  
                //Call Ajax.Updater on the first item in the queue and remove it from the queue  
                new Ajax.Updater(AjaxQueue.elementsQueue.shift(), AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());  
            }  
        }
    }
};  
Ajax.Responders.register({  
  //Call AjaxQueue._processNext on completion ( success / failure) of any AJAX call.  
  onComplete: AjaxQueue._processNext  
});