/*
 * (c) Author: Frolikov I. Yu.
 * 
 * function stream (fn)                         - функция управления потоками
 * function ajax (param,data,success)           - Функция создания ajax запроса
 * function jqueryAjaxViewStream(htmlFlag)      - Функция отображения состояния запросов
 */

/*
 * Системные переменные
 */
var jqueryAjaxStreamFlag = false;       // Флаг занятости потока
var jqueryAjaxStream = [];              // Массив возвращаемых значений потоку

/*
 * Параметры настройки
 */
var jqueryAjaxStreamTimeoutLimit = 100; // Время простоя потока, мс

/*
 * Функция управления потоками
 */
function stream(fn)
{
        if (jqueryAjaxStreamFlag == false)
        {
                jqueryAjaxStreamFlag = true;
                fn();
        } else {
                setTimeout(function(){fn()},jqueryAjaxStreamTimeoutLimit);
        }
}

/*
 * Функция создания ajax запроса
 */
function ajax(param,success,data)
{
        var streamNum = Math.random();
        while (jqueryAjaxStream[streamNum] != undefined)
        {
                streamNum = Math.random();
        }
        jqueryAjaxStream[streamNum] = false;
        
        
        var ajaxParam = [];
        
        // Тип
        if (param['type'] != undefined)
        {
                ajaxParam['type'] = param['type'];
        } else {
                ajaxParam['type'] = 'POST';
        }
        
        // Сслыка
        if (param['url'] != undefined)
                ajaxParam['url'] = param['url'];
        else
                return false;
        
        // Переменные
        if (data != undefined)
        {
                ajaxParam['data'] = data;
        }
        
        // Удачное завершение
        if (success != undefined)
        {
               ajaxParam['success'] = function(msg) {
                       jqueryAjaxStream[streamNum] = msg;
                       jqueryAjaxStreamFlag = false;
                       success(msg);
               }
        } else {
               ajaxParam['success'] = function(msg) {
                       jqueryAjaxStream[streamNum] = msg;
                       jqueryAjaxStreamFlag = false;
               }
        }
        
        //dump(ajaxParam);
        var fn = function(e)
        {
                $.ajax(ajaxParam);
        }
        
        stream(fn);
        
        return streamNum;
}

/*
 * Функция отображения состояния запросов
 */
function jqueryAjaxViewStream(htmlFlag)
{
        if (htmlFlag == undefined)
        {
                var postfix = '<br />';
        } else {
                var postfix = "\r\n";
        }
        
        str = '';
        for (key in jqueryAjaxStream)
        {
                str = str + key + ' => ' + jqueryAjaxStream[key] + postfix;
        }
        
        return str;
}
