// Tomando una fecha en formato dd/mm/aa pasamos dichos datos dos combos, uno que muestra el día
//	y otro que muestra el mes y el año
function MostrarFechaEnCombos(sFecha, idComboDia, idComboMes){
	var dFecha = GenerarFechaDesdeFormatoEsp(sFecha);
	document.getElementById(idComboMes).value=(dFecha.getMonth()+1) + '/' + dFecha.getFullYear();
	document.getElementById(idComboDia).value=dFecha.getDate();
}

// Actualizamos a partir de 2 combos, uno con el valor del día y otro con el de 'mes/año'
//	un cuadro de texto que contendrá la fecha completa
function ActualizarFechaCombosEnTexto(idDia, idMesAnio, idTxtFecha){
	document.getElementById(idTxtFecha).value = document.getElementById(idDia).value + '/' + document.getElementById(idMesAnio).value;
}

// Actualizamos a partir de la fecha de entrada el valor que deberá tomar la fecha de salida según
//	el número de noches que se le indiquen
function ActualizarTxtFechaSalida(sFechaEntrada, iNumNoches, idTxtFechaSalida){
	// La función getTime nos devuelve un número de milisegundos, de modo que si a un valor dado le sumamos
	//	el número de milisegundossegundos que contiene un día y una hora obtendremos el día siguiente. 
	//     (lo de sumar la hora extra es por evitar problemas en fechas de cambio horario, ya que algun dia tendrá 25 horas)
	// De modo que en este caso multiplicaremos el numero de segundos de 1 día por el total de noches para asi al sumarlo
	//	obtener los segundos que corresponderían a la fecha de salida
	var dFechaSalida = new Date(GenerarFechaDesdeFormatoEsp(sFechaEntrada).getTime() + (iNumNoches * 86400000 + 360000));
	document.getElementById(idTxtFechaSalida).value = dFechaSalida.getDate() + '/' + (dFechaSalida.getMonth()+1) + '/' + dFechaSalida.getFullYear();
}

// Cargamos los días reservables como fecha de entrada que corresponden al mes indicado
function CargarComboDias(idCbDias, mes, anio, fFuncionComprobacionValidez, bInicializar, LimiteInferior) {
	var cbDias = document.getElementById(idCbDias);
	var ValorAux;
	var indiceSeleccionado = 0;
	var NumeroDiasMes = ObtenerNumeroDiasMes(mes, anio);
	var DiaSeleccionado = new Date().getDate();

	// Si no se nos ha indicado un limite inderior establecemos que es el primer dia de mes
	if (LimiteInferior==0) LimiteInferior=1;
	
	// Si no se trata de una inicialización del combo vemos que día estaba deleccionado anteriormente
	if (bInicializar == false) DiaSeleccionado = cbDias.value;

	cbDias.options.length = 0;		// Eliminamos todos los días del combo

	// Añadimos días desde el Limite Inferior indicado hasta el número de días del mes
	for (i = LimiteInferior; i <= NumeroDiasMes; i++) {
		if (eval(fFuncionComprobacionValidez +'(new Date(anio, mes-1, i), anio, mes-1, i)')==false){
			var nuevoOpt = document.createElement('option');
			nuevoOpt.text = i;
			nuevoOpt.value = i;

			try { 
				cbDias.add(nuevoOpt, null);	// Se añade el elemento en última posición. estandar W3C
			}
			catch(ex) {
				cbDias.add(nuevoOpt); // para el IE
			}
			// Si el valor del día actual se corresponde con el que debemos seleccionar nos guardamos su índice
			if (i==DiaSeleccionado) indiceSeleccionado=cbDias.length-1;
		}
	}
	// Si se ha encontrado un día que deba dejarse seleccionado, lo hacemos.
	if (indiceSeleccionado!=0) cbDias.selectedIndex=indiceSeleccionado;
}

