﻿// jqsoapclient.js
var SOAPClient = { Proxy: "", SOAPServer: "", ContentType: "text/xml", CharSet: "utf-8", ResponseXML: null, ResponseText: "", Status: 0, ContentLength: 0, Namespace: function(name, uri) { return {"name":name, "uri":uri};}, SendRequest: function(soapReq, callback) { if(SOAPClient.Proxy != null) { SOAPClient.ResponseText = ""; SOAPClient.ResponseXML = null; SOAPClient.Status = 0; var content = soapReq.toString(); SOAPClient.ContentLength = content.length; function getResponse(xData) { if(callback != null) { SOAPClient.Status = xData.status; SOAPClient.ResponseText = xData.responseText; SOAPClient.ResponseXML = xData.responseXML; var jsOut = $.xmlToJSON(xData.responseXML); callback(jsOut, xData.responseText, xData.responseXML);}
}
$.ajax({ type: "POST", url: SOAPClient.Proxy, dataType: "xml", processData: false, data: content, complete: getResponse, beforeSend: function(req) { req.setRequestHeader("Method", "POST"); req.setRequestHeader("Content-Length", SOAPClient.ContentLength); req.setRequestHeader("Content-Type", SOAPClient.ContentType + "; charset=\"" + SOAPClient.CharSet + "\""); req.setRequestHeader("SOAPServer", SOAPClient.SOAPServer); req.setRequestHeader("SOAPAction", soapReq.Action);}
});}
}, ToXML: function(soapObj) { var out = ""; var isNSObj=false; try { if(soapObj!=null&&typeof(soapObj)=="object"&&soapObj.typeOf=="SOAPObject") { if(soapObj.ns!=null) { if(typeof(soapObj.ns)=="object") { isNSObj=true; out+="<"+soapObj.ns.name+":"+soapObj.name; out+=" xmlns:"+soapObj.ns.name+"=\""+soapObj.ns.uri+"\"";} else { out+="<"+soapObj.name; out+=" xmlns=\""+soapObj.ns+"\"";}
} else { out+="<"+soapObj.name;}
if(soapObj.attributes.length > 0) { var cAttr; var aLen=soapObj.attributes.length-1; do { cAttr=soapObj.attributes[aLen]; if(isNSObj) { out+=" "+soapObj.ns.name+":"+cAttr.name+"=\""+cAttr.value+"\"";} else { out+=" "+cAttr.name+"=\""+cAttr.value+"\"";}
} while(aLen--);}
out+=">"; if(soapObj.hasChildren()) { var cPos, cObj; for(cPos in soapObj.children){ cObj = soapObj.children[cPos]; if(typeof cObj == "object"){out+=SOAPClient.ToXML(cObj);}
}
}
if(soapObj.value != null){out+=soapObj.value;}
if(isNSObj){out+="</"+soapObj.ns.name+":"+soapObj.name+">";}
else {out+="</"+soapObj.name+">";}
return out;}
} catch(e){alert("Unable to process SOAPObject! Object must be an instance of SOAPObject");}
}
}
var SOAPRequest=function(action, soapObj) { this.Action=action; var nss=[]; var headers=[]; var bodies=(soapObj!=null)?[soapObj]:[]; this.addNamespace=function(ns, uri){nss.push(new SOAPClient.Namespace(ns, uri));}
this.addHeader=function(soapObj){headers.push(soapObj);}; this.addBody=function(soapObj){bodies.push(soapObj);}
this.toString=function() { var soapEnv = new SOAPObject("soapenv:Envelope"); soapEnv.attr("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/"); if(nss.length>0){ var tNs, tNo; for(tNs in nss){tNo=nss[tNs];if(typeof(tNo)=="object"){soapEnv.attr("xmlns:"+tNo.name, tNo.uri)}}
}
if(headers.length>0) { var soapHeader = soapEnv.appendChild(new SOAPObject("soapenv:Header")); var tHdr; for(tHdr in headers){soapHeader.appendChild(headers[tHdr]);}
}
if(bodies.length>0) { var soapBody = soapEnv.appendChild(new SOAPObject("soapenv:Body")); var tBdy; for(tBdy in bodies){soapBody.appendChild(bodies[tBdy]);}
}
return soapEnv.toString();}
}
var SOAPObject = function(name) { this.typeOf="SOAPObject"; this.ns=null; this.name=name; this.attributes=[]; this.children=[]
this.value=null; this.attr=function(name, value){this.attributes.push({"name":name, "value":value});return this;}; this.appendChild=function(obj){this.children.push(obj);return obj;}; this.hasChildren=function(){return (this.children.length > 0)?true:false;}; this.val=function(v){if(v==null){return this.value}else{this.value=v;return this;}}; this.toString=function(){return SOAPClient.ToXML(this);}
}

