/**
 * @(#)Calendar.js 1.0.0 2004.04.23
 *
 * Copyright (c) 2004 by
 * Kevin Eng, Naperville, Illinois
 * All rights reserved.
 *
 * No portion of this software in any form may be used or reproduced
 * in any manner without written consent from Kevin Eng.
 */

/**
 * @class findElement
 *
 * @version 4.0.1
 * @date 2004.04.23
 * @author Unknown
 * @since 1.0.0
 */
function findElement (n, d)
{
   var p;
   var i;
   var x;

   if (!d)
      d = document;

   if (((p = n.indexOf ("?")) > 0) && parent.frames.length)
   {
      d = parent.frames[n.substring (p + 1)].document;
      n = n.substring (0, p);
   }

   if (!(x = d[n]) && d.all)
      x = d.all[n];

   for (i = 0; !x && (i < d.forms.length); i++)
      x = d.forms[i][n];

   for (i = 0; !x && d.layers && (i < d.layers.length); i++)
      x = findElement (n, d.layers[i].document);

   if (!x && d.getElementById)
      x = d.getElementById (n);

   return (x);
}

var sDate = new Array ();
var mName = new Array ("January",
                       "February",
                       "March",
                       "April",
                       "May",
                       "June",
                       "July",
                       "August",
                       "September",
                       "October",
                       "November",
                       "December");
var wName = new Array ("Su",
                       "Mo",
                       "Tu",
                       "We",
                       "Th",
                       "Fr",
                       "Sa");
var cFontName = "Arial, Helvetica, sans-serif;"
var KW_color = new Array ("black", // "#ffffff", // Title font
                          "white", // "#ffcccc", // Today's cell background
                          "#efefef", // "#999999", // This month's weekend cell background
                          "white", // "#ffffff", // This month's weekday cell background
                          "white", // "#ccffcc", // Unknown
                          "#efefef", // "#cccccc", // Other month's cell background
                          "white", // "#000000", // Window background
                          "white") // "#000000") // Weekday title cell background
var KW_cl = 0;
var KW_od = 0;
var KW_tmo = 0;
var KW_cWidth = 170;
var KW_fd = 41;
var KW_ss = 0;
var KW_sw = 0;
var descx = -1;
var descy = -1;

/**
 * @class checkDates
 *
 * @version 2.1.5
 * @date 2004.04.23
 * @author Unknown
 * @since 1.0.0
 */
function checkDates (m1, d1, y1)
{
   var rStr = false;

   for (var i = 0; i < sDate.length; i++)
   {
      var tDate = sDate[i].split (",");

      if ((tDate[2] == "*") || (tDate[2] == y1))
      {
         if ((tDate[1] == d1) && (tDate[0] == m1))
            rStr=true;
      }
   }

   return (rStr);
}

/**
 * @class m_class
 *
 * @version Unknown
 * @date 2004.04.23
 * @author Unknown
 * @since 1.0.0
 */
function m_class (m, d, y)
{
   this.month = (m < 10) ? "0" + m : m;

   if (d)
      this.day = (d < 10) ? "0" + d : d;
   else
      this.day = "";
   this.year = y;

   this.output = this.month + "/" + this.day + "/" + this.year;

   this.month = m; // Override the leading "0"
   if (d)
      this.day = d; // Override the leading "0"
   else
      this.day = "";

   var kd = new Date ();
   this.special = checkDates (this.month, this.day, this.year);
   this.today = (((kd.getMonth () + 1) == this.month) && (kd.getDate () == this.day) && (kd.getFullYear () == this.year))

   var td = new Date (this.year, (this.month - 1), Number (this.day) + KW_od);
   this.past = (KW_od == -1) ? 0 : (kd > td);
   var tf = new Date (kd.getFullYear (), kd.getMonth (), kd.getDate () + KW_fd);
   var d1 = new Date (this.year, (this.month - 1), this.day);
   this.future = (KW_fd == -1) ? 0 : (tf < d1);
   this.ss = (this.special && KW_ss);
   this.display = (this.past || this.future || this.ss);
}

/**
 * @class showCalendar
 *
 * @version 2.5.3
 * @date 2004.04.23
 * @author Unknown
 * @since 1.0.0
 */
