﻿/** 
* @projectDescription  xmlHttp Library
*
* @author Ryan Estes  http://www.codeapedia.com
* @version (Short Version) 0.1 
*/

function xmlHttp(pWebRequestObject)
{
   this._requestObject = pWebRequestObject; // webRequest Object
   this.postData = null; // QueryString Object
   
   // event handlers
   this.onError = function(e) { }
   this.onPreRequest = function(obj) { }
   this.onPreRequestComplete = function(obj) { }
   this.onRequest = function(obj) { }
   this.onRequestComplete = function(obj) { }

   /**
   * @return {void}
   */
   this.getResponse = function() {
      if(this._requestObject == null || this._requestObject.xmlHttpRequest == null)
      {
         throw "webRequest cannot be null or undefined";
      }
      var onPreRequestRef = this.onPreRequestRef;
      var onPreRequestCompleteRef = this.onPreRequestComplete;
      var onRequestRef = this.onRequest;
      var onRequestComplete = this.onRequestComplete;
      try
      {
         var objRequest = this._requestObject.xmlHttpRequest;
         objRequest.onreadystatechange = function() {
            if(objRequest.readyState == 0) { onPreRequestRef(objRequest); }
            else if (objRequest.readyState == 1) { onPreRequestCompleteRef(objRequest); }
            else if (objRequest.readyState == 2) { onRequestRef(objRequest); }
            else if (objRequest.readyState == 4) { onRequestComplete(objRequest); }
         }
         objRequest.open(this._requestObject.method,this._requestObject.url,this._requestObject.async);
         if(this._requestObject.method == "POST")
         {
            objRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
         }
         if(this.postData != null)
         {
            objRequest.send(this.postData.toString().replace("?",""));
         }
         else
         {
            objRequest.send(null);
         }
         
      }
      catch(e)
      {
         this.onError(e);
      }
   }
}

function webRequest()
{
   this.url = (arguments.length == 1)? arguments[0] : null;
   this.method = "GET";
   this.async = false;
   this.xmlHttpRequest = null;   
   
   /**
   * @return {void}
   */
   this.create = function() {
      if(arguments.length == 1)
      {
         this.url = arguments[0];
      }
      try
      {
         if(window.ActiveXObject)
         {
            this.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
         }
         else if (window.XMLHttpRequest)
         {
            this.xmlHttpRequest = new XMLHttpRequest();
            if(this.url.indexOf(".xml") != -1)
            {
                if(this.xmlHttpRequest.overrideMimeType)
                {
                   this.xmlHttpRequest.overrideMimeType('text/xml');
                   this.async = true;
                }
            }
         }
      }
      catch(e)
      {
         this.onError(e);
      }
   }
   
   if(this.url != null)
   {
      this.create();
   }
   
   // event handler
   this.onError = function(e) {
      alert(e.message);
   }
}