// +------------------------------------------------------------+
// |              Xin Calendar (Popup Window) Lite              |
// +------------------------------------------------------------+
// | Last Modified:                  26-Feb-2003                |
// | 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, 0, 1, "verdana", 12, 120, 1, 22, 1, 1, 1, 1, 1, 200, 170];
var yxColors=["#cccccc", "#000000", "#999999", "#ffffff", "#ffffff", "#000000", "#ffffff", "#000000", "#999999", "#ffffff", "#ffffff", "#999999", "#ffffff", "#cccccc", "#000000", "#ffffff", "#000000", "#ffffff", "#f0f0f0"];
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="yxCal";
var yxCals=new Array();
var yxCurCal=null;
var yxCY, yxCM, yxWinX=0, yxWinY=0, yxCalWin=null, yxN4F=2, yxIMW=2, yxK3W=10, yxK3H=10;

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 yxIsO6=(navigator.userAgent.indexOf("Opera 6")!=-1);
var yxIsO7=(navigator.userAgent.indexOf("Opera 7")!=-1);
var yxCalSafe=(yxIsN6 || yxIsN4 || yxIsIE5 || yxIsIE4 && !yxIsMac || yxIsK3 || yxIsO6 || yxIsO7);

if (yxIsN4) { yxConf[6]+=yxN4F; }
if (yxIsIE && yxIsMac) { yxConf[9]+=yxIMW; }
if (yxIsK3) { yxConf[15]+=yxK3W; yxConf[16]+=yxK3H; }

function yxSpan(tag) { return "<span class='"+tag+"'>"; }
function yxSpanStyle(tag, color) { return "."+tag+" { font-family:"+yxConf[5]+"; font-size:"+yxConf[6]+"px; color:"+color+"; }\n"; }
function yxA(tag, func, para, content) { return "<a class='"+tag+"' href='javascript:if(window.opener && !window.opener.closed && window.opener."+func+") window.opener."+func+"("+para+")'>"+content+"</a>"; }
function yxAStyle(tag, color) { return "."+tag+" { text-decoration:none; color:"+color+"; }\n"; }

function yxCalOBJ(name, title, field, form, date, dx, dy) {
  this.name=name;
  this.title=title;
  this.field=field; this.formName=form; this.form=null;
  this.date=date;
  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 (yxCalWin!=null && !yxCalWin.closed) {
    yxCalWin.close();
    yxCalWin=null;
  }
  window.status="";
}

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 align='center' bgcolor='"+yxColors[0]+"'><td colspan='7' align='center'>"+yxTable+"<tr align='center' valign='middle'><td width='"+yxConf[7]+"'>"+yxSpan("title")+mm+"</span></td></tr><tr align='center' valign='middle'><td width='"+yxConf[7]+"'>"+yxSpan("title")+yy+"</span></td></tr></table></td></tr><tr align='center' bgcolor='"+yxColors[2]+"'>";
  }
  else {
    s="<tr align='center' bgcolor='"+yxColors[0]+"'><td colspan='7' align='center'>"+yxTable+"<tr align='center' valign='middle'><td width='"+yxConf[7]+"'>"+yxSpan("title")+mm+" "+yy+"</span></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("days")+yxDayDisplay(i)+"</span></td>";
  }

  s+="</tr>";

  return s;
}

