// +------------------------------------------------------------+
// |                    Popup Calendar(Tile)                    |
// +------------------------------------------------------------+
// | Last Modified:                  06-Jan-2003                |
// | Web Site:                       http://www.yxScripts.com   |
// | EMail:                          m_yangxin@hotmail.com      |
// +------------------------------------------------------------+
// |       Copyright 2003  Xin Yang   All Rights Reserved.      |
// +------------------------------------------------------------+

// default settings
// ----------------
var yx_calFormat="mm/dd/yyyy";
var yx_weekDay=0;
var yx_dayDigits=1;
var yx_tagCellsOn=1;
var yx_footBarOn=1;
var yx_calMode=1;

var yx_headBar=[
1,"solid","#6699cc",
100,1,
"sans-serif",12,"#ffffff","normal",
"#6699cc",2,

1,"inset","#6699cc",
15,1,
"sans-serif",12,"#ffffff","normal",
"#6699cc",3,
0,

"&#139;","&#155;","&#171;","&#187;",

1,"outset","#6699cc",
0,0,
"#6699cc",1
];

var yx_dayCells=[
1,
"solid", "outset",  "solid",  "solid",  "solid",  "solid",
"#6699cc","#6699cc","#6699cc","#6699cc","#6699cc","#ffffff",
24,1,
"sans-serif",12,
"#ffffff","#ffffff","#000000",          "#999999","#ffffff",
"center","normal",
"#6699cc","#6699cc","#ffffff","#f0f0f0","#f0f0f0","#6699cc",
4,        6,        3,        1,        2,        5,
-1
];

var yx_footBar=[
1,"inset","#6699cc",
42,1,
"sans-serif",12,"#ffffff","normal",
"#6699cc",2,
0,

"Clear","Close",

 1,"outset","#6699cc",
0,0,
"#6699cc",1
];

var yx_basePad=[
0,"solid","#6699cc",
0,0,
"#ffffff",

1,1,1,
100
];

var yx_monthTitles=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var yx_dayTitles=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
// ----------------

// codes
var yx_cal="yx_cal";
var yx_cals=new Array();
var yx_curCal=null;
var yx_days=new Array(), yx_offsets=new Array(), yx_mTag=null;
var yx_pw=0, yx_ph=0, yx_hw=0, yx_hh=0, yx_fw=0, yx_fh=0, yx_mw=0, yx_mh=0, yx_tw=0, yx_th=0, yx_cw=0, yx_ch=0, yx_lw=0, yx_lh=0, yx_bw=0, yx_bh=0;
var yx_cY, yx_cM, yx_onBC="", yx_outBC="", yx_mx=0, yx_my=0;

var yx_isKon=(navigator.userAgent.indexOf("Konqueror")!=-1);
var yx_isOpera=(navigator.userAgent.indexOf("Opera")!=-1);
var yx_isMac=(navigator.userAgent.indexOf("Mac")!=-1);

var yx_isIE=(typeof(document.all)!="undefined" && !yx_isOpera && !yx_isKon);
var yx_isIE4=(yx_isIE && navigator.appVersion.indexOf("MSIE 4")!=-1);
var yx_isIE5=(yx_isIE && !yx_isIE4);
var yx_isN6=(navigator.userAgent.indexOf("Gecko")!=-1);
var yx_isK3=(yx_isKon && navigator.appVersion.indexOf('Konqueror/3')!=-1);

var yx_calSafe=(yx_isK3 || yx_isIE4 && !yx_isMac || yx_isIE5 || yx_isN6);
var yx_goDTD=(yx_isN6 || yx_isK3)?true:(yx_isIE5)?(((document.doctype)?document.doctype.name.indexOf(".dtd")!=-1:false)||((document.compatMode)?document.compatMode=="CSS1Compat":false)):false;
var yx_ptr=yx_isIE?"hand":"pointer";

function yxLayersIE4(id) {
  return document.all[id];
}
function yxLayersDOM(id) {
  return document.getElementById(id);
}
var yxLayers=(yx_isIE4)?yxLayersIE4:yxLayersDOM;

function yx_getLeft(l) { return l.offsetLeft+(l.offsetParent?yx_getLeft(l.offsetParent):(yx_isIE && yx_isMac)?parseInt(document.body.leftMargin):0); }
function yx_getTop(l) { return l.offsetTop+(l.offsetParent?yx_getTop(l.offsetParent):(yx_isIE && yx_isMac)?parseInt(document.body.topMargin):0); }

function yx_toHex(num) {
  var hexStr="0123456789ABCDEF", num2=num%16, num1=(num-num2)/16;
  return hexStr.charAt(num1)+hexStr.charAt(num2);
}

function yx_toTen(num) {
  var hexStr="0123456789ABCDEF";
  return hexStr.indexOf(num.toUpperCase());
}

