/* 
 * Объект Postman накапливает несколько AJAX-запросов
 * и отправляет их одним AJAX-запросом
 */



function Postman(wait)
{
    // счетчик запросов
    var counter=0;

    // здесь накапливаются запросы для отправки
    var box=[];

    // здесь отмечаются отправленные запросы
    var register={};

    // таймаут отправки всех запросов
    var timeout=null;

    // запрос бросается в ящик для последующей отправки
    this.drop = function(address, letter, callback) {
        box.push({
            "address"    :    address,
            "letter"    :    letter,
            "stamp"        :    "stamp_"+counter
        });
        register["stamp_"+counter] = callback;
        counter++;
        if(!timeout) {
            timeout=setTimeout(function(){
                post();
                box.length=0;
                timeout=null;
            }, wait);
        }
    }

    // отправляет все запросы
    function post()
    {
        $.ajax({
            type: "POST",
            dataType: "json",
            async: true,
            url: "/sites/osp/ajaxhandlers/postman.ajaxhandler.php",
            data: {
                "box"    :    box
            },
            success: function(msg) {
                deliver(msg.data.bag);
            }
        });
    }

    // доставляет ответы отправителям запросов
    function deliver(bag)
    {
        for(var envelope in bag) {
            register[bag[envelope]["stamp"]].call(bag[envelope]["letter"]);
        }
    }
}



