// Summary: Encapsulate the XmlHttpRequest object.
// Author:  Mark Horila
// Updated: 11/12/2007

function XHR(){
	var xmlhttp;

	try{
		// Firefox, Opera 8.0+, Safari, IE7
		xmlhttp = new XMLHttpRequest();
	}
	catch (e){
		// < IE7
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e){
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e){
				alert("Your browser does not support AJAX.\nPlease contact your system administrator. Your computer might require a browser upgrade or service pack.");
				return null;
			}
		}
	}	
  
	this.getRequest = function(sURL, sResponseType, fnOnComplete){
		if(!xmlhttp) return false;
		xmlhttp.open('GET', sURL, true);
		xmlhttp.onreadystatechange = function(){
			if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) fnOnComplete(sResponseType.toLowerCase() == "text" ? xmlhttp.responseText : xmlhttp.responseXML);
		};
		xmlhttp.send(null);
		return true;
	};
	
	this.postRequest = function(sURL, sVar, sResponseType, fnOnComplete){
		if(!xmlhttp) return false;
        xmlhttp.open('POST', sURL, true);
		xmlhttp.onreadystatechange = function(){
			if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) fnOnComplete(sResponseType.toLowerCase() == "text" ? xmlhttp.responseText : xmlhttp.responseXML);
		};
        xmlhttp.setRequestHeader('Method', 'POST '+sURL+' HTTP/1.1');
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlhttp.send(sVar);
		return true;
	};

	this.postXmlRequest = function(sURL, sXml, sNamespaceUrl, sMethod, sResponseType, fnOnComplete){
		if(!xmlhttp) return false;
        xmlhttp.open('POST', sURL, true);
		xmlhttp.onreadystatechange = function(){
			if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) fnOnComplete(sResponseType.toLowerCase() == "text" ? xmlhttp.responseText : xmlhttp.responseXML);
		};

		xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
		xmlhttp.setRequestHeader('Content-Length', sXml.length);
		xmlhttp.setRequestHeader('SOAPAction', sNamespaceUrl + '/' + sMethod);

		xmlhttp.send(sXml);
		return true;
	};
	
	this.isBusy = function() { return isObjectBusy; };
	  
	return this;  
}
