
////////////////////////////////////////////////////////////////////////////////////////////////////
// XML Loading

function loadXMLDocument(url, args, resultCallback, errorCallback)
{ 
    var req = createXMLHttpRequest();
    if (!req)
    {
        errorCallback(-1);
        return null;
    }
    
    req.onreadystatechange = function(event)
    {
        if (req.readyState == 4)
        {
            if (req.status == 200 && resultCallback)
                resultCallback(req.responseXML);
            else if (errorCallback)
                errorCallback(req.status);
            
            // Prevent leak, cut circular reference
            try {req.onreadystatechange = null;} catch (ex) {}
        }
    };

    if (args)
        url += "?" + args;
    
    req.open("GET", url, true);
    req.send(null);

    return req;
}

function createXMLHttpRequest()
{
    var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
    for (var i = 0; i < prefixes.length; i++)
    {
        try {
            return new ActiveXObject(prefixes[i] + ".XmlHttp");
        } catch (ex) { }
    }

    try {
        return new XMLHttpRequest();
    } catch (ex) { }
    
    return null;
}
