/********************************************************************************************<script>

                        Nombre: general.js
                        Descripción: script de cliente ejecutado en el include general.jsp

********************************************************************************************/
String.prototype.trim = function() {return this.toString().replace(/^\s*|\s*$/g, "")};




/************ MÉTODOS UTILIZADOS EN LOS EVENTOS DEL INCLUDE *****************/

//Método que se ejecuta en el evento onclick del elemento linkContinuar
function onclick_linkContinuar(){
	ocultarPanelError();
}

/************ MÉTODOS PARA EL TRATAMIENTO DE LOS ELEMENTOS DE LA PÁGINA *****************/

//Método que permite mostrar el panel de carga con un mensaje determinado
function mostrarPanelProceso(mensaje, idPagina){
	if (esExplorer()) {
		alert("esExplorer() = true");
		document.all("divPanelCarga").all("mensajePanel").innerText=mensaje;
	}else{
		alert("esExplorer() = false");
		document.getElementById("mensajePanel").textContent = mensaje;
	}

	var bMostrarPanelCarga = true;
	switch(idPagina){
		case "buscador_aux":
			bMostrarPanelCarga = false;
			document.getElementById("contenedorlogobuscando").style.display="none";
			break;
		case "disponibilidad_aux":
		case "dispocategorias":;
			document.getElementById("contenedorlogobuscando").style.display="";
			break;
		case "detallecubierta":
		case "masinformacion":
		case "pasajeros":
		case "presupuesto":
		case "formapago":
			document.getElementById("contenedorlogoesperando").style.display="";
			break;
		default:
			document.getElementById("contenedorlogoesperando").style.display="";
			break;
	}

	if (bMostrarPanelCarga) {
		document.getElementById("divPanelCarga").style.display="";
	}
}

//Método que permite ocultar el panel de carga
function ocultarPanelProceso(){
	if(top.frames.length==0){
		document.getElementById("divPanelCarga").style.display="none";
    }else{
		document.getElementById("divPanelCarga").style.display="none";
    }
}

//Método que permite mostrar el panel de error con un error determinado
function mostrarPanelError(codError,desError,trazaError,scriptPorDefecto){
	if(top.frames.length==0){
    	document.getElementById("desError",0).innerHTML=desError;
        document.getElementById("trazaError",0).innerHTML=codError+" - "+trazaError;
        document.getElementById("divErrores",0).style.display="";
        tratarCampos("divPagina:O,divErrores:M");
	}else{
		document.getElementById("desError",0).innerHTML=desError;
		document.getElementById("trazaError",0).innerHTML=codError+" - "+trazaError;
		document.getElementById("divErrores",0).style.display="";
		tratarCampos("divPagina:O,divErrores:M");
	}
    document.getElementById("linkContinuar",0).onclick=new Function(scriptPorDefecto);
}

//Método que permite ocultar el panel de error
function ocultarPanelError(){
	if(top.frames.length==0)
    	tratarCampos("divPagina:M,divErrores:O");
	else
    	tratarCampos("divPagina:M,divErrores:O");
}


