
function newXMLHttpRequest() {
   // Returns an new XMLHttpRequest object, or false if XMLHttpRequest is not supported by this browser.  
   var result = false; 
   if (window.XMLHttpRequest) {result = new XMLHttpRequest();}  // Non-IE browsers
   else if (window.ActiveXObject) { // IE browsers
      try {result = new ActiveXObject("Msxml2.XMLHTTP");} // XMLHTTP supported by later versions of IE.   
      catch (e1) {
         // Failed to create required ActiveXObject
         try {result = new ActiveXObject("Microsoft.XMLHTTP");} // XMLHTTP supported by older versions of IE.   
         catch (e2) {
            result = false; // XMLHTTP not supported
            }
         }
      }
   return result;
   }


function requestUrl(nodeID, url) {
   // Makes a XMLHttpRequest to url, and changes innerHTML of node at nodeID with the XMLHttpRequest's responseText.
   // Uncomment the following line so that during the XMLHttpRequest, nodeID is replaced with 'loading...'.
   // document.getElementById(nodeID).innerHTML = 'loading...';
   XMLHttpRequestObject = newXMLHttpRequest();
   if (XMLHttpRequestObject) {
      XMLHttpRequestObject.onreadystatechange = function() {changeNode(nodeID, XMLHttpRequestObject);};
      XMLHttpRequestObject.open("GET", url, true);
      XMLHttpRequestObject.send("");
      }
   }  


function changeNode(nodeID, XMLHttpRequestObject) {
   // Changes innerHTML of node at nodeID with responseText. 
   // Changes innerHTML of node at nodeID with error message if an error occurs.
   if (XMLHttpRequestObject.readyState == 4  /* "loaded" */) {  
      if (XMLHttpRequestObject.status == 200 /* "OK"     */) {document.getElementById(nodeID).innerHTML = XMLHttpRequestObject.responseText;}
      else {                                                  document.getElementById(nodeID).innerHTML ="Nodechange error:\n"+ XMLHttpRequestObject.status + "\n" + XMLHttpRequestObject.statusText;}
      }
   }