// Cargamos el combo de meses de salida válidos para la actual fecha de entrada y condiciones de noches reservables
function CargarComboMesSalida(idCbMes, dFechaEntrada, numNochesReservables) {
	var cbMes = document.getElementById(idCbMes);

	// Generamos la fecha del dia siguiente al inicio de la reserva y de finalizacion de rango reservable para obtener los meses a los que afecta
	//	Sumamos los milisegundos de un día más una hora extra para evitar problemas con los cambios de horario de verano/invierno
	var dFechaInicio = new Date(dFechaEntrada.getTime() + (90000000));
	var dFechaFin = new Date(dFechaEntrada.getTime() + (86400000* numNochesReservables) + 3600000);

	var AniosDiferencia = dFechaFin.getFullYear() - dFechaInicio.getFullYear();
	var DiferenciaMeses = dFechaFin.getMonth() - dFechaInicio.getMonth();
	
	// La diferencia total en meses es la 12 por la diferencia de años + los meses de diferencia
	DiferenciaMeses = 12 * AniosDiferencia + DiferenciaMeses;
	
	cbMes.options.length = 0;		// Eliminamos todos los días del combo

	// Necesitamos saber el número de días del mes actual para poder sumar los dias correspondientes para pasar al siguiente
	//	Inicializamos las variables auxiliares que usaremos a los valores de la fecha de inicio del rango seleccionable
	var MesAux = dFechaInicio.getMonth()+1;
	var AnioAux = dFechaInicio.getFullYear();
	
	// Recorremos fechas desde el día siguiente a la reserva hasta el final del rango reservable, saltando de
	//	mes en mes para mostrarlos en el combo
	for (i = 0; i <= DiferenciaMeses; i++) {
		// Generamos una fecha correspondiente al mes que queremos añadir al combo 
		// 	cuando no sea la primera fecha del rango reservable
		if (i==0){
			// Cogemos el primer día del mes correspondiente a la fecha de inicio. 
			// 	Asi nos aseguramos de que cuando posteriormente sumemos el número de días del mes actual acabaremos en el primer día del
			// 	siguiente mes. De lo contrario por ejemplo si estuvieramos en el 30 de Enero al sumarle 31 días no acabaríamos
			// 	en Febrero sino en Marzo, ya que Febrero tiene 28/29 días.
			var dFechaAux = new Date(dFechaInicio.getFullYear(), dFechaInicio.getMonth(), 1);
		}
		else{
			var dFechaAux = new Date(dFechaAux.getTime() + (ObtenerNumeroDiasMes(MesAux, AnioAux) * 86400000) + 3600000);
			MesAux = dFechaAux.getMonth()+1;
			AnioAux = dFechaAux.getFullYear();
		}
		
		// Generamos el nuevo Option y lo añadimos al Select
		var nuevoOpt = document.createElement('option');
		nuevoOpt.text = ObtenerNombreCortoMes(MesAux) + ' ' + AnioAux;
		nuevoOpt.value = MesAux + '/' + AnioAux;

		try { 
			cbMes.add(nuevoOpt, null);			// Se añade el elemento en última posición. estandar W3C
		}
		catch(ex) {
			cbMes.add(nuevoOpt); // para el IE
		}
	}
}

/* A PARTIR DE AQUI ESTAN LAS FUNCIONES QUE CONTROLAN LOS EVENTOS */
function CambioDiaEntrada(idDiaEntrada, idMesAnioEntrada, idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaSalida){
	ActualizarFechaCombosEnTexto(idDiaEntrada, idMesAnioEntrada, idFechaEntrada);
	ActualizarTxtFechaSalida(document.getElementById(idFechaEntrada).value, document.getElementById(idNumNoches).value, idFechaSalida); 

	// Hay que coger la fecha de salida y sacar sus datos de mes y año
	var dFechaSalida = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaSalida).value);
	
	CargarComboMesSalida(idMesAnioSalida, GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaEntrada).value), document.getElementById(idNumNoches).length);
	
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 
	MostrarFechaEnCombos(document.getElementById(idFechaSalida).value, idDiaSalida, idMesAnioSalida);	
}

function CambioMesEntrada(idDiaEntrada, idMesAnioEntrada, idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaEntrada, idFuncionValidezFechaSalida){
	// Hay que coger la nueva fecha de entrada y sacar sus datos de mes y año. 
	// Ponemos como día el primero de mes para evitar problemas de que se este a 31 
	// y al cambiar de mes ese dia no exista y nos genere una fecha de otro mes
	var dFechaEntrada = GenerarFechaDesdeFormatoEsp('01/' + document.getElementById(idMesAnioEntrada).value);

	CargarComboDias(idDiaEntrada, dFechaEntrada.getMonth()+1, dFechaEntrada.getFullYear(), idFuncionValidezFechaEntrada, false, 1);
	ActualizarFechaCombosEnTexto(idDiaEntrada, idMesAnioEntrada, idFechaEntrada);

	ActualizarTxtFechaSalida(document.getElementById(idFechaEntrada).value, document.getElementById(idNumNoches).value, idFechaSalida);

	// Hay que coger la fecha de salida y sacar sus datos de mes y año
	var dFechaSalida = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaSalida).value);
	
	CargarComboMesSalida(idMesAnioSalida, GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaEntrada).value), document.getElementById(idNumNoches).length);
	
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 

	MostrarFechaEnCombos(document.getElementById(idFechaSalida).value, idDiaSalida, idMesAnioSalida);	
}

