
// -----------------------------------------------
//
// Funciones para el calendario que utiliza select
//
// -----------------------------------------------

// Inicialización de variables globales

var flag_verificando_fechas = false;



// ------------------------------------------------------------------------------
// función duracionMes
//
// Nos devuelve cuantos dias tiene determinado mes, pasándole número de mes y año
// ------------------------------------------------------------------------------

function duracionMes(mes, anyo) {

	if ((anyo % 4 == 0) || (anyo % 100 == 0) || (anyo % 400 == 0)) {
		febrero = 29;
	} else {
		febrero = 28;
	}

	meses = new Array(12)
	meses[1] = 31;
	meses[2] = febrero;
	meses[3] = 31;
	meses[4] = 30;
	meses[5] = 31;
	meses[6] = 30;
	meses[7] = 31;
	meses[8] = 31,
	meses[9] = 30;
	meses[10] = 31;
	meses[11] = 30;
	meses[12] = 31;
	
	return meses[mes];

}

// ------------------------------------------------------------------------------
// función verificarDiaSelect
//
// ------------------------------------------------------------------------------

function verificarDiaSelect(formulario, salida_o_llegada) {

	asignarFechas (formulario);
	
//alert("Fecha 1 hidden " + eval ("document.forms." + formulario + ".FechaLlegada.value") + " - Fecha 2 hidden " + eval ("document.forms." + formulario + ".FechaSalida.value"));

	if (flag_verificando_fechas) {
	
		// si estamos verificando fechas evitamos que los movimientos que hagamos de momento se verifiquen a su vez
		
	} else {
		flag_verificando_fechas = true;

		if (llegadaEsMenorQueSalida(formulario)) {

			
			if (salida_o_llegada == "dia_fecha_inicio") {


			}

		} else {
		
			if (salida_o_llegada == "dia_fecha_fin") {

				alert(FECHA_SALIDA_POSTERIOR_LLEGADA);
			}
			
			ajustarFechaDeSalida(formulario);
			
		}
	}

flag_verificando_fechas = false;
}

// ------------------------------------------------------------------------------
// función ajustarFechaDeSalida
//
// Esta función es para asignar la fecha de salida al dia siguiente de la fecha de llegada
// ------------------------------------------------------------------------------

function ajustarFechaDeSalida (formulario) {

	var fecha_llegada_ms = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaLlegada.value")));
	var fecha_salida_ms = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaSalida.value")));
	
	fecha_salida_ms = sumarDias(fecha_llegada_ms, 1);
	
	fecha_aux = new Date();
	
	fecha_aux.setTime(fecha_salida_ms);

	fecha_aux_cadena = fechaACadena(fecha_aux);
	
	// Escribimos la fecha en su campo hidden
	
	eval ("document.forms." + formulario + ".FechaSalida.value='" + fecha_aux_cadena + "'");
	
	sincronizarSelects(formulario);
}



// -----------------------------------------

function verificarMesSelect(formulario, salida_o_llegada) {

	asignarFechas (formulario);

	flag_verificando_fechas = true;

ajustarNumeroDeDias(formulario, salida_o_llegada);

	if (llegadaEsMenorQueSalida(formulario)) {

		// Si la fecha de llegada es menor que la fecha de salida no hacemos modificaciones en el calendario

		if (salida_o_llegada == "mes_fecha_inicio") {

		}

	} else {

		if (salida_o_llegada == "mes_fecha_fin") {
			alert(FECHA_SALIDA_POSTERIOR_LLEGADA);
		}
		
		ajustarFechaDeSalida(formulario);

	}

flag_verificando_fechas = false;
}

// -----------------------------------------
// function ajustarNumeroDeDias

function ajustarNumeroDeDias(formulario, salida_o_llegada) {

var mesyano = eval ("document.forms." + formulario + "." + salida_o_llegada + ".value");
var mes = parseFloat(mesyano.substr(0,2));
var anyo = parseFloat(mesyano.substr(3,4));

var numero_de_dias = duracionMes(mes, anyo);

// alert("mes: " + mes + " año: " + anyo + " duracion: " + numero_de_dias);

	eval("document.forms." + formulario + ".dia_fecha_inicio.length=" + numero_de_dias + ";");

	for (i = 0; i < numero_de_dias; i++) {

		j = i + 1;
		if (j < 10) j = "0" + j;

		eval("document.forms." + formulario + ".dia_fecha_inicio.options[" + i + "].value='" + j + "';");
		eval("document.forms." + formulario + ".dia_fecha_inicio.options[" + i + "].text='" + j + "';");

	}

//alert(eval("document.forms." + formulario + ".dia_fecha_inicio.options[3].value"));

}


