function daysInFebruary (year) {   	
    // Febrero tiene 29 dias en cualquier año divisible por 4,
    // EXCEPTO los múltiplos de 100 no divisibles por 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function makeArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 0
    } 
    return this
}

//comprueba si una fecha es correcta sin reformatearla
// Ultima modificación: Luis Saz. 10/03/2004
function checkDate(fecha){
	if (typeof fecha == "object")
		date = fecha.value;
	else
		date = eval(fecha + ".value");

	var dd   = date.substring(0,2);
	var mm   = date.substring(3,5);
	var aaaa = date.substring(6,10);
			
	return checkFecha(dd,mm,aaaa);
}

function checkFecha(dia,mes,anio) {
    var nDay;
    var nMonth;
    var nYear;
    
    if(isNaN(dia)) // Me llega el control, no el numero
    	nDay = parseInt(dia.value,10);
    else
    	nDay = dia;
    
    // compruebo que el dia sea correcto
    c = new String(nDay);
    if(c == "NaN") {
        alert("El día no es correcto.");
        return false;
    } else {
        nDay = c;
        if(nDay < 1 || nDay > 31) {
            alert("El día no es correcto.");
            return false;
        }
    }

    if(isNaN(mes)) // Me llega el control, no el numero
    	nMonth = parseInt(mes.value,10);
    else
    	nMonth = mes;
    	
    c = new String(nMonth);
    if(c == "NaN") {
        alert("El mes no es correcto.");
        return false;
    } else {
        nMonth = c;
        if(nMonth < 1 || nMonth > 12) {
            alert("El mes no es correcto.");
            return false;
        }
    }

    if(isNaN(anio)) // Me llega el control, no el numero
    	nYear = parseInt(anio.value,10);
    else
    	nYear = anio;
    	
    c = new String(nYear);
    if(c == "NaN") {
        alert("El año no es correcto.");
        return false;
    } else {
        nYear = c;
        if(nYear < 1850 || nYear > 2020) {
            alert("El año no es correcto.");
            return false;
        }
    }
		
    // compruebo que la fecha en conjunto sea correcta.
    var daysInMonth = makeArray(12);
    daysInMonth[1] = 31;
    daysInMonth[2] = 29;   // esto no es siempre cierto por lo qu habrá que hacer comprobación extra.
    daysInMonth[3] = 31;
    daysInMonth[4] = 30;
    daysInMonth[5] = 31;
    daysInMonth[6] = 30;
    daysInMonth[7] = 31;
    daysInMonth[8] = 31;
    daysInMonth[9] = 30;
    daysInMonth[10] = 31;
    daysInMonth[11] = 30;
    daysInMonth[12] = 31;

    if((nDay != "") && (nMonth != "") && (nYear != "")) {
        var intYear = parseInt(nYear,10);
        var intMonth = parseInt(nMonth,10);
        var intDay = parseInt(nDay,10);

        // capturo los días inválidos, excepto para Febrero
        if (intDay > daysInMonth[intMonth]) {
            alert("La fecha no es correcta");
            return false; 
        }

        if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) {
            alert("La fecha no es correcta");
            return false;
        }
    }
	
	
		
    return true;
}



// Ultima modificación: Luis Saz. 10/03/2004
function formatear_fecha (control)
{
	// 1.- Si es vacio, no hago nada
	// 2.- Si todos sus caracteres son digitos, formateo
	// 3.- Si tiene alguno no digito, sustituyo "/" por "blanco"
	// 4.- Si siguen sin ser digitos, mensaje de error,
	// 5.- Si no, formateo

	if (typeof control == "object")
		valor_control = control.value;
	else
		valor_control = eval(control + ".value");
	
	fecha = valor_control;
		
	if(fecha == "")
		return;
		
	// ¿Todos sus caracteres son numeros?	
	if(!fecha.match(/^(\d)+$/))
	{
		fecha = fecha.replace(/[\/]/g,""); // Quito el caracter "/"
		// Si sigue sin ser numero, aviso al usuario para que rectifique
		if(!fecha.match(/^(\d)+$/))
		{
			alert("Fecha no válida, modifíquela, por favor.");
			//selecciono el texto 
			if (typeof control == "object") control.select();
    	   	//coloco otra vez el foco 
   			if (typeof control == "object") control.focus();		
			return;
		}
	}

	fecha = "00000000" + fecha;
	
	fecha = fecha.substring(fecha.length - 8, fecha.length);

	var dd   = fecha.substring(0,2);
	var mm   = fecha.substring(2,4);
	var aaaa = fecha.substring(4,8);
			
	fecha = dd + "/" + mm + "/" + aaaa;

	// Devuelvo el nuevo valor ya formateado
	if (typeof control == "object")
		control.value = fecha;
	else
		eval(control + ".value='" + fecha + "'");
	
	return checkFecha(dd,mm,aaaa);
}

