﻿
var destinosPorPestaña = new Array();
var idPestaña = 0;


function inicializarFechasEntradaSalida(fechaEntradaModificacionBusqueda, fechaSalidaModificacionBusqueda, inputFechaInicio, inputFechaFin, traduccionNoches, maximoNumeroDeNoches, sePuedeReservarParaElMismoDia) {
        inicializarFechasEntradaSalidaComun(fechaEntradaModificacionBusqueda, fechaSalidaModificacionBusqueda, inputFechaInicio, inputFechaFin, traduccionNoches, maximoNumeroDeNoches, sePuedeReservarParaElMismoDia);
}

function inicializarFechasEntradaSalidaRentacar(fechaEntradaModificacionBusqueda, fechaSalidaModificacionBusqueda, inputFechaInicio, inputFechaFin, traduccionNoches, maximoNumeroDeNoches, sePuedeReservarParaElMismoDia) {
        
    inicializarFechasEntradaSalidaComun(fechaEntradaModificacionBusqueda, fechaSalidaModificacionBusqueda, inputFechaInicio, inputFechaFin, traduccionNoches, maximoNumeroDeNoches, sePuedeReservarParaElMismoDia)
        
    inputFechaInicio.datepicker('option', 'onSelect', function (fecha) {

        var fechaSeleccionada = $.datepicker.parseDate('dd/mm/yy', fecha);

        var fechaSeleccionadaMasUnDia = new Date();
        fechaSeleccionadaMasUnDia.setTime(fechaSeleccionada.getTime());

        sePuedeReservarParaElMismoDia ? fechaSeleccionadaMasUnDia.setDate(fechaSeleccionadaMasUnDia.getDate()) : fechaSeleccionadaMasUnDia.setDate(fechaSeleccionadaMasUnDia.getDate() + 1);
        inputFechaFin.datepicker("option", "minDate", fechaSeleccionadaMasUnDia);

        var fechaSalidaActual = inputFechaFin.datepicker("getDate");

        if (fechaSalidaActual <= fechaSeleccionada) {
            inputFechaFin.datepicker("setDate", null);             
        }

        if (maximoNumeroDeNoches > 0) {
            var fechaMaximaReserva = new Date();
            fechaMaximaReserva.setTime(fechaSeleccionada.getTime());
            fechaMaximaReserva.setDate(fechaMaximaReserva.getDate() + maximoNumeroDeNoches);

            inputFechaFin.datepicker("option", "maxDate", fechaMaximaReserva);
        }

        calculaDiasRentACar();

    });

    $("#FechaDevolucion").datepicker('option', 'onSelect', function (fecha) {
        calculaDiasRentACar();
    });
}

function calculaDiasRentACar() {
    var horaRecogida = $("#HoraRecogida").val();
    var horaDevolucion = $("#HoraDevolucion").val();
    var minutosRecogida = $("#MinutosRecogida").val();
    var minutosDevolucion = $("#MinutosDevolucion").val();
    var fechaRecogida = $("#FechaRecogida").datepicker("getDate");
    var fechaDevolucion = $("#FechaDevolucion").datepicker("getDate");
    var dias = 0;

    if (horaRecogida == null || horaDevolucion == null || horaRecogida == "" || horaDevolucion == "" || fechaRecogida == null || fechaDevolucion == null) {
        $("#lblDias").val('');
        $("#lblDias").text('');
        $("#lblTotalDias").css('display', 'none');
        return null;
    }


    if (horaDevolucion > horaRecogida) {
        dias = 1;
    }

    dias = dias + Math.ceil((fechaDevolucion.getTime() - fechaRecogida.getTime()) / 86400000);

    $("#lblTotalDias").css('display', 'inline-block');
    $("#lblDias").val(dias);
    $("#lblDias").text(dias);
}

