﻿
/*
 * 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.vServerRequest = function(o) {

    var ra = jQuery.vServerRequest.requestarray, data = jQuery.vServerRequest.requestdata, pos = ra.length;
    var dstamp = new Date().getTime();
    vLog("vServerRequest", "Adding request for " + o.url + " stamp " + dstamp);

    ra[pos] = {
        error: o.error,
        success: o.success,
        complete: o.complete,
        done: false,
        datestamp: dstamp
    };

    data[pos] = {
        error: [],
        success: [],
        complete: []
    };

    //add the timestamp into the data string
    //alert(o.data);
    var modifieddata = "{\"vnxtime\":" + dstamp + "," + o.data.substr(1, 9999);
    //alert(modifieddata);
    o.data = modifieddata;
    
    o.error = function() { data[pos].error = arguments; };
    o.success = function() {
        data[pos].success = arguments;
    };
    o.complete = function() {
        data[pos].complete = arguments;
        ra[pos].done = true;
        vLog("vServerRequest", "Request done for stamp " + ra[pos].datestamp);
        if (pos == 0 || !ra[pos - 1])
            for (var i = pos; i < ra.length && ra[i].done; i++) {

            if (ra[i].error) ra[i].error.apply(jQuery, data[i].error);
            if (ra[i].success) ra[i].success.apply(jQuery, data[i].success);
            if (ra[i].complete) ra[i].complete.apply(jQuery, data[i].complete);

            ra[i] = null;
            data[i] = null;
        }
    };

    return jQuery.ajax(o);
};

jQuery.vServerRequest.requestarray = [];
jQuery.vServerRequest.requestdata = [];

