﻿/*===========================================================================
 * 
 *   主体开发：  KaiSin
 *   对象功能：  Ajax远程操作功能
 *   代码连接：  http://Res.Aooshi.Com/JScript/Ajax.js
 *   生成日期：  2007/8/16
 *  
 ===========================================================================*/
var eAjaxisDebug = false;
function eAjax()
{
   var Pms           = new Array();
   var ContentType   = "";
   var HttpXml       = null;
   var p_callBack    = null;
   var p_isPost      = false;
   var p_Url         = "";
   var p_callError   = null;
   
   function eAjaxDebug(msg){if (eAjaxisDebug){ alert(msg)};}
   function Create()
   {
      if (window.XMLHttpRequest)
      {
		 eAjaxDebug("new XMLHttpRequest();");
         return new XMLHttpRequest();
      }
      else if (ActiveXObject)
      {
        var XmlList = new Array("MSXML4","MSXML3","MSXML2","MSXML","Microsoft");
        for(var i=0;i<XmlList.length;i++)
        {
           try
           {
             return new ActiveXObject(XmlList[i] + ".XMLHTTP");
           }
           catch(e)
           {
		     eAjaxDebug(XmlList[i] + "\n" + e.toString());
           }
        }
      }
      return null;
   }
   function GetParms()
   {
     var Pm = "";
     if (Pms && Pms.length>0)
     {
          Pm = Pms[0].Name + "="  + escape(Pms[0].Value);
          for(var i=1;i<Pms.length;i++)
          {
              Pm += "&" + Pms[i].Name + "=" + escape(Pms[i].Value);
          }
      }
      return Pm;
   }
   function PrameItem(Name,Value)
   {
       this.Name = Name;
       this.Value = Value;
   }
   function ExecuteGETURL(URL,Data)
   {
      if (Data == "") return URL;
      if (URL.indexOf("?") != -1)
      {
        if (URL.lastIndexOf("?") == (URL.length - 1))
        {
            return URL+Data;
        }
        return URL + "&" + Data;
      }
      return URL + "?" + Data;
   }
   function cAjaxObject(hName,hType,Txt)
   {
	 eAjaxDebug(Txt);
     var obj;
     if (hName && hName.length > 0)
     {
        eval(Txt);
        if (hType == "ARRAY")
        {
           return eval(hName);
        }
        if (hType == "CLASS")
        {
           return eval("new " + hName);
        }
        return Txt;
     }
     return Txt;
   }
   function eAjax_Response()
   {
      if (HttpXml.readyState == 4)
      { 
            if (HttpXml.status == 200 )
            {
                  var hName = HttpXml.getResponseHeader("X-Aooshi.Ajax-NAME");
                  var hType = HttpXml.getResponseHeader("X-Aooshi.Ajax-TYPE");
                  var cType = HttpXml.getResponseHeader("Content-Type");
                  var isXML = (cType && cType.indexOf('text/xml') != -1);  //是否为xml;

                  if (hName) eAjaxDebug("Head Name:" + hName);
		          if (hType) eAjaxDebug("Head Type:" + hType);
		          if (cType) eAjaxDebug("Head Cont:" + cType);
		          
                  if (p_callBack)
                  {
		                if (isXML)
		                   p_callBack(HttpXml.responseXML);
                        else
                           p_callBack(cAjaxObject(hName,hType,HttpXml.responseText));
                  }
                  else
                  {
		                if (isXML)
		                   return (HttpXml.responseXML);
                        else
                           return cAjaxObject(hName,hType,HttpXml.responseText);
                  }
                  eAjaxDebug("callBack OK!");
            }
            else if (HttpXml.status == 404)
            {
		       alert("服务器返回404异常,未找到页!SERVER 404");
		       if (p_callBack) p_callBack(null);
		       else return null;
            }
            else
            {
                //alert("Ajax远端调用出错,请重试;Ajax Error!");
		        if (p_callError){ p_callError(HttpXml.statusText,HttpXml.responseText);return null;}
		        else {
		        		var r = new RegExp("<title>(.*)</title>","i");
		        		if (r.exec(HttpXml.responseText) != null)
		        		{
		        			alert("发生错误:\n\n" + RegExp.$1);
		        		}
		        }
		        if (p_callBack) p_callBack(null);
		        else return null;
	        }
       }
   }
   function Init()
   {
       HttpXml = Create();
       if (HttpXml == null)
       {
             var er  = "提示信息：\n\n";
                 er += "   1、你的游览器太旧或不支持MSXML；\n";
                 er += "   2、请使用IE5.0以上游览器浏览本页；\n";
                 er += "   ---------------------------------------\n";
                 er += "   2、Please IE5.0 Update Or High;\n";
                 er += "   ---------------------------------------\n";
                 er += "   XMLHttpRequest create failure!";
            alert(er);
            return false;
       }
       if (p_Url == null || p_Url == "")
       {
             var noURL = "未设置远程调用URL;\n Not Set Url;";
             alert(noURL);
             return false;
       }
       return true;
   }
   this.callBack     = null;
   this.callError    = null;
   this.isPost       = false;
   this.Url          = "";
   this.Add = function(Name,Value){ Pms[Pms.length] = new PrameItem(Name,Value); }
   this.Get = function()//异常时,返回为null
   {
       p_Url          = this.Url;
       p_callBack     = this.callBack;
       p_isPost       = this.isPost;
       p_callError    = this.callError;
       
       if (!Init()) return;
       
       var sData      = GetParms();
       var sMethod    = (p_isPost)?"POST":"GET";
       
       if (p_isPost)
       {
           ContentType   = "application/x-www-form-urlencoded";
       }
       else
       {
           ContentType   = "text/xml";
           p_Url = ExecuteGETURL(p_Url,sData);
           sData = "";
       }
       
         eAjaxDebug( "Get To :" + p_Url );
         
		 p_Url+=(p_Url.indexOf("?")>-1)?"&":"?";
	      p_Url+= "tmpsessionid=" + Math.random();
         
         if (p_callBack)
         {
            HttpXml.onreadystatechange = eAjax_Response;
            HttpXml.open(sMethod,p_Url,true);
            HttpXml.setRequestHeader("Content-Type", ContentType);
            HttpXml.send(sData);
            eAjaxDebug("Send Request CallBack Over;\n\n" + sData );
            return null;
         }
         else
         {
            HttpXml.open(sMethod,p_Url,false);
            HttpXml.setRequestHeader("Content-Type", ContentType);
            HttpXml.send(sData);
            eAjaxDebug("Send Request Over;\n\n" + sData);
            return eAjax_Response();
         }
   }
}
//打开调试器
function AjaxDebug(){eAjaxisDebug = true;}
//简单页文件打开
function AjaxOpen(url,backCall,backError)
{
    var Aj = new eAjax();
    Aj.Url = url;
    Aj.callBack = backCall;
    Aj.ServerErrorBack = backError;
    if (!backCall) return Aj.Get();
    Aj.Get();
}