﻿function firstChildElement (node) {
    if (!node)        return null;    var child = node.firstChild;
    while (child) {
        if (child.nodeType == 1)
            return child;
        child = child.nextSibling;
    }
    return null;
}

function nextSiblingElement (node) {
    if (!node)        return null;    var sibling = node.nextSibling;
    while (sibling) {
        if (sibling.nodeType == 1)
            return sibling;
        sibling = sibling.nextSibling;
    }
    return null;
}

function getText (node) {
    if (!node)        return null;    var text = '';
    var child = node.firstChild;
    while (child) {
        if (child.nodeType == 3) {
            text = text + child.nodeValue;
        }
        child = child.nextSibling;
    }
    return text;
}

function invokeSync (url, xmlDoc) {
    var req = null;    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (req) {
        req.open("POST", url, false);
        req.setRequestHeader("Content-Type", "text/xml");
        req.send(xmlDoc);
        return req.responseXML;
    }
}

function invokeAsync (url, xmlDoc, callback) {
    var req = null;
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    if (req) {
        req.onreadystatechange = function () {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    callback(req.responseXML);
                } 
            }
        }
        req.open("POST", url, true);
        req.setRequestHeader("Content-Type", "text/xml");
        req.send(xmlDoc);
    }
}

function createNewDocument () {
    var xmlDoc = null;
    if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("", "", null);
    } else if (window.ActiveXObject){
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    }
    return xmlDoc;
}

function createElementNS (xmlDoc, namespace, localName) {
    var element = null;
    if (typeof xmlDoc.createElementNS != 'undefined') {
        element = xmlDoc.createElementNS(namespace, localName);
    }
    else if (typeof xmlDoc.createNode != 'undefined') {
        if (namespace) {
            element = xmlDoc.createNode(1, localName, namespace);
        } else {
            element = xmlDoc.createElement(localName);
        }
    }
    return element;
}

function localName (element) {
    if (element.localName)
        return element.localName;
    else
        return element.baseName;
}



function TEBWebServicesSoapHttpPort_TEBWebSrv(_UserName, _Password, _ServiceID, _Environment, _InputDataXML) {
    var xmlDoc = createNewDocument();
    var envelope = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Envelope');
    xmlDoc.appendChild(envelope);
    var body = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Body');
    envelope.appendChild(body);
    var parameterParent = body;
    parameterParent = createElementNS(xmlDoc, 'http://prjwebservice/', 'TEBWebSrv');
    body.appendChild(parameterParent);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'UserName');
    paramEl.appendChild(xmlDoc.createTextNode(_UserName));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'Password');
    paramEl.appendChild(xmlDoc.createTextNode(_Password));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'ServiceID');
    paramEl.appendChild(xmlDoc.createTextNode(_ServiceID));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'Environment');
    paramEl.appendChild(xmlDoc.createTextNode(_Environment));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'InputDataXML');
    paramEl.appendChild(xmlDoc.createTextNode(_InputDataXML));
    parameterParent.appendChild(paramEl);
    var responseDoc = invokeSync('https://ext.teb.com.tr/tebws/TEBWebServices', xmlDoc);
    var resultObj = null;
    body = firstChildElement(responseDoc.documentElement);
    if (localName(body) != 'Body') {
        body = nextSiblingElement(body);
    }

    var resultEl = firstChildElement(body);
    resultEl = firstChildElement(resultEl);
    if (resultEl)
        resultObj = TEBWebServicesSoapHttpPort_deserialize_TEBWebServiceResult(resultEl);
    else
        resultObj = null;
    return resultObj;
}

function TEBWebServicesSoapHttpPort_TEBWebSrvAsync(_UserName, _Password, _ServiceID, _Environment, _InputDataXML, callback) {
    var xmlDoc = createNewDocument();
    var envelope = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Envelope');
    xmlDoc.appendChild(envelope);
    var body = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Body');
    envelope.appendChild(body);
    var parameterParent = body;
    parameterParent = createElementNS(xmlDoc, 'http://prjwebservice/', 'TEBWebSrv');
    body.appendChild(parameterParent);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'UserName');
    paramEl.appendChild(xmlDoc.createTextNode(_UserName));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'Password');
    paramEl.appendChild(xmlDoc.createTextNode(_Password));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'ServiceID');
    paramEl.appendChild(xmlDoc.createTextNode(_ServiceID));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'Environment');
    paramEl.appendChild(xmlDoc.createTextNode(_Environment));
    parameterParent.appendChild(paramEl);
    var paramEl = createElementNS(xmlDoc, 'http://prjwebservice/', 'InputDataXML');
    paramEl.appendChild(xmlDoc.createTextNode(_InputDataXML));
    parameterParent.appendChild(paramEl);
    var resultsProcessor = function (responseDoc) {
    var resultsObj = null;
    body = firstChildElement(responseDoc.documentElement);
    if (localName(body) != 'Body') {
        body = nextSiblingElement(body);
    }

    var resultEl = firstChildElement(body);
    resultEl = firstChildElement(resultEl);
    if (resultEl)
        resultObj = TEBWebServicesSoapHttpPort_deserialize_TEBWebServiceResult(resultEl);
    else
        resultObj = null;
    callback(resultObj);
    }
    invokeAsync('https://ext.teb.com.tr/tebws/TEBWebServices', xmlDoc, resultsProcessor);
}

function TEBWebServicesSoapHttpPort_deserialize_TEBWebServiceResult(valueEl) {
    var resultsObject = {};
    for (var child=firstChildElement(valueEl); child; child = nextSiblingElement(child)) {
        if (localName(child) == 'errorMsg') {
            resultsObject.errorMsg = getText(child);
        }
        if (localName(child) == 'sessionId') {
            resultsObject.sessionId = getText(child);
        }
        if (localName(child) == 'outputDataXML') {
            resultsObject.outputDataXML = getText(child);
        }
        if (localName(child) == 'errorCode') {
            resultsObject.errorCode = getText(child);
        }
    }
    return resultsObject;
}


