//Funciones para limpiar espacios en blanco
function trim(str, chars) 
{
	return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//Función para reemplazar todas las apariciones de una cadena
function replaceAll(text, busca, reemplaza)
{
	  while (text.toString().indexOf(busca) != -1)
	      text = text.toString().replace(busca,reemplaza);
	  return text;
}

//Función para calcular el contenido de los combos al seleccionar un hotel
//comboHotel: listado de hoteles
function activaHotel(comboHotel)
{
	hotel = comboHotel.value;
	comboHabitaciones = document.getElementById("sel_num_habitaciones");
	
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "activaHotel", datos: hotel },
		function(data)
		{
			$('#bloqueHabitaciones').replaceWith(data);
			comboHabitaciones.value = 1;
		}
	);
}

//Función para calcular el contenido de los combos al seleccionar el número de habitaciones
//comboHabitaciones: listado de habitaciones
function cambiaNumHabitaciones(comboHabitaciones)
{
	datos = comboHabitaciones.value ;

	$.post(
		"./include/funcionesAjax.php",
		{ accion: "cambiaNumHabitaciones", datos: datos },
		function(data)
		{
			if (data.length > 0)
			{
				if (data[0] != '@')
					$('#bloqueHabitaciones').replaceWith(data);
				else
					alert(data.substring(1, data.length));
			}
		}
	);
}

//Función para calcular el contenido de los combos en una selección de habitación para un hotel
//select: combo que hace la llamada
function cambiaTipoHabitacion(select)
{
	tipo = select.value;
	id = select.name;
	datos = tipo + '/' + id;
	
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "cambiaTipoHabitacion", datos: datos },
		function(data)
		{
			if (data.length > 0)
			{
				//La funcion devuelve "idcombos@comboCapAdultos@comboCapNiños@comboCapCunas"
				combos = data.split('@');
				id = combos[0]; //id de los selects
				comboAD = combos[1]; //html del combo AD
				comboNI = combos[2];
				comboCU = combos[3];
				
				objComboAD = '#sel_adultos_h' + trim(String(id));
				objComboNI = '#sel_ninos_h' + trim(String(id));
				objComboCU = '#sel_cunas_h' + trim(String(id));

				$(objComboAD).replaceWith(comboAD);
				$(objComboNI).replaceWith(comboNI);
				$(objComboCU).replaceWith(comboCU);
			}
		}
	);
}

//Función para calcular el contenido de los combos al seleccionar un hotel con máscara
//comboHotel: listado de hoteles
function activaHotelMascara(comboHotel)
{
	hotel = comboHotel.value;
	comboHabitaciones = document.getElementById("sel_num_habitaciones");

	$.post(
		"./include/funcionesAjax.php",
		{ accion: "activaHotelMascara", datos: hotel },
		function(data)
		{
			$('#mascaraHabitaciones').replaceWith(data);
			comboHabitaciones.value = 1;
		}
	);
}

//Función para calcular el contenido de los combos al seleccionar el número de habitaciones con máscara
//comboHabitaciones: listado de habitaciones
function cambiaNumHabitacionesMascara(comboHabitaciones)
{
	datos = comboHabitaciones.value;

	$.post(
		"./include/funcionesAjax.php",
		{ accion: "cambiaNumHabitacionesMascara", datos: datos },
		function(data)
		{
			if (data.length > 0)
			{
				if (data[0] != '@')
					$('#mascaraHabitaciones').replaceWith(data);
				else
					alert(data.substring(1, data.length));
			}
		}
	);
}

//Función para calcular el contenido de los combos en una selección de habitación para un hotel con máscara
//select: combo que hace la llamada
//valorHotel: hotel seleccionado
//valorHabitaciones: número de habitaciones
function cambiaTipoHabitacionMascara(select)
{
	tipo = select.value;
	id = select.name;
	datos = tipo + '/' + id;
	
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "cambiaTipoHabitacionMascara", datos: datos },
		function(data)
		{
			if (data.length > 0)
			{
				//La funcion devuelve "idcombos@comboCapAdultos@comboCapNiños@comboCapCunas"
				combos = data.split('@');
				id = combos[0]; //id de los selects
				comboAD = combos[1]; //html del combo AD
				comboNI = combos[2];
				comboCU = combos[3];
				
				objComboAD = '#sel_adultos_h' + trim(String(id));
				objComboNI = '#sel_ninos_h' + trim(String(id));
				objComboCU = '#sel_cunas_h' + trim(String(id));
				
				$(objComboAD).replaceWith(comboAD);
				$(objComboNI).replaceWith(comboNI);
				$(objComboCU).replaceWith(comboCU);
			}
		}
	);
}

