// +------------------------------------------------------------+
// |                Xin Calendar (In-Page) Lite                 |
// +------------------------------------------------------------+
// | Last Modified:                  12-Jul-2004                |
// | Web Site:                       http://www.yxScripts.com   |
// | EMail:                          m_yangxin@hotmail.com      |
// +------------------------------------------------------------+
// |      Copyright 2003  Xin Yang    All Rights Reserved.      |
// +------------------------------------------------------------+

// default settings
var yxConf=["yyyy/mm/dd", 0, 0, 1, 1, "verdana", 12, 120, 1, 22, 1, 1, 1, 1, 1];
var yxColors=["#cccccc", "#000000", "#999999", "#ffffff", "#ffffff", "#000000", "#ffffff", "#000000", "#999999", "#ffffff", "#ffffff", "#999999", "#ffffff", "#cccccc", "#000000", "#ffffff", "#000000", "#ffffff"];
var yxMonths=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var yxDays=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var yxLinks=["[Clear]", "[Close]"];
// ------

// codes
var yxCal=null, yxIdx=100;
var yxCals=new Array();
var yxCurCal=null;
var yxCY, yxCM, yxMX=0, yxMY=0, yxN4F=2, yxIMW=2;

var yxTL=" style='text-decoration:none; background-color:transparent'>";
var yxTable="<table cellpadding='0' cellspacing='0' border='0'>";

var yxIsOpera=(navigator.userAgent.indexOf("Opera")!=-1);
var yxIsIE=(navigator.userAgent.indexOf("MSIE")!=-1 && !yxIsOpera);
var yxIsIE4=(navigator.appVersion.indexOf("MSIE 4")!=-1);
var yxIsIE5=(yxIsIE && !yxIsIE4);
var yxIsN6=(navigator.userAgent.indexOf("Gecko")!=-1);
var yxIsN4=(typeof(document.layers)!="undefined");
var yxIsMac=(navigator.userAgent.indexOf("Mac")!=-1);
var yxIsKon=(navigator.userAgent.indexOf("Konqueror")!=-1);
var yxIsK3=(yxIsKon && navigator.appVersion.indexOf('Konqueror/3')!=-1);
var yxIsO7=(navigator.userAgent.indexOf("Opera 7")!=-1);
var yxCalSafe=(yxIsN6 || yxIsN4 || yxIsIE5 || yxIsIE4 && !yxIsMac || yxIsK3 || yxIsO7);

var yxLayers=null;
if (yxIsIE) {
  yxLayers=document.all;
}
else if (yxIsN4) {
  yxLayers=document.layers;
  yxConf[6]+=yxN4F;
}
else if (yxIsN6 || yxIsK3 || yxIsO7) {
  yxLayers=yxDOM;
}

if (yxIsIE && yxIsMac) { yxConf[9]+=yxIMW; }

function yxDOM(id) { return document.getElementById(id); }

function yxSpan(color,content) {
  return "<span style='font-family:"+yxConf[5]+"; font-size:"+yxConf[6]+"px; color:"+color+";'>"+content+"</span>";
}

function yxCalOBJ(name, field, form, date, id, id2, dx, dy) {
  this.name=name;
  this.field=field; this.formName=form; this.form=null;
  this.date=date;
  this.id=id; this.id2=id2;
  this.dx=dx; this.dy=dy;
}

function yxFindCal(name) {
  for (var i=0; i<yxCals.length; i++) {
    if (yxCals[i].name==name) {
      if (yxCals[i].form==null) {
        if (yxCals[i].formName=="") {
          if (document.forms[0]) {
            yxCals[i].form=document.forms[0];
          }
        }
        else if (document.forms[yxCals[i].formName]) {
          yxCals[i].form=document.forms[yxCals[i].formName];
        }
      }

      return yxCals[i];
    }
  }

  return null;
}

function yxDayName(y,m,d) { return yxDays[(new Date(y,m,d)).getDay()].substring(0,3); }

function yxMonthFromName(m3) {
  for (var i=0; i<yxMonths.length; i++) {
    if (yxMonths[i].toLowerCase().substring(0,3)==m3.toLowerCase()) {
      return i;
    }
  }
  return 0;
}

function yxFormat() {
  var re=/\d{4}\/\d{2}\/\d{2}/; // fix for IE4
  return re;
}

function yxDateNumbers(date) {
  var y=date.substring(0,4)-0;
  var m=date.substring(5,7)-1;
  var d=date.substring(8)-0;

  return new Array(y,m,d);
}

function yxHideCal() {
  if (yxIsIE) {
    yxCal.style.visibility="hidden";
  }
  else if (yxIsN4) {
    yxCal.visibility="hide";
    yxCal.document.open();
    yxCal.document.close();
  }
  else {
    yxCal.style.visibility="hidden";
  }

  window.status="";
}

