function SOAPParameter(name,value)
{
	return "<"+name+">"+value+"</"+name+">";
}


SOAPParameters_list=new Array()
function SOAPParameters() 
{
	this.method="POST";
}

SOAPParameters.Add = function(name,value)
{
		
	//SOAPParameters_list[SOAPParameters_list.length]="<"+name+">"+value+"</"+name+">";
	var k=SOAPParameters_list.length;
	SOAPParameters_list[k]=new Array(2);
	SOAPParameters_list[k][0]=name;
	SOAPParameters_list[k][1]=value;

}
SOAPParameters.Clear = function()
{

	SOAPParameters_list=null;
	SOAPParameters_list=new Array();
}
SOAPParameters.Serialize = function(method)
{
	var temp="";
	if (typeof method == "undefined" || !method.length) method="POST";
	SOAPParameters.method=method.toUpperCase();	
	if (SOAPParameters.method=="POST")
	{
		for(var i=0; i<SOAPParameters_list.length; i++)
			temp+="<"+SOAPParameters_list[i][0]+">"+SOAPParameters_list[i][1]+"</"+SOAPParameters_list[i][0]+">";
			//temp+=SOAPParameters_list[i];
	}
	else
	if (SOAPParameters.method=="GET")
	{
		for(var i=0; i<SOAPParameters_list.length; i++)
		{
			if (temp.length>0) temp+="&";
			temp+=SOAPParameters_list[i][0]+"="+SOAPParameters_list[i][1];
			//temp+=SOAPParameters_list[i];
		}
	}

	return temp;
}
function SOAPClient() 
{
	this.callback=null;
}

SOAPClient._getXmlHttp = function()
{
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...

	    return new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) { // IE
	
            var progids = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];	
            var o;
            for(var i = 0; i < progids.length; i++)
            {
                try
                {
                   o = new ActiveXObject(progids[i]);
                   return o;
                }
                catch (ex) {};
            }
            
        }
        throw new Error("Could not find an installed XML parser");

}

SOAPClient_WebService="";
SOAPClient_Proxy="";
SOAPClient.Abort = function()
{
	oXmlHttp=SOAPClient._getXmlHttp();
	oXmlHttp.abort();
	var waitObj=document.getElementById('idUpdatingResults');
	Hide(waitObj);

}


SOAPClient.Invoke = function(method,parameters,_callback,async)
{

	if( typeof(async) == "undefined" )
	{
		async=true;
	}

	oXmlHttp=SOAPClient._getXmlHttp();
	SOAPClient.callback=_callback;
	var nspace="http://schemas.xmlsoap.org/soap/envelope/";
	//var nspace="http://www.w3.org/2003/05/soap-envelope/";
	var uri=SOAPClient_Proxy+"/"+SOAPClient_WebService;
        var env=" \
	<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \
		xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \
		xmlns:soap=\""+nspace+"\"> \
		<soap:Body> \
		<"+method+" xmlns=\""+uri+"\"> \
			"+parameters+" \
		</"+method+"> \
	</soap:Body> \
	</soap:Envelope>";

	try
	{

		if (SOAPParameters.method=="POST")
		{
			oXmlHttp.open("POST", uri, async);
			oXmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");    
			oXmlHttp.setRequestHeader("SOAPAction", SOAPClient_Proxy+"/"+method);
		}
		else
		if (SOAPParameters.method=="GET")
		{
			var u="method="+method;
			u+="&webservice="+SOAPClient_WebService;
			if (parameters.length)
				u+="&"+parameters;
			oXmlHttp.open("GET", SOAPClient_Proxy+"?"+u, async);
			env=null;
		}
		if (async)
			oXmlHttp.onreadystatechange=processStateChange;
		
		oXmlHttp.send(env); 
//alert( oXmlHttp.readyState );
//alert(  "Response headers: "+oXmlHttp.getAllResponseHeaders()); 
//alert( "Webservice reponse:\n"+oXmlHttp.responseText );
		if (!async)
		{
			var waitObj=document.getElementById('idUpdatingResults');

			processResponse(oXmlHttp,waitObj);
		}
			
	}
	catch(ex)
	{
		alert(ex);
		
	}


}
function processStateChange() 
{
	var waitObj=document.getElementById('idUpdatingResults');
	if (oXmlHttp.readyState == 4) 
	{ // Complete
		processData(oXmlHttp);
	}
	else 
	{//alert(waitObj);
	        Display(waitObj);
      	}

	

}
function processResponse(oXmlHttp,waitObj)
{
	//alert(oXmlHttp.responseXML);
		if (oXmlHttp.responseXML == null ) return;
		try
		{

			var errors=oXmlHttp.responseXML.getElementsByTagName('faultstring');
			if (errors.length>0)
				throw errors[0].childNodes[0].nodeValue;
			if (oXmlHttp.responseXML.getElementsByTagName('item').length==0)
			{
				
				var elems=oXmlHttp.responseXML.getElementsByTagName('Result');
				
				//Construct data
				var data="";
				for(var i=0; i<elems.item(0).childNodes.length; i++)
					data+=elems.item(0).childNodes[i].nodeValue;
				Hide(waitObj);
				if (SOAPClient.callback) SOAPClient.callback(data);
			}
			else
			{
				var res= new Array();

				var elems=oXmlHttp.responseXML.getElementsByTagName('item');
				var len=elems.length;
			
				for (var i=0; i<len; i++)
				{
					
					var data="";
					for(var k=0; k<elems.item(i).childNodes.length; k++)
						data+=elems.item(i).childNodes[k].nodeValue;
					res[i]=data;
				}
				Hide(waitObj);
				if (SOAPClient.callback) SOAPClient.callback(res);
			}
			
		}
		catch(ex)
		{
			alert(ex);
		}

}
function processData(oXmlHttp)
{
	var waitObj=document.getElementById('idUpdatingResults');
	if (oXmlHttp.status == 200) 
	{// OK response	
		processResponse(oXmlHttp,waitObj);
		Hide(waitObj);
	}
	else
	if (oXmlHttp.status==500)
	{
		Hide(waitObj);


		var errors=oXmlHttp.responseXML.getElementsByTagName('faultstring');
		if (errors.length>0)
		{
			alert(errors[0].childNodes[0].nodeValue);
		}
	}	
}
