/*****************************************************************************
** LIBRERIA GENERAL DE CALENDARIO XP
******************************************************************************
** Tipo           : Libreria desarrollada en JS
** Fichero Fuente : calendario.js
** Fichero Ayuda  :
** Descripcion    : Libreria general para la creacion de calendarios en HTML
**                : La pagina con el calendario tiene que tener una capa de nombre "idcalendario"
******************************************************************************
** Autor  : Marbore business solutions
** Fecha  : 15/01/2002
** Version: v1.0
*****************************************************************************/

/*****************************************************************************
 * Variables globales
 ****************************************************************************/

//Estoy ejecutandome en un IE
var bExplorer4=(document.all && !document.getElementById)?true:false;
var bExplorer5=(document.all && document.getElementById)?true:false;
var bExplorer=(bExplorer4 || bExplorer5);
//Estoy ejecutandome en un Netscape
var bNetscape4=(document.layers)?true:false;
var bNetscape6=(!document.all && document.getElementById)?true:false;
var bNetscape=(bNetscape4 || bNetscape6);
if (bNetscape4) document.write(""); //Evita la consola JS (en Netscape)
//Estoy ejecutandome en un entorno Windows
var bWindows=(navigator.appName.toUpperCase().indexOf("WINDOWS")>=0 || navigator.appVersion.toUpperCase().indexOf("WINDOWS")>=0)?true:false;

/*****************************************************************************
 * Cargar la hoja de estilos correspondientes al menu XP
 ****************************************************************************/
document.write('<style type="text/css">');
document.write('a.acalendario:link    {color:#000000;text-decoration:none;}');
document.write('a.acalendario:visited {color:#000000;text-decoration:none;}');
document.write('a.acalendario:hover   {color:#ff0000;text-decoration:underline;}');
document.write('</style>');

/*****************************************************************************
 * Devuelve si es an/o parametro es bisiesto
 *****************************************************************************
 * Parametros: nParamAnno (int) El an/o parametro
 *    Retorno: (boolean) Devuelve verdadero (true) o falso (false)
 ****************************************************************************/
//function bisiesto(nParamAnno) {
//  return (((nParamAnno%4==0) && !(nParamAnno%100==0)) || ((nParamAnno%4==0) && (nParamAnno%400==0)));
//}

/*****************************************************************************
 * El calendario de la fecha parametro
 *****************************************************************************
 * Parametros: nParamDia  (int) El dia parametro
 *             nParamMes  (int) El mes parametro
 *             nParamAnno (int) El an/o parametro
 ****************************************************************************/
