// 2 Noviembre del 2001
// autor: Miguel Ángel Buitrago Ramírez
// LIBRERIA JS PARA CONTROL DE SELECT

/*  Variables globales necesarios a incluir en la página principal
var rangoAnios = 3;
var anioActual = new Date().getYear();
var mesActual = new Date().getMonth()+1;
var diaActual = new Date().getDate();
var anioInicial = anioActual;
var anioFinal = anioActual+rangoAnios;

Además hay que añadir una llamada a la función 'inicio() para crear e inicializar las cajas de selección.
*/
var diasMes = [31,28,31,30,31,30,31,31,30,31,30,31];
var nombreMes = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];

		
function anioBisiesto(anioParametro) {
	if (anioParametro % 4 == 0) {
		return true;
	}	
	else { return false }			
}
		
function construirMes(Object,mesActual) {
	// Formación de la lista de text y valores para Meses
	indiceSeleccionado = 0;
	for (i=0;i<nombreMes.length;i++) {
		Object.options[Object.options.length]=new Option(nombreMes[i],i+1);
		if (i+1==mesActual)
			indiceSeleccionado = i;
	}
	// Preselección
	Object.options[indiceSeleccionado].selected;
}

function construirAnio(Object,inicio,fin,anioActual) {
	// Formación de la lista de text y valores para los años
	indiceAnio=0;
	indiceSeleccionado = 0;
	for (i=inicio;i<=fin;i++) {
		Object.options[Object.options.length]=new Option(i,i); 
		if (i==anioActual)
			indiceSeleccionado = indiceAnio;
		indiceAnio++;
	}
	// Preselección
	Object.options[indiceSeleccionado].selected;
}

function construirDia(Object,mesActual,anioActual,diaActual) {
// mesActual recibido es el ordinal correcto del mes
	var opcionesDia = new Array();
	
	inicio = 1;
	fin = diasMes[mesActual-1];
	
	// Se comprueba si el año es bisiesto, en caso de que se pase febrero como mes 
	if (anioBisiesto(anioActual) && mesActual == 2) {
		fin++; // En caso de ser bisiesto a febrero se le asigna un día más (29)
	}
	indiceDia = 0;
	for(i=inicio;i<=fin;i++) {
		Object.options[Object.options.length]=new Option(i,i);
		if (i+1==diaActual)
			indiceSeleccionado = i;
		indiceDia++;
	}
	// Preselección
	Object.options[indiceSeleccionado].selected;
}

function validarFecha(ObjectDia,ObjectMes,ObjectAnio) {
// Se supone el funcionamiento de esta función de validar sólo para el caso
// de que cambien los meses o los años
	diaSeleccionadoPrevio = ObjectDia.options.selectedIndex;
	// diaSeleccionado = diaSeleccionadoPrevio;
	diaUltimoPrevio = ObjectDia.options[ObjectDia.options.length-1].value;
	diaUltimo = diasMes[ObjectMes.options.selectedIndex];
	
	// Se comprueba si el año es bisiesto, en caso de que se pase febrero como mes 
	if (anioBisiesto(ObjectAnio.options[ObjectAnio.options.selectedIndex].value) && ObjectMes.options[ObjectMes.selectedIndex].value == 2) {
		diaUltimo++; // En caso de ser bisiesto a febrero se le asigna un día más (29)
	}
	// Sólo se reconstruye el select si cambia su morfología
	// a) Hay que acortar
	if (diaUltimo<diaUltimoPrevio) {
		for (i=diaUltimoPrevio-1;i>=diaUltimo;i--) {
			ObjectDia.options.remove(i);
		}
	}
	// b) Hay que añadir
	else if (diaUltimo>diaUltimoPrevio) {
		for (i=diaUltimoPrevio;i<diaUltimo;i++) {
			valor = i;
			valor++;
			eval("ObjectDia.options["+i+"] = new Option('"+valor+"',"+valor+");");
		}
	} 
	// Se selecciona el día del mes si el que había antes era superior
	if (diaSeleccionadoPrevio>=ObjectDia.options.length) {
		ObjectDia.options[ObjectDia.options.length-1].selected = true;
	}
}

