// this code is in the non working code folder because of an issue on Mac machines with the event functions and prototype object not working together //properly

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:false,

  // what is called when send is called on XMLHttpRequest
  // set your own function to onSend to have a custom loading
  // effect
  onSend:function() {
    //document.getElementById('HttpClientStatus').style.display = 'block';
  },

  // what is called when readyState 4 is reached, this is
  // called before your callback
  onload:function() {
    //document.getElementById('HttpClientStatus').style.display = 'none';
  },

  // 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);
	if(this.requestType.toLowerCase() == 'post') {
		//set request headers if type is POST.
		this.xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;');
		this.xmlhttp.setRequestHeader("Content-length", payload.length);
		this.xmlhttp.setRequestHeader("Connection", "close");
	}

   // 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;
    }
  }
}
