/*******************************************************************************
*                                                                              *
* Software: Calendar                                                           *
* Version : 2.5                                                                *
* Fecha   : 04/04/2008                                                         *
* Autor   : Victor SAISA LOPEZ                                                 *
* Licencia: Freeware (Libre)                                                   *
*                                                                              *
* **************************************************************************** *
* El software esta libre a cambios que puedan realizarse, no siendo el autor   *
* responsable de los efectos ocasionados.                                      *
*                                                                              *
* NOTA> El autor recomienda mantener el codigo  fuente  en  caso de usar       *
*       JavaScript como lenguaje de programacion.                              *
*******************************************************************************/

var nombreMes=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");var nombreDia=new Array("Dom","Lun","Mar","Mie","Jue","Vie","Sab");var div;var fieldDate;
var xx=0;var yy=0;

calendarAddEvent(window,"load",calendarInitEvent,false);

function calendarInitEvent(){for(var i=1;i<=nCalendar;i++){calendarAddEvent(document.getElementById("calendar"+i),"click",calendarEvent,false);document.getElementById("calendar"+i).className="iconCaldendar";document.getElementById("calendar"+i).title="Calendario";}}
function calendarGetAbsolutePos(element){var r={x:element.offsetLeft,y:element.offsetTop};
if(element.offsetParent){var tmp=calendarGetAbsolutePos(element.offsetParent);r.x=r.x+tmp.x;r.y=r.y+tmp.y;}return r;}
function calendarShowAt(x,y){xx=x;yy=y;}function calendarHideShowCovered(){var tag=new Array("applet","iframe","select");var calendar=div;var p=calendarGetAbsolutePos(calendar);var EX1=p.x;var EX2=calendar.offsetWidth + EX1;var EY1=p.y;var EY2=calendar.offsetHeight + EY1;
for(var k=tag.length;k>0;){var elemento=document.getElementsByTagName(tag[--k]);var obj=null;for(var i=elemento.length;i>0;){obj=elemento[--i];
p=calendarGetAbsolutePos(obj);var CX1=p.x;var CX2=obj.offsetWidth+CX1;var CY1=p.y;var CY2=obj.offsetHeight+CY1;
if((CX1>EX2) || (CX2<EX1) || (CY1>EY2) || (CY2<EY1)){//obj.style.visibility="visible";
obj.style.visibility="";}else{obj.style.visibility="hidden";
}}}}function calendarShowAtElement(element){var p=calendarGetAbsolutePos(element);calendarShowAt(p.x,p.y+element.offsetHeight);}

function calendarAddEvent(elemento,nombEvento,funcion,captura)
{  if(elemento.attachEvent)
   {  elemento.attachEvent("on"+nombEvento,funcion);
      return true;
   }
   else
   {  if(elemento.addEventListener)
      {  elemento.addEventListener(nombEvento,funcion,captura);
         return true;
      }
      else
      {  return false;
      }
   }
}

function calendarEvent(e)
{  if(window.event) //Windows
   {  var ref=window.event.srcElement;
      var c=ref.id;
   }
   else
   {  if(e) //Mozilla Firefox
      {  var ref=e.target;
 	     var c=ref.id;
      }
   }

   fieldDate=document.getElementById("date"+c.substr(8,1));

   calendarShowAtElement(fieldDate);
   calendarOpen();
}

//----------------------- METODOS - CALENDARIO ---------------------------------

function calendarOpen()
{  // Formato de la FECHA -> dd/mm/aaaa

   var dia;  // 1 a 31
   var mes;  // 0 a 11 (Ene a Dic)
   var anio;

   if(fieldDate.value=="")
   {  var fecha=new Date();
      dia=parseInt(fecha.getDate(),10);
      mes=parseInt(fecha.getMonth(),10);
	  anio=parseInt(fecha.getYear(),10);
	  if(anio-1900<0)
	  {  anio=anio+1900;
	  }
   }
   else
   {  dia=parseInt(fieldDate.value.substr(0,2),10);
      mes=parseInt(fieldDate.value.substr(3,2),10)-1;
      anio=parseInt(fieldDate.value.substr(6,4),10);
   }

   calendarInit(dia,mes,anio);
}