function inicializarFechasEntradaSalidaComun(fechaEntradaModificacionBusqueda, fechaSalidaModificacionBusqueda, inputFechaInicio, inputFechaFin, traduccionNoches, maximoNumeroDeNoches, sePuedeReservarParaElMismoDia) {

   var formularioBusqueda = $("#formularioBusqueda");
           
    var fechaDesdeMinima = $.datepicker.parseDate('dd/mm/yy', formularioBusqueda.find("#fechaDesdeMinima").val());
    var fechaHastaMaxima = $.datepicker.parseDate('dd/mm/yy', formularioBusqueda.find("#fechaHastaMaxima").val());

    var fechaActual = new Date();   
    if (fechaDesdeMinima < fechaActual) {
        fechaDesdeMinima = fechaActual;
    }

    inputFechaInicio.datepicker('option', 'minDate', fechaDesdeMinima);
    inputFechaInicio.datepicker('option', 'maxDate', fechaHastaMaxima);
    
    if (fechaEntradaModificacionBusqueda != '01/01/0001') {
        inputFechaInicio.val(fechaEntradaModificacionBusqueda);
    }

    // Hay formularios que pueden NO tener segunda fecha:
    if (inputFechaFin != null) {

        var fechaInicio = inputFechaInicio.datepicker("getDate");

        if (fechaInicio != null) {
            inputFechaFin.datepicker('option', 'minDate', fechaInicio);
        }
        else {
            inputFechaFin.datepicker('option', 'minDate', fechaDesdeMinima);
        } 
        
        inputFechaFin.datepicker('option', 'maxDate', fechaHastaMaxima);

        if (fechaSalidaModificacionBusqueda != '01/01/0001') {
            inputFechaFin.val(fechaSalidaModificacionBusqueda);
        }

        // Actualizamos el calendario de fecha de fin en función del primero: máximo noches reserva, fecha de salida mínima.
        inputFechaInicio.datepicker('option', 'onSelect', function (fecha) {

            var fechaSeleccionada = $.datepicker.parseDate('dd/mm/yy', fecha);

            var fechaSeleccionadaMasUnDia = new Date();
            fechaSeleccionadaMasUnDia.setTime(fechaSeleccionada.getTime());

            sePuedeReservarParaElMismoDia ? fechaSeleccionadaMasUnDia.setDate(fechaSeleccionadaMasUnDia.getDate()) : fechaSeleccionadaMasUnDia.setDate(fechaSeleccionadaMasUnDia.getDate() + 1);
            inputFechaFin.datepicker("option", "minDate", fechaSeleccionadaMasUnDia);

            var fechaSalidaActual = inputFechaFin.datepicker("getDate");

            if (fechaSalidaActual <= fechaSeleccionada) {
                inputFechaFin.datepicker("setDate", null);
                formularioBusqueda.find("#numeroNoches").empty();
            }

            if (maximoNumeroDeNoches > 0) {
                var fechaMaximaReserva = new Date();
                fechaMaximaReserva.setTime(fechaSeleccionada.getTime());
                fechaMaximaReserva.setDate(fechaMaximaReserva.getDate() + maximoNumeroDeNoches);
                inputFechaFin.datepicker("option", "maxDate", fechaMaximaReserva);
            }

            mostrarNumeroDeNoches(fechaSeleccionada, inputFechaFin.datepicker("getDate"), traduccionNoches);

        });

        inputFechaFin.datepicker('option', 'onSelect', function(fecha) {
            var fechaInicio = inputFechaInicio.datepicker("getDate");
            if (fechaInicio != null) {
                mostrarNumeroDeNoches(fechaInicio, $.datepicker.parseDate('dd/mm/yy', fecha), traduccionNoches);
            }
        });
    }
}

function mostrarNumeroDeNoches(fechaInicio, fechaFin, traduccionNoches) {

    if (fechaFin == null)
        return;

    var numeroDias = Math.round(((fechaFin.getTime() - fechaInicio.getTime()) / 86400000));
    
    $("#formularioBusqueda #numeroNoches").html("(" + traduccionNoches + ": " + numeroDias.toString() + ")");
}