// -----------------------------------------

function asignarFechas (formulario) {
	// Esta función asigna los valores de los formularios a las variables ocultas donde se almacenan las fechas

	dia_lle = eval ("document.forms." + formulario + ".dia_fecha_inicio.value");
	mes_lle = eval ("document.forms." + formulario + ".mes_fecha_inicio.value");
	dia_sal = eval ("document.forms." + formulario + ".dia_fecha_fin.value");
	mes_sal = eval ("document.forms." + formulario + ".mes_fecha_fin.value");

	eval ("document.forms." + formulario + ".FechaLlegada.value='" + dia_lle + "/" + mes_lle + "'");
	eval ("document.forms." + formulario + ".FechaSalida.value='" + dia_sal + "/" + mes_sal + "'");
}

// -----------------------------------------

function llegadaEsMenorQueSalida(formulario) {
	
	var fecha_llegada = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaLlegada.value")));
	var fecha_salida = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaSalida.value")));

	if (fecha_llegada >= fecha_salida) {
		return false;
	} else {
		return true;
	}
}

// -----------------------------------------

// Esta funcion suma un numero determinado de dias a una fecha en milisegundos

function sumarDias (fecha_en_ms, dias) {

	fecha_aux = fecha_en_ms + (86400000 * dias);

	return fecha_aux;
}


// -----------------------------------------

// Esta función es para asignar la fecha de salida al dia siguiente de la fecha de llegada

function ajustarFechaDeSalida (formulario) {

	var fecha_llegada_ms = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaLlegada.value")));
	var fecha_salida_ms = Date.parse(cadenaAFecha(eval ("document.forms." + formulario + ".FechaSalida.value")));
	
	fecha_salida_ms = sumarDias(fecha_llegada_ms, 1);
	
	fecha_aux = new Date();
	
	fecha_aux.setTime(fecha_salida_ms);

	fecha_aux_cadena = fechaACadena(fecha_aux);
	
	// Escribimos la fecha en su campo hidden
	
	eval ("document.forms." + formulario + ".FechaSalida.value='" + fecha_aux_cadena + "'");
	
	sincronizarSelects(formulario);
}

// -----------------------------------------

// Esta función sincroniza los combo select con los valores de las fechas almacenadas en los campos hidden
// (Los hidden sobreescriben a los select)

function sincronizarSelects(formulario) {

	fecha_ini_aux = eval ("document.forms." + formulario + ".FechaLlegada.value");
	fecha_fin_aux = eval ("document.forms." + formulario + ".FechaSalida.value");

	dia_ini_aux = fecha_ini_aux.substr(0,2);
	mes_ini_aux = fecha_ini_aux.substr(3,7);

	dia_fin_aux = fecha_fin_aux.substr(0,2);
	mes_fin_aux = fecha_fin_aux.substr(3,7);

	eval ("document.forms." + formulario + ".dia_fecha_inicio.value='" + dia_ini_aux + "'");
	eval ("document.forms." + formulario + ".mes_fecha_inicio.value='" + mes_ini_aux + "'");

	eval ("document.forms." + formulario + ".dia_fecha_fin.value='" + dia_fin_aux + "'");
	eval ("document.forms." + formulario + ".mes_fecha_fin.value='" + mes_fin_aux + "'");
}

// -----------------------------------------

// Esta funcion convierte una cadena con fecha en formato dd/mm/aaaa a una variable de fecha 

function cadenaAFecha (fecha) {

	dia = parseFloat(fecha.substr(0,2));
	mes = parseFloat(fecha.substr(3,2)) - 1; // Los meses van de 0 a 11. Hay que restar 1 para "traducir" la fecha
	anyo = parseFloat(fecha.substr(6,4));

	fecha_aux = new Date(anyo, mes, dia);

	return fecha_aux;
}

// -----------------------------------------

// Esta funcion convierte una variable de fecha en una cadena con formato dd/mm/aaaa

function fechaACadena (fecha) {

	dia = parseFloat(fecha.getDate());
	if (dia < 10) dia = "0" + dia;
	mes = parseFloat(fecha.getMonth() + 1);
	if (mes < 10) mes = "0" + mes;
	anyo = parseFloat(fecha.getFullYear());

	fecha_aux = dia + "/" + mes + "/" + anyo;

	return fecha_aux;
}

