// Librería para la gestión del calendario

// Variables globales
var Fecha;
var Meses=['Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'];
var DiasPorMes=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
IE4 = document.all ? 1:0;
NN6IE5 = document.getElementById ? 1:0;
NN4 = document.layers ? 1:0;

//	destino -> objeto del formulario donde se escribirá la fecha
function escribeDestinoFecha(dia, mes, agno, destino, capa, camposSelect) {
	var des=document.getElementById(destino);
	if(dia < 10){
      dia = '0' + dia;
    }
    if(mes < 10) {
      mes = '0' + mes;
    }
    var valueFecha = dia+"/"+mes+"/"+agno;
    if (compruebaFechaValida(valueFecha)) { 
        des.value=valueFecha
        if (camposSelect){
            var array=camposSelect.split(",");
            for (var i=0;i<array.length;i++){
              document.getElementById(array[i]).style.visibility='visible';
            }
        }
        if (NN4) {
            document.layers[capa].visibility='hide';
        } else if (NN6IE5) {
            document.getElementById(capa).style.visibility='hidden';
        } else if (IE4) {
            document.all[capa].style.visibility='hidden';
        }
    } else {
        alert(MSJ_FECHA_FORMATO);
        des.value='';
    }
}

// capa -> capa destino donde se escribirá el calendario
function escribeCalendarioCapa(mes, agno, destino, capa, camposSelect) {
	var cal = String();
	
	// Inicializamos la fecha
	Fecha = new Date();	
	Fecha.setDate(1);
	Fecha.setMonth(mes);
	Fecha.setFullYear("" + agno)
	// Calculamos si estamos en un año bisiesto y actualizamos los dias por mes
	var EsteAgno = Fecha.getFullYear();
	if (((EsteAgno % 4 == 0) && (EsteAgno % 100 != 0)) || (EsteAgno % 400 == 0)) 
		DiasPorMes[1] = 29;		
	// Calculamos el día de la semana
	primerDia = Fecha.getDay();
	
	if (primerDia == 0) primerDia = 6;	// Para nosotros el domingo será el último
	else primerDia = primerDia -1;
	
	// Calculamos el número de días que tiene el mes
	EsteMes = Fecha.getMonth();
	numeroDias = DiasPorMes[EsteMes];
	
	// variables para el mes y año anterior y posterior
	var mesanterior = Fecha.getMonth();
	var agnoanterior = agno;
	mesanterior--;
	if (mesanterior==-1) {
		mesanterior=11;
		agnoanterior--;
	} 
	var messiguiente = Fecha.getMonth();
	var agnosiguiente = agno;
	messiguiente++;
	if (messiguiente==12) {
		messiguiente = 0;
		agnosiguiente++;
	}
	cal = "<table width=\"150\" bordercolor=\"#666666\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\" bgcolor=\"#FFFFFF\"><tr><td>";
	cal = cal + "<table width='150' class='dias' cellpadding='1' cellspacing='0'>";
	// Cabecera mes y año
	cal = cal + "<tr>"
	cal = cal + "<td colspan='7'><div class=\"titulo\" align=\"center\">[<a class='titulo' href='javascript:;' onClick='escribeCalendarioCapa("+mesanterior+","+agnoanterior + ",\"" + destino+ "\",\"" + capa +"\",\""+camposSelect+"\")'><<</a>]&nbsp;&nbsp;" + Meses[Fecha.getMonth()] + "  " + Fecha.getFullYear() + "&nbsp;&nbsp;[<a class='titulo' href='javascript:;' onClick='escribeCalendarioCapa("+messiguiente+","+agnosiguiente + ",\"" + destino+ "\",\"" + capa +"\",\""+camposSelect+"\")'>>></a>]</div></td>"
	cal = cal + "</tr>"
	// Cabecera días de la semana
	cal = cal + "<tr class='semana'>";
	cal = cal + "<td><div align=\"center\"><b>L</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>M</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>X</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>J</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>V</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>S</b></div></td>";
	cal = cal + "<td><div align=\"center\"><b>D</b></div></td>";						
	cal = cal + "</tr>";
	// Escribimos los espacios en blanco en la primera fila
	cal = cal + "<tr class='dias'>"
	columna = 0;
	for (i=0; i<primerDia; i++)
	{
		cal = cal + "<td>&nbsp;</td>";
		columna++;
	}
	// Escribimos los días
	for (i=1; i<=numeroDias; i++)
	{
		cal = cal + "<td ><div align=\"center\"><a class='dias' onClick='javascript:;' href='javascript:escribeDestinoFecha(" + i + "," + (EsteMes+1) + "," + EsteAgno + ",\"" + destino + "\",\"" + capa + "\",\""+camposSelect+"\")'>" + i + "</a></div></td>";
		columna++;
		if (columna==7 && i!=numeroDias)
		{
			columna=0;
			cal = cal + "</tr><tr class='dias'>";
		}
	}
    while(columna<7) {
      cal = cal + "<td>&nbsp;</td>";
      columna++;
    }

	cal = cal + "</tr>";
	cal = cal + "<tr class='cerrar'>";
	cal = cal + "<td colspan='7'><div align=\"center\">[<a class='cerrar' onClick='javascript:;' href='javascript:cerrarCalendario(\""+capa+"\",\""+camposSelect+"\");' >Cerrar</a>]</div></td>";
	cal = cal + "</tr>";
	cal = cal + "</table>";
	cal = cal + "</td></tr></table>";
	
	
	// Mostramos la capa
	if (NN4) {
		document.layers[capa].document.open();
		document.layers[capa].document.write(cal);
		document.layers[capa].document.close();
		document.layers[capa].visibility = "show";
	}else if (NN6IE5) {
		document.getElementById(capa).innerHTML = cal;
		document.getElementById(capa).style.visibility = "visible";
	} else if (IE4) {
		document.all[capa].innerHTML = cal;
		document.all[capa].style.visibility = "visible";
	}

}

