﻿

function AJAX()
{
  var m_request;
  
  this.m_request = m_request;
}

AJAX.prototype.CreateXmlHttpObject = function( reuseRequest, mimeType )
{
  if (( reuseRequest) && (this.m_request))
  {
    if (( this.m_request.readyState != 4 ) && ( this.m_request.readyState != "complete" ))
      this.m_request.abort();
    return this.m_request;
  }
  
  var req = false;
  if (window.XMLHttpRequest) // Mozilla, Safari,...
  { 
    req = new XMLHttpRequest();
    if ( req.overrideMimeType )
      req.overrideMimeType( mimeType );
  } 
  else if (window.ActiveXObject) // IE
  {
    try
    {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e)
    {
      try
      {
         req = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (e) {}
    }
  }
  this.m_request = req;
  return req;
}

AJAX.prototype.SendRequest = function( reuseRequest, script, requestString, cache, mimeType, callingContext, callback, carryAlong )
{
  var xmlHttp = this.CreateXmlHttpObject( reuseRequest );
  if ( !xmlHttp )
    return false;
    
  var url = script + "?" + requestString
  if ( !cache )
    url += "&sid=" + Math.random();
  
  var _this = this;
  
  xmlHttp.open( "GET", url, true );
  xmlHttp.onreadystatechange = function() {
    try
    {
      if (( xmlHttp.readyState == 4 ) || ( xmlHttp.readyState == "complete" ))
      {
        if ( xmlHttp.status == 200 )
          _this.HandleResponse( xmlHttp.responseText, callback, callingContext, carryAlong );
      }
    }
    catch(e) 
    {
      //debug(e);
      _this.m_request = null;
    }
  };
  xmlHttp.send( null );
  return xmlHttp;
}

AJAX.prototype.HandleResponse = function( strResponse, callback, callingContext, carryAlong )
{
  if ( !callback )
    return;

  callback.call( callingContext, strResponse, carryAlong );
}