function formatear_hora (control)
{
	// 1.- Si es vacio, no hago nada
	// 2.- Si todos sus caracteres son digitos, formateo
	// 3.- Si tiene alguno no digito, sustituyo ":" por "blanco"
	// 4.- Si siguen sin ser digitos, mensaje de error,
	// 5.- Si no, formateo
	
	valor_control = eval(control + ".value");
	hora = valor_control;
	
	if(hora == "")
		return;
		
	// ¿Todos sus caracteres son numeros?	
	if(!hora.match(/^(\d)+$/))
	{
		hora = hora.replace(":",""); // Quito el caracter "/"
		// Si sigue sin ser numero, aviso al usuario para que rectifique
		if(!hora.match(/^(\d)+$/))
		{
			alert("Hora no válida, modifíquela, por favor.");
			//selecciono el texto 
			control.select() 
    	   	//coloco otra vez el foco 
       		control.focus() 			
			return;
		}
	}

	hora = "00000" + hora;
	
	hora = hora.substring(hora.length - 4, hora.length);

	var hh   = hora.substring(0,2);
	var mm = hora.substring(2,4);
			
	hora = hh + ":" + mm;

	// Devuelvo el nuevo valor ya formateado
	eval(control + ".value='" + hora + "'");
	
	checkHora(hh,mm);
}

function checkHora(horas,minutos) {
    var nHours;
    var nMinutes;
    
    if(isNaN(horas)) // Me llega el control, no el numero
    	nHours = parseInt(horas.value,10);
    else
    	nHours = horas;
    
    // compruebo que la hora sea correcta
    c = new String(nHours);
    if(c == "NaN") {
        alert("La hora no es correcta.");
        return false;
    } else {
        nHours = c;
        if(nHours < 0 || nHours > 23) {
            alert("La hora no es correcta.");
            return false;
        }
    }

    if(isNaN(minutos)) // Me llega el control, no el numero
    	nMinutos = parseInt(minutos.value,10);
    else
    	nMinutos = minutos;
    	
    c = new String(nMinutos);
    if(c == "NaN") {
        alert("Los minutos no son correctos.");
        return false;
    } else {
        nMinutos = c;
        if(nMinutos < 0 || nMinutos > 59) {
            alert("Los minutos no son correctos.");
            return false;
        }
    }

    return true;
}

