function obtenerNumeroDeDiasPorDefectoParaFechaDeCaducidad()
{
        return 36600;
}

function obtenerNumeroMaximoDeBusquedasGuardadas()
{
     return 2;
}

function obtenerFechaDeCaducidad(numeroDeDias)
{
        if (numeroDeDias == null)
        {
                numeroDeDias = obtenerNumeroDeDiasPorDefectoParaFechaDeCaducidad()
        }
        var fechaDeCaducidad = new Date();
        fechaDeCaducidad.setTime(fechaDeCaducidad.getTime() + (numeroDeDias*24*60*60*1000));
        return fechaDeCaducidad;
}

function trim(texto)
{
        return texto.replace(/^ */, "").replace(/ *$/, "");
}

function recuperarParametroDeURL(nombreDelParametro)
{
     var resultado = null;
     if (window.location.search.charAt(0) == "?")
     {
          var parametrosDeURL = window.location.search.split("?")[1];
          var encontrado = false;
          var i = 0;
          while (i<parametrosDeURL.split("&").length && !encontrado)
          {
               if (parametrosDeURL.split("&")[i].split("=")[0] == nombreDelParametro)
               {
                    encontrado = true;
                    resultado = parametrosDeURL.split("&")[i].split("=")[1];
               }
               else
               {
                    i++;
               }
          }
     }

     return resultado;
}


function obtenerWeborigen()
{
     var resultado = recuperarParametroDeURL("codwebor");
     if (resultado == null)
     {
          resultado = "ESP";
     }
     return resultado;
}

function obtenerNumeroDeOfertas()
{
     var resultado = recuperarParametroDeURL("nofertas");
     if (resultado == null)
     {
          resultado = "6";
     }
     return resultado;
}

// Si no existe o no tiene valor, devuelve null
function obtenerValorDeCookie(nombreDeCookie)
{
        var resultado = null;
        var listadoDeCookies = document.cookie.split(";");
        var encontrado = false;
        var i = 0;

        // Mientras no se encuentre el nombre de la cookie
        while (i<listadoDeCookies.length && !encontrado)
        {
                if (trim(listadoDeCookies[i].split("=")[0]) == nombreDeCookie)
                {
                        encontrado = true;
                        if (listadoDeCookies[i].split("=").length > 1)
                        {
                                resultado = unescape(listadoDeCookies[i].split("=")[1]);
                        }
                }
                i++;
        }

        return resultado;
}

function inicializarCookie(nombre, valor, expiracion, ruta, dominio, esSeguro)
{
        var resultado = "";

        resultado += nombre + "=" + escape(valor);

        if (expiracion != null)
        {
                resultado += "; expires=" + expiracion.toGMTString();
        }
        else
        {
                resultado += "; expires=" + obtenerFechaDeCaducidad().toGMTString();
        }
        if (ruta != null)
        {
                resultado += "; path=" + ruta;
        }
        if (dominio != null)
        {
                resultado += "; domain=" + dominio;
        }
        if (esSeguro != null)
        {
                if (esSeguro)
                {
                        resultado += "; secure"
                }
        }
        document.cookie = resultado;
}

function eliminarCookie (nombre, ruta, dominio)
{
        // Si la cookie existe
        if (obtenerValorDeCookie(nombre) != null)
        {
                var resultado = "";
                resultado += nombre + "=";
                if (ruta != null)
                {
                        resultado += "; path=" + ruta;
                }
                if (dominio != null)
                {
                        resultado += "; domain=" + dominio;
                }
                resultado += "; expires=Thu, 01-Jan-70 00:00:01 GMT"

                document.cookie = resultado;
        }
}


