var contenido_carrito = '';

function cargar_solo_cabecera(localizador){
    var lang = jQuery('#lang').val();

    jQuery.ajax({
        type : "POST",
        url  : ROOTGESTOR  + "ApiTusVisitasV2/modificar",     		
        data : JSON.stringify({    
          localizador : localizador,
          lang        : lang
        }),
        success: function (response) {
          var data = JSON.parse(response);

          jQuery('#carrito').html(contenido_carrito);
             
          jQuery('#TotalPrecio').text(data.precio_total_str);
          jQuery('#TotalCarrito').val(data.precio_total_str);
          jQuery('#StrFecha').html(data.fecha);
          jQuery('#StrHora').html(data.hora); 
          try {        
            jQuery('#TxtHoraFechaAnterior').val(data.hora);       
          } catch (error) {
    
          }          
          jQuery('#Adultos').val(data.unidades);
          jQuery('#Plazas').val(data.unidades);
         
        
        var tarifas_html       = '';
        var tarifas_input_html = '';
        var TarifasId          = '';
        var TarifasValue       = '';

        for(var i = 0; i < data.tarifas.length; i++){    
            if(i == data.tarifas.length - 1){
                TarifasId    += data.tarifas[i].Tarifa.id;
                TarifasValue += data.tarifas[i].LocalizadorTarifa.plazas_adulto;
            }else{
                TarifasId    += data.tarifas[i].Tarifa.id + ',';
                TarifasValue += data.tarifas[i].LocalizadorTarifa.plazas_adulto + ',';
            }
            tarifas_input_html += '<div class="adultos">';
            tarifas_input_html += '<h4>' + data.tarifas[i].UsuariosGrupo.nombre + ' (' + data.tarifas[i].Tarifa.precio + ' €)</h4>	';
            tarifas_input_html += '<input type="text" max="' + data.tarifas[i].LocalizadorTarifa.plazas_adulto + '" id="txtTarifa' + data.tarifas[i].Tarifa.id + '" name="tarifas[]" placeholder="-" class="input-card usuarios_grupos form-control-tarifas" data-id="' + data.tarifas[i].Tarifa.id + '" data-original="' + data.tarifas[i].LocalizadorTarifa.plazas_adulto + '"  value="' + data.tarifas[i].LocalizadorTarifa.plazas_adulto + '"  >';
            tarifas_input_html += '</div>';
        }

        jQuery('#DivTarifasCambio').html(tarifas_input_html);
        
        data.tarifas.map( tarifa =>{            
            tarifas_html +=`
                <tr>
                    <td>
                        <label>${tarifa.UsuariosGrupo.nombre}</label>
                    </td>
                    <td>
                        <span class="num_usuarios">${tarifa.LocalizadorTarifa.plazas_adulto}</span>
                    </td>
                    <td class="casi-last">${parseFloat(tarifa.Tarifa.precio).toFixed(2)} €</td>
                </tr>`;
        });
        jQuery("#carrito .totales").before(tarifas_html);

        try {
            var extras_html = '';
            data.extras_agrupados.map( extra =>{
                extras_html +=`
                    <tr class="extra-mejora-tabla">
                        <td>
                            <label>${extra.nombre_extra}</label>
                        </td>
                        <td>
                            <span class="num_usuarios">${extra.cantidad_extra}</span>
                        </td>
                        <td>${parseFloat(extra.total).toFixed(2)}  €</td>
                    </tr>
                `;
            });
            jQuery("#carrito .totales").before(extras_html);


        } catch (error) {
            
        }

        try {
            if (data.bono != ''){
                var texto_cupon = jQuery('#LblCupon').val();
                var cupon_html  = '<tr class="tr-descuento extra-mejora-tabla">';
                    cupon_html += '<td>' + texto_cupon +' (' + data.bono + ': -' + data.bono_cantidad +') </td>';
                    cupon_html += '<td><span class="num_usuarios">1</span></td>';
                    cupon_html += '<td class="casi-last"> <strike>' + parseFloat(data.bono_cantidad_descontada).toFixed(2) +' €</strike></td>';
                    cupon_html += '</tr>';
                jQuery("#carrito .totales").before(cupon_html);
            }

                     
        } catch (error) {
            
        }   
 
        },			
        beforeSend: function () {
            // jQuery(".loader").show();
        }
        });
    

}