function inicializarSuperdestinos(textoCerrar, textoSeleccionarSubzona, textoSeleccionarDestino, textoCualquierDestino, urlDameZonasYSubzonasYDestinos) {

    var capaModalDestinos = $("#fondoModalDestinos");
    var capaContenidoDestinos = capaModalDestinos.find("#superdestinos");
    
    var formularioBusqueda = $("#formularioBusqueda");
    var txtTextoBusqueda = formularioBusqueda.find("#TextoBusqueda");
    var txtCodigoZona = formularioBusqueda.find("#txtCodigoZona");
    var txtCodigoSubzona = formularioBusqueda.find("#txtCodigoSubzona");
    var txtCodigoDestino = formularioBusqueda.find("#txtCodigoDestino");
          
    idPestaña = formularioBusqueda.find("#IdPestaña").val();
  
    // Lanzar la selección de destinos:
    txtTextoBusqueda.live("click", function () {

        if (formularioBusqueda.find("#parrafoTipoBusqueda input:radio:checked").val() != "superdestinos")
            return;

        capaContenidoDestinos.empty();

        if (destinosPorPestaña[idPestaña] == null) {

            capaContenidoDestinos.append('<img src="../Content/images/CssImages/cargando.gif" alt="Cargando..." />');
            capaModalDestinos.fadeIn();

            $.getJSON(urlDameZonasYSubzonasYDestinos, "idPestania=" + idPestaña, function (resultado) {
                destinosPorPestaña[idPestaña] = resultado;
                if (!TratamientoUnicaSubZona(resultado, capaContenidoDestinos, idPestaña, textoSeleccionarDestino, textoCualquierDestino)) {
                    mostrarZonasYSubzonas(capaContenidoDestinos, idPestaña, textoSeleccionarSubzona, textoCerrar);
                }
            });
        }
        else {
            capaModalDestinos.fadeIn();
            if (!TratamientoUnicaSubZona(destinosPorPestaña[idPestaña], capaContenidoDestinos, idPestaña, textoSeleccionarDestino, textoCualquierDestino)) {
                mostrarZonasYSubzonas(capaContenidoDestinos, idPestaña, textoSeleccionarSubzona, textoCerrar);
            }
        }

        return false;
    });

    // Selección de subzona:
    capaContenidoDestinos.find(".subzona").live("click", function() {
        mostrarDestinosPorSubzona(capaContenidoDestinos, idPestaña, $(this).attr("id").split("_")[0], $(this).attr("id").split("_")[1], textoSeleccionarDestino, textoCualquierDestino);
    });

    // Selección de destino:
    capaContenidoDestinos.find(".destino").live("click", function() {

        var idElemento = $(this).attr("id");
        var indiceZona = idElemento.split("_")[0];
        var indiceSubzona = idElemento.split("_")[1];
        var indiceDestino = idElemento.split("_")[2];

        txtCodigoZona.val(destinosPorPestaña[idPestaña][indiceZona].IdZona);
        txtCodigoSubzona.val(destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].IdSubzona);

        if (!$(this).hasClass("todosLosDestinos")) {
            txtCodigoDestino.val(destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Destinos[indiceDestino].IdDestino);
            txtTextoBusqueda.val(destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Destinos[indiceDestino].Descripcion + ' (' + destinosPorPestaña[idPestaña][indiceZona].Descripcion + ' » ' + destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Descripcion + ')');
        }
        else {
            txtCodigoDestino.val("");
            txtTextoBusqueda.val(destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Descripcion + ' (' + destinosPorPestaña[idPestaña][indiceZona].Descripcion + ')');
        }

        capaModalDestinos.fadeOut();
        formularioBusqueda.hacerScroll();
    });

    // Cerrar la pantalla de selección de destinos:
    capaContenidoDestinos.find("#btnCerrarDestinos").live("click", function() {

        if (txtCodigoZona.val() == "" && txtCodigoSubzona.val() == "")
            txtTextoBusqueda.val("");

        capaModalDestinos.fadeOut();
    });

    // Volver a la selección de subzonas:
    capaContenidoDestinos.find("#btnVolverZonas").live("click", function() {
        mostrarZonasYSubzonas(capaContenidoDestinos, idPestaña, textoSeleccionarSubzona, textoCerrar);
    });

    formularioBusqueda.find("#radioSuperdestinos").live("click", function() {
        txtTextoBusqueda.val("");
    });

    formularioBusqueda.find("#radioBusquedaProducto").live("click", function() {      
        txtTextoBusqueda.val("");
        txtCodigoZona.val("");
        txtCodigoSubzona.val("");
        txtCodigoDestino.val("");
    });

    // Para la modificación de la búsqueda desde la vista de resultados:
    if (txtTextoBusqueda.val() != "" && txtCodigoZona.val() == "") {
        formularioBusqueda.find("#radioBusquedaProducto").attr("checked", true);
    }
}

