﻿// AJAX script handles AJAX submissions of text/dropdown forms
var global_requester = null;
var global_currentDiv = null;
var global_timerDiv = null;

// Primary function is called by the page; other functions are internally managed
function globalDivUpdate(targetElementID, timerElementID, targetURL, sourceForm, hideSource) {
    if (document.getElementById && !document.layers) {
        if (global_timerDiv != null) {
            // clear previous timer div if it was still running
            global_timerDiv.style.display = 'none';
        }
        if (global_currentDiv != null) {
            // display it if it was hidden
            global_currentDiv.style.display = 'block';
        }

        // identify the div to update
        global_currentDiv = document.getElementById(targetElementID);

        // if we have a timer div also, display it 
        if (timerElementID != '') {
            global_timerDiv = document.getElementById(timerElementID);
            global_timerDiv.style.display = 'block';
        }
        if (hideSource) {
            global_currentDiv.style.display = 'none';
        }

        // then call the function to update this div
        globalUpdateDynamic(targetURL, sourceForm);
        return (false);
    }
    //return true, allow follow-through on any standard URL instead
    return (true);
}

function globalUpdateDynamic(targetURL, sourceForm) {
    /* Check for running connections */
    var formElements = '';
    if (global_requester != null && global_requester.readyState != 0 && global_requester.readyState != 4) {
        global_requester.abort();
    }
    try {
        global_requester = new XMLHttpRequest();
    }
    catch (error) {
        try {
            global_requester = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (error) {
            global_requester = null;
            return false;
        }
    }
    global_requester.onreadystatechange = globalStateChangeReceipt;

    // Get the form elements
    if (sourceForm != null) {
        for (i = 0; i < sourceForm.elements.length; i++) {
            if (formElements != '') { formElements += '&'; }
            formElements += encode(sourceForm.elements[i].name) + '=' + encode(sourceForm.elements[i].value);
        }
    }

    // Post the form values
    if (formElements != '') {
        global_requester.open("GET", targetURL + "?" + formElements);
        global_requester.send(formElements);
    }
    else {
        global_requester.open("GET", targetURL);
        global_requester.send(null);
    }
    return true;
}

function globalStateChangeReceipt() {
    // If XMLHR object has finished retrieving the data
    if (global_requester.readyState == 4) {
        // If the data was retrieved successfully
        try {
            if (global_requester.status == 200) {
                globalProcComplete();
            }
            // IE returns a status code of 0 on some occasions, so ignore this case
            else if (global_requester.status != 0) {
                alert("There was an error while retrieving the URL: " + global_requester.statusText);
                //empty timer div
                global_timerDiv.style.display = 'none';
                global_currentDiv.style.display = 'block';
            }
        }
        catch (error) {
            //empty timer div
            global_timerDiv.style.display = 'none';
            global_currentDiv.style.display = 'block';
        }
    }
    return (true);
}

function globalProcComplete() {
    if (global_requester.responseText != '') {
        //handle update
        global_currentDiv.innerHTML = global_requester.responseText;
    }
    global_currentDiv.style.display = 'block';
    //empty timer div
    if (global_timerDiv != null) {
        global_timerDiv.style.display = 'none';
    }
}
