function Ajax(url, handler)
{
    var ajax = new Object();
    ajax.xmlHttp=false;
    ajax.url = url;
    ajax.result = null;
    ajax.state = 0
    ajax.exec = handler
    ajax.send = function (vars, method)
    {
        if (ajax.xmlHttp)
        {
            try
            {
                url = ajax.url
                if (vars != null && method == "GET")
                {
                    url = url + "?" + vars;
                    vars = null;
                }
                ajax.xmlHttp.open(method, url, true);
                ajax.xmlHttp.onreadystatechange=ajax.handler;
                ajax.xmlHttp.send(vars)
            }
            catch (e)
            {
                alert("Couldn't connect to server:\n"+e.toString());
            }
        }
        return ajax
    }
    ajax.handler = function()
    {
        if(ajax.xmlHttp.readyState == 4)
        {
            if (ajax.xmlHttp.status==200)
            {
                try
                {
                    ajax.exec(ajax.xmlHttp);
                    ajax.state = 1
                }
                catch(e)
                {
                    alert("Can't read response: "+e.toString());
                }
            }
            else
            {
                alert (ajax.xmlHttp.statusText);
            }
        }
    }
    ajax.response = function(xmlHttp)
    {
        var xmlResponse = xmlHttp.responseXML;
        if(!xmlResponse || !xmlResponse.documentElement)
            throw("Неверная структура XML: \n "+xmlHttp.responseText);
        var rootNodeName = xmlResponse.documentElement.nodeName;
        if (rootNodeName == "parseerror") throw ("Invalid XML structure");
        return xmlResponse.documentElement;
    }
    
    try 
    {
        ajax.xmlHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        var XmlHttpVersions = new Array(
            "MSXML2.XMLHTTP.7.0",
            "MSXML2.XMLHTTP.6.0",
            "MSXML2.XMLHTTP.5.0",
            "MSXML2.XMLHTTP.4.0",
            "MSXML2.XMLHTTP.3.0",
            "MSXML2.XMLHTTP",
            "Microsoft.XMLHTTP"
        );
        for (var i=0; i<XmlHttpVersions.length && !ajax.xmlHttp; i++)
        {
            try
            {
                ajax.xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
            }
            catch (e) {}
        }
    }
    if (!ajax.xmlHttp)
        alert("Couldn't start Async Requests");
    return ajax;
}

