function getReadyStateHandler(req, responseXmlHandler) {
  // Return an anonymous function that listens to the 
  // XMLHttpRequest instance
  return function () {

    // If the request's status is "complete"
    if (req.readyState == 4) {
      
      // Check that a successful server response was received
      if (req.status == 200) {

        // Pass the XML payload of the response to the 
        // handler function
        responseXmlHandler(req.responseXML);

      } else {

        // An HTTP problem has occurred
        alert("HTTP error: "+req.status);
      }
    }
  }
}

function newXMLHttpRequest() {

  var xmlreq = false;

  if (window.XMLHttpRequest) {

    // Create XMLHttpRequest object in non-Microsoft browsers
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    // Create XMLHttpRequest via MS ActiveX
    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e1) {

      // Failed to create required ActiveXObject

      try {
        // Try version supported by older versions
        // of Internet Explorer

        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {
      
        // Unable to create an XMLHttpRequest with ActiveX
      }
    }
  }

  return xmlreq;
}
			
function createXMLParser(xText){
  if(typeof DOMParser != "undefined") {
    var parseX = new DOMParser();
    return parseX.parseFromString(xText, "text/xml");
  } else if(typeof ActiveXObject != "undefined"){
     var XMLobj = new ActiveXObject("Microsoft.XMLDOM");
     if(XMLobj) {
       XMLobj.async = false;
       XMLobj.loadXML(xText);
       return XMLobj;
     } else {
        return false;
     }
  } else {
	 return false;
  }
}
