
WebServiceUtility = function(serviceUrl, serviceNamespace){
    this.soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>{soapMethod}</soap:Body></soap:Envelope>";
    this.serviceUrl = serviceUrl;
    this.serviceNamespace = serviceNamespace;
    
    this.ajaxRequest = function(serviceMethod, messageXml, xsltFilename, performTransform, targetDivID){
    	try {
	    	/**
			* Emulate window.XMLHttpRequest in IE6-
			*/
			if (!window.XMLHttpRequest) {
			 var ms_xhr_ver = false;
			 window.XMLHttpRequest = function() {
			  if (ms_xhr_ver) return new ActiveXObject(ms_xhr_ver);
			  var xhr = false;
			  var versions = [
			  "Msxml2.XMLHTTP.7.0", 
			  "Msxml2.XMLHTTP.6.0", 
			  "Msxml2.XMLHTTP.5.0", 
			  "Msxml2.XMLHTTP.4.0", 
			  "MSXML2.XMLHTTP.3.0", 
			  "MSXML2.XMLHTTP",
			  "Microsoft.XMLHTTP"];
			  var n = versions.length;
			  for (var i = 0; i <  n; i++) {
			   try {
			    if (xhr = new ActiveXObject(versions[i])) {
			     ms_xhr_ver = versions[i];
			     break;
			    }
			   } catch (e) { /* try next */ }
			  }
			  return xhr;
			 };
			}
			
	        var request = new XMLHttpRequest();
	        request.open("POST", this.serviceUrl, false);
	        request.setRequestHeader("Content-Type", "text/xml");
	        request.setRequestHeader("soapaction", this.serviceNamespace + serviceMethod);
	        messageXml = "<" + serviceMethod + " xmlns=\"" + this.serviceNamespace + "\">" + messageXml + "</" + serviceMethod + ">";
	        
	        var text;
	        text = this.soapEnvelope.replace('{soapMethod}', messageXml);
	        // use the following line for debugging the request
	        //alert("Request xml: " + text);
	        request.send(text);
	        // use the following line in Firefox only for debugging the response
	        //alert("Response: " + (new XMLSerializer()).serializeToString(request.responseXML));
	
	        var xmlDoc = request.responseXML;
	  		if (performTransform == true) {
		        var targetdiv = document.getElementById(targetDivID);
		        var transformedmarkup = this.xsltTransform(xmlDoc, xsltFilename);
		        
		        if(window.ActiveXObject) {
		            targetdiv.innerHTML = transformedmarkup;
		        } else {
		            // remove all html in the target div before appending the transformed result
		            var range = targetdiv.ownerDocument.createRange();
		            
		            range.selectNodeContents(targetdiv);
		            range.deleteContents();
		            targetdiv.appendChild(transformedmarkup); 
		            
		            var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
		            if (is_chrome) {
		            	try {
		            			var rawxml = xml2Str(xmlDoc);
		            			var startindex = rawxml.indexOf("<MyCompareTotal>");
		    					var endindex = rawxml.indexOf("</MyCompareTotal>");
		    					if ((startindex > 1) && (endindex > startindex)) {
		    						numCompare = parseInt(rawxml.substring(startindex+16, endindex));
								}
								
								var startindex = rawxml.indexOf("<CurrentPageSize>");
		    					var endindex = rawxml.indexOf("</CurrentPageSize>");
		    					if ((startindex > 1) && (endindex > startindex)) {
		    						document.getElementById('ddbPageSize').value = parseInt(rawxml.substring(startindex+17, endindex));
								}					
		            			
		            	} catch (e) {
		            	}
					} 
					try {
						if(parseInt(navigator.userAgent.indexOf("Safari")) > 1) {
							var rawxml = xml2Str(xmlDoc);;
						 	var startindex = rawxml.indexOf("<CurrentPageSize>");
			    			var endindex = rawxml.indexOf("</CurrentPageSize>");
							if ((startindex > 1) && (endindex > startindex)) {
								document.getElementById('ddbPageSize').value = parseInt(rawxml.substring(startindex+17, endindex));
							}
						}
					} catch (e) {
	            	}
		        }
	        }
	        else {
	        	return xmlDoc;
	        }
        } catch (e) {
        	try {
        		var targetdiv = document.getElementById(targetDivID);
				targetdiv.appendChild(document.createTextNode("I'm sorry, we are having problems processing your request. Please try again later."));
			} catch (ex) {
			}
        }
    }
    
    this.xsltTransform = function(xmlDoc, xsltFile){
    
		/**
		* Emulate window.XMLHttpRequest in IE6-
		*/
		if (!window.XMLHttpRequest) {
		 var ms_xhr_ver = false;
		 window.XMLHttpRequest = function() {
		  if (ms_xhr_ver) return new ActiveXObject(ms_xhr_ver);
		  var xhr = false;
		  var versions = [
		  "Msxml2.XMLHTTP.7.0", 
		  "Msxml2.XMLHTTP.6.0", 
		  "Msxml2.XMLHTTP.5.0", 
		  "Msxml2.XMLHTTP.4.0", 
		  "MSXML2.XMLHTTP.3.0", 
		  "MSXML2.XMLHTTP",
		  "Microsoft.XMLHTTP"];
		  var n = versions.length;
		  for (var i = 0; i <  n; i++) {
		   try {
		    if (xhr = new ActiveXObject(versions[i])) {
		     ms_xhr_ver = versions[i];
		     break;
		    }
		   } catch (e) { /* try next */ }
		  }
		  return xhr;
		 };
		}

    	var xmlhttp = new window.XMLHttpRequest();
		xmlhttp.open("GET",xsltFile,false);
		xmlhttp.send(null);
		var xslDoc = xmlhttp.responseXML.documentElement;
		if(window.ActiveXObject) {  
        	return xmlDoc.transformNode(xslDoc);
        } else {
	        var xslProcessor =new XSLTProcessor();
	        xslProcessor.importStylesheet(xslDoc);
	        return xslProcessor.transformToFragment(xmlDoc,document);
        }     
    }
}


