var E = (function () {
    const images = Array.of.apply([], document.getElementsByTagName("img"));
    const main = document.getElementsByTagName("main")[0];
    const overlays = images.filter(e => e.classList.contains("ov"));
    const wms = images.filter(e => e.classList.contains("wm"));
    const shark = images.find(e => e.classList.contains("shark"));

    const BG_W = 1300;
    const BG_H = 688;

    var strobeIdx = ~~(Math.random() * 999);
    const nOverlays = overlays.length;

    function strobe() {
        if (Math.random() < 0.5) {
            strobeIdx++;
        } else {
            strobeIdx--;
        }
        strobeIdx = (strobeIdx + nOverlays) % nOverlays;
        for (var i = 0; i < nOverlays; i++) {
            overlays[i].style.visibility = (i == strobeIdx) ? "visible" : "hidden";
        }
    }

    var time0 = +new Date;
    function elapsed() { return (new Date - time0) / 1000; }

    var lastStrobe = -Infinity;
    var lastShake = wms.map(_ => Math.random() * 0.2);

    function animate() {
        requestAnimationFrame(animate);
        var t = elapsed();

        if (t - lastStrobe > 0.5) {
            lastStrobe = t;
            strobe();
        }

        for (var i = 0; i < wms.length; i++) {
            if (t - lastShake[i] > 0.1) {
                const dx = Math.random() * 0.2;
                const dy = Math.random() * 0.2;
                wms[i].style.transform = "translate(" + dx + "vw," + dy + "vw)";
                lastShake[i] = t;
            }
        }

        const shDy = 2 * Math.sin(elapsed() * 4.7);
        const shRot = Math.sin(elapsed() * 7) * 3;
        shark.style.transform = "translate(0," + shDy + "vw) rotate(" + shRot + "deg)";
    }

    animate();

    return { main, overlays, shark, wms, strobe, animate };
})();
