/*====================
//  Ajax 2.0
//  Created By: Mike Luby (mike@vsocial.com)
//  This eliminates the need for JSBroadcaster
=====================*/
function Ajax(u) {
   this.RequestURL = u;
   this.QueryArray = new Object();
   this.xmlhttp = this.CreateRequest();
   this.UserHandler = null;
   this.RequestType = null;
   this.ReturnedData = null;
}
Ajax.prototype.CreateRequest = function() {
   var rHttp = false;
   try {
       rHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
       try {
              rHttp = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (E) {
              rHttp = false;
         }
    }
   if (!rHttp && typeof XMLHttpRequest != 'undefined') {
         rHttp = new XMLHttpRequest();
   }
   return rHttp;
}
Ajax.prototype.SetData = function( k, v ) {
   this.QueryArray[k] = escape(v);
}
Ajax.prototype.GetData = function() {
   var rVal = "";
   for( var p in this.QueryArray )  {
	   if (isArray(this.QueryArray[p])) {
	     for (i = 0; i < this.QueryArray[p].length; i++) {
	     	rVal += p + "[]=" + this.QueryArray[p][i] + "&";
	     }  
	   } else
	       rVal += p + "=" + this.QueryArray[p] + "&";
   }
   return rVal.substr(0, (rVal.length-1));
}
Ajax.prototype.SendRequest = function( ) {
   var type = "POST";
   for (var i = 0; i < arguments.length; i++) {
       type = arguments[i];
   }
   this.RequestType = type;
   try {
       if(this.UserHandler != null && this.UserHandler.onCreate) {
          this.UserHandler.onCreate();
       }
       switch( this.RequestType ) {
           case "GET":
               this.xmlhttp.open("GET", this.RequestURL + "?" + this.GetData(), true);
               this.xmlhttp.send(null);
           break;
           case "POST":
               this.xmlhttp.open("POST", this.RequestURL, true);
               this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
               this.xmlhttp.send(this.GetData());                   break;
       }
       var _this = this;
       this.xmlhttp.onreadystatechange = function() {
           if(_this.xmlhttp.readyState == 4){
               if(_this.xmlhttp.status == 200) {
                   _this.onDataRecieved( _this.xmlhttp.responseText );
               }
           }
       }
   } catch(e) {
       var Timar = window.setTimeout("100", "this.SendRequest('" + this.RequestType + "')");
   }
}
Ajax.prototype.onDataRecieved = function( str ) {
  // this.ReturnedData = str;
   if(this.UserHandler != null && this.UserHandler.onSuccess) {
      this.UserHandler.onSuccess( str );
   }
   this.ClearData();
}
Ajax.prototype.onError = function( str ) {
   if(this.UserHandler != null && this.UserHandler.onError) {
      this.UserHandler.onError( str );
   }
}
Ajax.prototype.Register = function(handler) {
       this.UserHandler = handler;
}
Ajax.prototype.ClearData = function() {
   this.QueryArray = new Object();
}
Ajax.prototype.SetFile = function(f) {
   this.RequestURL = f;
}

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}
