/**
 * @author Lee Yeong Cheon
 * @version 1.00, 07/01/03
 * @since javascript 1.5
 */

  // XMLHttpRequest Class Define
  function HttpRequest() {

    this.getXMLHttpRequest = function() {
      var request = null;
      if(window.ActiveXObject) {
        try {
          request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
          try {
            request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(ex) {
            request = null;
          }
        }
      } else if(window.XMLHttpRequest) {
        request = new XMLHttpRequest();
      } else {
        request = null;
      }
      return request;
    }
    
    this.sendRequest = function(isAsync,method,uri,param,callback) {
      var request = this.getXMLHttpRequest();
      if(Validate.isNull(request)) {
        alert(Message.XMLHttpRequest.nonsupported);
        return null;
      }
      if(typeof isAsync != Type.Boolean) {
        isAsync = (Validate.isNull(isAsync) || Validate.isNull(isAsync.match(/^(true|false)$/gi))) ? true : eval(isAsync.match(/^(true|false)$/gi).toString().toLowerCase());
      }
      method = (Validate.isNull(method) || Validate.isNull(method.match(/^(get|post)$/gi))) ? "get" : method.match(/^(get|post)$/gi).toString().toLowerCase();
      if(!Validate.isNull(callback)) {
        var execute_callback = function() {
            if(request.readyState == 4) {
              switch(request.status) {
                case 200 :
                  if((typeof callback) == (Type.Function)) {
                    callback(request);
                  } else if((typeof callback) == (Type.String)) {
                    eval(callback);
                  }
                  break;
                default :
                  alert("Error "+request.status+" "+request.statusText);
              }
            }
        };
        if(Browser.isSafari||Browser.isMozes||Browser.isOpera) {
          request.onload = execute_callback;
        } else {
          request.onreadystatechange = execute_callback;
        }
      } else {
        if(Browser.isSafari||Browser.isMozes||Browser.isOpera) {
          request.onload = function(){};
        } else {
          request.onreadystatechange = function(){};
        }
      }
      param = Encode(param);
      if(method == "get") {
        uri += "?" + param;
        param = "";
      }
      request.open(method,uri,isAsync);
      if(window.opera && typeof request.setRequestHeader == Type.Function);
      request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
      request.send(param);
      return request;
    }
  }