var calendarX=0,calendarY=0,calendarDiv='',calendarTextBox;

var nav=navigator.appName=="Microsoft Internet Explorer"?0:1;
var n6=0;
if(nav && parseInt(navigator.appVersion)>=5){
  nav=0;
  n6=1;
}

// Obtiene un objeto qualquiera (incluso de otro frame)
function Obj(n,d) {  // Name, Document
  var p,i,x;

  if(!d)
    d=document;
  if((p=n.indexOf('?'))>0 && parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
  }
  if(!(x=d[n]) && d.all)
    x=d.all[n];
  for(i=0;!x && i<d.forms.length;i++)
    x=d.forms[i][n];
  for(i=0;!x && d.layers && i<d.layers.length;i++)
    x=Obj(n,d.layers[i].document);
  if(!x && d.getElementById)
    x=d.getElementById(n);
  return x;
}

// Recoje el evento de mouse move
function MMove(e) {
  if(nav)
    routeEvent(e);
  calendarX=(nav || n6)?e.clientX:event.x,calendarY=(nav || n6)?e.clientY:event.y;
  return false;

}
// Escriu el contingut d'una capa
function WrtDiv(n,text) {
  var o=Obj(n);
  
  if(nav) {
    o.document.write(unescape(text)+"<BR>");
    o.document.close();
  } else
    o.innerHTML=unescape(text);
}

// Mueve una capa
function MoveDiv(l,top,left)
{
  var o=Obj(l);
  o=o.style?o.style:o;
  o.top=parseInt(top)+'px';
  o.left=parseInt(left)+'px';
}

// Muestra o esconde una capa
function ShowHideDiv(l,s) {
  if(l) {
    var o=Obj(l);

    if(o.style) o=o.style;
    if(s) o.visibility='visible';
    else o.visibility='hidden';
  }
}

// Muestra el calendario
function calendarShow(div,month,year,textbox)
{
  calendarDiv=div;
  calendarTextBox=textbox;
  MoveDiv(calendarDiv,calendarY,calendarX);
  if (month==0 || year==0)
  {
    if (calendarTextBox.value!='')
    {
      var hoy=new Date(calendarTextBox.value.replace(/-/g,'/'));

      year=y2k(hoy.getYear());
      month=hoy.getMonth()+1;
    }
    else
    {
     var hoy=new Date();

      year=y2k(hoy.getYear());
      month=hoy.getMonth()+1;
    }
  }
  WrtDiv(calendarDiv,calendar(month,year));
  ShowHideDiv(calendarDiv,1);
}

// Hace que al hacer click en un dia se ponga la fecha en el campo
function ClickDay(day,month,year)
{
  ShowHideDiv(calendarDiv,0);
  if (calendarTextBox)
    calendarTextBox.value=year+"-"+month+"-"+day;
}

// Activa los eventos del link del calendario
function calendarEvents(l) {  // Layer
  l.onmousemove=MMove;
  if(nav) l.captureEvents(Event.MOUSEMOVE);
}

// Arregla problemas con el año 2000
function y2k(y) {
  if (y<=99)
    y= "19"+y;
  if ((y>99)&&(y<2000))
    y+=1900;
  return y;
}