function calendario(nParamDia,nParamMes,nParamAnno) {
  //La referencia a la capa del menu
  var lyCalendario=null;
  if (bExplorer) lyCalendario=document.all("idcalendario").style;
  else if (bNetscape4) lyCalendario=document.layers["idcalendario"];
  else if (bNetscape6) lyCalendario=document.getElementById("idcalendario").style;
  //Variables
  var cTD1i="<td align=\"left\" bgcolor=\"#000000\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#ffffff\">";
  var cTD1f="</font></td>";
  var cTD2i="<td align=\"center\" bgcolor=\"#eeeeee\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\">";
  var cTD2f="</font></td>";
  var fHoy=new Date(nParamAnno,nParamMes-1,nParamDia);
  var nAnno=fHoy.getFullYear();
  var nMes=fHoy.getMonth()+1;
  var nDia=fHoy.getDate();
  var nSemana=new Date(fHoy.getFullYear(),fHoy.getMonth(),1).getDay();
  if (!bDomingo && nSemana==0) nSemana=7;
  else if (bDomingo) nSemana=nSemana+1;
  var anDias=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var htmlCalendario="";
  //Comienzar calculo del calendario
  htmlCalendario+="<form name=\"formxcal\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td bgcolor=\"#000000\"><table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"><tr><td bgcolor=\"#ffffff\"><table border=\"0\" cellpadding=\"2\" cellspacing=\"1\">";
  //htmlCalendario+="<tr><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+(nMes>1?nMes-1:nMes)+","+nAnno+")\">&lt;&lt;</a></font></td><td colspan=\"5\" align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\">"+acMeses[nMes-1]+"</font></td><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+(nMes<12?nMes+1:nMes)+","+nAnno+")\">&gt;&gt;</a></font></td></tr>";
  htmlCalendario+="<tr><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+(nMes>1?nMes-1:nMes)+","+nAnno+")\">&lt;&lt;</a></font></td><td colspan=\"5\" align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\">";
  htmlCalendario+="<select onChange=\"calendario("+nDia+",document.formxcal.elements[0].selectedIndex+1,"+nAnno+")\">";
  for(var n=1;n<=12;n++) {
    if (n==nMes) htmlCalendario+="<option value=\""+n+"\" selected>"+acMeses[n-1]+"</option>";
    else htmlCalendario+="<option value="+n+">"+acMeses[n-1]+"</option>";
  }
  htmlCalendario+="</select>";
  htmlCalendario+="</font></td><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+(nMes<12?nMes+1:nMes)+","+nAnno+")\">&gt;&gt;</a></font></td></tr>";
  htmlCalendario+="<tr><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+nMes+","+(nAnno>100?nAnno-1:nAnno)+")\">&lt;&lt;</a></font></td><td colspan=\"5\" align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\">";
  htmlCalendario+="<select onChange=\"calendario("+nDia+","+nMes+",(20-document.formxcal.elements[1].selectedIndex)*100+document.formxcal.elements[2].selectedIndex)\">";
  for(var n=20;n>=0;n--) {
    if (n==parseInt(nAnno/100)) htmlCalendario+="<option value=\""+n+"\" selected>"+lpadcero(n,2)+"</option>";
    else htmlCalendario+="<option value="+n+">"+lpadcero(n,2)+"</option>";
  }
  htmlCalendario+="</select>";
  htmlCalendario+="<select onChange=\"calendario("+nDia+","+nMes+",(20-document.formxcal.elements[1].selectedIndex)*100+document.formxcal.elements[2].selectedIndex)\">";
  for(var n=0;n<=99;n++) {
    if (n==nAnno%100) htmlCalendario+="<option value=\""+n+"\" selected>"+lpadcero(n,2)+"</option>";
    else htmlCalendario+="<option value="+n+">"+lpadcero(n,2)+"</option>";
  }
  htmlCalendario+="</select>";
  htmlCalendario+="</font></td><td align=\"center\" bgcolor=\"#cccccc\"><font face=\"Verdana,Arial,Helvetica,Geneva\" size=\"1\" color=\"#000000\"><a class=\"acalendario\" href=\"javascript:calendario("+nDia+","+nMes+","+(nAnno+1)+")\">&gt;&gt;</a></font></td></tr>";
  htmlCalendario+="<tr>"+cTD1i+acDiasSemana[0]+cTD1f+cTD1i+acDiasSemana[1]+cTD1f+cTD1i+acDiasSemana[2]+cTD1f+cTD1i+acDiasSemana[3]+cTD1f+cTD1i+acDiasSemana[4]+cTD1f+cTD1i+acDiasSemana[5]+cTD1f+cTD1i+acDiasSemana[6]+cTD1f+"</tr>";
  htmlCalendario+="<tr>";
  for(var n=1;n<=7;n++)
    if (n<nSemana) htmlCalendario+=cTD2i+"&nbsp;"+cTD2f;
    else {
      if (n==nSemana+nDia-1) htmlCalendario+=cTD2i+"<a class=\"acalendario\" href=\"javascript:ponFecha('0"+(n-nSemana+1)+(nMes<10?"0"+nMes:nMes)+(nAnno<10?"000"+nAnno:(nAnno<100?"00"+nAnno:(nAnno<1000?"0"+nAnno:nAnno)))+"')\"><font color=\"#ff0000\">"+(n-nSemana+1)+"</font></a>"+cTD2f;
      else htmlCalendario+=cTD2i+"<a class=\"acalendario\" href=\"javascript:ponFecha('0"+(n-nSemana+1)+(nMes<10?"0"+nMes:nMes)+(nAnno<10?"000"+nAnno:(nAnno<100?"00"+nAnno:(nAnno<1000?"0"+nAnno:nAnno)))+"')\">"+(n-nSemana+1)+"</a>"+cTD2f;
    }
  htmlCalendario+="</tr>";
  for(var n=1;n<=anDias[nMes-1]+(nMes==2 && bisiesto(nAnno)?1:0);n++)
    if (n>(7-nSemana+1)) {
      if (n==nDia) htmlCalendario+=cTD2i+"<a class=\"acalendario\" href=\"javascript:ponFecha('"+(n<10?"0"+n:n)+(nMes<10?"0"+nMes:nMes)+(nAnno<10?"000"+nAnno:(nAnno<100?"00"+nAnno:(nAnno<1000?"0"+nAnno:nAnno)))+"')\"><font color=\"#ff0000\">"+n+"</font></a>"+cTD2f;
      else htmlCalendario+=cTD2i+"<a class=\"acalendario\" href=\"javascript:ponFecha('"+(n<10?"0"+n:n)+(nMes<10?"0"+nMes:nMes)+(nAnno<10?"000"+nAnno:(nAnno<100?"00"+nAnno:(nAnno<1000?"0"+nAnno:nAnno)))+"')\">"+n+"</a>"+cTD2f;
      if ((n-(7-nSemana+1))%7==0) htmlCalendario+="</tr><tr>";
    }
  htmlCalendario+="</table></td></tr></table></td></tr></table></form>";
  //Dibuja el calendario
  if (bExplorer) {
    document.all("idcalendario").innerHTML=htmlCalendario;
  } else if (bNetscape4) {
    lyCalendario.document.write(htmlCalendario);
    lyCalendario.document.close();
  } else if (bNetscape6) {
    document.getElementById("idcalendario").innerHTML=htmlCalendario;
  }
}