function cerrarCalendario(capa,camposSelect) {
    if (camposSelect){
        var array=camposSelect.split(",");
        for (var i=0;i<array.length;i++){
          document.getElementById(array[i]).style.visibility='visible';
        }
    }
	if (NN4) {
		document.layers[capa].visibility='hide';
	}else if (NN6IE5) {
		document.getElementById(capa).style.visibility='hidden';
	} else if (IE4) {
		document.all[capa].style.visibility='hidden';
	}
	
}

function calendario(destino,capa,camposSelect) {
	var fec = new Date();
	var d=document.getElementById(destino);
	if(d.value!="" && d.value.length==10){
		var trozos=d.value.split("/");
        if (trozos.length==3) {
          if (trozos[1].length==2 && trozos[1].charAt(0)=='0') {
            trozos[1] = trozos[1].substring(1);
          }
  		  fec.setDate(1);
		  fec.setMonth(parseInt(trozos[1]) - 1);
		  fec.setYear(parseInt(trozos[2]));
        }
	}
	var mes = fec.getMonth();
	var ano = fec.getFullYear();
	var str = escribeCalendarioCapa(mes,ano,destino,capa,camposSelect);
}

function verCalendario(campo, capa, camposSelect) {
    if (camposSelect) {
        if (isIE) {
            if (ie50 || ie55) {
                var array=camposSelect.split(",");
                for (var i=0;i<array.length;i++){
                  document.getElementById(array[i]).style.visibility='hidden';
                }
            } else if (ie4) {
                var array=camposSelect.split(",");
                for (var i=2;i<array.length;i++){
                  document.all[array[i]].style.visibility='hidden';
                }
            }
        }
    }
    calendario(campo, capa, camposSelect);
}

// Función para validar fechas



// Valida número coma flotante
function isFloat (s)

{   var i;
    var seenDecimalPoint = false;

    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return true;
       else return (isFloat.arguments[1] == true);

    if (s == '.') return false;

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if ((c == '.') && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
