(function($){var ajax=$.ajax,pendingRequests={},synced=[],syncedData=[];$.ajax=function(settings){settings=jQuery.extend(settings,jQuery.extend({},jQuery.ajaxSettings,settings));var port=settings.port;switch(settings.mode){case "abort":pendingRequests[port]&&pendingRequests[port].abort();return pendingRequests[port]=ajax.apply(this,arguments);case "queue":var _old=settings.complete;settings.complete=function(){_old&&_old.apply(this,arguments);jQuery([ajax]).dequeue("ajax"+port)};jQuery([ajax]).queue("ajax"+port,function(){ajax(settings)});return;case "sync":var pos=synced.length;synced[pos]={error:settings.error,success:settings.success,complete:settings.complete,done:false};syncedData[pos]={error:[],success:[],complete:[]};settings.error=function(){syncedData[pos].error=arguments};settings.success=function(){syncedData[pos].success=arguments};settings.complete=function(){syncedData[pos].complete=arguments;synced[pos].done=true;if(pos==0||!synced[pos-1])for(var i=pos;i<synced.length&&synced[i].done;i++){synced[i].error&&synced[i].error.apply(jQuery,syncedData[i].error);synced[i].success&&synced[i].success.apply(jQuery,syncedData[i].success);synced[i].complete&&synced[i].complete.apply(jQuery,syncedData[i].complete);synced[i]=null;syncedData[i]=null}}}return ajax.apply(this,arguments)}})(jQuery);
