(function(c){var b={},a={};c.manageAjax=(function(){function e(g,h){b[g]=new c.manageAjax._manager(g,h);return b[g]}function d(g){if(b[g]){b[g].clear(true);delete b[g]}}var f={create:e,destroy:d};return f})();c.manageAjax._manager=function(d,e){this.requests={};this.inProgress=0;this.name=d;this.qName=d;this.opts=c.extend({},c.ajaxSettings,c.manageAjax.defaults,e);if(e&&e.queue&&e.queue!==true&&typeof e.queue==="string"&&e.queue!=="clear"){this.qName=e.queue}};c.manageAjax._manager.prototype={add:function(d){d=c.extend({},this.opts,d);var g=d.complete||c.noop,f=d.success||c.noop,j=d.beforeSend||c.noop,h=d.error||c.noop,l=(typeof d.data=="string")?d.data:c.param(d.data||{}),k=d.type+d.url+l,i=this,e=this._createAjax(k,d,f,g);if(d.preventDoubbleRequests&&d.queueDuplicateRequests){if(d.preventDoubbleRequests){d.queueDuplicateRequests=false}setTimeout(function(){throw ("preventDoubbleRequests and queueDuplicateRequests can't be both true")},0)}if(this.requests[k]&&d.preventDoubbleRequests){return}e.xhrID=k;d.xhrID=k;d.beforeSend=function(o,n){var m=j.call(this,o,n);if(m===false){i._removeXHR(k)}o=null;return m};d.complete=function(n,m){i._complete.call(i,this,g,n,m,k,d);n=null};d.success=function(n,m,o){i._success.call(i,this,f,n,m,o,d);o=null};d.error=function(n,m,q){var o="",p="";if(m!=="timeout"&&n){o=n.status;p=n.responseXML||n.responseText}if(h){h.call(this,n,m,q,d)}else{setTimeout(function(){throw m+"| status: "+o+" | URL: "+d.url+" | data: "+l+" | thrown: "+q+" | response: "+p},0)}n=null};if(d.queue==="clear"){c(document).clearQueue(this.qName)}if(d.queue||(d.queueDuplicateRequests&&this.requests[k])){c.queue(document,this.qName,e);if(this.inProgress<d.maxRequests&&(!this.requests[k]||!d.queueDuplicateRequests)){c.dequeue(document,this.qName)}return k}return e()},_createAjax:function(h,g,f,d){var e=this;return function(){if(g.beforeCreate.call(g.context||e,h,g)===false){return}e.inProgress++;if(e.inProgress===1){c.event.trigger(e.name+"AjaxStart")}if(g.cacheResponse&&a[h]){if(!a[h].cacheTTL||a[h].cacheTTL<0||((new Date().getTime()-a[h].timestamp)<a[h].cacheTTL)){e.requests[h]={};setTimeout(function(){e._success.call(e,g.context||g,f,a[h]._successData,"success",a[h],g);e._complete.call(e,g.context||g,d,a[h],"success",h,g)},0)}else{delete a[h]}}if(!g.cacheResponse||!a[h]){if(g.async){e.requests[h]=c.ajax(g)}else{c.ajax(g)}}return h}},_removeXHR:function(d){if(this.opts.queue||this.opts.queueDuplicateRequests){c.dequeue(document,this.qName)}this.inProgress--;this.requests[d]=null;delete this.requests[d]},clearCache:function(){a={}},_isAbort:function(g,d,f){if(!f.abortIsNoSuccess||(!g&&!d)){return false}var e=!!((!g||g.readyState===0||this.lastAbort===f.xhrID));g=null;return e},_complete:function(e,i,h,d,f,g){if(this._isAbort(h,d,g)){d="abort";g.abort.call(e,h,d,g)}i.call(e,h,d,g);c.event.trigger(this.name+"AjaxComplete",[h,d,g]);if(g.domCompleteTrigger){c(g.domCompleteTrigger).trigger(this.name+"DOMComplete",[h,d,g]).trigger("DOMComplete",[h,d,g])}this._removeXHR(f);if(!this.inProgress){c.event.trigger(this.name+"AjaxStop")}h=null},_success:function(e,m,j,i,l,g){var k=this;if(this._isAbort(l,i,g)){l=null;return}if(g.abortOld){c.each(this.requests,function(n){if(n===g.xhrID){return false}k.abort(n)})}if(g.cacheResponse&&!a[g.xhrID]){if(!l){l={}}a[g.xhrID]={status:l.status,statusText:l.statusText,responseText:l.responseText,responseXML:l.responseXML,_successData:j,cacheTTL:g.cacheTTL,timestamp:new Date().getTime()};if("getAllResponseHeaders" in l){var f=l.getAllResponseHeaders();var h;var d=function(){if(h){return}h={};c.each(f.split("\n"),function(o,p){var n=p.indexOf(":");h[p.substr(0,n)]=p.substr(n+2)})};c.extend(a[g.xhrID],{getAllResponseHeaders:function(){return f},getResponseHeader:function(n){d();return(n in h)?h[n]:null}})}}m.call(e,j,i,l,g);c.event.trigger(this.name+"AjaxSuccess",[l,g,j]);if(g.domSuccessTrigger){c(g.domSuccessTrigger).trigger(this.name+"DOMSuccess",[j,g]).trigger("DOMSuccess",[j,g])}l=null},getData:function(e){if(e){var d=this.requests[e];if(!d&&this.opts.queue){d=c.grep(c(document).queue(this.qName),function(g,f){return(g.xhrID===e)})[0]}return d}return{requests:this.requests,queue:(this.opts.queue)?c(document).queue(this.qName):[],inProgress:this.inProgress}},abort:function(g){var f;if(g){f=this.getData(g);if(f&&f.abort){this.lastAbort=g;f.abort();this.lastAbort=false}else{c(document).queue(this.qName,c.grep(c(document).queue(this.qName),function(j,h){return(j!==f)}))}f=null;return}var e=this,d=[];c.each(this.requests,function(h){d.push(h)});c.each(d,function(h,j){e.abort(j)})},clear:function(d){c(document).clearQueue(this.qName);if(d){this.abort()}}};c.manageAjax._manager.prototype.getXHR=c.manageAjax._manager.prototype.getData;c.manageAjax.defaults={beforeCreate:c.noop,abort:c.noop,abortIsNoSuccess:true,maxRequests:1,cacheResponse:false,domCompleteTrigger:false,domSuccessTrigger:false,preventDoubbleRequests:true,queueDuplicateRequests:false,cacheTTL:-1,queue:false};c.each(c.manageAjax._manager.prototype,function(e,d){if(e.indexOf("_")===0||!c.isFunction(d)){return}c.manageAjax[e]=function(g,h){if(!b[g]){if(e==="add"){c.manageAjax.create(g,h)}else{return}}var f=Array.prototype.slice.call(arguments,1);b[g][e].apply(b[g],f)}})})(jQuery);