function carga_controles_fecha() {

    jQuery(".idioma_cada input").attr("checked", true);

    var diasQueSeBloquean = [];
    jQuery
        .ajax({
            type     : "POST",
            async    : false,
            dataType : "json",
            url      : "//" + location.host + "/wp-content/plugins/visitas/modules/visitas/reservas/ajax/reserva_web/disponibilidad_fechas_servicio_modificar.php",
            data     : {
                servicio    : jQuery("#TipoVisita").val(),
                localizador : jQuery("#Localizador").val(),
            },
            cache: false,
        })
        .done(function (response) {
            diasQueSeBloquean = response;
        });
    // CALENDARIOS
    var calendary_options_complementary = {
        beforeShowDay: DiasBloqueados,
    };
    // CALENDARIOS
    $datediv = jQuery("#FechaVisita-container");
    var fecha_vienes = jQuery("#fecha_vienes").val();
    if (fecha_vienes != "") {
        var primer_dia = new Date(1000 * fecha_vienes);
    } else {
        if (diasQueSeBloquean[0] == undefined) {
            var primer_dia = new Date();
        } else {
            var primer_dia = new Date(diasQueSeBloquean[0]);
        }
    }
    // CALENDARIOS
    $datediv.datepicker({
        language        : LANG,
        defaultViewDate : {
            year  : primer_dia.getFullYear(),
            month : primer_dia.getMonth(),
        },
        beforeShowDay: function (d) {
            var year  = d.getFullYear(),
                month = ("0" + (d.getMonth() + 1)).slice(-2),
                day   = ("0" + d.getDate()).slice(-2);
            var formatted = year + "-" + month + "-" + day;
            if (jQuery.inArray(formatted, diasQueSeBloquean) != -1) {
                return true;
            } else {
                return false;
            }
        },
    });

    // Sólo si ha introducido fecha marcamos el día
    if (fecha_vienes != "") {
        jQuery("#FechaVisita-container td").each(function (index, element) {
            if (jQuery(element).text() == primer_dia.getDate()) {
                if (jQuery(element).hasClass("new") || jQuery(element).hasClass("old")) {
                } else {
                    jQuery(element).addClass("active");
                    jQuery("#FechaVisita").val(jQuery.datepicker.formatDate("dd/mm/yy", primer_dia));
                }
            }
        });

        ComprobarDisponibilidad(jQuery('#FechaAnterior').val());
        
    }

    $dateinput    = jQuery("#FechaVisita");
    $dateselected = jQuery("#FechaVisita-selected");
    $datediv.unbind().on("changeDate", function (e) {
        $dateinput.val(e.format("dd/mm/yyyy"));
        comprobarTodos();
    });
    jQuery(".usuarios_grupos, .usuarios_grupos_no_suman, input[type=radio][name=Idioma]")
        .unbind()
        .on("change", function (e) {
            comprobarTodos();
        });
        jQuery("#ValidarDatosDisponibilidad").hide();
        jQuery("#ValidarDatoPersonas").hide();
        jQuery("#VerDisponibilidad")
        .unbind()
        .on("click", function () {     
            ComprobarDisponibilidad('');                
        });
  
    // QUITO ACCIÓN DE FORMULARIO HASTA QUE ESTÉN SELECCIONADOS TODOS
    // LOS DATOS NECESARIOS
    var FormComprar   = jQuery("#FormRealizarVisita"),
        ComprarAction = FormComprar.attr("action");
    FormComprar.removeAttr("action");
    jQuery("#ValidacionVisita").hide();
    jQuery("#ValidarDatoPersonas").hide();
    jQuery("#ValidarRealizarVisita").click(function () {
        var hora   = jQuery("#HoraId").val();
        var plazas = jQuery("#Plazas").val();
        if (hora == "") {
            jQuery(".SeleccioneHorario").html(disponibilidades_bodegas["texto_seleccione_horario_visita"]);
            jQuery(".SeleccioneHorario").show();
        } else {
            // Compruebo plazas antes de continuar
            jQuery
                .ajax({
                    type : "POST",
                    url  : "//" + location.host + "/wp-content/plugins/visitas/modules/visitas/reservas/ajax/reserva_web/comprobar_plazas_libres.php",
                    data : {
                        plazas : plazas,
                        hora   : hora,
                    },
                    cache: false,
                })
                .done(function (response) {
                    // No hay plazas libres
                    if (response == 0) {
                        jQuery("#ValidacionVisita").show();
                        jQuery("#ValidacionVisita").html(compra_reserva["text_no_hay_plazas"]);
                    }
                    // Hay plazas libres
                    else {
                        FormComprar.attr("action", ComprarAction);
                        FormComprar.submit();
                    }
                });
            return false;
        }
        return false;
    });
    /*
     * PRUEBA.
     * Ocultar teclado de dispositivo móvil si obtiene el foco del input date.
     */
    jQuery("#FechaVisita").focus(function () {
        var isMobile = false; // Comprobar si estamos usando un móvil
        if (
            /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) ||
            /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))
        ) {
            isMobile = true;
        }
        // Acción
        if (isMobile) {
            jQuery(this).blur();
        }
    });

    // Comprobamos que en esa sala horario ya se ha hecho el mínimo de una reserva de 6 o la nuestra es de 6
    jQuery(".HoraSeleccion").click(function () {        
        var personas = 0;
        jQuery(".usuarios_grupos").each(function (ug) {
            if (jQuery(this).val() > 0) {
                personas = personas + parseInt(jQuery(this).val()) * jQuery(this).data("cuantos");
            }
        });

        var checkbox      = jQuery(this);
        var sala_horario  = jQuery(this).val();
        var servicio      = jQuery("#ServicioId").val();
        var minimo_plazas = jQuery("#minimo_plazas").val();

        jQuery(".inputs-horas label").each(function () {
            jQuery(this).removeClass("hour-selected");
        });

        if (personas < minimo_plazas) {
            jQuery
                .ajax({
                    type : "POST",
                    url  : "//" + location.host + "/wp-content/plugins/visitas/modules/visitas/reservas/ajax/reserva_web/comprobar_minimo_reserva.php",
                    data : {
                        personas     : personas,
                        sala_horario : sala_horario,
                        servicio     : servicio,
                    },
                    cache: false,
                })
                .done(function (response) {
                    jQuery(".personas_minimo").remove();
                    if (response == 0) {
                        jQuery("#FechaId").val("");
                        jQuery("#HoraId").val("");
                        jQuery("#PlazasAdulto").val("");
                        jQuery("#PlazasInfantil").val("");
                        jQuery("#IdiomaId").val("");

                        checkbox.prop("checked", false);
                        jQuery(".inputs-horas").after("<div class='personas_minimo'>" + disponibilidades_bodegas["texto_reserva_minima"] + " " + minimo_plazas + " " + disponibilidades_bodegas["texto_personas"] + "</div>");
                    } else {
                        checkbox.parent().addClass("hour-selected");
                        jQuery(".personas_minimo").remove();
                    }
                });
        } else {
            checkbox.parent().addClass("hour-selected");
        }
    });

    jQuery('#Horas').change(function(){
		if(jQuery("#Horas option:selected").val() == 0){
			jQuery("#ValidarCambioReserva").prop('disabled', true);
		}else{
			jQuery("#ValidarCambioReserva").prop('disabled', false);
		}

	});

	//Recorremos las cajas de todas las tarifas y añadimos el touchSpin - Maximo independiente
    jQuery(".adultos input").each(function(index, tarifa){
		jQuery("#" + tarifa.id).TouchSpin({
			buttonup_txt   : '<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve"><rect x="14.5" y="29.5" class="st0" width="31" height="1"/><rect x="29.5" y="14.5" class="st0" width="1" height="31"/> </svg>',
			buttondown_txt : '<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve"><rect x="14.5" y="29.5" class="st0" width="31" height="1"/></svg>',
			min            : 0,
			max            : tarifa.attributes['data-original'].value,
		});
	})

	//Retiramos la clase form-control porque agrega un padding no deseado
    jQuery(".adultos input").removeClass('form-control');

    /************************** PROCESO MODIFICACIÓN ************************/
    // Valido si hay plazas en el horario seleccionado en el momento de hacer
    // la reserva, por si en ese momento
    // otra persona le ha dado antes y ha quitado plazas que quedaban

}
function siguiente_paso(){

	let tarifas                 = '';
	let id_tarifa               = '';
	let nombre                  = '';
	let persona                 = 0;
	let precio_tarifa           = 0;
	let total_personas          = 0;
	let total_personas_original = 0;
	let total_precio            = 0;
	let lista_tarifas           = "";
	let lista_personas          = "";

	jQuery('.usuarios_grupos').each(function (index) {
		id_tarifa = jQuery(this).attr('data-id');
		original  = parseInt(jQuery(this).attr('data-original'));
		nombre    = jQuery(this).attr('name');
		if (jQuery(this).val() != '') {
			persona = parseInt(jQuery(this).val())
		} else {
			persona = 0;
		}
		total_personas          += persona;
		total_personas_original += original; 

		precio_tarifa = jQuery(this).val() * jQuery(this).attr('data-precio');
		total_precio += precio_tarifa;

		tarifas        += id_tarifa + ", " + nombre + ", " + persona + ", " + precio_tarifa + " : ";		
		lista_tarifas  += id_tarifa + ",";
		lista_personas += persona + ",";
		
	});

	if(lista_tarifas !=''){
		lista_tarifas = lista_tarifas.slice(0,-1);
	}
	if(lista_personas !=''){
		lista_personas = lista_personas.slice(0,-1);
	}

	jQuery('#tarifas').val(lista_tarifas);
	jQuery('#lista').val(lista_personas);
	
	if (jQuery('#tipoModificacion').val() =='plazas'){
		// TODO: Descomentar y revisar comprobación de cambio de unidades 
		if (total_personas< total_personas_original){
		
            var data_hay_extras = jQuery('#hay_extras').val();

            if (data_hay_extras == 1 ){

                var localizador = jQuery("#Localizador").val();
                var res         = comprobacion_reduccion_plazas(localizador,total_personas);

                if( res.cantidad_extras_ok == 1 ){
                    cargarConfirmarCabecera();
                }else{
                    var errormsn = 'El localizador tiene extras asociados no se pueden modificar las plazas';	
                  
                    jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
                    jQuery('#ValidarModificar').fadeIn( "slow" );	
                }

            }else{
                cargarConfirmarCabecera();
            }

		}else if (total_personas == total_personas_original){
			var errormsn= 'Número de plazas no modificadas';	
            try {
                errormsn = modificar['msn_plazas_igual'];
            } catch (error) {
                
            }
			jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
			jQuery('#ValidarModificar').fadeIn( "slow" );	
		}else{
			var errormsn = 'El número de plazas no pueden ser superiores';
            try {
                errormsn = modificar['msn_plazas_superior'];                
            } catch (error) {
                
            }
			jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
			jQuery('#ValidarModificar').fadeIn( "slow" );		
		}	
	}else
	{		
		var fechaId       = jQuery('#salaHorarioSeleccionada').val();	
		var fechaAnterior = jQuery('#FechaAnterior').val();	
	
	  	if(fechaId == 0){	
            
            var errormsn = 'Debe seleccionar una hora';
            try {
                errormsn = modificar['msn_fecha'];
            } catch (error) {
                
            }		
			jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
			jQuery('#ValidarModificar').fadeIn( "slow" );

			jQuery("#MensajeErrorSeleccionarHorario").html('<label class="error"> ' + errormsn + ' </label>');
			jQuery('#MensajeErrorSeleccionarHorario').fadeIn( "slow" );

			jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
			jQuery('#ValidarModificar').fadeIn( "slow" );
	
		}else{
			if (fechaAnterior == fechaId ){
				var errormsn = 'No hay cambiado la fecha';

                try {
                    errormsn = modificar['msn_fecha_igual'];                    
                } catch (error) {
                    
                }

				jQuery("#MensajeErrorSeleccionarHorario").html('<label class="error"> ' + errormsn + ' </label>');
				jQuery('#MensajeErrorSeleccionarHorario').fadeIn( "slow" );

				jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
				jQuery('#ValidarModificar').fadeIn( "slow" );

			}else{
                

                var data_hay_extras = jQuery('#hay_extras').val();

                if (data_hay_extras == 1 ){
                    var localizador = jQuery("#Localizador").val();
                    var res         = comprobacion_cambio_fecha_extra(localizador,fechaId);

                    if(res.hay_disponibilidad_extras == 1){
                        cargarConfirmarCabecera();
                    }else{
                        var errormsn= 'No hay extras disponibles en este horario';

                        jQuery("#MensajeErrorSeleccionarHorario").html('<label class="error"> ' + errormsn + ' </label>');
                        jQuery('#MensajeErrorSeleccionarHorario').fadeIn( "slow" );

                        jQuery("#ValidarModificar").html('<label class="error"> ' + errormsn + ' </label>');
                        jQuery('#ValidarModificar').fadeIn( "slow" );
                    }
                }else{
                    cargarConfirmarCabecera();
                }

			}
		}
	}

 }


