function AJAXInteraction(url, callback, id) {

    var req = init();
    req.onreadystatechange = processRequest;

    function init() {
        var requestObj;
        if (window.XMLHttpRequest) {
            requestObj = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            requestObj = new ActiveXObject("Msxml2.XMLHTTP");
            if (!requestObj) {
                requestObj = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return requestObj;
    }

    function processRequest() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                if (callback) callback(req.responseText, id);
            }
            else if (req.status == 400) {
                alert('Неправильный запрос');
            }
            else if (req.status == 500) {
                alert('Внутреняя ошибка на сервере');
            }
            else if (req.status == 503) {
                var time = req.getResponseHeader('Retry-After') * 1000;
                alert('Сервер перегружен. Запрос будет повторен через: ' + time + ' секунд');
                setTimeout(doPost(''), time);
            }
            else {
                alert('Ошибочный ответ сервера');
            }
            ;
        }
    }

    this.doGet = function() {
        req.open("GET", url, true);
        req.send();
    }

    this.doPost = function(body) {
        req.open("POST", url, true);
        if (window.opera)
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        else
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=Cp1251");
        req.send(body);
    }
}