function yx_fromHex(num) {
  var char1=num.charAt(0), char2=num.charAt(1);
  return yx_toTen(char1)*16+yx_toTen(char2);
}

function yx_getColor(color, m) {
  var red=color.substring(1,3), green=color.substring(3,5), blue=color.substring(5,7);
  var num1=yx_fromHex(red)+m*51, num2=yx_fromHex(green)+m*51, num3=yx_fromHex(blue)+m*51;
  if (num1<0) { num1=0; }
  if (num1>255) { num1=255; }
  if (num2<0) { num2=0; }
  if (num2>255) { num2=255; }
  if (num3<0) { num3=0; }
  if (num3>255) { num3=255; }
  return "#"+yx_toHex(num1)+yx_toHex(num2)+yx_toHex(num3);
}

function yx_getBC(bs,bc) {
  var cl=(bs=="outset")?yx_getColor(bc,1):(bs=="inset")?yx_getColor(bc,-1):bc;
  var cd=(bs=="outset")?yx_getColor(bc,-1):(bs=="inset")?yx_getColor(bc,1):bc;
  return (cl+" "+cd+" "+cd+" "+cl);
}

function yx_getID() { return "yxID"+(++yxCount)+""; }; var yxCount=0;
function yx_getDIV() { return document.createElement("DIV"); }
function yx_makeLayerIE4(l,x,y,w,h,bw,bs,bc,pw,ph,ff,fs,fc,fa,fw,bkc,c,vis,idx) {
  var xID=yx_getID(), holder=(l==null)?document.body:l;
  var bstr=(bw>0)?("border-width:"+bw+"px; border-style:solid; border-color:"+yx_getBC(bs,bc)+"; "):"";
  var rh=(h>0)?("height:"+h+"px; "):"";

  holder.insertAdjacentHTML("AfterBegin",('<div id="'+xID+'" style="position:absolute; left:'+x+'px; top:'+y+'px; width:'+w+'px; '+rh+bstr+'padding:'+ph+'px '+pw+'px; font-family:'+ff+'; font-size:'+fs+'px; color:'+fc+'; text-align:'+fa+'; font-weight:'+fw+'; background-color:'+bkc+'; visibility:'+vis+'; z-index:'+idx+';"><nobr>'+c+'</nobr></div>'));

  return document.all[xID];
}
function yx_makeLayerRest(l,x,y,w,h,bw,bs,bc,pw,ph,ff,fs,fc,fa,fw,bkc,c,vis,idx) {
  var xx=yx_getDIV(), holder=(l==null)?document.body:l;
  with (xx.style) { position="absolute"; visibility=vis; left=x+"px"; top=y+"px"; zIndex=idx; }
  if (yx_isIE5) {
    holder.insertBefore(xx,holder.firstChild);
  }
  else {
    holder.appendChild(xx);
  }

  xx.innerHTML=c;
  with (xx.style) {
    if (yx_goDTD) {
      width=(w-(bw+pw)*2)+"px";
      if (h>0) { height=(h-(bw+ph)*2)+"px"; }
    }
    else {
      width=w+"px";
      if (h>0) { height=h+"px"; }
    }
    if (bw>0) {
      borderWidth=bw+"px"; borderStyle="solid"; borderColor=yx_getBC(bs,bc);
    }
    padding=ph+"px "+pw+"px";
    fontFamily=ff; fontSize=fs+"px"; color=fc; textAlign=fa; fontWeight=fw;
    backgroundColor=bkc;
  }

  return xx;
}
var yx_makeLayer=(yx_isIE4)?yx_makeLayerIE4:yx_makeLayerRest;

function yx_calOBJ(name, id, id2, field, form, dx, dy, date, sun, sat, wkg) {
  this.name=name;
  this.id=id; this.id2=id2;
  this.field=field; this.formName=form; this.form=null;
  this.dx=dx; this.dy=dy;
  this.date=date;
  this.Sun=sun; this.Sat=sat; this.work=wkg;
  this.range=null; this.rangeOn=new Array(); this.rangeOff=new Array(); this.datesOn=""; this.datesOff="";
}

function addCalendar(name, id, id2, field, form, dx, dy, date, sun, sat, wkg) {
  yx_cals[yx_cals.length]=new yx_calOBJ(name, id, id2, field, form, dx, dy, date, sun, sat, wkg);
}

function findCal(name) {
  for (var i=0; i<yx_cals.length; i++) {
    if (yx_cals[i].name==name) {
      if (yx_cals[i].form==null) {
        if (yx_cals[i].formName=="") {
          if (document.forms[0]) {
            yx_cals[i].form=document.forms[0];
          }
        }
        else if (document.forms[yx_cals[i].formName]) {
          yx_cals[i].form=document.forms[yx_cals[i].formName];
        }
      }

      return yx_cals[i];
    }
  }

  return null;
}

