// **********************************************************************************************
// 						
// 	CLASE: Fecha			
// 				
// 	VER: 2.0				 	
//	AUTOR: Pablo Perez Gomez
//	FECHA: 27/02/2005
//	SOPORTA: 
//		-Microsoft Internet Explorer ver. 4.0 o superior
//		-Netscape Navigator ver. 4.0 o superior
//						
// 	NOTAS: Formato de fecha: dd/mm/aaaa
//	       Formato de hora: hh:mm
//		
//	PROPIEDADES DEL OBJETO:
//
//		-diaMes: dia del mes en que nos encontramos
//		-mes: mes en que nos encontramos (Enero: 0 .. Diciembre: 11)
//		-anyo: año en que nos encontramos
//		-diaSemana: dia de la semana en que nos encontramos (Domingo: 0 .. Sabado: 6)
//		-hora: hora del dia
//		-minutos: minutos de la hora actual
//
//	METODOS DEL OBJETO:
//
//		-FechaActual(): devuelve la fecha actual del sistema
//		-HoraActual(): devuelve la hora actual del sistema
//		-ValidaFecha(): comprueba que la fecha introducida es valida
//		-EsFechaActual(): comprueba si la fecha introducida es la fecha actual
//		-EsMayorIgual(): comprueba si la primera fecha es mayor o igual que la segunda
//		-HoraASegundos(): transforma la horas, minutos y segundos a segundos
//
//		-EscribeTextoFecha(): salida formateada en modo texto con la fecha completa en que nos encontramos
//		-EscribeTextoHora(): salida formateada en modo texto con la hora y minutos en que nos encontramos
//
// **********************************************************************************************

    /**
    * definimos las variables que almacenaran los componentes de la fecha actual
    */
    ahora          = new Date();
    ahoraDay    = ahora.getDate();
    ahoraMonth = ahora.getMonth();
    ahoraYear   = ahora.getYear();

    /**
 * Nestcape Navigator 4x cuenta el anyo a partir de 1900, por lo que es necesario
 * sumarle esa cantidad para obtener el anyo actual adecuadamente
 **/
 if (ahoraYear < 2000)
        ahoraYear += 1900;

    /**
 * funcion para saber cuantos dias tiene cada mes
 */
    function cuantosDias(mes, anyo)
    {
        var cuantosDias = 31;
        if (mes == "Abril" || mes == "Junio" || mes == "Septiembre" || mes == "Noviembre")
      cuantosDias = 30;
        if (mes == "Febrero" && (anyo/4) != Math.floor(anyo/4))
      cuantosDias = 28;
        if (mes == "Febrero" && (anyo/4) == Math.floor(anyo/4))
      cuantosDias = 29;
        return cuantosDias;
    }

    /**
 * una vez que sabemos cuantos dias tiene cada mes
 * asignamos dinamicamente este numero al combo de los dias dependiendo
 * del mes que aparezca en el combo de los meses
 */
    function asignaDias()
    {
        comboDias = document.formFecha.seleccionaDia;
        comboMeses = document.formFecha.seleccionaMes;
        comboAnyos = document.formFecha.seleccionaAnyo;

        Month = comboMeses[comboMeses.selectedIndex].text;
        Year = comboAnyos[comboAnyos.selectedIndex].text;

        diasEnMes = cuantosDias(Month, Year);
        diasAhora = comboDias.length;

        if (diasAhora > diasEnMes)
        {
            for (i=0; i<(diasAhora-diasEnMes); i++)
            {
                comboDias.options[comboDias.options.length - 1] = null
            }
        }
        if (diasEnMes > diasAhora)
        {
            for (i=0; i<(diasEnMes-diasAhora); i++)
            {
                sumaOpcion = new Option(comboDias.options.length + 1);
                comboDias.options[comboDias.options.length]=sumaOpcion;
            }
        }
        if (comboDias.selectedIndex < 0)
          comboDias.selectedIndex = 0;
     }

    /**
 * ahora selecionamos en los combos los valores correspondientes
 * a la fecha actual del sistema
 */
    function ponDia()
    {
        comboDias = eval("document.formFecha.seleccionaDia");
        comboMeses = eval("document.formFecha.seleccionaMes");
        comboAnyos = eval("document.formFecha.seleccionaAnyo");

        comboAnyos[0].selected = true;
        comboMeses[ahoraMonth].selected = true;

        asignaDias();

        comboDias[ahoraDay-1].selected = true;
    }

    /**
 * esta funcion crea dinamicamente el combo de los anyos, empezando
 * por el actual y acabando por el actual+masAnyos
 */
    function rellenaAnyos(masAnyos)
    {
        cadena = "";

        for (i=0; i<masAnyos; i++)
        {
            cadena += "<option>";
            cadena += ahoraYear + i;
        }
        return cadena;
    }
    
