﻿var soapFunction = "";
var soapReturnArray = false;
var traceText = "";
var count = 0;
var xmlDoc = null;

function GetXMLHttpRequest(){
try {
    return new XMLHttpRequest();
    }
catch(e){    
    var msxmls = new Array(
          'Msxml2.XMLHTTP.5.0',
          'Msxml2.XMLHTTP.4.0',
          'Msxml2.XMLHTTP.3.0',
          'Msxml2.XMLHTTP',
          'Microsoft.XMLHTTP');
        for (var i = 0; i < msxmls.length; i++) {
          try {
               return new ActiveXObject(msxmls[i]);
          } catch (e) {
          }
        }
    }
//	return new XMLHttpRequest();
}

function SoapInvoke(url, soapAction, soapFunctionCall, soapFunction, returnArray)
{
	var soapRequest = "";
	var request = GetXMLHttpRequest();
	var result = null;
	var node = null;
	var nodeList = null;
	soapReturnArray = returnArray;
	top.SoapFunctionTest = soapFunction;
	soapRequest = "<?xml version=\"1.0\"?>";
	soapRequest += "<soap:Envelope";
	soapRequest += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
	soapRequest += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"";
	soapRequest += " xmlns:soapEnc=\"http://schemas.xmlsoap.org/soap/encoding/\""; 
	soapRequest += " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
	soapRequest += " soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">";
	soapRequest += "<soap:Body>";
	soapRequest += soapFunctionCall;
	soapRequest += "</soap:Body>";
	soapRequest += "</soap:Envelope>";
	 request.open("POST", url, false);
	request.setRequestHeader("SOAPAction", soapAction);
	request.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
	request.send(soapRequest);
    //alert("url:"+url)
    //alert("soapRequest: "+soapRequest)
    
    xmlDoc = request.responseXML;
 //   alert(soapRequest)
  //  if(xmlDoc.xml.length > 500)
  //  //    document.write("<textarea>"+soapRequest+"</textarea>")
        
   // alert("xmlDoc.text: "+xmlDoc.xml)
	nodeList = xmlDoc.getElementsByTagName("faultcode");
	
	if(nodeList.length > 0)
	{
		resultArray = new Array();
		resultArray[soapFunction+"Result"] = false;
	}
	else
	{
		resultArray = new Array();
		nodeList = xmlDoc.getElementsByTagName(soapFunction + "Response")
		
		if(nodeList.length > 0 && nodeList.item(0).attributes.getNamedItem("href") != null)
			ParseResponse(GetElementById("multiRef", nodeList.item(0).attributes.getNamedItem("href").nodeValue.replace("#","")), resultArray);
		else
		{
			nodeList = xmlDoc.getElementsByTagName(soapFunction + "Response")
		
			if(nodeList.length > 0)
			{
			    ParseResponse(nodeList.item(0), resultArray);
			}
			else
			{
				nodeList = xmlDoc.getElementsByTagName(soapFunction + "Result")
				
				if(nodeList.length == 0)
				{
					resultArray = new Array();
					resultArray["error"] = true;
					resultArray["description"] = " ";
				}
			}	
		}
	}
    
	return resultArray;
}
function ParseResponse(element, ar, oneLevelOnly)
{
	var node = null;
	var extra = "";
	var useIndex = false;
	var nodeId = null;
	var childNodes = null;
	var oneLevel = false;
	
	var elementsOnly = GetChildNodes(element);
	
	for(var i=0;i < elementsOnly.length; i++)
	{
		node = elementsOnly[i];
		childNodes = GetChildNodes(node)
		if(i+1 < elementsOnly.length && node.nodeName == elementsOnly[i+1].nodeName && !useIndex)
		{
			useIndex = true;
		}
		
		    
		if((node.attributes != null && node.attributes.getNamedItem("href") != null) || (childNodes.length > 0) && !oneLevelOnly && !oneLevelOnly)
		{
		    this.count++;
			
			if(useIndex)
			{
				ar[ar.length] = new Array();
				
				if(childNodes.length > 0)
					ParseResponse(node, ar[ar.length-1]);
				else
					ParseResponse(GetElementById("multiRef", node.attributes.getNamedItem("href").nodeValue.replace("#","")), ar[ar.length-1], oneLevel);
			}
			else
			{
				ar[node.nodeName] = new Array();
		
				if(childNodes.length > 0)
					ParseResponse(node, ar[node.nodeName]);
				else
					ParseResponse(GetElementById("multiRef", node.attributes.getNamedItem("href").nodeValue.replace("#","")), ar[node.nodeName], oneLevel);
			}
		}
		else
		{
			if(node.firstChild)
			{
			    
				if(useIndex)
					ar[ar.length] = node.firstChild.nodeValue;
				else
				{
					ar[node.nodeName] = node.firstChild.nodeValue;
					
				}
			}
			else
			{
				if(ar)
				if(useIndex)
					ar[ar.length] = "";
				else
					ar[node.nodeName] = "";
			}
			
		}
	}
}
function GetElementById(name, id)
{
	var element = null;
	var nodeList = xmlDoc.getElementsByTagName(name);
	
	for(var i = 0; i < nodeList.length; i++)
	{
		if(nodeList.item(i).attributes)
		{
			if(nodeList.item(i).attributes.getNamedItem("id").nodeValue == id)
			{
				element = nodeList.item(i);
				break;
			}
		}
	}
	
	return element;
}

function GetChildNodes(element)
{
	var elementsOnly = new Array();
	var node = null;
	
	for(var i = 0; i < element.childNodes.length; i++)
	{
		node = element.childNodes.item(i);
		
		if(node.nodeType == 1)
		{
			elementsOnly[elementsOnly.length] = node;
		}
	}
	
	return elementsOnly;
}