/***********************************************************************
 * Función que bloquea días del calendario
 **********************************************************************/
function DiasBloqueados(date) {
    // Bloqueo fechas superiores a 90 días
    fecha_maxima = new Date();
    tiempo       = fecha_maxima.getTime();
    dias         = 180;
    milisegundos = parseInt(dias * 24 * 60 * 60 * 1000);
    total        = fecha_maxima.setTime(tiempo + milisegundos);
    if (date > fecha_maxima) {
        return [false, "dia_nodisponible"];
    }
    return [true, "dia_disponible"];
}

/***********************************************************************
 * Función que pasada una fecha me devuelve el día de la semana que es
 **********************************************************************/
function DiaSemanaFecha(fecha_visita) {
    // Convierto fecha de visita al formato adecuado
    var fFecha = fecha_visita.split("/");
    var fecha  = fFecha[2] + "/" + fFecha[1] + "/" + fFecha[0];
    // Días de la semana
    dia_fecha = new Date(fecha);
    return dias_semana[dia_fecha.getDay()];
}

function comprobarTodos() {
    
    valor_fecha   = jQuery("#FechaVisita").val();
    valor_adultos = jQuery("#Adultos").val();
    valor_idioma  = jQuery("input:radio[name=Idioma]:checked").val();

    if (valor_fecha != "" && valor_adultos != "" && valor_idioma != "" && valor_idioma != undefined && valor_adultos != undefined) {
        jQuery("#VerDisponibilidad").click();        
    }
}