function yxCalHeader() {
  return "<head>\n<title>"+yxCurCal.title+"</title>\n<style type='text/css'>\n"+yxSpanStyle("title",yxColors[1])+yxSpanStyle("days",yxColors[3])+yxSpanStyle("foot",yxColors[14])+yxSpanStyle("day",yxColors[5])+yxSpanStyle("curDay",yxColors[9])+yxSpanStyle("wDay",yxColors[7])+yxSpanStyle("offDay",yxColors[11])+yxAStyle("titleA",yxColors[1])+yxAStyle("dayA",yxColors[5])+yxAStyle("curA",yxColors[9])+yxAStyle("wA",yxColors[7])+yxAStyle("offA",yxColors[11])+yxAStyle("footA",yxColors[14])+"</style>\n</head>\n<body bgcolor='"+yxColors[18]+"'>\n<table cellspacing='"+yxConf[13]+"' cellpadding='"+yxConf[14]+"' border='0' bgcolor='"+yxColors[16]+"' align='center'><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>"+yxSpan("foot")+yxA("footA","yxClearDate","",yxLinks[0])+"</span></td><td>"+yxSpan("foot")+"&nbsp;&nbsp;</span></td><td>"+yxSpan("foot")+yxA("footA","yxHideCal","",yxLinks[1])+"</span></td></tr></table></td></tr>"):"")+"</table></td></tr></table>\n</body>";
}

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("day")+"&nbsp;</span></td>";
      }
      else {
        wd=(new Date(yy,mm,dc)).getDay();
        var bgColor=(dc==day)?yxColors[8]:(wd==0 || wd==6)?yxColors[6]:yxColors[4];
        var fgTag=(dc==day)?"curDay":(wd==0 || wd==6)?"wDay":"day";
        var fgTagA=(dc==day)?"curA":(wd==0 || wd==6)?"wA":"dayA";

        s+="<td bgcolor='"+bgColor+"'>"+yxSpan(fgTag)+yxA(fgTagA,"yxPickDate",dc,dc++)+"</span></td>";
      }
    }
    s+="</tr>";
  }

  return s;
}

function yxShowCal(name) {
  if (!yxCalSafe) { return; }

  var lastCal=yxCurCal;
  var d=new Date(), hasCal=false;

  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();

    if (yxCalWin!=null && !yxCalWin.closed) {
      if (yxIsK3) {
        yxHideCal();
      }
      else {
        hasCal=true;
        yxCalWin.moveTo(yxWinX+yxCurCal.dx,yxWinY+yxCurCal.dy);
      }
    }

    if (!hasCal) {
      if (yxIsIE || yxIsK3 || yxIsOpera) {
        yxCalWin=window.open("",yxCal,"toolbar=0,width="+yxConf[15]+",height="+yxConf[16]+",left="+(yxWinX+yxCurCal.dx)+",top="+(yxWinY+yxCurCal.dy));
      }
      else {
        yxCalWin=window.open("",yxCal,"toolbar=0,width="+yxConf[15]+",height="+yxConf[16]+",screenx="+(yxWinX+yxCurCal.dx)+",screeny="+(yxWinY+yxCurCal.dy));
      }
    }

    yxCalWin.document.open();
    yxCalWin.document.write(calendar);
    yxCalWin.document.close();

    yxCalWin.focus();
  }
  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) {
  yxHideCal();
  window.focus();

  yxCurCal.form[yxCurCal.field].value=yxCY+"/"+yxGetDD(yxCM+1)+"/"+yxGetDD(d);
  if (yxIsIE && yxIsMac && !yxCurCal.form[yxCurCal.field].disabled) {
    yxCurCal.form[yxCurCal.field].focus();
  }
}

function yxBringIn() {
  if (yxCalWin!=null && !yxCalWin.closed) {
    yxCalWin.focus();
  }
}

function yxCheckWin() {
  if (yxIsIE && yxIsMac) {
    yxHideCal();
  }
  else {
    setTimeout("yxBringIn()",500); // a fix for IE5
  }
}

function yxClickIt(e) {
  if (yxIsIE || yxIsK3 || yxIsO6) {
    yxWinX=event.screenX;
    yxWinY=event.screenY;
    event.cancelBubble=false;
  }
  else if (yxIsO7) {
    yxWinX=event.clientX;
    yxWinY=event.clientY;
    event.cancelBubble=false;
  }
  else {
    yxWinX=e.screenX;
    yxWinY=e.screenY;
    document.routeEvent(e);
  }
}
// ------

// captures
if (yxCalSafe) {
  if (yxIsN6 || yxIsN4) { document.captureEvents(Event.CLICK); }
  document.onclick=yxClickIt;
  window.onfocus=yxCheckWin;
  window.onunload=yxHideCal;
}
// ----

// user functions
function addCalendar(name, title, field, form, date, dx, dy) {
  yxCals[yxCals.length]=new yxCalOBJ(name, title, field, form, date, 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, bgColor) {
  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; }
  if (bgColor!="") { yxColors[18]=bgColor; }
}

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(w, h) {
  if (w>0) {
    yxConf[15]=w;
    if (yxIsK3) { yxConf[15]+=yxK3W; }
  }
  if (h>0) {
    yxConf[16]=h;
    if (yxIsK3) { yxConf[16]+=yxK3H; }
  }
}

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 ""; }
// ------
