/**

* Simple and neat queue for AJAX requests.
*
* You push several at once and as soon as
* they all end, it will stop forever.
*
* Make sure to call #run only when you've
* finished adding all requests!
*
* Also, you can attach a `complete` callback,
* that will execute as soon as all requests
* were made!
*
* Thanks, jAndy! Source:
* http://stackoverflow.com/a/4785886
*/

var ajaxManager = (function() {

var requests = [];
var running  = false;

return {
        add:  function(opt) {
                if (!running)
                        requests.push(opt);
        },
        remove:  function(opt) {
                if (!running)
                        if( $.inArray(opt, requests) > -1 )
                                requests.splice($.inArray(opt, requests), 1);
        },
        clear: function() {
                if (running)
                        return;

                requests = [];
        },
        run: function() {
                var self = this;
                var completeCallback;

                if (requests.length) {
                        completeCallback = requests[0].complete;

                        requests[0].complete = function() {
                                if (typeof(completeCallback) === 'function')
                                        completeCallback();

                                requests.shift();
                                self.run.apply(self, []);
                        };

                        $.ajax(requests[0]);
                }
                else {
                        running = false;
                        if (typeof(self.complete) === 'function')
                                self.complete();
                }
        },
        stop:  function() {
                requests = [];
                clearTimeout(this.tid);
        }
};

}());