function seleccionarHorario( horario,fecha,hora){
    // Eliminamos las clases seleccionados de todos los horarios
    jQuery("label[id^=LblHorario]").each((index,item)=>{
        var iid = jQuery(item).attr('id');        
        jQuery('#'+ iid).attr('class','');
    })
    // Marcamos el horario seleccionado como activo
    jQuery('#LblHorario' + horario).addClass('hour-selected');
    jQuery('#salaHorarioSeleccionada').val(horario);
    jQuery('#fechaSeleccionada').val(fecha);
    jQuery('#horaSeleccionada').val(hora);

    jQuery('#ValidarModificar').html('');
    jQuery('#ValidarModificar').hide('');

    jQuery('#MensajeErrorSeleccionarHorario').html('');
    jQuery('#MensajeErrorSeleccionarHorario').hide('');
}

function ComprobarDisponibilidad( SalaHorarioSeleccionado){
   
    // Datos
    var localizador  = jQuery("#Localizador").val();
    var bodega       = jQuery("#BodegaId").val();
    var fecha        = jQuery("#FechaVisita").val();
    var categoria    = jQuery("#TipoVisita").val();
    var idioma       = jQuery("input:radio[name=Idioma]:checked").val();
    var servicio     = jQuery('#ServicioId').val();
    var adultos      = jQuery("#Adultos").val();
    var TarifasId    = jQuery("#TarifasId").val();
    var TarifasValue = jQuery("#TarifasValue").val();

    var lista        = {};     
    var listaValues  = TarifasValue.split(",");
    var listaNombres = TarifasId.split(",").forEach(function (item,index) {
        lista[item] = listaValues[index];
    });
  
    if (SalaHorarioSeleccionado == ''){
       jQuery('#salaHorarioSeleccionada').val(0);
    }
   
    // Falta algún dato
    if (adultos == "" || isNaN(adultos) || fecha == "" || idioma == "" || categoria == "") {
        jQuery("#ValidarDatosDisponibilidad").show();
        jQuery("#ValidarDatosDisponibilidad").html(disponibilidades_bodegas["texto_introduzca_datos"]);
    }
    // Compruebo que están introducidos todos los datos y son correctos
    else if (adultos < 1) {
        jQuery("#ValidarDatoPersonas").show();
        jQuery("#ValidarDatoPersonas").html(disponibilidades_bodegas["texto_reserva_minima"]);
    } else {
        
        // Compruebo disponibilidad
        jQuery.ajax({
            type : "POST",
            url  : ROOTGESTOR  + "ApiVisitasV2/disponibilidad_bodega",              
            data : JSON.stringify({
                bodega   : bodega,
                adultos  : adultos,
                lista    : lista,
                fecha    : fecha,
                servicio : servicio,
                idioma   : idioma,
            }),
            success: function (response) {
            
                var json = jQuery.parseJSON(response);
                
                var contenidoHtml  = '<div class="info_servicio">';
                    contenidoHtml += '<div class="radio inputs-horas">';
                if (json.horariosid.length >0){                            
                    json.horariostexto.forEach((item,index) => {                      
                        if (SalaHorarioSeleccionado == json.horariosid[index] ){
                            contenidoHtml += `<label id="LblHorario${json.horariosid[index]}" class="hour-selected">`;
                        }else{
                            contenidoHtml += `<label id="LblHorario${json.horariosid[index]}">`;
                        }
                        contenidoHtml += `<input type="radio" name="hora" value="${json.horariosid[index]}" class="HoraSeleccion" onChange="seleccionarHorario(${json.horariosid[index]},'${fecha}','${json.horariostexto[index]}')">`;
                        contenidoHtml += `<span class="hora">${item}</span>`;
                        contenidoHtml += '</label>';
                    });
                }else{
                    if (SalaHorarioSeleccionado == '' || SalaHorarioSeleccionado == '0'){				
                        contenidoHtml += '<div class="servicio_nombre msg_error">' + jQuery("#MsnNoyHorario").val() + '</div>';
                    }else{
                        contenidoHtml += `<label id="LblHorario${SalaHorarioSeleccionado}" class="hour-selected">`;
                        contenidoHtml += `<input type="radio" name="hora" value="${SalaHorarioSeleccionado}" class="HoraSeleccion">`;
                        contenidoHtml += `<span class="hora">${jQuery("#TxtHoraFechaAnterior").val()}</span>`;
                        contenidoHtml += '</label>';
                    }
                }
                contenidoHtml += '</div>';
                contenidoHtml += '</div>';
                jQuery("#ResultadosVisitas").html(contenidoHtml);
            },
            beforeSend: function () {
                // jQuery(".loader").show();
            }
            });

            jQuery("#ValidarDatosDisponibilidad").hide();
        }
}

