	//  sample var instantiation:
	//  var xmlDoc  = XmlDocument.create();
	//  var xmlHttp = XmlHTTP.create();
	
	//  http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
	function XmlHTTP() {}
	XmlHTTP.create = function () {
		try {
			if (window.XMLHttpRequest) {
				//alert('xmlHTTP - has XMLHTTPRequest');
				var req = new XMLHttpRequest();
			 
				// some older versions of Moz did not support the readyState property
				// and the onreadystate event so we patch it!
				if (req.readyState == null) {
					req.readyState = 1;
					req.addEventListener("load", function () {
						req.readyState = 4;
						if (typeof req.onreadystatechange == "function")
							req.onreadystatechange();
					}, false);
				}
				return req;
			}
			if (window.ActiveXObject) {
				//alert('xmlHTTP - activeXObject');
				return new ActiveXObject(getControlPrefix() + ".XmlHttp");
			}
		}
		catch (ex) {}
		// fell through
		throw new Error("Your browser does not support XmlHttp objects");
		//return null;
	};
	
	//  http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
	function getControlPrefix() {
	   if (getControlPrefix.prefix) { return getControlPrefix.prefix; }
	   
	   var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	   var o, o2;
	   for (var i = 0; i < prefixes.length; i++) {
	      try {
	         // try to create the objects
	         o = new ActiveXObject(prefixes[i] + ".XmlHttp");
	         o2 = new ActiveXObject(prefixes[i] + ".XmlDom");
	         return getControlPrefix.prefix = prefixes[i];
	      }
	      catch (ex) {};
	   }
	   
	   throw new Error("Could not find an installed XML parser");
	}
	
	//  http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
	// XmlDocument factory
	function XmlDocument() {}
	XmlDocument.create = function () {
	   try {
	      // DOM2
	      if (document.implementation && document.implementation.createDocument) {
	         var doc = document.implementation.createDocument("", "", null);
				
	         // some versions of Moz do not support the readyState property
	         // and the onreadystate event so we patch it!
	         if (doc.readyState == null) {
	            doc.readyState = 1;
	            doc.addEventListener("load", function () {
	               doc.readyState = 4;
	               if (typeof doc.onreadystatechange == "function")
	                  doc.onreadystatechange();
	            }, false);
	         }
				
	         return doc;
	      }
	      if (window.ActiveXObject) {
	      		//alert('activex xml');
	         return new ActiveXObject(getControlPrefix() + ".XmlDom");
		  }
	   }
	   catch (ex) {}
	   throw new Error("Your browser does not support XmlDocument objects");
	};
	
	function isIE7() {
		var ver = 0;
		if (navigator.appVersion.indexOf("MSIE")!= -1) {
			var t = navigator.appVersion.split("MSIE");
			ver = parseFloat(t[1]);
		}
		return (ver>6.0);
	}

	function isFF3() {
    return (navigator.appName=="Netscape" && parseFloat(navigator.appVersion)>=5);
	}

	function sendReq(d,f,url,arg) {
		var xmlHttp = XmlHTTP.create();

		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4 && xmlHttp.status == 200) 
			{procResponse(d,f,xmlHttp);}
		}

		var xmlString, async = true;
		if (null == arg || ''==arg) {
			xmlHttp.open("GET", url, async);
			xmlHttp.send(arg);
  			xmlString = xmlHttp.responseText;
		} else {
			xmlHttp.open("POST", url, async);
			if (isIE7() || isFF3())
			  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			else
			  xmlHttp.setrequestheader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.send(arg);
			//xmlString = xmlHttp.responseText;
		}
		return xmlString;
	}
	