// jqxmlutils.js
if($) { $.extend ({ xmlToJSON: function(xdoc) { try { if(!xdoc){ return null;}
var tmpObj = {}; tmpObj.typeOf = "JSXBObject"; var xroot = (xdoc.nodeType == 9)?xdoc.documentElement:xdoc; tmpObj.RootName = xroot.nodeName || ""; if(xdoc.nodeType == 3 || xdoc.nodeType == 4) { return xdoc.nodeValue;}
function setObjects(obj, node) { var elemName; var cnode; var tObj; var cName = ""; if(!node) { return null;}
if(node.attributes.length > 0){setAttributes(obj, node);}
obj.Text = ""; if(node.hasChildNodes()) { var nodeCount = node.childNodes.length - 1; var n = 0; do { cnode = node.childNodes[n]; switch(cnode.nodeType) { case 1:
obj._children = []; elemName = (cnode.localName)?cnode.localName:cnode.baseName; elemName = formatName(elemName); if(cName != elemName) { obj._children.push(elemName);}
if(!obj[elemName]) { obj[elemName] = [];}
tObj = {}; obj[elemName].push(tObj); if(cnode.attributes.length > 0) { setAttributes(tObj, cnode);}
if(!obj[elemName].contains) { setHelpers(obj[elemName]);}
cName = elemName; if(cnode.hasChildNodes()) { setObjects(tObj, cnode);}
break; case 3:
obj.Text += $.trim(cnode.nodeValue); break; case 4:
obj.Text += (cnode.text)?$.trim(cnode.text):$.trim(cnode.nodeValue); break;}
} while(n++ < nodeCount);}
}
function setHelpers(grpObj) { grpObj.getNodeByAttribute = function(attr, obj) { if(this.length > 0) { var cNode; var maxLen = this.length -1; try { do { cNode = this[maxLen]; if(cNode[attr] == obj) { return cNode;}
} while(maxLen--);} catch(e) {return false;}
return false;}
}
grpObj.contains = function(attr, obj) { if(this.length > 0) { var maxLen = this.length -1; try { do { if(this[maxLen][attr] == obj) { return true;}
} while(maxLen--);} catch(e) {return false;}
return false;}
}
grpObj.indexOf = function(attr, obj) { var pos = -1; if(this.length > 0) { var maxLen = this.length -1; try { do { if(this[maxLen][attr] == obj) { pos = maxLen;}
} while(maxLen--);} catch(e) {return -1;}
return pos;}
}
grpObj.SortByAttribute = function(col, dir) { if(this.length) { function getValue(pair, idx) { var out = pair[idx]; out = (isNumeric(out))?parseFloat(out):out; return out;}
function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a, col); tB = getValue(b, col); if(tA < tB) { res = -1;} else if(tB < tA) { res = 1;}
if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res;}
return res;}
this.sort(sortFn);}
}
grpObj.SortByValue = function(dir) { if(this.length) { function getValue(pair) { var out = pair.Text; out = (isNumeric(out))?parseFloat(out):out; return out;}
function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a); tB = getValue(b); if(tA < tB) { res = -1;} else if(tB < tA) { res = 1;}
if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res;}
return res;}
this.sort(sortFn);}
}
grpObj.SortByNode = function(node, dir) { if(this.length) { function getValue(pair, node) { var out = pair[node][0].Text; out = (isNumeric(out))?parseFloat(out):out; return out;}
function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a, node); tB = getValue(b, node); if(tA < tB) { res = -1;} else if(tB < tA) { res = 1;}
if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res;}
return res;}
this.sort(sortFn);}
}
}
function setAttributes(obj, node) { if(node.attributes.length > 0) { var a = node.attributes.length-1; var attName; obj._attributes = []; do { attName = String(formatName(node.attributes[a].name)); obj._attributes.push(attName); obj[attName] = $.trim(node.attributes[a].value);} while(a--);}
}
function formatName(name) { var regEx = /-/g; var tName = String(name).replace(regEx,"_"); return tName;}
var isNumeric = function(s) { var testStr = ""; if(s && typeof s == "string") { testStr = s;}
var pattern = /^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/; return pattern.test(testStr);}
setObjects(tmpObj, xroot); xdoc = null; xroot = null; return tmpObj;} catch(e) { return null;}
}
})
$.extend({ textToXML: function(strXML) { try { var xmlDoc = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); xmlDoc.async = false;} catch(e) {throw new Error("XML Parser could not be instantiated");}
var out; try { if($.browser.msie) { out = (xmlDoc.loadXML(strXML))?xmlDoc:false;} else { out = xmlDoc.parseFromString(strXML, "text/xml");}
} catch(e) { throw new Error("Error parsing XML string");}
return out;}
})
} else { alert("jQuery library is not present");}

