(function($){$.extend({manageAjax:function(o){o=$.extend({manageType:'normal',maxReq:0,blockSameRequest:false,global:true},o);return new $.ajaxManager(o);},ajaxManager:function(o){this.opt=o;this.queue=[];}});$.extend($.ajaxManager.prototype,{add:function(o){var quLen=this.queue.length,s=this.opt,q=this.queue,self=this,i,j;o=$.extend({},s,o);var cD=(o.data&&typeof o.data!="string")?$.param(o.data):o.data;if(s.blockSameRequest){var toPrevent=false;for(i=0;i<quLen;i++){if(q[i]&&q[i].data===cD&&q[i].url===o.url&&q[i].type===o.type){toPrevent=true;break;}}
if(toPrevent){return false;}}
q[quLen]={fnError:o.error,fnSuccess:o.success,fnComplete:o.complete,fnAbort:o.abort,error:[],success:[],complete:[],done:false,queued:false,data:cD,url:o.url,type:o.type,xhr:null};o.error=function(){if(q[quLen]){q[quLen].error=arguments;}};o.success=function(){if(q[quLen]){q[quLen].success=arguments;}};o.abort=function(){if(q[quLen]){q[quLen].abort=arguments;}};function startCallbacks(num,opts){if(q[num].fnError&&q[num].error.length){q[num].fnError.apply(opts||$,q[num].error);}
if(q[num].fnSuccess){q[num].fnSuccess.apply(opts||$,q[num].success);}
if(q[num].fnComplete){q[num].fnComplete.apply(opts||$,q[num].complete);}
self.abort(num,true);}
o.complete=function(){if(!q[quLen]){return;}
q[quLen].complete=arguments;q[quLen].done=true;switch(s.manageType){case'sync':if(quLen===0||!q[quLen-1]){var curQLen=q.length;for(i=quLen;i<curQLen;i++){if(q[i]){if(q[i].done){startCallbacks(i,this);}
else{break;}}}}
break;case'queue':if(quLen===0||!q[quLen-1]){var curQLen=q.length;for(i=0,j=0;i<curQLen;i++){if(q[i]&&q[i].queued){q[i].xhr=jQuery.ajax(q[i].xhr);q[i].queued=false;break;}}}
startCallbacks(quLen,this);break;case'abortOld':startCallbacks(quLen,this);for(i=quLen;i>=0;i--){if(q[i]){self.abort(i);}}
break;default:startCallbacks(quLen,this);break;}};if(s.maxReq){if(s.manageType!='queue'){for(i=quLen,j=0;i>=0;i--){if(j>=s.maxReq){this.abort(i);}
if(q[i]){j++;}}}
else{for(i=0,j=0;i<=quLen&&!q[quLen].queued;i++){if(q[i]&&!q[i].queued)
j++;if(j>s.maxReq)
q[quLen].queued=true;}}}
q[quLen].xhr=(q[quLen].queued)?o:jQuery.ajax(o);return quLen;},cleanUp:function(){this.queue=[];},abort:function(num,completed){var qLen=this.queue.length,s=this.opt,q=this.queue,self=this,i;function del(num){if(!q[num]){return;}
((!completed&&q[num].fnAbort)&&q[num].fnAbort.apply($,[num]));if(!q[num]){return;}
if(q[num].xhr){if(typeof q[num].xhr.abort!='undefined'){q[num].xhr.abort();}
if(typeof q[num].xhr.close!='undefined'){q[num].xhr.close();}
q[num].xhr=null;}
if(s.global&&$.active&&! --$.active){$.event.trigger("ajaxStop");}
q[num]=null;}
if(!num&&num!==0){for(i=0;i<qLen;i++){del(i);}
this.cleanUp();}
else{del(num);var allowCleaning=true;for(i=qLen;i>=0;i--){if(q[i]){allowCleaning=false;break;}}
if(allowCleaning){this.cleanUp();}}}});})(jQuery);
