/**
 * Ajax Queue Plugin
 * 
 * Homepage: http://jquery.com/plugins/project/ajaxqueue
 * Documentation: http://docs.jquery.com/AjaxQueue
 */

/**

<script>
$(function(){
   jQuery.ajaxQueue({
      url: "test.php",
      success: function(html){ jQuery("ul").append(html); }
   });
   jQuery.ajaxQueue({
      url: "test.php",
      success: function(html){ jQuery("ul").append(html); }
   });
   jQuery.ajaxSync({
      url: "test.php",
      success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); }
   });
   jQuery.ajaxSync({
      url: "test.php",
      success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); }
   });
});
</script>
<ul style="position: absolute; top: 5px; right: 5px;"></ul>

 */
/*
 * Queued Ajax requests.
 * A new Ajax request won't be started until the previous queued 
 * request has finished.
 */
jQuery.ajaxQueue = function(o){
   var _old = o.complete;
   o.complete = function(){
      if ( _old ) _old.apply( this, arguments );
      jQuery([ jQuery.ajaxQueue ]).dequeue( "ajax" );
   };

   jQuery([ jQuery.ajaxQueue ]).queue("ajax", function(){
      jQuery.ajax( o );
   });
};

/*
 * Synced Ajax requests.
 * The Ajax request will happen as soon as you call this method, but
 * the callbacks (success/error/complete) won't fire until all previous
 * synced requests have been completed.
 */
jQuery.ajaxSync = function(o){
   var fn = jQuery.ajaxSync.fn, data = jQuery.ajaxSync.data, pos = fn.length;
   
   fn[ pos ] = {
      error: o.error,
      success: o.success,
      complete: o.complete,
      done: false
   };

   data[ pos ] = {
      error: [],
      success: [],
      complete: []
   };

   o.error = function(){ data[ pos ].error = arguments; };
   o.success = function(){ data[ pos ].success = arguments; };
   o.complete = function(){
      data[ pos ].complete = arguments;
      fn[ pos ].done = true;

      if ( pos == 0 || !fn[ pos-1 ] )
         for ( var i = pos; i < fn.length && fn[i].done; i++ ) {
            if ( fn[i].error ) fn[i].error.apply( jQuery, data[i].error );
            if ( fn[i].success ) fn[i].success.apply( jQuery, data[i].success );
            if ( fn[i].complete ) fn[i].complete.apply( jQuery, data[i].complete );

            fn[i] = null;
            data[i] = null;
         }
   };

   return jQuery.ajax(o);
};

jQuery.ajaxSync.fn = [];
jQuery.ajaxSync.data = [];