function calendar(month,year) {
  // Parámetros
  var modo=1;
  var fuente="font-family:Verdana,Arial,Helvetica;font-size:9px";
  var espacioentreceldas=1;
  var espaciointeriorceldas=3;
  var colorfondo="#999999";
  var colorfondotitulo="#747F96";
  var colorfondonumeros="#ffffff";
  var colorfondodias="#33405C";
  var colordias="#000000";
  var colorfestivos="#ff0000";
  var colorhoy="#007700";
  var colortextotitulo="#ffffff";
  var colortextodias="#ffffff";
  var mostrardias=1;
  var anchocalendario=130;

  // Definiciones
  var out="";
  var monthNames=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  var monthDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var weekDays=new Array("L","M","M","J","V","S","D");
  var hoy=new Date();
  var thisDay;
  thisDay=hoy.getDate();
  if (month && year)
    var today=new Date(year,month-1,1,hoy.getHours(),hoy.getMinutes(),hoy.getSeconds());
  else
    var today=hoy;
  var year=y2k(today.getYear());
  var ini;
  var estilo;

  if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
      monthDays[1]=29;  // Años bisiestos
  
  nDays=monthDays[today.getMonth()];
  firstDay=today;
  firstDay.setDate(1);
  testMe=firstDay.getDate();
  if (testMe == 2)
    firstDay.setDate(0);

  if (!modo) ini=5;
  else ini=1;
  startDay=firstDay.getDay()-1;
  if(today.getMonth()-1<0) {
      var mant=12;
      var yant=y2k(today.getYear()-1);
  } else {
      var mant=today.getMonth();
      var yant=y2k(today.getYear());
  }
  if(today.getMonth()+2>12) {
      var mseg=1;
      var yseg=y2k(today.getYear()+1);
  } else {
      var mseg=today.getMonth()+2;
      var yseg=y2k(today.getYear());
  }
  out+="<TABLE BGCOLOR="+colorfondo+" BORDER=0 CELLSPACING=0 CELLPADDING=0><TR><TD>";
  out+="<TABLE BORDER=0 CELLSPACING="+espacioentreceldas+" CELLPADDING="+espaciointeriorceldas+" WIDTH="+anchocalendario+"><TR>";
  out+="<TD BGCOLOR="+colorfondotitulo+" COLSPAN="+(modo?7:monthDays[today.getMonth()])+">";
  out+="<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%><TR>";
  out+="<TD><A HREF='javascript:WrtDiv(calendarDiv,calendar("+mant+","+yant+"));' STYLE='text-decoration:none;'><FONT STYLE='"+fuente+"' COLOR="+colortextotitulo+"><B>&nbsp;<</B></FONT></A></TD>";
  out+="<TD align=center><A HREF='javascript:ShowHideDiv(calendarDiv,0)'><FONT STYLE='"+fuente+"' COLOR="+colortextotitulo+"><B>"+monthNames[today.getMonth()]+" "+year+"</B></FONT></A></TD>";
  out+="<TD align=right><A HREF='javascript:WrtDiv(calendarDiv,calendar("+mseg+","+yseg+"));' STYLE='text-decoration:none;'><FONT STYLE='"+fuente+"' COLOR="+colortextotitulo+"><B>>&nbsp;</B></FONT></A></TD>";
  out+="</TR></TABLE>";
  out+="</TD></TR>";
  // Los dias de la semana
  k=0;
  if(mostrardias) {
    out+="<TR align=center bgcolor="+colorfondodias+">";
    for (i=0;i<ini;i++) {
      if (!modo && i==0) iniweek=startDay;
      else iniweek=0;
      for (j=iniweek;j<7;j++) {
	out+="<TD><FONT STYLE='"+fuente+"' COLOR="+colortextodias+">"+((j==-1)?weekDays[6]:weekDays[j])+"</FONT></TD>";
	k++;
        if(k==nDays)
          break;
      }
      if(k==nDays)
        break;
    }
    out+="</TR>";
  }
  out+="<TR bgcolor="+colorfondonumeros+">";
  // Dias en blanco al inicio del mes
  column=0;
  if (modo) {
    for (i=0; i<startDay; i++) {
      if (i<startDay) {
        out+="<TD><FONT STYLE='"+fuente+"'>&nbsp;</FONT></TD>";
      }
      column++;
    }
  }
  // Dias del mes
  for (i=1; i<=nDays; i++) {
    if ((!modo && (column==6-startDay || column==13-startDay || column==20-startDay || column==27-startDay)) ||
        (modo && (column==6 || column==13 || column==20 || column==27 || column==34)))  // Festivos
      estilo="<FONT STYLE='"+fuente+"' COLOR="+colorfestivos+">";
    else if (i == thisDay && today.getMonth()==hoy.getMonth() && today.getYear()==hoy.getYear())  // Hoy
      estilo="<FONT STYLE='"+fuente+"' COLOR="+colorhoy+">";
    else
      estilo="<FONT STYLE='"+fuente+"' COLOR="+colordias+">";
    out+="<TD align=center><A HREF='javascript:ClickDay("+i+","+month+","+year+")' STYLE='text-decoration:none;'>"+estilo+i+"</FONT></A></TD>";
    column++;
    if (column==7 && i!=nDays && modo) {
      out+="</TR><TR bgcolor="+colorfondonumeros+">";
      column=0;
    }
  }
  // Dias en blanco al final del mes
  if (modo) {
    for (j=column; j<7; j++) {
      out+="<TD><FONT STYLE='"+fuente+"'>&nbsp;</FONT></TD>";
    }
  }
  out+="</TR></TABLE></TD></TR></TABLE>";
  return out;
}

function PrintDate(delay, tbox)
{
  var hoy=new Date();

  hoy.setTime(hoy.getTime()+delay*1000);
  tbox.value = y2k(hoy.getYear())+'-'+(hoy.getMonth()+1)+"-"+hoy.getDate();
}

function PrintTime(delay, tbox)
{
  var hoy=new Date();

  hoy.setTime(hoy.getTime());
  tbox.value = hoy.getHours()+':'+(hoy.getMinutes()<10?'0'+hoy.getMinutes():hoy.getMinutes());
}
