function HttpClient() { }
 HttpClient.prototype = {
     // type GET,POST passed to open
     requestType:'GET',
     // when set to true, async calls are made
     isAsync:false,
     // where an XMLHttpRequest instance is stored
     xmlhttp:false,

      // what is called when a successful async call is made
      callback:function(){},

      // what is called when send is called on XMLHttpRequest
      // set your own function to onSend to have a custom loading
     // effect
       onSend:function(){},

     // what is called when readyState 4 is reached, this is
     // called before your callback
      onload:function(){},

     // what is called when an http error happens
     onError:function(error) {
         alert(error);
     },

     // method to initialize an xmlhttpclient
     init:function() {
       try {
           // Mozilla / Safari
            this.xmlhttp = new XMLHttpRequest();
       } catch (e) {
           // IE
           var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
                                     'MSXML2.XMLHTTP.4.0',
                                     'MSXML2.XMLHTTP.3.0',
                                     'MSXML2.XMLHTTP',
                                     'Microsoft.XMLHTTP');
           var success = false;
           for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
               try {
                   this.xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
                   success = true;
               } catch (e) {}
           }
           if (!success) {
               this.onError('Unable to create XMLHttpRequest.');
           }
        }
     },

     // method to make a page request
     // @param string url  The page to make the request to
     // @param string payload  What you're sending if this is a POST
    //                        request
    makeRequest: function(url,payload) {
         if (!this.xmlhttp) {
             this.init();
         }
         this.xmlhttp.open(this.requestType,url,this.isAsync);

         // set onreadystatechange here since it will be reset after a
        //completed call in Mozilla
         var self = this;
         this.xmlhttp.onreadystatechange = function() {
        self._readyStateChangeCallback(); }

         this.xmlhttp.send(payload);

         if (!this.isAsync) {
             return this.xmlhttp.responseText;
         }
    },

     // internal method used to handle ready state changes
    _readyStateChangeCallback:function() {
         switch(this.xmlhttp.readyState) {
              case 2:
               this.onSend();
               break;
            case 4:
               this.onload();
               if (this.xmlhttp.status == 200) {
                   this.callback(this.xmlhttp.responseText);
               } else {
                   this.onError('HTTP Error Making Request: ' + '[' + this.xmlhttp.status + ']' + this.xmlhttp.statusText);
               }
               break;
         }
     }
 }
 
 function makeHttpRequest(url, callback_function, return_xml) { 
   var http_request = false; 

   try {
       // Mozilla / Safari
        http_request = new XMLHttpRequest();
   } catch (e) {
       // IE
       var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
                                 'MSXML2.XMLHTTP.4.0',
                                 'MSXML2.XMLHTTP.3.0',
                                 'MSXML2.XMLHTTP',
                                 'Microsoft.XMLHTTP');
       var success = false;
       for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
           try {
               http_request = new ActiveXObject(XMLHTTP_IDS[i]);
               success = true;
           } catch (e) {}
       }
       if (!success) {
		   alert('Unable to create XMLHttpRequest.'); 
		   return false; 
       }
    }

   http_request.onreadystatechange = function() { 
       if (http_request.readyState == 4) { 
           if (http_request.status == 200) { 
               if (return_xml) { 
                   eval(callback_function + '(http_request.responseXML)'); 
               } else { 
                   eval(callback_function + '(http_request.responseText)'); 
               } 
           } else { 
               alert('There was a problem with the request.(Code: ' + http_request.status + ')'); 
           }
       }
   }
   http_request.open('GET', url, true);
   http_request.send(null);
}