function cargarConfirmarCabecera(){
    jQuery("#DivOpcionesModificacion").hide();
    jQuery("#ResumenCambioReserva").hide();
    jQuery("#BtnConfirmarModificar").show();

    window.scrollTo(0,0);

    jQuery.ajax({
        type : "POST",
        url  : "//" + location.host + "/wp-content/plugins/visitas/modules/visitas/reservas/ajax/modificar/pre_confirmar_fechas_api.php",
        data : {
            servicio    : jQuery("#TipoVisita").val(),
            localizador : jQuery("#Localizador").val(),
            tipo        : jQuery('#tipoModificacion').val(),
        },
        cache: false,
        success: function (response) {
            jQuery("#DivCarritoResumenConfirmar").html(response);
            jQuery("#DivCarritoResumen").hide();
            jQuery("#DivCarritoResumenConfirmar").show();

            cargar_resumen_modificacion(jQuery("#Localizador").val());       
        },
    });
}

function cargar_resumen_modificacion(localizador){

    var tarifas    = jQuery('#tarifas').val();
    var plazas     = jQuery('#Plazas').val();
    var lista      = jQuery('#lista').val();
    var tipo       = jQuery('#tipoModificacion').val();
    var fecha      = jQuery('#fecha').val();
    var sala_nueva = jQuery('#salaHorarioSeleccionada').val();
    var lang       = jQuery('#lang').val()
      
    jQuery.ajax({
        type     : "POST",      
        url      : ROOTGESTOR  + "ApiTusVisitasV2/modificar_previo",     		
        data     : JSON.stringify({    
            localizador : localizador,
            tarifas     : tarifas,
            plazas      : plazas,
            lista       : lista,
            tipo        : tipo,
            sala_nueva  : sala_nueva,
            lang        : lang
        }),
        success: function (response) {
    
        var data = JSON.parse(response);
              
        jQuery('#TotalPrecioConfirmar').text(data.precio_total_str); 
        jQuery('#StrServicioConfirmar').html(data.info_compra.servicio_nombre);
        jQuery('#StrInstalacionConfirmar').html(data.info_compra.instalacion_nombre);

        if (tipo =='fechas'){
            jQuery('#StrFechaAnterior').html(fecha);
            jQuery('#StrHoraAnterior').html(data.hora);
            jQuery('#StrFechaNueva').html(data.fecha_nueva);
            jQuery('#StrHoraNueva').html(data.hora_inicio_nueva);
        }
        if (tipo =='plazas'){
            jQuery('#StrFechaPlazas').html(fecha);
            jQuery('#StrHoraPlazas').html(data.hora);
            jQuery('#StrPlazasAnterior').html(plazas);
      
            jQuery('#StrTotal').html(data.precio_total_str_anterior);
        }    
    
        var tarifas_html = '';
        var total_plazas = 0;
            data.tarifas.map( tarifa =>{            
                total_plazas += parseInt(tarifa.num_tarifa_carrito);
                tarifas_html +=`
                    <tr>
                        <td>
                            <label>${tarifa.nombre_tarifa}</label>
                        </td>
                        <td>
                            <span class="num_usuarios">${tarifa.num_tarifa_carrito}</span>
                        </td>
                        <td class="casi-last">${tarifa.precio} </td>
                    </tr>`;
            });
            jQuery("#carritoConfirmar .totales").before(tarifas_html);
            jQuery('#StrPlazasNueva').html(total_plazas);

            try {
                var extras_html = '';
                data.extras_agrupados.map( extra =>{
                    extras_html +=`
                        <tr class="extra-mejora-tabla">
                            <td>
                                <label>${extra.nombre_extra}</label>
                            </td>
                            <td>
                                <span class="num_usuarios">${extra.cantidad_extra}</span>
                            </td>
                            <td>${parseFloat(extra.total).toFixed(2)}  €</td>
                        </tr>
                    `;
                });
                jQuery("#carritoConfirmar .totales").before(extras_html);

            } catch (error) {
                
            }

            try {
                if (data.bono != ''){
                    var texto_cupon = jQuery('#LblCupon').val();
                    var cupon_html  = '<tr class="tr-descuento extra-mejora-tabla">';
                        cupon_html += '<td>' + texto_cupon +' (' + data.bono + ': -' + data.bono_cantidad + ') </td>';
                        cupon_html += '<td><span class="num_usuarios">1</span></td>';
                        cupon_html += '<td class="casi-last"> <strike>' + parseFloat(data.bono_cantidad_descontada).toFixed(2) +' €</strike></td>';
                        cupon_html += '</tr>';
                    jQuery("#carritoConfirmar .totales").before(cupon_html);
                }
                        
            } catch (error) {
                
            }
   
            jQuery('#DivCarritoResumenConfirmar').show();
            try {
                jQuery("#DivSteps").html(modificar['paso_2']);             
            } catch (error) {
                
            }
         
        },			
        beforeSend: function () {
            // jQuery(".loader").show();
        }
        });
}

