// JavaScript Document
 
//set xmldoc=createobject("microsoft.xmldom")
//xmldoc=xmlhttprequest
//xmldoc.async="false"
//xmldoc.load("books.xml")
//xmldoc.selectnodes(path expression


//funciones para utilizar con ajax
 
 
 

//****************************************************************
//crea una instancia del objeto XMLTHHPRequest necesario para ajax
//
//devuelve el objecto creado o false si no lo puede crear
//funciona para casi cualquier navegador
//*****************************************************************
function creaXMLHTTPRequest()
	{
	var req;
	try {
		req = new XMLHttpRequest();
		// req.overrideMimeType("text/xml");
 
	} catch(err1) {
	  try {
		  req = new ActiveXObject("Msxml2.XMLHTTP");
		  } catch (err2) {
		    try {
			    req = new ActiveXObject("Microsoft.XMLHTTP");
			    } catch (err3) {	
			      req = false;
			    }
		  }
	}
	return req;
}

 //*******************************************************
//carga 1º xsl y luego xml
//si ya esta cargado el xsl pasa al xml
//******************************************************
function cargaComentarios(fXSL,fXML){
	//comprueba si ya cargo xsl	
	if(xsl== null){
		//alert('carga xsl y xml 1');
		cargaXSL(fXSL,fXML);
	}else {
		cargaXML(fXML);	
	}
}



//************************************************************
 //Para cargar XSL, construye los param y llama a la funcion para
 //enviar la peticion al servidor 
//****************************************************************
//realiza la carga XSL
//*****************************************************************
    var reqSafari;
    
function cargaXSL(  fic)
{
  var xsl;
  try{
   var agt=navigator.userAgent.toLowerCase();
  
  // para IE
  if (window.ActiveXObject )
    {
   
    
    xsl = new ActiveXObject("MSXML2.FreeThreadedDomDocument");
	xsl.async = "false";
	xsl.load(fic);
	
	
    }
    else if (agt.indexOf("safari") != -1){
    	 
    	 
    	/****************************************/
    	/* en safari no funciona xsl.load(file) no esta implementado
    	 * por ello se trae el fichero con una llamada ajax
    	 */
    	
    	 reqSafari= new XMLHttpRequest();
    	 var numAzar=parseInt(Math.random()*99999999);
    	 reqSafari.open("POST", fic  + "?&rand=" + numAzar, false);
    	 reqSafari.setRequestHeader("Content-Type","text/xml");
    	 reqSafari.send("");
    	 xsl =  reqSafari.responseXML;
    	 
        //si responsexml es nulo se intenta esto pero tampoco funciona bien
        // xsl =   (new DOMParser()).parseFromString(reqSafari.responseText, "text/xml");

    	 
    }
  
    //   Mozilla, Firefox, Opera, etc.
    else if (document.implementation  && document.implementation.createDocument)
      {
       xsl = document.implementation.createDocument("", "", null);
	   xsl.load(fic); 
     }
      else
      {
      alert('El navegador no puede cargar la plantilla XSL');
      }
    return(xsl);
    } catch(err1){
			alert("error en carga  xsl " + err1.message ) ;
			return null;
		}
}




//*******************************************
 //realiza la carga del XML
 //*******************************************
    function cargaXML(xml,destino,url,  str){
		try{  
      		
			if(xml==null)  xml = creaXMLHTTPRequest();
        	else if(xml) {
         		 cancelaRequest(xml);
         		 xml = creaXMLHTTPRequest();
        	}
		     // alert('en carga xml 4h ' + str);
			 
			var queryString = ""; //"&peticion=" + str  ;			 
			llamadaAjaxGET(xml,url,queryString, destino   ); 
	  }catch(err1){
			alert("error en llamaAjax " +err1.message );
		}
	 return xml;	
  }



