var unitmonths = "months"; var unitmonth = "month"; var unitdays = "days"; var unitday = "day"; var unithours = "hours"; var unithour = "hour"; var unitminutes = "minutes"; var unitminute = "minute"; var unitseconds = "seconds"; var unitsecond = "second"; var unitand = "and"; var millisecperhour = 60 * 60 * 1000; var millisecperday = 24 * millisecperhour; var millisecpermon = 30 * millisecperday; function countdown() { if (DisplayEvents.length == 0) { setTimeout("countdown()", 1000); return; }; var smsg = ''; var timemsg = ''; var datediff = 0; var dmon = 0; var dday = 0; var dleft = 0; var dhour = 0; var hleft = 0; var dmin = 0; var mleft = 0; var dsec = 0; var secdiff = 0; var displaycode = 0; var processcode = 0; var during = 0; for (var iEvent = 0; iEvent < DisplayEvents.length; iEvent++) { displaycode = DisplayEvents[iEvent].DisplayCode; processcode = DisplayEvents[iEvent].ProcessCode; var today = new Date(); datediff = DisplayEvents[iEvent].EventDate - today; if ((processcode & 8) != 0) { secdiff = Math.floor(datediff / 1000); if (secdiff <= 0 && secdiff > -DisplayEvents[iEvent].Duration) { datediff = (DisplayEvents[iEvent].EventDate - today) + (DisplayEvents[iEvent].Duration * 1000); during = 1; } }; if (datediff > 0) { secdiff = Math.floor(datediff / 1000); if ((displaycode & 1) != 0) { dmon = Math.floor(datediff / millisecpermon); datediff = Math.floor(datediff % millisecpermon); }; dday = Math.floor(datediff / millisecperday); dleft = Math.floor(datediff % millisecperday); dhour = Math.floor(dleft / millisecperhour); hleft = Math.floor(dleft % millisecperhour); dmin = Math.floor(hleft / 60000); mleft = Math.floor(hleft % 60000); dsec = Math.floor(mleft / 1000); } else { secdiff = Math.ceil(datediff / 1000); if (Math.abs(secdiff) > DisplayEvents[iEvent].Duration) { datediff = datediff + (DisplayEvents[iEvent].Duration * 1000); }; if ((displaycode & 1) != 0) { dmon = Math.floor(datediff / millisecpermon); datediff = Math.ceil(datediff % millisecpermon); }; dday = Math.ceil(datediff / millisecperday); dleft = Math.ceil(datediff % millisecperday); dhour = Math.ceil(dleft / millisecperhour); hleft = Math.ceil(dleft % millisecperhour); dmin = Math.ceil(hleft / 60000); mleft = Math.ceil(hleft % 60000); dsec = Math.ceil(mleft / 1000); }; if ((dday == 0) && (displaycode < 4)) displaycode += 4; if ((dday == 0) && (dhour == 0) && (displaycode < 8)) displaycode += 8; if ((dday == 0) && (dhour == 0) && (dmin == 0) && (displaycode < 16)) displaycode += 16; if (secdiff <= -DisplayEvents[iEvent].Duration) { timemsg = DisplayEvents[iEvent].AfterMsg; if ((processcode & 1) != 0) { if (DisplayEvents[iEvent].Clear == 0) { DisplayEvents[iEvent].Span.innerHTML = ''; DisplayEvents[iEvent].Clear = 1; }; return; }; if ((processcode & 2) != 0) { timemsg = BuildDisplay(displaycode, -dmon, -dday, -dhour, -dmin, -dsec, -secdiff); timemsg = BuildTimeMsg(timemsg, DisplayEvents[iEvent].AfterMsg); }; if ((processcode & 4) != 0) { timemsg = '<font color=red>' + timemsg + '</font>'; } } else if (during == 1 || (secdiff <= 0 && secdiff > -DisplayEvents[iEvent].Duration)) { if ((processcode & 8) != 0) { if (secdiff < 0) { timemsg = BuildDisplay(displaycode, -dmon, -dday, -dhour, -dmin, -dsec, -secdiff); } else { timemsg = BuildDisplay(displaycode, dmon, dday, dhour, dmin, dsec, secdiff); }; timemsg = BuildTimeMsg(timemsg, DisplayEvents[iEvent].DuringMsg); } else { timemsg = DisplayEvents[iEvent].DuringMsg + ' ' + RepeatStr('.', (Math.abs(secdiff) % 4)); } } else { timemsg = BuildDisplay(displaycode, dmon, dday, dhour, dmin, dsec, -secdiff); timemsg = BuildTimeMsg(timemsg, DisplayEvents[iEvent].BeforeMsg); }; DisplayEvents[iEvent].Span.innerHTML = DisplayEvents[iEvent].PrefixTags + timemsg + DisplayEvents[iEvent].SuffixTags; }; setTimeout("countdown()", 1000); }; function BuildDisplay(iDisplay, iMonths, iDays, iHours, iMins, iSecs, iTotalSecs) { var smsg; displayed = 0; smsg = ''; iTotalSecs = Math.abs(iTotalSecs); if (((iDisplay & 1) != 0) && (iMonths > 0)) { if (iMonths == 1) smsg = smsg + iMonths + " " + unitmonth; else smsg = smsg + iMonths + " " + unitmonths; displayed = 1; }; if (((iDisplay & 2) != 0) && (iDays > 0)) { if (smsg.length > 0) { smsg = smsg + ", "; }; if (iDays == 1) smsg = smsg + iDays + " " + unitday; else smsg = smsg + iDays + " " + unitdays; displayed += 1; }; if (((iDisplay & 4) != 0) && ((iDays > 0) || (iHours > 0))) { if (smsg.length > 0) { smsg = smsg + ", "; }; if (iHours == 1) smsg = smsg + iHours + " " + unithour; else smsg = smsg + iHours + " " + unithours; displayed += 1; }; if (((iDisplay & 8) != 0) && ((iDays > 0) || (iHours > 0) || (iMins > 0))) { if (smsg.length > 0) { smsg = smsg + ", "; }; if (iMins == 1) smsg = smsg + iMins + " " + unitminute; else smsg = smsg + iMins + " " + unitminutes; displayed += 1; }; if ((iDisplay & 16) != 0) { if (displayed > 1) { smsg = smsg + ","; }; if (smsg.length > 0) { smsg = smsg + " " + unitand + " "; }; if (iSecs == 1) smsg = smsg + iSecs + " " + unitsecond; else smsg = smsg + iSecs + " " + unitseconds; displayed += 1; }; if ((iDisplay & 32) != 0) { smsg = iTotalSecs + " " + unitseconds; }; if ((iDisplay & 64) != 0) { itemp = Math.floor(iTotalSecs / 60); smsg = itemp + " " + unitminutes; }; if ((iDisplay & 128) != 0) { itemp = Math.floor(iTotalSecs / 3600); smsg = itemp + " " + unithours; }; if ((iDisplay & 256) != 0) { itemp = Math.floor(iTotalSecs / 86400); smsg = itemp + " " + unitdays; }; return smsg; }; function BuildTimeMsg(TimeMsg, UserMsg) { var iptr; var result; var pattern = "[TimeMsg]"; iptr = UserMsg.indexOf(pattern); if (iptr > 0) { result = UserMsg.substring(0, iptr - 1); result += " " + TimeMsg; iptr += pattern.length; result += " " + UserMsg.substring(iptr, UserMsg.length); } else { result = TimeMsg + " " + UserMsg; }; return result; }; function RepeatStr(thestr, itimes) { var result = ''; for (var i = 0; i < itimes; i++) { result += thestr; }; return result; }; function start_countdown() { countdown(); }; function DisplayEvent(SpanName, EventDate, Duration, DisplayCode, ProcessCode, PrefixTags, SuffixTags, BeforeMsg, DuringMsg, AfterMsg) { this.Span = document.getElementById(SpanName); this.Clear = 0; this.EventDate = EventDate; this.Duration = Duration; this.DisplayCode = DisplayCode; this.ProcessCode = ProcessCode; this.PrefixTags = PrefixTags; this.SuffixTags = SuffixTags; this.BeforeMsg = BeforeMsg; this.DuringMsg = DuringMsg; this.AfterMsg = AfterMsg; }; function DefineEvent(theSpan, theYear, theMonth, theDay, theHour, theMinute, theSecond, theDuration, theDisplay, theProcess, thePrefix, theSuffix, theBeforeMsg, theDuringMsg, theAfterMsg) { var eventdate = new Date(); var eventyear = 0; var eventmonth = 0; var eventday = 0; var eventhour = 0; var eventminute = 0; var eventsecond = 0; var eventduration = 0; var prefixtags = ""; var suffixtags = ""; var beforemsg = ""; var aftermsg = ""; var duringmsg = ""; eventyear = theYear; eventmonth = theMonth; eventday = theDay; eventhour = theHour; eventminute = theMinute; eventsecond = theSecond; eventduration = theDuration; displaycode = theDisplay; processcode = theProcess; prefixtags = TagFix(thePrefix); suffixtags = TagFix(theSuffix); beforemsg = TagFix(theBeforeMsg); duringmsg = TagFix(theDuringMsg); aftermsg = TagFix(theAfterMsg); if ((processcode & 1024) != 0) { eventdate.setUTCFullYear(eventyear, eventmonth - 1, eventday); eventdate.setUTCHours(eventhour, eventminute, eventsecond, 0); } else { eventdate.setFullYear(eventyear, eventmonth - 1, eventday); eventdate.setHours(eventhour, eventminute, eventsecond, 0); }; DisplayEvents[DisplayEvents.length] = new DisplayEvent(theSpan, eventdate, theDuration, theDisplay, theProcess, prefixtags, suffixtags, beforemsg, duringmsg, aftermsg); }; function TagFix(intag) { outtag = intag; outtag = outtag.replace(/&lt;/gi, "<"); outtag = outtag.replace(/&gt;/gi, ">"); outtag = outtag.replace(/&quot;/gi, '"'); outtag = outtag.replace(/&amp;/gi, "&"); return outtag; }; var DisplayEvents = new Array(); //window.onload = start_countdown;