function mostrarZonasYSubzonas(capaSuperdestinos, idPestaña, textoSeleccionarSubzona, textoCerrar) {
    capaSuperdestinos.empty();

    var listaZonasYSubzonas = '<h2>' + textoSeleccionarSubzona + '</h2><p id="botonera"><span id="btnCerrarDestinos">' + textoCerrar + '</span></p><ul id="zonas">';
    $.each(destinosPorPestaña[idPestaña], function(i, zona) {
        listaZonasYSubzonas += '<li class="cabeceraGrupo">' + zona["Descripcion"] + '<ul class="subzonas">';
        
        $.each(zona["Subzonas"], function(j, subzona) {
            listaZonasYSubzonas += '<li><a class="subzona" id="' + i + '_' + j + '">' + subzona["Descripcion"] + '</a></li>';
        });
     
        listaZonasYSubzonas += '</ul></li>';
    });

    listaZonasYSubzonas += '</ul><div class="capaClear"></div>';
    capaSuperdestinos.append(listaZonasYSubzonas);
}

function mostrarDestinosPorSubzona(capaSuperdestinos, idPestaña, indiceZona, indiceSubzona, textoSeleccionarDestino, textoCualquierDestino) {

    var listaDestinos = '<h2>' + textoSeleccionarDestino + '</h2><p id="botonera"><span id="btnVolverZonas">&laquo; Volver a la lista de Zonas</span><span id="btnCerrarDestinos">Cerrar</span></p><ul id="subzona"><li class="cabeceraGrupo">' + destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Descripcion;
    
    listaDestinos += '<ul class="destinos"><li><a class="destino todosLosDestinos" id="' + indiceZona + '_' + indiceSubzona + '_*">' + textoCualquierDestino + ' ' + destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Descripcion + '</a></li>';
    $.each(destinosPorPestaña[idPestaña][indiceZona].Subzonas[indiceSubzona].Destinos, function(i, destino) {
        listaDestinos += '<li><a class="destino" id="' + indiceZona + '_' + indiceSubzona + '_' + i + '">' + destino.Descripcion + '</a></li>';
    });
    listaDestinos += '</ul></li></ul><div class="capaClear"></div>';

    capaSuperdestinos.empty().append(listaDestinos);
}

function TratamientoUnicaSubZona(zona, capaContenidoDestinos, idPestaña, textoSeleccionarDestino, textoCualquierDestino) {
    if (zona.length == 1) {
        if (zona[0]["Subzonas"].length == 1) {
            mostrarDestinosPorSubzona(capaContenidoDestinos, idPestaña, 0, 0, textoSeleccionarDestino, textoCualquierDestino);
            return true;
        }
    }

    return false;
}
