<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">var counter;
var _src_string = "";
var src_string = document.currentScript.getAttribute('src');
if(/(http(s?)):\/\//i.test(src_string)) {
	_src_string = src_string;
}else{
	_src_string = resUrl + "/" + src_string;
}
var _url = new URL(resUrl+"/"+_src_string);
var timeZone = _url.searchParams.get("zone") ?? 'ASIA/Hong_Kong';

// convert time to time zone set in js
var convertTZ = function (date, zone) {
	return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: zone}));   
}

/**
 * function time count down
 * @param {*} duration 
 */
var timerDown = function(duration) {
    var timer = duration;
    counter = setInterval(function () {
        periodCheck(timer);
        if(--timer &lt; 0){
            startDown();
        }
    }, 1000);
}

// start when page loading finished
var startDown = function () {
    clearInterval(counter);
    var open = timeOpen();
    var now = new Date();
    now = convertTZ(now, timeZone);
    var diff = open.nextOpen - now;
    timerDown(diff);
}
/**
 * 
 * @returns object {
 *    @param string nextOpen (next date issue open)
 *    @param string lastOpen (lasted date issue open)
 * }
 */
var timeOpen = function () {
    var datetime = new Date();
    // datetime = datetime.toISOString().split('T')[0];
    var lastDate = new Date();
    // lastDate = lastDate.toISOString().split('T')[0];
    lastDate.setDate(lastDate.getDate() - 1);

    var hours = datetime.getHours();
    var minutes = datetime.getMinutes();

    var cate = jy.type.substring(0,2);
    if((hours &gt; 21 &amp;&amp; cate == 'am') || (hours == 21 &amp;&amp; minutes &gt; 20 &amp;&amp; cate == 'am')){
        datetime.setDate(datetime.getDate()+1);
    }
    if(hours &gt;= 20 &amp;&amp; minutes &gt; 15 &amp;&amp; cate == 'tw'){
        datetime.setDate(datetime.getDate()+1);
    }
    datetime = convertTZ(datetime, timeZone);
    var nDate = datetime;
    nDate = nDate.getFullYear()+"-"+(nDate.getMonth()+1)+"-"+nDate.getDate();
    lastDate = lastDate.getFullYear()+"-"+(lastDate.getMonth()+1)+"-"+lastDate.getDate();
    if(cate == 'hk'){
        var datearr = hk_nxt_day.split("-");
        nDate = nDate.split("-");
        var datearr = hk_nxt_day.split("-");
        nDate[1] = datearr[0];
        nDate[2] = datearr[1];
        var redbagDownEles = document.querySelectorAll('.redbag-down');
        if(redbagDownEles.length &gt; 0){
            var ele = redbagDownEles[0];
            var ldate = ele.getAttribute('last-date');
            var ldatearr = ldate.split("-");
            var _lastDate = lastDate;
            _lastDate = _lastDate.split("-");
            _lastDate[1] = ldatearr[0];
            _lastDate[2] = ldatearr[1];
            lastDate = _lastDate.join("-");
            if(_lastDate[1] &gt; nDate[1] ){
                nDate[0] = parseInt(nDate[0]);
            }
        }
        nDate = nDate.join("-");
    }

    if(['am','hk'].includes(cate)){
        if(hours &gt;= 21 &amp;&amp; minutes &gt; 0 &amp;&amp; cate == 'am'){
            if(hours &gt; 21 || minutes &gt; 45){
                lastDate = new Date().toISOString().split('T')[0];
            }
            nDate += " 21:20";
            lastDate += " 21:45";
        }else{
            nDate += " 21:20";
            lastDate += " 21:45";
        }
    }
    if(cate == 'tw'){
        if(hours &gt;= 21 &amp;&amp; minutes &gt; 0){
            var lastDate = new Date().toISOString().split('T')[0];
            nDate += " 20:00";
            lastDate += " 21:00";
        }else{
            nDate += " 20:00";
            lastDate += " 21:00";
        }
    }

    nDate = covertDate(nDate);
    lastDate = covertDate(lastDate);

    nDate = new Date(nDate);
    lastDate = new Date(lastDate);
    
    datetime = convertTZ(nDate, timeZone);
    lastDate = convertTZ(lastDate, timeZone);
    return {
        nextOpen: datetime,
        lastOpen: lastDate
    }
}

function covertDate(dateStr) {
    var dp = dateStr.split(" ");
    var _newd = dp[0].split("-");
    var _newh = dp[1].split(":");
    _newd.push(_newh[0]);
    _newd.push(_newh[1]);
    var ad = new Date(_newd[0], _newd[1]-1, _newd[2], _newd[3], _newd[4]);
    return ad;
}

/**
 * function to check timer and down the bad
 * @param {*} _timer 
 */
function periodCheck(_timer){
    var datetime = new Date();
    datetime = convertTZ(datetime, timeZone);
    var hours = datetime.getHours();
    var minutes = datetime.getMinutes();

    var open = timeOpen();
    if(open.nextOpen.getMonth() &lt; open.lastOpen.getMonth()){
        open.lastOpen.setYear(open.nextOpen.getFullYear() - 1);
    }
    var allMinutes = (open.nextOpen - open.lastOpen) / 1000 / 60;
    var now = new Date();
    now = convertTZ(now, timeZone);
    var a = Date.parse(now);

    var allMinutes = (open.nextOpen - open.lastOpen) / 1000 / 60;
    var nextOpen = Date.parse(open.nextOpen);
    var still = (nextOpen - a)/1000;
    var mStill = parseInt(still / 60, 10);
    var redbagDownEles = document.querySelectorAll('.redbag-down');
    if(redbagDownEles.length &gt; 0){
        var cate = jy.type.substring(0,2);
        redbagDownEles.forEach(function (ele, ind) {
            
            var total = parseInt(ele.getAttribute('total'));
            // calculate time to count down (-1 bag)
            var _mloop = allMinutes / total;

            // bags still
            var _numTil = Math.ceil(mStill / _mloop);

            if(cate == 'tw' &amp;&amp; hours == 20){
                _numTil = 0;
            }
            if(cate == 'am' &amp;&amp; hours == 21 &amp;&amp; minutes &lt;= 45 &amp;&amp; minutes &gt; 20){
                _numTil = 0
            }
            
            if(cate == 'hk'){
                var goDate = ele.getAttribute('o-date')+"-2025";
                var cDate = new Date(goDate);
                cDate = convertTZ(cDate, timeZone);
                var cDateStr = [cDate.getFullYear(), cDate.getMonth()+1, cDate.getDate()].join("-");
                var oDateStr = [now.getFullYear(), now.getMonth()+1, now.getDate()].join("-");
    
                if(hours == 21 &amp;&amp; minutes &lt;= 45 &amp;&amp; cDateStr == oDateStr){
                    _numTil = 0
                }
            }
            _numTil = _numTil &gt; 0 ? _numTil : 0;
            // _numTil = _numTil.toString().padStart(3, '0');
            ele.innerHTML = _numTil;
        });
    }
}

// page load success and process
document.addEventListener('DOMContentLoaded', function () {
    startDown();
});</pre></body></html>