/* Variables configurables */
/***************************/

    var diasOcupados = new Array(new Array(27,11,2009), new Array(28,11,2009), new Array(29,11,2009), new Array(4,12,2009), new Array(5,12,2009), new Array(6,12,2009), new Array(7,12,2009), new Array(31,12,2009), new Array(1,1,2010), new Array(2,1,2010), new Array(25,1,2010), new Array(26,1,2010), new Array(27,1,2010), new Array(28,1,2010), new Array(26,3,2010), new Array(27,3,2010), new Array(31,3,2010), new Array(1,4,2010), new Array(2,4,2010), new Array(3,4,2010), new Array(2,8,2010), new Array(3,8,2010), new Array(4,8,2010), new Array(5,8,2010), new Array(6,8,2010), new Array(7,8,2010), new Array(8,8,2010), new Array(9,8,2010), new Array(10,8,2010), new Array(11,8,2010), new Array(12,8,2010), new Array(13,8,2010), new Array(14,8,2010), new Array(15,8,2010), new Array(16,8,2010), new Array(11,3,2010), new Array(12,3,2010), new Array(13,3,2010), new Array(18,3,2010), new Array(19,3,2010), new Array(20,3,2010), new Array(14,3,2010), new Array(7,4,2010), new Array(8,4,2010), new Array(28,3,2010), new Array(29,3,2010), new Array(30,3,2010), new Array(4,6,2010), new Array(5,6,2010), new Array(6,6,2010), new Array(13,5,2010), new Array(14,5,2010), new Array(15,5,2010), new Array(25,6,2010), new Array(26,6,2010), new Array(27,6,2010), new Array(21,5,2010), new Array(22,5,2010), new Array(11,6,2010), new Array(12,6,2010), new Array(17,7,2010), new Array(18,7,2010), new Array(19,7,2010), new Array(20,7,2010), new Array(21,7,2010), new Array(22,7,2010), new Array(23,7,2010), new Array(24,7,2010), new Array(25,7,2010), new Array(26,7,2010), new Array(27,7,2010), new Array(27,7,2010), new Array(27,7,2010), new Array(27,7,2010), new Array(25,7,2010), new Array(12,7,2010), new Array(13,7,2010), new Array(14,7,2010), new Array(15,7,2010), new Array(16,7,2010), new Array(17,8,2010), new Array(18,8,2010), new Array(19,8,2010), new Array(20,8,2010), new Array(21,8,2010), new Array(22,8,2010), new Array(23,8,2010), new Array(24,8,2010), new Array(25,8,2010), new Array(26,8,2010), new Array(27,8,2010), new Array(28,8,2010), new Array(14,8,2010), new Array(15,8,2010), new Array(16,8,2010), new Array(7,7,2010), new Array(8,7,2010), new Array(9,7,2010), new Array(10,7,2010), new Array(11,7,2010), new Array(6,9,2010), new Array(7,9,2010), new Array(8,9,2010), new Array(9,9,2010), new Array(10,9,2010), new Array(11,9,2010));

    var fecha_ultima_actualizacion = "09/07/2010";





