Ext.tsinnet.SJAX=function(){};
Ext.tsinnet.SJAX.prototype={
  requestType:'POST',
  isAsync:false,
  xmlhttp:false,  // 保存XMLHttpRequest实例的地方
  callback:false,// 当发送了一个成功的异步调用后将调用的内容	
  // 当调用XMLHttpRequest的send方法时将调用的内容
  // 为onSend设置自定义的函数，使其能够完成自定义载入的效果
  onSend:false,

  // 当readyState的值为4时将调用的内容
  // 该调用将在回调函数之前进行
  onLoad:false,
  // 当出现http错误时将调用的内容
  onError:function(error) {
    alert(error);
  },
  // 实例化一个xmlhttpclient的方法
  init:function() {
    var xmlhttp=false;
    var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP');
    var success = false;
    for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
      try {
        xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
        success = true;
      } catch (e) {}
    }
    if (!success)
    {
      try {
        // Mozilla / Safari / IE7
        xmlhttp = new XMLHttpRequest();
      } catch (e) {}
    }
    if (!success) {
      this.onError('创建XMLHttpRequest失败。');
    }
    return xmlhttp;
  },

  // 发起页面请求的方法
  // @参数url，字符串型，请求的页面
  // @参数postParas，字符串型，如果是POST请求就需要发送该参数
  request: function(url,postParas) {
    if (!this.xmlhttp) {
      this.xmlhttp=this.init();
      if (!this.xmlhttp){
        return "";
      }
    }
    var paraStr="";
	  if (postParas){
	    if (typeof postParas==="string"){
	      paraStr = postParas;
	    }else{
	      paraStr = Ext.urlEncode(postParas);
	    }
    }
    if (this.requestType.toLowerCase()==="get"){
	    if (paraStr!==""){
	      if (url.indexOf("?")>=0){
	        url=url+"&"+paraStr;
	      }else{
	        url=url+"?"+paraStr;
	      }
      }
    }
    this.xmlhttp.open(this.requestType,url,this.isAsync);
    // 在此设置了onreadystatechange，由于在
    // Mozilla中完成一个调用后需要重新设置它
    var self = this;
    this.xmlhttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
    this.xmlhttp.onreadystatechange = function() {
      self._readyStateChangeCallback(); 
    }
    if (this.requestType.toLowerCase()==="post"){
      this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    }
    this.xmlhttp.send(paraStr);
    
    if (!this.isAsync) {
      return this.xmlhttp.responseText;
    }
  },

  // 用来处理ready state改变的内部方法
  _readyStateChangeCallback:function() {
    switch(this.xmlhttp.readyState) {
      case 2:
        if (this.onSend)
        {
          this.onSend();
        }
        break;
      case 4:
        if (this.onLoad)
        {
          this.onLoad();
        }
        if (this.xmlhttp.status == 200) {
          if (this.callback)
          {
            this.callback(this.xmlhttp.responseText);
          }
        } else {
          this.onError('HTTP Error Making Request: '+
            '['+this.xmlhttp.status+']'+this.xmlhttp.statusText);
        }
        break;
    }
  }
}