//Función para comprobar que todos los datos del paso 1 están rellenados
function compruebaPaso1()
{	
	error = 0;
	errorDatos = "";
	
	fechaEntrada = document.getElementById("datepicker1").value.split('/');
	fechaSalida = document.getElementById("datepicker2").value.split('/');
	
	fechaEntrada = new Date(fechaEntrada[2] + '/' + fechaEntrada[1] + '/' + fechaEntrada[0]);	
	fechaSalida = new Date(fechaSalida[2] + '/' + fechaSalida[1] + '/' + fechaSalida[0]);
	
	if(fechaEntrada >= fechaSalida)
	{
		error = 1;
		errorDatos = errorDatos + "1/0@";
	}
	
	if(document.getElementById('sel_hotel').selectedIndex < 1)
	{
		error = 1;
		errorDatos = errorDatos + "2/0@";
		
	}
		
	for (i = 0; i < document.getElementById('sel_num_habitaciones').value; i++)
	{
		if(document.getElementById('sel_tipo_h'+(i+1)).selectedIndex < 1)
		{
			error = 1;
			errorDatos = errorDatos + "3/" + (i+1) + "@";
		}
			
		if(document.getElementById('sel_adultos_h'+(i+1)).value < 1)
		{
			error = 1;
			errorDatos = errorDatos + "4/" + (i+1) + "@";
		}
	}
	
	if(!error)
		enviaBusqueda();
	else
	{
		$.post(
			"./include/funcionesAjax.php",
			{ accion: "compruebaPaso1", datos: errorDatos },
			function(data)
			{
				if (data.length > 0)
					alert(replaceAll(data, "<br />", "\n"));
			}
		);
	}
}

//Función para enviar los parámetros de búsqueda de disponibilidad
function enviaBusqueda()
{
	$("#envio").empty();
	$("#envio").append('<input type="hidden" name="hotel" id="hotel" value="' + document.getElementById('sel_hotel').value + '" />');
	$("#envio").append('<input type="hidden" name="numHabitaciones" id="numHabitaciones" value="' + document.getElementById('sel_num_habitaciones').value + '" />');
	$("#envio").append('<input type="hidden" name="fechaEntrada" id="fechaEntrada" value="' + document.getElementById('datepicker1').value + '" />');
	$("#envio").append('<input type="hidden" name="fechaSalida" id="fechaSalida" value="' + document.getElementById('datepicker2').value + '" />');
	$("#envio").append('<input type="hidden" name="flexibilidad" id="flexibilidad" value="' + document.getElementById('flexibilidad').checked + '" />');
	
	numHabitaciones = document.getElementById('sel_num_habitaciones').value;
	
	for(i=1;i<=numHabitaciones;i++)
	{
		comboTipo = document.getElementById('sel_tipo_h' + i);
		comboAD = document.getElementById('sel_adultos_h' + i);
		comboNI = document.getElementById('sel_ninos_h' + i);
		comboCU = document.getElementById('sel_cunas_h' + i);
		
		$("#envio").append('<input type="hidden" name="tipoHabitacion' + i + '" id="tipoHabitacion' + i + '" value="' + comboTipo.value + '" />');
		$("#envio").append('<input type="hidden" name="adultosHabitacion' + i + '" id="adultosHabitacion' + i + '" value="' + comboAD.value + '" />');
		$("#envio").append('<input type="hidden" name="ninosHabitacion' + i + '" id="ninosHabitacion' + i + '" value="' + comboNI.value + '" />');
		$("#envio").append('<input type="hidden" name="cunasHabitacion' + i + '" id="cunasHabitacion' + i + '" value="' + comboCU.value + '" />');
	}
	
	var envio = $("#envio").serialize();
	
	$.post(
	"./include/funcionesAjax.php",
	{ accion: "enviaBusqueda", datos: envio },
	function(data){
		if(data!='@'){
			document.location.href=data;
		} else {
			alert('Se ha producido un error al realizar la búsqueda');
		}
	}
	);
}

