  function Transfers(){
     //=======private property========================================================
     var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
     var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
     var currentfile=null
     var errors=new Array()
     var onErrorReload=false
     var validateOnParse=false
     var docAsync=false
     var httpAsync=true
     var tagertURL=null
     var loadReturnData=true
    //=========interface============================================================
     var showData=null
     var showState=null
     
    //===========set get==============================================================
    
    //+-------------------------------------------------------------------------------
    this.setDocAsync=function(bFlag){
        docAsync=bFlag
    }
    //+-------------------------------------------------------------------------------
    this.setHttpAsync=function(bFlag){
       httpAsync=bFlag
    } 
    //+-------------------------------------------------------------------------------
    this.setTagertURL=function(sURL){
      tagertURL=sURL
    } 
    //+-------------------------------------------------------------------------------
    this.setValidateOnParse=function(bFlag){
     validateOnParse=bFlag
    }
    
    //========public method===========================================================
     
     //+-------------------------------------------------------------------------------
     //method:             load
     //description:        load an xml file to the xmldoc 
     //input:              path,the path of xml file
     //return:             nothing  
     //--------------------------------------------------------------------------------
     this.load=function(path){
      
       intXMLDoc()
       currentfile=path
            try{
              
              xmldoc.load(path)
            }
            catch(e){
              addError(new Error(505,e.message))
            }
         
     }
     //+------------------------------------------------------------------------------
     //
     //
     //-------------------------------------------------------------------------------
     function intXMLDoc(){
       with(xmldoc){
            xmldoc.onreadystatechange =docReadyStateChange
            async=docAsync
            validateOnParse=validateOnParse
       }
     }
     
     
     //+-------------------------------------------------------------------------------
     //method:             startTansfer
     //description:        send an xml file or other object to a special url 
     //input:              target,method,value
     //return:             nothing  
     //--------------------------------------------------------------------------------
     this.startTansfer=function(sTarget,sMethod,sValue){
       var target=this.tagertURL
       var method="POST"
       var value=xmldoc
      // alert(sTarget)
       switch(arguments.length){
         case 3:
           value=sValue
           
         case 2:
           method=sMethod
         
         case 1:
           target=sTarget
           break
         
         case 0:  

           break
         default:
           addError(new Error(105,"invalid argument for method startTansfer..."))
           break
       }
        xmlhttp.abort()
        xmlhttp.onreadystatechange=httpReadStateChange
        xmlhttp.open(method,target,httpAsync)
        xmlhttp.send(value)
     }
     
     //+-------------------------------------------------------------------------------
     //method:             httpHeader
     //description:        get current xmlhttp's http header 
     //input:              special header,defult is all
     //return:             string   
     //--------------------------------------------------------------------------------
     this.httpHeader=function(sHeader){
      
      if (arguments.length==0)
        return xmlhttp.getAllResponseHeaders()
      else
		return xmlhttp.getResponseHeader(sHeader)
     }
     
     //+-------------------------------------------------------------------------------
     //method:             addError
     //description:        add an Error object to the Errors array 
     //input:              an Error object
     //return:             nothing   
     //--------------------------------------------------------------------------------
     function addError(oError){
       errors[errors.length]=oError
     }
     
    
     //+-------------------------------------------------------------------------------
     //method:             docReadyStateChange
     //description:        for the xmldoc's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
    function docReadyStateChange(){
    
       if (xmldoc.readyState==4){
         xmlhttp.onReadyStateChange=new Function()
           if (xmldoc.parseError.errorCode != 0){
           	  
             addError(new Error(103,xmldoc.parseError.reason))
              if(onErrorReload){
                this.load(src.curfile)
              }
           }
           else{
             
              if(typeof(showData)=="function"){
                 showData(xmldoc)
               }
               else if(typeof(showData)=="object"){
                 showData=xmldoc
               }
               else if(typeof(showData)=="string"){
                 showData=xmldoc.xml
               }
               else if(showData!=null){
                 addError(new Error(104,"no this showdata function..."))
               }
           }
  
        }
      }
     
     //+-------------------------------------------------------------------------------
     //method:             httpReadyStateChange
     //description:        for the xmlhttp's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
     function httpReadStateChange(){
       var readyState=xmlhttp.readyState 
         
         if (typeof(showState)=="function"){
         	  
            showState(readyState)
         }
         //alert("dfd")
        if (readyState==4){
          	xmlhttp.onReadyStateChange=new Function()
		    if(loadReturnData){
		      intXMLDoc()
		          var tempstr="<?xml version='1.0' encoding='gb2312'?>" + xmlhttp.responseText
              xmldoc.loadXML(tempstr)
              
             }
          
          
        }
     }
     
     //+-------------------------------------------------------------------------------
     //method:             httpReadyStateChange
     //description:        for the xmlhttp's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
     this.showData=function(func){
        
        showData = func
        
     }

     //+-------------------------------------------------------------------------------
     //method:             httpReadyStateChange
     //description:        for the xmlhttp's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
     this.showState=function(func){
        
        showState=func
        
     }

     
     //+-------------------------------------------------------------------------------
     //method:             Errors
     //description:        for the xmlhttp's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
     this.Errors=function(){
       if (errors.length==0){
         return false
       }
       else{
         return errors
       }
     }
     //+-------------------------------------------------------------------------------
     //method:             onErrorReload
     //description:        for the xmlhttp's onReadyStateChange event
     //input:              nothing
     //return:             nothing   
     //--------------------------------------------------------------------------------
     this.onErrorReload=function(bFlag){
       onErrorReload=bFlag
     }
     //+-------------------------------------------------------------------------------
     this.loadReturnData=function(bFlag){
       loadReturnData=bFlag
     }
     //+-------------------------------------------------------------------------------
     this.abort=function(){
       xmlhttp.abort()
     }
          
     //=========inner class==========================================================
     function Error(number,description){
       this.number=number
       this.description=description
     }
    
  }