function Fecha()
{
	var es=new Navegador();
	var fecha=new Date();	
	
	//Obtenemos los datos del navegador
			
	this.diaSemana=fecha.getDay();
	this.diaMes=fecha.getDate();
	this.mes=fecha.getMonth();
	this.anyo=fecha.getYear();
	this.hora=fecha.getHours();
	this.minutos=fecha.getMinutes();

	//Netscape representa la fecha con el número de años a partir de 1900.
	
	if (es.ns)
		this.anyo+=1900;

	//Definición de los arrays que contienen los nombres de los meses y años y dias que tiene cada mes

	this.listaDias=new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
	this.listaMeses=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
	this.listaDiasMes=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	this.FechaActual=FechaActual;
	this.HoraActual=HoraActual;
	this.EsFechaActual=EsFechaActual;
	this.EsMayorIgual=EsMayorIgual;
	this.HoraASegundos=HoraASegundos;
	this.ValidaFecha=ValidaFecha;

	//Salida formateada por pantalla

	this.EscribeTextoFecha=EscribeTextoFecha;
	this.EscribeTextoHora=EscribeTextoHora;
}

//DEVUELVE LA FECHA ACTUAL DEL SISTEMA EN EL FORMATO DD/MM/AAAA

function FechaActual()
{	
	if(this.diaMes<10)
		if(this.mes<10)
			devolver="0"+this.diaMes+"/0"+(this.mes+1)+"/"+this.anyo;
		else
			devolver="0"+this.diaMes+"/"+(this.mes+1)+"/"+this.anyo;
	else
		if(this.mes<10)
			devolver=this.diaMes+"/0"+(this.mes+1)+"/"+this.anyo;
		else
			devolver=this.diaMes+"/"+(this.mes+1)+"/"+this.anyo;

	return devolver;
}

//DEVUELVE LA HORA ACTUAL DEL SISTEMA EN EL FORMATO HH:MM

function HoraActual()
{
	if(this.hora < 10)
		this.hora = "0" + this.hora;
	if(this.minutos < 10)
		this.minutos = "0" + this.minutos;
	
	return this.hora+":"+this.minutos;
}

//COMPRUEBO SI LA FECHA INTRODUCIDA COINCIDE CON LA ACTUAL

function EsFechaActual(fecha)
{
	if(fecha==this.FechaActual())
		return true;	
	else
		return false;
}

//COMPRUEBO SI LA PRIMERA FECHA ES MAYOR O IGUAL QUE LA SEGUNDA

function EsMayorIgual(fecha1, fecha2)
{
	if(fecha1.substring(6,10)>fecha2.substring(6,10))
		return true;
	else
	{
		if(fecha1.substring(6,10)==fecha2.substring(6,10))
			if(fecha1.substring(3,5)>fecha2.substring(3,5))
				return true;
			else
			{
				if(fecha1.substring(3,5)==fecha2.substring(3,5))
					if(fecha1.substring(0,2)>fecha2.substring(0,2))
						return true;
					else
					{
						if(fecha1.substring(0,2)==fecha2.substring(0,2))
							return true;
						else
							return false;
					}
				else
					return false;
			
			}
		else
			return false;
	}
}

//TRANSFORMO LA HORA ACTUAL A SEGUNDOS

function HoraASegundos(hora)
{
	return hora.substring(0,2)*3600+hora.substring(3,5)*60+hora.substring(6,8)*1;
}

//COMPRUEBA QUE LA FECHA INTRODUCIDA ES CORRECTA

function ValidaFecha(dia, mes, anyo)
{
	//Compruebo que el mes esta dentro del rango

	if(mes>12 || mes<=0)
		return false;

	//Compruebo que el año no es negativo
	
	if(anyo<0)
		return false;

	//Compruebo si la fecha es 29 de Febrero y el año es bisiesto

	if((dia==29)&&(mes==2)&&(((2000-anyo) % 4)!=0))
		return false;
	else
		if((dia==29)&&(mes==2))
			return true;

	//Compruebo si el dia esta dentro del rango del mes

	if(dia>this.listaDiasMes[mes-1] && dia > 0)
		return false;
	
	return true;
}

//GENERA CODIGO HTML PARA REALIZAR UNA SALIDA FORMATEADA POR PANTALLA EN MODO TEXTO

function EscribeTextoFecha(estilo)
{
	var texto="";	

	if(this.diaMes < 10)
		this.diaMes = "0" + this.diaMes;


	//Si se ha introducido un estilo para el texto, utiliza el estilo indicado, de lo contrario utiliza uno por defecto

	if(!estilo)
		texto="<p size='2' color='#000000' face='Arial'>"+listaDias[this.diaSemana]+" "+this.diaMes+" de "+listaMeses[this.mes]+" de "+this.anyo+"</p>";
	else
		texto="<p class=\""+estilo+"\">"+this.listaDias[this.diaSemana]+" "+this.diaMes+" de "+this.listaMeses[this.mes]+" de "+this.anyo+"</p>";	
	
	document.write(texto);
}

//GENERA CODIGO HTML PARA REALIZAR UNA SALIDA FORMATEADA POR PANTALLA EN MODO TEXTO

function EscribeTextoHora(estilo)
{
	var texto="";	

	//Añado un 0 delante de los numeros de minuto menores de 10

	if(this.minutos < 10)
		this.minutos = "0" + this.minutos;

	//Si se ha introducido un estilo para el texto, utiliza el estilo indicado, de lo contrario utiliza uno por defecto

	if(!estilo)
		texto="<p size='2' color='#000000' face='Arial'>&nbsp;"+this.HoraActual()+"</p>";
	else
		texto="<p class=\""+estilo+"\">"+this.HoraActual()+"</p>";
	
	document.write(texto);
}