/*** CÓDIGO: No tocar ****/    
/*************************/

    // Fecha actual
    var gdFechaActual = new Date();


    // Fecha que se muestra en el calendario
    var gdFecha = new Date();


    function diasMes(fecha){
	iDia = fecha.getDate();
	iMes = fecha.getMonth();
	iAno = fecha.getFullYear();
	
	var numDiasMes = 0;	

	// Meses de 31 días: Enero, Marzo, Mayo, Julio, Agosto, Octubre, Diciembre
	if ((iMes == 0) || (iMes == 2) || (iMes == 4) || (iMes == 6) || (iMes == 7) || (iMes == 9) || (iMes == 11)){
		numDiasMes = 31;
	// Meses de 30 días: Abril, Junio, Septiembre, Noviembre
	} else if ((iMes == 3) || (iMes == 5) || (iMes == 8) || (iMes == 10)){
		numDiasMes = 30;
	// Febrero
	} else {
		if ( (iAno % 4 == 0) && ((iAno % 100 != 0) || (iAno % 400 == 0)) ) {
			numDiasMes = 29;
		} else {
			numDiasMes = 28;
		}
	}

	return numDiasMes;	
    }


    function sumaDia(fecha){
	numDiasMes = diasMes(fecha);

	iDia = fecha.getDate();
	iMes = fecha.getMonth();
	iAno = fecha.getFullYear();

	// Si es el último día de mes
	if (iDia == numDiasMes){
		iDia = 1;

		// Si es diciembre
		if (iMes == 11){
			iMes = 1;
			iAno++;
		} else {
			iMes++;
		}

	} else {
		iDia++;
	}

	fecha = new Date(iAno, iMes, iDia);

	return fecha;
    }


    function nombreMes(mes){
    	if (mes == 0)
		nombre = "enero";
	else if (mes == 1)
		nombre = "febrero";
	else if (mes == 2)
		nombre = "marzo";
	else if (mes == 3)
		nombre = "abril";
	else if (mes == 4)
		nombre = "mayo";
	else if (mes == 5)
		nombre = "junio";
	else if (mes == 6)
		nombre = "julio";
	else if (mes == 7)
		nombre = "agosto";
	else if (mes == 8)
		nombre = "septiembre";
	else if (mes == 9)
		nombre = "octubre";
	else if (mes == 10)
		nombre = "noviembre";
	else if (mes == 11)
		nombre = "diciembre";
    return nombre;
    }


    function getClaseDia(ano, mes, dia){

	ocupado = false;
	calculaDia = false;
	clase = '';

	// Si la fecha es posterior o igual a la actual, calcula el tipo de día
	if (ano > gdFechaActual.getFullYear()){
		calculaDia = true;
	} else if (ano == gdFechaActual.getFullYear()){
		if  (mes > gdFechaActual.getMonth()){
			calculaDia = true;
		} else if (mes == gdFechaActual.getMonth()){
			if (dia >= gdFechaActual.getDate()){
				calculaDia = true;
			}
		}
	}

	// Si el día es anterior, no se calcula (deshabilitado)
	if (!calculaDia){
		clase = 'cal_desh';
	} else {
		// Cálculo de tipo de dia
		// Recorre el array de dias ocupados
		for (fecha = 0; fecha < diasOcupados.length; fecha++){
			// Si encuentra una fecha ocupada, no buscar más
			if (!ocupado){
				// Comprueba si es el mismo año
				if (parseInt(ano) == parseInt(diasOcupados[fecha][2])){
					if ( (parseInt(parseInt(mes) + 1)) == parseInt(diasOcupados[fecha][1])){
						if (parseInt(dia) == parseInt(diasOcupados[fecha][0])){
						ocupado = true;
						}
					}
				}
			}
		} //for calculo tipo de dia

		// Si el día está ocupado
		if (ocupado){
		   clase = 'cal_ocupado';
		} else {
		   clase = 'cal_libre'; 
		}
	}


	return clase;
    }



    function cargar_calendario(iDia, iMes, iAno){ 

        if (isNaN(iDia)) iDia = gdFecha.getDate(); 
        if (isNaN(iMes)) iMes = gdFecha.getMonth(); 
        if (isNaN(iAno)) iAno = gdFecha.getFullYear(); 


        var sCalendario; 
        var sEstilos; 
        var iCont; 
        var iIncremento;
	var diaSemana;
        var dPasoFecha = new Date(iAno,iMes,1); 

        gdFecha = new Date(iAno,iMes,iDia); 
     
        sCalendario = "<table border cellspacing='0' cellpadding='2'><tr>"; 
        sCalendario = sCalendario + "<tr><td colspan='7' align='center' class='cal_etiq2'>";
	sCalendario = sCalendario + nombreMes(iMes) + "&nbsp;" + iAno + "</td></tr>";
	sCalendario = sCalendario + "<tr>" + 
             "<td class=cal_etiq2>&nbsp;lu&nbsp;</td><td class=cal_etiq2>&nbsp;ma&nbsp;</td><td class=cal_etiq2>&nbsp;mi&nbsp;</td><td class=cal_etiq2>&nbsp;ju&nbsp;</td><td class=cal_etiq2>&nbsp;vi&nbsp;</td><td class=cal_etiq2>&nbsp;sa&nbsp;</td><td class=cal_etiq2>&nbsp;do&nbsp;</td></tr>"+
     	     "</tr>"; 


	// diaSemana indica 1 si es lunes, 2 si es martes, etc
	diaSemana = dPasoFecha.getDay();
	// getDay devuelve 0 para los domingos. Le ponemos 7 porque para nosotros es el último día
	if (diaSemana == 0){
		diaSemana = 7;
	}


        for (iIncremento = 1 ; iIncremento < diaSemana ; iIncremento++){ 
            sCalendario = sCalendario + "<td class='cal_otro'> </td>"; 
	}

        iIncremento--; 
     
        for (iCont = 1 ; dPasoFecha.getMonth() == gdFecha.getMonth() ; iCont++){ 

	    claseDia = getClaseDia(iAno, iMes, iCont);

            sEstilos = ""; 
         
            // Salto de linea los domingos
	    if ((iCont + iIncremento) % 7 == 1) 
                sCalendario = sCalendario + "</tr><tr>"; 

            /*
	    if (dPasoFecha.getDate() == gdFecha.getDate()) 
                sEstilos = sEstilos + "background-color:#ffff00;"; 

            if ((iCont + iIncremento) % 7 == 0) 
                sEstilos = sEstilos + "color:#ff0000;"; 
     
            if (sEstilos != "") 
                sEstilos = " style='" + sEstilos + "' "; 
            */

            sCalendario = sCalendario + "<td class='" + claseDia + "'" + sEstilos + " onclick='pasar_fecha(" + iCont + ");'>" + iCont + "</td>"; 

	// La suma de un día no debe hacerse con setTime y sumando los milisegundos de un día: Falla en meses con cambio horario
	// dPasoFecha.setTime(dPasoFecha.getTime() + 86400000);
	dPasoFecha = sumaDia(dPasoFecha);

        } 
        for (iCont = iCont; (iCont + iIncremento) % 7 != 1; iCont++){
            sCalendario = sCalendario + "<td class='cal_otro'> </td>"; 
        }

        sCalendario = sCalendario + "</tr></table>"; 
        document.getElementById("contenedor").innerHTML = sCalendario; 

    } 

    function pasar_fecha(iDia, iMes, iAno){ 

        if (isNaN(iDia)) iDia = gdFecha.getDate(); 
        if (isNaN(iMes)) iMes = gdFecha.getMonth(); 
        if (isNaN(iAno)) iAno = gdFecha.getFullYear(); 
         
        gdFecha = new Date(iAno, iMes, iDia); 

        document.formulario.dia.value = gdFecha.getDate(); 
        document.formulario.mes.value = gdFecha.getMonth() + 1; 
        document.formulario.ano.value = gdFecha.getFullYear(); 

        cargar_calendario(); 
    }

    function sumaMes(){
        iDia = gdFecha.getDate(); 
        iMes = gdFecha.getMonth(); 
        iAno = gdFecha.getFullYear();

	iMes = iMes + 1;

	if (iMes == 12){
		iMes = 0;
		iAno = iAno +1;
	}

        gdFecha = new Date(iAno, iMes, iDia);

        document.formulario.dia.value = gdFecha.getDate(); 
        document.formulario.mes.value = gdFecha.getMonth() + 1; 
        document.formulario.ano.value = gdFecha.getFullYear(); 

        cargar_calendario();
    }

    function restaMes(){
        iDia = gdFecha.getDate(); 
        iMes = gdFecha.getMonth(); 
        iAno = gdFecha.getFullYear();

	iMes = iMes - 1;

	if (iMes == -1){
		iMes = 11;
		iAno = iAno - 1;
	}

        gdFecha = new Date(iAno, iMes, iDia);

        document.formulario.dia.value = gdFecha.getDate(); 
        document.formulario.mes.value = gdFecha.getMonth() + 1; 
        document.formulario.ano.value = gdFecha.getFullYear(); 

        cargar_calendario();
    }


    function cargar_fecha_actualizacion(){
	document.getElementById("fechaActualizacion").innerHTML = fecha_ultima_actualizacion;
    }