function confirmar_modificar(){

    jQuery("#BtnConfirmarModificar").hide();
 
    var localizador      = jQuery("#Localizador").val();
    var pago_instalacion = jQuery("#pago_instalacion").val();

    var arrTarifasNuevo    = new Array();
    var arrTarifasOriginal = new Array();
    var arrTarifasId       = new Array();

    total  = 0;
    valido = true;
    jQuery('input[name^="tarifas"]').each(function () {
        if (pago_instalacion == 0 && parseInt(jQuery(this).val()) > parseInt(jQuery(this).attr("data-original"))) {
            jQuery("#ValidarModificar").html('<label class="error">' + modificar["disminuir"] + '</label>');
            jQuery("#ValidarModificar").fadeIn("slow");
            valido = false;     
        } else {
            total += jQuery(this).val();
            arrTarifasNuevo.push(jQuery(this).val());
            arrTarifasOriginal.push(jQuery(this).attr("data-original"));
            arrTarifasId.push(jQuery(this).attr("data-id"));
        }
    });

    if (jQuery("#tipoModificacion").val() == "plazas") {    
        if (total == 0 && valido) {
            jQuery("#ValidarModificar").html('<label class="error"> El número de plazas no puede ser "0", si lo desea puede ir a "Cancelar Visitas"</label>');
            jQuery("#ValidarModificar").fadeIn("slow");
            valido = false;
        }
    }

    var fechaId                 = jQuery("#FechaAnterior").val();
    var fechaIdOriginal         = jQuery("#FechaAnterior").val();
    var salaHorarioSeleccionada = jQuery("#salaHorarioSeleccionada").val();

    if (jQuery("#tipoModificacion").val() == "fechas") {
        fechaId = jQuery("#salaHorarioSeleccionada").val();
    }

    if (fechaId == 0) {
        jQuery("#ValidarModificar").html('<label class="error"> Debe seleccionar una hora </label>');
        jQuery("#ValidarModificar").fadeIn("slow");

        valido = false;
    }

    if (jQuery("#tipoModificacion").val() == "fechas") {
        var data_hay_extras = jQuery('#hay_extras').val();
    
        if (data_hay_extras == 1 ){
            var localizador = jQuery("#Localizador").val();
            var res         = comprobacion_cambio_fecha_extra(localizador,fechaId);
    
            if(res.hay_disponibilidad_extras == 0){
                valido = false;    
                jQuery("#ValidarModificar").html('<label class="error"> No hay extras disponibles en este horario </label>');
                jQuery("#ValidarModificar").fadeIn("slow");        
            }
        }
    }

    if (valido) {
        var url_validacion = "modificar_plazas_api.php";

        if (jQuery("#tipoModificacion").val() == "fechas") {
            url_validacion = "modificar_fechas_api.php";
        }

        jQuery("#ValidarPlazas").html("");
        jQuery
            .ajax({
                type : "POST",
                url  : "//" + location.host + "/wp-content/plugins/visitas/modules/visitas/reservas/ajax/" + url_validacion,
                data : {
                    localizador             : localizador,
                    arrTarifasNuevo         : arrTarifasNuevo,
                    arrTarifasOriginal      : arrTarifasOriginal,
                    arrTarifasId            : arrTarifasId,
                    fechaId                 : fechaId,
                    fechaIdOriginal         : fechaIdOriginal,
                    pago_instalacion        : pago_instalacion,
                    salaHorarioSeleccionada : salaHorarioSeleccionada,
                },
                cache: false,
                success: function (response) {             
                    
                    cargar_solo_cabecera(localizador);
                    jQuery("#DivCarritoResumen").show();
                    jQuery("#DivCarritoResumenConfirmar").hide();
                    jQuery("#DivResumenModificacion").html(response);
                    jQuery("#DivResumenModificacion").show();
                    jQuery("#DivSteps").hide();

                    // Movemos la capa de reembolos a su ubicacion final
                    if(pago_instalacion == 0){
                        jQuery("#informacion_reembolso").appendTo("#informacion_reembolso_modificar");
                        jQuery("#informacion_reembolso_modificar").show();           
                    }else{
                        jQuery("#informacion_reembolso_modificar").hide();
                        jQuery("#informacion_reembolso").hide();
                    }
                    if (jQuery("#tipoModificacion").val() == "fechas") {
                        jQuery("#informacion_reembolso_modificar").hide();
                    }
                    
                    window.scrollTo(0,0);
                    jQuery(".loader").hide();
                },
                beforeSend: function () {
                    jQuery(".loader").show();
                },
                complete: function () {
                
                },
            });
    }
}

function comprobacion_cambio_fecha_extra(localizador, sala_horario_id ){
    var data;
    
    jQuery.ajax({
        type     : "POST",
        url      : ROOTGESTOR + "ApiExtrasV2/comprobacion_cambio_fecha_extra",  
        async    : false,   		
        data     : JSON.stringify({    
            localizador,
            sala_horario_id            
        }),
        success: function (response) {
            data = JSON.parse(response); 
          
        
        },			
        beforeSend: function () {
            // jQuery(".loader").show();
        }
    });

    return data;    
}

function comprobacion_reduccion_plazas(localizador, plazas_adulto ){
    var data;
    
    jQuery.ajax({
        type     : "POST",
        url      : ROOTGESTOR + "ApiExtrasV2/comprobacion_reduccion_plazas",  
        async    : false,   		
        data     : JSON.stringify({    
            localizador,
            plazas_adulto            
        }),
        success: function (response) {
            data = JSON.parse(response);
        },			
        beforeSend: function () {
            // jQuery(".loader").show();
        }
    });

    return data;    
}