/*****************************************************************************
 * El calendario de hoy
 ****************************************************************************/
function hoyCalendario() {
  var fHoy=new Date();
  var nAnno=fHoy.getFullYear();
  var nMes=fHoy.getMonth()+1;
  var nDia=fHoy.getDate();
  return calendario(nDia,nMes,nAnno);
}

/*****************************************************************************
 * Inicializa el calendario con la fecha
 ****************************************************************************/
function ponCalendario(cFecha) {
  var fHoy=new Date();
  var nAnno=fHoy.getFullYear();
  var nMes=fHoy.getMonth()+1;
  var nDia=fHoy.getDate();
  if (cFecha=="") hoyCalendario();
  else {
    var i=0;
    var acFecha=cFecha.split(cDelim);
    var acFormato=cFormato.split(cDelim);
    while (i<3) {
      if (acFormato[i]=="dd") nDia=acFecha[i];
      if (acFormato[i]=="mm") nMes=acFecha[i];
      if (acFormato[i]=="yyyy") nAnno=acFecha[i];
      i++;
    }
    calendario(nDia,nMes,nAnno);
  }
}

/*****************************************************************************
 * Devuelve la fecha al formulario
 ****************************************************************************/
function ponFecha(cFecha) {
  var i=0;
  var cRetorno="";
  var acFormato=cFormato.split(cDelim);
  while (i<3) {
    if (acFormato[i]=="dd") cRetorno=cRetorno+cFecha.substring(0,2);
    if (acFormato[i]=="mm") cRetorno=cRetorno+cFecha.substring(2,4);
    if (acFormato[i]=="yyyy") cRetorno=cRetorno+cFecha.substring(4,cFecha.length);
    if (i<2) cRetorno=cRetorno+cDelim;
    i++;
  }
  window.opener.cerrarCalendario(cRetorno);
}