//****************************************************************
//realiza una llamada ajax POST al servidor  
//se pasan los parametros
// indica la funcion que va a recibir la respuesta del servidor
//*****************************************************************
function llamadaAjaxGET(peticion,url, parametros,funcionSalida ) {
	   try{
	 	//variable para construir la url pasada a la llamada ajax 
	 	//genera numero al azar para pasar un param diferente cada vez y 
		// evitar la cache
		//tb puede ser con fecha y hora 	numAzar = new Date().getTime();
		 var numAzar=parseInt(Math.random()*99999999);
		//indica la funcion a ejecutar cuando se reciba la respuesta
 		// abre la conexion con el servidor, tipo conexion, url, asincrona(T/F) 
		 
		peticion.open("GET", url + "?rand=" + numAzar + parametros, true);
		peticion.onreadystatechange = eval(funcionSalida);
		// envia la peticion
		peticion.send(null);

		 
		}catch(err1){
			alert("error en llamaAjaxGET " + err1.message);
		}

	}	



  //***********************************************************************
	//monitoriza la petion ajax de leer el XSL y luego llamar a descargar el xml
	function leeXSL() {
		try{		 
		if(objRequestXSL.readyState == 4) {
        //la peticion ha terminado, vemos si es correcta --> estado = 200 
          if(objRequestXSL.status == 200 || objRequestXSL.status == 0) {	
			  //aplicamos xsl a xml
			xsl = objRequestXSL.responseXML;
			/*if (window.ActiveXObject){ //para IE
			   xsl = objRequestXSL.responseXML;
			}else {
				 var resulNodos = objRequest.responseXML;
				 xsl = new XSLTProcessor();
				 xsl.importStylesheet (resulNodos);
			}
			 cancelaRequest(objRequest);			 
			 cargaXML('./comentarios/comentarios.xml');	
		   */
			cancelaRequest(objRequestXSL);	
			cargaXML('./comentarios/comentarios.xml');	
           } else  alert("Error xsl: " + objRequestXSL.status ); 
    	} else {  //cambia readystate pero aun no es 4
          //mostrar un gif animado un mensaje de espera....getElementById
		   document.getElementById('contenido_comentarios').innerHTML = '<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p class="letra-texto">Esperando xsl...</p>  <p>&nbsp;</p>';		    
    	}
		}catch(err1){
			alert("error en leeXSL " +err1.message );
		}

}
  
 	 
 //*******************************************
//*aplica la XSL al xml pasado
function aplicaXSL(xml, xsl, destino, params ){
     var resulNodos =  xml.responseXML ;	
	 if (window.ActiveXObject){ //para IE
      		 var XSLTCompiled = new ActiveXObject("MSXML2.XSLTemplate");
		     XSLTCompiled.stylesheet = xsl;
			 var XSLTProc = XSLTCompiled.createProcessor();			 
			  if (params != null) {//recorre los params y los aplica  
			 	for ($Index in params)
      				{ 
      				XSLTProc.addParameter($Index, params[$Index]);
      				}
    			}	
			 XSLTProc.input = resulNodos;		
 			 XSLTProc.transform();
 			 document.getElementById(destino).innerHTML = XSLTProc.output;
      
      
        
	 } else {
	    
	  	   var xsltProcessor = new XSLTProcessor();
	  	   if (params != null ){ 
	  	     	for ($Index in  params)  
      			{
      				xsltProcessor.setParameter("", $Index,  params[$Index]);
        			// xsltProcessor.setParameter ( '' , 'ordenar' , param );
      			}
    		}
	  	  
		   xsltProcessor.importStylesheet(xsl);
           var doctemporal= document.implementation.createDocument("", "test", null);
           var fragmento = xsltProcessor.transformToFragment(resulNodos,doctemporal);
		   document.getElementById(destino).innerHTML = "";
           document.getElementById(destino).appendChild(fragmento);
 					     	
     }
 }
 


/****************************************/
//cancela la peticion indicada
function cancelaRequest(request) {
    function doNothing() {
    }
    request.onreadystatechange = doNothing;
    request.abort();
    delete request;
}
