﻿function getAjax() {
    var C = null;
    try {
        C = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            C = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (sc) {
            C = null;
        }
    }
    if (!C && typeof XMLHttpRequest != "undefined") {
        C = new XMLHttpRequest();
    }
    return C;
}
var __ajax_cache_innerhtml = new Array();
function parseCommandsXML(xml) {
    var commands;
    if (xml.documentElement)
        commands = xml.documentElement.getElementsByTagName("*");
    else
        commands = xml.getElementsByTagName("*");
    for (var i = 0; i < commands.length; i++) {
        var command = commands[i];
        var id = command.getAttribute("id");
        switch (command.tagName) {
            case "innerHTML":
                var element = document.getElementById(id);
                var cacheId = command.getAttribute("cacheId");
                var content = command.firstChild ? command.firstChild.data : '';
                if (cacheId) {
                    var current = __ajax_cache_innerhtml[cacheId];
                    if (current == content)
                        break;
                    __ajax_cache_innerhtml[cacheId] = content;
                }
                element.innerHTML = content;
                scripts = content.split(/<\/?script[^>]*>/);
                if (scripts.length == 3)
                    eval(scripts[1]);
                break;
            case "value":
                var element = document.getElementById(id);
                var content = command.firstChild ? command.firstChild.data : '';
                element.value = content;
                break;
            case "eval":
                eval(command.firstChild.data);
                break;
            case "attribute":
                var element = document.getElementById(id);
                var attribute = command.getAttribute("attribute");
                var value = command.getAttribute("value");
                element.setAttribute(attribute, value);
                break;
            case "style":
                var element = document.getElementById(id);
                if (command.getAttribute("class")) {
                    element.className = command.getAttribute("class");
                    break;
                }
                var style = command.getAttribute("style");
                var value = command.getAttribute("value");
                eval('document.getElementById("' + id + '").style.' + style + '="' + value + '";');
                //				element.setAttribute("style", command.getAttribute("value"));
                break;
            default:
                //				alert("command: " + command.tagName);
        }
    }
}

function ajaxCommands(url, f) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    ajax.open("POST", url, true);
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                parseCommandsXML(ajax.responseXML);
                if (f)
                    f();
            } else {
                //				alert(ajax.status);
            }
        }
    }
    ajax.send(null);
    return false;
}

function ajaxReplace(url, id) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    var element = document.getElementById(id);
    if (!id)
        return true;
    ajax.open("POST", url, true);
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                element.innerHTML = ajax.responseText;
                scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                if (scripts.length == 3)
                    eval(scripts[1]);
            }
        }
    }
    ajax.send(null);
    return false;
}

function ajaxReplaceByForm(form, id, init, key, value) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    var element = document.getElementById(id);
    if (!id)
        return true;
    if (key)
        form[key].value = value;
    url = form.action;
    ajax.open("POST", url, true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                element.innerHTML = ajax.responseText;
                scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                if (scripts.length == 3)
                    eval(scripts[1]);
            }
        }
    }
    ajax.send(urlEncodeForm(form, init));
    return false;
}

function ajaxReplaceByFormUrl(form, id, url, init, key, value) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    var element = document.getElementById(id);
    if (!id)
        return true;
    if (key)
        form[key].value = value;
    ajax.open("POST", url, true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                element.innerHTML = ajax.responseText;
                scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                if (scripts.length == 3)
                    eval(scripts[1]);
            }
        }
    }
    ajax.send(urlEncodeForm(form, init));
    return false;
}

function ajaxPostCommands(form, url, f) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    if (!url)
        url = form.action;
    ajax.open("POST", url, true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                parseCommandsXML(ajax.responseXML);
                if (f)
                    f();
            } else {
                //				alert(ajax.status);
            }
        }
    }
    ajax.send(urlEncodeForm(form));
    return false;
}

function ajaxPost(form, init, key, value) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    if (key)
        form[key].value = value;
    url = form.action;
    ajax.open("POST", url, true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                parseCommandsXML(ajax.responseXML);
            } else {
                //				alert(ajax.status);
            }
        }
    }
    ajax.send(urlEncodeForm(form, init));
    return false;
}

function ajaxPostUrl(form, url, init, key, value) {
    var ajax = getAjax();
    if (!ajax)
        return true;
    if (key)
        form[key].value = value;
    ajax.open("POST", url, true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                parseCommandsXML(ajax.responseXML);
            } else {
                //				alert(ajax.status);
            }
        }
    }
    ajax.send(urlEncodeForm(form, init));
    return false;
}

function urlEncodeForm(form, init) {
    var post = "";
    var sep = "";
    if (init) {
        post = init;
        sep = "&";
    }
    for (var i = 0; i < form.length; i++) {
        var element = form.elements[i];
        if (element.name) {
            var type = element.type;
            if (type == 'radio' && !element.checked)
                continue;
            if (type == 'submit')
                continue;
            if (type == 'checkbox' && !element.checked)
                continue;
            if (type == 'file')
                continue;
            post += sep + form.elements[i].name + "=" + encodeURI(form.elements[i].value);
            sep = "&";
        }
    }
    return post;
}

