// ajaxUtil.js

var debug = true;

function sendHttpRequest(method, url, params, callback) {
    var request;
    if (window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else if (window.ActiveXObject)
        request = new ActiveXObject("Microsoft.XMLHTTP");
    else
        return null;

    if (method)
        method = method.toUpperCase();
    else
        method = "GET";
    var fullURL = url;
    if (params && method == "GET")
        fullURL += "?" + buildQueryString(params);
    var async = false;
    if (callback)
        async = true;
    request.open(method, fullURL, async);

    function calbackWrapper() {
        if (async && request.readyState == 4) {
            if (request.status == 200)
                callback(request);
            else
                reportError(request, url, params);
        }
    }
    if (async)
        request.onreadystatechange = calbackWrapper;

    var body = null;
    if (method == "POST") {
        request.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");
        if (params)
            body = buildQueryString(params);
    }

    if (body == null){
    	request.send("");
    }else{
    	request.send(body);
    }
    if (!async && (request.readyState != 4
            || request.status != 200)) {
        reportError(request, url, params);
        return null;
    }
    return request;
}

function buildQueryString(params) {
    var query = "";
    for (var i = 0; i < params.length; i++) {
        query += (i > 0 ? "&" : "")
            + escape(params[i].name) + "="
            + escape(params[i].value);
    }
    return query;
}

function reportError(request, url, params) {
    if (debug) {
        if (request.status != 200) {
            if (request.statusText)
            {
                alert(request.statusText);
			}else
			{
//                alert("HTTP Status: " + request.status);
          	}
        } else
            alert("Response Error");
        if (params)
            url += "?" + buildQueryString(params);
        document.location = url;
    }
}

function abortRequest(request) {
    function doNothing() {
    }
    request.onreadystatechange = doNothing;
    request.abort();
    delete feedRequest;
}

function escapeXML(content) {
    if (content == undefined)
        return "";
    if (!content.length || !content.charAt)
        content = new String(content);
    var result = "";
    var length = content.length;
    for (var i = 0; i < length; i++) {
        var ch = content.charAt(i);
        switch (ch) {
            case '&':
                result += "&amp;";
                break;
            case '<':
                result += "&lt;";
                break;
            case '>':
                result += "&gt;";
                break;
            case '"':
                result += "&quot;";
                break;
            case '\'':
                result += "&apos;";
                break;
            default:
                result += ch;
        }
    }
    return result;
}

function parse(xml) {
    var dom;
    try {
    	if(window.ActiveXObject){
    		dom = new ActiveXObject("Microsoft.XMLDOM");
    	}else{
    		dom = document.implementation.createDocument("","",null);
    	}

        dom.async = false;
        dom.loadXML(xml);
    } catch (error) {
        try {
            var parser = new DOMParser();
            dom = parser.parseFromString(xml, "text/xml");
            delete parser;
        } catch (error2) {
            if (debug)
                alert("XML parsing is not supported.");
        }
    }
    return dom;
}

function serialize(dom) {
    var xml = dom.xml;
    if (xml == undefined) {
        try {
            var serializer = new XMLSerializer();
            xml = serializer.serializeToString(dom);
            delete serializer;
        } catch (error) {
            if (debug)
                alert("DOM serialization is not supported.");
        }
    }
    return xml;
}