//Función que permite el tratamiento de varios campos a la vez, pudiendo limpiarlos,
//mostrarlos/ocultarlos,hacerlos visibles/invisibles, y habilitarlos/deshabilitarlos.
//Recibe como parametro de entrada una cadena con subcadenas separadas por comas.
//Estas subcadenas representan cada tratamiento a realizar en cada campo, y se subdividen
//a su vez en otras dos subcadenas separadas por dos puntos.
//Los tratamientos disponibles son:
//                      L >>> Limpia el valor de un campo
//                      O >>> Oculta un campo
//                      M >>> Muestra el campo
//                      I >>> Hace invisible el campo
//                      V >>> Hace visible el campo
//                      D >>> Deshabilita el campo
//                      H >>> Habilita el campo
//EJEMPLO:      tratarCampos("campo1:V,campo2:I");
//                              Hace visible el campo1 e invisible el campo2
//NOTA: Los campos deben ser simples (no pueden ser arrays de campos)
function tratarCampos(sCampos,frame,indice){
		 frame=(frame!=null)?frame:document;
		 var aCampos = sCampos.split(",");

		 for(var i=0;i<aCampos.length;i++){
				var aCampo=aCampos[i].split(":");
				var indiceMin = (indice!=null)?indice:0;
				//var indiceMax = (indice!=null)?(indice+1):frame.getElementById(aCampo[0]).length;
				var indiceMax = 1;
				for(var j=indiceMin;j<indiceMax;j++){
						//var campo=frame.getElementById(aCampo[0],j);
						var campo=frame.getElementById(aCampo[0]);
						var tratamiento=aCampo[1];
						switch(tratamiento){
						case "L"://Limpia el valor de un campo
										 if(campo.value!=null)
												campo.value="";
										 else
												campo.checked=false;
										 break;
						case "O"://Oculta el campo
										 campo.style.display="none";
										 break;
						case "M"://Muestra el campo
										 campo.style.display="";
										 break;
						case "I"://Hace invisible el campo
										 campo.style.visibility="hidden";
										 break;
						case "V"://Hace visible el campo
										 campo.style.visibility="visible";
										 break;
						case "D"://Deshabilita el campo
										 switch(campo.nodeName){
										 case "INPUT":
												if(campo.type!="checkbox" && campo.type!="radio" && campo.type!="button"){
														campo.readOnly=true;
														campo.style.backgroundColor="#F4F4F4";
														campo.style.border="solid 1px #B2B2B2";
												}else{
														campo.disabled=true;
												}
												break;
										 case "SELECT":
												campo.disabled=true;
												campo.style.backgroundColor="#F4F4F4";
												break;
										 case "TEXTAREA":
												campo.style.backgroundColor="#F4F4F4";
												campo.style.border="solid 1px #B2B2B2";
												campo.deshabilitado = "YES";
												break;
										 default:
												campo.disabled=true;
												break;
										 }
										 break;
						case "H"://Habilita el campo
										 switch(campo.nodeName){
										 case "INPUT":
												if(campo.type!="checkbox" && campo.type!="radio" && campo.type!="button"){
														campo.readOnly=false;
														campo.style.backgroundColor="#ffffff";
														campo.style.border="1px solid #996439";
												}else{
														campo.disabled=false;
												}
												break;
										 case "SELECT":
												campo.disabled=false;
												campo.style.backgroundColor="#ffffff";
												break;
										 case "TEXTAREA":
												campo.style.backgroundColor="#ffffff";
												campo.style.border="1px solid #996439";
												campo.deshabilitado = "NO";
												break;
										 default:
												campo.disabled=false;
												break;
										 }
										 break;
						}
				}
		 }
}

