  function CreateKhronos() {
        this.version = "2.0.090804";
        this.views = new Array;
        this.createDatePicker = function () {};
        this.createMonthView = function (sName, sData, sDivider, iTop, iLeft, sPrint, sClose, sHome, sPrevious, sNext, sDetailsPrint, sDetailsClose) {asViews[asViews.length] = sName;this.views[sName] = new View("month", sData, sDivider, iTop, iLeft, sPrint, sClose, sHome, sPrevious, sNext, sDetailsPrint, sDetailsClose);};
        this.createWeekView = function (sName, sData, sDivider, iTop, iLeft, sPrint, sClose) {asViews[asViews.length] = sName;this.views[sName] = new View("week", sData, sDivider, iTop, iLeft, sPrint, sClose);};
        this.createDayView = function () {};
        this.createMinimizedView = function (sName, sData, sDivider, iTop, iLeft, sPrint, sClose, sHome, sPrevious, sNext, sDetailsPrint, sDetailsClose, sMinimized) {asViews[asViews.length] = sName;this.views[sName] = new View("minimized", sData, sDivider, iTop, iLeft, sPrint, sClose, sHome, sPrevious, sNext, sDetailsPrint, sDetailsClose, sMinimized);};
        function fPrintData() {
            this.year = 0;
            this.month = 0;
            this.name = "";
            this.index = 0;
        }
        this.printData = new fPrintData;
        this.printPage = "";
        this.closeView = fCloseView;
        this.createView = fCreateView;
        this.printView = fPrintView;
        this.refreshView = fRefreshView;
        this.load = fLoad;
        this.topOffset = 0;
        var aiDaysPerMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        var abEmbedded = new Array;
        var asViews = new Array;
        var dToday = new Date;
        var iCurrentDay = dToday.getDate();
        var iCurrentMonth = dToday.getMonth();
        var iCurrentYear = dToday.getFullYear();
        function View(sType, sData, sDivider, iTop, iLeft, sPrint, sClose, sHome, sPrevious, sNext, sDetailsPrint, sDetailsClose, sMinimized) {
            this.type = sType;
            this.data = sData;
            this.divider = sDivider;
            this.top = iTop;
            this.left = iLeft;
            this.days = new Array("S", "M", "T", "W", "R", "F", "S");
            this.months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
            this.currentStyle = "font-weight: bold; text-decoration: underline;";
            if (sType == "week") {
                this.detailPrint = sPrint;
            } else {
                this.detailPrint = sDetailsPrint;
            }
            this.holiday = fHoliday;
            this.print = sPrint;
            this.close = sClose;
            this.dataIndex = 0;
            this.home = sHome;
            this.previous = sPrevious;
            this.next = sNext;
            this.day = iCurrentDay;
            this.month = iCurrentMonth;
            this.year = iCurrentYear;
            this.detailClose = sDetailsClose;
            if (sType == "minimized") {
                this.minimized = sMinimized ? sMinimized : "^";
            }
        }
        function fHoliday(iYear, iMonth, iDay) {
            var sEvent = "";
            var a = iYear % 19;
            var b = Math.floor(iYear / 100);
            var c = (b - Math.floor(b / 4) - Math.floor((8 * b + 13) / 25) + 19 * a + 15) % 30;
            var d = c - Math.floor(c / 28) * (1 - Math.floor(c / 28) * Math.floor(29 / (c + 1) * Math.floor((21 - a) / 11)));
            var e = (iYear + Math.floor(iYear / 4) + d + 2 - b + Math.floor(b / 4)) % 7;
            var f = d - e + 28;
            var iEasterDay = f;
            var iEasterMonth = 3;
            if (f > 31) {
                iEasterDay = f - 31;
            } else {
                iEasterMonth = 2;
            }
            if (iMonth == 0 && iDay == 1) {
                sEvent = "New Year's Day";
            }
            if (iMonth == 1 && iDay == 14) {
                sEvent = "St. Valentine's Day";
            }
            if (iMonth == 4) {
                var iThisDate = new Date(iYear, 4, 25);
                var iWeekday = iThisDate.getDay();
                var iThisDay = iWeekday == 0 ? 19 : 25 - iWeekday + 1;
                if (iDay == iThisDay) {
                    sEvent = "Victoria Day";
                }
            }
            if (iMonth == iEasterMonth && iDay == iEasterDay - 2) {
                sEvent = "Good Friday";
            }
            if (iMonth == iEasterMonth && iDay == iEasterDay) {
                sEvent = "Easter Sunday";
            }
            if (iMonth == 6 && iDay == 1) {
                sEvent = "Canada Day";
            }
            if (iMonth == 7) {
                var iThisDate = new Date(iYear, 7, 1);
                var iWeekday = iThisDate.getDay();
                var iThisDay = iWeekday == 1 ? 1 : iWeekday > 1 ? 9 - iWeekday : 2;
                if (iDay == iThisDay) {
                    sEvent = "Civic Holiday";
                }
            }
            if (iMonth == 8) {
                var iThisDate = new Date(iYear, 8, 1);
                var iWeekday = iThisDate.getDay();
                var iThisDay = iWeekday == 1 ? 1 : iWeekday > 1 ? 9 - iWeekday : 2;
                if (iDay == iThisDay) {
                    sEvent = "Labour Holiday";
                }
            }
            if (iMonth == 9) {
                var iThisDate = new Date(iYear, 8, 1);
                var iWeekday = iThisDate.getDay();
                var iThisDay = iWeekday == 1 ? 8 : iWeekday > 1 ? 14 - iWeekday : 9;
                if (iDay == iThisDay) {
                    sEvent = "Thanksgiving";
                }
            }
            if (iMonth == 10 && iDay == 11) {
                sEvent = "Rememberance Day";
            }
            if (iMonth == 11 && iDay == 25) {
                sEvent = "Christmas Day";
            }
            if (iMonth == 11 && iDay == 26) {
                sEvent = "Boxing Day";
            }
            return sEvent;
        }
        function fCreateViews() {
            for (var iCounter = 0; iCounter < asViews.length; iCounter++) {
                var elDiv = document.getElementById(asViews[iCounter]);
                if (elDiv) {
                    elDiv.style.position = "relative";
                    abEmbedded[asViews[iCounter]] = true;
                } else {
                    var elBody = document.body;
                    elDiv = document.createElement("div");
                    elBody.appendChild(elDiv);
                    elDiv.style.position = "absolute";
                    elDiv.style.visibility = "hidden";
                    abEmbedded[asViews[iCounter]] = false;
                }
                switch (khronos.views[asViews[iCounter]].type) {
                  case "month":
                    elDiv.id = asViews[iCounter] + "1";
                    elDiv.className = asViews[iCounter] + "Month";
                    elDiv.innerHTML = fCreateMonthView(asViews[iCounter], iCurrentMonth, iCurrentYear);
                    break;
                  case "week":
                    elDiv.id = asViews[iCounter] + "2";
                    elDiv.className = asViews[iCounter] + "Details";
                    elDiv.innerHTML = fCreateDetailView(asViews[iCounter], iCurrentDay, iCurrentMonth, iCurrentYear);
                    break;
                  case "minimized":
                    elDiv.id = asViews[iCounter];
                    elDiv.className = asViews[iCounter] + "Minimized";
                    elDiv.innerHTML = fCreateMinimizedView(asViews[iCounter]);
                    elDiv.style.cursor = "pointer";
                    elDiv.onclick = fCreateView;
                    break;
                  default:
                    break;
                }
                if (!abEmbedded[asViews[iCounter]]) {
                    gsl.positionElement(elDiv, khronos.views[asViews[iCounter]].top, khronos.views[asViews[iCounter]].left);
                    elDiv.style.visibility = "visible";
                }
            }
        }
        function fCreateMinimizedView(sName) {
            var sHtml = khronos.views[sName].minimized;
            return sHtml;
        }
        function fCreateView(sName, iDay, iMonth, iYear, iView) {
            if (iView != 2) {
                sName = this.id;
                var elParent = document.getElementById(sName);
                var elDiv = document.getElementById(sName + "1");
                if (elDiv) {
                } else {
                    var elBody = document.body;
                    elDiv = document.createElement("div");
                    elBody.appendChild(elDiv);
                    elDiv.id = sName + "1";
                    elDiv.className = sName + "Month";
                }
                elDiv.style.visibility = "hidden";
                var iLeft = gsl.documentWidth - elParent.offsetLeft < elDiv.offsetWidth + 5 ? elParent.offsetLeft - elDiv.offsetWidth : elParent.offsetLeft;
                gsl.positionElement(elDiv, elParent.offsetTop + this.topOffset, iLeft);
                if (elDiv.filters) {
                    if (elDiv.filters[0]) {
                        elDiv.filters[0].enabled = true;
                        elDiv.filters[0].apply();
                    }
                }
                elDiv.innerHTML = fCreateMonthView(sName, iCurrentMonth, iCurrentYear);
                elDiv.style.visibility = "visible";
                if (elDiv.filters) {
                    if (elDiv.filters[0]) {
                        elDiv.filters[0].play();
                    }
                }
            } else {
                var elParent = document.getElementById(sName + "1");
                var elDiv = document.getElementById(sName + "2");
                if (elDiv) {
                } else {
                    var elBody = document.body;
                    elDiv = document.createElement("div");
                    elBody.appendChild(elDiv);
                    elDiv.id = sName + "2";
                    elDiv.className = sName + "Details";
                }
                elDiv.style.visibility = "hidden";
                var iLeft = gsl.documentWidth - elParent.offsetLeft - elParent.offsetWidth > elDiv.offsetWidth + 5 ? elParent.offsetLeft + elParent.offsetWidth + 5 : elParent.offsetLeft - elDiv.offsetWidth - 5;
                gsl.positionElement(elDiv, elParent.offsetTop + this.topOffset, iLeft, true);
                elDiv.style.visibility = "visible";
                if (elDiv.filters) {
                    if (elDiv.filters[0]) {
                        elDiv.filters[0].enabled = true;
                        elDiv.filters[0].apply();
                    }
                }
                elDiv.innerHTML = fCreateDetailView(sName, iDay, iMonth, iYear);
                if (elDiv.filters) {
                    if (elDiv.filters[0]) {
                        elDiv.filters[0].play();
                    }
                }
            }
        }
        function fCreateMonthView(sName, iMonth, iYear) {
            var iDaysThisMonth = iYear % 4 == 0 && iMonth == 1 ? 29 : aiDaysPerMonth[iMonth];
            var dThisMonth = new Date(iYear, iMonth, 1);
            var iFirstDOM = dThisMonth.getDay();
            var iDayCounter = - iFirstDOM;
            var iIndex = khronos.views[sName].dataIndex;
            var sHtml = "<table class=\"Month\" style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
            sHtml += "<tr><td>";
            sHtml += "<table class=\"Category\" style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr>";
            if (khronos.views[sName].data.length > 1) {
                sHtml += "<td><select onchange=\"khronos.views['" + sName + "'].dataIndex = this.value; khronos.refreshView('" + sName + "', " + iCurrentMonth + ", " + iCurrentYear + ");\">";
                for (var iCounter = 0; iCounter < khronos.views[sName].data.length; iCounter++) {
                    if (khronos.views[sName].dataIndex == iCounter) {
                        sHtml += "<option value=\"" + iCounter + "\" selected>" + khronos.views[sName].data[iCounter].name + "</option>";
                    } else {
                        sHtml += "<option value=\"" + iCounter + "\">" + khronos.views[sName].data[iCounter].name + "</option>";
                    }
                }
                sHtml += "</select></td>";
            }
            sHtml += "<td align=\"right\">";
            sHtml += "<table class=\"Buttons\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr>";
            if (khronos.views[sName].print && khronos.printPage) {
                sHtml += "<td class=\"Print\" style=\"cursor: pointer;\" onclick=\"khronos.printView('" + sName + "', " + (iMonth + 1) + ", " + iYear + ");\" align=\"center\">" + khronos.views[sName].print + "</td>";
            }
            if (khronos.views[sName].close &&
                khronos.views[sName].type == "minimized") {
                sHtml += "<td class=\"Close\" style=\"cursor: pointer;\" onclick=\"khronos.closeView('" + sName + "', 1);\" align=\"center\">" + khronos.views[sName].close + "</td>";
            }
            sHtml += "</tr></table>";
            sHtml += "</td></tr></table>";
            sHtml += "</td></tr>";
            sHtml += "<tr><td>";
            sHtml += "<table class=\"Title\" style=\"width: 100%; height: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr>";
            sHtml += "<td>" + khronos.views[sName].months[iMonth] + " " + iYear + "</td><td align=\"right\">";
            sHtml += "<table class=\"Buttons\" style=\"cursor: pointer;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
            if (khronos.views[sName].home) {
                sHtml += "<td class=\"Home\" style=\"cursor: pointer;\" onclick=\"khronos.refreshView('" + sName + "', " + iCurrentMonth + ", " + iCurrentYear + ");\" align=\"center\">" + khronos.views[sName].home + "</td>";
            }
            if (khronos.views[sName].previous) {
                sHtml += "<td class=\"Previous\" style=\"cursor: pointer;\" onclick=\"khronos.refreshView('" + sName + "', " + (iMonth - 1) + ", " + iYear + ");\" align=\"center\">" + khronos.views[sName].previous + "</td>";
            }
            if (khronos.views[sName].next) {
                sHtml += "<td class=\"Next\" style=\"cursor: pointer;\" onclick=\"khronos.refreshView('" + sName + "', " + (iMonth + 1) + ", " + iYear + ");\" align=\"center\">" + khronos.views[sName].next + "</td>";
            }
            sHtml += "</table>";
            sHtml += "</td></tr></table>";
            sHtml += "</td></tr>";
            sHtml += "<tr><td style=\"height: 100%;\">";
            sHtml += "<table style=\"width: 100%; height: 100%; cursor: default;\" cellpadding=\"0\" cellspacing=\"" + (khronos.views[sName].divider ? khronos.views[sName].divider : "0") + "\" border=\"0\">";
            sHtml += "<tr>";
            for (var iCounter = 0; iCounter < 7; iCounter++) {
                sHtml += "<td class=\"WeekDay\">" + khronos.views[sName].days[iCounter] + "</td>";
            }
            sHtml += "</tr>";
            for (var iCounter = 0; iCounter < 6; iCounter++) {
                sHtml += "<tr>";
                for (var iCounter2 = 0; iCounter2 < 7; iCounter2++) {
                    iDayCounter++;
                    if (iDayCounter > 0 && iDayCounter <= iDaysThisMonth) {
                        if (khronos.views[sName].data[iIndex].data[iYear] &&
                            khronos.views[sName].data[iIndex].data[iYear][iMonth] &&
                            khronos.views[sName].data[iIndex].data[iYear][iMonth][iDayCounter]) {
                            sHtml += "<td class=\"EventDay\" style=\"" + (iYear == iCurrentYear &&
                                iMonth == iCurrentMonth &&
                                iDayCounter == iCurrentDay ? khronos.views[sName].currentStyle : "") + " cursor: pointer;\" onclick=\"khronos.createView('" + sName + "', " + iDayCounter + ", " + iMonth + ", " + iYear + ", 2);\">" + iDayCounter + "</td>";
                        } else if (khronos.views[sName].holiday(iYear, iMonth, iDayCounter)) {
                            sHtml += "<td class=\"Holiday\" style=\"" + (iYear == iCurrentYear &&
                                iMonth == iCurrentMonth &&
                                iDayCounter == iCurrentDay ? khronos.views[sName].currentStyle : "") + " cursor: pointer;\" onclick=\"khronos.createView('" + sName + "', " + iDayCounter + ", " + iMonth + ", " + iYear + ", 2);\">" + iDayCounter + "</td>";
                        } else {
                            sHtml += "<td class=\"Day\" style=\"" + (iYear == iCurrentYear &&
                                iMonth == iCurrentMonth &&
                                iDayCounter == iCurrentDay ? khronos.views[sName].currentStyle : " cursor: default;") + "\">" + iDayCounter + "</td>";
                        }
                    } else {
                        sHtml += "<td class=\"Blank\">&nbsp;</td>";
                    }
                }
                sHtml += "</tr>";
            }
            sHtml += "</table>";
            sHtml += "</td></tr>";
            sHtml += "</table>";
            return sHtml;
        }
        function fPrintView(sName, iMonth, iYear) {
            this.printData.year = iYear;
            this.printData.month = iMonth;
            this.printData.name = sName;
            this.printData.index = khronos.views[sName].dataIndex;
            var elWindow = gsl.openWindow(this.printPage, "KhronosPrint", "");
        }
        function fRefreshView(sName, iMonth, iYear) {
            if (iMonth > 11) {
                iMonth = 0;
                iYear++;
            }
            if (iMonth < 0) {
                iMonth = 11;
                iYear--;
            }
            var elDiv = document.getElementById(sName + "1");
            if (elDiv.filters) {
                if (elDiv.filters[0]) {
                    elDiv.filters[0].enabled = true;
                    elDiv.filters[0].apply();
                }
            }
            elDiv.innerHTML = fCreateMonthView(sName, iMonth, iYear);
            if (elDiv.filters) {
                if (elDiv.filters[0]) {
                    elDiv.filters[0].play();
                }
            }
        }
        function fCloseView(sName, iView) {
            gsl.showSelects();
            var elDiv = document.getElementById(sName + iView);
            if (elDiv.filters) {
                if (elDiv.filters[0]) {
                    elDiv.filters[0].enabled = true;
                    elDiv.filters[0].apply();
                }
            }
            elDiv.style.visibility = "hidden";
            var iDelay = 0;
            if (elDiv.filters) {
                if (elDiv.filters[0]) {
                    elDiv.filters[0].play();
                    iDelay = Math.floor(elDiv.filters[0].duration * 1000);
                }
            }
            setTimeout("var elBody = document.body; elBody.removeChild(document.getElementById('" + sName + iView + "'));", iDelay);
        }
        function fCreateDetailView(sName, iDay, iMonth, iYear, sHoliday) {
            var sHtml = "<table class=\"Detail\" style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
            sHtml += "<tr><td style=\"width: 100%;\">";
            sHtml += "<table class=\"Title\" style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr>";
            sHtml += "<td>" + khronos.views[sName].months[iMonth] + " " + iDay + ", " + iYear + "</td><td align=\"right\">";
            sHtml += "<table class=\"Buttons\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
            if (khronos.views[sName].detailPrint && khronos.printPage) {
                sHtml += "<td class=\"Print\" style=\"cursor: pointer;\" onclick=\"khronos.printView('" + sName + "', " + (iMonth + 1) + ", " + iYear + ");\" align=\"center\">" + khronos.views[sName].detailPrint + "</td>";
            }
            if (khronos.views[sName].detailClose &&
                khronos.views[sName].type != "detail") {
                sHtml += "<td class=\"Close\" style=\"cursor: pointer;\" onclick=\"khronos.closeView('" + sName + "', 2);\" align=\"center\">" + khronos.views[sName].detailClose + "</td>";
            }
            sHtml += "</table>";
            sHtml += "</td></tr></table>";
            sHtml += "</td></tr>";
            sHtml += "<tr><td>";
            sHtml += "<div class=\"List\" style=\"position: relative; overflow: auto;\">";
            if (khronos.views[sName].holiday(iYear, iMonth, iDay)) {
                sHtml += "<table class=\"Holiday\" style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
                sHtml += "<tr><td style=\"width: 100%;\">";
                sHtml += khronos.views[sName].holiday(iYear, iMonth, iDay) + "<br />";
                sHtml += "</td></tr>";
                sHtml += "</table>";
            }
            if (khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear] &&
                khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth] &&
                khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth][iDay]) {
                var asEvents = khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth][iDay].split("~");
                sHtml += "<table style=\"width: 100%;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
                for (var iCounter = 0; iCounter < asEvents.length; iCounter++) {
                    var asThisEvent = asEvents[iCounter].split("|");
                    sHtml += "<tr><td class=\"Out\" style=\"cursor: pointer;\" onclick=\"location.href = '" + asThisEvent[3] + "';\"><b>";
                    sHtml += asThisEvent[0] + "</b><br />";
                    sHtml += asThisEvent[1] + "<br />";
                    sHtml += asThisEvent[2] + "<br />";
                    sHtml += "</td></tr>";
                }
                sHtml += "</table>";
                sHtml += "</div>";
                sHtml += "</td></tr>";
                sHtml += "</table>";
            }
            return sHtml;
        }
        function fLoad() {
            fCreateViews();
        }
    }
    var khronos = new CreateKhronos;
    function KhronosData() {
        this.name = new Array;
        this.data = new Array;
        this.addData = function (iMonth, iDay, iYear, sData) {if (!this.data[iYear]) {this.data[iYear] = new Array;}if (!this.data[iYear][iMonth]) {this.data[iYear][iMonth] = new Array;}this.data[iYear][iMonth][iDay] = (this.data[iYear][iMonth][iDay] ? this.data[iYear][iMonth][iDay] + "~" : "") + sData;};
    }
