PageSourceSearch

https://gbcode.rthk.hk/TuniS/www.rthk.hk/js/page/main_index.js?v=1.2.17

js rthk.hk collected 2026-09-24 08:37:32 UTC 102,575 bytes, 2,355 lines download raw bytes

1var globalStatus = "IDLE";
2
3window.hiteEpiH3_h = 0;
4window.hiteTitH2_h = 0;
5
6window.player_playing = 0;
7
8window._dtt31_live_start_time = "";
9window._dtt32_live_start_time = "";
10window._dtt33_live_start_time = "";
11window._dtt34_live_start_time = "";
12window._dtt35_live_start_time = "";
13window._dtt36_live_start_time = "";								   
14
15window.radio_live_start_time = {
16    "radio1": "",
17    "radio2": "",
18    "radio3": "",
19    "radio4": "",
20    "radio5": "",
21    "pth": ""
22};
23var currArr = [];
24$(document).ready(function() {
25    /*
26     * Headline news & Express new section
27     * Section will be updated every 5 minute
28     */
29    function stripslashes(str) {
30        str = str.replace(/\\'/g, '\'');
31        str = str.replace(/\\"/g, '"');
32        str = str.replace(/\\0/g, '\0');
33        str = str.replace(/\\\\/g, '\\');
34        return str;
35    }
36    var five_minus_action = setInterval(function() {
37        $.ajax({
38            type: "GET",
39            url: window.base_url + '/main/get_expressnews/echo',
40            dataType: "json",
41            success: function(d) {
42                if (typeof d === 'object' && typeof d.item === 'object' && d.item.length > 0) {
43                    var html = "";
44                    $.each(d.item, function(i, v) {
45                        var tmpl = $('#template-express-news').html();
46                        var _title = stripslashes(v.title || "");
47                        var _link = v.link || "";
48                        var _time = v.livetime || "";
49                        if (_time !== "") {
50                            var hour = new Date(_time).getHours();
51                            var minutes = new Date(_time).getMinutes();
52                            _time = 'HKT ' + (hour < 10 ? "0" + hour : hour) + ":" + (minutes < 10 ? "0" + minutes : minutes);
53                        }
54                        var _photo_gallery_display =
55                            (
56                                typeof v.gallery === 'object' && typeof v.gallery.image === 'object' &&
57                                (
58                                    (typeof v.gallery.image.small === 'string' && v.gallery.image.small !== "") ||
59                                    (typeof v.gallery.image.medium === 'string' && v.gallery.image.medium !== "") ||
60                                    (typeof v.gallery.image.large === 'string' && v.gallery.image.large !== "")
61                                )
62                            ) ? 'style="display:inline-block"' : 'style="display:none"';
63
64                        var _video_display =
65                            (
66                                typeof v.video === 'string' || typeof v.vcoversmall === 'string' || typeof v.vcovermedium === 'string' || typeof v.vcoverlarge === 'string'
67                            ) ? 'style="display:inline-block"' : 'style="display:none"';
68
69                        tmpl = tmpl.replace(/##title##/g, _title)
70                            .replace(/##link##/g, _link)
71                            .replace(/##time##/g, _time)
72                            .replace(/##photo_gallery_display##/g, _photo_gallery_display)
73                            .replace(/##video_display##/g, _video_display);
74
75                        if (i == 0) {
76                            tmpl = tmpl.replace('catli', 'catli top');
77                        } else if (i % 2 > 0) {
78                            tmpl = tmpl.replace('catli', 'catli grey');
79                        }
80                        html += tmpl;
81                        if ((i + 1) >= _express_news_limit) { return false; }
82                    });
83                    $('.catUl.news .catli').remove();
84                    $(html).insertAfter('.catUl.news .newColBar');
85                }
86            }
87        });
88    }, 300000);
89
90    setTimeout(function() {
91        $("#hos_slides .hotGis h4").dotdotdot({
92            watch: "window",
93            wrap: 'letter'
94        });
95    }, 300);
96
97    /*--------------------------------Channel Button Slide--------------------------------*/
98
99    var $win = $(window),
100        isTouch = !!('ontouchstart' in window),
101        clickEvent = isTouch ? 'click touch' : 'click',
102        scrollbarWidth = getScrollbarWidth();
103    (function() {
104        var $carousel = $('#cycling_by_slides'),
105            $frame = $('.frame', $carousel),
106            $controls = $('div.controls', $carousel),
107            $scrollbar = $('div.scrollbar', $carousel);
108        $frame.mightySlider({
109            speed: 300,
110            easing: 'easeOutExpo',
111            navigation: {
112                navigationType: 'centered',
113                activateOn: clickEvent
114            },
115            scrolling: {
116                scrollBy: 1
117            },
118            scrollBar: {
119                scrollBarSource: $scrollbar
120            },
121            buttons: {
122                prev: $('.prev', $controls),
123                next: $('.next', $controls)
124            }
125        });
126        var API = $frame.data().mightySlider;
127        $carousel.on(clickEvent, 'button[data-action]', function() {
128            var action = $(this).data('action');
129            switch (action) {
130                case 'add':
131                    API.add('<li>' + API.slides.length + '</li>');
132                    break;
133                case 'remove':
134                    API.remove(-1);
135                    break;
136                default:
137                    API[action]();
138            }
139        });
140        $frame.mightySlider('on', 'active', function() {
141
142            jwplayer("tvPlayer31").stop();
143            jwplayer("tvPlayer32").stop();
144            jwplayer("tvPlayer33").stop();
145            jwplayer("tvPlayer34").stop();
146            jwplayer("tvPlayer35").stop();
147			// jwplayer("tvPlayer36").stop();
148			window.pause();	  
149            $(".playBtn").removeClass("pause");
150            jwplayer("playerradio1").stop();
151            jwplayer("playerradio2").stop();
152            jwplayer("playerradio3").stop();
153            jwplayer("playerradio4").stop();
154            jwplayer("playerradio5").stop();
155            jwplayer("playerradiocnrhk").stop();
156			jwplayer("playerradiocmgrgb").stop();
157            jwplayer("playerpth").stop();
158            $(".playerwrap").addClass("close");
159            $(".playerwrap" + $(".channelBtnWrap ul li.mSSlide.active").data("channel")).removeClass("close");
160            $(".playerwrap" + $(".channelBtnWrap ul li.mSSlide.active").data("channel") + " .radShowPanel .radShowTit").trigger("update");
161            if (window.player_playing > 0) {
162                var new_channel = $(".channelBtnWrap ul li.mSSlide.active").data("channel");
163                if (new_channel == 31) {
164                    jwplayer('tvPlayer31').play();
165                } else if (new_channel == 32) {
166                    jwplayer('tvPlayer32').play();
167                } else if (new_channel == 32) {
168                    jwplayer('tvPlayer33').play();
169                }else if (new_channel == 32) {
170                    jwplayer('tvPlayer34').play();
171                }else if (new_channel == 32) {
172                    jwplayer('tvPlayer35').play();
173				 }else if (new_channel == 32) {
174                    // jwplayer('tvPlayer36').play();
175                }else {
176                    $('.playBtn[data-channel=' + new_channel + ']').click();
177                }
178
179            }
180        });
181    })();
182
183    $(".chButtonContainer .chBx").click(function(){
184
185        $(".chButtonContainer div").removeClass('active');
186        $(this).addClass('active');
187		window.pause();
188        jwplayer("tvPlayer31").stop();
189        jwplayer("tvPlayer32").stop();
190        jwplayer("tvPlayer33").stop();
191        jwplayer("tvPlayer34").stop();
192        jwplayer("tvPlayer35").stop();
193		// jwplayer("tvPlayer36").stop();						
194        $(".playBtn").removeClass("pause");
195        jwplayer("playerradio1").stop();
196        jwplayer("playerradio2").stop();
197        jwplayer("playerradio3").stop();
198        jwplayer("playerradio4").stop();
199        jwplayer("playerradio5").stop();
200        jwplayer("playerradiocnrhk").stop();
201        jwplayer("playerradiocmgrgb").stop();
202        jwplayer("playerpth").stop();
203        $(".playerwrap").addClass("close");
204        $(".playerwrap" + $(this).data("channel")).removeClass("close");
205        $(".playerwrap" + $(this).data("channel") + " .radShowPanel .radShowTit").trigger("update");
206        if (window.player_playing > 0) {
207            var new_channel = $(this).data("channel");
208            if (new_channel == 31) {
209                jwplayer('tvPlayer31').play();
210            } else if (new_channel == 32) {
211                jwplayer('tvPlayer32').play();
212            } else if (new_channel == 33) {
213                jwplayer('tvPlayer33').play();
214            } else if (new_channel == 34) {
215                jwplayer('tvPlayer34').play();
216            } else if (new_channel == 35) {
217                jwplayer('tvPlayer35').play();
218			 } else if (new_channel == 36) {
219                // jwplayer('tvPlayer36').play();
220            } else {
221                $('.playBtn[data-channel=' + new_channel + ']').click();
222            }
223
224        }
225		
226		if($(this).attr("id") == 'tvPlayer31_main' && window.loaded31 == false){
227			setupPlayer(31);
228			window.loaded31 = true;
229		}
230		
231		if($(this).attr("id") == 'tvPlayer32_main'){
232			// Manual play only — never rely on updateFeed re-init
233			if (is32PlayerMounted()) {
234				try { window.resume(); } catch (e) {}
235			} else {
236				window._wantPlay32 = true;
237				setup32PlayerByStatus();
238			}
239		}
240    })
241
242    /*-----------------------------------Time Table Slide---------------------------------*/
243    initialize();
244
245    setInterval(function() {
246        updateFeed()
247    }, 60000);
248    
249    // setInterval(function() {
250    //     updateView()
251    // }, 10000);
252
253    /*-----------------------------------Hotspot Slide---------------------------------*/
254    var $hoswin = $(window),
255        hosisTouch = !!('ontouchstart' in window),
256        hosclickEvent = hosisTouch ? 'tap touchstart' : 'click',
257        hosscrollbarWidth = hosgetScrollbarWidth();
258    (function() {
259        var $hoscarousel = $('#hos_slides'),
260            $hosframe = $('.hosframe', $hoscarousel),
261            $hoscontrols = $('div.controls', $hoscarousel),
262            $hosscrollbar = $('div.scrollbar', $hoscarousel);
263        if ($hosframe.length > 0) {
264            $hosframe.mightySlider({
265                speed: 300,
266                easing: 'easeOutExpo',
267                navigation: {
268                    navigationType: 'centered',
269                    activateOn: hosclickEvent
270                },
271                buttons: {
272                    prev: $('.hosprev', $hoscontrols),
273                    next: $('.hosnext', $hoscontrols),
274                    fullScreen: 1
275                }
276            });
277            var hosAPI = $hosframe.data().mightySlider;
278            $hoscarousel.on(hosclickEvent, 'button[data-action]', function() {
279                var action = $(this).data('action');
280                switch (action) {
281                    case 'add':
282                        hosAPI.add('<li>' + hosAPI.slides.length + '</li>');
283                        break;
284                    case 'remove':
285                        hosAPI.remove(-1);
286                        break;
287                    default:
288                        hosAPI[action]();
289                }
290            });
291        }
292    })();
293    /*-----------------------------Responsive Font ----------------------------*/
294    $('.tiWrap.en').flowtype({
295        minimum: 1,
296        maximum: 1200,
297        minFont: 12,
298        maxFont: 40,
299        fontRatio: 8,
300    });
301    $('.tiWrap.ch').flowtype({
302        minimum: 1,
303        maximum: 1200,
304        minFont: 12,
305        maxFont: 34,
306        fontRatio: 3,
307    });
308    /*-----------------------------Shape Clipping----------------------------*/
309    $(function() {
310        var points = [
311            [0, 0],
312            [57, 0],
313            [40, 100],
314            [0, 100]
315        ];
316        $('#clipBlock').clipPath(points, {
317            isPercentage: true
318        });
319    });
320    /*-----------------------------Sort Search Button ----------------------------*/
321    $('select.sortWrap').after('<ul class="sortUl' + (window.lang == "en" ? " eng" : "") + '"></ul>');
322    $('select.sortWrap option').each(function() {
323        $('ul.sortUl').append('<li' + (window.lang == "en" ? ' class="cateEng"' : "") + '><div title="' + $(this).attr('fullText') + '" tabindex="0" class="sortCate' + (window.lang == "en" ? ' eng' : "") + '" href="javascript:void(0);" data-cateid="' + $(this).attr('data-id') + '" data-value="' + $(this).val() + '" alt="' + $(this).val() + '" title="' + $(this).val() + '"><h3>' + $(this).text() + '</h3></div></li>');
324    });
325    $('ul.sortUl li:eq(0)').addClass('active');
326    $('ul.sortUl > li .sortCate').click(function() {
327
328        $('ul.sortUl > li').removeClass('active');
329        $(this).parent().addClass('active');
330        var e = $(this).parent().index();
331        $('select.sortWrap option:eq(' + e + ')').prop('selected', true);
332        $('select.sortWrap').change();
333    });
334
335    $('ul.sortUl > li .sortCate').keypress(function(e) {
336        var key = e.which;
337        if(key == 13)  // the enter key code
338         {
339        $('ul.sortUl > li').removeClass('active');
340        $(this).parent().addClass('active');
341        var e = $(this).parent().index();
342        $('select.sortWrap option:eq(' + e + ')').prop('selected', true);
343        $('select.sortWrap').change();
344         }
345    });
346
347    $('select.sortWrap').on("change", function() {
348        var e = $('option:selected', this).index();
349        $('ul.sortUl > li').removeClass('active');
350        $('ul.sortUl > li:eq(' + e + ')').addClass('active');
351        __LogClickEventAction("channel_page:home", "homepage_" + (window.lang == "en" ? "eng" : "chi"), "lang=" + window.lang + "&section=category&categoryId=" + $('select.sortWrap option:selected').data("id"));
352        if ($(".cateSearch[data-cate='" + $('select.sortWrap option:selected').val() + "']").hasClass("active")) {
353            $(".cateSearch").removeClass("active");
354        } else {
355            $(".cateSearch").removeClass("active");
356            $(".cateSearch[data-cate='" + $('select.sortWrap option:selected').val() + "']").addClass("active");
357        }
358    });
359
360    //////////Alex Pop///////////
361    $(".playerClose").click(function(e) {
362        window.player_playing = 0;
363        mainslider.resume();
364
365        e.stopPropagation();
366        jwplayer("tvPlayer31").stop();
367		window.pause();		 
368        jwplayer("tvPlayer32").stop();
369        jwplayer("tvPlayer33").stop();
370        jwplayer("tvPlayer34").stop();
371        jwplayer("tvPlayer35").stop();
372		// jwplayer("tvPlayer36").stop();						
373        $(".playBtn").removeClass("pause");
374        jwplayer("playerradio1").stop();
375        jwplayer("playerradio2").stop();
376        jwplayer("playerradio3").stop();
377        jwplayer("playerradio4").stop();
378        jwplayer("playerradio5").stop();
379        
380        jwplayer("playerradiocnrhk").stop();
381        jwplayer("playerradiocmgrgb").stop();
382        jwplayer("playerpth").stop();
383        $(".playerwrap").addClass("close");
384        $(".callPlayer").removeClass("opened");
385        $("#player_pop_up").removeClass("opened");
386    });
387    //////////End od Alex Pop///////////
388    var $glance = $('.glance_masonry').masonry({
389        itemSelector: '.item',
390        percentPosition: true,
391        gutter: 20
392    });
393    $glance.imagesLoaded().progress(function() {
394        $glance.masonry('layout');
395    });
396    $(".playBtn").click(function() {
397        if (!$(this).hasClass("pause")) {
398            jwplayer("player" + $(this).data("channel")).play();
399            $(".playBtn").addClass("pause");
400        } else {
401            jwplayer("player" + $(this).data("channel")).pause();
402            window.player_playing = 0;
403            $(".playBtn").removeClass("pause");
404        }
405    });
406
407    $.each(["31", "32"], function(i, v) {
408
409        $("#scroll" + v).scrollbox();
410        $("#scroll" + v).imagesLoaded(function(e) {
411            $(e.elements[0]).scrollbox('update');
412        });
413        $(window).on('resize', function() {
414            $("#scroll" + v).scrollbox('update');
415        });
416    });
417
418    $(document).on('tap touchstart click touch', '.cateSearchContainer .relBar', function() {
419        $(this).parent().removeClass('active')
420    })
421
422});
423
424var windowState = 'large';
425
426function getScrollbarWidth() {
427    var outer = document.createElement("div");
428    outer.style.visibility = "hidden";
429    outer.style.width = "100px";
430    document.body.appendChild(outer);
431    var widthNoScroll = outer.offsetWidth;
432    // force scrollbars
433    outer.style.overflow = "scroll";
434    // add innerdiv
435    var inner = document.createElement("div");
436    inner.style.width = "100%";
437    outer.appendChild(inner);
438    var widthWithScroll = inner.offsetWidth;
439    // remove divs
440    outer.parentNode.removeChild(outer);
441    return widthNoScroll - widthWithScroll;
442}
443
444function hosgetScrollbarWidth() {
445    var outer = document.createElement("div");
446    outer.style.visibility = "hidden";
447    outer.style.width = "100px";
448    document.body.appendChild(outer);
449    var widthNoScroll = outer.offsetWidth;
450    // force scrollbars
451    outer.style.overflow = "scroll";
452    // add innerdiv
453    var inner = document.createElement("div");
454    inner.style.width = "100%";
455    outer.appendChild(inner);
456    var widthWithScroll = inner.offsetWidth;
457    // remove divs
458    outer.parentNode.removeChild(outer);
459    return widthNoScroll - widthWithScroll;
460}
461
462function initialize() {
463    var tmp = "";
464    $('select.sortWrap option').each(function() {
465        tmp += '<div class="cateSearch" data-cate="' + $(this).val() + '"><div class="relBar"><p>' + $(this).val() + '</p><p class="relDate">' + $(".cateSearchContainer").attr("date") + '</p></div></div>';
466    });
467//     $(".cateSearchContainer").html(tmp);
468
469    $(document).ready(function() { 
470        var initd = setInterval(function(){
471	        if(typeof currentTimeForWeather !=="undefined"){
472		        updateFeed();
473				//loadTimeTable();
474				maintainCateSearch();
475				clearInterval(initd);
476			}
477		},500)
478    });
479}
480
481function loadTimeTable() {
482	Date.prototype.yyyymmdd = function() {
483	    var yyyy = this.getFullYear().toString();
484	    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
485	    var dd = this.getDate().toString();
486	    return yyyy + "" + (mm[1] ? mm : "0" + mm[0]) + "" + (dd[1] ? dd : "0" + dd[0]); // padding
487	};
488	
489	var tdate = new Date(currentTimeForWeather*1000);
490	tdate = tdate.yyyymmdd();
491	tdate = parseInt(window.sday);
492	 $.ajax({
493        type: "GET",
494        url: window.base_url + "/timetable/main_timetable/" + tdate,
495        dataType: "json",
496        success: function(data) {
497            if (typeof data.result !== 'undefined') {
498                initCate(data);
499                maintainCateSearch();
500				updateView();
501            }
502        }
503    })
504}
505function initradioscroll(data){
506	for(var i=0;i<data.result.length;i++){
507		var tmp = "";
508		var channelNumber = data.result[i]['name'];
509	    var existProgramme = [];
510	
511	    $.each($(data.result[i]['data']).find('.showWrap'), function() {
512	        var _time = $(this).find(".timeRow").text(); //programme time to display
513	        if (typeof($(this).find(".showTit").attr("href")) !== "undefined" && $(this).find(".showTit").attr("href") != "") {
514	            tmp += '<div class="radListBlock" data-id="' + $(this).data("id") + '">' +
515	                '<div class="radTime">' + _time + '</div>' +
516	                '<a href="' + $(this).find(".showTit").attr("href") + '" title="' + $(this).find(".showTit").attr("title") + '">';
517	            tmp += '<div class="radListTit">' + $(this).find(".showTit").attr("title") + '</div></a></div>';
518	            existProgramme.push($(this).data("f"));
519	        }
520	    });
521
522	    $("#scroll" + channelNumber).html(tmp);
523	    $("#scroll" + channelNumber).scrollbox();
524	    $("#scroll" + channelNumber).imagesLoaded(function(e) {
525	        $(e.elements[0]).scrollbox('update');
526	    });
527	    $(window).on('resize', function() {
528	        $("#scroll" + channelNumber).scrollbox('update');
529	    });
530	}
531}
532
533function initCate(data) {
534	for(var i=0;i<data.result.length;i++){
535		var thistimetable = $(data.result[i]['data']);
536		$('#main-category #mainselection li div').each(function(dd) {
537            var cate = $(this).attr('data-value');
538            var cateid = $(this).attr('data-cateid');
539            var htmlwrapper = '<div class="cateSearchChannelContainer cate-result" data-type="' + data.result[i]['type'] + '">';
540            htmlwrapper += '<div class="relBar chNum">' + data.result[i]['short_eng_name'] + '</div>';
541            html = '';
542            var tempchannel = data.result[i]['key'];
543            thistimetable.find('.showWrap[data-cateid*="|' + cateid + '|"],.showWrap .single-wrap[data-cateid*="|' + cateid + '|"]').each(function() {
544                var tempitem = $(this);
545                var _showTit = tempitem.find('.showTit').text() || "";
546                if (_showTit !== "") { _showTit = _showTit.trim(); }
547                var _showEpi = tempitem.find('.showEpi').text() || "";
548                if (_showEpi !== "") { _showEpi = _showEpi.trim(); }
549                var _sameTit = false,
550                    _showSameEpi = "";
551
552                if (_showTit !== "" && _showEpi !== "" && _showTit === _showEpi) {
553                    _sameTit = true;
554                    var _date = tempitem.attr('data-date') || "";
555                    if (_date !== "") {
556                        _date = new Date(_date);
557                        _showSameEpi = ((_date.getUTCDate() < 10) ? "0" + _date.getUTCDate() : _date.getUTCDate()) + "/" + (((_date.getUTCMonth() + 1) < 10) ? "0" + (_date.getUTCMonth() + 1) : (_date.getUTCMonth() + 1));
558                    }
559                }
560
561                html += '<div class="cateRel cate-result" data-id="' + tempitem.attr('data-cate-id') + '">';
562                html += '	<div class="relWrap clearfix">';
563                html += '		<a href="' + tempitem.find('.showTit').attr('href') + '" target="_blank">';
564                html += '			<div class="relPic" style="background: url(' + (tempitem.attr('data-p-80')!=""?tempitem.attr('data-p-80'):tempitem.attr('data-p')) + ') no-repeat center;background-size: cover;"></div>';
565                html += '			<div class="relShow">';
566                html += '				<p>' + _showTit + '</p>';
567                if (_showEpi !== "" || _showSameEpi !== "") {
568                    html += '<p class="relEpi">' + window.lbl_programme + (!_sameTit ? _showEpi : _showSameEpi) + '</p>';
569                }
570                html += '			</div>';
571                html += '		</a>';
572                html += '		<div class="relTimeWrap">';
573                html += '			<div class="relTime">';
574                html += '				<p>' + tempitem.find('.timeRow').text() + '</p>';
575                html += '			</div>';
576                html += '			<div class="relStamp" data-channel="' + tempchannel + '"></div>';
577                html += '		</div>';
578                html += '	</div>';
579                html += '</div>';
580
581            });
582            if (html != '') {
583                htmlwrapper += html;
584                htmlwrapper += '</div>';
585                if ($('.cateSearch[data-cate="' + cate + '"] .empty-result').length > 0)
586                    $('.cateSearch[data-cate="' + cate + '"] .empty-result').remove();
587            } else {
588                htmlwrapper = '';
589                if ($('.cateSearch[data-cate="' + cate + '"] .cate-result').length <= 0) {
590                    htmlwrapper = '<div class="relBar cate-result empty-result">' + no_programme + '</div>';
591                }
592            }
593            $('.cateSearch[data-cate="' + cate + '"]').append(htmlwrapper);
594        });
595	}
596}
597
598function maintainCateSearch() {
599
600    $(".cateRel .relStamp").on("click", function() {
601        $('html,body').stop().animate({
602            scrollTop: 0
603        }, 500);
604        $(".callPlayer").removeClass("opened");
605        $(".callPlayer[data-channel=" + $(this).data("channel") + "]").click();
606    });
607}
608var getPInfo = 0;
609var temp;
610
611function updateView() {
612    if ((new Date().getTime() - getPInfo) / 1000 < 60) {
613        if (temp.dtt) {
614            getProgramInfo(temp.dtt);
615        }
616        if (temp.radio) {
617            getRadioProgram(temp.radio);
618        }
619    }
620}
621function updateFeed(){
622	$.ajax({
623        type: "GET",
624        url: window.base_url + "/main/update_view?no=" + Math.random(),
625        dataType: "json",
626        success: function(data) {
627            temp = data
628            var d = new Date();
629            getPInfo = d.getTime();
630			updateView();
631        }
632    })
633}
634
635function getRadioProgram(data) {
636    if (typeof data.scheduleItem === 'undefined') {
637        return false
638    }
639
640    var playerbg = [];
641$('.tableBlock [type=radio] .showBlock .nameBlock').remove();
642$('.tableBlock [type=radio] .timeBlock .timeDis:not(.horiDash,.vertDash)').empty();
643    itemId = 0;
644    var currentChannel = "";
645    var tempradiolive = "";
646    for (var i = 0; i < data.scheduleItem.length; i++) {
647        var item = data.scheduleItem[i];
648        var channelNumber = String(item.channel);
649        if (typeof item.channel == "object")
650            continue;
651        if (currentChannel != channelNumber) {
652            currentChannel = channelNumber;
653            itemId = 0;
654        }
655        startEndTime = '';
656        programId = String(item.programmeId);
657        if (lang == "en") {
658            programName = (typeof item.programmeTitleEng == "string") ? item.programmeTitleEng : "";
659            episodeName = (typeof item.episodeTitleEng == "string") ? item.episodeTitleEng : "";
660        } else {
661            programName = (typeof item.programmeTitleChi == "string") ? item.programmeTitleChi : "";
662            episodeName = (typeof item.episodeTitleChi == "string") ? item.episodeTitleChi : "";
663        }
664        if (programName == "") {
665            programName = (typeof item.programmeTitle == "string") ? item.programmeTitle : "";
666        }
667        if (episodeName == "") {
668            episodeName = (typeof item.episodeTitle == "string") ? item.episodeTitle : "";
669        }
670        startTime = String(item.startTime);
671        endTime = item.endTime;
672        producer = (typeof item.producer == "string") ? item.producer : "";
673        programmeFolder = item.programmeFolder;
674        var thumbnail = "";
675        if (itemId == 0) {
676            thumbnail = item.thumbnail;
677        }
678        if (startTime != '') {
679            var d = new Date(startTime * 1000);
680            var hour = d.getHours();
681            hour = ("0" + hour).slice(-2);
682            var min = d.getMinutes();
683            min = ("0" + min).slice(-2);
684            var d2 = new Date(endTime * 1000);
685            var hour2 = d2.getHours();
686            hour2 = ("0" + hour2).slice(-2);
687            var min2 = d2.getMinutes();
688            min2 = ("0" + min2).slice(-2);
689            startEndTime = 'HKT ' + hour + ":" + min + " - " + hour2 + ":" + min2;
690        }
691	    if((currentTimeForWeather*1000 >= item.startTime * 1000) && (currentTimeForWeather*1000 < item.endTime * 1000)){
692            var _tmp_date_obj = new Date(item.startTime * 1000);
693            var _tmp_date_date = _tmp_date_obj.getUTCDate();
694            var _tmp_date_month = _tmp_date_obj.getUTCMonth() + 1;
695            var _tmp_date_year = _tmp_date_obj.getFullYear();
696
697            radio_live_start_time[item.channel] = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
698            $(".programme_row").removeClass("onair");
699            $(".programme_onair").html('');
700            if (startTime != '') {
701                var tmpName = programName;
702                if (episodeName != "") {
703                    tmpName += ": <span class='subTit'>" + episodeName + "</span>";
704                }
705                $(".playerwrap" + channelNumber + " .radShowPanel .radShowTit").trigger("destroy");
706                $(".playerwrap" + channelNumber + " .radShowPanel .radShowTit h2").html(tmpName);
707                if (producer != ' ' && producer !== "") {
708                    producer = presenter + ": " + producer;
709                }
710                $(".playerwrap" + channelNumber + " .radShowPanel .radShowTit .radShowHost h3").html(producer);
711                $(".playerwrap" + channelNumber + " .radShowPanel .radShowTit").dotdotdot({
712                    watch: true,
713                    wrap: 'letter'
714                });
715                $(".playerwrap" + channelNumber + " .radShowPicWrap").html("<img src='" + (item.timeline_thumbnail!==undefined?item.timeline_thumbnail:item.thumbnail) + "' alt='" + programName + "' title='" + programName + "' width='100%' height='100%' padding-bottom='100%' />");
716                var insideHtml = $('.mSSlide.active #timeTable_' + channelNumber + ' div.timetable > div[data-id=programme_' + startTime + ']').html();
717                var noWebcastPos = 0;
718                var noLivePos1 = 0;
719                var noLivePos2 = 0;
720                if (insideHtml != null) {
721                    noWebcastPos = insideHtml.indexOf("label_nowebcast");
722                    noLivePos1 = insideHtml.indexOf("No live webcast for this session");
723                    noLivePos2 = insideHtml.indexOf("本时段未有网上直播");
724                }
725                if (noWebcastPos == -1 && noLivePos1 == -1 && noLivePos2 == -1) {
726                    $("#programme_onair_" + startTime).html('<img src="/img/label_onair_c.png" alt="' + on_air + '" width="49" height="18" vspace="5">');
727                }
728                
729                if((currentTimeForWeather*1000 >= item.startTime * 1000) && (currentTimeForWeather*1000 < item.endTime * 1000)){
730                if(lang == "en"){
731                    var programme_name = item.programmeTitleEng;
732                }else{
733                    var programme_name = item.programmeTitleChi;
734                }
735                    // Smooth Scroll On Air Programme
736                    if ($('#timeTable_' + channelNumber + ' div.timetable > div.current').length) {
737                        $('#timeTable_' + channelNumber + ' div.timetable').scrollbox('scroll', $('#timeTable_' + channelNumber + ' div.timetable > div.current').position().top, {
738                            duration: 500
739                        });
740                    }
741                    
742                        var d = new Date(item.startTime * 1000);
743                        var hour = d.getHours();
744                        hour = ("0" + hour).slice(-2);
745                        var min = d.getMinutes();
746                        min = ("0" + min).slice(-2);
747                        var d2 = new Date(item.endTime * 1000);
748                        var hour2 = d2.getHours();
749                        hour2 = ("0" + hour2).slice(-2);
750                        var min2 = d2.getMinutes();
751                        min2 = ("0" + min2).slice(-2);
752                        
753                        var show_start_time = hour+":"+min;
754                        show_end_time = hour2+":"+min2
755      
756                    if(typeof item.programmeFolder=="string" && item.programmeFolder != null){
757                        var programme_url = window.location.origin + "/radio/" + item.channel + "/programme/" + item.programmeFolder;
758                    }else{
759                        var programme_url = window.location.origin + "/radio/" + item.channel;
760                    }
761                   
762                    var dak = $('.tableBlock #timetable' + channelNumber).hasClass('lit');
763                    var dak_mob = $('.tableBlock #mtimetable' + channelNumber).hasClass('lit');
764                    
765                    var progHtml = '';
766                	progHtml += '<div class="nameBlock '+(dak?"dak":"")+'">';
767					progHtml += '<a title="'+programme_name+'" href="'+programme_url+'" target="_blank">'+programme_name+'</a>';
768					progHtml += '</div>';
769
770                    var progHtml_mob = '';
771                	progHtml_mob += '<div class="nameBlock '+(dak_mob?"dak":"")+'">';
772					progHtml_mob += '<a title="'+programme_name+'" href="'+programme_url+'" target="_blank">'+programme_name+'</a>';
773					progHtml_mob += '</div>';
774
775					$('.tableBlock #timetable' + channelNumber + ' .showBlock').prepend($(progHtml))
776					$('.tableBlock #mtimetable' + channelNumber + ' .showBlock').prepend($(progHtml_mob))
777                    
778                    $('.tableBlock #timetable' + channelNumber + ' .timeBlock .timeDis:first-child').text(show_start_time);
779                    $('.tableBlock #timetable' + channelNumber + ' .timeBlock .timeDis:last-child').text(show_end_time);
780                    $('.tableBlock #mtimetable' + channelNumber + ' .timeBlock .timeDis:first-child').text(show_start_time);
781                    $('.tableBlock #mtimetable' + channelNumber + ' .timeBlock .timeDis:last-child').text(show_end_time);
782                }
783
784                
785                $.each($(".cateSearchContainer .cateSearch [data-type=radio] .cateRel"), function() {
786
787                    if ($(this).attr('data-id') == ("programme_" + channelNumber + "_" + startTime)) {
788                        tempradiolive += (tempradiolive != '' ? "," : "") + " .cateSearch .cateRel[data-id=" + $(this).attr('data-id') + "]";
789                    } else {
790                        $(this).find(".relStamp").html("");
791                    }
792                });
793                if (!$("#scroll" + channelNumber + " > div[data-id=programme_" + startTime + "]").hasClass("fir")) {
794                    $(".player" + channelNumber).removeClass("scrolled");
795                    $('#scroll' + channelNumber + ' div').removeClass("fir");
796                    $("#scroll" + channelNumber + " > div[data-id=programme_" + startTime + "], #scroll" + channelNumber + " > div[data-id=programme_" + startTime + "] .radListTit").addClass("fir");
797                    // Smooth Scroll On Air Programme
798                    if (!$(".player" + channelNumber).hasClass("close")) {
799                        if ($('#scroll' + channelNumber + ' > div[data-id=programme_' + startTime + ']').length) {
800                            $("#scroll" + channelNumber).scrollbox('scroll', $('#scroll' + channelNumber + ' > div[data-id=programme_' + startTime + ']').position().top, {
801                                duration: 500
802                            });
803
804                            $(".player" + channelNumber).addClass("scrolled");
805                        }
806                    }
807                }
808                var obj = {
809                    currprog: $("#scroll" + channelNumber + " .fir").attr('data-f'),
810                };
811                currArr[channelNumber] = obj;
812            }
813            setupRadioPlayer(channelNumber);
814        }
815        itemId++;
816        item.alertMessageChi = (typeof item.alertMessageChi === "object" || (typeof item.alertMessageChi === "undefined")) ? "" : item.alertMessageChi;
817        item.alertMessageEng = (typeof item.alertMessageEng === "object" || (typeof item.alertMessageEng === "undefined")) ? "" : item.alertMessageEng;
818        
819        //check live 
820        $("#scroll" + channelNumber + " > div[data-id=programme_" + startTime + "]").attr('live', item.live)
821        $("#scroll" + channelNumber + " > div[data-id=programme_" + startTime + "]").attr('alertMessageChi', item.alertMessageChi)
822        $("#scroll" + channelNumber + " > div[data-id=programme_" + startTime + "]").attr('alertMessageEng', item.alertMessageEng)
823        if ($("#scroll" + channelNumber + " > div.fir").attr("live") == "N") {
824            $('.playerwrap' + channelNumber + " .radShowPanel .panelfill .overlay").remove();
825            jwplayer('player' + channelNumber).pause(true)
826            $(".playBtn[data-channel=" + channelNumber + "]").parent().attr("title", window.lang_play_btn);
827            $(".playBtn[data-channel=" + channelNumber + "]").removeClass("pause");
828            $('.playerwrap' + channelNumber + " .radShowPanel .panelfill").append('<div class="overlay"><div>' + (window.lang == "en" ? $("#scroll" + channelNumber + " > div.fir").attr('alertMessageEng') : $("#scroll" + channelNumber + " > div.fir").attr('alertMessageChi')) + '</div></div>')
829        } else {
830            $('.playerwrap' + channelNumber + " .radShowPanel .panelfill .overlay").remove();
831        }
832
833    }
834    $(tempradiolive).find(".relStamp").html(live_video);
835}
836
837function getProgramInfo(data) {
838    $('#tvplayer31-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
839    $('#tvplayer32-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
840    $('#tvplayer33-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
841    $('#tvplayer34-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
842    $('#tvplayer35-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
843	// $('#tvplayer36-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').hide();
844    $('#tvplayer31-container .vidScreen .recomBlock .vidTit').hide();
845    $('#tvplayer32-container .vidScreen .recomBlock .vidTit').hide();
846    $('#tvplayer33-container .vidScreen .recomBlock .vidTit').hide();
847    $('#tvplayer34-container .vidScreen .recomBlock .vidTit').hide();
848    $('#tvplayer35-container .vidScreen .recomBlock .vidTit').hide();
849	// $('#tvplayer36-container .vidScreen .recomBlock .vidTit').hide();
850    
851    var show_live_title = false;
852    if (typeof data.programme === 'undefined') {
853        return false
854    }
855    itemId = 0;
856    var currentChannel = 31;
857    var temptvlive = '',programName2 = '',episodeName2 = '';
858    
859    
860    $('.tableBlock [type=tv] .showBlock .nameBlock').remove();
861    $('.tableBlock [type=tv] .showBlock hr').remove();
862    $('.tableBlock [type=tv] .timeBlock .timeDis:not(.horiDash,.vertDash)').empty();
863    
864    for (var i = 0; i < data.programme.length; i++) {
865        var item = data.programme[i];
866        var dtt_channelNumber = String(item.channelNumber);
867
868        channelc = String(item.channel);
869        if (currentChannel != dtt_channelNumber) {
870            currentChannel = dtt_channelNumber;
871            itemId = 0;
872        }
873        startEndTime = '';
874		if(Array.isArray(item.programmes.programme)){
875			itemProg = item.programmes.programme[0];
876			itemProg2 = item.programmes.programme[1];
877		}else{
878			itemProg = item.programmes.programme;
879			itemProg2 = undefined;
880		}
881		
882        if (lang == "en") {
883            programName = itemProg.programmeTitleEng;
884            episodeName = itemProg.episodeTitleEng;
885            if(itemProg2!=undefined){
886	            programName2 = itemProg2.programmeTitleEng;
887	            episodeName2 = itemProg2.episodeTitleEng;
888	        }
889        } else {
890            programName = itemProg.programmeTitleChi;
891            episodeName = itemProg.episodeTitleChi;
892            if(itemProg2!=undefined){
893	            programName2 = itemProg2.programmeTitleChi;
894				episodeName2 = itemProg2.episodeTitleChi;
895			}
896        }
897        if (programName == "" || typeof programName === 'object') {
898            programName = itemProg.programmeTitle;
899        }
900        if (episodeName == "" || typeof episodeName === 'object') {
901            episodeName = itemProg.episodeTitle;
902        }
903        if (itemProg2!=undefined && (programName2 == "" || typeof programName2 === 'object')) {
904            programName2 = itemProg2.programmeTitle;
905        }
906        if (itemProg2!=undefined && (episodeName2 == "" || typeof episodeName2 === 'object')) {
907            episodeName2 = itemProg2.episodeTitle;
908        }
909        startTime = item.startTime;
910        endTime = item.endTime;
911        if (itemId == 0) {
912            thumbnail = String(itemProg.thumbnail);
913            thumbnail = typeof itemProg.thumbnail_690x388 !== "undefinded" ? String(itemProg.thumbnail_690x388) : thumbnail;
914
915            setThumbnail(thumbnail, dtt_channelNumber);
916        }
917        if (startTime != '') {
918            var d = new Date(startTime * 1000);
919            var hour = d.getHours();
920            hour = ("0" + hour).slice(-2);
921            var min = d.getMinutes();
922            min = ("0" + min).slice(-2);
923            var d2 = new Date(endTime * 1000);
924            var hour2 = d2.getHours();
925            hour2 = ("0" + hour2).slice(-2);
926            var min2 = d2.getMinutes();
927            min2 = ("0" + min2).slice(-2);
928            startEndTime = 'HKT ' + hour + ":" + min + " - " + hour2 + ":" + min2;
929        }
930
931	    if((currentTimeForWeather*1000 >= item.startTime * 1000) && (currentTimeForWeather*1000 < item.endTime * 1000)){
932            var _tmp_date_obj = new Date(item.startTime * 1000);
933            var _tmp_date_date = _tmp_date_obj.getUTCDate();
934            var _tmp_date_month = _tmp_date_obj.getUTCMonth() + 1;
935            var _tmp_date_year = _tmp_date_obj.getFullYear();
936            if (item.channel == "dtt31") {
937                window._dtt31_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
938            } else if(item.channel == "dtt32"){
939                window._dtt32_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
940            } else if(item.channel == "dtt33"){
941                window._dtt33_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
942            } else if(item.channel == "dtt34"){
943                window._dtt34_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
944            } else if(item.channel == "dtt35"){
945                window._dtt35_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
946			} else if(item.channel == "dtt36"){
947                window._dtt36_live_start_time = _tmp_date_year + "-" + (_tmp_date_month < 10 ? "0" : "") + _tmp_date_month + "-" + (_tmp_date_date < 10 ? "0" : "") + _tmp_date_date;
948            }
949
950            $(".programme_row").removeClass("onair");
951            $(".programme_onair").html('');
952            
953            
954            if (startTime != '') {
955                if (programName == 'No live webcast for this session' || programName == '本时段未有网上直播') {
956                    programName = no_live_webcast;
957                }
958                if (programName == 'RTHK TV ' + dtt_channelNumber + ' Live Webcast' || programName == '港台电视 ' + dtt_channelNumber + ' 节目') {
959                    programName = rthk_tv + dtt_channelNumber + live_webcast;
960                }
961                var insideHtml = $('.mSSlide.active #timeTable_' + dtt_channelNumber + ' div.timetable > div[data-id=programme_' + startTime + ']').html();
962                var noWebcastPos = 0;
963                var noLivePos1 = 0;
964                var noLivePos2 = 0;
965                if (insideHtml != null) {
966                    noWebcastPos = insideHtml.indexOf("label_nowebcast");
967                    noLivePos1 = insideHtml.indexOf("No live webcast for this session");
968                    noLivePos2 = insideHtml.indexOf("本时段未有网上直播");
969                }
970                if (noWebcastPos == -1 && noLivePos1 == -1 && noLivePos2 == -1) {
971                    $("#programme_onair_" + startTime).html('<img src="/img/label_onair_c.png" alt="' + on_air + '" width="49" height="18" vspace="5">');
972                }
973                    
974                if((currentTimeForWeather*1000 >= item.startTime * 1000) && (currentTimeForWeather*1000 < item.endTime * 1000)){
975                    if(lang == "en"){
976                        var programme_name = item.programmes.programme.programmeTitleEng;
977                    }else{
978                        var programme_name = item.programmes.programme.programmeTitleChi;
979                    }
980                    var dak = $('.tableBlock #timetable' + dtt_channelNumber).hasClass('lit')
981
982                    if(item.programmes.programme !== undefined){
983	                    var progHtml = '',tmp_html = '';
984						Object.entries(item.programmes.programme).forEach(entry => {
985						  const [key, value] = entry;
986						  var progtitle = lang == "en"?value.programmeTitleEng:value.programmeTitleChi;
987
988						  if(typeof value.programmeFolder=="string" && value.programmeFolder != null){
989	                            var programme_url = window.location.origin + "/tv/" + item.channel + "/programme/" + value.programmeFolder;
990	                        }else{
991	                            var programme_url = "";
992	                        }
993							if(progHtml!='')progHtml+='<hr>';
994                            progHtml += '<div class="nameBlock '+(dak?"dak":"")+'">';
995                            programme_url!=''?progHtml += '<a title="'+progtitle+'" href="'+programme_url+'" target="_blank">'+progtitle+'</a>':progHtml += '<p>'+progtitle+'</p>';
996                            progHtml += '</div>';
997							
998							if(tmp_html!='')tmp_html+=' / ';
999							programme_url!=''?tmp_html += '<a title="'+progtitle+'" href="'+programme_url+'" target="_blank">'+progtitle+'</a>':tmp_html += '<p>'+progtitle+'</p>';
1000						});
1001						$('.tableBlock #timetable' + dtt_channelNumber + ' .showBlock').prepend($(progHtml))
1002						$('.tableBlock #mtimetable' + dtt_channelNumber + ' .showBlock').prepend($(progHtml))
1003					}
1004                    
1005                        var d = new Date(item.startTime * 1000);
1006                        var hour = d.getHours();
1007                        hour = ("0" + hour).slice(-2);
1008                        var min = d.getMinutes();
1009                        min = ("0" + min).slice(-2);
1010                        var d2 = new Date(item.endTime * 1000);
1011                        var hour2 = d2.getHours();
1012                        hour2 = ("0" + hour2).slice(-2);
1013                        var min2 = d2.getMinutes();
1014                        min2 = ("0" + min2).slice(-2);
1015
1016                        var show_start_time = hour+":"+min;
1017                            show_end_time = hour2+":"+min2
1018
1019                        
1020                        $('.tableBlock #timetable' + dtt_channelNumber + ' .timeBlock .timeDis:first-child').text(show_start_time);
1021                        $('.tableBlock #timetable' + dtt_channelNumber + ' .timeBlock .timeDis:last-child').text(show_end_time);
1022                        $('.tableBlock #mtimetable' + dtt_channelNumber + ' .timeBlock .timeDis:first-child').text(show_start_time);
1023                        $('.tableBlock #mtimetable' + dtt_channelNumber + ' .timeBlock .timeDis:last-child').text(show_end_time);
1024                        // Update the DTT Panel Current Programme Title
1025                        show_live_title = true;
1026
1027                        $('#tvplayer' + dtt_channelNumber + '-container .playTit').html(tmp_html);
1028                        $('#tvplayer' + dtt_channelNumber + '-container .vidScreen .vidList .liveBlock .liveChn').append('<a class="btn-show-live" href="javascript:;" onclick="golivebtn(\'' + dtt_channelNumber + '\')"><div class="liveTye">' + window.on_air + '</div></a>');
1029                        var livelabel = "";
1030                        $('#menu_hori .itemBlock[channel=dtt'+dtt_channelNumber+'] .proBlock .showBlock .nameBlock').each(function(){
1031	                        livelabel += (livelabel!==""?" / ":"") + $(this).text();
1032                        })
1033                        $('#tvplayer' + dtt_channelNumber + '-container .vidTit .livLabel').html('<a href="javascript:;" onclick="golivebtn(\'' + dtt_channelNumber + '\')">' + livelabel + '</a>');
1034                        $('#tvplayer' + dtt_channelNumber + '-container .vidScreen .recomBlock .vidTit').show();
1035                        // Smooth Scroll On Air Programme
1036                        if ($('#timeTable_' + dtt_channelNumber + ' div.timetable > div.current').length) {
1037                            $('#timeTable_' + dtt_channelNumber + ' div.timetable').scrollbox('scroll', $('#timeTable_' + dtt_channelNumber + ' div.timetable > div.current').position().top, {
1038                                duration: 500
1039                            });
1040                        }
1041                        var tmp = "";
1042                        var currentDate = new Date();
1043                        var selectedDate = new Date($(".pgTableWrap .pgDate ul li.active").data("js"));
1044                        var afterCurrent = false;
1045                        if (currentDate.getFullYear() != selectedDate.getFullYear() || currentDate.getMonth() != selectedDate.getMonth() || currentDate.getDate() != selectedDate.getDate()) {
1046                            afterCurrent = true;
1047                        }
1048                        var existProgramme = [];
1049                    
1050                        $(window).on('resize', function() {
1051                            $("#scroll" + dtt_channelNumber).scrollbox('update');
1052                        });
1053                        $.each($(".cateSearchContainer .cateSearch [data-type=tv] .cateRel"), function() {
1054                            if ($(this).data("id") == ("programme_" + dtt_channelNumber + "_" + startTime)) {
1055                                temptvlive += (temptvlive != '' ? "," : "") + " .cateSearch .cateRel[data-id=" + $(this).data("id") + "]";
1056                            } else {
1057                                $(this).find(".relStamp").html("");
1058                            }
1059                        });
1060             
1061                }
1062                var obj = {
1063						"timestamp": startTime
1064                };
1065                currArr[dtt_channelNumber] = obj;
1066            }
1067        }
1068        itemId++;
1069    }
1070    if (show_live_title) {
1071        $('#tvplayer31-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1072        $('#tvplayer32-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1073        $('#tvplayer33-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1074        $('#tvplayer34-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1075        $('#tvplayer35-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1076		// $('#tvplayer36-container .vidScreen .vidList .liveBlock .liveChn a.btn-show-live').show();
1077        $('#tvplayer31-container .vidScreen .recomBlock .vidTit').show();
1078        $('#tvplayer32-container .vidScreen .recomBlock .vidTit').show();
1079        $('#tvplayer33-container .vidScreen .recomBlock .vidTit').show();
1080        $('#tvplayer34-container .vidScreen .recomBlock .vidTit').show();
1081        $('#tvplayer35-container .vidScreen .recomBlock .vidTit').show();
1082		// $('#tvplayer36-container .vidScreen .recomBlock .vidTit').show();
1083    }
1084    $(temptvlive).find(".relStamp").html(live_video);
1085    checkChannelStatus();
1086
1087}
1088
1089function setupRadioPlayer(channel) {
1090    playerLoad = checkPlayerLoaded("#player" + channel);
1091    if (playerLoad == 0) {
1092        var _num, _tmp, _radio;
1093        switch (channel) {
1094            case "radio1":
1095                _radio = "1";
1096                _num = "2035313";
1097                _tmp = channel;
1098                break;
1099            case "radio2":
1100                _radio = "2";
1101                _num = "2040078";
1102                _tmp = channel;
1103                break;
1104            case "radio3":
1105                _radio = "3";
1106                _num = "2040079";
1107                _tmp = channel;
1108                break;
1109            case "radio4":
1110                _radio = "4";
1111                _num = "2040080";
1112                _tmp = channel;
1113                break;
1114            case "radio5":
1115                _radio = "5";
1116                _num = "2040081";
1117                _tmp = channel;
1118                break;
1119            case "radio6":
1120                _radio = "xgzs";
1121                _num = "2042860";
1122                _tmp = "radiocnrhk"; 
1123                break;
1124            case "pth":
1125                _radio = "pth";
1126                _num = "2040082";
1127                _tmp = "radiopth";
1128                break;
1129            case "radiocnrhk":
1130                _radio = "cnrhk";
1131                _num = "2046111";
1132                _tmp = "radiocnrhk";
1133                break;
1134            case "radiocmgrgb":
1135                _radio = "cmgrgb";
1136                _num = "2046112";
1137                _tmp = "radiocmgrgb";
1138                break;
1139            default:
1140                return;
1141        }
1142
1143        count_stream = 0;
1144        retry = 12;
1145        if (channel != "dab31" && channel !== "dab33" && channel !== "dab35" && channel !== "dab36") {
1146            jwplayer("player" + channel).setup(merge({
1147                primary: 'html5',
1148                hlshtml: true,
1149                width: "84%",
1150                "skin": get_formatted_skin("audio_live", "alexSkin"),
1151                height: 40,
1152                playlist: [{
1153                    sources: [{
1154                      file: "https://rthkradio" + _radio + "-live.akamaized.net/hls/live/"+_num+"/"+_tmp+"/master.m3u8"
1155                    }]
1156                }, {
1157                    sources: [{
1158                      file: "https://rthkradio" + _radio + "-live.akamaized.net/hls/live/"+_num+"/"+_tmp+"/master.m3u8"
1159                    }]
1160                }, {
1161                    sources: [{
1162                      file: "https://rthkradio" + _radio + "-live.akamaized.net/hls/live/"+_num+"/"+_tmp+"/master.m3u8"
1163                    }]
1164                }],
1165                icons: "false",
1166                autostart: false,
1167                androidhls: "true",
1168/*
1169                events: {
1170                    onPlay: function(event) {
1171
1172                        if ($("#scroll" + channel + " > div[data-id].fir").attr("live") == "N") {
1173                            $('.playerwrap' + channel + " .radShowPanel .panelfill .overlay").remove();
1174                            jwplayer('player' + channel).pause(true)
1175                            $('.playerwrap' + channel + " .radShowPanel .panelfill").append('<div class="overlay"><div>' + (window.lang == "en" ? $("#scroll" + channel + " > div[data-id].fir").attr("alertMessageEng") : $("#scroll" + channel + " > div[data-id].fir").attr("alertMessageChi")) + '</div></div>')
1176                            $(".playBtn").removeClass("pause");
1177                            $(".playBtn").parent().attr("title", window.lang_play_btn);
1178
1179                            window.player_playing = 0;
1180                            return;
1181                        }
1182                        window.player_playing = 1;
1183                        var _channel = channel;
1184                        var _programme_folder = "";
1185                        var _date = "";
1186                        var _current_item = $('#table' + channel + ' .showWrap.current');
1187                        if (typeof _current_item === "object") {
1188                            _programme_folder = currArr[_channel]["currprog"];
1189                            date = new Date();
1190                            _date = (date.getFullYear() + '-' + zeroPad((date.getMonth() + 1), 2) + '-' + zeroPad(date.getDate(), 2));
1191                            var _dcsqry = "lang=" + window.lang + "&section=player_live&channel=" + _channel + "&programme=" + _programme_folder + "&date=" + _date;
1192                            __LogPlayerAction(window.current_url, "", "player_live:" + _channel + "/" + _programme_folder, _date, "", _dcsqry);
1193                        }
1194                        $('.playerwrap.close .jwplayer').each(function() {
1195                            jwplayer($(this).attr('id')).stop();
1196                        })
1197
1198                        if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1199                            var status = jwplayer("player" + channel).getState();
1200                            status = status.toUpperCase();
1201                            if (globalStatus == "IDLE" || globalStatus == "PAUSE") {
1202                                globalStatus = "PLAYING";
1203                                count_stream = 0;
1204                                resetTimer();
1205                                setInterval(function() { countDown(channel); }, 1000);
1206                            }
1207                        }
1208                    },
1209                    onPause: function(event) {
1210                        window.player_playing = 0;
1211                        if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1212                            var status = jwplayer("player" + channel).getState();
1213                            status = status.toUpperCase();
1214
1215                            globalStatus = "PAUSE";
1216                            resetTimer();
1217                        }
1218
1219                    },
1220                    onIdle: function(event) {
1221                        if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1222                            var status = jwplayer("player" + channel).getState();
1223                            status = status.toUpperCase();
1224                            globalStatus = "IDLE";
1225                            resetTimer();
1226                        }
1227                    },
1228                    onError: function(event) {
1229                        setTimeout(function() {}, 1000);
1230                        if (count_stream < retry) {
1231
1232                            jwplayer('player' + channel).playlistNext();
1233                        } else if (count_stream == 12) {
1234                            alert('Connection timeout, please retry later.');
1235                        }
1236                        count_stream++;
1237                    }
1238                },
1239*/
1240                flashplayer: jw_path + 'jwplayer.flash.swf',
1241
1242            }, get_additional_para()));
1243            
1244            jwplayer("player" + channel).on('play', function(event){
1245	            if ($("#scroll" + channel + " > div[data-id].fir").attr("live") == "N") {
1246                    $('.playerwrap' + channel + " .radShowPanel .panelfill .overlay").remove();
1247                    jwplayer('player' + channel).pause(true)
1248                    $('.playerwrap' + channel + " .radShowPanel .panelfill").append('<div class="overlay"><div>' + (window.lang == "en" ? $("#scroll" + channel + " > div[data-id].fir").attr("alertMessageEng") : $("#scroll" + channel + " > div[data-id].fir").attr("alertMessageChi")) + '</div></div>')
1249                    $(".playBtn").removeClass("pause");
1250                    $(".playBtn").parent().attr("title", window.lang_play_btn);
1251
1252                    window.player_playing = 0;
1253                    return;
1254                }
1255                window.player_playing = 1;
1256                var _channel = channel;
1257                var _programme_folder = "";
1258                var _date = "";
1259                var _current_item = $('#table' + channel + ' .showWrap.current');
1260                if (typeof _current_item === "object") {
1261                    _programme_folder = currArr[_channel]["currprog"];
1262                    date = new Date();
1263                    _date = (date.getFullYear() + '-' + zeroPad((date.getMonth() + 1), 2) + '-' + zeroPad(date.getDate(), 2));
1264                    var _dcsqry = "lang=" + window.lang + "&section=player_live&channel=" + _channel + "&programme=" + _programme_folder + "&date=" + _date;
1265                    __LogPlayerAction(window.current_url, "", "player_live:" + _channel + "/" + _programme_folder, _date, "", _dcsqry);
1266                }
1267                $('.playerwrap.close .jwplayer').each(function() {
1268                    jwplayer($(this).attr('id')).stop();
1269                })
1270
1271                if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1272                    var status = jwplayer("player" + channel).getState();
1273                    status = status.toUpperCase();
1274                    if (globalStatus == "IDLE" || globalStatus == "PAUSE") {
1275                        globalStatus = "PLAYING";
1276                        count_stream = 0;
1277                        resetTimer();
1278                        setInterval(function() { countDown(channel); }, 1000);
1279                    }
1280                }
1281            });
1282            jwplayer("player" + channel).on('pause', function(event){
1283	            window.player_playing = 0;
1284                if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1285                    var status = jwplayer("player" + channel).getState();
1286                    status = status.toUpperCase();
1287
1288                    globalStatus = "PAUSE";
1289                    resetTimer();
1290                }
1291            });
1292            jwplayer("player" + channel).on('idle', function(event){
1293	            if (typeof window.__countdown === "object" && typeof window.__countdown.enable && window.__countdown.enable) {
1294                    var status = jwplayer("player" + channel).getState();
1295                    status = status.toUpperCase();
1296                    globalStatus = "IDLE";
1297                    resetTimer();
1298                }
1299            });
1300            jwplayer("player" + channel).on('error', function(event){
1301	            setTimeout(function() {}, 1000);
1302                if (count_stream < retry) {
1303
1304                    jwplayer('player' + channel).playlistNext();
1305                } else if (count_stream == 12) {
1306                    alert('Connection timeout, please retry later.');
1307                }
1308                count_stream++;
1309            });
1310            
1311        }
1312
1313
1314    }
1315}
1316var xdr, thumbnail31, thumbnail32, thumbnail33, thumbnail34, thumbnail35, thumbnail36;
1317
1318function golivebtn(dtt_channelNumber) {
1319    if(dtt_channelNumber == 32){
1320		window._wantPlay32 = true;
1321		if (is32PlayerMounted()) {
1322			try { window.resume(); } catch (e) {}
1323		} else {
1324			setup32PlayerByStatus();
1325		}
1326		}else{
1327		setupPlayer(dtt_channelNumber);
1328	}
1329    checkChannelStatus();
1330	if(dtt_channelNumber == 32){
1331		try { window.resume(); } catch (e) {}
1332		jwplayer('tvPlayer' + dtt_channelNumber).remove();
1333	}else{
1334		jwplayer('tvPlayer' + dtt_channelNumber).play();
1335	}
1336}
1337
1338function checkChannelStatus() {
1339
1340	url =  "//api01.rthk.hk/check_location_live_2023.php?no="+Math.random();
1341	$.ajax({
1342        type: "GET",
1343        url: url,
1344        dataType: "xml",
1345        success: function(xml) {
1346            handleXml(xml);
1347        },
1348        error: function(request, textStatus, errorThrown) {
1349            if (window.XDomainRequest) { // Check whether the browser supports XDR.
1350                xdr = new XDomainRequest();
1351                if (xdr) {
1352                    xdr.onload = loadGeoblock;
1353                    xdr.timeout = 10000;
1354                    xdr.open("get", url);
1355                    xdr.send();
1356                }
1357            }
1358        }
1359    });
1360}
1361
1362function is32PlayerMounted() {
1363    if (window.loaded32 === true || window.loading32 === true) {
1364        return true;
1365    }
1366    return $("#tvplayer32-stream video").length > 0;
1367}
1368
1369function teardown32Player(messageHtml) {
1370    try { window.close(); } catch (e) {}
1371    window.loaded32 = false;
1372    window.loading32 = false;
1373    window._wantPlay32 = false;
1374    try { jwplayer("tvPlayer32").remove(); } catch (e) {}
1375    $("#tvplayer32-stream").html(messageHtml);
1376}
1377function setup32PlayerByStatus() {
1378        url =  "//api01.rthk.hk/check_location_live_2023.php?no="+Math.random();
1379		$.ajax({
1380            type: "GET",
1381            url: url,
1382            dataType: "xml",
1383            success: function(xml)
1384            {
1385                 autostart32=0;
1386				$(xml).find('channel').each(function()
1387				{
1388					
1389					var channelId = $(this).find("channelId").text();
1390					var region = $(this).find("region").text();
1391					var userCountryCode = $(xml).find("userCountryCode").text();
1392					// var channel = (channelId == 77?31:32);
1393					var channel = $(this).find("channelName").text();
1394					var channel = channel.replace(/dtt/gi, "");
1395					var pass = false;
1396					if(channel==32) {
1397						pass = true;
1398						if(pass) {
1399							// MediaTech lives in #tvplayer32-stream, not #tvPlayer32
1400							playerLoaded = is32PlayerMounted() ? 1 : 0;
1401
1402							var channelStatus = $(this).find("status").text();
1403					
1404							if (channelStatus == 0 && playerLoaded == 1) {
1405					   
1406												
1407								teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1408							}
1409							else if (channelStatus == 0 && playerLoaded == 0) {
1410					   
1411								teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1412							}
1413							else if (channelStatus == 1 && playerLoaded == 0) {
1414								if (region == "all" || (region == userCountryCode)) {
1415										setupPlayer(32);
1416								}
1417								else if (region != userCountryCode) {
1418						
1419									teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1420								}
1421							}
1422							else if (channelStatus == 1 && region != "all" && region != userCountryCode) {
1423					   
1424												
1425								teardown32Player('<div class="message"><div class="text">'+window.only_for_hk+'</div></div><img src="/img/500x281.jpg" />');
1426							}
1427							else if (channelStatus == 1 && playerLoaded == 1) {
1428									// already mounted — do NOT re-setup (prevents 60s autoplay)
1429						 
1430							}
1431						}
1432					} 
1433				});
1434            },
1435            error: function(request, textStatus, errorThrown)
1436            {
1437                if (window.XDomainRequest) // Check whether the browser supports XDR.
1438                {
1439                    xdr = new XDomainRequest();
1440                    if (xdr)
1441                    {
1442                        xdr.onload = loadGeoblock;
1443                        xdr.timeout = 10000;
1444                        xdr.open("get", url);
1445                        xdr.send();
1446                    }
1447                }
1448            }
1449        });
1450    }
1451
1452function loadGeoblock() {
1453    var xml = $.parseXML(xdr.responseText);
1454    handleXml(xml);
1455}
1456
1457function setThumbnail(image, channelNumber) {
1458    if (channelNumber == 31) {
1459        thumbnail31 = image;
1460    } else if (channelNumber == 32) {
1461        thumbnail32 = image;
1462    } else if (channelNumber == 33) {
1463        thumbnail33 = image;
1464    } else if (channelNumber == 34) {
1465        thumbnail34 = image;
1466    } else if (channelNumber == 35) {
1467        thumbnail35 = image;
1468    } else{
1469        thumbnail36 = image;
1470    }
1471}
1472
1473function checkPlayerLoaded(tvSelector) {
1474    var jwplayerString = $(tvSelector).html();
1475    if (typeof jwplayerString == 'undefined')
1476        return 0;
1477    jwplayerString = jwplayerString.toLowerCase();
1478    var n = jwplayerString.indexOf("<param", 0);
1479    var s = jwplayerString.indexOf("<video", 0);
1480    var m = jwplayerString.indexOf('<div class="jwclick"', 0); //for iPad and iPhone
1481    var o = jwplayerString.indexOf('<span class="jwmain"', 0); //for iPad and iPhone
1482    var playerLoaded;
1483    if (n != -1 || m != -1 || s != -1 || o != -1) {
1484        playerLoaded = 1;
1485    } else {
1486        playerLoaded = 0;
1487    }
1488    return playerLoaded;
1489}
1490
1491function handleXml(xml) {
1492    $(xml).find('channel').each(function() {
1493        var channelId = $(this).find("channelId").text();
1494        var region = $(this).find("region").text();
1495        var userCountryCode = $(xml).find("userCountryCode").text();
1496        // var channel = (channelId == 77 ? 31 : 32);
1497        var channel = $(this).find("channelName").text();
1498        var channel = channel.replace(/dtt/gi, "");
1499		// TV32 uses MediaTech in #tvplayer32-stream — not JWPlayer in #tvPlayer32
1500		playerLoaded = (channel == 32)
1501			? (is32PlayerMounted() ? 1 : 0)
1502			: checkPlayerLoaded("#tvPlayer" + channel);		
1503			
1504        var channelStatus = $(this).find("status").text();
1505		// if(channel == '32'){
1506			// playerLoaded = checkPlayerLoaded("#tvplayer32-stream");
1507		// }else{
1508			// playerLoaded = checkPlayerLoaded("#tvPlayer" + channel);
1509		// }
1510		
1511		   if (channelStatus == 0 && playerLoaded == 1) {
1512						if(channel == 32){
1513							teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1514						}else{
1515							jwplayer("tvPlayer" + channel).remove();
1516							$("#tvPlayer" + channel).html('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1517						}
1518                    }
1519                    else if (channelStatus == 0 && playerLoaded == 0) {
1520						if(channel == 32){
1521							teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1522						}else{
1523							$("#tvPlayer" + channel).html('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1524						}
1525                    }
1526                    else if (channelStatus == 1 && playerLoaded == 0) {
1527                        if (region == "all" || (region == userCountryCode)) {
1528	                        if(channel==31) autostart31=1; else if(channel==32) autostart32=1; else if(channel==33) autostart33=1; else if(channel==34) autostart34=1; else if(channel==35) autostart35=1; else autostart36=1;
1529                            if(channel == 32){
1530								setup32PlayerByStatus();
1531							}else{
1532								setupPlayer(channel);
1533							}
1534                        }
1535                        else if (region != userCountryCode) {
1536							if(channel == 32){
1537								teardown32Player('<div class="message"><div class="text">'+window.refer_live_webcast_schedule+'</div></div><img src="/img/500x281.jpg" />');
1538							}else{
1539								$("#tvPlayer" + channel).html('<div class="message"><div class="text">'+window.only_for_hk+'</div></div><img src="/img/500x281.jpg" />');
1540							}
1541                            
1542                        }
1543                    }
1544                    else if (channelStatus == 1 && region != "all" && region != userCountryCode) {
1545						if(channel == 32){
1546							teardown32Player('<div class="message"><div class="text">'+window.only_for_hk+'</div></div><img src="/img/500x281.jpg" />');
1547						}else{
1548							if (playerLoaded == 1) {
1549								jwplayer("tvPlayer" + channel).remove();
1550							}
1551							$("#tvPlayer" + channel).html('<div class="message"><div class="text">'+window.only_for_hk+'</div></div><img src="/img/500x281.jpg" />');
1552						}
1553						
1554                    }
1555   
1556    });
1557    
1558}
1559
1560function setupPlayer(tvSelector) {
1561if(tvSelector == 36){return false;}
1562    if (thumbnail31 == undefined || thumbnail31 == "" || thumbnail32 == undefined || thumbnail32 == "" || thumbnail33 == undefined || thumbnail33 == "" || thumbnail34 == undefined || thumbnail34 == "" || thumbnail32 == undefined || thumbnail32 == "") {
1563        thumbnail = "/img/768x432.jpg";
1564    } else {
1565        if(tvSelector == 31){
1566            thumbnail = thumbnail31;
1567        }else if(tvSelector == 32){
1568            thumbnail = thumbnail32;
1569        }else if(tvSelector == 33){
1570            thumbnail = thumbnail33;
1571        }else if(tvSelector == 34){
1572            thumbnail = thumbnail34;
1573        }else if(tvSelector == 35){
1574            thumbnail = thumbnail35;
1575        }else{
1576            thumbnail = thumbnail36;
1577        } 
1578    }
1579
1580    if (thumbnail31 == "//rthk.hk/apps/screen/default_images/prog_generic_768432.jpg" || thumbnail32 == "//rthk.hk/apps/screen/default_images/prog_generic_768432.jpg" || thumbnail33 == "//rthk.hk/apps/screen/default_images/prog_generic_768432.jpg" || thumbnail34 == "//rthk.hk/apps/screen/default_images/prog_generic_768432.jpg" || thumbnail35 
1580== "//rthk.hk/apps/screen/default_images/prog_generic_768432.jpg") {
1581        thumbnail = "/img/768x432.jpg";
1582    } else {
1583        if(tvSelector == 31){
1584            thumbnail = thumbnail31;
1585        }else if(tvSelector == 32){
1586            thumbnail = thumbnail32;
1587        }else if(tvSelector == 33){
1588            thumbnail = thumbnail33;
1589        }else if(tvSelector == 34){
1590            thumbnail = thumbnail34;
1591        }else if(tvSelector == 35){
1592            thumbnail = thumbnail35;
1593        }else{
1594            thumbnail = thumbnail36;
1595        }
1596    }
1597    
1598	var tmp_html="";
1599
1600    $('.tableBlock #timetable' + tvSelector).each(function(){
1601	    $(this).find('.showBlock .nameBlock').each(function(){
1602	        if(tmp_html!="")tmp_html+=" / ";
1603		    tmp_html+=$(this).html();
1604	    })
1605    })
1606
1607    $('#tvplayer' + tvSelector + '-container .playTit').html(tmp_html);
1608    $("#tvplayer" + tvSelector + "-container .liveTye, .chLiv.tv31 .chLivTye").show();
1609	if(tvSelector==32)
1610	{
1611		if (tvSelector==31)
1612		{
1613			tvNumber = 2036818;
1614		}
1615		if (tvSelector==32)
1616		{
1617			tvNumber = 2036819;
1618		}
1619		
1620		if (tvSelector==32){
1621			streamUrl = "https://rthktv32-live.akamaized.net/hls/live/2036819/RTHKTV32/master.m3u8";
1622		}else{
1623			streamUrl = "https://rthktv"+tvSelector+"-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch"+tvSelector+")/index.m3u8";
1624		}
1625		
1626		streamUrl = "https://rthktv"+tvSelector+"-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch"+tvSelector+")/index.m3u8";
1627	}
1628	else if(tvSelector==31 || tvSelector==33 || tvSelector==34 || tvSelector==35 || tvSelector==36)
1629	{
1630		if (tvSelector==31)
1631		{
1632			tvNumber = 2036818;
1633		}
1634		if (tvSelector==33)
1635		{
1636			tvNumber = 2101641;
1637		}
1638    
1639		if (tvSelector==34)
1640	
1641		{
1642			tvNumber = 2101642;
1643		}
1644    
1645		if (tvSelector==35)
1646		{
1647			tvNumber = 2101643;
1648		}
1649		if (tvSelector==36)
1650		{
1651			tvNumber = 2112176;
1652		}
1653		streamUrl = "https://rthktv"+tvSelector+"-live.akamaized.net/hls/live/"+tvNumber+"/RTHKTV"+tvSelector+"/master.m3u8";
1654		if (tvSelector==36)
1655		{
1656			streamUrl = "https://rthktv36-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch36)/index.m3u8";
1657		}else if(tvSelector==33){
1658			streamUrl = "https://rthktv33-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch33)/index.m3u8";
1659		}else if(tvSelector==34){
1660			streamUrl = "https://rthktv34-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch34)/index.m3u8";
1661		}else if(tvSelector==35){
1662			streamUrl = "https://rthktv35-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch35)/index.m3u8";
1663		}
1664	}
1665	
1666	if(tvSelector != 32 && tvSelector != 31){
1667		jwplayer("tvPlayer" + tvSelector).setup(merge({
1668			primary: 'html5',
1669			hlshtml: true,
1670			width: '75%',
1671			aspectratio: "16:9",
1672			skin: get_formatted_skin("video_live", "audioS"),
1673			playlist: [{
1674				image: thumbnail+"?20221202",
1675				sources: [{
1676			file: streamUrl,
1677					type: "hls"
1678				}]
1679			}],
1680			autostart: false,
1681			androidhls: "true",
1682	/*
1683			events: {
1684				onReady: function(event) {
1685					var evt = document.createEvent('UIEvents');
1686					evt.initUIEvent('resize', true, false, window, 0);
1687					window.dispatchEvent(evt);
1688				   
1689				},
1690				onPlay: function(event) {
1691					var evt = document.createEvent('UIEvents');
1692					evt.initUIEvent('resize', true, false, window, 0);
1693					window.dispatchEvent(evt);
1694					window.player_playing = 1;
1695					var _channel = "";
1696					var _programme_folder = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["progfolder"];
1697					var _date = "";
1698					var _current_item = "";
1699					if (tvSelector == "31") {
1700						_channel = "dtt31";
1701						var _current_item = $('#tabledtt31 .showWrap.current');
1702					} else if (tvSelector == "32") {
1703						_channel = "dtt32";
1704						var _current_item = $('#tabledtt32 .showWrap.current');
1705					} else if (tvSelector == "33") {
1706						_channel = "dtt33";
1707						var _current_item = $('#tabledtt33 .showWrap.current');
1708					} else if (tvSelector == "34") {
1709						_channel = "dtt34";
1710						var _current_item = $('#tabledtt34 .showWrap.current');
1711					} else if (tvSelector == "35") {
1712						_channel = "dtt35";
1713						var _current_item = $('#tabledtt35 .showWrap.current');
1714					}
1715
1716					_programme_folder = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["progfolder"]; 
1717					if (_programme_folder == "" && tvSelector == "32") {
1718						_programme_folder = "港台电视32节目";
1719					} else if (_programme_folder == "" && tvSelector == "31") {
1720						_programme_folder = "港台电视31节目";
1721					} else if (_programme_folder == "" && tvSelector == "33") {
1722						_programme_folder = "港台电视33节目";
1723					} else if (_programme_folder == "" && tvSelector == "34") {
1724						_programme_folder = "港台电视34节目";
1725					} else if (_programme_folder == "" && tvSelector == "35") {
1726						_programme_folder = "港台电视35节目";
1727					}
1728					var tmp_mam = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["mam"]; 
1729					date = new Date(); 
1730					_date = (date.getFullYear() + '-' + zeroPad((date.getMonth() + 1), 2) + '-' + zeroPad(date.getDate(), 2));
1731					var _dcsqry = "lang=" + window.lang + "&section=player_live&channel=" + _channel + "&programme=" + _programme_folder + "&date=" + _date + "&mam_episode_
1731code=" + tmp_mam;
1732					__LogPlayerAction(window.current_url, "", "player_live:" + _channel + "/" + _programme_folder, _date, "", _dcsqry);
1733					
1734					$('.playerwrap.close .jwplayer').each(function() {
1735						jwplayer($(this).attr('id')).stop();
1736					})
1737				},
1738				onPause: function(event) {
1739					window.player_playing = 0;
1740				},
1741				onError: function(event) {}
1742			},
1743	*/
1744			flashplayer: jw_path + 'jwplayer.flash.swf'
1745		}, get_additional_para()));
1746   }else if(tvSelector == 32){
1747		// Already mounted — skip re-init (updateFeed used to re-init every 60s → autoplay)
1748			if (is32PlayerMounted() && $("#tvplayer32-stream video").length > 0) {
1749				return;
1750			}
1751			window.loading32 = true;
1752			window.loaded = false;
1753			window.options1 = {
1754				url: "https://lb.mediatech-ssc.net",
1755				channelId: "rthk_rthk32_ci_fc92cc61-9ba8-4f6b-911e-b271cdf35769",
1756				media: "audio+video",
1757				language: "ch1",
1758				minBufferTime: 1500,
1759				maxBufferTime: 1500,
1760				abrEnabled: true,
1761				burstEnabled: true,
1762				mseEnabled: true,
1763				mseOpusEnabled: true,
1764				iosWakeLockEnabled: true,
1765				iosBackgroundPlayEnabled: true,
1766				iosMediaElementEnabled: true,
1767				pauseSupportEnabled: true,
1768				pictureInPictureEnabled: true,
1769				sizeBasedResolutionCapEnabled: false,
1770				authenticationToken: "",
1771				advanced: {
1772					wasmDecodingConstraint: {
1773						width: 1920,
1774						height: 1080,
1775						bitRate: 6000000,
1776					}
1777				}
1778			};
1779			
1780			var xhttp = new XMLHttpRequest();
1781			xhttp.onload = function() {
1782				var token = this.responseText;
1783				window.options1['authenticationToken'] = token;
1784				window.setRoot("#tvplayer32-stream"); window.init(window.options1, false, true, true);window.pause();
1785				$('._container_13xnz_1 > div[aria-label="Language"]').html('<svg style="width: 20px;height: 23px; margin-top: 8px;margin-right: 8px;" id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.1 20"><defs><style>.cls-1{fill-rule:evenodd;}.cls-1,.cls-2{fill:#fff;stroke-width:0px;}</style></defs><g id="Layer_1-2"><path id="Union" class="cls-1" d="M.3,4.3C1.2,2.3,3.2,0,6.7,0c4.8,0,7.6,3.6,7.6,7.1s-2.1,5.6-3.7,6.7c-1,.7-1.6,1.3-1.6,2.1,0,2.1-1.7,3.5-3.5,3.9-1.9.4-4.1-.2-5.2-2.5-.2-.5-.3-.9-.3-1.4V5.6c0-.4,0-.9.3-1.3ZM4.9,6.6c.3-.9.9-1.6,1.8-1.6,1.4,0,2.2,1.1,2.2,2.3s-.2,1.2-.4,1.5c-.2.3-.5.6-.9.8,0,0-.1,0-.2.1h0c-.4.2-.8.5-1.2.9-.5.5-.9,1.2-.9,2.1s0,.6-.2.7c0,0-.2.2-.3.2-.2,0-.5,0-.7-.4-.2-.5-.8-.8-1.3-.5-.5.2-.8.8-.5,1.3.5,1.2,1.8,1.8,2.9,1.6.6-.1,1.1-.4,1.5-.9.4-.5.6-1.2.6-1.9s0-.5.3-.6c.2-.2.4-.3.7-.5h0s0,0,0,0h0c.1,0,.2-.1.3-.2.5-.3,1.1-.7,1.5-1.4.5-.7.7-1.5.7-2.7,0-2.1-1.5-4.4-4.2-4.4s-3.3,1.7-3.8,3c-.2.5.1,1.1.6,1.3.5.2,1.1-.1,1.3-.6Z"/><path class="cls-2" d="M15.6,11.1c0-1.5.6-2.9,1.6-4,.4-.4.9-.4,1.2-.1.4.3.3.8,0,1.2-1.5,1.7-1.5,4,0,5.7.4.4.4.9,0,1.2-.4.3-.9.3-1.2-.1-1.1-1.1-1.6-2.5-1.6-4Z"/><path class="cls-2" d="M18.9,11.1c0-.7.2-1.2.7-1.7.3-.3.8-.4,1.2,0,.3.3.4.8,0,1.1-.4.5-.4.8,0,1.3.3.4.3.9,0,1.2-.3.3-.8.3-1.2,0-.5-.5-.7-1.1-.7-1.7Z"/></g></svg>');
1786			
1787			}
1788			xhttp.open("POST", "https://rthkauthtoken.azurewebsites.net/getToken.php");
1789			xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
1790			xhttp.send("backendUrl=https://lb.mediatech-ssc.net&channelId=rthk_rthk32_ci_fc92cc61-9ba8-4f6b-911e-b271cdf35769");
1791			
1792			
1793			
1794			
1795	}else if(tvSelector == 31){
1796		
1797			// var uid = btoa(navigator.userAgent + '_' + window.location.hostname);
1798			
1799			$.get('https://gbcode.rthk.hk/TuniS/apip01.rthk.hk/drm/token.php?cid=tv31&uid='  + window.video_uid, function(result){
1800				window.authToken31 = result.trim();
1801				$.get('https://gbcode.rthk.hk/TuniS/apip01.rthk.hk/drm/keyID_RTHK_CH31_Pull_HLS_FP.txt', function(result) {
1802					window.lastFPKeyID31 = result.trim();
1803					
1804			
1805		
1806			
1807			authValue31 = "Bearer " + window.authToken31;
1808			jwplayer("tvPlayer" + tvSelector).setup({primary: 'html5',
1809				hlshtml: true,
1810				width: '75%',
1811				aspectratio: "16:9",
1812				skin: get_formatted_skin("video_live", "audioS"), playlist: [{
1813			"image": thumbnail31 + "?20221202",
1814			"sources": [{
1815			"file":"https://rthktv31-vos-live.akamaized.net/Content/HLS/Live/channel(rthk_ch31)/index.m3u8",
1816			"drm":{
1817				"fairplay":{
1818					"processSpcUrl":"https://rthk.live.ott.irdeto.com/licenseServer/streaming/v1/rthk/getckc?contentId=RTHK_CH31_Pull_HLS_FP&keyId=" + window.lastFPKeyID31,
1819					"certificateUrl":"https://rthk.live.ott.irdeto.com/licenseServer/streaming/v1/rthk/getcertificate?applicationId=live",
1820					"licenseRequestHeaders":[{
1821						"name": "Authorization",
1822						"value": authValue31
1823					}]
1824				}
1825			}
1826		}
1827
1828		,{
1829			"file": "https://rthktv31-vos-live.akamaized.net/Content/DASH/Live/channel
1829(rthk_ch31)/master.mpd",
1830			"drm": {
1831				"widevine": {
1832					"url": "https://rthk.live.ott.irdeto.com/licenseServer/widevine/v1/rthk/license?contentId=RTHK_CH31_Pull_DASH_WV_PR",
1833					"headers": [{
1834						"name": "Authorization",
1835						"value": authValue31
1836					}]
1837				}
1838			}
1839		}
1840
1841		,{
1842			"file": "https://rthktv31-vos-live.akamaized.net/Content/DASH/Live/channel(rthk_ch31)/master.mpd",
1843			"drm": {
1844				"playready": {
1845					"url": "https://rthk.live.ott.irdeto.com/licenseServer/playready/v1/rthk/license?contentId=RTHK_CH31_Pull_DASH_WV_PR",
1846					"headers": [{
1847						"name": "Authorization",
1848						"value": authValue31
1849					}]
1850				}
1851			}
1852		}
1853		]
1854}]}).on('play', function(event){
1855		var element = document.querySelector('[aria-label="mul"]');
1856		element.innerText = "Multiple Langanges";
1857		var element1 = document.querySelector('[aria-label="Chinese"]');
1858		element1.innerText = "繁体中文";
1859	});
1860					
1861				});
1862			});
1863
1864		
1865	}
1866    jwplayer("tvPlayer" + tvSelector).on('ready', function(event){
1867	    var evt = document.createEvent('UIEvents');
1868        evt.initUIEvent('resize', true, false, window, 0);
1869        window.dispatchEvent(evt);
1870    });
1871    jwplayer("tvPlayer" + tvSelector).on('play', function(event){
1872	    var evt = document.createEvent('UIEvents');
1873        evt.initUIEvent('resize', true, false, window, 0);
1874        window.dispatchEvent(evt);
1875        window.player_playing = 1;
1876        var _channel = "";
1877        var _programme_folder = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["progfolder"];
1878        var _date = "";
1879        var _current_item = "";
1880        if (tvSelector == "31") {
1881            _channel = "dtt31";
1882            var _current_item = $('#tabledtt31 .showWrap.current');
1883        } else if (tvSelector == "32") {
1884            _channel = "dtt32";
1885            var _current_item = $('#tabledtt32 .showWrap.current');
1886        } else if (tvSelector == "33") {
1887            _channel = "dtt33";
1888            var _current_item = $('#tabledtt33 .showWrap.current');
1889        } else if (tvSelector == "34") {
1890            _channel = "dtt34";
1891            var _current_item = $('#tabledtt34 .showWrap.current');
1892        } else if (tvSelector == "35") {
1893            _channel = "dtt35";
1894            var _current_item = $('#tabledtt35 .showWrap.current');
1895		} else if (tvSelector == "36") {
1896            _channel = "dtt36";
1897            var _current_item = $('#tabledtt36 .showWrap.current');
1898        }
1899
1900        _programme_folder = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["progfolder"]; 
1901        if (_programme_folder == "" && tvSelector == "32") {
1902            _programme_folder = "港台电视32节目";
1903        } else if (_programme_folder == "" && tvSelector == "31") {
1904            _programme_folder = "港台电视31节目";
1905        } else if (_programme_folder == "" && tvSelector == "33") {
1906            _programme_folder = "港台电视33节目";
1907        } else if (_programme_folder == "" && tvSelector == "34") {
1908            _programme_folder = "港台电视34节目";
1909        } else if (_programme_folder == "" && tvSelector == "35") {
1910            _programme_folder = "港台电视35节目";
1911		} else if (_programme_folder == "" && tvSelector == "36") {
1912            _programme_folder = "港台电视36节目";
1913        }
1914        var tmp_mam = dttlist[tvSelector][currArr[tvSelector]["timestamp"]]["mam"]; 
1915        date = new Date(); 
1916        _date = (date.getFullYear() + '-' + zeroPad((date.getMonth() + 1), 2) + '-' + zeroPad(date.getDate(), 2));
1917        var _dcsqry = "lang=" + window.lang + "&section=player_live&channel=" + _channel + "&programme=" + _programme_folder + "&date=" + _date + "&mam_episode_code=" + tmp_mam;
1918        __LogPlayerAction(window.current_url, "", "player_live:" + _channel + "/" + _programme_folder, _date, "", _dcsqry);
1919        
1920        $('.playerwrap.close .jwplayer').each(function() {
1921            jwplayer($(this).attr('id')).stop();
1922        })
1923    });
1924    jwplayer("tvPlayer" + tvSelector).on('pause', function(event){window.player_playing = 0;});
1925    jwplayer("tvPlayer" + tvSelector).on('error', function(event){console.log('error')});
1926}
1927
1928var is = { ie: navigator.appName == 'Microsoft Internet Explorer', java: navigator.javaEnabled(), ns: navigator.appName == 'Netscape', ua: navigator.userAgent.toLowerCase(), version: parseFloat(navigator.appVersion.substr(21)) || parseFloat(navigator.appVersion), win: navigator.platform == 'Win32' }
1929is.mac = is.ua.indexOf('mac') >= 0;
1930if (is.ua.indexOf('opera') >= 0) { is.ie = is.ns = false;
1931    is.opera = true; }
1932if (is.ua.indexOf('gecko') >= 0) { is.ie = is.ns = false;
1933    is.gecko = true; }
1934
1935
1936/* ------ Dialog for Radio Live Player ------ */
1937
1938function setCookie(cname, cvalue, exdays) {
1939    var d = new Date();
1940    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
1941    var expires = "expires=" + d.toUTCString();
1942    document.cookie = cname + "=" + cvalue + "; " + expires;
1943}
1944
1945function getCookie(cname) {
1946    var name = cname + "=";
1947    var ca = document.cookie.split(';');
1948    for (var i = 0; i < ca.length; i++) {
1949        var c = ca[i];
1950        while (c.charAt(0) == ' ') c = c.substring(1);
1951        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
1952    }
1953    return "";
1954}
1955
1956function getDateNow() {
1957    if (!Date.now) {
1958        Date.now = function() {
1959            return +new Date();
1960        };
1961    }
1962    return Date.now();
1963}
1964
1965var timeAllowed = window.__countdown.max_duration;
1966var countDownSecond = window.__countdown.offset;
1967var timeRemain = timeAllowed;
1968resetTimer();
1969
1970function resetTimer() {
1971    timeRemain = timeAllowed;
1972    var _startTime = Math.floor(getDateNow() / 1000);
1973    setCookie("startTime", _startTime, 1);
1974}
1975
1976function countDown(ch) {
1977    var status = jwplayer("player" + ch).getState();
1978    status = status.toUpperCase();
1979    var currentTimestamp = Math.floor(getDateNow() / 1000);
1980    _startTime = getCookie("startTime");
1981    var timePassed = currentTimestamp - _startTime;
1982    timeRemain = timeAllowed - timePassed;
1983
1984    if (timeRemain <= 0 && status == "PLAYING") {
1985        jwplayer("player" + ch).stop();
1986        window.player_playing = 0;
1987        $("#player" + ch).parents('.player-area').find('.playBtn').removeClass('pause');
1988        $("#timeRemainTxt").html("");
1989        $("#timeRemainTxtEng").html("");
1990        resetTimer();
1991    } else if (timeRemain > 0 && timeRemain <= countDownSecond && status == "PLAYING") {
1992        var timeRemainTxt = "要继续吗?";
1993        $("#timeRemainTxt").html(getTimeChinese(timeRemain));
1994        $("#timeRemainTxtEng").html(getTimeEnglish(timeRemain));
1995        if ($("#dialog").is(":visible")) {} else {
1996            showDialog(ch);
1997        }
1998    }
1999    var currentTime = new Date();
2000    var hours = currentTime.getHours();
2001    var minutes = currentTime.getMinutes();
2002    var seconds = currentTime.getSeconds();
2003}
2004
2005function getTimeChinese(second) {
2006    var min = Math.floor(second / 60);
2007    var sec = second % 60;
2008    return "尚有 " + min + " 分 " + sec + " 秒";
2009}
2010
2011function getTimeEnglish(second) {
2012    var min = Math.floor(second / 60);
2013    var sec = second % 60;
2014    return min + " min " + sec + " sec";
2015}
2016
2017function showDialog(ch) {
2018    $("#dialog").dialog({
2019        resizable: false,
2020        height: 170,
2021        width: 370,
2022        modal: true,
2023        buttons: {
2024            "是 Yes": function() {
2025                $(this).dialog("close");
2026                var status = jwplayer("player" + ch).getState();
2027
2028                status = status.toUpperCase();
2029                if (status != "PLAYING") {
2030                    jwplayer("player" + ch).play();
2031                }
2032                if (!$('.playBtn[data-channel=' + ch + ']').hasClass('pause')) {
2033                    $('.playBtn[data-channel=' + ch + ']').addClass("pause");
2034
2035                }
2036                resetTimer();
2037            },
2038            "否 No": function() {
2039                $(this).dialog("close");
2040                var status = jwplayer("player" + ch).getState();
2041                status = status.toUpperCase();
2042                if (status != "IDLE" && status != "PAUSED") {
2043                    jwplayer("player" + ch).stop();
2044                    window.player_playing = 0;
2045                    $('.playBtn').removeClass('pause');
2046                }
2047                resetTimer();
2048            }
2049        }
2050    });
2051}
2052
2053
2054/*------ Scroll video action ------*/
2055$(document).ready(function() {
2056	window.loaded31 = false;
2057	window.loaded32 = false
2058	window.pause();window.close();						   
2059    $("#scroll31 > div > a").on("click", function(e) {
2060		window.pause();window.close();							
2061        if ($(this).data("video") != "") {
2062            e.preventDefault();
2063            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2064            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val() || "";
2065            if (title != '') {
2066                title = decodeURIComponent(title);
2067                title = title.replace(/\+/g, " ");
2068            }
2069            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2070            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2071            var _webtrend = $(this).find("input[name=" + $(this).data("video") + "_webtrend]").val() || "";
2072            var _cg_n = $(this).find("input[name=" + $(this).data("video") + "_cg_n]").val() || "";
2073            var _cg_s = $(this).find("input[name=" + $(this).data("video") + "_cg_s]").val() || "";
2074            var _cg_q = $(this).find("input[name=" + $(this).data("video") + "_cg_q]").val() || "";
2075
2076            var playerLoader = checkPlayerLoaded("#tvPlayer31");
2077            if (playerLoader == 1) {
2078                jwplayer("tvPlayer31").remove();
2079            }
2080            setupVideoPlayer("31", cover, url);
2081            playVideo31 = true;
2082
2083            $("#tvplayer31-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2084
2085            var tmp_html = "";
2086            if (title !== "") {
2087                if (_link !== "") {
2088                    tmp_html += '<a href="' + _link + '" target="_blank" ' + (_webtrend != '' ? 'onclick="__LogClickEventAction(\'' + _cg_n + '\',\'' + _cg_s + '\',\'' + _cg_q + '\');"' : '') + '>';
2089                }
2090                tmp_html += title;
2091                if (_link !== "") {
2092                    tmp_html += '</a>';
2093                }
2094            }
2095            $("#tvplayer31-container .playTit").html(tmp_html);
2096        }
2097    });
2098
2099    $("#scroll32 > div > a").on("click", function(e) {
2100		
2101        if ($(this).data("video") != "") {
2102            e.preventDefault();
2103            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2104            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val();
2105            if (title != '') {
2106                title = decodeURIComponent(title);
2107                title = title.replace(/\+/g, " ");
2108            }
2109            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2110            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2111            var playerLoader = checkPlayerLoaded("#tvPlayer32");
2112            if (playerLoader == 1) {
2113                jwplayer("tvPlayer32").remove();
2114            }
2115            setupVideoPlayer("32", cover, url);
2116            playVideo32 = true;
2117            $("#tvplayer32-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2118
2119            var tmp_html = "";
2120            if (title !== "") {
2121                if (_link !== "") {
2122                    tmp_html += '<a href="' + _link + '" target="_blank">';
2123                }
2124                tmp_html += title;
2125                if (_link !== "") {
2126                    tmp_html += '</a>';
2127                }
2128            }
2129            $("#tvplayer32-container .playTit").html(tmp_html);
2130        }
2131    });
2132
2133    $("#scroll33 > div > a").on("click", function(e) {
2134        if ($(this).data("video") != "") {
2135            e.preventDefault();
2136            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2137            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val();
2138            if (title != '') {
2139                title = decodeURIComponent(title);
2140                title = title.replace(/\+/g, " ");
2141            }
2142            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2143            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2144            var playerLoader = checkPlayerLoaded("#tvPlayer33");
2145            if (playerLoader == 1) {
2146                jwplayer("tvPlayer33").remove();
2147            }
2148            setupVideoPlayer("33", cover, url);
2149            playVideo33 = true;
2150            $("#tvplayer33-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2151
2152            var tmp_html = "";
2153            if (title !== "") {
2154                if (_link !== "") {
2155                    tmp_html += '<a href="' + _link + '" target="_blank">';
2156                }
2157                tmp_html += title;
2158                if (_link !== "") {
2159                    tmp_html += '</a>';
2160                }
2161            }
2162            $("#tvplayer33-container .playTit").html(tmp_html);
2163        }
2164    });
2165
2166    $("#scroll34 > div > a").on("click", function(e) {
2167        if ($(this).data("video") != "") {
2168            e.preventDefault();
2169            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2170            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val();
2171            if (title != '') {
2172                title = decodeURIComponent(title);
2173                title = title.replace(/\+/g, " ");
2174            }
2175            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2176            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2177            var playerLoader = checkPlayerLoaded("#tvPlayer34");
2178            if (playerLoader == 1) {
2179                jwplayer("tvPlayer34").remove();
2180            }
2181            setupVideoPlayer("34", cover, url);
2182            playVideo34 = true;
2183            $("#tvplayer34-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2184
2185            var tmp_html = "";
2186            if (title !== "") {
2187                if (_link !== "") {
2188                    tmp_html += '<a href="' + _link + '" target="_blank">';
2189                }
2190                tmp_html += title;
2191                if (_link !== "") {
2192                    tmp_html += '</a>';
2193                }
2194            }
2195            $("#tvplayer34-container .playTit").html(tmp_html);
2196        }
2197    });
2198
2199    $("#scroll35 > div > a").on("click", function(e) {
2200        if ($(this).data("video") != "") {
2201            e.preventDefault();
2202            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2203            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val();
2204            if (title != '') {
2205                title = decodeURIComponent(title);
2206                title = title.replace(/\+/g, " ");
2207            }
2208            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2209            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2210            var playerLoader = checkPlayerLoaded("#tvPlayer35");
2211            if (playerLoader == 1) {
2212                jwplayer("tvPlayer35").remove();
2213            }
2214            setupVideoPlayer("35", cover, url);
2215            playVideo35 = true;
2216            $("#tvplayer35-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2217
2218            var tmp_html = "";
2219            if (title !== "") {
2220                if (_link !== "") {
2221                    tmp_html += '<a href="' + _link + '" target="_blank">';
2222                }
2223                tmp_html += title;
2224                if (_link !== "") {
2225                    tmp_html += '</a>';
2226                }
2227            }
2228            $("#tvplayer35-container .playTit").html(tmp_html);
2229        }
2230    });
2231	 /*$("#scroll36 > div > a").on("click", function(e) {
2232        if ($(this).data("video") != "") {
2233            e.preventDefault();
2234            var cover = $(this).find("input[name=" + $(this).data("video") + "_cover]").val();
2235            var title = $(this).find("input[name=" + $(this).data("video") + "_title]").val();
2236            if (title != '') {
2237                title = decodeURIComponent(title);
2238                title = title.replace(/\+/g, " ");
2239            }
2240            var url = $(this).find("input[name=" + $(this).data("video") + "_url]").val();
2241            var _link = $(this).find("input[name=" + $(this).data("video") + "_link]").val() || "";
2242            var playerLoader = checkPlayerLoaded("#tvPlayer36");
2243            if (playerLoader == 1) {
2244                jwplayer("tvPlayer36").remove();
2245            }
2246            setupVideoPlayer("36", cover, url);
2247            playVideo36 = true;
2248            $("#tvplayer36-container .liveTye, .chLiv.tv31 .chLivTye").hide();
2249
2250            var tmp_html = "";
2251            if (title !== "") {
2252                if (_link !== "") {
2253                    tmp_html += '<a href="' + _link + '" target="_blank">';
2254                }
2255                tmp_html += title;
2256                if (_link !== "") {
2257                    tmp_html += '</a>';
2258                }
2259            }
2260            $("#tvplayer36-container .playTit").html(tmp_html);
2261        }
2262    });  */
2263})
2264
2265function setupVideoPlayer(tvSelector, cover, file) {
2266	if(tvSelector == 32){
2267		try { window.close(); } catch (e) {}
2268		$('#tvplayer32-stream *').remove();
2269		window.loaded32 = false;
2270		window.loading32 = false;
2271		window._wantPlay32 = false;
2272	}
2273    var _type = "hls";
2274
2275    var tmp_live_name = $('#tabledtt' + tvSelector + ' .showWrap.current .showTit').text() || "";
2276    var tmp_live_link = $('#tabledtt' + tvSelector + ' .showWrap.current .showTit').attr('href') || "";
2277    var tmp_html = "";
2278    if (tmp_live_name !== "") {
2279        if (tmp_live_link !== "") {
2280            tmp_html += '<a href="' + tmp_live_link + '" target="_blank">';
2281        }
2282        tmp_html += tmp_live_name.trim();
2283        if (tmp_live_link !== "") {
2284            tmp_html += '</a>';
2285        }
2286    }
2287
2288    jwplayer("tvPlayer" + tvSelector).setup(merge({
2289        primary: 'html5',
2290        hlshtml: true,
2291        skin: get_formatted_skin("video", "audioS"),
2292        width: '75%',
2293        aspectratio: "16:9",
2294        image: cover,
2295        sources: [{ 'file': file, 'hls': _type }],
2296        autostart: true,
2297        androidhls: "true",
2298/*
2299        events: {
2300            onReady: function(event) {
2301                var evt = document.createEvent('UIEvents');
2302                evt.initUIEvent('resize', true, false, window, 0);
2303                window.dispatchEvent(evt);
2304            },
2305            onPlay: function(event) {
2306                var evt = document.createEvent('UIEvents');
2307                evt.initUIEvent('resize', true, false, window, 0);
2308                window.dispatchEvent(evt);
2309                $(jwplayer("tvPlayer" + tvSelector).getContainer()).parent().find(".player-overlay").addClass("active");
2310                $('.playerwrap.close .jwplayer').each(function() {
2311                    jwplayer($(this).attr('id')).stop();
2312                })
2313            },
2314            onPause: function(event) {
2315                $(jwplayer("tvPlayer" + tvSelector).getContainer()).parent().find(".player-overlay").removeClass("active");
2316                window.player_playing = 0;
2317            },
2318            onError: function(event) {
2319            }
2320        },
2321*/
2322        flashplayer: window.jw_path + 'jwplayer.flash.swf'
2323    }, get_additional_para()));
2324    
2325    jwplayer("tvPlayer" + tvSelector).on('ready', function(event){
2326	    var evt = document.createEvent('UIEvents');
2327        evt.initUIEvent('resize', true, false, window, 0);
2328        window.dispatchEvent(evt);
2329    });
2330    jwplayer("tvPlayer" + tvSelector).on('play', function(event){
2331	    var evt = document.createEvent('UIEvents');
2332        evt.initUIEvent('resize', true, false, window, 0);
2333        window.dispatchEvent(evt);
2334        $(jwplayer("tvPlayer" + tvSelector).getContainer()).parent().find(".player-overlay").addClass("active");
2335        $('.playerwrap.close .jwplayer').each(function() {
2336            jwplayer($(this).attr('id')).stop();
2337        })
2338    });
2339    jwplayer("tvPlayer" + tvSelector).on('pause', function(event){
2340	    $(jwplayer("tvPlayer" + tvSelector).getContainer()).parent().find(".player-overlay").removeClass("active");
2341        window.player_playing = 0;
2342    });
2343    jwplayer("tvPlayer" + tvSelector).on('error', function(event){});
2344}
2345
2346function zeroPad(num, numZeros) {
2347    var n = Math.abs(num);
2348    var zeros = Math.max(0, numZeros - Math.floor(n).toString().length);
2349    var zeroString = Math.pow(10, zeros).toString().substr(1);
2350    if (num < 0) {
2351        zeroString = '-' + zeroString;
2352    }
2353
2354    return zeroString + n;
2355}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.