<html>
<head>
<title>Test</title>
<script type="text/javascript">
// Klasse um ein Event besser zu verwalten
function Event (D, H, M, Name) {
this.Day = D;
this.Hour = H;
this.Minute = M;
this.Name = Name;
}
/*
* Klasse EventHandler
* verwaltet Events, es kann nur 1 Event pro Tag geben,
* ansonsten funktioniert die Klasse nicht richtig
*/
function EventHandler()
{
var EventList = new Array();
var EventID = -1;
var EventStart = 0;
/*
* Den Namen des durch nextEvent() ermittelten Events bestimmen
*/
function getEventName()
{
return EventList [EventID].Name;
}
this.getEventName = getEventName;
/*
* Den Start des durch nextEvent() ermittelten Events bestimmen
*/
function getEventStart()
{
return EventStart;
}
this.getEventStart = getEventStart;
/*
* Event hinzufügen,
* nextEvent() muss danach aufgerufen werden,
* damit das aktuelle Event auch geladen ist
*/
function addEvent (E)
{
EventList.push (E);
}
this.addEvent = addEvent;
/*
* nächstes Event bestimmen
*/
function nextEvent() {
var Now = new Date();
var Day = Now.getDay();
// nächstes Event bestimmen (nur 1 pro Tag!)
var Nearest = 21;
var NearestID = -1;
for (var i = 0; i < EventList.length; ++i) {
var Dif = EventList [i].Day - Day;
// tritt das Event erst nächste Woche ein?
if (Dif < 0)
Dif += 7;
if (Dif < Nearest) {
// continue, falls das Event heute statt findet
// und bereits vorbei ist
if (0 == Dif &&
(EventList [i].Hour < Now.getHours())
|| (EventList [i].Hour == Now.getHours()
&& EventList [i].Minute <= Now.getMinutes()))
{
continue;
}
Nearest = Dif;
NearestID = i;
}
}
// Datum anlegen, dass das nächste Event enthält
// laut selfHTML muss der Tag zwischen 0 und 30 liegen,
// IE und FF haben Überlaufe aber richtig behandelt
var Event = new Date (Now.getFullYear(),
Now.getMonth(),
Now.getDate() + Nearest,
EventList [NearestID].Hour,
EventList [NearestID].Minute,
0);
EventID = NearestID;
EventStart = Event.getTime();
}
this.nextEvent = nextEvent;
}
// Event-Handler, wird in startEventTimer() initialisiert
var EHandler = null;
// das Timer Objekt,
// wird benötigt, falls der Timer angehalten werden soll, etc
var timer = null;
/*
* Timer initialisieren, EventListe laden
*/
function startEventTimer()
{
EHandler = new EventHandler();
// Event 1 hinzufügen (Montag, 15:18 Uhr, Titel: "Montag"
EHandler.addEvent (new Event (1, 15, 8, "Montag"));
// Event 2 hinzufügen (Donnerstag, 14:00 Uhr, Titel: "Donnerstag"
EHandler.addEvent (new Event (4, 14, 00, "Donnerstag"));
// nächstliegende Event laden
EHandler.nextEvent();
// Timer initialisieren
timer = window.setInterval("update()", 1000);
}
/*
* verantwortlich für den Countdown, gesetzt in startEventTimer()
* aktualisiert die Meldung auf der Seite
*/
function update()
{
var Countdown = EHandler.getEventStart() - (new Date()).getTime();
// Event ist bereits eingetreten?
// dann nächstes Event laden
if (0 >= Countdown) {
EHandler.nextEvent();
Countdown = EHandler.getEventStart() - (new Date()).getTime();
}
// Meldung ausgeben
var Message = "Naechstes Event: " + EHandler.getEventName() + "<br />";
Message += "Noch " + Math.floor (Countdown / (60 * 60 * 1000)) + " Stunden, ";
Message += Math.floor (Countdown / (60 * 1000)) % 60 + " Minuten und ";
Message += Math.floor (Countdown / (1000)) % 60 + " Sekunden";
document.getElementById ("Event").innerHTML = Message;
}
startEventTimer();
</script>
</head>
<body>
<div id="Event"></div>
</body>
</html>