// Xin Calendar (In-Page) V1.2
// Copyright 2003  Xin Yang    All Rights Reserved.

// Last Modified: 08-Dec-2003
// Web Site: yxScripts.com
// Email: m_yangxin@hotmail.com

// default settings
var yxConf=["yyyy/mm/dd", 0, 1, 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]"];
var yxTags=["&#171;", "&#187;", "&#139;", "&#155;"];
// ------

// codes
var yxUseIFrm=-1, yxIFrame=null, yxSized=false;
var yxCal=null, yxIdx=100;
var yxCals=new Array(), yxCurCal=null;
var yxCY, yxCM, yxMX=0, yxMY=0, yxN4F=1, yxIMW=2;

var yxTL=" style='text-decoration:none; background-color:transparent'>";
var yxTable="<table cellpadding='0' cellspacing='0' border='0'>";

var yxNav=navigator.userAgent.toLowerCase();

var yxIsMac=(yxNav.indexOf("mac")!=-1);
var yxIsOpera=(yxNav.indexOf("opera")!=-1);
var yxIsKon=(yxNav.indexOf("konqueror")!=-1);

var yxIsIE=(!yxIsOpera && yxNav.indexOf("msie")!=-1);
var yxIsIE4=(yxIsIE && yxNav.indexOf("msie 4")!=-1);
var yxIsIE5=(yxIsIE && !yxIsIE4);
var yxIsN4=(yxNav.indexOf('mozilla')!=-1 && yxNav.search(/msie|gecko|opera|spoofer|compatible|webtv|hotjava/)==-1);
var yxIsN6=(yxNav.indexOf("gecko")!=-1);
var yxIsO7=(yxNav.indexOf("opera 7")!=-1);
var yxIsK3=(yxIsKon && navigator.appVersion.indexOf('Konqueror/3')!=-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 yxWriteLayer(l, content) {
  if (yxIsN4) {
    with (l.document) { open(); writeln(content); close(); }
  }
  else {
    l.innerHTML=content;
  }
}
function yxMoveLayerTo(l, x, y) {
  if (yxIsN4) {
    l.moveTo(x, y);
  }
  else {
    l.style.top=y+"px"; l.style.left=x+"px";
  }
}
function yxShowLayer(l) {
  if (yxIsN4) {
    l.visibility="show";
  }
  else {
    l.style.visibility="visible";
  }
}
function yxHideLayer(l) {
  if (yxIsN4) {
    l.visibility="hide";
  }
  else {
    l.style.visibility="hidden";
  }
}

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;
  this.Sun=1; this.work=1; this.Sat=1;
  this.range=null; this.rangeOn=new Array(); this.rangeOff=new Array(); this.datesOn=""; this.datesOff="";
}

function yxFindCal(name) {
  for (var i=0; i<yxCals.length; i++) {
    if (yxCals[i].name==name) {
      return yxCals[i];
    }
  }

  return null;
}

function yxDay3(i) { return yxDays[i].substring(0, 3); }
function yxMonth3(i) { return yxMonths[i].substring(0, 3); }

function yxMonthFromName(m3) {
  for (var i=0; i<yxMonths.length; i++) {
    if (yxMonth3(i).toLowerCase()==m3.toLowerCase()) {
      return i;
    }
  }
  return 0;
}

function _yxFormat() {
  var calF=yxConf[0];

  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/gi, '\\d\\d');
  calF=calF.replace(/mm/gi, '\\d\\d');
  calF=calF.replace(/yyyy/gi, '\\d\\d\\d\\d');
  calF=calF.replace(/day/gi, '\\w\\w\\w');
  calF=calF.replace(/mon/gi, '\\w\\w\\w');

  return calF;
}

function yxFormat() {
  if (yxDateFormat==null) {
    yxDateFormat=new RegExp('^'+_yxFormat()+'$');
  }
  return yxDateFormat;
}; var yxDateFormat=null;

function yxTakeDates(dates) { return dates.match(new RegExp(_yxFormat(), "g")).toString(); }

