about summary refs log tree commit diff
path: root/public/clock.js
blob: ffb9beae80ccbf843c70ab7f580ec8a89f51a3e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
document.addEventListener("DOMContentLoaded", function(event) { 
  updateClock();
  setInterval(updateClock, 1000);
});

function getNextOpen(now) {
    var days = [[0, 14], [4, 18], [8, 22], [12], [2, 16], [6, 20], [10]]
    var nowday = now.getUTCDay();
    var nour = now.getUTCHours();

    var open_hour = -1;
    var d = 0;

    while (open_hour == -1) {
        var times = days[(nowday + d) % 7];
        for (var i = 0; i < times.length; ++i) {
            var time = times[i];
            if (time == nour) {
                return "refresh";
            } else if (time > nour || d > 0) {
                open_hour = time;
                break;
            }
        }
        if (open_hour == -1) {
            d += 1;
            nour = -1;
        }
    }

    var open = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + d));
    var ts = open.setUTCHours(open_hour);
    return open;
}

function updateClock() {
    var clock = document.querySelector(".closed-registrations-message .clock");
    var now = new Date();
    var open = getNextOpen(now);

    if (open == "refresh") {
        location.reload();
        return;
    }

    var until = open - now;
    var ms = until % 1000;
    var s =  Math.floor((until / 1000)) % 60;
    var m =  Math.floor((until / 1000 / 60)) % 60;
    var h =  Math.floor((until / 1000 / 60 / 60));
    if (m < 10) m = "0" + m;
    if (s < 10) s = "0" + s;
    clock.innerHTML = h + ":" + m + ":" + s;
}