﻿String.prototype.replaceAll = function(regExpression, replaceString) {
    var Str = this;
    while (Str.toString().indexOf(regExpression) != -1) {
        Str = Str.toString().replace(regExpression, replaceString);
    }
    return Str;
}

PrepareForm = function(e, ID, RequestSender, ShowProgress, ExtraTags) {
    var Container;
    var RequestXML = "";
    var Nodes = "";
    var RequestXMLTemplate = "<LifesLastNeeds>{Elements}</LifesLastNeeds>";
    var ElementTemplate = "<{Name}><![CDATA[{Value}]]></{Name}>";
    var CheckBoxElementTemplate = "<{Name} VALUE=\"{AttrValue}\"><![CDATA[{Value}]]></{Name}>";
    if (e == null) {
        if (ID == null) {
            Container = document.forms[0];
        }
        else {
            Container = document.getElementById(ID);
        }
    }
    else {
        Container = e
    }
    Elements = Container.getElementsByTagName("INPUT");
    for (var i = 0; i < Elements.length; i++) {
        if (Elements[i].type.toString().toUpperCase() == "CHECKBOX" || Elements[i].type.toString().toUpperCase() == "RADIO") {
            Nodes += (CheckBoxElementTemplate.replaceAll("{Name}", Elements[i].id.toString())).toString().replaceAll("{Value}", Elements[i].checked).replaceAll("{AttrValue}", Elements[i].value.toString());
        }
        else
            Nodes += (ElementTemplate.replaceAll("{Name}", Elements[i].id.toString())).toString().replaceAll("{Value}", Elements[i].value);
    }

    Elements = Container.getElementsByTagName("TEXTAREA");
    for (var i = 0; i < Elements.length; i++) {
        Nodes += (ElementTemplate.replaceAll("{Name}", Elements[i].id.toString())).toString().replaceAll("{Value}", Elements[i].value);
    }

    Elements = Container.getElementsByTagName("SELECT");
    for (var i = 0; i < Elements.length; i++) {
        Nodes += (ElementTemplate.replaceAll("{Name}", Elements[i].id.toString())).toString().replaceAll("{Value}", Elements[i].value);
    }

    RequestXML = RequestXMLTemplate.replace("{Elements}", (ExtraTags != null) ? (Nodes + ExtraTags) : Nodes);

    //alert(RequestXML);
    RequestSender(RequestXML, ShowProgress);

    return false;
}

function XML()
{ };

XML.prototype.newDocument = function(rootTagName, namespaceURL) {
    if (!rootTagName) rootTagName = "";
    if (!namespaceURL) namespaceURL = "";

    if (document.implementation && document.implementation.createDocument) {
        // This is the W3C standard way to do it
        return document.implementation.createDocument(namespaceURL,
                       rootTagName, null);
    }
    else { // This is the IE way to do it
        // Create an empty document as an ActiveX object
        // If there is no root element, this is all we have to do
        var doc = new ActiveXObject("MSXML2.DOMDocument");

        // If there is a root tag, initialize the document
        if (rootTagName) {
            // Look for a namespace prefix
            var prefix = "";
            var tagname = rootTagName;
            var p = rootTagName.indexOf(':');
            if (p != -1) {
                prefix = rootTagName.substring(0, p);
                tagname = rootTagName.substring(p + 1);
            }

            // If we have a namespace, we must have a namespace prefix
            // If we don't have a namespace, we discard any prefix
            if (namespaceURL) {
                if (!prefix) prefix = "a0"; // What Firefox uses
            }
            else prefix = "";

            // Create the root element (with optional namespace) as a
            // string of text
            var text = "<" + (prefix ? (prefix + ":") : "") + tagname +
                (namespaceURL
                 ? (" xmlns:" + prefix + '="' + namespaceURL + '"')
                 : "") +
                "/>";
            // And parse that text into the empty document
            doc.loadXML(text);
        }
        return doc;
    }
};