//Descomponemos el texto en un array de 2 posiciones
//arrayQuincenas. Devolvemos nulo en caso de error de atributos
function descomponerTextoQuincenas(pQuincenaSeleccionada) {
	var separador = "-";
	var arrayQuincenas = pQuincenaSeleccionada.split(separador);
	if (arrayQuincenas.length != 2)	{
		return null;
	} else {
		for (i=0; i<2; i++) {
			arrayQuincenas[i] = convertirFechaVisualBBDD(arrayQuincenas[i]);
		}
		return arrayQuincenas;
	}
}

 //Método que permite cargar una pagina en la ventana indicada

   //Método que permite cargar una pagina en la ventana indicada
    function cargarPagina(pagina, sXmlDatos,ventana, sParametros){
            document.getElementById("frmNavegacion").hidXmlDatos.value=sXmlDatos;
            document.getElementById("frmNavegacion").action=pagina+".jsp"+sParametros;
            if(ventana=="contenido"){
                    document.getElementById("frmNavegacion").target = "_self";
            }else{
                    document.getElementById("frmNavegacion").target = ventana;
            }
            document.getElementById("frmNavegacion").submit();
    }

 //Array que contiene todas las letras especiales que puede haber probrablema para visualizarlos...
 function crearCaracteresEspeciales() {
		var carEspeciales = new Array();
		carEspeciales[carEspeciales.length] = new Array ("ñ", "&#241;");
		carEspeciales[carEspeciales.length] = new Array ("Á", "&#193;");
		carEspeciales[carEspeciales.length] = new Array ("á", "&#225;");
		carEspeciales[carEspeciales.length] = new Array ("É", "&#201;");
		carEspeciales[carEspeciales.length] = new Array ("é", "&#233;");
		carEspeciales[carEspeciales.length] = new Array ("Í", "&#205;");
		carEspeciales[carEspeciales.length] = new Array ("í", "&#237;");
		carEspeciales[carEspeciales.length] = new Array ("Ó", "&#211;");
		carEspeciales[carEspeciales.length] = new Array ("ó", "&#243;");
		carEspeciales[carEspeciales.length] = new Array ("Ú", "&#218;");
		carEspeciales[carEspeciales.length] = new Array ("ú", "&#250;");
		carEspeciales[carEspeciales.length] = new Array ("€", "&#8364;");
		carEspeciales[carEspeciales.length] = new Array ("º", "&#186;");
		return carEspeciales;
	}

	//Comprueba que la fecha cumple el formato estándar
	function comprobarFormatoFecha(pFecha) {
		//alert(pFecha.substring(2,3)+"-"+pFecha.substring(5,6));
		if ((pFecha.substring(2,3)=="/") &&  (pFecha.substring(5,6)=="/")) {
			if (!isNaN(pFecha.substring(0,2)) && !isNaN(pFecha.substring(3,5)) && !isNaN(pFecha.substring(6,10)))	{
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}

	}

	//Convierte la fecha desde formato en BBDD a la manera visual (dd/mm/yyyy)
	function convertirFechaBBDDVisual(pFecha) {
		var fechaDevuelta = "";
		if (pFecha.length == 8 && !isNaN(pFecha)) {
			fechaDevuelta = pFecha.substring(6,8)+"/"+pFecha.substring(4,6)+"/"+pFecha.substring(0,4);
			return fechaDevuelta;
		} else {
			alert("El formato de fecha no es correcta");
			return false;
		}
		return fechaDevuelta;
	}

	//Convierte la fecha desde manera visual (dd/mm/yyyy) al formato en BBDD,
	function convertirFechaVisualBBDD(pFecha) {
		var fechaDevuelta;
		if (comprobarFormatoFecha(pFecha)) {
			fechaDevuelta = pFecha.substring(6,10)+pFecha.substring(3,5)+pFecha.substring(0,2);
			return fechaDevuelta;
		} else {
			alert("El formato de fecha es incorrecta");
			return false;
		}
	}

	//Recogemos el valor de un radio seleccionado teniendo en cuenta.
	//nombreDelGrupoDeRadios: El name común a todos los radios
	//nombreDeLaPropiedad: Propiedad del objeto que se desea retorna
     // Devuelve null si ningún radio ha sido seleccionado
     function obtenerPropiedadDeRadios(nombreDelGrupoDeRadios, nombreDeLaPropiedad)
     {
          var listaDeRadios = document.getElementsByName(nombreDelGrupoDeRadios);
          var encontrado = false;
          var resultado = null;
          var i = 0;

          while (!encontrado && i<listaDeRadios.length)
          {
               if (listaDeRadios[i].checked)
               {
                    resultado = eval("listaDeRadios[i]." + nombreDeLaPropiedad);
                    encontrado = true;
               }
               i++;
          }

          return resultado;
    }

	 //Método que permite validar si una cadena es un importe válido
        function esImporte(sCadena,sCampo,bObligatorio,iEnteros, iDecimales,oCampoFoco){
                sCadena = sCadena.trim();
                if(sCadena==""){
                        if(bObligatorio){
                                this.validaciones[this.validaciones.length]="El campo X es obligatorio".replace("X",sCampo);
                                //this.camposFocos[this.camposFocos.length]=oCampoFoco;
                                return false;
                        }else{
                                return true;
                        }
                }

                var patron = new RegExp('^\\d{1,' + iEnteros + '}((\\,)\\d{1,' + iDecimales + '})?$');
                if(sCadena.match(patron)==null){
                        this.validaciones[this.validaciones.length]=L5A100400000010.replace("X",sCampo);
                        //this.camposFocos[this.camposFocos.length]=oCampoFoco;
                        return false;
                }

                return true;
        }

        function convertirImporteBBDD(sCadena) {
        	var resultado = parseFloat(sCadena.replace(",", "."), 10);
          	return resultado;
        }


	//Función que valida una dirección de correo electrónico.
		//	mail:Es el objecto a validar(la caja de texto).
		function esCorreo(sCadena,sCampo,bObligatorio){
			var patron=/^[^.@" "]+[^@" "]+\@[^.@" "]+\.[^@" "]+[^.@]$/;
            if(sCadena.trim()==""){
				if(bObligatorio){
					this.validaciones[this.validaciones.length]=L5A100400000007.replace("X",sCampo);
					this.camposFocos[this.camposFocos.length]=oCampoFoco;
					return false;
				}else{
					return true;
				}
            }

			var mail = sCadena.trim();
			cadenaEncontrada=mail.match(patron);
			if (cadenaEncontrada!=null){
				var iHaySeparador = mail.split('..');
				if (iHaySeparador.length>1){
					return false;
				}
				return true;
			}else{
				return false;
			}
		}


	 //Variable que almacena la utilidad abierta
        var objUtilidad = null;


    //Método que permite abrir un ventana
    function abrirVentana(pagina, xmlDatos,identificador,ancho,alto) {
            //var accionAnterior = document.all("hidAccion",0).value;
            if (objUtilidad!=null){
				objUtilidad.close();
            }


            //javi


            var posicionX=(top.screen.availWidth/2)-(ancho/2);
            var posicionY=(top.screen.availHeight/2)-(alto/2);
            objUtilidad=window.open("", identificador, "scrollbars=yes,status=no,location=no,menubar=no,resizable=no,width="+ancho+",height="+alto+",top="+posicionY+",left="+posicionX);

            cargarPagina(pagina,xmlDatos,identificador, "");
            //document.all("hidAccion",0).value=accionAnterior;
    }

	//Método que permite cerrar la ventana abierta
    function cerrarVentana(){
    	cierraVentana();
    }

    //Metodo que cierra una ventana emergente y pide confirmación
    function cierraVentana() {
          //alert("Entra");
          window.close();
          //window.close();
	}

	// Retorna el xml de literales que le indiquemos con los datos de los comunes.
	function cargarXmlLiterales(strNombre, strIdioma){
          //Se obtinene el xml de literales de la página.
          var xmlLit;
          xmlLit = getXMLDocument("");
          xmlLit.async = false;
          //xmlLit.load( "../literales/"+strNombre+".xml" );
          xmlLit.load( "../../../viajes/VECI/crucerosinternet/xml/"+strNombre+".xml" );

          //Se obtinene el xml de literales comunes.
          var xmlCom;
          xmlCom = getXMLDocument("");
          xmlCom.async = false;
          //xmlCom.load( "../literales/comunes.xml" );
          xmlCom.load( "../../../viajes/VECI/crucerosinternet/xml/comunes.xml" );

          var xmlWebOrigen = getXMLDocument("<BLOQUE></BLOQUE>");
          //xmlWebOrigen.selectSingleNode("/BLOQUE").appendChild(xmlLit.selectSingleNode("/LITERALES/BLOQUE[@COD='"+strIdioma+"']").cloneNode(true));

          // Se introducen en el XML los literales particulares correspondientes al idioma
          var oNodosLiterales = xmlLit.selectNodes("//BLOQUE[@COD='"+strIdioma+"']/TEXTO");
          for (var i=0;i<oNodosLiterales.length;i++)
          {
               xmlWebOrigen.selectSingleNode("/BLOQUE").appendChild(oNodosLiterales[i].cloneNode(true));
          }

          // Se introducen en el XML los literales comunes correspondientes al idioma
          var oNodosTexto = xmlCom.selectNodes("//BLOQUE[@COD='"+strIdioma+"']/TEXTO");
          for (var i=0;i<oNodosTexto.length;i++)
          {
               xmlWebOrigen.selectSingleNode("/BLOQUE").appendChild(oNodosTexto[i].cloneNode(true));
          }

          return xmlWebOrigen;
	}


 	// Muestra el buscador desde el filtro de SU SELECCIÓN.
	 function volverAtrasMigas(tipo, pFecDesde, pFecHasta, pDestino, pPuertoOrigen, pDuracion, pCompania, pBuque, pCodWebor, pCoPagina)
	 {
		var strParametros = "?sQuincena="+convertirFechaBBDDVisual(pFecDesde)+"-"+convertirFechaBBDDVisual(pFecHasta);
			strParametros+= "&sDestino="+pDestino;
			strParametros+= "&sPuertoOrigen="+pPuertoOrigen;
			strParametros+= "&sDuracion="+pDuracion;
			strParametros+= "&sCompania="+pCompania;
			strParametros+= "&sBuque="+pBuque;
			strParametros+= "&codwebor="+pCodWebor;
			strParametros+= "&copagina="+pCoPagina;

          document.getElementById('frmNavegacion').target="_self";
          if (tipo == 0) {
			document.getElementById('frmNavegacion').action="buscador_aux.jsp" + strParametros;
		} else if (tipo == 1) {
			document.getElementById('frmNavegacion').action="disponibilidad_aux.jsp" + strParametros;
		}
		document.getElementById('frmNavegacion').submit();
	 }

	 function volverBuscador(pFecDesde, pFecHasta, pDestino, pPuertoOrigen, pDuracion, pCompania, pBuque, pCodWebor, pCoPagina)
	 {
		volverAtrasMigas(0, pFecDesde, pFecHasta, pDestino, pPuertoOrigen, pDuracion, pCompania, pBuque, pCodWebor, pCoPagina)
	 }

	 //Establecemos los enlaces de las cabeceras (Migas)
	 //Tipo 0: Página de buscador  ---Viajes el Corte Inglés > Cruceros---
	 //Tipo 1: Primera disponibilidad ---Viajes el Corte Inglés > Cruceros > pDescDestino---
	 //Tipo 2: En el resto de páginas ---Viajes el Corte Inglés > Cruceros > pDescDestino > pDesProgBuque ---
	 function establecerCabeceraMigas1(nombreID, tipo, nodoBuscador, pDescDestino, pDesProgBuque) {

	 	var fecDesde = nodoBuscador.selectSingleNode("//BUSCADOR/@FECDESDE").value;
     	var fecHasta = nodoBuscador.selectSingleNode("//BUSCADOR/@FECHASTA").value;
     	var codDestino = nodoBuscador.selectSingleNode("//BUSCADOR/@DESTINO").value;
     	var codPuerto = nodoBuscador.selectSingleNode("//BUSCADOR/@PUERTO").value;
     	var duracion = nodoBuscador.selectSingleNode("//BUSCADOR/@DURACION").value;
     	var codCompania = nodoBuscador.selectSingleNode("//BUSCADOR/@COMPANIA").value;
     	var codBuque = nodoBuscador.selectSingleNode("//BUSCADOR/@CODBUQUE").value;
     	var codWebor = nodoBuscador.selectSingleNode("//BUSCADOR/@CODWEBOR").value;
     	var coPagina = nodoBuscador.selectSingleNode("//BUSCADOR/@COPAGINA").value;

     	var VIAJESECI = "Viajes El Corte Inglés";
	 	var urlVIAJESECI = "http://www.viajeselcorteingles.es/viajes";
	 	var CRUCEROS = "Cruceros";
	 	var cadenaMigas = "<a href='"+urlVIAJESECI+"'>"+VIAJESECI+"</a> ";
	 	var llamadaCruceros = "";
	 	if (tipo == 0) {
	 		cadenaMigas += "&gt; "+CRUCEROS;
	 	} else {
			llamadaCruceros = "javascript:volverAtrasMigas(0, \'"+fecDesde+"\', \'"+fecHasta+"\', \'"+codDestino+"\', \'"+codPuerto+"\', \'"+duracion+"\', \'"+codCompania+"\', \'"+codBuque+"\', \'"+codWebor+"\', \'"+coPagina+"\')";
		 	cadenaMigas += "&gt; <a href=\""+llamadaCruceros+"\">"+CRUCEROS+"</a> ";
	 	}
	 	if (tipo == 1) {
	 		cadenaMigas += "&gt; " + pDescDestino;
	 	} else {
		 	llamadaCruceros = "javascript:volverAtrasMigas(1, \'"+fecDesde+"\', \'"+fecHasta+"\', \'"+codDestino+"\', \'"+codPuerto+"\', \'"+duracion+"\', \'"+codCompania+"\', \'"+codBuque+"\', \'"+codWebor+"\', \'"+coPagina+"\')";
	 		cadenaMigas += "&gt; <a href=\""+llamadaCruceros+"\">"+pDescDestino+"</a> ";
	 	}
	 	if (tipo == 2) {
		 	cadenaMigas += "&gt; " + pDesProgBuque;
	 	}
		document.getElementById(nombreID).innerHTML = cadenaMigas;

	 }

     // Elimina los espacios por la derecha de una cadena
     function rtrim(cadena)
     {
          return cadena.replace(/ *$/g, "");
     }

     // Elimina los espacios por la izquierda de una cadena
     function ltrim(cadena)
     {
          return cadena.replace(/^ */g, "");
     }

     // Elimina los espacios por la derecha y por la izquierda de una cadena
     function trim(cadena)
     {
          return rtrim(ltrim(cadena))
     }

function esNumerico(numero){
	return (numero.match(/[0-9]/g))
}

function formatearPrecioDeNaviera(precio)
{
     // Se espera un precio en formato "1782.00" o el mismo precio en formato "1782". En cualquier caso, se debe devolver "178200"
     var resultado = "";

     // Si el precio contiene un punto decimal
     if (precio.indexOf(".") >= 0)
     {
          // Se asume que detrás hay dos cifras decimales, con lo cual simplemente se reemplaza dicho punto decimal por nada
          resultado =  precio.replace(".", "");
     }
     else // Si el precio no contiene un punto decimal
     {
          // Se asume que el precio es un número entero y se le concatenan dos 0's ("00")
          resultado = precio.toString() + "00";
     }

     return resultado;
}


function cargarLiterales(documentoXMLOriginal, codwebor, fichero)
{
     // Se carga el XML de literales
     var xmlLiterales = getXMLDocument("");
     xmlLiterales.async = false;
     xmlLiterales.load("../../../viajes/VECI/mispreferencias/xml/"+fichero+".xml");
     if (dameValor(documentoXMLOriginal.selectSingleNode("/DATOS/PARAMETROS/@CODWEBOR"))==null)
     {
          aniadirAtributo(documentoXMLOriginal.selectSingleNode("/DATOS/PARAMETROS"), "CODWEBOR", codwebor);
     }
     var codwebor = dameValor(documentoXMLOriginal.selectSingleNode("/DATOS/PARAMETROS/@CODWEBOR"));

     // Se introducen en el XML los literales correspondientes al código de web origen
     documentoXMLOriginal.selectSingleNode("/DATOS").appendChild(xmlLiterales.selectSingleNode("/LITERALES/BLOQUE[@COD='" + codwebor + "']").cloneNode(true));
}
