﻿//作者：聪少，创建于2006-11-15，最后修改于2006-11-16
//功能：实现简单的Ajax封装


function AjaxDo(){
	this.GetPage=AjaxDo_GetPage;
	this.PostPage=AjaxDo_PostPage;
	this.GetXMLPage=AjaxDo_GetXMLPage;
	this.PostXMLPage=AjaxDo_PostXMLPage;
	this.GetXSLPage=AjaxDo_GetXSLPage;
	this.transformNode=AjaxDo_TransformNode;
	this.OutPut=AjaxDo_OutPut;
	this.XMLDom = false;
	this.url_xml="";
	this.url_xsl="";
	this.div_ID="";
	this.XMLPage_XML="";
	this.XMLPage_Text=""
	this.XSLPage="";
	this.HTMLPage="";
	this.script=false;
	this.callback=false;
	this.fun_callback=false;
  this.request_xml=false;
  this.tryTimes=false;
  this.postData=false;
  this.asyn=true;
  try 
  { 
    this.request_xml = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try 
    {
      this.request_xml = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try 
      {
        this.request_xml = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        this.request_xml = false;
      } 
    }
  }
    
  this.request_xsl = false;
  try 
  { 
    this.request_xsl = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try 
    {
      this.request_xsl = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try 
      {
        this.request_xsl = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        this.request_xsl = false;
      } 
    }
  }
}

function AjaxDo_GetPage(url_xml,url_xsl,div_ID){
	this.url_xml=url_xml;
	this.url_xsl=url_xsl;
	this.div_ID=div_ID;
	this.tryTimes=3;
	if(this.asyn){
		this.GetXMLPage();
	}else{
		return this.GetXMLPage();
	}
}

function AjaxDo_PostPage(url_xml,url_xsl,postData,div_ID){
	this.url_xml=url_xml;
	this.url_xsl=url_xsl;
	this.postData=postData;
	this.div_ID=div_ID;
	this.tryTimes=3;
	this.PostXMLPage();
}

function AjaxDo_GetPage_Callback(url_xml,url_xsl,div_ID,fun_callback){
  this.url_xml=url_xml;
	this.url_xsl=url_xsl;
	this.div_ID=div_ID;
	this.callback=true;
	this.fun_callback=fun_callback;
	this.GetXMLPage();
}

function AjaxDo_GetXMLPage(){
	var obj=this;
  this.request_xml.open("GET", this.url_xml, this.asyn);
  if(this.asyn){
    this.request_xml.onreadystatechange = function(){
    	if (obj.request_xml.readyState == 4) {
    		if (obj.request_xml.status == 200) {
    			obj.XMLPage_XML=obj.request_xml.responseXML;
          obj.XMLPage_Text=obj.request_xml.responseText;  			
          if(obj.url_xsl!=""){
          	//alert(obj.XMLPage_Text);
          	obj.GetXSLPage();
          }else{
          	obj.HTMLPage=obj.XMLPage_Text;
          	obj.OutPut();
          }
          obj.request_xml=false;
        } else {
        	obj.HTMLPage=obj.request_xml.status;
          obj.OutPut();
        }
      }
    };
  }
  //this.request_xml.setrequestheader("cache-control","no-cache");
  this.request_xml.send(null);
  if(!this.asyn){
    if (this.request_xml.readyState == 4) {
      if (this.request_xml.status == 200) {
      	return this.request_xml.responseText;
      }
    } 	
  }
}

function AjaxDo_PostXMLPage(){
	var obj=this;
  this.request_xml.open("POST", this.url_xml, true);
  this.request_xml.onreadystatechange = function(){
  	if (obj.request_xml.readyState == 4) {
  		if (obj.request_xml.status == 200) {
  			obj.XMLPage_XML=obj.request_xml.responseXML;
        obj.XMLPage_Text=obj.request_xml.responseText;  			
        if(obj.url_xsl!=""){
        	//alert(obj.XMLPage_Text);
        	obj.GetXSLPage();
        }else{
        	obj.HTMLPage=obj.XMLPage_Text;
        	obj.OutPut();
        }
        obj.request_xml=false;
      } else {
      	obj.HTMLPage=obj.request_xml.status;
        obj.OutPut();
      }
    }
  };
  this.postData = encodeURI(this.postData);
  this.postData = encodeURI(this.postData);
  //alert(this.postData);
  this.request_xml.setrequestheader("cache-control","no-cache"); 
  this.request_xml.setrequestheader("Content-Type","application/x-www-form-urlencoded"); 
  this.request_xml.setrequestheader("Content-Length",this.postData.length);
  this.request_xml.send(this.postData);
}

function AjaxDo_GetXSLPage(){
	var obj=this;
	this.request_xsl.open("GET", this.url_xsl, true);
  this.request_xsl.onreadystatechange = function(){
    if (obj.request_xsl.readyState == 4) {
      if (obj.request_xsl.status == 200) {
    	  obj.XSLPage=obj.request_xsl.responseXML;
    	  obj.request_xsl=false;
    	  obj.transformNode();
    	  obj.OutPut();
	    } else {
	    	obj.HTMLPage=obj.request_xsl.status;
        obj.OutPut();
      }
    }
  };
  this.request_xsl.send(null);
}

function AjaxDo_TransformNode(){
	try{
	  this.XMLDom=new ActiveXObject("Microsoft.XMLDOM");
	  this.XMLPage_Text=this.XMLPage_Text.replace(/&/g,"&amp;");
	  //alert(this.XMLPage_Text);
	  this.XMLDom.loadXML(this.XMLPage_Text);
	  this.HTMLPage=this.XMLDom.transformNode(this.XSLPage);
	  this.HTMLPage=this.HTMLPage.replace(/&quot;/g,"\'");
    this.HTMLPage=this.HTMLPage.replace(/&amp;/g,"&");
	}catch(NotIE){
		this.HTMLPage="对不起，你现在使用的不是IE浏览器，请使用IE浏览器浏览本站，谢谢！";
		this.OutPut();
	}
}

function AjaxDo_OutPut(){
	var obj=this;
  if(this.callback){
  	this.fun_callback(this.HTMLPage);
  }else{
    var OutHTML=function(){
    	if(obj.tryTimes--<0)return;
  	  var el=document.getElementById(obj.div_ID);
	    if(el){
		    if(obj.script){
		    	setInnerHTML(el,obj.HTMLPage);
		    }else{
		    	//alert(obj.HTMLPage);
		    	el.innerHTML=obj.HTMLPage;
		    }
	    }else{
		    setTimeout(OutHTML,100);
	    }
    };
    if(this.div_ID=="")return;
    OutHTML();
  }
}