function calendarInit(d,m,a)
{  var cadena;
   var n;

   var dia=parseInt(d,10);
   var mes=parseInt(m,10);
   var anio=parseInt(a,10);

   if(mes==-1)
   {  mes=11;
      anio=anio-1;
   }
   else
   {  if(mes==12)
      {  mes=0;
	     anio=anio+1;
	  }
   }

   cadena="";

   cadena+="<table class='tablaCalendario' cellPadding='0' cellSpacing='0' border='0'>";
   cadena+="<tr>";
   cadena+="<td>";

   cadena+="<table class='calendarioTituloB' width='100%' cellpadding='0' cellspacing='0' border='0'>";
   cadena+="<tr>";
   cadena+="<td width='50%' align='left'>&nbsp;<font class='calTitulo'>Calendario</font></td>";
   cadena+="<td width='50%' align='right'><a class='calSalir' href='JavaScript:calendarExit();' title='Cerrar'>[ X ]</a>&nbsp;</td>";
   cadena+="</tr>";
   cadena+="</table>";

   cadena+="<table class='calendarioMesAnio' width='100%' cellpadding='0' cellspacing='4' border='0'>";
   cadena+="<tr>";

   cadena+="<td align='right'><a class='calAntSig' href='JavaScript:calendarInit("+dia+","+(mes-1)+","+anio+");'>&laquo;</a></td>";

   cadena+="<td align='center'>";
   cadena+="<select class='calTextBox' name='mes' onChange='JavaScript:calendarInit("+dia+",this.options[this.selectedIndex].value,"+anio+");'>";
   for(var i=0;i<=11;i++)
   {  if(i==mes)
      {  cadena+="<option value='"+i+"' selected>"+nombreMes[i]+"</option>";
	  }
	  else
	  {  cadena+="<option value='"+i+"'>"+nombreMes[i]+"</option>";
	  }
   }
   cadena+="</select>";
   cadena+="</td>";

   cadena+="<td><a class='calAntSig' href='JavaScript:calendarInit("+dia+","+(mes+1)+","+anio+");'>&raquo;</a></td>";

   cadena+="<td>&nbsp;</td>";

   cadena+="<td align='right'><a class='calAntSig' href='JavaScript:calendarInit("+dia+","+mes+","+(anio-1)+");'>&laquo;</a></td>";

   cadena+="<td align='center'>";
   cadena+="<select class='calTextBox' name='anio' onChange='JavaScript:calendarInit("+dia+","+mes+",this.options[this.selectedIndex].value);'>";
   for(var i=1940;i<=2050;i++)
   {  if(i==anio)
      {  cadena+="<option value='"+i+"' selected>"+i+"</option>";
	  }
	  else
	  {  cadena+="<option value='"+i+"'>"+i+"</option>";
	  }
   }
   cadena+="</select>";
   cadena+="</td>";

   cadena+="<td><a class='calAntSig' href='JavaScript:calendarInit("+dia+","+mes+","+(anio+1)+");'>&raquo;</a></td>";

   cadena+="</tr>";
   cadena+="</table>";

   cadena+="<table class='calendario' width='100%' cellpadding=0 cellspacing=1 border=0>";
   cadena+="<tr>";
   for(var i=0;i<=6;i++)
   {  cadena+="<td class='tdNombreDia' align='center'>"+nombreDia[i]+"</td>";
   }
   cadena+="</tr>";

   n=0;

   var diaSemana=new Date(anio,mes,1).getDay();
   var ultimoDia=new Date(anio,mes+1,0).getDate();

   cadena+="<tr>";
   for(var i=0;i<diaSemana;i++)
   {  cadena+="<td></td>";
      n=n+1;
   }

   for(var i=1;i<=ultimoDia;i++)
   {  if(n==7)
      {  cadena+="</tr><tr>";
	     n=0;
	  }

      if(n==0)
	  {  estilo="class='tdDomingo'";
	  }
	  else
	  {  estilo="class='tdDia'";
	  }

	  if(i==dia)
	  {  cadena+="<td class='tdDiaSelected' align='center'><a class='calDia' href='JavaScript:calendarReturnDate("+i+","+mes+","+anio+");calendarExit();'>"+i+"</a></td>";
	  }
	  else
	  {  cadena+="<td "+estilo+" align='center'><a class='calDia' href='JavaScript:calendarReturnDate("+i+","+mes+","+anio+");calendarExit();'>"+i+"</a></td>";
	  }
	  n=n+1;
   }

   if(n==7)
   {  cadena+="</tr>";
   }
   else
   {  for(var i=n;i<=6;i++)
      {  cadena+="<td></td>";
	  }
	  cadena+="</tr>";
   }
   cadena+="</table>";

   /*cadena+="<table class='calendarioTitulo' width='100%' border='0px' cellspacing='0px' cellpadding='0px'>";
   cadena+="<tr height='10px'>";
   cadena+="<td></td>";
   cadena+="</tr>";
   cadena+="</table>";*/

   cadena+="</td>";
   cadena+="</tr>";
   cadena+="</table>";

   //---------------------------------------------------------------------------
   if(document.getElementById("calendario"))
   {  document.getElementById("calendario").parentNode.removeChild(document.getElementById("calendario"));
   }
   div=document.createElement("div");
   div.id="calendario";
   div.style.position="absolute";
   div.style.left=xx+"px"; // X
   div.style.top=yy+"px";  // Y

   div.innerHTML=cadena;

   // append to document body
   document.body.appendChild(div);
   //---------------------------------------------------------------------------

   calendarHideShowCovered();

   //---------------------------------------------------------------------------
   if(document.getElementById("calendario"))
   {  document.getElementById("calendario").parentNode.removeChild(document.getElementById("calendario"));
   }
   div=document.createElement("div");
   div.id="calendario";
   div.style.position="absolute";
   div.style.left=xx+"px"; // X
   div.style.top=yy+"px";  // Y

   div.innerHTML=cadena;

   // append to document body
   document.body.appendChild(div);
}

/*------------------------------------------------------------------------------
calendarReturnDate(d,m,a)
=========================
Este metodo puede ser inicialmente bloqueado en "Calendar.js" pare ser
implementado o utilizado en otro archivo para un uso especifico
------------------------------------------------------------------------------*/
function calendarReturnDate(d,m,a)
{  var dia=""+d;
   var mes=""+(m+1);
   var anio=""+a;

   if(dia.length==1)
   {  dia="0"+dia;
   }
   if(mes.length==1)
   {  mes="0"+mes;
   }

   // Formato de la FECHA -> dd/mm/aaaa
   fieldDate.value=dia+"/"+mes+"/"+anio;
}

function calendarExit()
{  // remove from browser document
   div.parentNode.removeChild(div);

   resetElementsCALENDAR();
}

function resetElementsCALENDAR()
{  var tag=new Array("applet","iframe","select");

   for(var kk=tag.length;kk>0;)
   {  var elemento=document.getElementsByTagName(tag[--kk]);
      var obj=null;

	  for(var ii=elemento.length;ii>0;)
	  {  obj=elemento[--ii];

		 obj.style.visibility="";
      }
   }
}