var g_ajax_on = true;
var timer = new Array;
var request = new Array;
var request_n = 0;

function CreateHTTP() {
    var http = null;

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        http = new ActiveXObject("Microsoft.XMLHTTP");
        try { http = new ActiveXObject("Msxml2.XMLHTTP"); }
        catch (e) {
            try { http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
        }
    }

    return http;
}

function AjaxRequest(url, params, AjaxHandler, AjaxHandler403, ajax_ind_id) {
    if (!g_ajax_on) return true;
    if (request[params] == 1) return true;

    var http = CreateHTTP();
    if (!http) return true;

    var ajax_ind = document.getElementById(ajax_ind_id);
    if (ajax_ind) { timer[params] = setTimeout("timer['" + url + "'] = null; ajax_ind_visible('" + ajax_ind_id + "')", 1000); }
    request[params] = 1;
    request_n++;

    http.open("POST", url, true);
    http.onreadystatechange = function() { HandleHTTPResponse(http, url, params, AjaxHandler, AjaxHandler403, ajax_ind_id); };
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.send(params);

    return false;
}

function ajax_ind_visible(ajax_ind_id) {
    document.getElementById(ajax_ind_id).style.visibility = 'visible';
    
}

function ajax_ind_hidden(ajax_ind_id) {
    document.getElementById(ajax_ind_id).style.visibility = 'hidden';
}

function HandleHTTPResponse(http, url, params, AjaxHandler, AjaxHandler403, ajax_ind_id) {
    if (http.readyState != 4) return;

    var ajax_ind = document.getElementById(ajax_ind_id);
    if (ajax_ind) {
        if (request_n == 1) ajax_ind_hidden(ajax_ind_id);
        if (timer[params] && timer[params] != null) clearTimeout(timer[params]);
    }
    request[params] = 0;
    request_n--;

    if (http.status == 403 && AjaxHandler403) { AjaxHandler403(url, params); return; }
    if (http.status != 200) return;

    var xml_root = http.responseXML;
    var xml_doc = xml_root.documentElement;

    for (var i = 0; i < xml_doc.childNodes.length; i++) {
        var cur = xml_doc.childNodes[i];
        if (cur.nodeType != 1) continue;

        switch (cur.nodeName) {
            case 'Messages':
                //ParseMessagesHandler(cur);
                break;

            case 'Ajax':
                AjaxHandler(cur);
                break;

            default:
                continue;
        }
    }
}
