// ajaxUtil.js

var debug = false;
var responseTagName = "response";


function sendHttpRequest(method, url, params, cookie, callback) {
    var request;
    if (window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else if (window.ActiveXObject)
        request = new ActiveXObject("Msxml2.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;
    
    // Handle IE caching requests
    var rand = Math.random();
    if (fullURL.indexOf('?') >= 0)
    {
			fullURL += "&rand=" + rand;
    }
    else
    {
			fullURL += "?rand=" + rand;
    }

    request.open(method, fullURL, async);
    
    function calbackWrapper() {
        if (async && request.readyState == 4) {
            if (request.status == 200 && hasResponse(request))
                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);
    }
    
    request.send(body);
    if (!async && (request.readyState != 4
            || request.status != 200
            || !hasResponse(request))) {
        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 hasResponse(request) {
    var responseXML = request.responseXML;
    if (responseXML) {
        var docElem = responseXML.documentElement;
        if (docElem) {
            var tagName = docElem.tagName;
            if (tagName == responseTagName)
                return true;
        }
    }
    
    // Response text is okay too
    if (request.responseText)
			return true;
			
		return false;
}

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 disableAutoComplete(formName) {
    document.forms[formName].setAttribute("autocomplete", "off");
}

function getFormElem(formName, elemName) {
    return document.forms[formName].elements[elemName];
}

function getFormValue(formName, elemName) {
    return getFormElem(formName, elemName).value;
}

function setFormValue(formName, elemName, value) {
    getFormElem(formName, elemName).value = value;
}

function updateFormValue(xmlRoot, formName, elemName) {
    var xmlElem = xmlRoot.getElementsByTagName(elemName);
    if (xmlElem && xmlElem.length > 0) {
        var childNodes = xmlElem[0].childNodes;
        if (childNodes && childNodes.length > 0) {
            var value = "";
            for (var i = 0; i < childNodes.length; i++)
                if (childNodes[i].nodeValue)
                    value += childNodes[i].nodeValue;
            setFormValue(formName, elemName, value);
        }
    }
}