function showCalendar (objM, objD, objY, E, m, y)
{
   var d = new Date ();
   var f = 0;

   d.setDate (1);

   if (!m && m!=0)
   {
      m = d.getMonth ();
      f = KW_cl;
   }

   if ((f == 1) &&
       findElement ('KW_selectedMonth').value != -1)
      m = findElement ('KW_selectedMonth').value - 1;

   d.setMonth (m);

   if (!y)
      y = d.getFullYear ();
   if (f == 1 && findElement ('KW_selectedYear').value != -1)
      y = findElement ('KW_selectedYear').value;d.setFullYear (y);
   dy = d.getDay ();

   if (!E)
      E=0;

   if (E == 1)
      dy = (dy == 0) ? 6 : dy - 1;

   dP = new Date ();
   dP.setMonth (m);
   dP.setDate (0);

   pStart = dP.getDate () - dy + 1;
   dStr = new Array ();

   for (i = pStart; i < dP.getDate () + 1; i++)
   {
      tmo = (KW_tmo) ? "" : i;
      tMonth = (m == 0) ? "12" : m;
      tYear = (m == 0) ? y - 1 : y;
      dStr[dStr.length] = new m_class (tMonth, tmo, tYear);
   }

   EOM = false;

   for (i = 1; !EOM; i++)
   {
      d.setDate (i);
      if (m != d.getMonth ())
         EOM = true;
      else
      {
         dStr[dStr.length] = new m_class ((Number (m) + 1), i, y);
      }
   }

   cnt = 1;
   si = 0;

   if (E == 1)
      si = (d.getDay () == 0) ? 6 : d.getDay () - 1;
   else
      si = d.getDay ();

   for (i = si; i < 7; i++)
   {
      tMonth = (m == 11) ? "1" : Number (m) + 2;
      tYear = (m == 11) ? Number (y) + 1 : y;
      tmo = (KW_tmo) ? "" : cnt;
      dStr[dStr.length] = new m_class (tMonth, tmo, tYear);
      cnt++;
   }

   pM = (m == 0) ? 11 : m - 1;
   pY = (m == 0) ? y - 1 : y;
   nM = (m == 11) ? 0 : Number (m) + 1;
   nY = (m == 11) ? Number (y) + 1 : y;
   wStr = "<html>\n" +
          "<head>\n" +
          "<style type=\"text/css\">\n" +
          "<!--\n" +
          "body {background-color: " + KW_color[6] + ";}\n" +
          "td {font-family: " + cFontName + " font-size: 12px;}\n" +
          ".tblHdr {font-weight: bold; color: " + KW_color[0] + "; background-color: " + KW_color[6] + "}\n" +
          ".subTbl {font-weight: bold; color: " + KW_color[0] + "; background-color: " + KW_color[7] + "; text-align: center}\n" +
          "-->\n" +
          "</style>\n" +
          "<title>\n" +
          mName[m] + " " + y + "\n" +
          "</title>\n" +
          "</head>\n" +
          "<body topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\" leftmargin=\"0\" onLoad=\"window.focus()\">\n";

   wStr += "<table width=\"100%\" border=\"0\" cellspacing=\"0\">\n";

   wStr += "<tr>\n" +
           "<td align=\"center\" bgcolor=\"" + KW_color[6] + "\" class=\"tblHdr\">\n" +
           "<a href=\"javascript:window.opener.showCalendar ('" + objM + "', '" + objD + "', '" + objY + "', " + E + ", '" + pM + "', '" + pY + "');\" class=\"tblHdr\">\n" +
           "&laquo\n" +
           "</a>\n" +
           "&nbsp;&nbsp;" + mName[m] + "&nbsp;&nbsp;\n" +
           "<a href=\"javascript:window.opener.showCalendar ('" + objM + "', '" + objD + "', '" + objY + "', " + E + ", '" + nM + "', '" + nY + "');\" class=\"tblHdr\">\n" +
           "&raquo\n" +
           "</a>\n" +
           "</td>\n" +

           "<td align=\"center\" bgcolor=\"" + KW_color[6] + "\" class=\"tblHdr\">\n" +
           "<a href=\"javascript:window.opener.showCalendar ('" + objM + "', '" + objD + "', '" + objY + "', " + E + ", '" + m + "', '" + (y - 1) + "');\" class=\"tblHdr\">\n" +
           "&laquo\n" +
           "</a>\n" +
           "&nbsp;&nbsp;" + y + "&nbsp;&nbsp;\n" +
           "<a href=\"javascript:window.opener.showCalendar ('" + objM + "', '" + objD + "', '" + objY + "', " + E + ", '" + m + "', '" + (Number (y) + 1) + "');\" class=\"tblHdr\">\n" +
           "&raquo\n" +
           "</a>\n" +
           "</td>\n" +
           "</tr>\n";

   wStr += "<tr>\n" +
           "<td colspan=\"2\" bgcolor=\"" + KW_color[6] + "\">\n" +
           "<table width=\"100%\" border=\"0\">\n";

   wStr += "<tr>\n";

   for (wdn = 0; wdn < 7; wdn++)
      wStr += "<td class=\"subTbl\">\n" +
              wName[wdn] + "\n" +
              "</td>\n";

   wStr += "</tr>\n";

   wStr += "<tr>\n" +
           "<td colspan=\"7\" height=\"2\" bgcolor=\"#ffb542\">\n" +
           "</td>\n" +
           "</tr>\n";

   for (x = 0; x < parseInt (dStr.length / 7); x++)
   {
      wStr += "<tr>\n";

      for (y = 0; y < 7; y++)
      {
         yT = (E == 1) ? 5 : 0;
         bC = (y == yT || y == 6) ? KW_color[2] : KW_color[3];

         if ((y == yT || y == 6) && KW_sw && !dStr[x * 7 + y].display)
            dStr[x * 7 + y].display = true;
         if ((Number (m) + 1) != dStr[x * 7 + y].month)
            bC = KW_color[5];
         if (dStr[x * 7 + y].special)
            bC = KW_color[4];
         if (dStr[x * 7 + y].today)
            bC = KW_color[1];

         a0 = (KW_cl != 1) ? "" : "window.opener.findElement ('KW_selectedMonth', window.opener.document).value='" + dStr[ x * 7 + y].month + "'; " +
                                  "window.opener.findElement ('KW_selectedYear', window.opener.document).value='" + dStr[x * 7 + y].year + "'; ";
         /**
          * Enable links for all dates
          */
         a1 = /* (dStr[x * 7 + y].display) ? "" : */ "<a href=\"javascript:window.opener.findElement ('" + objM + "', window.opener.document).value='" + dStr[x * 7 + y].month + "';" +
                                                                          "window.opener.findElement ('" + objD + "', window.opener.document).value='" + dStr[x * 7 + y].day + "';" +
                                                                          "window.opener.findElement ('" + objY + "', window.opener.document).value='" + dStr[x * 7 + y].year + "';" +
              a0 + "window.close();\" >";
         a2 = /* (dStr[x * 7 + y].display) ? "" : */ "</a>";
         /** right instead of center */
         wStr += "<td align=\"right\" bgcolor=\"" + bC + "\">" +
                 (dStr[x * 7 + y].today ? "<b>" : "") +
                 a1 +
                 dStr[x * 7 + y].day +
                 a2 +
                 (dStr[x * 7 + y].today ? "</b>" : "") +
                 "</td>\n";
      }

      wStr += "</tr>\n";
   }

   wStr += "</table>\n" +
           "</td>\n" +
           "</tr>\n" +
           "</table>\n" +
           "</body>\n" +
           "</html>\n";

   var screenX = (self.screenX) ? self.screenX + 20 : window.screenLeft;
   var screenY = (self.screenY) ? self.screenY + 70 : window.screenTop;

   var w = (descx == -1) ? parseInt (screen.width / 2 - 75) : descx + screenX;
   var h = (descy == -1) ? parseInt (screen.height / 2 - 75) : descy + screenY;

   var look = 'width=' + KW_cWidth + ',height=158,left=' + w + ',top=' + h; // changed height from 155

   popwin = window.open ('', 'calendar', look);

   popwin.document.open ();
   popwin.document.write (wStr);
   popwin.document.close ();
}