function yxLeft(l) { return l.offsetLeft+(l.offsetParent?yxLeft(l.offsetParent):(yxIsIE && yxIsMac)?parseInt(document.body.leftMargin):0); }
function yxTop(l) { return l.offsetTop+(l.offsetParent?yxTop(l.offsetParent):(yxIsIE && yxIsMac)?parseInt(document.body.topMargin):0); }
function yxLeftN4(l) { return l.pageX; }
function yxTopN4(l) { return l.pageY; }

function yxLastDay(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 yxFirstDay(d) {
  var yy=d.getFullYear(), mm=d.getMonth();
  var fd=new Date(yy,mm,1);
  return fd.getDay();
}

function yxDayDisplay(i) {
  if (yxConf[10]==0) {
    return yxDays[i];
  }
  else {
    return yxDays[i].substring(0,yxConf[10]);
  }
}

function yxCalTitle(d) {
  var yy=d.getFullYear(), mm=yxMonths[d.getMonth()];
  var s;

  if (yxConf[8]==2) {
    s="<tr bgcolor='"+yxColors[0]+"'><td colspan='7' align='center'>"+yxTable+"<tr align='center' valign='middle'><td width='"+yxConf[7]+"'>"+yxSpan(yxColors[1],mm)+"</td></tr><tr align='center' valign='middle'><td width='"+yxConf[7]+"'>"+yxSpan(yxColors[1],yy)+"</td></tr></table></td></tr><tr align='center' bgcolor='"+yxColors[2]+"'>";
  }
  else {
    s="<tr bgcolor='"+yxColors[0]+"'><td colspan='7' align='center'>"+yxTable+"<tr align='center' valign='middle'><td width='"+yxConf[7]+"'><nobr>"+yxSpan(yxColors[1],mm+" "+yy)+"</nobr></td></tr></table></td></tr><tr align='center' bgcolor='"+yxColors[2]+"'>";
  }

  for (var i=yxConf[1]; i<yxConf[1]+7; i++) {
    s+="<td width='"+yxConf[9]+"'>"+yxSpan(yxColors[3],yxDayDisplay(i))+"</td>";
  }

  s+="</tr>";

  return s;
}

function yxCalHeader() {
  return "<table cellspacing='"+yxConf[13]+"' cellpadding='"+yxConf[14]+"' border='0' bgcolor='"+yxColors[16]+"'><tr bgcolor='"+yxColors[17]+"'><td><table cellspacing='"+yxConf[12]+"' cellpadding='"+yxConf[11]+"' border='0' bgcolor='"+yxColors[15]+"'>";
}

function yxCalFooter() {
  return (yxConf[3]==1?("<tr bgcolor='"+yxColors[13]+"'><td colspan='7' align='center'>"+yxTable+"<tr><td><a href='javascript:yxClearDate()'"+yxTL+yxSpan(yxColors[14],yxLinks[0])+"</a></td><td>"+yxSpan(yxColors[14],"&nbsp;&nbsp;")+"</td><td><a href='javascript:yxHideCal()'"+yxTL+yxSpan(yxColors[14],yxLinks[1])+"</a></td></tr></table></td></tr>"):"")+"</table></td></tr></table>";
}

function yxCalBody(d,day) {
  var s="", dc=1, fd=yxFirstDay(d), ld=yxLastDay(d);
  var yy=d.getFullYear(), mm=d.getMonth();
  var wd;

  if (yxConf[1]>0 && fd==0) { fd=7; }

  for (var i=0; i<6; i++) {
    s+="<tr align='center' bgcolor='"+yxColors[12]+"'>";
    for (var j=yxConf[1]; j<yxConf[1]+7; j++) {
      if (i*7+j<fd || dc>ld) {
        s+="<td>"+yxSpan(yxColors[12],"&nbsp;")+"</td>";
      }
      else {
        wd=(new Date(yy,mm,dc)).getDay();
        var bgColor=(dc==day)?yxColors[8]:(wd==0 || wd==6)?yxColors[6]:yxColors[4];
        var fgColor=(dc==day)?yxColors[9]:(wd==0 || wd==6)?yxColors[7]:yxColors[5];

        s+="<td bgcolor='"+bgColor+"'><a href='javascript:yxPickDate("+dc+")'"+yxTL+yxSpan(fgColor,dc++)+"</a></td>";
      }
    }
    s+="</tr>";
  }

  return s;
}

function yxMakeHolder() {
  if (yxIsN4) {
    yxCal=new Layer(600);
    yxCal.zIndex=yxIdx;
  }
  else if (yxIsIE4) {
    document.body.insertAdjacentHTML("AfterBegin",('<div id="yxCal" style="position:absolute; left:0px; top:0px; visibility:hidden; z-index:'+yxIdx+'; background-color:#cccccc;"></div>'));
    yxCal=document.all("yxCal");
  }
  else {
    yxCal=document.createElement("DIV");
    with (yxCal.style) { position="absolute"; visibility="hidden"; left="0px"; top="0px"; zIndex=yxIdx; backgroundColor="#cccccc"; }
    if (yxIsIE) {
      document.body.insertBefore(yxCal,document.body.firstChild);
    }
    else {
      document.body.appendChild(yxCal);
    }
  }
}

function yxShowCal(name) {
  if (!yxCalSafe) { return; }

  if (yxCal==null) { yxMakeHolder(); }

  var lastCal=yxCurCal;
  var d=new Date(), dd=0;

  yxCurCal=yxFindCal(name);

  if (yxCurCal!=null && yxCurCal.form!=null && yxCurCal.form[yxCurCal.field]) {
    var calRE=yxFormat();

    if (yxCurCal.form[yxCurCal.field].value!="" && calRE.test(yxCurCal.form[yxCurCal.field].value) || yxCurCal.date!="" && calRE.test(yxCurCal.date)) {
      var cd=yxDateNumbers((yxCurCal.form[yxCurCal.field].value!="")?yxCurCal.form[yxCurCal.field].value:yxCurCal.date);
      d=new Date(cd[0],cd[1],cd[2]);

      yxCY=cd[0];
      yxCM=cd[1];
      dd=cd[2];
    }
    else {
      yxCY=d.getFullYear();
      yxCM=d.getMonth();
      dd=d.getDate();
    }

    var calendar=yxCalHeader()+yxCalTitle(d)+yxCalBody(d,dd)+yxCalFooter();

    var cx=yxCurCal.dx, cy=yxCurCal.dy;
    if (yxCurCal.id=="" && yxCurCal.id2=="") {
      cx+=yxMX; cy+=yxMY;
    }
    else if (yxIsIE) {
      var l=yxLayers[yxCurCal.id];
      cx+=yxLeft(l); cy+=yxTop(l);
    }
    else if (yxIsN4) {
      var l=yxLayers[(yxCurCal.id2!="")?(yxCurCal.id2):(yxCurCal.id)];
      cx+=yxLeftN4(l); cy+=yxTopN4(l);
    }
    else {
      var l=yxLayers((yxIsK3 && yxCurCal.id2!="")?(yxCurCal.id2):(yxCurCal.id));
      cx+=yxLeft(l); cy+=yxTop(l);
    }

    if (yxIsIE) {
      yxCal.style.pixelTop=cy;
      yxCal.style.pixelLeft=cx;
      yxCal.innerHTML=calendar;

      yxCal.style.clip="rect(0px; "+yxCal.childNodes[0].offsetWidth+"px; "+yxCal.childNodes[0].offsetHeight+"px; 0px)";
      yxCal.style.visibility="visible";
    }
    else if (yxIsN4) {
      yxCal.top=cy;
      yxCal.left=cx;
      yxCal.document.open();
      yxCal.document.writeln(calendar);
      yxCal.document.close();
      yxCal.visibility="show";
    }
    else {
      yxCal.style.top=cy+"px";
      yxCal.style.left=cx+"px";
      yxCal.innerHTML=calendar;
      yxCal.style.visibility="visible";
    }
  }
  else {
    if (yxCurCal==null) {
      window.status="Calendar ["+name+"] not found.";
    }
    else if (!yxCurCal.form) {
      window.status="Form ["+yxCurCal.formName+"] not found.";
    }
    else if (!yxCurCal.form[yxCurCal.field]) {
      window.status="Form Field ["+yxCurCal.formName+"."+yxCurCal.field+"] not found.";
    }

    if (lastCal!=null) {
      yxCurCal=lastCal;
    }
  }
}; var showCalendar=yxShowCal;

function yxGetDD(n) { return ((n<10)?"0":"")+n; }

function yxClearDate() {
  yxCurCal.form[yxCurCal.field].value="";
  yxHideCal();
}

function yxPickDate(d) {
  yxCurCal.form[yxCurCal.field].value=yxCY+"/"+yxGetDD(yxCM+1)+"/"+yxGetDD(d);
  yxHideCal();
}

function yxClickIt(e) {
  if (yxIsIE || yxIsK3) {
    yxMX=event.clientX+(yxIsK3?0:window.document.body.scrollLeft);
    yxMY=event.clientY+(yxIsK3?0:window.document.body.scrollTop);
    event.cancelBubble=false;
  }
  else {
    yxMX=e.pageX; yxMY=e.pageY;
    document.routeEvent(e);
  }
}
// ------

if (yxCalSafe) {
  if (yxIsN6 || yxIsN4) { document.captureEvents(Event.CLICK); }
  document.onclick=yxClickIt;
}
// ----

// user functions
function addCalendar(name, field, form, date, id, id2, dx, dy) {
  yxCals[yxCals.length]=new yxCalOBJ(name, field, form, date, id, id2, dx, dy);
}

function setFont(font, size) {
  if (font!="") { yxConf[5]=font; }
  if (size>0) {
    yxConf[6]=size;
    if (yxIsN4) { yxConf[6]+=yxN4F; }
  }
}

function setWidth(tWidth, tMode, dWidth, dDigits, cPadding, iBorder, oBorder, bSpacing) {
  if (tWidth>0) { yxConf[7]=tWidth; }
  if (tMode==1 || tMode==2) { yxConf[8]=tMode; }
  if (dWidth>0) {
    yxConf[9]=dWidth;
    if (yxIsIE && yxIsMac) { yxConf[9]+=yxIMW; }
  }
  if (dDigits>=0) { yxConf[10]=dDigits; }

  yxConf[11]=cPadding;
  yxConf[12]=iBorder; yxConf[13]=oBorder; yxConf[14]=bSpacing;
}

function setColor(tColor, wColor, dColor, weColor, cdColor, odColor, bColor, fColor, ibColor, obColor, bsColor) {
  if (tColor!="") { yxColors[0]=tColor; }
  if (wColor!="") { yxColors[2]=wColor; }
  if (dColor!="") { yxColors[4]=dColor; }
  if (weColor!="") { yxColors[6]=weColor; }
  if (cdColor!="") { yxColors[8]=cdColor; }
  if (odColor!="") { yxColors[10]=odColor; }
  if (bColor!="") { yxColors[12]=bColor; }
  if (fColor!="") { yxColors[13]=fColor; }
  if (ibColor!="") { yxColors[15]=ibColor; }
  if (obColor!="") { yxColors[16]=obColor; }
  if (bsColor!="") { yxColors[17]=bsColor; }
}

function setFontColor(tColorF, wColorF, dColorF, weColorF, cdColorF, odColorF, fColorF) {
  if (tColorF!="") { yxColors[1]=tColorF; }
  if (wColorF!="") { yxColors[3]=wColorF; }
  if (dColorF!="") { yxColors[5]=dColorF; }
  if (weColorF!="") { yxColors[7]=weColorF; }
  if (cdColorF!="") { yxColors[9]=cdColorF; }
  if (odColorF!="") { yxColors[11]=odColorF; }
  if (fColorF!="") { yxColors[14]=fColorF; }
}

function setFormat() {}

function setWeekDay(wd) { yxConf[1]=wd; }

function setMonthTitles(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec) {
  if (jan!="") { yxMonths[0]=jan; }
  if (feb!="") { yxMonths[1]=feb; }
  if (mar!="") { yxMonths[2]=mar; }
  if (apr!="") { yxMonths[3]=apr; }
  if (may!="") { yxMonths[4]=may; }
  if (jun!="") { yxMonths[5]=jun; }
  if (jul!="") { yxMonths[6]=jul; }
  if (aug!="") { yxMonths[7]=aug; }
  if (sep!="") { yxMonths[8]=sep; }
  if (oct!="") { yxMonths[9]=oct; }
  if (nov!="") { yxMonths[10]=nov; }
  if (dec!="") { yxMonths[11]=dec; }
}

function setDayTitles(sun, mon, tue, wed, thu, fri, sat) {
  if (sun!="") { yxDays[0]=sun; yxDays[7]=sun; }
  if (mon!="") { yxDays[1]=mon; }
  if (tue!="") { yxDays[2]=tue; }
  if (wed!="") { yxDays[3]=wed; }
  if (thu!="") { yxDays[4]=thu; }
  if (fri!="") { yxDays[5]=fri; }
  if (sat!="") { yxDays[6]=sat; }
}

function setLinkTitles(clearL, closeL) {
  if (clearL!="") { yxLinks[0]=clearL; }
  if (closeL!="") { yxLinks[1]=closeL; }
}

function switchLinks(mode) { yxConf[3]=mode; }

function setScrollTags() {}
function switchTags() {}
function setCalendarMode() {}
function setWindowSize() {}

function setRange() {}
function enableRange() {}
function disableRange() {}
function enableDates() {}
function disableDates() {}
function setDays() {}

function getCurrentDate() { return ""; }
function daysBefore() { return ""; }
function daysAfter() { return ""; }
function getYearBegin() { return ""; }
function getYearEnd() { return ""; }
// ------