function CambioFechaEntrada(idDiaEntrada, idMesAnioEntrada, idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaEntrada, idFuncionValidezFechaSalida){
	// Hay que coger la fecha de entrada y sacar sus datos de mes y año
	var dFechaEntrada = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaEntrada).value);

	CargarComboDias(idDiaEntrada, dFechaEntrada.getMonth()+1, dFechaEntrada.getFullYear(), idFuncionValidezFechaEntrada, false, 1);
	MostrarFechaEnCombos(document.getElementById(idFechaEntrada).value, idDiaEntrada, idMesAnioEntrada);
	ActualizarTxtFechaSalida(document.getElementById(idFechaEntrada).value, document.getElementById(idNumNoches).value, idFechaSalida);

	// Hay que coger la fecha de salida y sacar sus datos de mes y año
	var dFechaSalida = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaSalida).value);
	
	CargarComboMesSalida(idMesAnioSalida, GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaEntrada).value), document.getElementById(idNumNoches).length);
	
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 

	MostrarFechaEnCombos(document.getElementById(idFechaSalida).value, idDiaSalida, idMesAnioSalida);	
}

function CambioNumeroNoches(idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaSalida){
	ActualizarTxtFechaSalida(document.getElementById(idFechaEntrada).value, document.getElementById(idNumNoches).value, idFechaSalida);

	// Hay que coger la fecha de salida y sacar sus datos de mes y año
	var dFechaSalida = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaSalida).value);
	
	CargarComboMesSalida(idMesAnioSalida, GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaEntrada).value), document.getElementById(idNumNoches).length);
	
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 

	MostrarFechaEnCombos(document.getElementById(idFechaSalida).value, idDiaSalida, idMesAnioSalida);
}

function CambioDiaSalida(idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida){
	ActualizarFechaCombosEnTexto(idDiaSalida, idMesAnioSalida, idFechaSalida);

	// Mostramos el número de noches de diferencia que hay entre la entrada y la salida
	document.getElementById(idNumNoches).value=CalcularNoches(document.getElementById(idFechaEntrada).value, document.getElementById(idFechaSalida).value);	
}

function CambioMesSalida(idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaSalida){
	// Hay que coger los nuevos datos de mes y año de salida generados al cambiar el valor del combo de mes
	//	para cargar los días disponibles con esos datos en el combo de dias de salida
	var dFechaSalida = GenerarFechaDesdeFormatoEsp('01/' + document.getElementById(idMesAnioSalida).value);
	
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 

	ActualizarFechaCombosEnTexto(idDiaSalida, idMesAnioSalida, idFechaSalida);

	// Mostramos el número de noches de diferencia que hay entre la entrada y la salida
	document.getElementById(idNumNoches).value=CalcularNoches(document.getElementById(idFechaEntrada).value, document.getElementById(idFechaSalida).value);	
}

function CambioFechaSalida(idFechaEntrada, idNumNoches, idDiaSalida, idMesAnioSalida, idFechaSalida, idFuncionValidezFechaSalida){
	// Mostramos el número de noches de diferencia que hay entre la entrada y la salida
	document.getElementById(idNumNoches).value=CalcularNoches(document.getElementById(idFechaEntrada).value, document.getElementById(idFechaSalida).value);	

	// Hay que coger la fecha de salida y sacar sus datos de mes y año
	var dFechaSalida = GenerarFechaDesdeFormatoEsp(document.getElementById(idFechaSalida).value);
	
	// Solo necesitamos cargar los nuevos dias correspondientes al nuevo mes de salida, ya que los meses disponibles no varían al cambiar la fecha de salida
	CargarComboDias(idDiaSalida, dFechaSalida.getMonth()+1, dFechaSalida.getFullYear(), idFuncionValidezFechaSalida, false, 1); 
	MostrarFechaEnCombos(document.getElementById(idFechaSalida).value, idDiaSalida, idMesAnioSalida);	
}

function CambioImagenOcupacion(NumeroAdultos, NumeroNinios, idImagen, sRutaImagen){
	// Asignamos la nueva imagen en funcion del numero de adultos y niños
	document.getElementById(idImagen).src=sRutaImagen + 'OcupacionHab_' + NumeroAdultos + '_' + NumeroNinios + '.gif';
}

function CambioNinios(idComboNinios, idComboAdultos, idComboEdad1, idComboEdad2, idImagenOcupacion, sRutaImagen){
	// Cambiamos la imagen para que se adapte al nuevo número de niños y adultos
	CambioImagenOcupacion(document.getElementById(idComboAdultos).value, document.getElementById(idComboNinios).value, idImagenOcupacion, sRutaImagen);
	
	// Habilitamos o deshabilitamos la selección de edades de niños según el número de ellos que se indiquen
	if (document.getElementById(idComboNinios).value==2)
		document.getElementById(idComboEdad2).disabled=false;
	else
		document.getElementById(idComboEdad2).disabled=true;
	
	if (document.getElementById(idComboNinios).value==0)
		document.getElementById(idComboEdad1).disabled=true;
	else
		document.getElementById(idComboEdad1).disabled=false;
}