XML.prototype.LoadServerResponse = function(ResponseText) {
    //alert(ResponseText);
    var Response = new Array();
    var XMLDoc = new XML().newDocument();

    if (typeof (XMLDoc.loadXML) == "undefined") {
        var Parser = new DOMParser();
        XMLDoc = Parser.parseFromString(ResponseText, "application/xml");
    }
    else {
        XMLDoc.loadXML(ResponseText);
    }

    var Errors = XMLDoc.getElementsByTagName("Error");

    Response.isValid = (XMLDoc.getElementsByTagName("Status")[0].childNodes[0].nodeValue.toString() == "SUCCESS") ? true : false;
    Response.DisplayMessage = (XMLDoc.getElementsByTagName("DisplayMessage")[0].childNodes.length > 0) ? XMLDoc.getElementsByTagName("DisplayMessage")[0].childNodes[0].nodeValue.toString() : "";
    Response.XMLDoc = XMLDoc;

    var Err;
    for (var i = 0; i < Errors.length; i++) {
        Err = {};
        Err.ControlID = Errors[i].getElementsByTagName("ControlID")[0].childNodes[0].nodeValue;
        Err.ErrorMsg = Errors[i].getElementsByTagName("ErrorMsg")[0].childNodes[0].nodeValue;
        Response.push(Err);
    }

    return Response;
}

var InfoMessageTemplate = "<div style=\"border: solid 5px gainsboro; display: block; width: 400px; padding: 10px; position: fixed; top: 50%; background-color: White;\">"
                    + "<div class=\"desc\" style=\"background:gainsboro; color:#3D3D3D; padding:0; position:relative; line-height:25px; top:-10px; left:-10px; width:420px;\"><b>&nbsp;{MessageTitle}</b></div>"
                    + "<div class=\"desc\">{Message}</div>"
                    + "<div class=\"smallButtonWrapper\">"
                    + "<A href=\"Javascript:void(0);\" id=\"AnchorOk\" class=\"smallsquarebutton\"><span>{OkButtonText}</span></a>"
                    + "</div>"
                    + "</div>";

//var CustomMessageTemplate = "<div style=\"border: solid 5px gainsboro; display: block; width: 400px; padding: 10px; position: fixed; top: 50%; background-color: White;\">"
//                    + "<div class=\"desc\" style=\"background:gainsboro; color:#3D3D3D; padding:0; position:relative; line-height:25px; top:-10px; left:-10px; width:420px;\"><b>&nbsp;{MessageTitle}</b></div>"
//                    + "<div class=\"desc\">{Message}</div>"
//                    + "<div class=\"buttonWrapper\">"
//                    + "<A href=\"Javascript:void(0);\" id=\"AnchorOk\" class=\"squarebuttonb\"><span>{OkButtonText}</span></a>"
//                    + "<a href=\"#\" class=\"squarebuttonb\"><span>Cancel</span></a>"
//                    + "</div>"
//                    + "</div>";

var ShowMessage = function(MessageTitle, Message, Type, OkButtonText, OkHandler, CancelHandler) {
    //var DivMsg = document.createElement("Div");
    var MessageHTML;
    var AnchorButton;
    switch (Type) {
        case 1:  //InfoMessageTemplate

            MessageHTML = InfoMessageTemplate.replace("{MessageTitle}", MessageTitle);
            MessageHTML = MessageHTML.replace("{Message}", Message);
            MessageHTML = MessageHTML.replace("{OkButtonText}", OkButtonText);
            document.getElementById("MessageContainer").innerHTML = MessageHTML;

            if (OkHandler != null) {
                AnchorButton = document.getElementById("AnchorOk");
                AnchorButton.onclick = function() {
                    OkHandler();
                };
            }

            var MessageDiv = AnchorButton.parentNode.parentNode;
            var left = eval(Math.ceil((window.screen.availHeight - MessageDiv.clientHeight) / 2)) + 'px';
            MessageDiv.style.left = left;
            MessageDiv.style.top = '50%';
            break;
    }
}

var CloseMessage = function(Url) {
    if (Url != undefined && Url != null && Url != "") {
        document.location.href = Url;
    }
    else {
        document.getElementById("MessageContainer").innerHTML = "";
    }
}

var HandleResponse = function(arg, context) {
    var Response = new XML().LoadServerResponse(arg);
    for (var i = 0; i < Response.length; i++) {
        var Container = document.getElementById(Response[i].ControlID).parentNode.getElementsByTagName("Div")[0];
        if (Container != undefined)
            if (Container.getElementsByTagName("DIV").length > 0) {
            var MessageContainer = Container.getElementsByTagName("DIV")[0];
            if (Response[i].ErrorMsg.toString() != " ") {
                MessageContainer.innerHTML = Response[i].ErrorMsg.toString();
                Container.className = "errdiv fl";
            }
            else {
                MessageContainer.innerHTML = "";
                Container.className = "errdivnone";
            }
        }
    }
}
