// ******************************************
// * $Id$
// *
// *   submitDOMXSLSOAP()
// *
// * Verstuur gegevens via HTTP naar een asp-bestand
// * die de gegevens verder kan verwerken en een resultaat terug geeft.
// * Dit resultaat wordt hier nog weer gecontroleerd.
// *
// ******************************************
function submitDOMXSLSOAP( p_connect
                         , p_textstream
                         , p_xsldoc
                         , p_bedrijfadres
                         )
{
    Log2File(2, "*> submitSOAP");
    // De p_xsldoc Style moet het template SOAPEnvelope definieren!
    var XMLenvelope   = new ActiveXObject("Msxml2.DOMDocument.6.0");
    var XMLpayloadDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
    var XMLresult     = new ActiveXObject("Msxml2.DOMDocument.6.0");
    var Base64        = new Base64Cls();
    //
    // Omvat onze payload met de SOAPEnvelope uit de p_xsldoc stylesheet
    // p_bedrijfadres.ordermode
    //              bit 0 [0=xml, 1 soap]
    //              bit 1 [alleen voor mail attachment encryptie]
    //              bit 2 [0=2*base64 encoding, 1=plain]  JGL Aug-2016: komt volgens mij in de praktijk niet voor
    //              bit 3 [0=xml tag encoding, 1=plain]
    //
    var XMLpayloadNode = XMLenvelope.createElement("SOAPEnvelope");

    if (p_bedrijfadres.ordermode & 4)
    {
        if (p_bedrijfadres.ordermode & 8)
        {
            XMLpayloadDoc.load(p_textstream);
            TestAndRaiseAnXMLError("Error loading XMLpayloadDoc", XMLpayloadDoc);
            LogString2File(3, "XMLpayloadDoc.documentElement", XMLpayloadDoc.documentElement.xml, "xml");
            XMLpayloadNode.appendChild(XMLpayloadDoc.documentElement);
        }
        else
        {
            XMLpayloadNode.text = stream2text(p_textstream);
        }
    }
    else
    {
        XMLpayloadNode.text = Base64.encode(Base64.encode(stream2text(p_textstream)));
    }

    XMLenvelope.appendChild(XMLpayloadNode);
    LogString2File(3, "Envelope", XMLenvelope.xml, "xml");
    XMLenvelope.transformNodeToObject(p_xsldoc, XMLresult);

    LogString2File(2, "SOAPrequest", XMLresult.xml, "xml");

    //
    // Verstuur de SOAP aanvraag
    var params = p_bedrijfadres;
    params.data = XMLresult.xml;
    params.headers = { "Content-Type": "text/xml; charset=utf-8" };

    if (p_bedrijfadres.soapaction)
    {
        params.headers["SOAPAction"] = p_bedrijfadres.soapaction;
    }

    var XMLhttp = doHTTP(p_connect.CurrentAddress, params);
    // Bij status buiten de 200 range is er al een exception geweest
    LogString2File(2, "SOAP response", XMLhttp.responseText, "xml");

    //
    // Open de envelope
    XMLenvelope.loadXML(XMLhttp.responseText);
    TestAndRaiseAnXMLError("Error loading SOAP response as XML", XMLenvelope);
    XMLenvelope.transformNodeToObject(p_xsldoc, XMLresult);
    LogString2File(3, "Response payload", XMLresult.xml, "xml");
    TestAndRaiseAnXMLError("Error finding xml tag in SOAP response", XMLresult);

    if (p_bedrijfadres.ordermode & 4)
    {
        SOAPresult = XMLresult.xml;
    }
    else
    {
        SOAPresult = Base64.decode(Base64.decode(XMLresult.text));
    }
    Log2File(2, "*< submitSOAP");

    return SOAPresult;
}