function yxGetNumbers(date) {
  var y, m, d;

  var yIdx=yxConf[0].search(/yyyy/i);
  var mIdx=yxConf[0].search(/mm/i);
  var m3Idx=yxConf[0].search(/mon/i);
  var dIdx=yxConf[0].search(/dd/i);

  y=date.substring(yIdx, yIdx+4)-0;
  if (mIdx!=-1) {
    m=date.substring(mIdx, mIdx+2)-1;
  }
  else {
    m=yxMonthFromName(date.substring(m3Idx, m3Idx+3));
  }
  d=date.substring(dIdx, dIdx+2)-0;

  return new Array(y, m, d);
}

function yxGetDate(d) {
  var date=yxConf[0];
  date=date.replace(/yyyy/i, d.getFullYear());
  date=date.replace(/mm/i, yxGetDD(d.getMonth()+1));
  date=date.replace(/MON/, yxMonth3(d.getMonth()).toUpperCase()); 
  date=date.replace(/Mon/i, yxMonth3(d.getMonth())); 
  date=date.replace(/dd/i, yxGetDD(d.getDate()));
  date=date.replace(/DAY/, yxDay3(d.getDay()).toUpperCase());
  date=date.replace(/day/i, yxDay3(d.getDay()));

  return date;
}

function yxHideCal() {
  if (yxConf[4]==1 && yxCal!=null) {
    if (yxIsIE5 && yxUseIFrame() && !yxIsMac) { yxHideLayer(yxIFrame); }
    yxHideLayer(yxCal);
  }
}

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 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 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'>"+(yxConf[2]==1?("<td align='right' colspan='3'><a href='javascript:yxMoveMonth(-1)'"+yxTL+yxSpan(yxColors[1], yxTags[2])+"</a></td>"):"")+"<td width='"+yxConf[7]+"'>"+yxSpan(yxColors[1], mm)+"</td>"+(yxConf[2]==1?("<td align='left' colspan='3'><a href='javascript:yxMoveMonth(1)'"+yxTL+yxSpan(yxColors[1], yxTags[3])+"</a></td>"):"")+"</tr><tr align='center' valign='middle'>"+(yxConf[2]==1?("<td><a href='javascript:yxMoveYear(-10)'"+yxTL+yxSpan(yxColors[1], yxTags[0])+"</a></td><td>"+yxSpan(yxColors[1], "&nbsp;")+"</td><td><a href='javascript:yxMoveYear(-1)'"+yxTL+yxSpan(yxColors[1], yxTags[2])+"</a></td>"):"")+"<td width='"+yxConf[7]+"'>"+yxSpan(yxColors[1], yy)+"</td>"+(yxConf[2]==1?("<td><a href='javascript:yxMoveYear(1)'"+yxTL+yxSpan(yxColors[1], yxTags[3])+"</a></td><td>"+yxSpan(yxColors[1], "&nbsp;")+"</td><td><a href='javascript:yxMoveYear(10)'"+yxTL+yxSpan(yxColors[1], yxTags[1])+"</a></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'>"+(yxConf[2]==1?("<td><a href='javascript:yxMoveYear(-1)'"+yxTL+yxSpan(yxColors[1], yxTags[0])+"</a></td><td>"+yxSpan(yxColors[1], "&nbsp;")+"</td><td><a href='javascript:yxMoveMonth(-1)'"+yxTL+yxSpan(yxColors[1], yxTags[2])+"</a></td>"):"")+"<td width='"+yxConf[7]+"'><nobr>"+yxSpan(yxColors[1], mm+" "+yy)+"</nobr></td>"+(yxConf[2]==1?("<td><a href='javascript:yxMoveMonth(1)'"+yxTL+yxSpan(yxColors[1], yxTags[3])+"</a></td><td>"+yxSpan(yxColors[1], "&nbsp;")+"</td><td><a href='javascript:yxMoveYear(1)'"+yxTL+yxSpan(yxColors[1], yxTags[1])+"</a></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 yxCalBody(d, day) {
  var s="", dc=1, fd=yxFirstDay(d), ld=yxLastDay(d);
  var yy=d.getFullYear(), mm=d.getMonth();
  var dateOff, wd, nd;

  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 {
        nd=new Date(yy, mm, dc); wd=nd.getDay(); dstr=yxGetDate(nd); dateOff=false;

        if (yxCurCal.Sun==0 && wd==0 || yxCurCal.Sat==0 && wd==6 || yxCurCal.work==0 && wd!=0 && wd!=6) {
          dateOff=true;
        }
        if (dateOff) {
          for (var ii=0; ii<yxCurCal.rangeOn.length; ii++) {
            if (compareDates(yxCurCal.rangeOn[ii][0], dstr)<=0 && compareDates(dstr, yxCurCal.rangeOn[ii][1])<=0) {
              dateOff=false; break;
            }
          }
        }
        if (!dateOff) {
          for (var ii=0; ii<yxCurCal.rangeOff.length; ii++) {
            if (compareDates(yxCurCal.rangeOff[ii][0], dstr)<=0 && compareDates(dstr, yxCurCal.rangeOff[ii][1])<=0) {
              dateOff=true;
            }
          }
        }
        if (yxCurCal.datesOn.indexOf(dstr)!=-1) {
          dateOff=false;
        }
        if (yxCurCal.datesOff.indexOf(dstr)!=-1) {
          dateOff=true;
        }
        if (!dateOff && yxCurCal.range!=null) {
          if (yxCurCal.range[0]!="" && compareDates(yxCurCal.range[0], dstr)>0 || yxCurCal.range[1]!="" && compareDates(dstr, yxCurCal.range[1])>0) {
            dateOff=true;
          }
        }

        if (dateOff) {
          s+="<td bgcolor='"+yxColors[10]+"'>"+yxSpan(yxColors[11], dc++)+"</td>";
        }
        else {
          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 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>"+(yxConf[4]==1?("<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 yxCheckRange(dir) {
  var fd=new Date(yxCY, yxCM, 1);

  if (dir<=0 && yxCurCal.range[0]!="") {
    fd=new Date(yxCY, yxCM, yxLastDay(fd));
    if (compareDates(yxGetDate(fd), yxCurCal.range[0])<0) {
      var lr=toJSDate(yxCurCal.range[0]);
      yxCY=lr.getFullYear(); yxCM=lr.getMonth();
    }
  }

  if (dir>=0 && yxCurCal.range[1]!="") {
    if (compareDates(yxGetDate(fd), yxCurCal.range[1])>0) {
      var lr=toJSDate(yxCurCal.range[1]);
      yxCY=lr.getFullYear(); yxCM=lr.getMonth();
    }
  }
}

function yxMoveYear(dy) {
  yxCY+=dy;
  if (yxCurCal.range!=null) { yxCheckRange(dy); }

  yxScrollCal(new Date(yxCY, yxCM, 1));
}

function yxMoveMonth(dm) {
  yxCM+=dm;
  if (yxCM<0) { yxCM=11; yxCY--; }
  if (yxCM>11) { yxCM=0; yxCY++;}
  if (yxCurCal.range!=null) { yxCheckRange(dm); }

  yxScrollCal(new Date(yxCY, yxCM, 1));
}

function yxScrollCal(d) {
  var dd=0;

  if (yxCurCal!=null) {
    var calRE=yxFormat(), calV=yxCurCal.form[yxCurCal.field].value;

    if (calV!="" && calRE.test(calV) || yxCurCal.date!="" && calRE.test(yxCurCal.date)) {
      var cd=yxGetNumbers((calV!="" && calRE.test(calV))?calV:yxCurCal.date);
      var ad=new Date(cd[0], cd[1], cd[2]);
      if (ad.getFullYear()==d.getFullYear() && ad.getMonth()==d.getMonth()) {
        dd=ad.getDate();
      }
    }
    else {
      var cd=new Date();
      if (cd.getFullYear()==d.getFullYear() && cd.getMonth()==d.getMonth() && yxConf[4]==1) {
        dd=cd.getDate();
      }
    }
  }

  var calendar=yxCalHeader()+yxCalTitle(d)+yxCalBody(d, dd)+yxCalFooter();
  yxWriteLayer(yxCal, calendar);
}

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+';"></div>'));
    yxCal=document.all("yxCal");
  }
  else {
    yxCal=document.createElement("DIV");
    with (yxCal.style) { position="absolute"; visibility="hidden"; left="0px"; top="0px"; zIndex=yxIdx; }
    if (yxIsIE && !yxIsMac) {
      document.body.insertBefore(yxCal, document.body.firstChild);
    }
    else {
      document.body.appendChild(yxCal);
    }

    if (yxIsIE5 && yxUseIFrame() && !yxIsMac) {
      yxIFrame=document.createElement("IFRAME"); yxIFrame.src="javascript:false";
      with (yxIFrame.style) {
        position="absolute"; left="0px"; top="0px"; visibility="hidden"; width="20px"; height="20px"; zIndex=yxIdx-1;
        filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
      }
      document.body.appendChild(yxIFrame);
    }
  }
}

