/*******************************************************************************
 * Simple AJAX Class
 *
 *  @param ary aryParam :
 *    aryParam[formmethod]   POST or GET
 *    aryParam[poststring]   'name=value&anothername=othervalue&so=on'
 *    aryParam[handler]      target program path/name
 *    aryParam[respontype]   XML or HTML
 *    aryParam[distancename] Result send to some Function its Name
 *
 *  @author  : Kevin <kevin@2200net.com>
 *  @package : Class AJAX
 *  @date    : 2007/02/10
 ******************************************************************************/


function ClassAJAX(aryParam)
{

  /*****************************************************************************
   * var property
   *
   *  @access
   ****************************************************************************/

  var _strHnadler    = aryParam['handler'],
      _strMethod     = aryParam['formmethod'],
      _strResponType = aryParam['respontype'],
      _strPostString = aryParam['poststring'],
      _strDisName    = aryParam['distancename'];
   

   
  /*****************************************************************************
   * Make obj of XMLHttpRequest
   *
   *  @return Object of XMLHttpRequest or false
   ****************************************************************************/

  function makeRequest()
  {
    var objRequest = false;
    
    // -- branch for native XMLHttpRequest object --
    if (window.XMLHttpRequest) {
      objRequest = new XMLHttpRequest();

      if (objRequest.overrideMimeType) {
        objRequest.overrideMimeType('text/xml');
      }
    }
    
        
    // -- branch for IE/Windows ActiveX version --
    else if (window.ActiveXObject) {
      try {
        objRequest = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e) {
        try {
          objRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
        }
      }
    }
        
    if (!objRequest) {
      alert('Error : Cannot create request connection');
      return false;
    }
	
    return objRequest;
  }
  
  
  
  /*****************************************************************************
   * Prepare XMLHttpRequest object
   *
   *  @return string for send use
   ****************************************************************************/
   
  function processReqChange(objRequest)
  {
    var strHandler;
    var strLastData;

    if (_strMethod == "GET") {
      strHandler    = _strHnadler + "?" + _strPostString;
      strLastData = null;
    }
    else {
      strHandler  = _strHnadler;
      strLastData = _strPostString;
    }
    
    objRequest.open(_strMethod, strHandler, true);

    if (_strMethod == "POST") {
      objRequest.setRequestHeader("Method", "POST " + strHandler + " HTTP/1.1");
      objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded" );
      objRequest.setRequestHeader("Content-Length", strLastData.length);
    }
	
    
    // -- waiting respong and catch result code --
    objRequest.onreadystatechange = function()
    {
    
      // -- only if request shows "complete" --
      if ( objRequest.readyState == 4 ) {

        // -- only if "OK" --
        if ( objRequest.status == 200 ) {

          // -- processing statements go here START --
          // var objRespon = objRequest.responseTEXT;
          var objRespon = (_strResponType == "XML")
                        ? objRequest.responseXML.documentElement
                        : objRequest.responseText;

          if ( !objRequest ) {
            return false;
          }
          else {
            if (_strDisName) {
              var strExecName = _strDisName + "(objRespon);";

              eval(strExecName);
            }

            return;
          }
          // -- processing statements go here END --
        }
        else
          alert("There was a problem retrieving the XML data:\n" + objRequest.statusText);
      }
    }
	
    return strLastData;
  }
  
  

  /*****************************************************************************
   * Call AJAX start method
   *
   *  @return Object of XMLHttpRequest
   ****************************************************************************/
   
  function call()
  {
    var objRequest  = makeRequest();
    var strLastData = processReqChange(objRequest);
	
    objRequest.send(strLastData);
  }
  
  
  
  return call();
}