function formatear_marca (tipo,orden)
{
	// 1.- Si es vacio, no hago nada
	// 2.- Si todos sus caracteres son digitos, formateo
	// 3.- Si tiene alguno no digito, sustituyo ":" y "." por "blanco"
	// 4.- Si siguen sin ser digitos, mensaje de error,
	// 5.- Si no, formateo
	
	control       = eval("document." + orden);
	valor_control = eval("document." + orden + ".value");
	marca = valor_control;
	
	if(marca == "")
		return;
		
	// ¿Todos sus caracteres son numeros?	
	if(!marca.match(/^(\d)+$/))
	{
		marca = marca.replace(/[:,\.]/g,""); // Quito los caracteres ":" y "."
		// Si sigue sin ser numero, aviso al usuario para que rectifique
		if(!marca.match(/^(\d)+$/))
		{
			alert("Marca no válida, modifíquela, por favor.");
			//selecciono el texto 
			control.select() 
    	   	//coloco otra vez el foco 
       		control.focus() 			
			return;
		}
	}
	
	var nTipo = 0;
	if(tipo != "")
		nTipo = parseInt(tipo, 10);
		
	var bValidoMinutos  = true;
	var bValidoSegundos = true;

	switch(nTipo)
	{
		case 1: // hh:mm:ss.cc
			marca = "00000000" + marca;
			marca = marca.substring(marca.length - 8, marca.length);

			var hh = marca.substring(0,2);
			var mm = marca.substring(2,4);
			var ss = marca.substring(4,6);
			var cc = marca.substring(6,8);
			
			marca = hh + ":" + mm + ":" + ss + "." + cc;

			bValidoMinutos  = (parseInt(mm,10) < 60);
			bValidoSegundos = (parseInt(ss,10) < 60);
			
			break; // *** END *** hh:mm:ss.cc
			
		case 2: // 99.99
			marca = "0000" + marca;
			marca = marca.substring(marca.length - 4, marca.length);

			var mm = marca.substring(0,2);
			var cc = marca.substring(2,4);
			
			marca = mm + "." + cc;

//			bValidoMinutos  = (parseInt(mm,10) < 60);

			break; // *** END *** 99.99
			
		case 3: // 9.999
			marca = "0000" + marca;
			marca = marca.substring(marca.length - 4, marca.length);

			var um = marca.substring(0,1);
			var u  = marca.substring(1,4);
			
			marca = um + "." + u;
			break; // *** END *** 9.999
			
		case 4: // hh:mm:ss
			if (marca.length==6)
				aux = 6
			else
				aux = 8
			marca = "000000" + marca;
			marca = marca.substring(marca.length - aux, marca.length);

			var hh = marca.substring(0,2);
			var mm = marca.substring(2,4);
			var ss = marca.substring(4,6);
			
			marca = hh + ":" + mm + ":" + ss;

			bValidoMinutos  = (parseInt(mm,10) < 60);
			bValidoSegundos = (parseInt(ss,10) < 60);

			break; // *** END *** hh:mm:ss
			
		case 5: // mm:ss.cc
			marca = "000000" + marca;
			marca = marca.substring(marca.length - 6, marca.length);

			var mm = marca.substring(0,2);
			var ss = marca.substring(2,4);
			var cc = marca.substring(4,6);
			
			marca = mm + ":" + ss + "." + cc;

			bValidoMinutos  = (parseInt(mm,10) < 60);
			bValidoSegundos = (parseInt(ss,10) < 60);

			break; // *** END *** mm:ss.cc

		case 6: // ss.cc
			marca = "0000" + marca;
			marca = marca.substring(marca.length - 4, marca.length);
			var ss = marca.substring(0,2);
			var cc = marca.substring(2,marca.length);

			marca = ss + "." + cc;

			bValidoSegundos = (parseInt(ss,10) < 60);

			break; // *** END *** ss.cc
			
		case 7: // 9.99
			marca = "000" + marca;
			marca = marca.substring(marca.length - 3, marca.length);

			var m  = marca.substring(0,1);
			var cc = marca.substring(1,3);
			
			marca = m + "." + cc;
			break; // *** END *** 9.99
			
		case 8: // mm:ss
			marca = "0000" + marca;
			marca = marca.substring(marca.length - 4, marca.length);

			var mm = marca.substring(0,2);
			var ss = marca.substring(2,4);
			
			marca = mm + ":" + ss;

			bValidoMinutos  = (parseInt(mm,10) < 60);
			bValidoSegundos = (parseInt(ss,10) < 60);

			break; // *** END *** mm:ss
	}
	
	// Devuelvo el nuevo valor ya formateado
	eval("document." + orden + ".value = '" + marca + "'");

	if(!bValidoMinutos)
	{
		alert("Marca no válida, repase los minutos, por favor.");
		//selecciono el texto 
		control.select() 
   	   	//coloco otra vez el foco 
   		control.focus() 			
		return;
	}

	if(!bValidoSegundos)
	{
		alert("Marca no válida, repase los segundos, por favor.");
		//selecciono el texto 
		control.select() 
   	   	//coloco otra vez el foco 
   		control.focus() 			
		return;
	}
}

function Comparar_Fecha(fecha_inicio, fecha_fin) 
{
	String1 = fecha_inicio;
	String2 = fecha_fin;
	// Si los dias y los meses llegan con un valor menor que 10 
	// Se concatena un 0 a cada valor dentro del string 
	if (String1.substring(1,2)=="/") 
	{
		String1="0"+String1
	}
	if (String1.substring(4,5)=="/")
	{
		String1=String1.substring(0,3)+"0"+String1.substring(3,9)
	}
	
	if (String2.substring(1,2)=="/") 
	{
		String2="0"+String2
	}
	if (String2.substring(4,5)=="/")
	{
		String2=String2.substring(0,3)+"0"+String2.substring(3,9)
	}
	
	dia1=String1.substring(0,2);
	mes1=String1.substring(3,5);
	anyo1=String1.substring(6,10);
	dia2=String2.substring(0,2);
	mes2=String2.substring(3,5);
	anyo2=String2.substring(6,10);
	
	if (dia1 == "08") // parseInt("08") == 10 base octogonal
	dia1 = "8";
	if (dia1 == '09') // parseInt("09") == 11 base octogonal
	dia1 = "9";
	if (mes1 == "08") // parseInt("08") == 10 base octogonal
	mes1 = "8";
	if (mes1 == "09") // parseInt("09") == 11 base octogonal
	mes1 = "9";
	if (dia2 == "08") // parseInt("08") == 10 base octogonal
	dia2 = "8";
	if (dia2 == '09') // parseInt("09") == 11 base octogonal
	dia2 = "9";
	if (mes2 == "08") // parseInt("08") == 10 base octogonal
	mes2 = "8";
	if (mes2 == "09") // parseInt("09") == 11 base octogonal
	mes2 = "9";
	
	dia1=parseInt(dia1);
	dia2=parseInt(dia2);
	mes1=parseInt(mes1);
	mes2=parseInt(mes2);
	anyo1=parseInt(anyo1);
	anyo2=parseInt(anyo2);

	if (anyo1<anyo2)
	{
		return false;
	}

	if ((anyo1==anyo2) && (mes1<=mes2))
	{
		return false;
	}
	if ((anyo1==anyo2) && (mes1==mes2) && (dia1<=dia2))
	{
		return false;
	} 

	return true;
}

