﻿
var ajax_debug_mode = false;
function AJAX_DEBUG(text) {
    if (ajax_debug_mode)
        alert(text);
}

function XMLHTTPObject() {
    var xmlhttp;

    if (window.ActiveXObject) {
        // Instantiate the latest Microsoft ActiveX Objects
        if (_XML_ActiveX) {
            xmlhttp = new ActiveXObject(_XML_ActiveX);
        } else {
            // loops through the various versions of XMLHTTP to ensure we're using the latest
            var versions = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP",
			"Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0",
			"Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0"];

            for (var i = 0; i < versions.length; i++) {
                try {
                    // Try and create the ActiveXObject for Internet Explorer, if it doesn't work, try again.
                    xmlhttp = new ActiveXObject(versions[i]);
                    if (xmlhttp) {
                        var _XML_ActiveX = versions[i];
                        break;
                    }
                }
                catch (e) {
                    // TRAP
                };
            }
            ;
        }
    } // Well if there is no ActiveXObject available it must be firefox, opera, or something else

    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    }

    return xmlhttp;
}

var f = true;
function AJAX_ACTIONS(url, Action, div, Event, AllowReAjax) {
    if (f) {
        f = AllowReAjax;
        var xmlhttp = XMLHTTPObject();

        xmlhttp.open(Action, url, true)
        xmlhttp.onreadystatechange = function() {
            AJAX_LOAD_PAGE(xmlhttp, div, Event)
        }

        var sendf = Event + "=1";
        if (Action == "POST") {
            var fields = new Array();

            //loop through form elements and retrieve field NAMEs and Values
            for (var x = 1; x < eval("document.forms[0].elements.length"); x++) {
                // join them into a string.
                if (document.forms[0].elements[x].id == "__VIEWSTATE") {
                    //avoid
                }
                else if (document.forms[0].elements[x].type == "select-multiple") {
                    var tempSelectedValues = "";
                    for (var k = 0; k <= document.forms[0].elements[x].options.length - 1; k++) {
                        if (document.forms[0].elements[x].options[k].selected)
                            tempSelectedValues += document.forms[0].elements[x].options[k].value + ",";
                    }
                    eval("fields.push(document.forms[0].elements[x].id+'='+tempSelectedValues)");
                }
                else if (document.forms[0].elements[x].type == "checkbox") {
                    if (document.forms[0].elements[x].checked)
                        eval("fields.push(document.forms[0].elements[x].id+'=1')");
                    else
                        eval("fields.push(document.forms[0].elements[x].id+'=0')");
                }
                else if (document.forms[0].elements[x].type == "radio") {
                    if (document.forms[0].elements[x].checked)
                        eval("fields.push(document.forms[0].elements[x].id+'=1')");
                    else
                        eval("fields.push(document.forms[0].elements[x].id+'=0')");
                }
                else {
                    if (document.forms[0].elements[x].type != "button") {
                        var elValue = "";
                        if (document.forms[0].elements[x].value != null) {
                            elValue = document.forms[0].elements[x].value;
                            elValue = replaceAll(elValue, '&', '%26');
                            elValue = replaceAll(elValue, '+', '%2b');
                        }
                        eval("fields.push(document.forms[0].elements[x].id + '=' + elValue )");
                    }
                }
            }

            //sendf looks like "username=myusername&password=mypass"
            if (document.forms[0].elements.length > 1) {
                sendf += "&" + fields.join('&');
                AJAX_DEBUG(sendf);
            }

            xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        }

        xmlhttp.send(sendf);

        AJAX_PRE_LOAD_PAGE(div, AllowReAjax);
    }
}

function AJAX_PRE_LOAD_PAGE(div, AllowReAjax) {
    if (div != null) {
        //		div.innerHTML = '<img src="images/system/loading.gif" alt="" />';
        div.innerHTML = '<center><font class="formlabel">Loading data...</font></center>';
        div.style.display = "block";
    }

    if (!AllowReAjax) {
        EnableDisablePage(true);
    }
}

function AJAX_LOAD_PAGE(xmlhttp, div, Event) {
    if (xmlhttp.readyState == 4) {
        Error = false;

        if (xmlhttp.status == 200 || window.location.href.indexOf("http") == -1) {
            Error = false;
            results = "";
            AJAX_DEBUG(div);
            AJAX_DEBUG(xmlhttp.responseText);
            results = xmlhttp.responseText; // xmlhttp.responseXML;
            if (div != null) {
                div.innerHTML = results;
            }
        } else {
            Error = true;
            results = "";
            results += "<table width='100%' border='0' cellpadding='2' cellspacing='1'><tr><td class='formlabel' align='center'>";
            results += "An unknown error has occured";
            results += "</td></tr></table>";
            if (div != null)
                div.innerHTML = results;
        }

        f = true; // re activate the AJAX function

        EnableDisablePage(false);

        if (Event.indexOf("insert") >= 0) { eval("ShowMessages_" + Event + "(results, Event);") }
        if (Event.indexOf("update") >= 0) { eval("ShowMessages_" + Event + "(results, Event);") }
        if (Event.indexOf("delete") >= 0) { eval("ShowMessages_" + Event + "(results, Event);") }
        if (Event.indexOf("relations") >= 0) { eval("ShowRelations_" + Event + "(results, Event);") }
        if (Event.indexOf("execute") >= 0) { ShowExecuteMessages(results, Event); }
    }
}

function replaceAll(str, from, to) {
    var idx = str.indexOf(from);

    while (idx > -1) {
        str = str.replace(from, to);
        idx = str.indexOf(from);
    }

    return str;
}

function EnableDisablePage(action) {
    myDocumentElements = document.getElementsByTagName("select");

    for (j = 0; j < myDocumentElements.length; j++) {
        myDocumentElements.item(j).disabled = action;
    }
}
