var http_request = false;
var updateContainer = null;
var updateOverlayContainer = null;

function getXmlHttpObject(expectedMimeType)
{
    var new_http_request = null;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        new_http_request = new XMLHttpRequest();
        if (new_http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            new_http_request.overrideMimeType(expectedMimeType);
        }
    } else if (window.ActiveXObject) { // IE
        try {
            new_http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                new_http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    return new_http_request;
}

function ajaxPOSTHtml(url, parameters, container, overlaycontainer) {
    http_request = false;
    http_request = getXmlHttpObject("text/html");

    if (null == http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }

    updateContainer = container;
    updateOverlayContainer = overlaycontainer;
    http_request.onreadystatechange = updateContainerContents;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
    return true;
}

function ajaxGETHtml(url, container, overlaycontainer) {
    http_request = false;
    http_request = getXmlHttpObject("text/html");

    if (null == http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }

    updateContainer = container;
    updateOverlayContainer = overlaycontainer;
    http_request.onreadystatechange = updateContainerContents;
    http_request.open('GET', url, true);
    http_request.setRequestHeader("Content-type", "text/xhtml");
    http_request.setRequestHeader("Connection", "close");
    http_request.send(null);
    return true;
}

function ajaxSubmitForm(form, eventName, eventValue, container, overlaycontainer) {
    if ((null != form) && (null != eventName) && ("" != eventName) && (null != eventValue) && ("" != eventValue))
    {
        var url = form.action;
        if ((null == url) || ("" == url))
        {
            return false;
        }

        if (null != overlaycontainer)
        {
            overlaycontainer.style["display"] = "block";
        }

        var parameters = "";
        parameters = eventName + "=" + eventValue;

        var inputs = form.getElementsByTagName('input');
        for (var i=0; i<inputs.length; i++) {
            if (inputs[i].type == 'file') continue;
            if (parameters.length > 0)
            {
                parameters = parameters + "&";
            }
            if (inputs[i].type == 'checkbox')
            {
                parameters = parameters + inputs[i].name + "=" + inputs[i].checked;
            }
            else
            {
                parameters = parameters + inputs[i].name + "=" + inputs[i].value;
            }
        }

        var selects = form.getElementsByTagName('select');
        for (var i=0; i<selects.length; i++) {
            if (parameters.length > 0)
            {
                parameters = parameters + "&";
            }
            parameters = parameters + selects[i].name + "=" + selects[i].value;
        }
        //alert(parameters);
        //alert(url);

        return ajaxPOSTHtml(url, parameters, container, overlaycontainer);
    }
    return false;
}

/*function ajaxSubmitFileUploadForm(form, eventName, eventValue, container, overlaycontainer) {
    if ((null != form) && (null != eventName) && ("" != eventName) && (null != eventValue) && ("" != eventValue))
    {
        var url = form.action;
        if ((null == url) || ("" == url))
        {
            return false;
        }

        if (null != overlaycontainer)
        {
            overlaycontainer.style["display"] = "block";
        }

        var parameters = "";
        parameters = eventName + "=" + eventValue;

        var filePath = "";
        var fileSize = 0;
        var fileName = "";

        var inputs = form.getElementsByTagName('input');
        for (var i=0; i<inputs.length; i++) {
            if (inputs[i].type == 'file')
            {
                //Convert file path to appropriate format
                this.filePath = document.getElementById("file").value.replace(/\\/g, "\\\\");

                var fso = new ActiveXObject('Scripting.FileSystemObject');
                if (null == fso)
                {
                    alert('Cannot create FileSystemObject instance');
                    if (null != overlaycontainer) {
                        overlaycontainer.style["display"] = "none";
                    }
                    return false;
                }

                if (!fso.FileExists(this.filePath))
                {
                    alert("File not found.");
                    if (null != overlaycontainer) {
                        overlaycontainer.style["display"] = "none";
                    }
                    return false;
                }

                var f = fso.GetFile(this.filePath);
                if (null == f)
                {
                    alert("Failed to open file.");
                    if (null != overlaycontainer) {
                        overlaycontainer.style["display"] = "none";
                    }
                    return false;
                }
                fileSize = f.size;
                fileName = f.Name;
            }
        }

        //alert(parameters);
        //alert(url);

        return ajaxPOSTHtml(url, parameters, container, overlaycontainer);
    }
    return false;
}*/

function ajaxRequestPage(url, container, overlaycontainer) {
    if (null != overlaycontainer)
    {
        overlaycontainer.style["display"] = "block";
    }

    return ajaxGETHtml(url, container, overlaycontainer);
}

function updateContainerContents()
{
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            if (null != updateContainer) {
                var result = http_request.responseText;
                try
                {
                    eval(result);
                }
                catch (err)
                {
                    updateContainer.innerHTML = result;
                }
                if (null != updateOverlayContainer)
                {
                    updateOverlayContainer.style["display"] = "none";
                }
            }
        } else {
            if (null != updateContainer) {
                updateContainer.innerHTML = 'There was a problem with the request.';
            }
            if (null != updateOverlayContainer) {
                updateOverlayContainer.style["display"] = "none";
            }
            alert('There was a problem with the request.');
        }
    }
}

