/*
    клсасс работы с аякс запросами.
    разработчик crocodile
*/
function AJAXQueryC(url, loadText) {
    //запись хронящяя запрос
    function queryItmR(screenId, getQuery, postQuery) {
        this.screenId   = screenId;
        this.getQuery  = getQuery;
        this.postQuery = postQuery;
        this.endQuery  = false;
    }
    //тело конструктора
    var t = this;
    t.loadMutex = false; //флаг выполнения запросов
    t.queryList = Array(); //контейнер запросов
    t.queryURL = url;
    t.http_request = false;
    t.loadText = loadText; //текст выводимый во время загрузки
    t.curentQuery = null; //тукущий запрос
    t.http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        t.http_request = new XMLHttpRequest();
        if (t.http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            t.http_request.overrideMimeType('text/html');
         }
    } else if (window.ActiveXObject) { // IE
        try {
            t.http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                t.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!t.http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
//-----------------------------------------------------------------------------
    //методы
    //меотод возврата
    t.processResponse = function () {
        if (t.http_request.readyState == 4) {
            if (t.http_request.status == 200) {
                //alert(t.http_request.responseText);
                result = t.http_request.responseText;
                document.getElementById(t.curentQuery.screenId).innerHTML = result;
            } else {
                alert('Ну удалось получить ответ от сервера.');
            }
            t.curentQuery.endQuery = true;
            t.loadMutex = false;
            initMod = document.getElementById('initiLoadedModule');
            if(initMod!=null) {
                initScript = initMod.value;
                eval(initScript);
            }
            t.procLoad();
        }
    }
//-----------------------------------------------------------------------------
    //ajax запрос
    t.makeAJAXCall = function (queryItm) {
        url = t.queryURL+'?'+queryItm.getQuery;
        t.http_request.open('POST', url, true);
        t.http_request.onreadystatechange = t.processResponse;
        t.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        t.http_request.setRequestHeader("Content-length", queryItm.postQuery.length);
        t.http_request.setRequestHeader("Connection", "close");
        t.http_request.send(queryItm.postQuery);
    }
//-----------------------------------------------------------------------------
    //метод рисующийменю предыдущих запросов
    t.getMenu = function () {
        document.write('ajax menu');
    }
//-----------------------------------------------------------------------------
    t.procLoad = function () {
        if (!t.loadMutex && t.queryList.length>0) {
            t.curentQuery = t.queryList.shift();
            if (!t.curentQuery.endQuery) {
                t.loadMutex = true;
                window.location = "#"+t.curentQuery.getQuery;
                t.makeAJAXCall(t.curentQuery);
                if (t.loadText.length>0)
                    document.getElementById(t.curentQuery.screenId).innerHTML = t.loadText;
            } else {
                t.queryList.shift;
                if (t.queryList.length>0)
                    t.procLoad();
                else
                    t.loadMutex = false;
            }
        }
    }
//-----------------------------------------------------------------------------
    //метод заполняющий очередь ajax запросов
    t.addCall = function (screenId, getQuery, postQuery) {
        if (screenId == 'undefined')
            return;
        if (getQuery == 'undefined')
            getQuery = '';
        if (postQuery == 'undefined')
            postQuery = '';
        itm = new queryItmR(screenId, getQuery, postQuery);
        t.queryList.push(itm);
        if (!t.loadMutex)
            t.procLoad();
    }
//-----------------------------------------------------------------------------
    t.addCallFromItmList = function(screenId, getItms, postItms) {        query = '';
        var arg = '';
        while(arg = postItms.pop()) {
            var itm = document.getElementById(arg);
            switch (itm.type) {            	case 'checkbox':
            	    if (itm.checked) {            	        query += arg+'='+escape(itm.value)+'&';            	    } else {
            	        query += arg+'='+'&';            	    }
            	break;
            	case 'hidden':
            	case 'text':
            	    query += arg+'='+escape(itm.value)+'&';
            	break;
            	default:
            	break;
            }
        }
        var postQ = query;
        query = '';
        while(arg = getItms.pop()) {
            var itm = document.getElementById(arg);
            switch (itm.type) {
            	case 'checkbox':
            	    if (itm.checked) {
            	        query += arg+'='+escape(itm.value)+'&';
            	    } else {
            	        query += arg+'='+'&';
            	    }
            	break;
            	case 'hidden':
            	case 'text':
            	    query += arg+'='+escape(itm.value)+'&';
            	break;
            	default:
            	break;
            }
        }
        var getQ = query;
        t.addCall('workSpase', getQ, postQ);
    }
//-----------------------------------------------------------------------------
}

