/*
    модуль для аякс запросов
    разработан crocodile
    для работы необходимо заполнять очередь загрузки:
        itm = new loadList(<аякс запрос>, <имя контейнера>);
    <аякс запрос> - запрос который необходимо выполнить
    <имя контейнера> - имя HTML контейнера который будет заполнен после обработки этого запроса(восновном div).
        poll_list.push(itm);
     помещения запроса в стек.
        load_itms();
     запуск обработки запроса.
        get_menu()
     возвращает хтмл меню для управленияем отработаных страниц
*/
var sUrl = "body/main.php";           //адрес для обработки
function loadList(queri, scr){    //элемент контейнера аякс запросов
    this.scren_id =  scr;   //имя контейнера дял вывода опроса
    this.poll_queri = queri;      //аякс запрос(в виде пост запроса)
};

var poll_list = new Array();  //контейнер для аякс запросов
var load_mute = false; //флаг занятости загрузки
var cur_itm;    //текущий элемент контейнера
var scr_back  = new Array(); //массив хронящий предидущие значения экранов
var load_text = new String; //текст выводимый в окно во время загрузки.
//функция возвращает экземпляр класса XMLHttpRequest
function getHTTPRequestObject() {
    var xmlHttpRequest;
    if (typeof ActiveXObject != 'undefined') {
        xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
    } else if (typeof XMLHttpRequest != 'undefined') {
        xmlHttpRequest = new XMLHttpRequest();
    } else {
        xmlHttpRequest = false;
    }

    return xmlHttpRequest;
}
//-----------------------------------------------------------------------------
var httpRequester = getHTTPRequestObject(); //Рабочий экземпляр класса XMLHttpRequest

var READY_STATE_COMPLETE=4;

    //CallBack-функция. Выводит полученные асинхронно данные или сообщение об ошибке
function processResponse() {
    if (httpRequester.readyState == READY_STATE_COMPLETE && load_mute) {
        if (httpRequester.status == 200) {
            printToPage (httpRequester.responseText);
        } else {
            var message = "Problem retrieving data. requestStatus="+httpRequester.status+". Message="+httpRequester.statusText;
            message = 'Не удалось получить ответ от сервера.<br>Попробуйте обновить страницу через некоторое время.';
            printToPage ("<font color=\"red\">"+message+"</font>");
        }
        load_mute = false;
        setTimeout('proc_load()',100);
    }
}
//-----------------------------------------------------------------------------
//выполняет асинхронный GET
function makeAJAXCall(ajaxUrl){
    if (httpRequester) {
        httpRequester.open("GET", ajaxUrl, true);
        httpRequester.onreadystatechange = processResponse;
        httpRequester.send(null);
    }
}

//Выводим переданный HTML в элемент с id="result"
function printToPage(value){
    resultDiv = document.getElementById(cur_itm.scren_id);
    resultDiv.innerHTML = value;
    if(scr_back[cur_itm.scren_id] != null ){
        scr_back[cur_itm.scren_id][0]++;
        scr_back[cur_itm.scren_id].push(Array(value, cur_itm.poll_queri));
        switch (scr_back[cur_itm.scren_id][-1][0]) {
            case 1:
            break;
            case 2:
                ajMenu = document.getElementById(scr_back[cur_itm.scren_id][-1][1]);
                ajMenu.innerHTML = '';
                for( i=1; i<=scr_back[cur_itm.scren_id][0]; i++) {
                    if(!(i%20))
                        ajMenu.innerHTML += '<br>';
                    ajMenu.innerHTML += '<a href="javaScript:ajax_nam('+i+', \''+cur_itm.scren_id+'\');">'+i+'</a>&nbsp;';
                }
            break
        }
    }
    //выполняем инит для модуля
    initMod = document.getElementById('initiLoadedModule');
    if(initMod!=null) {
        initScript = initMod.value;
        eval(initScript);
    }
    //initiLoadedModule();
}
//-----------------------------------------------------------------------------
//установка куки(вроде даже не пригодилась)
function set_cookie(name,value,days) {
        if(days) {
                var date=new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires="; expires="+date.toGMTString();
        }
        else expires="";
        document.cookie=name+"="+value+expires+"; path=/";
}
//-----------------------------------------------------------------------------
//обработчик очереди запросов
function proc_load(){
    if(poll_list.length>0)
        if(load_mute == true){
            return 2;
        }else{
            cur_itm = poll_list.shift();
            if(cur_itm!=null){
                window.location = "#"+cur_itm.poll_queri;
                makeAJAXCall(sUrl+'?'+cur_itm.poll_queri);
                load_mute = true;
                if( load_text.length>1 ){
                    var div = document.getElementById(cur_itm.scren_id);
                    div.innerHTML = load_text;
                }
            }else
                return 1;
        }
    return 0;
}
//-----------------------------------------------------------------------------
//запускает обработку очереди запросов
function load_itms(){
    setTimeout('proc_load()',100);
} //*/
//-----------------------------------------------------------------------------
//возвращает хтмл меню для управленияем отработаных страниц
function get_menu(scr, type, menuScr){
    scr_back[scr] = new Array();
    scr_back[scr][0] = 0;
    scr_back[scr][-1] = Array(type, menuScr) ;
    var menu = '';
    switch (type){
        case 1:
            menu += '<input type=image src="img/back.gif" name="back" onClick="javaScript:ajax_back(\''+scr+'\')">';
            menu += '<input type=image src="img/forward.gif" name="forward" onClick="javaScript:ajax_forward(\''+scr+'\')">';
            menu += '<input type=image src="img/stop.gif" name="stop" onClick="javaScript:ajax_stop(\''+scr+'\')">';
            menu += '<input type=image src="img/reload.gif" name="reload" onClick="javaScript:ajax_reload(\''+scr+'\')">';
        break;
        case 2:
            menu += '<- ->';
        break;
    }
    return menu;
}
//-----------------------------------------------------------------------------
function ajax_back(scr){
    if(scr_back[scr] != null ){
        if(scr_back[scr][0]>1){
            scr_back[scr][0]--;
            resultDiv = document.getElementById(scr);
            resultDiv.innerHTML = scr_back[scr][ (scr_back[scr][0]) ][0];
        }
    }
}
//-----------------------------------------------------------------------------
function ajax_forward(scr){
    if(scr_back[scr] != null ){
        if(scr_back[scr][0]<scr_back[scr].length-1){
            scr_back[scr][0]++;
            resultDiv = document.getElementById(scr);
            resultDiv.innerHTML = scr_back[scr][ (scr_back[scr][0]) ][0];
        }
    }
}
//-----------------------------------------------------------------------------
function ajax_stop(scr){
    load_mute = false;
    var poll_list = new Array();
    resultDiv = document.getElementById(scr);
    resultDiv.innerHTML = scr_back[scr][ (scr_back[scr][0]) ][0];
}
//-----------------------------------------------------------------------------
function ajax_reload(scr){
    if(scr_back[scr] != null ){
        itm = new loadList( scr_back[scr][ (scr_back[scr].length)-1 ][1], scr);
        poll_list.push(itm);
        load_itms();
    }
}
//-----------------------------------------------------------------------------
function ajax_nam(n, scr){
    if(scr_back[scr] != null ){
        resultDiv.innerHTML = scr_back[scr][n][0];
    }
}
//-----------------------------------------------------------------------------

   //бесполезная функция
    function xexe(itm){
        var rez = '';
        for(i in itm){
            rez += i+' = '+itm[i]+'<br>';
        }
        resultDiv = document.getElementById('aaa');
        resultDiv.innerHTML = rez;
    }