function setRange(name, start, end) {
  var cal=findCal(name);
  if (cal!=null) {
    cal.range=new Array(start, end);
  }
}

function enableRange(name, start, end) {
  var cal=findCal(name);
  if (cal!=null) {
    cal.rangeOn[cal.rangeOn.length]=new Array(start, end);
  }
}

function disableRange(name, start, end) {
  var cal=findCal(name);
  if (cal!=null) {
    cal.rangeOff[cal.rangeOff.length]=new Array(start, end);
  }
}

function enableDates(name, dates) {
  var cal=findCal(name);
  if (cal!=null) {
    cal.datesOn+=dates+", ";
  }
}

function disableDates(name, dates) {
  var cal=findCal(name);
  if (cal!=null) {
    cal.datesOff+=dates+", ";
  }
}

function yx_getDayTitle(y, m, d) {
  return yx_dayTitles[(new Date(y,m,d)).getDay()].substring(0,3);
}

function yx_getMonthFromTitle(m3) {
  for (var i=0; i<yx_monthTitles.length; i++) {
    if (yx_monthTitles[i].toLowerCase().substring(0,3)==m3.toLowerCase()) {
      return i;
    }
  }

  return 0;
}

function yx_getFormat() {
  var calF=yx_calFormat;

  calF=calF.replace(/\\/g, '\\\\');
  calF=calF.replace(/\//g, '\\\/');
  calF=calF.replace(/\[/g, '\\\[');
  calF=calF.replace(/\]/g, '\\\]');
  calF=calF.replace(/\(/g, '\\\(');
  calF=calF.replace(/\)/g, '\\\)');
  calF=calF.replace(/\{/g, '\\\{');
  calF=calF.replace(/\}/g, '\\\}');
  calF=calF.replace(/\</g, '\\\<');
  calF=calF.replace(/\>/g, '\\\>');
  calF=calF.replace(/\|/g, '\\\|');
  calF=calF.replace(/\*/g, '\\\*');
  calF=calF.replace(/\?/g, '\\\?');
  calF=calF.replace(/\+/g, '\\\+');
  calF=calF.replace(/\^/g, '\\\^');
  calF=calF.replace(/\$/g, '\\\$');

  calF=calF.replace(/dd/i, '\\d\\d');
  calF=calF.replace(/mm/i, '\\d\\d');
  calF=calF.replace(/yyyy/i, '\\d\\d\\d\\d');
  calF=calF.replace(/day/i, '\\w\\w\\w');
  calF=calF.replace(/mon/i, '\\w\\w\\w');

  return new RegExp(calF);
}

function yx_getDateNumbers(date) {
  var y,m,d;

  var yIdx=yx_calFormat.search(/yyyy/i);
  var mIdx=yx_calFormat.search(/mm/i);
  var m3Idx=yx_calFormat.search(/mon/i);
  var dIdx=yx_calFormat.search(/dd/i);

  y=date.substring(yIdx,yIdx+4)-0;
  if (mIdx!=-1) {
    m=date.substring(mIdx,mIdx+2)-1;
  }
  else {
    m=yx_getMonthFromTitle(date.substring(m3Idx,m3Idx+3));
  }
  d=date.substring(dIdx,dIdx+2)-0;

  return new Array(y,m,d);
}

function yx_hideIt() {
  yx_hideCal(); // K3 can't use yx_hideCal for onclick
}

function yx_hideCal() {
  if (yx_calMode==1) {
    yxLayers(yx_cal).style.visibility="hidden";
  }
  window.status="";
}

function yx_lastDate(d) {
  var yy=d.getFullYear(), mm=d.getMonth();
  for (var i=31; i>=28; i--) {
    var nd=new Date(yy,mm,i);
    if (mm==nd.getMonth()) {
      return i;
    }
  }
  return 31;
}

function yx_firstDay(d) {
  return (new Date(d.getFullYear(),d.getMonth(),1)).getDay();
}

function checkRange(dir) {
  var fd=new Date(yx_cY,yx_cM,1);
  if (dir<0) {
    fd=new Date(yx_cY,yx_cM,yx_lastDate(fd));
    if (compareDates(yx_getDate(fd),yx_curCal.range[0])<0) {
      var lr=yx_getDateNumbers(yx_curCal.range[0]);
      yx_cY=lr[0]; yx_cM=lr[1];
    }
  }
  else {
    if (compareDates(yx_getDate(fd),yx_curCal.range[1])>0) {
      var lr=yx_getDateNumbers(yx_curCal.range[1]);
      yx_cY=lr[0]; yx_cM=lr[1];
    }
  }
}

function yx_pYear() {
  yx_moveYear(-1);
}
function yx_nYear() {
  yx_moveYear(1);
}

function yx_moveYear(dy) {
  yx_cY+=dy;
  if (yx_curCal.range!=null) { checkRange(dy); }

  yx_changeCal(new Date(yx_cY,yx_cM,1));
}

function yx_pMonth() {
  yx_moveMonth(-1);
}
function yx_nMonth() {
  yx_moveMonth(1);
}

function yx_moveMonth(dm) {
  yx_cM+=dm;
  if (yx_cM<0) { yx_cM=11; yx_cY--; }
  if (yx_cM>11) { yx_cM=0; yx_cY++;}
  if (yx_curCal.range!=null) { checkRange(dm); }

  yx_changeCal(new Date(yx_cY,yx_cM,1));
}

function yx_onCell() {
  with (this.style) {
    color=yx_dayCells[21]; backgroundColor=yx_dayCells[29]; zIndex=yx_dayCells[35]; borderColor=yx_onBC;
  }
}

function yx_outCell() {
  with (this.style) {
    color=yx_dayCells[19]; backgroundColor=yx_dayCells[26]; zIndex=yx_dayCells[32]; borderColor=yx_outBC;
  }
}

function yx_prepareCal(d, day) {
  var yy=d.getFullYear(), mm=d.getMonth();
  var dc=1, fd=yx_firstDay(d), ld=yx_lastDate(d);

  if (yx_weekDay>0 && fd==0) {
    fd=7;
  }

  yx_mTag.myMonth=mm;
  yx_mTag.innerHTML=yx_monthTitles[mm]+"&nbsp;"+yy;
  yx_mTag.style.height=yx_goDTD?yx_mh-(yx_headBar[0]+yx_headBar[4])*2:yx_mh; // for IEMac

  var bs, bc, fc, bkc, cl, cd, zidx, theCell, nd, dstr, dateOff, wd;
  for (var i=0; i<6; i++) {
    for (var j=yx_weekDay; j<yx_weekDay+7; j++) {
      if (i*7+j<fd || dc>ld) {
        if (dc<=31) {
          yx_days[dc].style.zIndex=-1;
        }
      }
      else {
        theCell=yx_days[dc]; nd=new Date(yy,mm,dc); wd=nd.getDay(); dstr=yx_getDate(nd); dateOff=false;
        if (yx_curCal.Sun==0 && wd==0 || yx_curCal.Sat==0 && wd==6 || yx_curCal.work==0 && wd!=0 && wd!=6) {
          dateOff=true;
        }
        if (dateOff) {
          for (var ii=0; ii<yx_curCal.rangeOn.length; ii++) {
            if (compareDates(yx_curCal.rangeOn[ii][0],dstr)<=0 && compareDates(dstr,yx_curCal.rangeOn[ii][1])<=0) {
              dateOff=false; break;
            }
          }
        }
        if (!dateOff) {
          for (var ii=0; ii<yx_curCal.rangeOff.length; ii++) {
            if (compareDates(yx_curCal.rangeOff[ii][0],dstr)<=0 && compareDates(dstr,yx_curCal.rangeOff[ii][1])<=0) {
              dateOff=true;
            }
          }
        }
        if (yx_curCal.datesOn.indexOf(dstr)!=-1) {
          dateOff=false;
        }
        if (yx_curCal.datesOff.indexOf(dstr)!=-1) {
          dateOff=true;
        }
        if (!dateOff && yx_curCal.range!=null) {
          if (compareDates(yx_curCal.range[0],dstr)>0 || compareDates(dstr,yx_curCal.range[1])>0) {
            dateOff=true;
          }
        }

        if (dateOff) {
          bs=yx_dayCells[5]; bc=yx_dayCells[11]; fc=yx_dayCells[20]; bkc=yx_dayCells[28]; zidx=yx_dayCells[34];

          theCell.onmouseover=null; theCell.onmouseout=null;
          theCell.on=false; theCell.style.cursor="default";
        }
        else if (dc==day) {
          bs=yx_dayCells[2]; bc=yx_dayCells[8]; fc=yx_dayCells[18]; bkc=yx_dayCells[25]; zidx=yx_dayCells[31];

          theCell.onmouseover=null; theCell.onmouseout=null;
          theCell.on=true; theCell.style.cursor=yx_ptr;
        }
        else {
          bs=yx_dayCells[3]; bc=yx_dayCells[9]; fc=yx_dayCells[19]; bkc=yx_dayCells[26]; zidx=yx_dayCells[32];

          theCell.onmouseover=yx_onCell; theCell.onmouseout=yx_outCell;
          theCell.on=true; theCell.style.cursor=yx_ptr;
        }

        with (theCell.style) {
          left=yx_offsets[i][j-yx_weekDay][0]+"px";
          top=yx_offsets[i][j-yx_weekDay][1]+"px";

          borderColor=yx_getBC(bs,bc);
          color=fc; backgroundColor=bkc;
          zIndex=zidx;
        }

        dc++;
      }
    }
  }
}

function yx_changeCal(d) {
  var dd=0;

  if (yx_curCal!=null) {
    var calRE=yx_getFormat();

    if (yx_curCal.form[yx_curCal.field].value!="" && calRE.test(yx_curCal.form[yx_curCal.field].value) || yx_curCal.date!="" && calRE.test(yx_curCal.date)) {
      var cd=yx_getDateNumbers((yx_curCal.form[yx_curCal.field].value!="")?yx_curCal.form[yx_curCal.field].value:yx_curCal.date);
      if (cd[0]==d.getFullYear() && cd[1]==d.getMonth()) {
        dd=cd[2];
      }
    }
    else {
      var cd=new Date();
      if (cd.getFullYear()==d.getFullYear() && cd.getMonth()==d.getMonth()) {
        dd=cd.getDate();
      }
    }
  }

  yx_prepareCal(d,dd);
}

function showCal(name) {
  if (!yx_calSafe) { return; }

  var lastCal=yx_curCal;
  var d=new Date();

  yx_curCal=findCal(name);

  if (yx_curCal!=null && yx_curCal.form!=null && yx_curCal.form[yx_curCal.field]) {
    var calRE=yx_getFormat();

    if (yx_curCal.form[yx_curCal.field].value!="" && calRE.test(yx_curCal.form[yx_curCal.field].value) || yx_curCal.date!="" && calRE.test(yx_curCal.date)) {
      var cd=yx_getDateNumbers((yx_curCal.form[yx_curCal.field].value!="")?yx_curCal.form[yx_curCal.field].value:yx_curCal.date);
      d=new Date(cd[0],cd[1],cd[2]);

      yx_cY=cd[0];
      yx_cM=cd[1];
      dd=cd[2];
    }
    else {
      yx_cY=d.getFullYear();
      yx_cM=d.getMonth();
      dd=d.getDate();
    }

    yx_prepareCal(d,dd);

    var cx, cy;
    if (yx_curCal.id=="" && yx_curCal.id2=="") {
      cx=yx_mx; cy=yx_my;
    }
    else {
      var l=yxLayers((yx_isK3 && yx_curCal.id2!="")?(yx_curCal.id2):(yx_curCal.id));
      cx=yx_getLeft(l); cy=yx_getTop(l);
    }
    
    yxLayers(yx_cal).style.left=cx+yx_curCal.dx+"px";
    yxLayers(yx_cal).style.top=cy+yx_curCal.dy+"px";
    yxLayers(yx_cal).style.visibility="visible";
    
  }
  else {
    if (yx_curCal==null) {
      window.status="Calendar ["+name+"] not found.";
    }
    else if (!yx_curCal.form) {
      window.status="Form ["+yx_curCal.formName+"] not found.";
    }
    else if (!yx_curCal.form[yx_curCal.field]) {
      window.status="Form Field ["+yx_curCal.formName+"."+yx_curCal.field+"] not found.";
    }

    if (lastCal!=null) {
      yx_curCal=lastCal;
    }
  }
}

function yx_get2Digits(n) {
  return ((n<10)?"0":"")+n;
}

function yx_clearDate() {
  yx_curCal.form[yx_curCal.field].value="";

  if (yx_calMode==0) {
    yx_prepareCal(new Date(yx_cY,yx_cM,1),0);
  }

  yx_hideCal();
}

function yx_pickIt() {
  if (this.myDay==0) {
    yx_clearDate();
  }
  else if (this.on) {
    yx_pickDate(this.myDay);
  }
}

function yx_pickDate(d) {
  var date=yx_calFormat;
  date=date.replace(/yyyy/i, yx_cY);
  date=date.replace(/mm/i, yx_get2Digits(yx_cM+1));
  date=date.replace(/MON/, yx_monthTitles[yx_cM].substring(0,3).toUpperCase());
  date=date.replace(/Mon/i, yx_monthTitles[yx_cM].substring(0,3));
  date=date.replace(/dd/i, yx_get2Digits(d));
  date=date.replace(/DAY/, yx_getDayTitle(yx_cY,yx_cM,d).toUpperCase());
  date=date.replace(/day/i, yx_getDayTitle(yx_cY,yx_cM,d));

  yx_curCal.form[yx_curCal.field].value=date;

  if (yx_calMode==0) {
    var nd=new Date(yx_cY,yx_cM,d);
    yx_prepareCal(nd,d);
  }

  yx_hideCal();
}

function yx_clickIt(e) {
  if (yx_isIE || yx_isK3) {
    yx_mx=event.clientX+(yx_isK3?0:window.document.body.scrollLeft);
    yx_my=event.clientY+(yx_isK3?0:window.document.body.scrollTop);
    event.cancelBubble=false;
  }
  else if (yx_isN6) {
    yx_mx=e.pageX; yx_my=e.pageY;
    document.routeEvent(e);
  }
}
// ------

// cal holder
document.writeln('<div id="'+yx_cal+'" style="position:absolute; visibility:hidden; z-index:'+yx_basePad[9]+'">&nbsp;</div>');

// cal layers
function setLayers() {
  var theCell=null;

  yx_onBC=yx_getBC(yx_dayCells[6],yx_dayCells[12]);
  yx_outBC=yx_getBC(yx_dayCells[3],yx_dayCells[9]);

  yx_bw=yx_basePad[0]+yx_basePad[3]; yx_bh=yx_basePad[0]+yx_basePad[4];
  yx_mw=yx_headBar[3]; yx_tw=yx_headBar[14]; yx_cw=yx_dayCells[13]; yx_lw=yx_footBar[3];
  yx_hw=yx_cw*7+yx_dayCells[36]*6; yx_fw=yx_hw; yx_pw=yx_bw*2+yx_hw;

  // prepare the empty calendar
  // the month title
  yx_mTag=yx_makeLayer(yxLayers(yx_cal),yx_bw+Math.floor((yx_hw-yx_mw)/2),0,yx_mw,0,yx_headBar[0],yx_headBar[1],yx_headBar[2],0,yx_headBar[4],yx_headBar[5],yx_headBar[6],yx_headBar[7],"center",yx_headBar[8],yx_headBar[9],"&nbsp;","inherit",yx_headBar[10]);
  yx_mh=yx_mTag.offsetHeight;
  yx_mTag.style.cursor="default";

  // the scroll tags
  var tLeft, tRight, tLeft2, tRight2;
  if (yx_tagCellsOn==1) {
    tLeft=yx_makeLayer(yxLayers(yx_cal),yx_bw+yx_headBar[27]+yx_headBar[30]+yx_tw+yx_headBar[22],0,yx_tw,0,yx_headBar[11],yx_headBar[12],yx_headBar[13],0,yx_headBar[15],yx_headBar[16],yx_headBar[17],yx_headBar[18],"center",yx_headBar[19],yx_headBar[20],yx_headBar[23],"inherit",yx_headBar[21]);
    if (yx_th<tLeft.offsetHeight) { yx_th=tLeft.offsetHeight; }
    tLeft.style.cursor=yx_ptr;
    tLeft.onclick=yx_pMonth;
    if (yx_isIE) {
      tLeft.onselectstart=function() { return false; }
    }

    tRight=yx_makeLayer(yxLayers(yx_cal),yx_pw-yx_bw-yx_headBar[27]-yx_headBar[30]-yx_tw*2-yx_headBar[22],0,yx_tw,0,yx_headBar[11],yx_headBar[12],yx_headBar[13],0,yx_headBar[15],yx_headBar[16],yx_headBar[17],yx_headBar[18],"center",yx_headBar[19],yx_headBar[20],yx_headBar[24],"inherit",yx_headBar[21]);
    if (yx_th<tRight.offsetHeight) { yx_th=tRight.offsetHeight; }
    tRight.style.cursor=yx_ptr;
    tRight.onclick=yx_nMonth;
    if (yx_isIE) {
      tRight.onselectstart=function() { return false; }
    }

    tLeft2=yx_makeLayer(yxLayers(yx_cal),yx_bw+yx_headBar[27]+yx_headBar[30],0,yx_tw,0,yx_headBar[11],yx_headBar[12],yx_headBar[13],0,yx_headBar[15],yx_headBar[16],yx_headBar[17],yx_headBar[18],"center",yx_headBar[19],yx_headBar[20],yx_headBar[25],"inherit",yx_headBar[21]);
    if (yx_th<tLeft2.offsetHeight) { yx_th=tLeft2.offsetHeight; }
    tLeft2.style.cursor=yx_ptr;
    tLeft2.onclick=yx_pYear;
    if (yx_isIE) {
      tLeft2.onselectstart=function() { return false; }
    }

    tRight2=yx_makeLayer(yxLayers(yx_cal),yx_pw-yx_bw-yx_headBar[27]-yx_headBar[30]-yx_tw,0,yx_tw,0,yx_headBar[11],yx_headBar[12],yx_headBar[13],0,yx_headBar[15],yx_headBar[16],yx_headBar[17],yx_headBar[18],"center",yx_headBar[19],yx_headBar[20],yx_headBar[26],"inherit",yx_headBar[21]);
    if (yx_th<tRight2.offsetHeight) { yx_th=tRight2.offsetHeight; }
    tRight2.style.cursor=yx_ptr;
    tRight2.onclick=yx_nYear;
    if (yx_isIE) {
      tRight2.onselectstart=function() { return false; }
    }
  }

  yx_hh=(yx_headBar[27]+yx_headBar[31])*2+((yx_th<yx_mh)?yx_mh:yx_th);

  yx_mTag.style.top=yx_bh+Math.floor((yx_hh-yx_mh)/2)+"px";
  if (yx_tagCellsOn==1) {
    var toff=yx_bh+Math.floor((yx_hh-yx_th)/2)+"px";
    tLeft.style.top=toff; tRight.style.top=toff;
    tLeft2.style.top=toff; tRight2.style.top=toff;
  }  

  // the head pad
  theCell=yx_makeLayer(yxLayers(yx_cal),yx_bw,yx_bh,yx_hw,yx_hh,yx_headBar[27],yx_headBar[28],yx_headBar[29],0,0,yx_headBar[5],yx_headBar[6],yx_headBar[32],"center",yx_headBar[8],yx_headBar[32],"&nbsp;","inherit",yx_headBar[33]);

  // the week days
  var dx=yx_bw, dy=yx_bh+yx_hh+yx_basePad[6];
  for (var i=yx_weekDay; i<yx_weekDay+7; i++) {
    theCell=yx_makeLayer(yxLayers(yx_cal),dx,dy,yx_cw,0,yx_dayCells[0],yx_dayCells[1],yx_dayCells[7],0,yx_dayCells[14],yx_dayCells[15],yx_dayCells[16],yx_dayCells[17],"center",yx_dayCells[23],yx_dayCells[24],yx_dayTitles[i].substring(0,yx_dayDigits),"inherit",yx_dayCells[30]);
    if (yx_ch<theCell.offsetHeight) { yx_ch=theCell.offsetHeight; }
    theCell.style.cursor="default";
    dx+=yx_cw+yx_dayCells[36];
  }

  // the days
  dx=yx_bw, dy=yx_bh+yx_hh+yx_basePad[6]+yx_ch+yx_basePad[7];
  for (var i=1; i<=31; i++) {
    theCell=yx_makeLayer(yxLayers(yx_cal),dx,dy,yx_cw,yx_ch,yx_dayCells[0],yx_dayCells[3],yx_dayCells[9],0,yx_dayCells[14],yx_dayCells[15],yx_dayCells[16],yx_dayCells[19],yx_dayCells[22],yx_dayCells[23],yx_dayCells[26],i,"inherit",yx_dayCells[32]);
    if (yx_isIE) {
      theCell.onselectstart=function() { return false; }
    }

    theCell.onclick=yx_pickIt;
    theCell.style.cursor=yx_ptr;
    theCell.myDay=i; theCell.on=true;

    yx_days[i]=theCell;
  }

  for (var r=0; r<6; r++) {
    yx_offsets[r]=new Array();

    for (var c=yx_weekDay; c<yx_weekDay+7; c++) {
      yx_offsets[r][c-yx_weekDay]=new Array(dx,dy);

      if (r==0 || r==4 || r==5) {
        theCell=yx_makeLayer(yxLayers(yx_cal),dx,dy,yx_cw,yx_ch,yx_dayCells[0],yx_dayCells[4],yx_dayCells[10],0,yx_dayCells[14],yx_dayCells[15],yx_dayCells[16],yx_dayCells[27],yx_dayCells[22],yx_dayCells[23],yx_dayCells[27],"&nbsp;","inherit",yx_dayCells[33]);
        if (yx_isIE) {
          theCell.onselectstart=function() { return false; }
        }

        theCell.onclick=yx_pickIt;
        theCell.style.cursor="default";
        theCell.myDay=0;
      }

      dx+=yx_cw+yx_dayCells[36];
    }

    dx=yx_bw;
    dy+=yx_ch+yx_dayCells[36];
  }

  if (yx_footBarOn==1) {
    // the foot links
    var loff=yx_bh+yx_hh+(yx_ch*7+yx_dayCells[36]*5)+(yx_basePad[6]+yx_basePad[7]+yx_basePad[8])+yx_footBar[14]+yx_footBar[18];

    theCell=yx_makeLayer(yxLayers(yx_cal),yx_bw+Math.floor((yx_fw-yx_lw*2-yx_footBar[11])/2),loff,yx_lw,0,yx_footBar[0],yx_footBar[1],yx_footBar[2],0,yx_footBar[4],yx_footBar[5],yx_footBar[6],yx_footBar[7],"center",yx_footBar[8],yx_footBar[9],yx_footBar[12],"inherit",yx_footBar[10]);
    if (yx_lh < theCell.offsetHeight) { yx_lh=theCell.offsetHeight; }
    theCell.style.cursor=yx_ptr;
    theCell.onclick=yx_clearDate;
    if (yx_isIE) {
      theCell.onselectstart=function() { return false; }
    }

    theCell=yx_makeLayer(yxLayers(yx_cal),yx_bw+Math.floor((yx_fw-yx_lw*2-yx_footBar[11])/2)+yx_lw+yx_footBar[11],loff,yx_lw,0,yx_footBar[0],yx_footBar[1],yx_footBar[2],0,yx_footBar[4],yx_footBar[5],yx_footBar[6],yx_footBar[7],"center",yx_footBar[8],yx_footBar[9],yx_footBar[13],"inherit",yx_footBar[10]);
    if (yx_lh < theCell.offsetHeight) { yx_lh=theCell.offsetHeight; }
    theCell.style.cursor=yx_ptr;
    theCell.onclick=yx_hideIt;
    if (yx_isIE) {
      theCell.onselectstart=function() { return false; }
    }

    yx_fh=(yx_footBar[14]+yx_footBar[18])*2+yx_lh;

    // the foot pad
    theCell=yx_makeLayer(yxLayers(yx_cal),yx_bw,loff-yx_footBar[14]-yx_footBar[18],yx_fw,yx_fh,yx_footBar[14],yx_footBar[15],yx_footBar[16],0,yx_footBar[18],yx_footBar[5],yx_footBar[6],yx_footBar[19],"center",yx_footBar[8],yx_footBar[19],"&nbsp;","inherit",yx_footBar[20]);
  }

  yx_ph=yx_bh*2+yx_hh+(yx_ch*7+yx_dayCells[36]*5)+(yx_basePad[6]+yx_basePad[7])+(yx_basePad[8]+yx_fh)*yx_footBarOn;

  // the base pad  
  theCell=yx_makeLayer(yxLayers(yx_cal),0,0,yx_pw,yx_ph,yx_basePad[0],yx_basePad[1],yx_basePad[2],yx_basePad[3],yx_basePad[4],yx_headBar[5],yx_headBar[6],yx_basePad[5],"center",yx_headBar[8],yx_basePad[5],"&nbsp;","inherit",0);

  if (yx_calMode==0) {
    showCal(yx_cals[0].name);
  }
}
// ----

// user functions
function checkDate(name) {
  var thisCal=findCal(name);

  if (thisCal!=null && thisCal.form!=null && thisCal.form[thisCal.field]) {
    var calRE=yx_getFormat();

    if (calRE.test(thisCal.form[thisCal.field].value)) {
      return 0;
    }
    else {
      return 1;
    }
  }
  else {
    return 2;
  }
}

function yx_getDate(d) {
  var date=yx_calFormat;
  date=date.replace(/yyyy/i, d.getFullYear());
  date=date.replace(/mm/i, yx_get2Digits(d.getMonth()+1));
  date=date.replace(/MON/, yx_monthTitles[d.getMonth()].substring(0,3).toUpperCase());
  date=date.replace(/Mon/i, yx_monthTitles[d.getMonth()].substring(0,3));
  date=date.replace(/dd/i, yx_get2Digits(d.getDate()));

  return date;
}

function getCurrentDate() {
  return yx_getDate(new Date());
}

function compareDates(date1, date2) {
  var calRE=yx_getFormat();
  var d1, d2;

  if (calRE.test(date1)) {
    d1=getNumbers(date1);
  }
  else {
    d1=getNumbers(getCurrentDate());
  }

  if (calRE.test(date2)) {
    d2=getNumbers(date2);
  }
  else {
    d2=getNumbers(getCurrentDate());
  }

  var dStr1=d1[0] + "" + d1[1] + "" + d1[2];
  var dStr2=d2[0] + "" + d2[1] + "" + d2[2];

  if (dStr1==dStr2) {
    return 0;
  }
  else if (dStr1>dStr2) {
    return 1;
  }
  else {
    return -1;
  }
}

function getNumbers(date) {
  var calRE=yx_getFormat();
  var y, m, d;

  if (calRE.test(date)) {
    var yIdx=yx_calFormat.search(/yyyy/i);
    var mIdx=yx_calFormat.search(/mm/i);
    var m3Idx=yx_calFormat.search(/mon/i);
    var dIdx=yx_calFormat.search(/dd/i);

    y=date.substring(yIdx,yIdx+4);
    if (mIdx!=-1) {
      m=date.substring(mIdx,mIdx+2);
    }
    else {
      var mm=yx_getMonthFromTitle(date.substring(m3Idx,m3Idx+3))+1;
      m=(mm<10)?("0"+mm):(""+mm);
    }
    d=date.substring(dIdx,dIdx+2);

    return new Array(y,m,d);
  }
  else {
    return new Array("", "", "");
  }
}

if (yx_calSafe) {
  if (yx_isN6) { document.captureEvents(Event.CLICK); }
  document.onclick=yx_clickIt;
  window.onload=setLayers;
}
// ------