//Función para mostrar los hoteles de un filtro de búsqueda
function calculaOpciones()
{
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "calculaOpciones"},
		function(data)
		{
			if (data.length > 0)
			{
				$('#contenidoResultados').replaceWith(data);
				calculaOpcionesAlternativas();
			}
		}
	);
}

//Función para mostrar los hoteles de un filtro de búsqueda alternativos al hotel seleccionado
function calculaOpcionesAlternativas()
{
	$('#buscandoAlternativas').show();
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "calculaOpcionesAlternativas"},
		function(data)
		{
			if (data.length > 0)
			{
				$('#contenidoAlternativas').replaceWith(data);
				$('#mensajeReserva').show();
			}
			$('#buscandoAlternativas').hide();
		}
	);
}

//Función para seleccionar una oferta en concreto
function reservar(id, seleccion)
{
	seleccion = id + '/' + seleccion;
	
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "reservar", datos: seleccion },
		function(data)
		{		
			data = trim(data);
			if(data!='@'){
				document.location.href=data;			
			} 
		}
	);
}

//Función para comprobar que todos los datos del paso 3 están rellenados
function compruebaPaso3()
{	
	error = 0;
	errorDatos = "";
	
	if(document.getElementById('cmp_nombre').value.length < 3)
	{
		error = 1;
		errorDatos = errorDatos + "1@";
	}
	
	if(document.getElementById('cmp_apellido1').value.length < 3)
	{
		error = 1;
		errorDatos = errorDatos + "2@";		
	}
	
	if (document.getElementById('cmp_nif').value.length < 3)
	{
		error = 1;
		errorDatos = errorDatos + "3@";		
	}
	
	if (document.getElementById('cmp_telefono').value.length  > 20)
	{
		error = 1;
		errorDatos = errorDatos + "11@";		
	}
	
	if(!validarCorreo(document.getElementById('cmp_email').value))
	{
		error = 1;
		errorDatos = errorDatos + "4@";		
	}
	
	if(document.getElementById('cmp_cp').value.length > 20)
	{
		alert(document.getElementById('cmp_cp').value.length);
		error = 1;
		errorDatos = errorDatos + "6@";		
	}
		
	//Controlar los checks de políticas
	if(document.getElementById('cmp_acepto_politica').checked == false)
	{
		error = 1;
		errorDatos = errorDatos + "9@";		
	}
	
	if(document.getElementById('cmp_acepto_politica_cancelacion').checked == false)
	{
		error = 1;
		errorDatos = errorDatos + "10@";		
	}
	
	if(!error)
	{		
		var envio = $("#envio").serialize();
	
		$.post(
			"./include/funcionesAjax.php",
			{ accion: "enviaReserva", datos: envio },
			function(data)
			{
				data = trim(data);				
				if(data!='@')
				{
					$('#pasarelaPago').replaceWith(data);
				}
				else
					alert('Error');
			}
		);
	}
	else
	{	
		$.post(
			"./include/funcionesAjax.php",
			{ accion: "compruebaPaso3", datos: errorDatos },
			function(data)
			{
				if (data.length > 0)
					alert(replaceAll(data, "<br />", "\n"));
			}
		);
	}
}

//Función para generar el PDF con el localizador
function generaPDF()
{
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "generaPDF" },
		function(data)
		{	;			
		}
	);
}

//Función para generar el mailing para booking
function mailingBooking()
{
	$.post(
		"./include/funcionesAjax.php",
		{ accion: "mailingBooking" },
		function(data)
		{	;
		}
	);
}

//Función para calcular el número de noches de la máscara
//comboHotel: listado de hoteles
function calculaNoches()
{
	entrada = document.getElementById("datepicker1");
	salida = document.getElementById("datepicker2");
	datos = entrada.value + "@" + salida.value;

	$.post(
		"./include/funcionesAjax.php",
		{ accion: "calculaNoches", datos: datos },
		function(data)
		{
			$('#estanciaMascara').replaceWith(data);
		}
	);
}

//Función para validar un correo
function validarCorreo(valor) 
{
	if (/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/.test(valor))
		return true;
	else 
		return false;
}

