﻿/**
* Konstruktor
*/
var XmlLoader = new function() {
    this.timerId = null;
}

XmlLoader.anchorId = null;

XmlLoader.loadXml = function(controltyp, refid, queryparams, formToPost, json, includeFormValues, loadedFunction, anchorId) {
    this.anchorId = anchorId;

    if ($get('ajaxprocess') != null) {
        $get('ajaxprocess').style.visibility = 'visible';
    }

    //Beim SearchFormControl die Textboxen auf disable setzen, damit während des Requests keine Änderungen durchgeführt werden können.
    if (controltyp == 1) {
        for (i = 0; i < document.forms[0].elements.length; i++) {
            if (document.forms[0].elements[i].type == 'text' && document.forms[0].elements[i].value != '')
                document.forms[0].elements[i].disabled = true;
        }
    }

    wRequest = new Sys.Net.WebRequest();
    wRequest.set_url("/WebControls.aspx");
    wRequest.set_httpVerb("POST");

    var body = "";

    //Bei diesen werden die Werte gebraucht
    if (includeFormValues) {
        var viewstate = $get('__VIEWSTATE');

        if (viewstate != null) {
            viewstate.parentNode.removeChild(viewstate);
        }

        body += "controltyp=" + controltyp + "&";

        var form;
        if (formToPost == null) {
            form = document.forms[0];
        }
        else {
            form = formToPost;
        }
        for (i = 0; i < form.elements.length; i++) {

            if (form.elements[i].type == 'text' && form.elements[i].value != '') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].type == 'hidden' &&
                    (form.elements[i].value != '' || form.elements[i].name == 'av-rgebiet')) {
                if (form.elements[i].name != 'json')
                    body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            if (form.elements[i].type == 'password' && form.elements[i].value != '') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].type == 'radio' && form.elements[i].checked && form.elements[i].value != '') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].type == 'checkbox' && form.elements[i].checked) {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].tagName == 'TEXTAREA') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].tagName == 'SELECT') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
            else if (form.elements[i].tagName == 'SELECT') {
                body += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
            }
        }
    }
    else {
        body += "controltyp=" + controltyp;
    }

    if (json != null) {
        body += "&json=" + Sys.Serialization.JavaScriptSerializer.serialize(json);
    }

    if (refid != null)
        body += "&refid=" + refid

    if (queryparams != null)
        body += "&" + queryparams

    if (body.startsWith("&"))
        body = body.substring(1);


    wRequest.set_body(body);
    wRequest.get_headers()["Content-Length"] = body.length;
    if (typeof loadedFunction == "function") {
        wRequest.add_completed(loadedFunction);
    }
    wRequest.invoke();
}

XmlLoader.loadXmlWithTimer = function(controltyp, refid, queryparams, formToPost, json, includeFormValues, loadedFunction, timeout, event) {

    activeElement = GetActiveElementID();

    if (event != null) {
        if (event.keyCode == 9 || event.keyCode == 44) return null;                  //Tab und Druck soll keinen Ajax-Request auslösen
    }

    timer = setTimeout(function() { XmlLoader.loadXml(controltyp, refid, queryparams, formToPost, json, includeFormValues, loadedFunction, null); }, timeout);
    return timer;
}

XmlLoader.onLoadedXml = function(executor, eventArgs) {

    if (executor.get_responseAvailable()) {
        var doc = executor.get_xml();
        var id;
        var style;
        var innerHTML = '';

        if (doc != null)            //Response war XML-wohlgeformt
        {
            id = doc.documentElement.getAttribute('id');
            style = doc.documentElement.getAttribute('style');
            innerHTML = GetInnerXml(doc.documentElement);
        }
        else                       //Response war nicht XML-wohlgeformt 
        {
            var divhelp = document.createElement("div");                //Trick mit div
            divhelp.innerHTML = executor.get_responseData();
            if (divhelp.innerHTML != '') {
                // Problem mit FireFox: firstChild kann beim FireFox auch ein Textknoten sein; deshalb kann hier nicht firstChild verwendet werden.
                //id = divhelp.firstChild.getAttribute('id');
                var firstchild;
                for (i = 0; i < divhelp.childNodes.length; i++) {
                    if (divhelp.childNodes[i].nodeType == 1) {
                        firstchild = divhelp.childNodes[i];
                        break;
                    }
                }

                if (firstchild != null) {
                    id = firstchild.getAttribute('id');
                    style = firstchild.getAttribute('style');
                    innerHTML = firstchild.innerHTML;
                }
            }

        }

        //doktochead ermitteln
        var doktochead = "";
        if (id == 'doktoc') {
            try {
                //tocbanner = $get('doktoc').getElementsByTagName("h1")[0].innerHTML;
                doktochead = $get('doktochead').innerHTML;
            }
            catch (e) { }
        }

        var target = $get(id);
        if (target != null && innerHTML != '') {
            target.innerHTML = innerHTML;
            if (style != null) {
                if (style.cssText == null) {
                    target.style.cssText = style;
                }
                else {
                    target.style.cssText = style.cssText;
                }
            }
        }
        else if (this.anchorId != null && innerHTML != '') // Das element existiert noch nicht auf der Seite, es wurde aber eine Position angegeben
        {
            target = $get(this.anchorId);

            var div = document.createElement("div");
            div.id = id;
            div.innerHTML = innerHTML;
            if (style != null) {
                if (style.cssText == null) {
                    div.style.cssText = style;
                }
                else {
                    div.style.cssText = style.cssText;
                }
            }

            if (target.nextSibling) {
                target.parentNode.insertBefore(div, target.nextSibling);
            } else {
                target.parentNode.appendChild(div);
            }
        }
        else if (innerHTML != '')                //Das Element gibt es noch nicht auf der Seite, dann Erstellen und zur Form hinzufügen
        {
            var div = document.createElement("div");
            div.id = id;
            div.innerHTML = innerHTML;
            if (style != null) {
                if (style.cssText == null) {
                    div.style.cssText = style;
                }
                else {
                    div.style.cssText = style.cssText;
                }
            }

            if (id == 'sendmail')           //SendMail-Div als erstes Child von dokument
            {
                var dokument = $get('dokument');
                if (dokument != null)
                    dokument.insertBefore(div, dokument.firstChild);
            }
            else {
                document.forms[0].appendChild(div);
            }
        }
        else {
            //alert('Fehler aufgetreten');
        }

        this.anchorId = null;

        // Bei LinkNote prüfen, ob Inhalt vorhanden ist
        // wenn nein, das Image des Buttons austauschen
        if (executor._webRequest._body.startsWith('controltyp=11'))
            TestLinkNoteContent();
    }
    else {
        this.anchorId = null;

        if (executor.get_timedOut())
            alert("Timed Out");
        else
            if (executor.get_aborted())
            alert("Aborted");
    }

    if (activeElement != "") {
        SetFocus(activeElement);
    }

    if ($get('ajaxprocess') != null) {
        $get('ajaxprocess').style.visibility = 'hidden';
    }
}
