/**
 * 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.dequeue( jQuery.ajaxQueue, "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 = [];


