
// [VIC] Funcion para hacer llamadas a funciones en ASP desde JavaScript.
function llamadaRemota(sMethod, sUrlserver, aParam) {
	
	var msg = new XMLRPCMessage(sMethod);	
	for (var i=0; i<aParam.length; i++) {
		msg.addParameter(aParam[i]);
	}
	var oRequest = new XMLHttpRequest();
	
	oRequest.open("post", sUrlserver, false);
    oRequest.setRequestHeader("Content-Type", "application/xml");
    oRequest.send(msg.xml());   
	
	var oXmlDom = new XmlDom();
	oXmlDom.async = false;
	oXmlDom.loadXML(oRequest.responseText);
	
	var odiv = document.getElementById("divxmprpc_responsetext");
	if (odiv)
	{
	   var txt = oRequest.responseText;
     txt = txt.replace(/</g, "&lt;");
     txt = txt.replace(/>/g, "&gt;");
     odiv.innerHTML = "<pre>" + txt + "</pre>";     
	}
  
// check for XPath implementation (comprueba si tiene o no selectNodes)
if( document.implementation.hasFeature("XPath", "3.0") ) 
{ 
     // prototying the XMLDocument 
     XMLDocument.prototype.selectNodes = function(cXPathString, xNode) 
     { 
         if( !xNode ) { xNode = this; }
         var oNSResolver = this.createNSResolver(this.documentElement) 
         var aItems = this.evaluate(cXPathString, xNode, oNSResolver,
         XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null) 
         var aResult = [];
         for( var i = 0; i < aItems.snapshotLength; i++) 
         { 
         aResult[i] = aItems.snapshotItem(i);
         } 
         return aResult;
     } 
    
     // prototying the Element 
     Element.prototype.selectNodes = function(cXPathString) 
     { 
         if(this.ownerDocument.selectNodes) 
         { 
         return this.ownerDocument.selectNodes(cXPathString, this);
         } 
         else{throw "For XML Elements Only";} 
     } 
    
    // prototying the XMLDocument 
    XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode) 
    {
        if( !xNode ) { xNode = this; }        
        var xItems = this.selectNodes(cXPathString, xNode);
        if( xItems.length > 0 ){ return xItems[0]; }
        else{ return null; }
    }
} 


              //selectsinglenodes no es estandar
         if (!window.ActiveXObject) {
            Element.prototype.selectNodes = function(sXPath) {
                var oEvaluator = new XPathEvaluator();
                var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
                var aNodes = new Array();
                if (oResult != null) {
                    var oElement = oResult.iterateNext();            
                    while(oElement) {
                        aNodes.push(oElement);
                        oElement = oResult.iterateNext();
                    }            
                }            
            return aNodes;
            }  
            
            // prototying the Element 
           Element.prototype.selectNodes = function(cXPathString) 
           { 
               if(this.ownerDocument.selectNodes) 
               { 
               return this.ownerDocument.selectNodes(cXPathString, this);
               } 
               else{throw "For XML Elements Only";} 
           }
                      
            Element.prototype.selectSingleNode = function(sXPath) {            
                var oEvaluator = new XPathEvaluator();
                var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
                if (oResult != null) {
                    return oResult.singleNodeValue;
                } else {
                    return null;
                }              
            }
            
         }

    // Busco los parametros en la respuesta XMLRPC

    var aParamsXML = oXmlDom.selectNodes("/methodResponse/params/param/value/struct/member");
   
  	
  var aParams = new Array;	
	var oParamNode = new XmlDom();
	
	for (i=0; i<aParamsXML.length; i++) { 		
		oParamNode.loadXML(aParamsXML[i].xml);
		// Revisar. Solo soporta strings **** Aņadir soporte para Numeros. De momento las funciones ASP solo pueden devolver STRINGS, osea que hay que usar cstr()
		
		var inode;
		var inode_name;
        		
     inode = oParamNode.selectSingleNode("/member/name");	
		if (inode) {
			inode_name = inode.firstChild.nodeValue;			
		} else {
			inode_name = null;
		}
    
    inode = oParamNode.selectSingleNode("/member/value/string");
		if (inode) {
		  if (inode.firstChild)
		  {
		    if (isMoz) { 
    			aParams[i] = inode.textContent;	
		        if (inode_name!=null) aParams[inode_name] = inode.textContent;          
		    }
	        else
	        {
	          aParams[i] = inode.firstChild.nodeValue;	
	          if (inode_name!=null) aParams[inode_name] = inode.firstChild.nodeValue;          
	        }
	      }
		} else {
			aParams[i] = null;
		}
	}
		
	return aParams;
}

