var req;
var req2;
var isIE = false;
var capaAjax1;
var capaAjax2;
var capaAjax1='contenido';
var capaAjax2='capa2';
var transicion='<DIV class="transicion">CONECTANDO ...<br><br><br><img src="/cssN/images/logo_boletin.gif"></DIV>'
var urlMuestra

/** VARIABLE PARA CONTROLAR EL BOTÓN ATRÁS DEL NAVEGADOR **/
var busquedaLanzada=false;// para controlar se se ha echo ya la petición de buscar o es un boton atras.
var temporizador; // variable global que se utiliza para controlar el temporizador de revision de url
var velocidadTemporizador=500;
var idHistorialActual=0; // proporciona historial de buscquedas
var idHistorialAnterior=0;
var idHistorialAnteriorIE=0;
var nomIframeHistorial = 'historial'
var sinHistorial = false

function loadXMLDoc(url, objFunction,formulario) 
{

    req = false;
	var cadena=''
	urlMuestra = url
	
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
		// La version 7 de IE entra por aqui
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
		isIE = true;
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	
	if(req) {
		req.onreadystatechange = objFunction;
		if (typeof(formulario)== 'undefined') {
			document.getElementById(capaAjax1).innerHTML=transicion;
			if (url.indexOf("fr_AJAX") == -1) {
				if (url.indexOf("?") == -1 )
					 url += '?fr_AJAX=S'
				else url += '&fr_AJAX=S'	
				}		
			req.open("GET", url, true);
			req.send("");
			}
		else {
			cadena=formToStringBase(formulario);
			document.getElementById(capaAjax1).innerHTML=transicion;
			req.open("POST", url, true);
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");				
			if (cadena.indexOf("fr_AJAX") == -1) {
				if (cadena.indexOf("?") == -1 )
					 cadena += 'fr_AJAX=S'
				else cadena += '&fr_AJAX=S'	
				}						
			req.send(cadena);		
		}
	}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function loadDoc(pagina, objFunction, formulario)
{
	try {
		loadXMLDoc(pagina, objFunction, formulario);
	}
	catch(e) {
		var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Error desconocido");
		alert("Imposible obtener datos XML:\n" + msg+ " "+pagina);
		return;
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function loadXMLDoc2(url, objFunction, formulario) 
{
	req2 = false;
	var cadena='';	
	urlMuestra = url	
	
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
		// La version 7 de IE entra por aqui
    	try {
			req2 = new XMLHttpRequest();
        } catch(e) {
			req2 = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
		isIE = true;
       	try {
        	req2 = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req2 = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req2 = false;
        	}
		}
    }
	if(req2) {
		req2.onreadystatechange = objFunction;
		if (typeof(formulario)=='undefined') {
			if (url.indexOf("fr_AJAX") == -1) {			
				if (url.indexOf("?") == -1 )
					 url += '?fr_AJAX=S'
				else url += '&fr_AJAX=S'
				}
			req2.open("GET", url, true);
			req2.send("");
			}
		else {
			cadena=formToStringBase(formulario);			
			req2.open("POST", url, true);
            req2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");						
			req2.send(cadena);		
		}
	}
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function loadDoc2(pagina, objFunction, formulario)
{
	try {
		loadXMLDoc2(pagina, objFunction, formulario);
	}
	catch(e) {
		var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Error desconocido");
		alert("Imposible obtener datos XML:\n" + msg+ " "+pagina);
		return;
	}
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function getElementTextNS(prefix, local, parentElem, index) 
{
    var result = "";
	    
	if (parentElem != null)
	        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    if (typeof(result) == 'undefined') {
		if (parentElem != null)
	        result = parentElem.getElementsByTagName(local)[index];
	    }        
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } 
	else {
        return 'Error interno';
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function formToStringBase(formulario) {

formu = document.forms[formulario];

//alert("Formulario:"+formu)

salida='';

for (i=0; i<formu.elements.length; i++)  {
    //alert('Tipo:'+formu.elements[i].type+" checked "+formu.elements[i].checked);
	if (formu.elements[i].name=='')
		continue;	
	if ((formu.elements[i].type=='checkbox' || formu.elements[i].type=='radio') && formu.elements[i].checked == false)
	   continue;
	else salida += formu.elements[i].name+'='+escape(formu.elements[i].value)+'&';
	}
//salida += 'fr_AJAX=S';

return salida;

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function formToString(formulario) {

formu = document.forms[formulario];

salida=formu.action+'?'+formToStringBase(formulario);

return salida;

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function cambiaPagina() 
{

	//alert(req);

    if (req.readyState == 4) {
        if (req.status == 200) {
		    if (req.responseXML != null  ) {
            var item = req.responseXML.getElementsByTagName("item")[0];
		    var content = getElementTextNS("content", "encoded", item, 0);
			} else content='Error interno AJAX';
						
			var div = document.getElementById(capaAjax1);
			var scs = content.extractScript()
			div.innerHTML = content.stripScript()
			scs.evalScript(); 
							
        } else {
            alert("There was a problem retrieving the XML data:\n" + req.statusText+' '+urlMuestra);
        }
		
		
    }
	
	
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function cambiaPagina2() 
{

	//alert(req);

    if (req2.readyState == 4) {
        if (req2.status == 200) {
		    if (req2.responseXML != null  ) {
            var item = req2.responseXML.getElementsByTagName("item")[0];
		    var content = getElementTextNS("content", "encoded", item, 0);
			} else content='Error interno AJAX';
						
			var div = document.getElementById(capaAjax2);
			var scs = content.extractScript()
			div.innerHTML = content.stripScript()
			scs.evalScript(); 
							
        } else {
            alert("There was a problem retrieving the XML data:\n" + req.status+' '+urlMuestra);
        }
		
		
    }
	
	
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function irCapa1(pagina,ajax,formulario)
	{
		if (ajax == 'S') {
			//Subir la página arriba del todo
			window.scroll(0,0);
			// Recarga el historial de navegación solo si es por GET
			if (typeof(formulario)== 'undefined') 			
					cargaHistorial(pagina)			
			loadDoc(pagina, cambiaPagina,formulario);
			
			} else {
				
				if (typeof(formulario)== 'undefined') 				
					 window.location.href=pagina;
				else document.forms[formulario].submit();					
			}
		
	}	

	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	
function irCapa2(pagina,formulario)
	{
		
		document.getElementById(capaAjax2).innerHTML=transicion;
		loadDoc2(pagina, cambiaPagina2,formulario);
		
	}		
	
	
function cargaCss(fichero) {
	
	/*
	var oLink = document.createElement("link")
	oLink.href = fichero;
	oLink.rel  = "stylesheet";
	oLink.type = "text/css";
	oLink.id   = "estilo";
	
	//Elimina un estilo anterior cargado para que no haya interferencias
	try {
	eliminaObjeto("estilo")
	} catch (e) {}
	document.body.appendChild(oLink);	
	
	*/
	
  var objHead = document.getElementsByTagName('head');
  if (objHead[0])
  {
  	
  	//Elimina un estilo anterior cargado para que no haya interferencias
	try {
	eliminaObjeto("estilo")
	} catch (e) {}  	
  	
    var objCSS = objHead[0].appendChild(document.createElement('link'));
    objCSS.id = 'estilo';
    objCSS.rel = 'stylesheet';
    objCSS.href = fichero;
    objCSS.type = 'text/css';
  }  
	
	
}


function eliminaObjeto(id) {
	
	var el = document.getElementById(id);
	// Obtenemos el padre de dicho elemento
	// con la propiedad “parentNode”
	var padre = el.parentNode;
	// Eliminamos el hijo (el) del elemento padre
	padre.removeChild(el);
	
}


	function NoAtras(){
		
	if (history.forward(1)) 
		location.replace(history.forward(1)) 
	}


/**
 * Detectar IE, mediante objetos
 */
function esNavegadorIE(){
	
	// este componente solo tiene Internet Explorer apartir de la versión 5.5
	if (window.ActiveXObject) {
		return true;
	}
	else{
		return false;
	}
}


/**
 *  Este es el sistema que vigila las url's en busca de cambios.
 */
function GuardianUrl(){
	temporitzador=setTimeout("GuardianUrl()",velocidadTemporizador); //1000= 1 seg.
	//repite esa funcion cada tanto tiempo. para pararlo se utilizatria un clearTimeout(variable_de_tiempo)
	
	// consiguiendo el HASH de las rutas pagina principal e IFRAME.
		// HASH URL NORMAL CASO FirefoxF3	
		var urlActual = window.location.toString();
	    var busquedaUrl = window.location.hash.substr(1); // Nos devuelve el string de detras de la # de la url
		// HASH URL IFRAME CASO IE7,IE6
		var urlActualIframe = top.document.getElementById(nomIframeHistorial).contentWindow.document.location; 
		var busquedaUrlIE = String(urlActualIframe.hash.substr(1)); // lo mismo pero del iframe.
	
	// Debuguear
	/*	var contadorHistori = history.length;
		var urlIframe= Obtenir("historial").src
		var texto= CrearTexto(contadorHistori +' hisotories ||urlIFRAME:'+urlIframe + ' || hasIFrame: '+busquedaUrlIE);
		ReemplazarContenidoNodo("contingutCarrito",texto);
	*/
		
	//siempre va a pasar que: el de la ur es menor o igual al Actual + Diferente al ultimo mirado (primer if detecta si ha cambiado la url en alguno de los 2 sistemas IE o FF3)	
	if( (busquedaUrlIE!= idHistorialAnteriorIE && idHistorialAnteriorIE !="" ) || busquedaUrl!=idHistorialActual && idHistorialAnterior!=busquedaUrl && busquedaUrl!="" && idHistorialActual!=""){
		if(!busquedaLanzada){
			//si no se ha lanzado la busqueda querrá decir que es un botón atras o alante.
 			//No meter en el historial las vueltras atrás
			sinHistorial = true
			
				if (esNavegadorIE()) {
				     	//alert(busquedaUrlIE) 
			  		 	irCapa1(busquedaUrlIE,'S')
			  		 }
  				else {
				    //alert(busquedaUrl)  
		     	    //No meter en el historial las vueltras atrás				    					
  					irCapa1(busquedaUrl,'S')
  					}  					
  				sinHistorial = false	  					
			}
		}else{
			//este caso es para cuando existe un cambio de url, pero ha sido provocado por nosotros, no e sun boton atras! desactivamos el flag!
			busquedaLanzada=false;
		}

	// despues de lanzar o no la busqueda igualo el cambio de las urls.
	if (busquedaUrl!="")idHistorialAnterior=busquedaUrl;
	//if (busquedaUrlIE!="")
	idHistorialAnteriorIE= busquedaUrlIE;
}


/* 
 * Carga el history del navegador 				 
 */
function cargaHistorial(url){
			
	if (sinHistorial) return;			
			
   	idHistorialActual++;//contador para explorer
	var busqueda=url;
	
	// Ahora segun el navegador cambiamos la ur del iframe o la del document
	if (esNavegadorIE() && busqueda!=idHistorialAnteriorIE){
					
			var rutaExterna= ObtenerRutaExterna();
			//Obtenir("historial").src=rutaExterna + "/historial.php?paginaActual=" + idHistorialActual+ "#"+idHistorialActual;										
			document.getElementById(nomIframeHistorial).src=rutaExterna + "/htmlNew/ajax/historial.php?paginaActual=" + idHistorialActual+ "#"+busqueda;

			busquedaLanzada=true;//indica al guardianURL que esta peticion se ha realizado ya.
	
	}else if (!esNavegadorIE() && busqueda!=idHistorialAnterior){
		window.location=LimpiarUrl(window.location)+'#'+busqueda;		

		busquedaLanzada=true;//indica al guardianURL que esta peticion se ha realizado ya.
	}

}



function LimpiarUrl(){
	var urlSinId='';
	// buscando la #
	var urlActual= new String(window.location);
	urlSinId = urlActual.replace(/(\#[\w |\W ]{0,}){0,}/g,'');
	/* 
	 * Finalmente la expresion regular la he cambiado por esta otra donde:
	 * (\#[\w |\W ]{0,}){0,}
	 * incluimos un parentesis (\#[\w |\W ]{0,}) este agrupa  toda la espresion que contiene y permite darle un grado de repeticiones.
	 * asi remplazar?amos ejemplos del estiolo #dsfksdf #sewerwe Quizas no sea necesario, pero por si acaso.
	 * ahora hemos introducido entre los primeros corchetes [\w | \W ] -> los espacios influyen y decien que puedan existir. 
	 * Aqui decimos que puede venir o caracteres alfan?mercos o no alfa numericos que es lo mismo que decir que puedes poner cualquier cosas
	 * con unas repeticiones de 0 o mas... asi que # sola tambien se sustituiria.
	 * 
	 * Para aprender a probar expresiones regulares e smuy util esta p?gina: http://regexpal.com/ donde se puede probar al vuelo las espresiones que queramos.
	 * 
	 * antigua expresion.
	 * en java escript toda regExp va entre dos / /
		en este caso a espresion completa es: \#[\w]{0,}
		donde  \# siginifica el caracter almohadilla que al ser especial necesita escaparse
		[\w] significa que el siguiente caracter es cualquier caracter alfanum?rico
		{0,} que significa que la anterior expresion se repinte 0 o mas veces, asi
		[\w]{0,} significa cualquier cadena de caracteres desde la amoadilla
		
	*/
	
	//urlSinId = RUTA_EXTERNA;//window.location.hash.substr(0);
	//ReemplazarContenidoNodo("provas",'url:'+urlSinId);
	
	return urlSinId;
}



function ObtenerRutaExterna(){
	
 		//existe el problema de across domain denegation Script
		 var protocoloUrlPrincipal='http:';//pordefecto usamos http:
		 if (document.location.protocol =='https:') protocoloUrlPrincipal='https:'; // si exste https lo propagamos
		 var dominioUrlPrincipal=document.location.host;
		 //alert('url: '+protocoloUrlPrincipal+"//"+dominioUrlPrincipal)
		 return protocoloUrlPrincipal+"//"+dominioUrlPrincipal+'/';
}







