	var Capa;
	var DiaActivo=0;
	var CalMovOk=false;
	var tmpX,tmpY;
	var Ano,Mes;

	function Sombrear(e)
  {
		var o=Ie?e.srcElement:e.target;
    while (o.id==""){ o=o.parentNode;}
    id=o.id;
    Obj=GId(id);
    if (Ne) att=Color(Obj.style.color);

		if (e.type=="mouseout")
			var Estilo="DiaCalOut";
		else
			var Estilo="DiaCalOver";

    if (Obj.nodeName=="TR")
    {
      if (td=Obj.getElementsByTagName("TD"))
      for (var i=0;i<td.length;i++)
      {
				td.item(i).className=Estilo;
      }
    }
    else
    {
			Obj.className=Estilo;
    }
  }

  function SalirCal()
  {
    div=GId("divcal");
    frm=div;
    while (frm.nodeName!="FORM") { frm=frm.parentNode; }
    frm.removeChild(div);
    tmpX=null;
    tmpY=null;
    return ;
  }

  function ClkAnoMes()
  {
    CalMovOk=false;
    obj=arguments[0].target;
    if (obj.name=="mes")
    { Mes=GId(obj.name).value; } else { Ano=GId(obj.name).value; }
    div=GId("divcal");
    frm=obj;
    while (frm.nodeName!="FORM") { frm=frm.parentNode; }
    frm.removeChild(div);
    calendario(obj,Ano,Mes);
  }

  function ClickDia(obj)
  {
    id=obj.id.substr(3);
		GId("cal"+DiaActivo).className="DiaCalOut";
		GId(obj.id).className="DiaCalOn";
    DiaActivo=id;
  }

  function ActDia(obj)
  {
		dia=obj.id.replace(/[^0-9]/g,'');
    if(DiaActivo==dia) GId(obj.id).className="DiaCalOn";
  }

  function DblClkDia()
  {
	  CalMovOk=false;
    dd=DiaActivo;
    dd=(dd.length==1?"0":"")+dd;
    mm=(Number(GId("mes").value)+1).toString();
    mm=(mm.length==1?"0":"")+mm;
    aa=GId("ano").value
    fecha=dd+"/"+mm+"/"+aa;
    frm=arguments[0];
    while (frm.nodeName!="FORM") { frm=frm.parentNode; }
    frm.removeChild(GId("divcal"));
    GId(Capa.name).value=fecha;
  }

  function OnDivCal(e)
  {
    if (e.which==1)
    {
      if (GId("divcal"))
      with(GId("divcal"))
      {
        if ((e.pageX>=offsetLeft)&&(e.pageX<=(offsetLeft+offsetWidth))&&
         (e.pageY>=offsetTop)&&(e.pageY<=(offsetTop+offsetHeight)))
          return true;
        else
          return false;
      }
    }
  }

	function mousedown(e)
  {
		if (e.which==3)
    {
      div=GId("divcal");
      frm=div;
      while (frm.nodeName!="FORM") { frm=frm.parentNode; }
      frm.removeChild(div);
      tmpX=null;
      tmpY=null;
			CalMovOk=false;
      return ;
    }
		
		id=Ie?e.srcElement.id:e.target.id;
    if ((id=="mes") ||(id=="ano")) return;
    if (OnDivCal(e)) CalMovOk=true;else CalMovOk=false;
   }

	function mouseup(e)
  {
		id=Ie?e.srcElement.id:e.target.id;
    if ((id=="mes") ||(id=="ano")) return;
    if ((e.which==1)&&(CalMovOk==true)) { CalMovOk=false; }
  }

  function mousemove(e)
  {
	  if ((e.which==1)&&(CalMovOk==true))
    {
  	  tmpY=e.pageY;
      tmpX=e.pageX;
      GId("divcal").style.top=(e.pageY-10)+"px";
      GId("divcal").style.left=(e.pageX-10)+"px";
    }
  }

	function calendario()
 	{
	  if (!(arguments[1]))
    {
  	  if ((GId("divcal")) && (frm=GId("divcal")))
      {
    	  while (frm.nodeName!="FORM") { frm=frm.parentNode; }
        frm.removeChild(GId("divcal"));
      }
    }

    evecal="onmouseover,Sombrear(event);ActDia(this);,onmouseout,Sombrear(event);ActDia(this);,onclick,ClickDia(this);,ondblclick,DblClkDia(this);";
    mes=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
    DiaMes=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    sem=new Array("Dom","Lun","Mar","Mie","Jue","Vie","Sab");

    if(Capa == undefined)
    {
			Capa=GId(arguments[0]);
      frm=Capa;
      while (frm.nodeName!="FORM") { frm=frm.parentNode; }
    }

    hoy = new Date();
    if (arguments[1]) Ano=arguments[1];else if((Capa.value=="")||(Capa.value=="00-00-0000")) Ano=hoy.getFullYear();
		else Ano=Capa.value.substr(6,4);

    if (arguments[2]) Mes=arguments[2];else if((Capa.value=="")||(Capa.value=="00-00-0000")) Mes=hoy.getMonth();
		else Mes=Number(Capa.value.substr(3,2))-1;

	  if((Capa.value=="")||(Capa.value=="00-00-0000")) Dia=hoy.getDate()-1;
		else Dia=Number(Capa.value.substr(0,2));

    if (DiaActivo==0) DiaActivo=Dia;
    if (DiaActivo>DiaMes[Mes]) DiaActivo=DiaMes[Mes];
    if ((Ano%4)==0) DiaMes[1]=29;
    Fecha=new Date(Ano,Mes,1);
    IniMes=Fecha.getDay();

    var div=AddObj("DIV","id,divcal,onmousemove,mousemove(event);,onmousedown,mousedown(event);,onmouseup,mouseup(event);");
    var tabla=AddObj("TABLE");
    var tr=AddObj("TR");
    var td=AddObj("TH","width,15px","Mes");
    tr.appendChild(td);

   	var sel=AddObj("SELECT","id,mes,name,mes,onchange,ClkAnoMes(event);");
    for(var i=0;i<12;i++)
    {
	    if (i==Mes)
          sel.appendChild(AddObj("OPTION","value,"+i+",selected,true",mes[i]));
      else
          sel.appendChild(AddObj("OPTION","value,"+i,mes[i]));
    }
    var td=AddObj("TD");
    td.appendChild(sel);
    tr.appendChild(td);
    var td=AddObj("TH","width,15px","Aņo");
    tr.appendChild(td);

    var sel=AddObj("SELECT","id,ano,name,ano,onchange,ClkAnoMes(event);");
    for(var a=1900;a<2030;a++)
    {
      if (a==Ano) sel.appendChild(AddObj("OPTION","value,"+a+",selected,true",a.toString()));
      else        sel.appendChild(AddObj("OPTION","value,"+a,a.toString()));
    }

    var td=AddObj("TD");
    td.appendChild(sel);
    tr.appendChild(td);
		var IMG=AddObj("IMG","src,."+DirImg+"salida.jpg");
    var td=AddObj("TD","onclick,SalirCal(event);",IMG);
    tr.appendChild(td);
    tabla.appendChild(tr);

    var tablaP=AddObj("TABLE","id,tbl-P,border,2");
    var tr=AddObj("TR");
    var td=AddObj("TD");
    td.appendChild(tabla);
    tr.appendChild(td);
    tablaP.appendChild(tr);
    tabla=AddObj("TABLE");
    var tr=AddObj("TR");
    for (var d=0;d<7;d++) tr.appendChild(AddObj("TH","",sem[d]));
    tabla.appendChild(tr);
    PrimeraVes=true;
    dia=0;

    for (var f=0;f<6;f++)
    {
      var tr=AddObj("TR");
      for (var d=0;d<7;d++)
      {
         if ((PrimeraVes)&&(d==IniMes)) PrimeraVes=false;
         if (!PrimeraVes) dia++;
         if ((dia>0)&&(dia<=DiaMes[Mes]))
         {
					if (Dia==dia)
						tr.appendChild(AddObj("TD","id,cal"+dia.toString()+",class,DiaCalOn,"+evecal,dia.toString()));
          else
						tr.appendChild(AddObj("TD","id,cal"+dia.toString()+",class,DiaCalOff,"+evecal,dia.toString()));
         }
         else
           tr.appendChild(AddObj("TD","class,calendario"));
      }
      tabla.appendChild(tr);
      if (dia>=DiaMes[Mes]) break;
    }

   	var tr=AddObj("TR");
   	var td=AddObj("TD");
   	td.appendChild(tabla);
   	tr.appendChild(td);
   	tablaP.appendChild(tr);
   	div.appendChild(tablaP);

   	frm.appendChild(div);
   	if (tmpX != undefined)
   	{
   		GId("divcal").style.top=tmpY+"px";
    	GId("divcal").style.left=tmpX+"px";
   	}
 	}
  
	function ValidaFecha(e)
  {
		var obj=GId(Ie?e.srcElement.id:e.target.id);
		var tecla = Ie?e.keyCode:e.which;
    if (tecla!=keyCr)
    {
      if ((tecla>=48)&&(tecla<=57))
      {
				var largo=Ie?e.srcElement.value.length:e.target.value.length;
				switch(largo)
        {
        	case 2:	if (Ie)	e.srcElement.value+="-";else e.target.value+="-";
                break;
          case 5: if (Ie)	e.srcElement.value+="-";else e.target.value+="-";
                break;
        }
        return true;
      }
      else
      {
      	switch (tecla)
        {
        	  case 8:return e;break;
          	case 0: if ((e.keyCode==keyLeft)||(e.keyCode==keyRigth)||(e.keyCode==keySupr)||(e.keyCode==keyTab)) return true;
              break;
        }
        return false;
      }
    }
    else
    {
    	return fechaOk(obj);
    }
  }

	function fechaOk(obj)
  {
  	if (!Number(obj.value.substr(6,4)))
    {  alert ("Aņo invalido"); obj.value="";obj.focus;return false;}
    else
    {
    	a=Number(obj.value.substr(6,4));
      if ((a<1910) || (a >2020)) { alert ("Aņo invalido"); obj.value="";obj.focus;return false; }
    }

    if (!Number(obj.value.substr(3,2))) { alert ("Mes invalido"); obj.value="";obj.focus;return false;}
    else
    {
    	m=Number(obj.value.substr(3,2));
      if ((m<1) || (m>12)){ alert ("Mes invalido"); obj.value="";obj.focus;return false; }
    }

    if (Number(obj.value.substr(0,2))) //dia
    {
    	d=Number(obj.value.substr(0,2));
      if(m==2)//mes
      {
      	if ((a%4)!=0)//normal
        { if (d>28) {alert ("Dia invalido");obj.value="";obj.focus;return; false} }
        else
        { if (d>29) {alert ("Dia invalido");obj.value="";obj.focus;return false;}}
      }
      else
      {
      	mes=Array(31,28,31,30,31,30,31,31,30,31,30,31);
        if ((d<1) || (d>mes[m-1])) { alert ("Dia invalido");obj.value="";obj.focus;return false;}
      }
    }
    else
    { alert ("Dia invalido");obj.value="";obj.focus; return false;}

    return true;
  }