function obtenerBusquedaMasAntigua(xmlMisPreferencias)
{
	var numeroDeBusquedasPreviamenteRealizadas = xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA").length;
	var busquedaMasAntigua = "";

	for (var i=0; i<numeroDeBusquedasPreviamenteRealizadas; i++)
	{
		if (i==0)
		{
			busquedaMasAntigua = xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA").item(i).selectSingleNode("@FECHADEBUSQUEDA").value;
		}
		else
		{
			if (xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA").item(i).selectSingleNode("@FECHADEBUSQUEDA").value < busquedaMasAntigua)
			{
				busquedaMasAntigua = xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA").item(i).selectSingleNode("@FECHADEBUSQUEDA").value;
			}
		}
	}
	return busquedaMasAntigua;
}

function eliminarBusquedaMasAntigua (xmlMisPreferencias, fechaDeBusquedaMasAntigua)
{
     eliminarNodo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/BUSQUEDA[@FECHADEBUSQUEDA='"+fechaDeBusquedaMasAntigua+"']"));
}

function obtenerNumeroDeBusquedasGuardadas(xmlMisPreferencias)
{
     return xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA").length;
}

function anyadirBusquedaAMisPreferencias(fecha, paginaVisitada, origen, destino, tipoDeViaje)
{
     // Se recupera el XML de la cookie
     var xmlMisPreferencias = obtenerMisPreferenciasDeCookie();
     // Si la fecha viene informada
     if (fecha != "")
     {
          // Tipos de ofertas posibles:
          // - "A"   - Avión
          // - "H"   - Hotel (Paquetes Dinámicos - Sólo Hotel)
          // - "A+H" - Avión + Hotel (Paquetes Dinámicos - Avión + Hotel)
          // - "O"   - Ofertas

          // Si el tipo de Oferta es Avión u Avión + Hotel (Paquetes Dinámicos - Avión + Hotel)
          if
          (
               paginaVisitada == "A" ||
               paginaVisitada == "A+H"
          )
          {
               // Se añade / modifica el campo de Origen
               aniadirAtributo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "CORIGEN1", origen);
          }

          // Si el tipo de Oferta es Avión, Hotel (Paquetes Dinámicos - Sólo Hotel), Avión + Hotel (Paquetes Dinámicos - Avión + Hotel) u Ofertas
          if
          (
               paginaVisitada == "A" ||
               paginaVisitada == "H" ||
               paginaVisitada == "A+H" ||
               paginaVisitada == "O"
          )
          {
               // Si el tipo de Oferta es Ofertas ("O") y el tipo de viaje no es crucero o si se trata de otro tipo de Oferta
               if ((paginaVisitada == "O" && tipoDeViaje.toUpperCase() != "CRUCERO") || paginaVisitada != "O")
               {
                    // Si el destino viene informado
                    if (destino != null)
                    {
                         // Si el destino es diferente al destino1 (anteriormente guardado)
                         if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@CDESTIN1")) != destino)
                         {
                              // Si el destino es diferente al destino2 (anteriormente guardado)
                              if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@CDESTIN2")) != destino)
                              {
                                   // Si ya existe un primer destino
                                   if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@CDESTIN1")) != null)
                                   {
                                        // El primer destino pasa a ser el segundo
                                        aniadirAtributo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "CDESTIN2", dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@CDESTIN1")));
                                   }
                                   // Se añade / modifica el campo de primer destino
                                   aniadirAtributo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "CDESTIN1", destino);
                              }
                         }
                    }
               }
          }

          // Si el tipo de Oferta es Ofertas
          if
          (
               paginaVisitada == "O"
          )
          {
               // Si el tipoDeViaje existe
               if (tipoDeViaje != null)
               {
                    // Si el tipoDeViaje viene informado
                    if (tipoDeViaje != "")
                    {
                         // Si el tipoDeViaje es diferente al tipoDeViaje1 (anteriormente guardado)
                         if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@DTIPVIA1")) != tipoDeViaje)
                         {
                              // Si el tipoDeViaje es diferente al tipoDeViaje2 (anteriormente guardado)
                              if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@DTIPVIA2")) != tipoDeViaje)
                              {
                                   // Si ya existe un primer tipoDeViaje
                                   if (dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@DTIPVIA1")) != null)
                                   {
                                        // El primer tipoDeViaje pasa a ser el segundo
                                        aniadirAtributo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "DTIPVIA2", dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS/@DTIPVIA1")));
                                   }
                                   // Se añade / modifica el campo de primer tipoDeViaje
                                   aniadirAtributo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "DTIPVIA1", tipoDeViaje);
                              }
                         }
                    }
               }
          }

          // Si la misma búsqueda no está almacenada previamente
          if (xmlMisPreferencias.selectNodes("/DATOS/BUSQUEDAS/BUSQUEDA[@PAGINAVISITADA='"+paginaVisitada+"']").length == 0)
          {
               // Mientras el número máximo de búsquedas guardadas ya sea mayor que el número máximo de búsquedas guardadas
               while (obtenerNumeroDeBusquedasGuardadas(xmlMisPreferencias) >= obtenerNumeroMaximoDeBusquedasGuardadas())
               {
                    // Se elimina la búsqueda más antigua
                    eliminarBusquedaMasAntigua(xmlMisPreferencias, obtenerBusquedaMasAntigua(xmlMisPreferencias));
               }
               // Se crea el nuevo nodo
               var nuevoNodoDeBusqueda = aniadirNodo(xmlMisPreferencias.selectSingleNode("/DATOS/BUSQUEDAS"), "BUSQUEDA", "");
               // Se añaden los atributos correspondientes
               aniadirAtributo(nuevoNodoDeBusqueda, "FECHADEBUSQUEDA", fecha);
               aniadirAtributo(nuevoNodoDeBusqueda, "PAGINAVISITADA", paginaVisitada);
          }

          // Se guarda el XML modificado en la cookie
          guardarMisPreferenciasEnCookie(xmlMisPreferencias);
     }
     xmlMisPreferencias = null;
}

