      /***************
       * DEFINITIONS *
       ***************/

      debugging = 0;

      /* frame names -- need to be in quotes, otherwise test for blank in OpenFrame fails */

      CalendarFrame = "0";
      YahrtzeitFrame = "1";

      /* holidays */

      var showHolidays = 1;
      var showYizkor = 1;
      var showYahrtzeit = 1;
      var JewishHolidaysHeader = [
        "<b>&copy; 1989, 1999, 2001</b>",
        "Stephen P. Morse",
        ""
      ];
      var JewishHolidaysHolidays = [
        "<b>Holidays</b> <input type='button' value='Hide' onclick='self.parent.showHolidays=0;self.parent.LoadCalendar(self.parent.CalendarFrame)'>",
        "",
        "Tishri 1,2 Rosh Hashanah",
        "Tishri 10 Yom Kippor",
        "Tishri 15-21 Succoth",
        "Tishri 22 Shemini Atzereth",
        "Tishri 23 Simchath Torah",
        "Kislev 25-Tevet 2 Chanukah",
        "Adar II 14-15 Purim",
        "Nisan  15-22 Pesach",
        "Sivan  6,7 Shavuoth",
        ""
      ];
      var JewishHolidaysYizkor = [
        "<b>Yizkor</b> <input type='button' value='Hide' onclick='self.parent.showYizkor=0;self.parent.LoadCalendar(self.parent.CalendarFrame)'>",
        "",
        "Tishri 10",
        "Tishri 22",
        "Nisan 22",
        "Sivan 7",
        ""
      ]
      var JewishHolidays = [];

      /*******************
       * STATE VARIABLES *
       *******************/

      var NumberOfEnglishDaysPerMonthBeingDisplayed;
      var NumberOfJewishDaysPerMonthBeingDisplayed;

      var yahrtzeitCount = 0;
      var yahrtzeitMonth = [];
      var yahrtzeitDay = [];
      var yahrtzeitName = [];


      /*******************************
       * MANAGING THE USER INTERFACE *
       *******************************/

      var yearVal;

      function ToPrinterFriendly() {
        var url = "printcalendar.htm?year="+parent.yearVal+"&holidays="+parent.showHolidays+"&yizkor="+parent.showYizkor+"&yahrtzeit="+parent.showYahrtzeit;
        parent.document.location = url;
      }

      function InitializeUserInterface() {
        if (debugging) alert("entering InitializeUserInterface");
        GetParameters();
        ReadYahrtzeit();
        LoadYahrtzeit();
        LoadCalendar(CalendarFrame);
        if (debugging) alert("leaving InitializeUserInterface");
      }

      function LoadYahrtzeit() {
        if (debugging) alert("entering LoadYahrtzeit");
        self.frames[YahrtzeitFrame].document.open("text/html","replace");
        self.frames[YahrtzeitFrame].document.write(
          "<center><table><tr><td>"
        );
        self.frames[YahrtzeitFrame].document.write(
          "<table border='1'><tr><td colspan='3'><center><b>FAMILY YAHRTZEIT DATES</b></center></td></tr>" +
          "<tr><td>" +
          "<form name=Yahrtzeit method=post>" +
            "Name " +
            "<input type=text name=YahrtzeitName size=15><br>Died on&nbsp;" +
            "<select name=JewishMonth>"
        );
        for (i=0; i<JewishMonths.length; i++) {
          self.frames[YahrtzeitFrame].document.write(
              "<option value=" + i + ">" + JewishMonths[i] + "</option>"
          )
        }
        self.frames[YahrtzeitFrame].document.write(
            "</select>&nbsp;" +
            "<select name=JewishDay>"
        );
        for (i=1; i<=30; i++) {
          self.frames[YahrtzeitFrame].document.write(
              "<option value=" + i + ">" + i + "</option>"
          );
        }
        self.frames[YahrtzeitFrame].document.write(
            "</select><br><br>" +
            "<center><input type=button value=Add onclick=self.parent.AddYahrtzeit()></center>"
        );

        self.frames[YahrtzeitFrame].document.write("</td><td>");

        if (yahrtzeitCount>0) {
          count = (yahrtzeitCount > 4) ? 4 : yahrtzeitCount;
          self.frames[YahrtzeitFrame].document.write(
            "<select name=Yahrtzeit size='" + count + "'>"
          );
          for (i=0; i<yahrtzeitCount; i++) {
            self.frames[YahrtzeitFrame].document.write(
              "<option value=" + i + ">" +
                JewishMonths[yahrtzeitMonth[i]] + " " + (yahrtzeitDay[i]+1) +
                " " + yahrtzeitName[i] +
              "</option>"
            );
          }
          self.frames[YahrtzeitFrame].document.write(
              "</select><br><br>" +
              "<center><input type=button value=Remove onclick=self.parent.RemoveYahrtzeit()></center>"
          );
        } else {
          self.frames[YahrtzeitFrame].document.write(
            "To enter new yahrtzeit dates:" +
            "<font size='2'><br><br>" +
            "1. Enter the person's name.<br>" +
            "2. Specify date of death.<br>" +
            "3. Click on the \"Add\" button." +
            "</font>"
          );
        }
        yearVal = 100*CenturyIndex + JewishYearIndex;
        self.frames[YahrtzeitFrame].document.write(
            "</td></tr></table>"
        );

        self.frames[YahrtzeitFrame].document.write(
            "</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>"
        );


        self.frames[YahrtzeitFrame].document.write("<table border='1'><tr><td>");
        self.frames[YahrtzeitFrame].document.write(
                   "<center><input type='button' value='Printer Friendly Version' " +
                   "onclick='parent.ToPrinterFriendly()'>" +
                   "&nbsp;</center>" +
                   "<br>Enable background colors before printing" +
                   "<font size='2'><br><br>IE: Tools -> Internet -> Advanced -> Printing<br>" +
                   "Firefox, Netscape 6/7: File -> Page Setup<br>" +
                   "Netscape 4: Always enabled</font>");
        self.frames[YahrtzeitFrame].document.write("</td></tr></table></form>");
        self.frames[YahrtzeitFrame].document.write("</td></tr></table></center>");

        self.frames[YahrtzeitFrame].document.close();
        if (debugging) alert("leaving LoadYahrtzeit");
      }

      function AddYahrtzeit() {
        yahrtzeitCount++;
        var month = self.frames[YahrtzeitFrame].document.Yahrtzeit.JewishMonth.selectedIndex;
        var day = self.frames[YahrtzeitFrame].document.Yahrtzeit.JewishDay.selectedIndex;
        for (i=yahrtzeitCount-1; i>0; i--) {
          if (yahrtzeitMonth[i-1] > month ||
              (yahrtzeitMonth[i-1] == month && yahrtzeitDay[i-1] > day)) {
            yahrtzeitMonth[i] = yahrtzeitMonth[i-1];
            yahrtzeitDay[i] = yahrtzeitDay[i-1];
            yahrtzeitName[i] = yahrtzeitName[i-1];
          } else {
            break;
          }
        }
        yahrtzeitMonth[i] = month;
        yahrtzeitDay[i] = day;
        yahrtzeitName[i] = self.frames[YahrtzeitFrame].document.Yahrtzeit.YahrtzeitName.value;
        LoadYahrtzeit();
        WriteYahrtzeit();
        LoadCalendar(CalendarFrame);
      }

      function RemoveYahrtzeit() {
        var removed = false;
        yahrtzeit = self.frames[YahrtzeitFrame].document.Yahrtzeit.Yahrtzeit;
        for (i=0; i<yahrtzeit.options.length; i++) {
          if (yahrtzeit.options[i].selected) {
            for (j=i; j<yahrtzeitCount-1; j++) {
              yahrtzeitMonth[j] = yahrtzeitMonth[j+1];
              yahrtzeitDay[j] = yahrtzeitDay[j+1];
              yahrtzeitName[j] = yahrtzeitName[j+1];
            }
            yahrtzeitCount--;
//          yahrtzeit.options[i-1].selected = 0;
//          yahrtzeit.remove(i-1);
            removed = true;
          }
        }
        if (removed) {
          LoadYahrtzeit();
          WriteYahrtzeit();
          LoadCalendar(CalendarFrame);
        }
      }

      BREAK = "@#$%";

      function WriteYahrtzeit() {
        var cookie = "";
        var expires = new Date();
        var today = new Date();
        expires.setTime(today.getTime() + 1000*60*60*24*365);
        for (i=0; i<yahrtzeitCount; i++) {
          cookie += yahrtzeitMonth[i];
          cookie += BREAK;
          cookie += yahrtzeitDay[i];
          cookie += BREAK;
          cookie += yahrtzeitName[i];
          cookie += BREAK;
        }
        document.cookie =
          "yahrtzeit=" + escape(cookie) + "; expires=" + expires.toGMTString();
      }

      function ReadYahrtzeit() {
        var search = "yahrtzeit=";
        var cookie = "";
        if (document.cookie.length > 0) { // if there are any cookies
          offset = document.cookie.indexOf(search) 
          if (offset != -1) { // if cookie exists 
            offset += search.length 
            // set index of beginning of value
            end = document.cookie.indexOf(";", offset) 
            // set index of end of cookie value
            if (end == -1) {
              end = document.cookie.length;
            }
            cookie = unescape(document.cookie.substring(offset, end));
          } 
        }
        cookieArray = cookie.split(BREAK);
        yahrtzeitCount = 0;
        var cookieArrayCount = 0;
        while (cookieArrayCount < cookieArray.length-1) {
          yahrtzeitMonth[yahrtzeitCount] = cookieArray[cookieArrayCount++];
          yahrtzeitDay[yahrtzeitCount] = cookieArray[cookieArrayCount++];
          /* following two cryptic lines convert string to a number */
          yahrtzeitDay[yahrtzeitCount]++;
          yahrtzeitDay[yahrtzeitCount]--;
          yahrtzeitName[yahrtzeitCount] = cookieArray[cookieArrayCount++];
          yahrtzeitCount++;
        }
      }

      function IsYahrtzeitDay(month, day, year) {
        for (i=0; i<yahrtzeitCount; i++) {
          if ((day-1) != yahrtzeitDay[i]) { /* day doesn't match -- reject */
            continue;
          }
          if (month == yahrtzeitMonth[i]) { /* day and month both match -- accept */
            return true;
          }
          if (IsJewishLeapYear(year)) { /* leap year and items don't match -- reject */
            continue;
          }
          if (yahrtzeitMonth[i] == veadar && month == adar) {
            /* non-leap year and adar/veadar match -- accept */
            return true;
          }
        }
        return false;
      }

      // Note we need to buffer up the output when creating the printer-friendly calendar because
      //   if we did all the writing incrementally, then the first document.write will make all other
      //   variables in the document inaccessible
      var windowBuffer;

      function OpenFrame(frame) {
        if (frame == "") {
          windowBuffer = '';
        } else {
          self.frames[frame].document.open("text/html","replace");
        }
      }

      function WriteFrame(frame, text) {
        if (frame == "") {
          windowBuffer = windowBuffer + text;
        } else {
          self.frames[frame].document.write(text);
        }
      }

      function CloseFrame(frame) {
        if (frame == '') {
          document.write(windowBuffer);
          document.close(); // need for N4 which won't stop loading otherwise
        } else {
          self.frames[frame].document.close();
        }
      }

      function YearChanged(form) {
        var yr = 100*(form.c.selectedIndex) + form.y.selectedIndex;
        document.location.replace("calendar.htm?year=" + yr);
      }

      function LoadCalendar(frame) {
        if (debugging) alert("entering LoadCalendar");
        /* get to beginning of Jewish year */
        JewishMonthIndex = tishri;
        JewishDayIndex = 0;
        JewishToAbsolute();
        AbsoluteToEnglish();        

        /* start table */
        OpenFrame(frame);
        WriteFrame(frame, "<center><form name='f'><table cellspacing=0 cellpadding=0 border=0>");

        /* print out year */
        if (frame != "") { // not printer-friendly version
          WriteFrame(frame, "<tr><td align='center' colspan='17'>");
          WriteFrame(frame, "<b> Calendar for Hebrew Year</b>\n");
          WriteFrame(frame, "<select name='c' onchange='parent.YearChanged(document.f)'>\n");
          var yr = JewishYear() % 100;
          var cen = (JewishYear() - yr) / 100;
          var zero, sel;
          for (var x=0; x<=99; x++) {
            zero = x<10 ? "0" : "";
            sel = (x==cen) ? " selected" : "";
            WriteFrame(frame, "<option" + sel + ">" + zero + x + "</option>\n");
          }
          WriteFrame(frame, "</select><select name='y' onchange='parent.YearChanged(document.f)'>\n");
          for (var x=0; x<=99; x++) {
            zero = x<10 ? "0" : "";
            sel = (x==yr) ? " selected" : "";
            WriteFrame(frame, "<option" + sel + ">" + zero + x + "</option>\n");
          }
          WriteFrame(frame, "</select>\n");
          WriteFrame(frame, "</td></tr>");
          WriteFrame(frame, "<tr><td>&nbsp;</td></tr>");
          WriteFrame(frame,"<tr><td align='center' colspan='17'>" +
                           "<input type='button' value='Calendar Conversions' " +
                                   "onclick='parent.document.location = \"jcal.html\";'>&nbsp;&nbsp;" +
                            "<a href='" + parent.emailurl + "'>Stephen P. Morse</a>&nbsp;&nbsp;" +
                           "<input type='button' value='My Other Webpages' " +
                                   "onclick='parent.document.location = \"../index.html\";'>" +
                           "</td></tr>");
          WriteFrame(frame, "<tr><td>&nbsp;</td></tr>");
        }

        /* print out day headings */
        WriteFrame(frame,
              "<tr align=right>" +
                "<td></td>" +
                "<td></td>" +
                "<td width=20>&nbsp;Su</td>" +
                "<td width=20>&nbsp;Mo</td>" +
                "<td width=20>&nbsp;Tu</td>" +
                "<td width=20>&nbsp;We</td>" +
                "<td width=20>&nbsp;Th</td>" +
                "<td width=20>&nbsp;Fr</td>" +
                "<td width=20>&nbsp;Sa</td>" +
                "<td></td>" +
                "<td width=20>&nbsp;Su</td>" +
                "<td width=20>&nbsp;Mo</td>" +
                "<td width=20>&nbsp;Tu</td>" +
                "<td width=20>&nbsp;We</td>" +
                "<td width=20>&nbsp;Th</td>" +
                "<td width=20>&nbsp;Fr</td>" +
                "<td width=20>&nbsp;Sa</td>" +
                "<td></td>" +
              "</tr>" +
              "<tr>"
        );

        jewishMonth = JewishMonthIndex; jewishDay = JewishDayIndex;
        englishMonth = EnglishMonthIndex; englishDay = EnglishDayIndex;
        englishYear = EnglishYear();

        firstLine = true;
        color1 = "#CCFFFF";
        color2 = "#FFCCCC";
        color3 = "#CCCCFF";
        color4 = "#FFFFCC";
        jewishColor = color1;
        englishColor = color4;

        blank = 0;
        plain = 1;
        holiday = 2;
        yizkor = 3;
        yahrtzeit = 4;
        var cell = [plain, plain, plain, plain, plain, plain, plain];
        var line = 0;
        JewishHolidays = new Array(0);
        JewishHolidays.length = 0;
        for (var x=0; x<JewishHolidaysHeader.length; x++) {
          JewishHolidays[JewishHolidays.length] = JewishHolidaysHeader[x];
        }
        if (self.parent.showHolidays=="1") {
          var re = /Kislev 25-Tevet 2/gi;
          for (var x=0; x<JewishHolidaysHolidays.length; x++) {
            if (frame == "" && x == 0) { // leave out "hide" button on printer friendly version
              JewishHolidays[JewishHolidays.length] = "<b>Holidays</b>";
            } else {
              if (JewishYearKind == defective) { // Kislev is short 1 day, so Chanukah ends one day later
                JewishHolidaysHolidays[x] = JewishHolidaysHolidays[x].replace(re,"Kislev 25-Tevet 3");
              }
              JewishHolidays[JewishHolidays.length] = JewishHolidaysHolidays[x];
            }
          }
        } else {
          if (frame != "") { // not printer-friendly version
            JewishHolidays[JewishHolidays.length] = "<b>Holidays</b> <input type='button' value='Show' onclick='self.parent.showHolidays=1;self.parent.LoadCalendar(self.parent.CalendarFrame)'>";
            JewishHolidays[JewishHolidays.length] = "";
          }
        }
        if (showYizkor=="1") {
          for (var x=0; x<JewishHolidaysYizkor.length; x++) {
            if (frame == "" && x == 0) { // leave out "hide" button on printer friendly version
              JewishHolidays[JewishHolidays.length] = "<b>Yizkor</b>";
            } else {
              JewishHolidays[JewishHolidays.length] = JewishHolidaysYizkor[x];
            }
          }
        } else {
          if (frame != "") { // not printer-friendly version
            JewishHolidays[JewishHolidays.length] = "<b>Yizkor</b> <input type='button' value='Show' onclick='self.parent.showYizkor=1;self.parent.LoadCalendar(self.parent.CalendarFrame)'>";
            JewishHolidays[JewishHolidays.length] = "";
          }
        }

        while (jewishMonth <= elul) {

          /* start new line every seven days */
          WriteFrame(frame,
            "</tr>" +
            "<tr align=right>" +
              "<td align=left>"
          );
          if (line < JewishHolidays.length) {
            WriteFrame(frame,
              JewishHolidays[line]+"&nbsp;&nbsp;"
            );
          } else if (showYahrtzeit == "1") {
            if (line == JewishHolidays.length && yahrtzeitCount > 0) {
              if (frame != "") { // not printer friendly
                WriteFrame(frame,
                  "<b>Yahrtzeit</b> <input type='button' value='Hide' onclick='self.parent.showYahrtzeit=0;self.parent.LoadCalendar(self.parent.CalendarFrame)'>"
                );
              } else {
                WriteFrame(frame,
                  "<b>Yahrtzeit</b> "
                );
              }
            } else {
              k = line - (JewishHolidays.length + 2);
              if (k>=0 && k<yahrtzeitCount) {
                WriteFrame(frame,
                  JewishMonths[yahrtzeitMonth[k]] + " " + (yahrtzeitDay[k]+1) + " " + yahrtzeitName[k]
                );
              }
            }
          } else {
            if (line == JewishHolidays.length && frame != "") { // not printer friendly
              WriteFrame(frame,
                "<b>Yahrtzeit</b> <input type='button' value='Show' onclick='self.parent.showYahrtzeit=1;self.parent.LoadCalendar(self.parent.CalendarFrame)'>"
              );
            }
          }
          WriteFrame(frame,
               "</td>"
          );
          line++;

          /* put out Jewish month heading */
          if (jewishDay>=7 && jewishDay<=13) {
            WriteFrame(frame,
              "<td align=left bgcolor=" + jewishColor + ">" +
                JewishMonths[jewishMonth] + " " + JewishYear() +
              "</td>"
            );
          } else {
            WriteFrame(frame,
              "<td bgcolor=" + jewishColor + "></td>"
            );
          }

          count = 0;

          /* put out leading blanks if on first line */
          if (firstLine) {
            for (j=0; j<(DayOfWeekIndex+6)%7; j++) {
              WriteFrame(frame,
                "<td></td>"
              );
              cell[count] = blank;
              count++;
            }
          }

          /* put out days in Jewish month */
          for (;count<7;) {
            jewishDay++;
            if (IsYizkorDay(jewishMonth, jewishDay, JewishYear())) {
              boldOn = "<font color='red'><b><u>"; // all yizkor days are holidays, hence the red
              boldOff = "</u></b></font>";
              cell[count] = yizkor;
            } else if (IsJewishHoliday(jewishMonth, jewishDay, JewishYear())) {
              if (IsYahrtzeitDay(jewishMonth, jewishDay, JewishYear())) {
                boldOn = "<font color='red'><b><u>";
                boldOff = "</u></b></font>";
                cell[count] = yizkor; // it gets displayed same as yizkor -- i.e., red and underlined
              } else {
                boldOn = "<font color='red'><b>";
                boldOff = "</b></font>";
                cell[count] = holiday;
              }
            } else if (IsYahrtzeitDay(jewishMonth, jewishDay, JewishYear())) {
              boldOn = "<u>";
              boldOff = "</u>";
              cell[count] = yahrtzeit;
            } else {
              boldOn = "";
              boldOff = "";
              cell[count] = plain;
            }
            WriteFrame(frame,
              "<td bgcolor=" + jewishColor + ">"+ boldOn + jewishDay + boldOff + "</td>"
            );
            if (jewishDay == DaysInJewishMonth(JewishYear(), jewishMonth)) {
              jewishMonth++;
              jewishDay = 0;
              jewishColor = (jewishColor==color1) ? color2 : color1;
            }
            if (jewishMonth == veadar && !IsJewishLeapYear(JewishYear())) {
              jewishMonth++;
            }
            count++;

            /* put out trailing blanks if on last line */
            if (jewishMonth > elul) {
              for (;count<7; count++) {
                WriteFrame(frame,
                  "<td></td>"
                );
                cell[count] = blank;
              }
            }
          }

          /* put out separator between Jewish Calendar and English one */
          WriteFrame(frame,
            "<td width=10></td>"
          );

          count = 0;

          /* put out leading blanks if on first line */
          for (;count<7;) {
            if (cell[count] == blank) {
              WriteFrame(frame,
                "<td></td>"
              );
            } else {
              if (cell[count] == yizkor) {
                boldOn = "<font color='red'><b><u>";
                boldOff = "</u></b></font>";
              } else if (cell[count] == holiday) {
                boldOn = "<font color='red'><b>";
                boldOff = "</b></font>";
              } else if (cell[count] == yahrtzeit) {
                boldOn = "<u>";
                boldOff = "</u>";
              } else {
                boldOn = "";
                boldOff = "";
              }
              englishDay++;
              WriteFrame(frame,
                "<td bgcolor=" + englishColor + ">" + boldOn + englishDay + boldOff +"</td>"
              );
              if (englishDay == DaysInEnglishMonth(englishYear, englishMonth)) {
                englishMonth++;
                if (englishMonth >= 12 ) {
                  englishMonth = 0;
                  englishYear++;
                }
                englishDay = 0;
                englishColor = (englishColor==color3) ? color4 : color3;
              }
            }
            count++;
          }

          /* put out English month heading */
          if (englishDay>=1 && (englishDay<=7 || firstLine)) {
            adjustedYear = (englishYear>0) ? englishYear : englishYear-1; // adjust for lack of english year 0
            WriteFrame(frame,
              "<td align=left bgcolor=" + englishColor + ">" +
                "&nbsp;&nbsp;" + EnglishMonths[englishMonth].substr(0,3) + " " + adjustedYear +
              "</td>"
            );
          } else {
            WriteFrame(frame,
              "<td bgcolor=" + englishColor + "></td>"
            );
          }
          firstLine = false;
        }

        /* close the table */
        WriteFrame(frame,
                "<td></td>" +
              "</tr>" +
              "<tr><td></td><td align='center' colspan='17'>" +
                "<br><font color='red'><b>red</b></font> = holiday,&nbsp;&nbsp; <u>underline</u> = yizkor or yahrtzeit day" +
              "</td></tr>" +
            "</table></form>" +
          "</center>"
        );


        JewishYearProperties = "<br>"
        JewishYearProperties += "<b>Year " + JewishYear() + ": </b>";
        JewishYearProperties += JewishYearKindForDisplay;
        JewishYearProperties += " " + (IsJewishLeapYear(JewishYear()) ? "leap" : "common");
        JewishYearProperties += " year<br>";
        JewishYearProperties += "<b>Molad Tishri: </b>" + JewishYearMoladTishri + "<br>";
        JewishYearProperties += "<b>Year in cycle: </b>";
        JewishYearProperties += (JewishYear()%19 == 0) ? 19 : JewishYear()%19;
        JewishYearProperties += "<br><b>Tishri 1 delayed by: </b>" + JewishDelayRule;
        if (frame != "") { // not printer-friendly version
          WriteFrame(frame, "<center><table><tr><td colspan='3'><hr></td></tr><tr><td>");
          WriteFrame(frame,
            "<center>YEAR PROPERTIES</center>" +
            JewishYearProperties
          );

          WriteFrame(frame, "</td></tr></table></center>");
        }

        if (debugging) alert("leaving LoadCalendar"); // put before CloseFrame for printcalendar's sake
        CloseFrame(frame);
      }

      function GetParameters() {
        var i;
        var url = location.href; // get full url

        // get query string portion of url
//      url = url.slice(url.search("?")+1); // IE browser doesn't like this
        var query
        for (query=0; query<url.length; query++) {
          if (url.slice(query,query+1) == "?") { // IE doesn't allow url[query] == "?"
            break;
          }
        }
        if (query == url.length) {
          url = "";
        } else {
          url = url.slice(query+1);
        }

        // convert to array of individual arguments
        var arglist = url.split("&");

        // process each argument
        var form = self.parent.document.searchform;
        var yearFound = 0;
        for (i in arglist) {
          var arg = arglist[i].split("=");
          if (arg[0] == "year") {
            yearFound = 1;
            JewishYearIndex = arg[1]%100;
            CenturyIndex = (arg[1]-JewishYearIndex)/100;
            CenturyTypeIndex = jewishCentury;
          }
        }
        if (yearFound == 0) {
          var today = new Date();
          EnglishYearIndex = today.getFullYear()%100;
          EnglishMonthIndex = today.getMonth();
          EnglishDayIndex = today.getDate()-1;
          CenturyIndex = ((today.getFullYear() - EnglishYearIndex)/100);
          CenturyTypeIndex = englishCentury;

          // convert to Jewish date
          EnglishToJewish();
          var yr = JewishYear();
          JewishYearIndex = yr % 100;
          CenturyIndex = (yr-JewishYearIndex)/100;
          CenturyTypeIndex = jewishCentury;
        }
      }

      function LoadFrames() {
        if (debugging) alert("entering LoadFrames");
        InitializeUserInterface();
        if (debugging) alert("leaving LoadFrames");
      }

      /****************************
       * JEWISH HOLIDAYS & YIZKOR *
       ****************************/

      function IsJewishHoliday(month, day, year) {
        if (month == tishri) {
          return (day == 1) || (day == 2) || (day == 10)|| ((day >= 15) && (day <= 23));
        } else if (month == kislev) {
          return (day >= 25);
        } else if (month == tevet) {
          if (JewishYearKind == defective) {
            return (day <= 3); // in defective years kislev is 1 day short so Chanukah goes to Tevet 3
          } else {
            return (day <= 2);
          }
        } else if (month == adar && !IsJewishLeapYear(year)) {
          return ((day == 14) || (day == 15));
        } else if (month == veadar && IsJewishLeapYear(year)) {
          return ((day == 14) || (day == 15));
        } else if (month == nisan) {
          return ((day >= 15) && (day <= 22));
        } else if (month == sivan) {
          return ((day == 6) || (day == 7));
        } else {
          return false;
        }
      }

      function IsYizkorDay(month, day, year) {
        if (month == tishri) {
          return (day == 10) || (day == 22);
        } else if (month == nisan) {
          return (day == 22);
        } else if (month == sivan) {
          return (day == 7);
        } else {
          return false;
        }
      }


