﻿

var FrameWork = {
    AJAX:   Object
};

FrameWork.AJAX = function(){
    
    var xmlRequest;
    var _pendingCallbacks = new Array();
    var _synchronousCallBackIndex = -1;
    var _requestid=-1;
    var callback = new Object();
    
    function FillFirstAvailableSlot(array, element) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (!array[i]) break;
    }
    array[i] = element;
    return i;
    }
   
    //Method for returning an ajax enabled    
    var ajaxObject = function(){
        try{return new XMLHttpRequest();}catch(ex){};
        try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(ex){};
     }//end ajaxObject()
     
      
    //Method for aborting ajax request.
    this.abortRequest = function(){
      if(xmlRequest){
        xmlRequest.abort();}
    }//end abortRequest()
    
    
    //Method for calling a page using AJAX.
    this.makeRequest = function(url,requestid){        
       try{
           var oThis = this;
           xmlRequest = ajaxObject();
           var callbackIndex = FillFirstAvailableSlot(_pendingCallbacks, xmlRequest);
           _synchronousCallBackIndex = callbackIndex;
           _requestid=requestid;
           
           xmlRequest.onreadystatechange = function(){ oThis.ReadyStateChange(); };
           xmlRequest.open("POST", url, true);
           xmlRequest.send(null);
       }
       catch(ex){
           alert(ex);
       }
    }//end makeRequest()
    
    
this.OnLoading = function()
{
  //alert("Loading");
}
 
this.OnLoaded = function()
{
  //alert("Loaded");
}
 
this.OnInteractive = function()
{
  //alert("Interactive");
}
 
this.OnComplete = function(responseText, responseXml,requestid)
{
  //alert("Complete");
}
 
this.OnAbort = function()
{
  // Abort
}
 
this.OnError = function(status, statusText)
{
  // Error
}
this.ReadyStateChange = function()
    {
       for (i = 0; i < _pendingCallbacks.length; i++) {
              callbackObject = _pendingCallbacks[i];
              if(callbackObject.readyState == 1 )
              {
                this.OnLoading();
              }
              else if(callbackObject.readyState == 2 )
              {
                this.OnLoaded();
              }
              else if( callbackObject.readyState == 3 )
              {
                this.OnInteractive();
              }
              else if( callbackObject.readyState == 4 )
              {
                  if(callbackObject.status == 0 )
                    this.OnAbort();
                  else if(callbackObject.status == 200 && callbackObject.statusText == "OK" )
                    {
                     _pendingCallbacks[i] = null;
                    this.OnComplete(callbackObject.responseText, callbackObject.responseXML,_requestid);
                    }
                  else
                    this.OnError(callbackObject.status, callbackObject.statusText, callbackObject.responseText);   
            }
        }
  }     
};//end 