function obtenerMisPreferenciasDeCookie()
{
     var contenidoDeLaCookie = obtenerValorDeCookie("Preferencias");

     // Si no se han guardado preferencias previamente
     if (contenidoDeLaCookie==null)
     {
          var xmlMisPreferencias = getXMLDocument("<DATOS/>");
          // Se crea el nuevo nodo
          aniadirNodo(xmlMisPreferencias.selectSingleNode("/DATOS"), "BUSQUEDAS", "");
     }
     else
     {
          xmlMisPreferencias = getXMLDocument(contenidoDeLaCookie);
     }

     return xmlMisPreferencias;
}

function guardarMisPreferenciasEnCookie(xmlMisPreferencias)
{
     // Si el documento XML de preferencias está inicializado
     if (xmlMisPreferencias != null)
     {
          // Se almacena tal cual en la cookie
          inicializarCookie("Preferencias", getStringFromDocument(xmlMisPreferencias), null, "/", null, null);
     }
}

function anyadirConfiguracionAMisPreferencias (email, origen1, origen2, destino1, destino2, tiposDeViaje, dvMail, ipUsuario, nombreUsuario, codwebor)
{
     // Se recupera el XML de la cookie
     var xmlMisPreferencias = obtenerMisPreferenciasDeCookie();

     var nodoDeConfiguracion = null;

     // Si el nodo de Configuración no ha sido creado
     if (xmlMisPreferencias.selectNodes("/DATOS/PARAMETROS").length == 0)
     {
          // Se crea el nodo de configuración
          nodoDeConfiguracion = aniadirNodo(xmlMisPreferencias.selectSingleNode("/DATOS"), "PARAMETROS", null);
     }
     else
     {
          nodoDeConfiguracion = xmlMisPreferencias.selectSingleNode("/DATOS/PARAMETROS");
     }

     aniadirAtributo(nodoDeConfiguracion, "CODWEBOR", codwebor);
     aniadirAtributo(nodoDeConfiguracion, "NOFERTAS", obtenerNumeroDeOfertas());

     if (email != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "DESEMAIL", email);
     }
     if (origen1 != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "CORIGEN1", origen1);
     }
     if (origen2 != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "CORIGEN2", origen2);
     }
     if (destino1 != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "CDESTIN1", destino1);
     }
     if (destino2 != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "CDESTIN2", destino2);
     }
     if (tiposDeViaje != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "DTIPVIAJ", tiposDeViaje);
     }
     if (dvMail != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "DEVEMAIL", dvMail);
     }
     if (ipUsuario != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "CUSUARIO", ipUsuario);
     }
     if (nombreUsuario != null)
     {
          aniadirAtributo(nodoDeConfiguracion, "DSNOMBRE", nombreUsuario);
     }

     // Se guarda el XML modificado en la cookie
     guardarMisPreferenciasEnCookie(xmlMisPreferencias);
     xmlMisPreferencias = null;
}

function obtenerDatoDeConfiguracion(codigo)
{
     var resultado = null;
     // Se recupera el XML de la cookie
     var xmlMisPreferencias = obtenerMisPreferenciasDeCookie();
     resultado = dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/PARAMETROS/@" + codigo));
     xmlMisPreferencias = null;
     return resultado;
}

function anyadirDatoDeConfiguracion(codigo, valor)
{
     var resultado = null;
     // Se recupera el XML de la cookie
     var xmlMisPreferencias = obtenerMisPreferenciasDeCookie();

     if
     (
          codigo != null
          && valor != null
          &&
          (
               codigo == "DESEMAIL"
               || codigo == "CORIGEN1"
               || codigo == "CORIGEN2"
               || codigo == "CDESTIN1"
               || codigo == "CDESTIN2"
               || codigo == "DTIPVIAJ"
               || codigo == "DEVEMAIL"
               || codigo == "CUSUARIO"
               || codigo == "DSNOMBRE"
          )
     )
     {

          var nodoDeConfiguracion = null;

          // Si el nodo de Configuración no ha sido creado
          if (xmlMisPreferencias.selectNodes("/DATOS/PARAMETROS").length == 0)
          {
               // Se crea el nodo de configuración
               nodoDeConfiguracion = aniadirNodo(xmlMisPreferencias.selectSingleNode("/DATOS"), "PARAMETROS", null);
          }
          else
          {
               nodoDeConfiguracion = xmlMisPreferencias.selectSingleNode("/DATOS/PARAMETROS");
          }

          aniadirAtributo(nodoDeConfiguracion, codigo, valor);
          // Se guarda el XML modificado en la cookie
          guardarMisPreferenciasEnCookie(xmlMisPreferencias);
     }

     resultado = dameValor(xmlMisPreferencias.selectSingleNode("/DATOS/PARAMETROS/@" + codigo));
     xmlMisPreferencias = null;
     return resultado;
}

function obtenerCadenaSiEsNull(valor, cadenaSiEsNull)
{
     var resultado = "";
     if (valor == null)
     {
          resultado = cadenaSiEsNull;
     }
     else
     {
          resultado = valor;
     }
     return resultado;
}