function wsBehavior(){

   this.oHttpRequest = null;
   this.text = ""
   this.xml = null;
   
   this.wsUrl = "";
   this.wsAdd = "";

   this.newHttpRequest = function(){
      if (window.XMLHttpRequest){
         objRequest = new XMLHttpRequest();
      }
      else if (window.ActiveXObject){
         objRequest = new ActiveXObject("Msxml2.XMLHTTP");
         if (objRequest == null){
            objRequest = new ActiveXObject("Microsoft.XMLHTTP");
            if (objRequest == null){
               objRequest = null;
            }
         }
      }
      return(objRequest);
   }

   this.sendXml = function(strXml, parametros, modo, asincrono){
      oXml = new xmlBehavior();
      this.xml = oXml.newXmlDoc();
      
      this.oHttpRequest = new this.newHttpRequest();
      this.oHttpRequest.onreadystatechange = this.chkXMLHTTP;
      modo = modo.toUpperCase();
      if (modo=="GET"){
         this.oHttpRequest.open(modo, this.wsUrl + "?xml=" + strXml + "&" + parametros, asincrono);
         this.oHttpRequest.send(null);
      }
      else if (modo=="POST"){
         if (parametros != ""){
            parametros = "?" + parametros
         }
         this.oHttpRequest.open(modo, this.wsUrl + parametros, asincrono);
         this.oHttpRequest.send(strXml);
      }
      if (asincrono == false){
         this.text = this.oHttpRequest.responseText;
//         this.xml.loadXML(this.oHttpRequest.responseText);
      }
      oXml = null;
   }

   this.chkXMLHTTP = function(){
      if (this.readyState == 4){
      }   
      else{
      }
   }

   this.wsTransform = function(xslTransform, arrParametros){
// xslTransform es el nombre de la transformación que se utilizará
// arrParametros es un arreglo de pares de valores (arreglo) con el XPATH del nodo variable y el valor a asignar

      var oXml = new xmlBehavior();
      
      var docXml = oXml.newXmlDoc();

      if (arrParametros){
         rootNode = oXml.newElement(docXml, docXml, "parametros");
         for (cont=0; cont<arrParametros.length; cont++){
            paramNode = oXml.newElement(docXml, rootNode, "parametro");
            findNode = oXml.newElement(docXml, paramNode, "find");
            oXml.addCDATA(docXml, findNode, arrParametros[cont][0]);
            valueNode = oXml.newElement(docXml, paramNode, "value");
            oXml.addCDATA(docXml, valueNode, arrParametros[cont][1]);
         }
//alert(docXml.xml);
         this.sendXml(docXml.xml, "trsf=" + xslTransform, "GET", false);
      }
      else{
         this.sendXml("", "trsf=" + xslTransform, "GET", false);
      }
//alert(this.text);
      return(this.text);
      
      oXml = null;
   }

   this.wsExploit = function(method, arrParametros){
// xslTransform es el nombre de la transformación que se utilizará
// arrParametros es un arreglo de pares de valores (arreglo) con el XPATH del nodo variable y el valor a asignar

      var oXml = new xmlBehavior();
      
      var docXml = oXml.newXmlDoc();

      if (arrParametros){
         rootNode = oXml.newElement(docXml, docXml, "parameters");
         methodNode = oXml.newElement(docXml, rootNode, "method");
         oXml.addCDATA(docXml, methodNode, method);
         for (cont=0; cont<arrParametros.length; cont++){
            paramNode = oXml.newElement(docXml, rootNode, "parameter");

            findNode = oXml.newElement(docXml, paramNode, "variable");
            oXml.addCDATA(docXml, findNode, arrParametros[cont][0]);

            valueNode = oXml.newElement(docXml, paramNode, "value");
            oXml.addCDATA(docXml, valueNode, arrParametros[cont][1]);
         }
//alert(docXml.xml)         
         this.sendXml(docXml.xml, "", "GET", false);
      }
      else{
         this.sendXml("", "", "GET", false);
      }
      return(this.text);
      
      oXml = null;
   }
}