function inicioFecha(ObjectDia,ObjectMes,ObjectAnio,diaActual,mesActual,anioActual,anioInicial,anioFinal) {
	// 0. Destrucción por 'si acaso'
	destruirSelect(ObjectDia,0);
	destruirSelect(ObjectMes,0);
	destruirSelect(ObjectAnio,0);
	// 1. Construcción de los select
	construirMes(ObjectMes);
	construirAnio(ObjectAnio,anioInicial,anioFinal);
	construirDia(ObjectDia,mesActual,anioActual);
	// 2. Preselección
	ObjectDia.options[diaActual-1].selected = true;
	ObjectMes.options[mesActual-1].selected = true;
	for (i=0;i<ObjectAnio.options.length;i++) {
		if (ObjectAnio.options[i].value==anioActual) {
			ObjectAnio.options[i].selected = true;
			break;
		}
	}
}

function validarFechaOp(ObjectDia,ObjectMes,ObjectAnio,init) {
// Se supone el funcionamiento de esta función de validar sólo para el caso
// de que cambien los meses o los años
	diaSeleccionadoPrevio = ObjectDia.options.selectedIndex;
	// diaSeleccionado = diaSeleccionadoPrevio;
	diaUltimoPrevio = ObjectDia.options[ObjectDia.options.length-1].value;
	diaUltimo = diasMes[ObjectMes.options.selectedIndex-init];
	
	// Se comprueba si el año es bisiesto, en caso de que se pase febrero como mes 
	if (anioBisiesto(ObjectAnio.options[ObjectAnio.options.selectedIndex].value) && ObjectMes.options[ObjectMes.selectedIndex].value == 2) {
		diaUltimo++; // En caso de ser bisiesto a febrero se le asigna un día más (29)
	}
	// Sólo se reconstruye el select si cambia su morfología
	// a) Hay que acortar
	if (diaUltimo<diaUltimoPrevio) {
		for (i=diaUltimoPrevio-1;i>=diaUltimo;i--) {
			ObjectDia.options.remove(i+init);
		}
	}
	// b) Hay que añadir
	else if (diaUltimo>diaUltimoPrevio) {
		for (i=diaUltimoPrevio;i<diaUltimo;i++) {
			valor = i;
			valor++;
			eval("ObjectDia.options["+valor+"] = new Option('"+valor+"',"+valor+");");
		}
	} 
	// Se selecciona el día del mes si el que había antes era superior
	if (diaSeleccionadoPrevio>=ObjectDia.options.length) {
		ObjectDia.options[ObjectDia.options.length-1].selected = true;
	}
}

function inicioFechaOp(ObjectDia,ObjectMes,ObjectAnio,diaActual,mesActual,anioActual,anioInicial,anioFinal) {
	// 0. Destrucción por 'si acaso'
	destruirSelect(ObjectDia,1);
	destruirSelect(ObjectMes,1);
	destruirSelect(ObjectAnio,1);
	// 1. Construcción de los select
	construirMes(ObjectMes);
	construirAnio(ObjectAnio,anioInicial,anioFinal);
	if (ObjectAnio.selectedIndex>0 && ObjectMes.selectedIndex>0)
		construirDia(ObjectDia,mesActual,anioActual);
	else
		construirDia(ObjectDia,1,2);
	// 2. Preselección
	//ObjectDia.options[diaActual].selected = true;
	//ObjectMes.options[mesActual].selected = true;
	for (i=0;i<ObjectAnio.options.length;i++) {
		if (ObjectAnio.options[i].value==anioActual) {
			ObjectAnio.options[i].selected = true;
			break;
		}
	}
}
