/* CSoap Error Classes */
/* TODO: Gestire il debug. dei messaggi di errore in modo da usare una pagina su cui direzionare in caso di errore */
//////////////////////////////////////////////
// Italcom Spa
// Browser: IE 6.0, Netscape 7.0, Mozilla 1.4
// Library: CSoapRequest
// Version 1.0
// Require: CXmlDeserializer
// 			CHttpRequest
// 			CDomDocumentNode
// Objects: 
//////////////////////////////////////////////




// This section manage error message
function SoapError(strMessage){ this.message = strMessage; }
SoapError.prototype.toString = function () {return this.message;}
CSoapRequest.MALFORMED_SOAP_RESPONSE = new SoapError("Malformed SOAP Response");
CSoapRequest.SERVER_ERROR_OCCOURED = new SoapError ("Error occoured while sending request to server");
CSoapRequest.HTTP_ERROR_OCCOURED = new SoapError ("Http Error occoured");


CSoapRequest.prototype.onError = function (errorcode, message, detail, requestmessage) 
{ 
	errorinfo = new Object();
	var hwnd = window.open("Error.aspx", "soaperr","scrollbars=yes,resizable=no,status=no,left=0,top=0,width=650,height=650");
	hwnd.errorinfo = new Object();
	hwnd.errorinfo.errorcode=errorcode

	hwnd.errorinfo.message=message;
	hwnd.errorinfo.detail=detail;
	hwnd.errorinfo.requestmessage = requestmessage;
	hwnd.focus();

}

// Costructor
// Url: 							url da chiamare (ove risiede il web service)
// methodName:					nome del metodo (es: getToolBarItems)
// messageParameter:			nome del metodo (es: corpo del messaggio da inviare in xml)
function CSoapRequest(url, methodName, messageParameter)
{
	this.methodname = methodName;
	this.url = url;
	this.messageparameter = messageParameter;
}

CSoapRequest.prototype.httprequest = new CHttpRequest();
CSoapRequest.prototype.soapMessageTemplate = 

'<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ' +
'	<soap:Body>' +
'		<$MethodName xmlns="http://tempuri.org/">' +
'			<$MessageParameter>' +
'				<root xmlns="">' +
'$Message' +
'				</root>' +
'			</$MessageParameter>' +
'		</$MethodName>' +
'	</soap:Body>' +
'</soap:Envelope>';


// Method buildMessage: this method build the soap message
CSoapRequest.prototype.buildMessage 
= // ====================================
function (message)
{

	var methodname = this.methodname;
	var messageparameter = this.messageparameter;
	
	var envmessage = this.soapMessageTemplate.replace(/\$\S+/gi, 
	
		function (str)
		{
			
			
			switch(str)
			{
			case '$MethodName':
				return methodname;
			case '$MethodName>':
				return methodname + ">";
			case '$MessageParameter>':
				return messageparameter + ">";
			case '$Message':
				return message;
			default:
				return '?';
			}
		}
	
	);
	
	return envmessage;

}


// Method sendRequestXml: this method send the request given the object
CSoapRequest.prototype.sendRequestObject
= // ====================================
function(obj)
{
	var xmlString = CXmlSerializer.Serialize(obj);
	return this.sendRequestXml(xmlString); 
}


// Method sendRequestXml: this method send the request given the xml request string
CSoapRequest.prototype.sendRequestXml
= // ====================================
function (xmlmessage)
{

var headers =
[
	['Content-Type','text/xml; charset=utf-8'] ,
	['SOAPAction',  'http://tempuri.org/' + this.methodname ]
];

var contentString = this.buildMessage(xmlmessage);
this.httprequest.Headers = headers;
var Result = this.httprequest.HttpPut (this.url, contentString);

if (Result)				// chiamata andata a buon fine?
{

	var responsedoc = new CDomDocumentNode();
	responsedoc.loadXML(this.httprequest.content);
	var node = responsedoc.getElementsByTagName("Envelope", "http://schemas.xmlsoap.org/soap/envelope/")[0];

	if (node == null)
	{ 
		this.onError(CSoapRequest.MALFORMED_SOAP_RESPONSE, "Missing <Soap:Envelope>:", this.httprequest.content, contentString); 
		return false;
	}
	else 
	{
		var node = responsedoc.getElementsByTagName("Body", "http://schemas.xmlsoap.org/soap/envelope/")[0];
		if (node == null)
		{
			this.onError(CSoapRequest.SERVER_ERROR_OCCOURED, "Error occoured:", this.httprequest.content, contentString); 
			return false;
		}
		
		var node = CDomDocumentNode.getChildOfNode(node, 3);
		this.responseNode = node;
		return true;
		
	}	
	
	
}
else
{
	this.onError(CSoapRequest.HTTP_ERROR_OCCOURED, "Http Request Error: (" + this.httprequest.ResultCode + ") {" + this.httprequest.ResultCodeDescription + "} :", this.httprequest.content, contentString);
	return false;
}

	
}