function yxCheckCal() {
  if (yxCurCal!=null && yxCurCal.form==null) {
    if (yxCurCal.formName=="") {
      if (document.forms[0]) {
        yxCurCal.form=document.forms[0];
      }
    }
    else if (document.forms[yxCurCal.formName]) {
      yxCurCal.form=document.forms[yxCurCal.formName];
    }
    else if (typeof(eval(yxCurCal.formName))!="undefined") {
      yxCurCal.form=eval(yxCurCal.formName);
    }
  }
}

function yxShowCal(name) {
  if (!yxCalSafe) { return; }

  if (yxCal==null) { yxMakeHolder(); }

  var lastCal=yxCurCal;
  var d=new Date(), dd=0;

  yxCurCal=yxFindCal(name);
  yxCheckCal();

  if (yxCurCal!=null && yxCurCal.form!=null && yxCurCal.form[yxCurCal.field]) {
    var calRE=yxFormat(), calV=yxCurCal.form[yxCurCal.field].value;

    if (calV!="" && calRE.test(calV) || yxCurCal.date!="" && calRE.test(yxCurCal.date)) {
      var cd=yxGetNumbers((calV!="" && calRE.test(calV))?calV:yxCurCal.date);
      d=new Date(cd[0], cd[1], cd[2]);
      dd=d.getDate();
    }
    else if (yxConf[4]==1) {
      dd=d.getDate();
    }

    yxCY=d.getFullYear();
    yxCM=d.getMonth();

    if (yxCurCal.range!=null) {
      yxCheckRange(0);
    }
    if (yxCY!=d.getFullYear() || yxCM!=d.getMonth()) {
      d=new Date(yxCY, yxCM, 1);
      dd=0;
    }

    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);
    }

    yxMoveLayerTo(yxCal, cx, cy);
    yxWriteLayer(yxCal, calendar);

    var cw=yxCal.children[0].offsetWidth, ch=yxCal.children[0].offsetHeight;
    if (yxIsIE) { yxCal.style.clip="rect(0px; "+cw+"px; "+ch+"px; 0px)"; }

    if (yxIsIE5 && yxUseIFrame() && !yxIsMac) {
      if (!yxSized) { yxIFrame.style.width=cw+"px"; yxIFrame.style.height=ch+"px"; yxSized=true; }
      yxMoveLayerTo(yxIFrame, cx, cy); yxShowLayer(yxIFrame);
    }

    yxShowLayer(yxCal);
  }
  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="";

  if (yxConf[4]==0) {
    yxScrollCal(new Date(yxCY, yxCM, 1));
  }

  yxHideCal();
}

