(function($) {var ajax = $.ajax;var pendingRequests = {};var synced = [];var syncedData = [];$.ajax = function(settings) {settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings));var port = settings.port;switch(settings.mode) {case "abort":if ( pendingRequests[port] ) {pendingRequests[port].abort();}return pendingRequests[port] = ajax.apply(this, arguments);case "queue":var _old = settings.complete;settings.complete = function(){if ( _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++ ) {if ( synced[i].error ) synced[i].error.apply( jQuery, syncedData[i].error );if ( synced[i].success ) synced[i].success.apply( jQuery, syncedData[i].success );if ( synced[i].complete ) synced[i].complete.apply( jQuery, syncedData[i].complete );synced[i] = null;syncedData[i] = null;}};}return ajax.apply(this, arguments);};})(jQuery);