function yxPickDate(d) {
  yxCurCal.form[yxCurCal.field].value=yxGetDate(new Date(yxCY, yxCM, d));

  if (yxConf[4]==0) {
    yxScrollCal(new Date(yxCY, yxCM, 1));
  }

  yxHideCal();
}

function daysOffset(date, dc) {
  var d=toJSDate(date);
  d.setTime(d.getTime()+dc*86400000);
  return yxGetDate(d);
}

function yxClickIt(e) {
  if (yxIsIE || yxIsK3 || yxIsOpera) {
    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);
  }
}

function yxUseIFrame() {
  if (yxUseIFrm<0) { yxUseIFrm=document.getElementsByTagName("SELECT").length==0?document.getElementsByTagName("OBJECT").length==0?document.getElementsByTagName("EMBED").length==0?0:1:1:1; }
  return (yxUseIFrm>0);
}
// ------

// 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(format) {
  if (format.search(/yyyy/i)!=-1 && (format.search(/mm/i)!=-1 || format.search(/mon/i)!=-1) && format.search(/dd/i)!=-1) {
    yxConf[0]=format; 
    yxDateFormat=null; yxFormat();
  }
}

function setWeekDay(wd) {
  if (wd==0 || wd==1) {
    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) {
  if (mode==0 || mode==1) {
    yxConf[3]=mode;
  }
}

function setScrollTags(lOuter, rOuter, lInner, rInner) {
  if (lOuter!="") { yxTags[0]=lOuter; }
  if (rOuter!="") { yxTags[1]=rOuter; }
  if (lInner!="") { yxTags[2]=lInner; }
  if (rInner!="") { yxTags[3]=rInner; }
}

function switchTags(mode) {
  if (mode==0 || mode==1) {
    yxConf[2]=mode;
  }
}

function setCalendarMode(mode) {
  if (mode==0 || mode==1) {
    yxConf[4]=mode;
  }
}

function setWindowSize() { return; }

function setRange(name, start, end) {
  var cal=yxFindCal(name), calRE=yxFormat();
  if (cal!=null && (start=="" || calRE.test(start)) && (end=="" || calRE.test(end))) {
    cal.range=new Array(start, end);
  }
}

function enableRange(name, start, end) {
  var cal=yxFindCal(name), calRE=yxFormat();
  if (cal!=null && (start=="" || calRE.test(start)) && (end=="" || calRE.test(end))) {
    cal.rangeOn[cal.rangeOn.length]=new Array(start, end);
  }
}

function disableRange(name, start, end) {
  var cal=yxFindCal(name), calRE=yxFormat();
  if (cal!=null && (start=="" || calRE.test(start)) && (end=="" || calRE.test(end))) {
    cal.rangeOff[cal.rangeOff.length]=new Array(start, end);
  }
}

function enableDates(name, dates) {
  var cal=yxFindCal(name);
  if (cal!=null) {
    cal.datesOn+=yxTakeDates(dates)+",";
  }
}

function disableDates(name, dates) {
  var cal=yxFindCal(name);
  if (cal!=null) {
    cal.datesOff+=yxTakeDates(dates)+",";
  }
}

function setDays(name, sun, wk, sat) {
  var cal=yxFindCal(name);
  if (cal!=null) {
    cal.Sun=sun; cal.work=wk; cal.Sat=sat;
  }
}

function checkDate(name) {
  var thisCal=yxFindCal(name);

  if (thisCal!=null && thisCal.form!=null && thisCal.form[thisCal.field]) {
    var calRE=yxFormat();

    if (calRE.test(thisCal.form[thisCal.field].value)) {
      return 0;
    }
    else {
      return 1;
    }
  }
  else {
    return 2;
  }
}

function getCurrentDate() { return yxGetDate(new Date()); }

function compareDates(date1, date2) {
  var calRE=yxFormat();

  var d1=getNumbers(calRE.test(date1)?date1:getCurrentDate()).join("");
  var d2=getNumbers(calRE.test(date2)?date2:getCurrentDate()).join("");

  return (d1==d2?0:d1>d2?1:-1);
}

function getNumbers(date) {
  var calRE=yxFormat();

  if (calRE.test(date)) {
    var dd=yxGetNumbers(date);
    return new Array(yxGetDD(dd[0]), yxGetDD(dd[1]+1), yxGetDD(dd[2]));
  }
  else {
    return new Array("", "", "");
  }
}

function toJSDate(date) {
  var calRE=yxFormat();

  if (calRE.test(date)) {
    var d=yxGetNumbers(date);
    return (new Date(d[0], d[1], d[2]));
  }
  else {
    return (new Date());
  }
}

function toCalDate(date) { return yxGetDate(date); }

function daysBefore(dc) { return daysOffset(getCurrentDate(), -dc); }
function daysAfter(dc) { return daysOffset(getCurrentDate(), dc); }
function getYearBegin() { return toCalDate(new Date((new Date()).getFullYear(), 0, 1)); }
function getYearEnd() { return toCalDate(new Date((new Date()).getFullYear(), 11, 31)); }
// ------

if (yxCalSafe) {
  if (yxIsN6 || yxIsN4) { document.captureEvents(Event.CLICK); }
  document.onclick=yxClickIt;
}
// ----
