PageSourceSearch

https://js-mm.manoramaonline.com/etc.clientlibs/revamp-mmonline/cl….ACSHASHa27e7ea8067c426ab871e98c7793d8a3.js

js manoramaonline.com collected 2026-09-24 08:56:01 UTC 238,192 bytes, 6,153 lines download raw bytes

1const utils = {}
2utils.bnewsslider = function () {
3    $('.cmp-breaking-news__ul').slick({
4        slidesToScroll: 1,
5        autoplay: true,
6        autoplaySpeed: 3500,
7        vertical: true,
8        infinite: false,
9        arrows: false,
10        centerMode: false,
11        adaptiveHeight: true,
12        pauseOnFocus: false,
13    });
14    $('.cmp-breaking-news__close').on("click", function () {
15        $('.cmp-breaking-news').slideUp(200);
16    });
17}
18// Mega menu 
19function menuMoreAdjust() {
20    if ($(window).width() > 991) {
21        let navwidth = 0;
22        const morewidth = $('.main-nav .main-nav__ul .main-nav__li--sub-nav').outerWidth(true);
23        $('.main-nav .main-nav__ul > li.main-nav__li:not(.main-nav__li--sub-nav)').each(function () {
24            navwidth += $(this).children('.main-nav__a').outerWidth(true) + 5;
25        });
26        const availablespace = $('.main-nav__in').width() - morewidth;
27        if (navwidth > availablespace) {
28            const lastItem = $('.main-nav .main-nav__ul > li.main-nav__li:not(.main-nav__li--sub-nav)').last();
29            lastItem.attr('data-width', lastItem.outerWidth(true));
30            lastItem.prependTo($('.main-nav .main-nav__ul .main-nav__li--sub-nav .main-nav__subnav-ul'));
31            $('.main-nav .main-nav__ul').addClass("nav-visible");
32            menuMoreAdjust();
33        } else {
34            $('.main-nav .main-nav__ul').addClass("nav-visible");
35            const firstMoreElement = $('.main-nav .main-nav__ul li.main-nav__li--sub-nav li').first();
36            if (navwidth + firstMoreElement.data('width') < availablespace) {
37                firstMoreElement.insertBefore($('.main-nav .main-nav__ul .main-nav__li--sub-nav'));
38            }
39        }
40    }
41    if ($('.main-nav__li--sub-nav li').length > 0) {
42        $('.main-nav__li--sub-nav').css('display', 'inline-block');
43    } else {
44        $('.main-nav__li--sub-nav').css('display', 'none');
45    }
46}
47
48function calcWidth2() {
49	
50    $('.cmp-channel-block__nav').each(function () {
51		
52		
53        const $this = $(this);
54		
55        if ($(window).width() > 991) {
56            let navwidth2 = 0;
57            const morewidth2 = $this.find('.cmp-channel-block__nav-ul .cmp-channel-block__nav-li--more').outerWidth(true);
58            $this.find('.cmp-channel-block__nav-ul > li:not(.cmp-channel-block__nav-li--more)').each(function () {
59                navwidth2 += $(this).children('a').outerWidth(true) + 5;
60            });
61            const availablespace2 = $this.width() - morewidth2;
62            if (navwidth2 > availablespace2) {
63                const lastItem2 = $this.find('.cmp-channel-block__nav-ul > li:not(.cmp-channel-block__nav-li--more)').last();
64                lastItem2.attr('data-width', lastItem2.outerWidth(true));
65                lastItem2.prependTo($this.find('.cmp-channel-block__nav-ul .cmp-channel-block__nav-li--more ul'));
66                $this.find('.cmp-channel-block__nav-ul').addClass("nav-visible");
67                calcWidth2();
68            } else {
69                $this.find('.cmp-channel-block__nav-ul').addClass("nav-visible");
70                const firstMoreElement2 = $this.find('.cmp-channel-block__nav-ul li.cmp-channel-block__nav-li--more li').first();
71                if (navwidth2 + firstMoreElement2.data('width') < availablespace2) {
72                    firstMoreElement2.insertBefore($this.find('.cmp-channel-block__nav-ul .cmp-channel-block__nav-li--more'));
73                }
74            }
75        }
76        if ($this.find('.cmp-channel-block__nav-li--more li').length > 0) {
77            $this.find('.cmp-channel-block__nav-li--more').css('display', 'inline-block');
78			$this.find('.cmp-channel-block__nav-ul').addClass("channel-block__more-menu");
79			  
80
81			
82        } else {
83            $this.find('.cmp-channel-block__nav-li--more').css('display', 'none');
84			$this.find('.cmp-channel-block__nav-ul').removeClass("channel-block__more-menu");
85        }
86	
87		
88    });
89}
90function wrapMoremenu(){
91	 $('.cmp-channel-block__nav').each(function () {
92	 $(this).find('.cmp-channel-block__navsub-Ul').wrap("<div class='cmp-channel-block__navsub-Ul-wraper'></div>");	
93	 });
94}
95
96function modalPopup() {
97    let appendthis = ("<div class='modal-overlay js-modal-close'></div>");
98    $('.open-modal[data-target]').off().on("click", function (e) {
99        e.preventDefault();
100        let modalBox = $(this).attr("data-target");
101        let docWidth = $(window).width();
102        if (docWidth <= 991 && modalBox == "shareModelObitLst") {
103            let $obtBlock = $(this).closest(".obt-lst-blk__in");
104            let fragmentUrl = $obtBlock.data("fragment-encodedurl");
105            let titleText = $obtBlock.data("fragment-name");
106            fragmentUrl = decodeURIComponent(fragmentUrl);
107            navigator
108                .share({
109                    title : titleText,
110                    text : titleText,
111					url : fragmentUrl,
112                })
113                .then(() => {})
114                .catch((error) => {});
115        } 
116        else if(docWidth <= 991 && modalBox == "announcementShareModel"){
117            let $obtBlock = $(this).closest(".cmp-announcment__item");
118            let fragmentUrl = $obtBlock.data("fragment-encodedurl");
119            fragmentUrl = decodeURIComponent(fragmentUrl);
120            let titleText = $obtBlock.data("fragment-name");
121            let district = $obtBlock.data('fragment-district');
122            let formattedDistrict = district ? district.replace(/-/g, ' ').split(' ')
123                .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ') : '';
124            let description = stripHtml($obtBlock.data('fragment-description'));
125            let truncatedDescription = description.length > 120 ? description.substring(0, 120) + '...' : description;
126            let isGlobalMalayali = window.location.pathname.includes('global-malayali');
127            let subject = isGlobalMalayali ? `${formattedDistrict} Community News` : `${formattedDistrict} Announcement`;
128            let body = titleText || truncatedDescription;
129            
130            navigator
131                .share({
132                    title : subject,
133                    text : body,
134					url : fragmentUrl,
135                })
136                .then(() => {})
137                .catch((error) => {});
138        }
139        else {
140            $(".cmp-modal-box, .modal-overlay").fadeOut(200, function () {
141                $('body').removeClass("overflow-hidden");
142            }).removeClass("active");
143            $('[data-id=' + modalBox + ']').append(appendthis);
144            $(".modal-overlay").fadeIn(200);
145            $('body').addClass("overflow-hidden");
146            $('[data-id=' + modalBox + ']').fadeIn($(this).data()).addClass("active");
147        }
148    });
149    $('body').on("click", ".js-modal-close, .modal-overlay", function () {
150        $(".cmp-modal-box, .modal-overlay").fadeOut(200, function () {
151            $(".modal-overlay").remove();
152            $('body').removeClass("overflow-hidden");
153        }).removeClass("active");
154    });
155}
156
157function headerDropdowns() {
158    const appendthis = ("<div class='modal-overlay js-modal-close'></div>");
159    $('.open-headerpop[data-target]').click(function (e) {
160        $(".cmp-header-dropdown, .modal-overlay").fadeOut();
161        $('.cmp-header-dropdown').removeClass("active");
162        e.preventDefault();
163        const modalBox = $(this).attr('data-target');
164        $('#' + modalBox).append(appendthis);
165        $('#' + modalBox).addClass("active");
166        $('#' + modalBox).fadeIn($(this).data());
167        $(".modal-overlay").fadeIn(200);
168    });
169    $('body').on("click", ".js-modal-close, .modal-overlay", function () {
170        $(".cmp-header-dropdown, .modal-overlay").fadeOut(200, function () {
171            $(".modal-overlay").remove();
172        });
173        $('.cmp-header-dropdown').removeClass("active");
174    });
175}
176
177
178function headerDropdownsPosition() {
179	
180	
181	
182    $('.open-headerpop[data-target]').each(function (e) {
183		const $hdrpstn = $(this);
184		function headerDropdownsIn(){
185		const dropYpstn = $hdrpstn.offset().top + 50;
186		const modalBoxpstn = $hdrpstn.attr('data-target');
187		const modelBoxwidth =  $('#' + modalBoxpstn).width();
188		const dropoffsetLeft = $hdrpstn.offset().left;		
189		const dropXpstn = dropoffsetLeft - (modelBoxwidth - 60);
190		const dropXpstn2 = dropoffsetLeft - 60;
191        const containerLWidth = $hdrpstn.closest(".container").offset().left;
192		
193			
194		
195		
196        if ($(window).width() > 991) {
197			
198			if(dropXpstn < containerLWidth){
199			    $('#' + modalBoxpstn).css({
200                "top": dropYpstn,
201                "left": dropXpstn2
202            }).addClass('headerDropdownleft');
203			   }
204			   else{
205			    $('#' + modalBoxpstn).css({
206                "top": dropYpstn,
207                "left": dropXpstn
208            });
209			   }
210           
211			
212			
213			
214			
215        } else {
216            $(".cmp-header-dropdown").css({
217                "top": 0,
218                "left": 0
219            });
220        }
221	 
222		}
223		 headerDropdownsIn();
224		
225		 $(this).click(function(){
226			 
227		  headerDropdownsIn();
228			 
229			 
230			 
231		 
232		 });
233		
234		
235	
236		
237		
238		
239	 });	
240		
241}
242
243
244function mmDropDOwn() {
245    $('.open-dropDown[data-target]').click(function (e) {
246        e.preventDefault();
247        const $clickedDropdown = $(this);
248        const dropDownBox = $(this).attr('data-target'); 
249        if ($clickedDropdown.hasClass("inBrief__btn")) {
250        $('body').addClass("inbriefbodyHidden");
251    } else {
252        $('body').removeClass("inbriefbodyHidden");
253    }   
254          
255        if ($clickedDropdown.hasClass("active")) {
256            $clickedDropdown.removeClass("active");
257            $('[data-id=' + dropDownBox + ']').removeClass("active").fadeOut(100);   
258            $('body').removeClass("inbriefbodyHidden");
259            
260        } else {
261            $('.open-dropDown').removeClass("active");
262            $(".mm-drop-down").removeClass("active").fadeOut(100);
263            $clickedDropdown.addClass("active");
264            $('[data-id=' + dropDownBox + ']').fadeIn(10).delay(100).addClass("active");
265        }
266    });
267    
268 $(document).on("click", function () {
269        $(".mm-drop-down").removeClass("active").fadeOut(100);
270        $('.open-dropDown').removeClass("active");
271        $('body').removeClass("inbriefbodyHidden");   
272});
273
274 $('.close-dropDown').on("click", function () {
275        $(".mm-drop-down").removeClass("active").fadeOut(100);
276        $('.open-dropDown').removeClass("active");
277     $('body').removeClass("inbriefbodyHidden");
278     
279});
280     
281    $('.open-dropDown, .mm-drop-down').on("click", function (event) {
282        event.stopPropagation();
283    });
284}
285
286
287function mmFilter() {
288	
289    $('.open-filter[data-target]').click(function (e) {
290		
291        e.preventDefault();
292        const $clickedOpenFilter = $(this);
293        const filterBox = $(this).attr('data-target');
294        if ($clickedOpenFilter.hasClass("active")) {
295            $clickedOpenFilter.removeClass("active");
296			 $('[data-id=' + filterBox + ']').removeClass("active").fadeOut(100);
297        } else {
298            $('.open-filter').removeClass("active");
299            $(".mm-filter-box").removeClass("active").fadeOut(100);
300            $clickedOpenFilter.addClass("active");
301            $('[data-id=' + filterBox + ']').fadeIn(10).delay(100).addClass("active");
302			 $('.overlay').addClass('open-filter__overlay').fadeIn(300);
303			$('body').addClass("scroll-disabled");
304
305        }
306    });
307 
308	 $('body').on("click", ".open-filter__overlay, .close-filter", function () { 
309        $(".mm-filter-box").removeClass("active").fadeOut(100);
310        $('.open-filter').removeClass("active");
311	  $('.overlay').removeClass('open-filter__overlay').fadeOut(300);
312		 $('body').removeClass("scroll-disabled");
313    });	 
314}
315function mmFilterSub() {
316	
317    $('.open-filterSub[data-target]').click(function (e) {
318		
319        e.preventDefault();
320        const $clickedOpenFilterSub = $(this);
321        const filterBoxSub = $(this).attr('data-target');
322        if (!$clickedOpenFilterSub.hasClass("active")) {
323            $('.open-filterSub').removeClass("active");
324            $(".mm-filter-boxSub").removeClass("active").fadeOut(100);
325            $clickedOpenFilterSub.addClass("active");
326            $('[data-id=' + filterBoxSub + ']').fadeIn(10).delay(100).addClass("active");
327        }
328    }); 
329}
330
331function themechange() {
332    const themeValue = $("input[name='theme']:checked").val();
333    $('body').removeClass('mm-light-theme mm-dark-theme mm-sepia-theme').addClass(themeValue);
334    $(".cmp-theme__label").click(function () {
335        const themeValueselected = $(this).find("input[name='theme']:checked").val();
336        $('body').removeClass('mm-light-theme mm-dark-theme mm-sepia-theme').addClass(themeValueselected);
337    });
338}
339utils.fontSizeChange = function () {
340    const fontSizevalue = $("input[name='fontSize']:checked").val();
341    $('body').removeClass('small-font medium-font large-font').addClass(fontSizevalue);
342    $(".cmp-font-size__label").click(function () {
343        const fontValueselected = $(this).find("input[name='fontSize']:checked").val();
344        $('body').removeClass('small-font medium-font large-font').addClass(fontValueselected);
345    });
346}
347
348function mmTab() {
349    $('.cmp-tab-block').each(function () {
350        const tabThis = $(this);
351        tabThis.find('.cmp-tab-block__nav-li:first-child').addClass('active');
352        tabThis.find('.cmp-tab-block__item').hide();
353        tabThis.find('.cmp-tab-block__item:first').show();
354        // Click function
355        tabThis.find('.cmp-tab-block__nav-li a').on("click", function () {
356            tabThis.find('.cmp-tab-block__nav-li').removeClass('active');
357            $(this).parent('.cmp-tab-block__nav-li').addClass('active');
358            tabThis.find('.cmp-tab-block__item').hide().removeClass('active');
359            const activeTab = $(this).attr('href');
360            $(activeTab).fadeIn().addClass('active');
361            return false;
362        });
363    });
364}
365
366function megaMenusub() {
367    $('.cmp-mega-menu__arrow-btn, .cmp-mega-menu__sub-web-title').on("click", function () {
368		$(this).closest('.cmp-mega-menu__ul').toggleClass("cmp-mega-menu__ul-sub-active");
369        const $subsidemenu = $(this).closest(".cmp-mega-menu__li");
370        if ($subsidemenu.hasClass("active")) {
371            $subsidemenu.removeClass("active");
372            $subsidemenu.find(".cmp-mega-menu__sub").hide();
373        } else {
374            $(".cmp-mega-menu__li").removeClass("active");
375            $(".cmp-mega-menu__sub").hide();
376            $subsidemenu.addClass("active");
377	
378            $subsidemenu.find(".cmp-mega-menu__sub").show(200, function () {
379                // for scroll to correct postion             
380            });
381        }
382    });
383	
384	
385	
386	$('.cmp-mega-menu__navigation .cmp-tab-block__nav-a').on("click", function(){
387		$('.cmp-mega-menu__ul').removeClass('cmp-mega-menu__ul-sub-active');
388		$('.cmp-mega-menu__li').removeClass("active");
389		$('.cmp-mega-menu__sub').removeAttr("style");
390			
391		
392		
393	});
394	
395	
396	
397}
398
399function menuClick() {
400    $('.cmp-header__section-nav').on("click", function () {
401        $('.cmp-mega-menu').addClass("active");
402        $('.overlay').addClass('cmp-mega-menu__overlay').fadeIn(300);
403        
404            $('body').addClass("scroll-disabled");
405        
406    });
407    $('body').on("click", ".cmp-mega-menu__close-btn, .cmp-mega-menu__overlay", function () {
408        $('.cmp-mega-menu').removeClass("active");
409        $('.overlay').removeClass('cmp-mega-menu__overlay').fadeOut(300);
410        // sub menu hide if opend
411        $(".cmp-mega-menu__li").removeClass("active");
412        $(".cmp-mega-menu__sub").hide();
413		$('.cmp-mega-menu__ul').removeClass('cmp-mega-menu__ul-sub-active');
414        if ($('body').hasClass("scroll-disabled")) {
415            $('body').removeClass("scroll-disabled");
416        }
417    });
418}
419
420function searchClick() {
421    $('.cmp-header--search-click').on("click", function () {
422        $('.cmp-search-popup').addClass("active");
423        $('.overlay').addClass('cmp-search-popup__overlay').fadeIn(300);
424        $('body').addClass("scroll-disabled");
425		$('.cmp-search-popup__input').focus(); 
426    });
427    $('body').on("click", ".cmp-search-popup__close-btn, .cmp-search-popup__overlay", function () {
428        $('.cmp-search-popup').removeClass("active");
429        $('.overlay').removeClass('cmp-search-popup__overlay').fadeOut(300);
430        $('body').removeClass("scroll-disabled");
431    });
432}
433
434function callQRNotifications(){
435    try {
436        let api = qrApi;
437        function isMobileView() {
438            const mobileQuery = window.matchMedia("(max-width: 767px)");
439            return mobileQuery.matches;
440        }
441        let quickReadIcon = document.querySelectorAll(".mm-icon__quickread,.quikreadfloating__in .mm-icon__flash");
442        if (isMobileView && quickReadIcon.length && api) {
443            quickReadIcon.forEach(function(element,index){
444                element.closest("a").addEventListener("click", function (e) {
445                    document.cookie = "qrOrigin="+encodeURIComponent(window.location.href)+";domain=.manoramaonline.com;path=/";
446                });
447            })
448            async function getQRUpdates() {
449                let response;
450                response = await fetch(api);
451                let resp = await response.json();
452                let data = resp.componentConfigs && resp.componentConfigs[0] ? resp.componentConfigs[0].contents : [];
453                let createdDates = "";
454                data.forEach((element, index) => {
455                    if (index < 10) {
456                        createdDates += element.createdDate;
457                    }
458                });
459                return createdDates;
460            }
461            async function checkQRNotification() {
462                let initData = await getQRUpdates();
463                setInterval(async () => {
464                    let currData = await getQRUpdates();
465                    if (initData && currData && initData != currData) {
466                        let notification = document.createElement("span");
467                        notification.classList.add("notifcation__alert");
468                        quickReadIcon.insertAdjacentElement("afterend", notification);
469                        initData=currData;
470                    }
471                }, 60000);	
472            }
473            checkQRNotification();		
474        }
475    } catch (err) {console.log("Error while fetching quickread notifications"+err)}
476}
477
478utils.bannerfourstorySlider = function () {
479$('.story-slider-block__four-story-banner .cmp-story-list--slider').not('.slick-initialized').slick({
480          dots: true,
481          arrows: true,
482          infinite: true,
483          speed: 300,
484          slidesToShow: 4,
485          slidesToScroll: 4,
486          autoplay: true,
487          autoplaySpeed: 4000,
488            pauseOnHover: true,
489    prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
490        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
491	
492          responsive: [
493            {
494              breakpoint: 1300,
495              settings: {
496              slidesToShow: 3,
497              slidesToScroll:3,
498             dots: true,
499              }
500            },
501              {
502              breakpoint: 992,
503              settings: {
504              slidesToShow: 2,
505              slidesToScroll: 2,
506				dots: true,  
507              }
508            },
509            {
510              breakpoint: 768,
511              settings: {
512                slidesToShow: 1,
513                slidesToScroll: 1,
514                  dots: true,  
515              }
516            },
517              {
518              breakpoint: 576,
519              settings: {
520               centerPadding: '40px',
521                slidesToShow: 1,
522				slidesToScroll: 1, 
523				 dots: true,   
524                infinite: true,
525              }
526            }
527              
528          ]
529        });
530}
531
532utils.bannerSlider = function () {
533    $('.cmp-editable-banner--slider, .editable-banner--text-only .cmp-story-list--slider').not('.slick-initialized').slick({
534        slidesToScroll: 1,
535        autoplay: true,
536        autoplaySpeed: 4000,
537        dots: true,
538        arrows: false,
539    });
540}
541utils.singleCommonSlider = function () {
542    $('.single-common-slider').slick({
543        slidesToScroll: 1,
544        autoplay: true,
545        autoplaySpeed: 5000,
546        dots: true,
547        arrows: false,
548    });
549}
550utils.singleSlider = function () {
551    $('.cmp-story-list--single-slider, .cartoon-block .cmp-story-list--slider, .stories-promo-block .cmp-story-list--slider').not('.slick-initialized').slick({
552        slidesToScroll: 1,
553        autoplay: true,
554        infinite: true,
555        autoplaySpeed: 4000,
556        dots: true,
557        arrows: false,
558    });
559}
560utils.imageBlockSlider = function () {
561    $('.cmp-story-list__img-slider').not('.slick-initialized').slick({
562        slidesToScroll: 1,
563        slidesToShow: 1,
564        autoplay: true,
565        infinite: false,
566        autoplaySpeed: 4000,
567        fade: true,
568        dots: true,
569        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
570        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
571    });
572}
573utils.gameSlider = function () {
574    $('.mm-game-block .cmp-story-list--slider').not('.slick-initialized').slick({
575        centerPadding: '0px',
576        slidesToShow: 1,
577        slidesToScroll: 1,
578        autoplay: true,
579        autoplaySpeed: 4000,
580        dots: true,
581        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
582        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
583        responsive: [{
584            breakpoint: 1200,
585            settings: {
586                centerPadding: '40px',
587                slidesToShow: 3,
588                infinite: true,
589            }
590        }, {
591            breakpoint: 992,
592            settings: {
593                centerPadding: '40px',
594                slidesToShow: 2,
595                infinite: true,
596            }
597        }, {
598            breakpoint: 576,
599            settings: {
600                centerPadding: '40px',
601                slidesToShow: 1,
602                infinite: true,
603            }
604        }, ]
605    });
606}
607utils.fullwidthBackground = function () {
608    if ($(".fullwidth-bg").length > 0) {
609        $(".fullwidth-bg").each(function () {
610            const windwidth = $(window).width();
611            const fullwidtharea = $('.fullwidth-bg').closest('.container').width();
612            const fullwidthvalue = (windwidth - fullwidtharea) / 2;
613			if(windwidth > 575){
614            $('.fullwidth-bg').css({
615                left: -fullwidthvalue,
616                right: -fullwidthvalue
617            });
618				}
619			else{
620				$('.fullwidth-bg').css({
621                left: -15,
622                right: -15
623            });
624			}
625        })
626    }
627}
628// four-colom   slider
629utils.fourClmSlider = function () {
630    $('.story-card-list-block .cmp-story-list--slider, .story-our-serivces-block .cmp-story-list--slider, .following-topics-block .cmp-story-list--slider').not(".slick-initialized").slick({
631
632        centerMode: false,
633        centerPadding: '0px',
634        infinite: false,
635        slidesToShow: 4,
636        slidesToScroll: 1,
637        dots: true,
638        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
639        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
640        responsive: [{
641            breakpoint: 1200,
642            settings: {
643                centerPadding: '40px',
644                slidesToShow: 3,
645                infinite: true,
646            }
647        }, {
648            breakpoint: 992,
649            settings: {
650                centerPadding: '40px',
651                slidesToShow: 2,
652                infinite: true,
653            }
654        }, {
655            breakpoint: 576,
656            settings: {
657                centerPadding: '40px',
658                slidesToShow: 1,
659                infinite: true,
660            }
661        }, ]
662    });
663    $('.four-colom-slider').each(function () {});
664}
665
666// three-colom   slider
667utils.threeClmSlider = function () {
668    $('.story-multimedia-list-block .cmp-story-list--slider').not('.slick-initialized').slick({
669        centerPadding: '0px',
670        infinite: false,
671        slidesToShow: 3,
672        slidesToScroll: 3,
673        dots: true,
674        variableWidth: false,
675        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
676        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
677        responsive: [{
678            breakpoint: 1200,
679            settings: {
680                centerPadding: '40px',
681                slidesToShow: 3,
682                slidesToScroll: 1,
683                infinite: true,
684                variableWidth: false,
685            }
686        }, {
687            breakpoint: 992,
688            settings: {
689                centerPadding: '40px',
690                slidesToShow: 2,
691                slidesToScroll: 1,
692                infinite: true,
693                variableWidth: false,
694            }
695        }, {
696            breakpoint: 576,
697            settings: {
698                centerPadding: '40px',
699                slidesToShow: 1,
700                slidesToScroll: 1,
701                infinite: true,
702                variableWidth: false,
703            }
704        }, ]
705    });
706    $('.four-colom-slider').each(function () {});
707}
708utils.vslShrtsSlider = function () {
709   
710    $('.visual-stories-block .cmp-story-list--slider, .shots-stories-block .cmp-story-list--slider').each(function () {
711    const $slider = $(this);
712    
713    // Check if any parent has the class 'col-xl-8'
714    const isInsideColXl8 = $slider.closest('.col-xl-8').length > 0;
715
716    // Determine number of slides based on the condition
717    const slidesToShow = isInsideColXl8 ? 4 : 6;
718
719    // Initialize Slick only if not already initialized
720    if (!$slider.hasClass('slick-initialized')) {
721        $slider.slick({
722            centerMode: false,
723            centerPadding: '0px',
724            infinite: false,
725            slidesToShow: slidesToShow,
726            slidesToScroll: 1,
727            dots: true,
728            prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i></button>',
729            nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i></button>',
730            responsive: [{
731                breakpoint: 1200,
732                settings: {
733                    centerPadding: '40px',
734                    slidesToShow: isInsideColXl8 ? 3 : 4,
735                    infinite: true,
736                }
737            }, {
738                breakpoint: 992,
739                settings: {
740                    centerPadding: '40px',
741                    slidesToShow: 3,
742                    infinite: true,
743                }
744            }, {
745                breakpoint: 768,
746                settings: {
747                    centerPadding: '40px',
748                    slidesToShow: 2,
749                    infinite: true,
750                }
751            }, {
752                breakpoint: 576,
753                settings: {
754                    centerPadding: '40px',
755                    slidesToShow: 2,
756                    infinite: true,
757                }
758            }]
759        });
760    }
761});
762
763}
764
765// left-colom   slider
766utils.leftClmSlider = function () {
767    $('.story-slider-block--3 .cmp-story-list--slider').not('.slick-initialized').slick({
768        centerPadding: '100px',
769        infinite: false,
770        slidesToShow: 2,
771        slidesToScroll:2,
772        dots: true,
773        variableWidth: false,
774        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
775        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
776        responsive: [{
777            breakpoint: 1200,
778            settings: {
779                centerPadding: '40px',
780                slidesToShow: 2,
781                slidesToScroll: 1,
782                infinite: true,
783                variableWidth: false,
784            }
785        }, {
786            breakpoint: 992,
787            settings: {
788                centerPadding: '40px',
789                slidesToShow: 2,
790                slidesToScroll: 2,
791                infinite: true,
792                variableWidth: false,
793            }
794        }, {
795            breakpoint: 576,
796            settings: {
797                centerPadding: '40px',
798                variableWidth: false,
799                slidesToShow: 1,
800                slidesToScroll: 1,
801                infinite: true,
802            }
803        }, ]
804    });
805    
806}
807
808
809utils.videoplayHover = function () {
810    // video play
811    if ($(window).width() > 575) {
812        $(".cmp-story-list--video-block").hover(hoverVideoPlay, restVideo);
813        function hoverVideoPlay(e) {
814            $("video", this).get(0).play();
815        }
816
817        function restVideo(e) {
818            $("video", this).get(0).load();
819        }
820    } else {
821        // change functionality for larger screens
822    }
823}
824utils.videoplayMobile = function () {
825    const winscrollTop = $(window).scrollTop();
826    if ($(window).width() < 575) {
827        $('.cmp-story-list--video-block').each(function () {
828            const $thisvideo = $(this);
829            const videoToppstn = $thisvideo.offset().top;
830            const videoHeight = $thisvideo.find('video.cmp-story-list__img').height();
831            const screenHeightHalf = $(window).height() / 2;
832            if (winscrollTop > videoToppstn - screenHeightHalf && winscrollTop < (videoToppstn + videoHeight / 2)) {
833                $thisvideo.find('video.cmp-story-list__img').trigger('play');
834            } else {
835                $thisvideo.find('video.cmp-story-list__img').trigger('load');
836            }
837        });
838    }
839}
840utils.shotsiconposition = function () {
841    if ($(".shots-stories-block .cmp-story-list__item").length > 0) {
842        $(".shots-stories-block .cmp-story-list__item").each(function () {
843            const contarea = $(this).find('.cmp-story-list__content').height() + 30;
844            $(this).find('.cmp-story-list__media-icon').css({
845                "bottom": contarea
846            });
847        });
848    } 
849}
850utils.daypitcurecontent = function () {
851    $('.day-in-picture-block .cmp-story-list__title').on("click", function () {
852        $(this).addClass("content-show");
853    });
854}
855utils.mobileNavarrow = function () {
856    $('.main-nav--arrow-click').on("click", function () {
857        if ($(window).width() < 992) {
858            $(this).remove();
859            const nvscrollpostion = $(window).width();
860            $(".main-nav__ul").scrollLeft(nvscrollpostion);
861        }
862    });
863    $(".main-nav__ul").scroll(function () {
864        if ($(window).width() < 992) {
865            const navpostion = $(".main-nav__ul").scrollLeft();
866            if (navpostion > 4) {
867                $('.main-nav--arrow-click').remove();
868            }
869        }
870    });
871    // find active position
872    const scrollWinwidth = $(window).width();
873    $('.main-nav__ul').each(function () {
874        const thisnavli = $(this).find('.main-nav__li');
875        if ($(thisnavli).hasClass("active")) {
876            const navActivepostion = $(this).find('.main-nav__li.active').offset().left;
877            const navsc = (navActivepostion - scrollWinwidth / 2) + $('.main-nav__li.active').width() / 2;
878            if (scrollWinwidth < 992 && navActivepostion > (scrollWinwidth / 2)) {
879                $('.main-nav__ul').scrollLeft(navsc);
880                $('.main-nav--arrow-click').remove();
881            }
882        }
883    });
884}
885utils.livupdatescrollbar = function () {
886    const ps = new
887    PerfectScrollbar('.live-update-timeline-content', {
888        wheelSpeed: 2,
889        wheelPropagation: true,
890        minScrollbarLength: 20
891    });
892    if ($(window).width() > 992) {
893        ps.update();
894    } else {
895        ps.destroy();
896    }
897}
898utils.scorecardwidth = function () {
899    $('.score-card-block').each(function () {
900        const $livescoreThis = $(this).find('.cmp-score-card__item');
901        $livescoreThis.removeClass("cmp-score-card__item--fullsize");
902        $livescoreThis.removeClass("cmp-score-card__item--smallsize");
903        const scorecardwidth = $livescoreThis.width();
904        if (scorecardwidth >= 400) {
905            $livescoreThis.addClass("cmp-score-card__item--fullsize");
906            $livescoreThis.removeClass("cmp-score-card__item--smallsize");
907        } else {
908            $livescoreThis.removeClass("cmp-score-card__item--fullsize");
909            $livescoreThis.addClass("cmp-score-card__item--smallsize");
910        }
911    });
912}
913
914function scorcardGoalinfo() {
915    if ($('.cmp-score-card__golBy').length > 0) {
916        $('.cmp-score-card__golBy ul').each(function (i) {
917            $(this).attr('id', 'goal-by' + i);
918            $(this).append("<li class='empty'> </li>");
919        });
920        setInterval(function () {
921            $('.cmp-score-card__golBy ul').each(function (i) {
922                if ($(this).find('li.cmp-score-card__golBy-li').length > 1) {
923					if (this.id){
924                        scroll_down(this.id);
925                    }
926                }
927            });
928        }, 2000);
929    }
930}
931
932function scroll_down(val) {
933    const current = $('#' + val);
934    const listID = current.attr('id');
935    current.css({
936        'opacity': '0'
937    });
938    $('#' + listID + ':not(:animated)').animate({
939        'top': parseInt(current.css('top')) - current.find('li').outerHeight() - 10
940    }, 500, function () {
941        let cars = current.find('li');
942        cars.last().before(cars.first());
943        current.css({
944            'top': '0px',
945            'opacity': '1'
946        });
947    });
948}
949utils.articleGallery = function () {
950    $('.cmp-list-gallery a').simpleLightbox({
951        navText: ['<i class="mm-icon mm-white-icon mm-icon__arrow-right-lg"></i>', '<i class="mm-icon mm-white-icon mm-icon__arrow-left-lg"></i>'],
952        closeText: '×',
953        className: 'cmp-list-gallery__lightbox',
954        widthRatio: 1,
955        captions: true,
956        captionPosition: 'bottom',
957        captionDelay: .3,
958    });
959}
960utils.articleSlider = function () {
961    $('.cmp-article-slider__large').slick({
962        asNavFor: '.cmp-article-slider__thumb',
963        centerPadding: '0px',
964        infinite: false,
965        slidesToShow: 1,
966        slidesToScroll: 1,
967        dots: false,
968		
969        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
970        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
971    });
972    $('.cmp-article-slider__thumb').slick({
973        slidesToShow: 4,
974        slidesToScroll: 1,
975        centerPadding: '40px',
976        asNavFor: '.cmp-article-slider__large',
977        infinite: false,
978        dots: false,
979        focusOnSelect: true,
980        prevArrow: '<button class="cmp-article-slider__thumb-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
981        nextArrow: '<button class="cmp-article-slider__thumb-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
982        responsive: [{
983            breakpoint: 576,
984            settings: {
985                slidesToShow: 3,
986                slidesToScroll: 1,
987            }
988        }, ]
989    });
990}
991utils.storylistMore = function () {
992    $('.cmp-story-list__control-btn--more-menu').on("click", function () {
993        const $storylistMore = $(this).closest('.cmp-story-list__control-li').find(".cmp-story-list__drop-down");
994        if ($storylistMore.hasClass("active")) {
995            $storylistMore.removeClass("active").fadeOut(100);
996        } else {
997            $(".cmp-story-list__drop-down").removeClass("active").fadeOut(100);
998            $storylistMore.fadeIn(100).delay(100).addClass("active");
999        }
1000    });
1001    $(document).on("click", function () {
1002        $(".cmp-story-list__drop-down").removeClass("active").fadeOut(100);
1003    });
1004    $('.cmp-story-list__control-btn--more-menu, .cmp-story-list__drop-down').on("click", function (event) {
1005        event.stopPropagation();
1006    });
1007}
1008utils.fullwidtharticle = function () {
1009    if ($(window).width() > 768 && $(' .cmp-fullwidth-image-block, .article-gallery-wrapper').length >= 1) {
1010
1011        const fullcontinerMargin = ($(window).width() - $('.article-body__content-top').width()) / 2;
1012        $('.article-body .cmp-fullwidth-image-block, .article-body .article-gallery-wrapper').css({
1013            "margin-left": -fullcontinerMargin,
1014            "margin-right": -fullcontinerMargin
1015        });
1016
1017    } else {
1018        $('.article-body  .cmp-fullwidth-image-block, .article-body  .article-gallery-wrapper').removeAttr('style');
1019    }
1020}
1021utils.artcleSimpleslider = function () {
1022    $('.cmp-simple-slider-block__main').not('.slick-initialized').slick({
1023        dots: false,
1024        lazyLoad: 'ondemand',
1025        autoplay: true,
1026        autoplaySpeed: 3000,
1027        fade: true,
1028        cssEase: 'linear',
1029        slidesToShow: 1,
1030        slidesToScroll: 1,
1031        infinite: false,
1032        arrows: true,
1033        pauseOnHover: false,
1034        pauseOnFocus: false,
1035       prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
1036        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
1037    });
1038    // swipe : false     
1039    $('.cmp-simple-slider-block__main').slick('slickPlay');
1040 }
1041// popup image Height set
1042   utils.mmpopgalleryHeight = function() {
1043     const popwindowHeight = $(window).height();
1044  $('.cmp-gallery-block__popup-item').each(function () {
1045		  if ($(window).width() >= 991) {
1046        
1047         const popimgheight = (popwindowHeight - 20);
1048		 
1049        $('.cmp-gallery-block__popup-details').css({
1050          "height": popimgheight
1051        });
1052		  }
1053		  else{
1054			  const popimgheight2 = (popwindowHeight - 55);
1055			  $('.cmp-gallery-block__popup-details').css({
1056          		"height": popimgheight2
1057        }); 
1058			  
1059		  }
1060		  
1061      });
1062  }
1063   utils.mmPopupgallery = function () {
1064	   $('.cmp-gallery-block').each(function(){
1065        const $thisGallery = $(this); 
1066		   $(this).find('.cmp-gallery-block__open').on("click", function () {
1067       $thisGallery.find('.cmp-gallery-block__popup').fadeIn(200);
1068      $thisGallery.find('.cmp-gallery-block__popup-slider').slick({
1069		lazyLoad: 'ondemand',  
1070        centerPadding: '20px',
1071        infinite: false,
1072        slidesToShow: 1,
1073        slidesToScroll: 1,
1074        dots: false,
1075		prevArrow: '<button class="slide-arrow slick-custom-arrow slick-prev"><i class="mm-icon mm-white-icon mm-icon__arrow-right-sm"></i>  </button>',
1076    nextArrow: '<button class="slide-arrow slick-custom-arrow slick-next"><i class="mm-icon mm-white-icon mm-icon__arrow-left-sm"></i>  </button>'  	
1077      });
1078      $('body').addClass("overflow-hidden");
1079    });
1080		   
1081	 
1082    
1083	   
1084	 $thisGallery.find('.cmp-gallery-block__item:nth-child(2) .cmp-gallery-block__open').click(function(){
1085        const slider = $thisGallery.find( '.cmp-gallery-block__popup-slider' );
1086              slider[0].slick.slickGoTo(parseInt(1));
1087          });
1088	 $thisGallery.find('.cmp-gallery-block__item:nth-child(3) .cmp-gallery-block__open').click(function(){
1089        const slider = $thisGallery.find( '.cmp-gallery-block__popup-slider' );
1090              slider[0].slick.slickGoTo(parseInt(2));
1091          });	 
1092	   
1093	   
1094	   
1095    // close gallery
1096    $thisGallery.find('.cmp-gallery-block__popup-close').on("click", function () {
1097      $thisGallery.find('.cmp-gallery-block__popup').fadeOut(200);
1098      $('body').removeClass("overflow-hidden");
1099      $thisGallery.find('.cmp-gallery-block__popup-slider').slick('unslick');
1100    });
1101	$thisGallery.find('.cmp-gallery-block__popup-info').on("click", function(){
1102		$(this).closest('.cmp-gallery-block').toggleClass("galleryDispnhide");
1103	});
1104		   
1105  });		   
1106		   
1107  }
1108   
1109   
1110    utils.backtoTop = function () {
1111		
1112	
1113      
1114      $('.back-to-top-button').on("click", function(){
1115             $("html, body").animate({scrollTop: 0}, 1000);
1116          
1117      });
1118		
1119		
1120		// back button postion set
1121			let lastBackScrollTop = 0;
1122	 
1123$(window).scroll(function(event){
1124   const st = $(this).scrollTop();
1125   if (st > lastBackScrollTop || st < $(window).height() ){
1126      
1127	   $('.backto-top').addClass('scrolling_down');
1128	   $('.backto-top').removeClass('active scrolling_up');
1129	    $('.backto-top').removeAttr("style")
1130   } else {
1131	   $('.backto-top').addClass('active scrolling_up');
1132	   $('.backto-top').removeClass(' scrolling_down');
1133   }
1134   lastBackScrollTop = st;
1135});	
1136		 
1137		
1138		
1139		
1140	}
1141   
1142	
1143	function authorTabactive(){
1144  if ($(window).width() < 992) {
1145			
1146 
1147   
1148    const resultnvscrollpostion = $('.author-results .cmp-resulttab-block__nav-li.active').offset().left;
1149    $(".author-results .cmp-resulttab-block__nav-ul").scrollLeft(resultnvscrollpostion);
1150
1151$('.author-results .cmp-resulttab-block__nav-li a').on("click", function(){
1152			const rstclcikpst = $(this).offset().left;
1153	const rstclcikwidth = $(this).outerWidth();
1154	const rstclcikpstwidth = $(window).width()/2;
1155	
1156	if(rstclcikpst > rstclcikpstwidth){
1157	   $(".author-results .cmp-resulttab-block__nav-ul").scrollLeft(rstclcikpst + rstclcikwidth);
1158	}
1159	else if(rstclcikpst < rstclcikpstwidth){
1160		 $(".author-results .cmp-resulttab-block__nav-ul").scrollLeft(rstclcikpst);
1161	}						 
1162	});
1163		  }
1164		
1165}	
1166	
1167$(function () {
1168    mmTab();
1169    megaMenusub();
1170   // mmDropDOwn();
1171	mmFilter();	
1172	mmFilterSub();
1173    themechange();
1174    menuMoreAdjust();
1175    calcWidth2();
1176	
1177    headerDropdowns();
1178    headerDropdownsPosition();
1179    menuClick();
1180    searchClick();
1181    modalPopup();
1182	utils.bannerfourstorySlider(); 
1183    utils.singleSlider();
1184    utils.fourClmSlider();
1185    utils.vslShrtsSlider();
1186    utils.threeClmSlider();
1187	utils.leftClmSlider();
1188    utils.fullwidthBackground();
1189    utils.daypitcurecontent();
1190    utils.gameSlider();
1191    utils.mobileNavarrow();
1192    utils.scorecardwidth();
1193    utils.imageBlockSlider();
1194    utils.singleCommonSlider();
1195    utils.storylistMore();
1196    scorcardGoalinfo();
1197    utils.bannerSlider();
1198	 utils.backtoTop();
1199	// article page
1200    callQRNotifications();
1201});
1202$(window).on('resize load', function () {
1203    headerDropdownsPosition();
1204    menuMoreAdjust();
1205    calcWidth2();
1206    utils.fullwidthBackground();
1207    utils.scorecardwidth();
1208});
1209$(window).scroll(function () {
1210    
1211	headerDropdownsPosition();
1212});
1213class ObituaryBlock {
1214  constructor() {
1215    this.obitDate = document.querySelector(".cmp-obituary-block__date");
1216    this.selectedDistrict = document.getElementById("obituaryDistrictSelect");
1217
1218    // if (this.obitDate) {
1219    //   this.updateObitDate();
1220    // }
1221
1222    if (this.selectedDistrict) {
1223      this.selectedDistrict.addEventListener("change", () => {
1224        this.handleDistrictChange();
1225      });
1226    }
1227  }
1228
1229  updateObitDate() {
1230    const currentDate = new Date();
1231    const day = currentDate.getDate().toString().padStart(2, '0');
1232    const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
1233    const year = currentDate.getFullYear();
1234
1235    const formattedDate = `${day}-${month}-${year}`;
1236    this.obitDate.innerHTML = formattedDate;
1237  }
1238
1239  handleDistrictChange() {
1240    const selectedOption = this.selectedDistrict.options[this.selectedDistrict.selectedIndex];
1241    const landingPageUrl = selectedOption.getAttribute("data-obituary-landingpage");
1242    const linkTarget = selectedOption.getAttribute("data-obituary-linktarget");
1243
1244    if (landingPageUrl) {
1245      if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
1246          const hiddenLink = document.createElement("a");
1247          hiddenLink.style.display = "none";
1248          hiddenLink.target = "_top";
1249          const selectElement = document.getElementById("obituaryDistrictSelect");
1250          selectElement.parentNode.insertBefore(hiddenLink, selectElement.nextSibling);
1251          hiddenLink.href = landingPageUrl;
1252          hiddenLink.click();
1253      } else if (linkTarget === "_blank") {
1254          window.parent.open(landingPageUrl, "_blank");
1255      } else {
1256          window.parent.location.href = landingPageUrl;
1257      }
1258    }
1259  }
1260}
1261
1262const obituaryBlock = new ObituaryBlock();
1263
1264// Auto select district from obituary dropdown
1265document.addEventListener('DOMContentLoaded', () => {
1266    const selectElement = document.getElementById('obituaryDistrictSelect');
1267    if (selectElement) {
1268        const currentPath = window.location.pathname;
1269        let match = false;
1270
1271        for (const option of selectElement.options) {
1272            const landingPage = option.getAttribute('data-obituary-landingpage');
1273            if (landingPage && landingPage.includes(currentPath)) {
1274                option.defaultSelected = true;
1275                option.selected = true;
1276                option.disabled = true;
1277                match = true;
1278                break;
1279            }
1280        }
1281
1282        if (match) {
1283            for (const option of selectElement.options) {
1284                if (option.label !== selectElement.selectedOptions[0].label && option.defaultSelected) {
1285                    option.defaultSelected = false;
1286                    option.selected = false;
1287                    option.disabled = false;
1288                }
1289            }
1290        }
1291    }
1292});
1293
1294
1295function MMEditorSearch(c,dId,iwrap) { 
1296    function m() {
1297        var a = "Unknown"; - 1 != navigator.userAgent.indexOf("MSIE") ? a = "MSIE" : -1 != navigator.userAgent.indexOf("Firefox") ? a = "Firefox" : -1 != navigator.userAgent.indexOf("Opera") ? a = "Opera" : -1 != navigator.userAgent.indexOf("Chrome") ? a = "Chrome" : -1 != navigator.userAgent.indexOf("Safari") && (a = "Safari");
1298        return a
1299    }
1300    void 0 == c.getAttribute("data-language") || c.getAttribute("data-language");
1301    var v = void 0 == c.getAttribute("data-keyboard") ? "malayalaminscript" : c.getAttribute("data-keyboard");
1302    void 0 == c.getAttribute("toolbar") ||
1303        c.getAttribute("toolbar");
1304    //var w = void 0 == c.getAttribute("height") ? " " : c.getAttribute("height"),
1305    //  x = void 0 == c.getAttribute("width") ? " " : c.getAttribute("width");
1306    void 0 == c.getAttribute("css") || c.getAttribute("css");
1307    var q = void 0 == c.getAttribute("data-font-family") ? "" : c.getAttribute("data-font-family");
1308    void 0 == c.getAttribute("headline") || c.getAttribute("headline");
1309    var n = document.createElement("div");
1310    n.setAttribute("id", iwrap);
1311    var h = document.querySelector('#'+dId+' input');
1312    h.focus();
1313    var malPlaceHold = h.getAttribute("data-mlplacehold") || "കീവേഡുകൾ, തലക്കെട്ടുകൾ മുതലായവ തിരയുക";
1314    //h.setAttribute("type", "text");
1315    h.setAttribute("placeholder", malPlaceHold);
1316    //alert("inside mm editor");
1317    h.setAttribute("id", "searchMalText");
1318    //h.setAttribute("class", cl);
1319    h.setAttribute("onclick", "event.stopPropagation()");  
1320    //h.style.fontSize = y + "px";
1321    "" != q && (h.style.fontFamily = q);
1322    var b = this;
1323    this.textEditor = h;
1324    b.Languages = [];
1325    b.Encodings = [];
1326    b.Keyboards = [];
1327    b.conjuncts = [];
1328    b.AlternateKeyBoatdDetails = [];
1329    b.elem = h;
1330    this.LangList = [];
1331    this.KeyboardsDetails = [];
1332    b.chatType = [];
1333    b.languagePosition = [];
1334    b.toggle = !1;
1335    b.CTRL = 0;
1336    b.ALT = 0;
1337    this.inputText = "";
1338    this.textEditor.onkeydown = function (a) {
1339        a = b.getKeyCode(a);
1340        String.fromCharCode(a).bold = !0;
1341        window.event || 17 != a || (b.CTRL = a);
1342        18 == a && (b.ALT = a);
1343        "Safari" === m() && 91 === a && (b.COMMAND = a);
1344        switch (a) {
1345        case 119:
1346            b.toggle = b.toggle ? !1 : !0
1347        }
1348    };
1349    this.textEditor.onkeypress = function (a) {
1350        var d = b.getKeyCode(a);
1351        if ("Netscape" == window.navigator.appName && 26 == d && 0 <= window.navigator.vendor.indexOf("Google")) undoChromeSafari(b.elem);
1352        else if(!window.event && 17 == b.CTRL){
1353			if(115 === d){
1354				b.CTRL = 0;
1355			}
1356		}
1357        else if (!("Safari" === m() && 0 < b.COMMAND)) switch (d) {
1358        case 9:
1359        case 27:
1360        case 0:
1361        case 16:
1362            break;
1363        case 8:
1364            break;
1365        case 13:
1366            return !0;
1367        default:
1368			var keyboardType = v;
1369			var f = b.KeyboardsDetails()[keyboardType.toLowerCase()];
1370
1371            if (void 0 == f) {
1372    			console.log("KeyBoard for " + keyboardType + " is undefined");
1373    			return !1;
1374			}
1375            d = String.fromCharCode(d);
1376            f = f[d];
1377            if (void 0 == f) break;
1378            b.toggle && (f = d);
1379            b.insertAtCursorPosition(b.elem, f);
1380            b.setConjuncts(b.elem, f, keyboardType);
1381            let elem = b.elem;
1382            if(document.selection){
1383				elem.focus();
1384				b.textEditor.focus();
1385				document.selection.createRange().parentElement();
1386			}
1387
1388            
1389            return !1
1390        }
1391    };
1392    this.textEditor.onkeyup = function (a) {
1393        a = b.getKeyCode(a);
1394        window.event || 17 != a || (b.CTRL = 0);
1395        "Safari" === m() && 0 < b.COMMAND && (b.COMMAND = 0);
1396        console.log(String.fromCharCode(a));
1397        return !1
1398    };
1399    this.getKeyCode = function (a) {
1400        if (a) return a.which;
1401        if (window.event) return window.event.keyCode
1402    };
1403    this.getEventSource = function (a) {
1404        if (a) return a.target;
1405        if (window.event) return window.event.srcElement
1406    };
1407    this.cancelEvent = function (a) {
1408        if (a) {
1409   			a.preventDefault();
1410    		a.stopPropagation();
1411		}
1412
1413        window.event &&
1414            (window.event.returnValue = !1)
1415    };
1416    var r, s, t, u;
1417    t = {
1418        "!": "!",
1419        '"': "\u2019",
1420        "#": "#",
1421        $: "$",
1422        "%": "%",
1423        "&": "&",
1424        "'": "\u2018",
1425        "(": "(",
1426        ")": ")",
1427        "*": "*",
1428        "+": "+",
1429        "-": "\u2013",
1430        ".": ".",
1431        "/": "/",
1432        0: "0",
1433        1: "1",
1434        2: "2",
1435        3: "3",
1436        4: "4",
1437        5: "5",
1438        6: "6",
1439        7: "7",
1440        8: "8",
1441        9: "9",
1442        ":": ":",
1443        ";": ";",
1444        "<": "<",
1445        "=": "=",
1446        ">": ">",
1447        "?": "?",
1448        "@": "@",
1449        A: "\u0d06",
1450        B: "\u0d2c\u0d4d",
1451        C: "\u0d15\u0d4d",
1452        D: "\u0d21\u0d4d",
1453        E: "\u0d0f",
1454        F: "\u0d2b\u0d4d",
1455        G: "\u0d17\u0d4d\u0d17\u0d4d",
1456        H: "\u0d03",
1457        I: "\u0d08",
1458        J: "\u0d1c\u0d4d\u0d1c\u0d4d",
1459        K: "\u0d15\u0d4d\u200c\u200c",
1460        L: "\u0d33\u0d4d",
1461        M: "\u0d02",
1462        N: "\u0d23\u0d4d",
1463        O: "\u0d13",
1464        P: "\u0d2a\u0d4d",
1465        Q: "\u0d15\u0d4d",
1466        R: "\u0d31\u0d4d",
1467        S: "\u0d36\u0d4d",
1468        T: "\u0d1f\u0d4d",
1469        U: "\u0d0a",
1470        V: "\u0d35\u0d4d",
1471        W: "\u0d35\u0d4d",
1472        X: "\u0d15\u0d4d\u0d37\u0d4d",
1473        Y: "\u0d2f\u0d4d",
1474        Z: "\u0d1c\u0d4d",
1475        "[": "[",
1476        "\\": "",
1477        "]": "]",
1478        "^": "^",
1479        _: "_",
1480        "`": "\u20a8",
1481        a: "\u0d05",
1482        b: "\u0d2c\u0d4d",
1483        c: "\u0d15\u0d4d\u200c",
1484        d: "\u0d26\u0d4d",
1485        e: "\u0d0e",
1486        f: "\u0d2b\u0d4d",
1487        g: "\u0d17\u0d4d",
1488        h: "\u0d39\u0d4d",
1489        i: "\u0d07",
1490        j: "\u0d1c\u0d4d",
1491        k: "\u0d15\u0d4d",
1492        l: "\u0d32\u0d4d",
1493        m: "\u0d2e\u0d4d",
1494        n: "\u0d28\u0d4d",
1495        o: "\u0d12",
1496        p: "\u0d2a\u0d4d",
1497        q: "\u0d15\u0d4d",
1498        r: "\u0d30\u0d4d",
1499        s: "\u0d38\u0d4d",
1500        t: "\u0d31\u0d4d\u0d31\u0d4d",
1501        u: "\u0d09",
1502        v: "\u0d35\u0d4d",
1503        w: "\u0d35\u0d4d",
1504        x: "\u0d15\u0d4d\u0d38\u0d4d",
1505        y: "\u0d2f\u0d4d",
1506        z: "\u0d1c\u0d4d\u200c",
1507        "{": "{",
1508        "|": "",
1509        "}": "}",
1510        "~": "~",
1511        " ": " "
1512    };
1513    s = {
1514        "\u0003\u0d05": "\u0d3e:1",
1515        "\u0003\u0d07": "\u0d48:1",
1516        "\u0003\u0d09": "\u0d57:1",
1517        "\u0003\u0d3f\u0d07": "\u0d40:2",
1518        "\u0003\u0d41\u0d09": "\u0d42:2",
1519        "\u0d4d\u0d05": ":2",
1520        "\u0d4d\u200c\u0d05": ":3",
1521        "\u0d4d\u200c\u200c\u0d06": "\u0d3e:4",
1522        "\u0d4d\u200c\u0d06": "\u0d3e:3",
1523        "\u0d4d\u0d06": "\u0d3e:2",
1524        "\u0d4d\u200c\u0d07": "\u0d3f:3",
1525        "\u0d4d\u0d07": "\u0d3f:2",
1526        "\u0d4d\u200c\u0d08": "\u0d40:3",
1527        "\u0d4d\u0d08": "\u0d40:2",
1528        "\u0d4d\u200c\u0d09": "\u0d41:3",
1529        "\u0d4d\u0d09": "\u0d41:2",
1530        "\u0d4d\u200c\u0d0a": "\u0d42:3",
1531        "\u0d4d\u0d0a": "\u0d42:2",
1532        "\u0d4d\u200c\u0d30\u0d4d^": "\u0d43:5",
1533        "\u0d4d\u0d30\u0d4d^": "\u0d43:4",
1534        "\u0d4d\u200c\u0d0e": "\u0d46:3",
1535        "\u0d4d\u0d0e": "\u0d46:2",
1536        "\u0d4d\u200c\u0d0f": "\u0d47:3",
1537        "\u0d4d\u0d0f": "\u0d47:2",
1538        "\u0d4d\u0d10": "\u0d48:2",
1539        "\u0d4d\u200c\u0d10": "\u0d48:3",
1540        "\u0d47\u200c\u0d0f": "\u0d40:3",
1541        "\u0d47\u0d0f": "\u0d40:2",
1542        "\u0d4d\u200c\u0d12": "\u0d4a:3",
1543        "\u0d4d\u0d12": "\u0d4a:2",
1544        "\u0d4d\u200c\u0d13": "\u0d4b:3",
1545        "\u0d4d\u0d13": "\u0d4b:2",
1546        "\u0d4d\u0d14": "\u0d57:2",
1547        "\u0d4d\u200c\u0d14": "\u0d57:3",
1548        "\u0d4d\u0d02": "\u0d02:2",
1549        "\u0d4d\u0d03": "\u0d03:2",
1550        "\u0d30\u0d4d^": "\u0d0b:3",
1551        "\u0d4b\u0d13": "\u0d42:2",
1552        "\u0d05\u0d07": "\u0d10:2",
1553        "\u0d05\u0d05": "\u0d06:2",
1554        "\u0d05\u0d09": "\u0d14:2",
1555        "\u0d07\u0d07": "\u0d08:2",
1556        "\u0d09\u0d09": "\u0d0a:2",
1557        "\u0d28\u0d4d\u0d15\u0d4d\u200c\u0d39\u0d4d": "\u0d1e\u0d4d\u0d1a\u0d4d:7",
1558        "\u0d15\u0d4d\u0d39\u0d4d": "\u0d16\u0d4d:4",
1559        "\u0d17\u0d4d\u0d39\u0d4d": "\u0d18\u0d4d:4",
1560        "\u0d28\u0d4d\u0d17\u0d4d": "\u0d19\u0d4d:4",
1561        "\u0d15\u0d4d\u200c\u0d39\u0d4d": "\u0d1a\u0d4d:5",
1562        "\u0d1a\u0d4d\u0d39\u0d4d": "\u0d1b\u0d4d:4",
1563        "\u0d1c\u0d4d\u0d39\u0d4d": "\u0d1d\u0d4d:4",
1564        "\u0d28\u0d4d\u0d1c\u0d4d": "\u0d1e\u0d4d:4",
1565        "\u0d17\u0d4d\u200c\u0d2f\u0d4d": "\u0d1c\u0d4d\u0d1e\u0d4d:5",
1566        "\u0d31\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u0d31\u0d4d": "\u0d1f\u0d4d\u0d1f\u0d4d:8",
1567        "\u0d1f\u0d4d\u0d39\u0d4d": "\u0d20\u0d4d:4",
1568        "\u0d21\u0d4d\u0d39\u0d4d": "\u0d22\u0d4d:4",
1569        "\u0d31\u0d4d\u0d31\u0d4d\u0d39\u0d4d": "\u0d24\u0d4d:6",
1570        "\u0d24\u0d4d\u0d39\u0d4d": "\u0d25\u0d4d:4",
1571        "\u0d26\u0d4d\u0d39\u0d4d": "\u0d27\u0d4d:4",
1572        "\u0d2a\u0d4d\u0d39\u0d4d": "\u0d2b\u0d4d:4",
1573        "\u0d2c\u0d4d\u0d39\u0d4d": "\u0d2d\u0d4d:4",
1574        "\u0d15\u0d4d\u0d38\u0d4d\u0d39\u0d4d": "\u0d37\u0d4d:4",
1575        "\u0d38\u0d4d\u0d39\u0d4d": "\u0d36\u0d4d:4",
1576        "\u0d36\u0d4d\u0d39\u0d4d": "\u0d37\u0d4d:4",
1577        "\u0d1c\u0d4d\u200c\u0d39\u0d4d": "\u0d34\u0d4d:5",
1578        "\u0d30\u0d41\u200d": "\u20a8:3",
1579        "\u0d28\u0d4d\u0d15\u0d4d": "\u0d19\u0d4d\u0d15\u0d4d:4",
1580        "\u0d28\u0d4d\u0d1f\u0d4d": "\u0d23\u0d4d\u0d1f\u0d4d:4",
1581        "\u0d30\u0d4d_": "\u0d7c:3",
1582        "\u0d28\u0d4d_": "\u0d7b:3",
1583        "\u0d23\u0d4d_": "\u0d7a:3",
1584        "\u0d33\u0d4d_": "\u0d7e:3",
1585        "\u0d32\u0d4d_": "\u0d7d:3",
1586        "\u0d15\u0d4d_": "\u0d7f:3",
1587        "\u0d28\u0d4d\u0d31\u0d4d\u0d31\u0d4d": "\u0d28\u0d4d\u0d31\u0d4d:6",
1588        "\u0d28\u0d4d\u0d31\u0d4d\u0d39\u0d4d": "\u0d28\u0d4d\u0d24\u0d4d:6",
1589        "\u0d28\u0d4d\u0d31\u0d4d\u0d39\u0d4d\u0d39\u0d4d": "\u0d28\u0d4d\u0d25\u0d4d:8"
1590    };
1591    u = {
1592        "!": "!",
1593        '"': "\u0d20",
1594        "#": "\u0d4d\u0d30",
1595        $: ":",
1596        "%": ";",
1597        "&": "\u0d15\u0d4d\u0d37",
1598        "'": "\u0d1f",
1599        "(": "(",
1600        ")": ")",
1601        "*": "*",
1602        "+": "\u0d0b",
1603        "-": "\u2013",
1604        ".": ".",
1605        "/": "\u0d2f",
1606        0: "0",
1607        1: "1",
1608        2: "2",
1609        3: "3",
1610        4: "4",
1611        5: "5",
1612        6: "6",
1613        7: "7",
1614        8: "8",
1615        9: "9",
1616        ":": "\u0d1b",
1617        ";": "\u0d1a",
1618        "<": "\u0d37",
1619        "=": "\u0d43",
1620        ">": "\u2022",
1621        "?": "?",
1622        "@": "\u2018",
1623        A: "\u0d13",
1624        B: "\u0d33",
1625        C: "\u0d23",
1626        D: "\u0d05",
1627        E: "\u0d06",
1628        F: "\u0d07",
1629        G: "\u0d09",
1630        H: "\u0d2b",
1631        I: "\u0d18",
1632        J: "\u0d31",
1633        K: "\u0d16",
1634        L: "\u0d25",
1635        M: "\u0d36",
1636        N: "\u0d34",
1637        O: "\u0d27",
1638        P: "\u0d1d",
1639        Q: "\u0d14",
1640        R: "\u0d08",
1641        S: "\u0d0f",
1642        T: "\u0d0a",
1643        U: "\u0d19",
1644        V: "\u0d03",
1645        W: "\u0d10",
1646        X: "=",
1647        Y: "\u0d2d",
1648        Z: "\u0d0e",
1649        "[": "\u0d21",
1650        "\\": "\u200c",
1651        "]": "\u200d",
1652        "^": "\u2019",
1653        _: "%",
1654        "`": "\u0d4a",
1655        a: "\u0d4b",
1656        b: "\u0d35",
1657        c: "\u0d2e",
1658        d: "\u0d4d",
1659        e: "\u0d3e",
1660        f: "\u0d3f",
1661        g: "\u0d41",
1662        h: "\u0d2a",
1663        i: "\u0d17",
1664        j: "\u0d30",
1665        k: "\u0d15",
1666        l: "\u0d24",
1667        m: "\u0d38",
1668        n: "\u0d32",
1669        o: "\u0d26",
1670        p: "\u0d1c",
1671        q: "\u0d57",
1672        r: "\u0d40",
1673        s: "\u0d47",
1674        t: "\u0d42",
1675        u: "\u0d39",
1676        v: "\u0d28",
1677        w: "\u0d48",
1678        x: "\u0d02",
1679        y: "\u0d2c",
1680        z: "\u0d46",
1681        "{": "\u0d22",
1682        "|": "",
1683        "}": "\u0d1e",
1684        "~": "\u0d12",
1685        " ": " "
1686    };
1687    r = {
1688        "\u0d46\u0d46": "\u0d48:2",
1689        "\u0d46\u0d3e": "\u0d4a:2",
1690        "\u0d47\u0d3e": "\u0d4b:2",
1691        "\u0d46\u0d57": "\u0d4c:2",
1692        "\u0d07\u0d57": "\u0d08:2",
1693        "\u0d09\u0d57": "\u0d0a:2",
1694        "\u0d0e\u0d46": "\u0d10:2",
1695        "\u0d12\u0d3e": "\u0d13:2",
1696        "\u0d12\u0d57": "\u0d14:2",
1697        "\u0d30\u0d4d\u200d": "\u0d7c:3",
1698        "\u0d28\u0d4d\u200d": "\u0d7b:3",
1699        "\u0d23\u0d4d\u200d": "\u0d7a:3",
1700        "\u0d32\u0d4d\u200d": "\u0d7d:3",
1701        "\u0d33\u0d4d\u200d": "\u0d7e:3",
1702        "\u0d15\u0d4d\u200d": "\u0d7f:3"
1703    };
1704    let hindiRemingtonCharType = "0000000000000000000000000000000050500005050050500000000000550005000000000000000000000000000000000000000000000000000000000000000001110222222222222222233333333333333333333333333333333333334410444444444444444000000000003333333022440000000000000000000000000000";
1705    this.LangList = function () {
1706        return {
1707            Malayalam: 2
1708        }
1709    };
1710    this.Keyboards = function () {
1711        return {
1712            Malayalam: ["malayalaminscript", "phonetic-mal", "malayalam-linotype"]
1713        }
1714    };
1715    this.KeyboardsDetails = function () {
1716        return {
1717            malayalaminscript: u,
1718            "phonetic-mal": t
1719        }
1720    };
1721    b.chatType = function () {
1722        return {
1723            remington: hindiRemingtonCharType,
1724            malayalaminscript: "0000000000000000000000000000000050500005050050500000000000550005000000000000000000000000000000000000000000000000000000000000000001110222222222222222233333333333333333333333333333333333334410444444444444444000000000003333333022440000000000000000000000000000",
1725            "phonetic-mal": "0000000000000000000000000000000050500005050050500000000000550005000000000000000000000000000000000000000000000000000000000000000001110222222222222222233333333333333333333333333333333333334410444444444444444000000000003333333022440000000000000000000000000000"
1726        }
1727    };
1728    b.languagePosition = function () {
1729        return {
1730            remington: "2304:2431",
1731            malayalaminscript: "3328:3440",
1732            "phonetic-mal": "3328:3440"
1733        }
1734    };
1735    this.conjuncts = function () {
1736        return {
1737            malayalaminscript: r,
1738            "phonetic-mal": s
1739        }
1740    };
1741    n.appendChild(this.textEditor);
1742    c.appendChild(n);
1743    this.setConjuncts = function (a, d, f) {
1744        d = b.conjuncts()[f];
1745        var e = document.getElementById('searchMalText').value.length;
1746        e = 9 > parseInt(e) ? parseInt(e) : 9;
1747        var p = "";
1748        if (document.selection) {
1749            a.focus();
1750            let sel = document.selection.createRange();
1751            sel.moveStart("character", -e);
1752            p = 9 < sel.text.length ? sel.text.substring(parseInt(sel.text.length) - 9, parseInt(sel.text.length)) : sel.text;
1753            var g = 0;
1754            f = compareStrings(d, p, f);
1755            e = f[0];
1756            g = f[1];
1757            let mySel = document.selection.createRange();
1758            if(void 0 != d && "" != d && void 0 != g && "" != g && 0 < parseInt(g)){
1759				mySel.moveStart("character", -parseInt(g));
1760				mySel.select();
1761				mySel.text = e;
1762				mySel.select();
1763			}
1764        } else if (a.selectionStart || "0" == a.selectionStart) {
1765            var k = a.selectionStart,
1766                h = a.selectionEnd;
1767            p = a.value.substring(0 < k - 9 ? k - 9 : 0, k);
1768            f = compareStrings(d, p, f);
1769            e = f[0];
1770            g = f[1];
1771            if (void 0 != d && "" != d && void 0 != g && "" != g && 0 < parseInt(g)) {
1772    			a.value = a.value.substring(0, k - g) + e + a.value.substring(h, a.value.length);
1773    			a.selectionStart = k - g + parseInt(e.length);
1774    			a.selectionEnd = k - g + parseInt(e.length);
1775			}
1776
1777        }
1778    };
1779    const undoChromeSafari = function (a) {
1780        if (!document.selection) {
1781            var d =
1782                a.selectionStart;
1783            if (0 < d) {
1784    			a.value = a.value.substring(0, a.value.length - 1);
1785    			a.selectionStart = d;
1786   		 		a.selectionEnd = d;
1787			}
1788
1789        }
1790    };
1791    const compareType = function (a, d, f) {
1792        d = d.charCodeAt(0);
1793        a = a.replace("\\", "");
1794        a = a.charCodeAt(0);
1795        var e = 0,
1796            langPosition = b.languagePosition(),
1797            g = b.chatType(),
1798            k = langPosition[f].split(":")[0],
1799            c = langPosition[f].split(":")[1];
1800        f = g[f];
1801        g = parseInt(d) - parseInt(k) + 128;
1802        parseInt(d) > parseInt(k) && parseInt(d) < parseInt(c) && (e = f.replace(",", "").charAt(g));
1803        return e && !isNaN(e) && e == a;
1804    };
1805    const compareStrings = function (a, d, b) {
1806        var e = "",
1807            c = 0,
1808            k;
1809        for (k in a) {
1810            var g = "",
1811                h = d.substring(d.length -
1812                    k.length, d.length);
1813            if (0 <= h.toString().lastIndexOf(k)) {
1814                a = a[k];
1815                e = a.split(":")[0];
1816                c = a.split(":")[1];
1817                break
1818            } else {
1819                for (var m = !0, l = 0; l < k.length; l++){
1820                    if (void 0 == h.charAt(l)) {
1821                        m = !1;
1822                        break
1823                    } else {
1824                        if (k.charAt(l) != h.charAt(l)) {
1825							console.log(`Mismatch at position ${l}: ${k.charAt(l)} != ${h.charAt(l)}`);
1826						 }
1827                    }
1828                    if (compareType(k.charAt(l), h.charAt(l), b)) {
1829						g = (g === "" ? h.charAt(l) : g + "," + h.charAt(l));
1830					}
1831                    else {
1832						m = !1;
1833                        break
1834                    }
1835				}
1836                if (m) {
1837                    a = a[k];
1838                    e = a.split(":")[0];
1839                    d = "";
1840                    for (b = 0; c < e.length; c++) {
1841                        if (3 == e.charAt(c).charCodeAt(0) || 4 == e.charAt(c).charCodeAt(0)) {
1842                            d += g.split(",")[b];
1843                            b++;
1844                        } else {
1845                            d += e.charAt(c);
1846                        }
1847                    }
1848                    e = d;
1849                    c = a.split(":")[1];
1850                    break
1851                }
1852            }
1853        }
1854        return [e, c]
1855    };
1856    this.insertAtCursorPosition = function (a, b) {
1857        if (document.selection) {a.focus(); let sel = document.selection.createRange(); sel.text = b; sel.select();}
1858        else if (a.selectionStart || "0" == a.selectionStart) {
1859            var c = a.selectionStart,
1860                e = a.selectionEnd;
1861            e = (a.value.substring(0, c) + b + a.value.substring(e, a.value.length)).replace("", "");
1862            a.value = e;
1863            a.selectionStart = c + b.length;
1864            a.selectionEnd = c + b.length
1865        } else a.value += b
1866    }
1867}
1868
1869const revampCustomutils = {};
1870let hasPageScrolled = false;
1871
1872// breaking news 
1873revampCustomutils.bnewsslider = function () {
1874    $('.cmp-breaking-news__ul').each(function () {
1875        let timeInterval = $(this).data('id');
1876        let randomSpeed = 1000 * parseInt(timeInterval);
1877        $(this).not('.slick-initialized').slick({
1878            slidesToScroll: 1,
1879            autoplay: true,
1880            autoplaySpeed: randomSpeed,
1881            vertical: true,
1882            infinite: false,
1883            arrows: false,
1884            centerMode: false,
1885            adaptiveHeight: true,
1886            pauseOnFocus: false,
1887        });
1888    })
1889    $('.cmp-breaking-news__close').on("click", function () {
1890        $('.cmp-breaking-news').slideUp(200);
1891        let storeLastDateTime = $(this).data('attribute');
1892        localStorage.setItem("lastDateTime", storeLastDateTime);
1893    });
1894
1895}
1896
1897revampCustomutils.loadBreakingNews = function () {
1898    $.ajax({
1899        dataType: "html",
1900        type: "GET",
1901        url: $("#breaking-news-url").attr("data-url"),
1902        success: function (response) {
1903            const value = localStorage.getItem('lastDateTime');
1904            if (value) {
1905                const storedDateTime = Math.floor(new Date(value).getTime() / 1000);
1906                const NewDateTime = Math.floor(new Date($("#breaking-news-url").attr("data-modified")).getTime() / 1000);
1907                if (NewDateTime > storedDateTime || $('#bknews').hasClass('bknews-author')) {
1908                    $('#bknews').html(response);
1909                    revampCustomutils.bnewsslider();
1910                }
1911            } else {
1912                $('#bknews').html(response);
1913                revampCustomutils.bnewsslider();
1914            }
1915            revampCustomutils.fullwidthBackground();
1916        },
1917        error: function (error) {
1918            console.log(error);
1919        }
1920    });
1921}
1922
1923revampCustomutils.fullwidthBackground = function () {
1924    if ($(".fullwidth-bg").length > 0) {
1925        $(".fullwidth-bg").each(function () {
1926            let windwidth = $(window).width();
1927            let fullwidtharea = $('.fullwidth-bg').closest('.container').width();
1928
1929            let fullwidthvalue = (windwidth - fullwidtharea) / 2;
1930            if(windwidth > 575){
1931                $('.fullwidth-bg').css({
1932                    left: -fullwidthvalue,
1933                    right: -fullwidthvalue
1934                });
1935            } else {
1936				$('.fullwidth-bg').css({
1937                    left: -15,
1938                    right: -15
1939                });
1940			}
1941        })
1942    }
1943}
1944
1945// Today's epaper 
1946revampCustomutils.todaysEpaper = function () {
1947    let today = new Date();
1948    let dd = String(today.getDate()).padStart(2, '0');
1949    let mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
1950    let yyyy = today.getFullYear();
1951    let loaction = 'Kottayam';
1952    const url = 'https://static-editions.manoramaonline.com/EDaily_Data/MMDaily/' + loaction + '/' + yyyy + '/' + mm + '/' + dd + '/F/MMDaily_' + loaction + '_' + yyyy + '_' + mm + '_' + dd + '_F_FP_001_Th.jpg'
1953    $.ajax({
1954        dataType: "html",
1955        type: "GET",
1956        url: url,
1957        success: function (response) {
1958            console.log(response);
1959        },
1960        error: function (error) {
1961            console.log(error);
1962        }
1963    });
1964}
1965
1966
1967// Cartoon Slider
1968revampCustomutils.cartoonSlider = function () {
1969    $('.cartooncarousel').each(function () {
1970        let carouselId = $(this).find('.cartoon-block').attr('id');
1971        let carouselSize = $('#' + carouselId + '.cartoon-block').data('carousel-size');
1972        let cartoonBlock = $('#' + carouselId + '.cartoon-block .cmp-story-list--slider');
1973        const dotStatus = carouselSize > 1 ? true : false;
1974        $(cartoonBlock).not('.slick-initialized').slick({
1975            slidesToScroll: 1,
1976            autoplay: true,
1977            infinite: false,
1978            autoplaySpeed: 4000,
1979            dots: dotStatus,
1980            pauseOnFocus: false,
1981            arrows: false,
1982        });
1983    });
1984}
1985
1986// Game Slider
1987revampCustomutils.gameSlider = function () {
1988    let sliderAutoPlay = $('.mm-game-block').data('slider-autoplay');
1989    let timeInterval = $('.mm-game-block').data('slider-delay');
1990    let sliderSpeed = 1000 * parseInt(timeInterval);
1991    $('.mm-game-block .cmp-story-list--slider').not('.slick-initialized').slick({
1992        centerPadding: '0px',
1993        slidesToShow: 1,
1994        slidesToScroll: 1,
1995        autoplay: sliderAutoPlay,
1996        autoplaySpeed: sliderSpeed,
1997        dots: true,
1998        pauseOnFocus: false,
1999        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
2000        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
2001        responsive: [{
2002                breakpoint: 1200,
2003                settings: {
2004                    centerPadding: '40px',
2005                    slidesToShow: 3,
2006                    infinite: true,
2007                }
2008            },
2009            {
2010                breakpoint: 992,
2011                settings: {
2012                    centerPadding: '40px',
2013                    slidesToShow: 2,
2014                    infinite: true,
2015                }
2016            },
2017            {
2018                breakpoint: 576,
2019                settings: {
2020                    centerPadding: '40px',
2021                    slidesToShow: 1,
2022                    infinite: true,
2023                }
2024            },
2025        ]
2026    });
2027}
2028
2029// embed videos
2030revampCustomutils.videoPlayer = function () {
2031    if ($('.cmp-section-title-block').length > 0) {
2032        $('.cmp-video-block__icon-top').click(function () {
2033            const $videoBlock = $(this).closest('.cmp-video-block'); 
2034            
2035            const $videoContent = $videoBlock.find('.cmp-video-block__inner'); 
2036            $videoContent.css("display", "block");
2037
2038            const $playButton = $videoBlock.find(".vjs-big-play-button");
2039            if ($playButton.length > 0) {
2040                $playButton.click();
2041            }
2042
2043            const $overlay = $videoBlock.find('.cmp-video-block__overlay');
2044            $overlay.css("display", "none");
2045        });
2046    }
2047}
2048revampCustomutils.scoreBoardSlider = function () {
2049    $('.single-common-slider').each(function () {
2050        let autoPlay = $(this).data('autoplay');
2051        let timeInterval = $(this).data('delay');
2052        let randomSpeed = 1000 * parseInt(timeInterval);
2053        $(this).not('.slick-initialized').slick({
2054            slidesToScroll: 1,
2055            autoplay: autoPlay,
2056            autoplaySpeed: randomSpeed,
2057            dots: true,
2058            arrows: false,
2059        });
2060    })
2061}
2062revampCustomutils.mmScoreBoardDateTab = function () {
2063    $('.mmscoreboarditem').each(function () {
2064        let hidetabvalue = $(this).find('.hidetab');
2065        if (hidetabvalue.length) {
2066			let index = $(this).index();
2067            $(this).closest('.cmp-tab-block').find('.cmp-tab-block__nav .cmp-tab-block__nav-ul .cmp-tab-block__nav-li').eq(index).remove();
2068			$(this).remove();
2069        }
2070    });
2071    $('.cmp-tab-block').each(function () {
2072        let tabThis = $(this);
2073        if(!tabThis.find('.cmp-tab-block__nav-li').hasClass('active'))
2074                     {
2075        tabThis.find('.cmp-tab-block__nav-li:first-child').addClass('active');
2076        tabThis.find('.cmp-tab-block__item:first').addClass('active');
2077        tabThis.find('.cmp-tab-block__item').hide();
2078        tabThis.find('.cmp-tab-block__item:first').show();
2079         tabThis.find('.cmp-mm-score-full__content-in').css("display", "none");
2080    	 tabThis.find('.cmp-tab-block__item:first .cmp-mm-score-full__content').find('.cmp-mm-score-full__content-in').eq(0).css("display", "block");
2081                     }else{
2082					let index = tabThis.find('.cmp-tab-block__nav-li.active').index();
2083					tabThis.find('.cmp-tab-block__item').hide();
2084					tabThis.find('.cmp-tab-block__item').eq(index).show();
2085			tabThis.find('.cmp-mm-score-full__content-in').css("display", "none");
2086    	 tabThis.find('.cmp-tab-block__item').eq(index).find('.cmp-mm-score-full__content .cmp-mm-score-full__content-in').eq(0).css("display", "block");
2087
2088                     }
2089        tabThis.find('.cmp-tab-block__nav-li a').on("click", function () {
2090            tabThis.find('.cmp-tab-block__nav-li').removeClass('active');
2091            $(this).parent('.cmp-tab-block__nav-li').addClass('active');
2092            tabThis.find('.cmp-tab-block__item').hide().removeClass('active');
2093            let activeIndex = $(this).parent('.cmp-tab-block__nav-li').index();
2094			tabThis.find('.cmp-tab-block__item').eq(activeIndex).fadeIn().addClass('active');
2095            $('.cmp-mm-score-full__date-ul li').find('.cmp-mm-score-full__date-btn').removeClass('cmp-mm-score-full__date-btn--active');
2096            let cmpBlockItemActive = $('.cmp-tab-block__item.active')
2097            $('.cmp-mm-score-full__content-in').css("display", "none");
2098            $(cmpBlockItemActive).find('.cmp-mm-score-full__date-btn').eq(0).addClass("cmp-mm-score-full__date-btn--active");
2099            $(cmpBlockItemActive).find('.cmp-mm-score-full__content .cmp-mm-score-full__content-in').eq(0).css("display", "block");
2100            return false;
2101        });
2102    });
2103    $('.cmp-mm-score-full__date-ul li').on("click", function () {
2104        $('.cmp-mm-score-full__date-ul li').find('.cmp-mm-score-full__date-btn').removeClass('cmp-mm-score-full__date-btn--active');
2105        $(this).children('.cmp-mm-score-full__date-btn').addClass('cmp-mm-score-full__date-btn--active');
2106        let mmScoreDateHref = $(this).find('.cmp-mm-score-full__date-btn--active').attr('data-id');
2107        $('.cmp-mm-score-full__content-in').css("display", "none");
2108        $('#' + mmScoreDateHref + '.cmp-mm-score-full__content-in').css("display", "block");
2109    });
2110
2111}
2112revampCustomutils.articleGallery = function () {
2113	let sliderSrc="src";
2114	if(screen.width>=991){
2115		sliderSrc="data-fullwidth";
2116	}
2117	else if (screen.width<991 && screen.width>=575){
2118		sliderSrc="data-tabsrc";
2119	}
2120	else{
2121		sliderSrc="data-mobsrc";
2122	}
2123	
2124    $('.cmp-list-gallery').each(function (key, data) {
2125		try{
2126            let image = $(data).find("img");
2127
2128            image.each(function() {                
2129                const webSrc = $(this).attr('data-websrc');
2130                if (webSrc) {
2131                  const fullWidthSrc = webSrc.split('?')[0];
2132                  $(this).attr('data-fullwidth', fullWidthSrc);
2133                }
2134            });
2135
2136			let gallery = $(data).find(".mm-icon__zoom");
2137			gallery.on('click', function (e) {
2138				e.preventDefault();
2139				$(this).parent().siblings('img').click();
2140			});
2141			image.simpleLightbox({
2142				navText: ['<i class="mm-icon mm-white-icon mm-icon__arrow-right-lg"></i>', '<i class="mm-icon mm-white-icon mm-icon__arrow-left-lg"></i>'],
2143				closeText: '×',
2144				className: 'cmp-list-gallery__lightbox',
2145				widthRatio: 1,
2146				captions: true,
2147				captionPosition: 'bottom',
2148				captionDelay: .3,
2149				sourceAttr: sliderSrc,
2150				fileExt: false,
2151
2152			});
2153		}catch(err){}
2154	});
2155
2156}
2157revampCustomutils.articleSlider = function () {
2158    $('.cmp-article-slider__large').each(function () {
2159        $(this).not('.slick-initialized').slick({
2160            asNavFor: '.cmp-article-slider__thumb',
2161            centerPadding: '0px',
2162            infinite: false,
2163            slidesToShow: 1,
2164            slidesToScroll: 1,
2165            dots: false,
2166            prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
2167            nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
2168        });
2169    });
2170    $('.cmp-article-slider__thumb').each(function () {
2171        $(this).not('.slick-initialized').slick({
2172            slidesToShow: 4,
2173            slidesToScroll: 1,
2174            centerPadding: '40px',
2175            asNavFor: '.cmp-article-slider__large',
2176            infinite: false,
2177            dots: false,
2178            focusOnSelect: true,
2179            prevArrow: '<button class="cmp-article-slider__thumb-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
2180            nextArrow: '<button class="cmp-article-slider__thumb-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
2181            responsive: [{
2182                breakpoint: 576,
2183                settings: {
2184                    slidesToShow: 3,
2185                    slidesToScroll: 1,
2186                }
2187            }, ]
2188        });
2189    });
2190}
2191revampCustomutils.artcleSimpleslider = function () {
2192    $('.cmp-simple-slider-block__main').each(function () {
2193        let timeInterval = $(this).data('id');
2194        let randomSpeed = 1000 * parseInt(timeInterval); // code to calculate random speed here
2195        $(this).not('.slick-initialized').slick({
2196            dots: false,
2197            lazyLoad: 'ondemand',
2198            autoplay: true,
2199            autoplaySpeed: randomSpeed,
2200            fade: true,
2201            cssEase: 'linear',
2202            slidesToShow: 1,
2203            slidesToScroll: 1,
2204            infinite: false,
2205            arrows: true,
2206            pauseOnHover: false,
2207            pauseOnFocus: false,
2208            prevArrow: '<button class="slide-arrow prev-arrow slick-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
2209            nextArrow: '<button class="slide-arrow next-arrow slick-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>'
2210
2211        });
2212    })
2213    $('.cmp-simple-slider-block__main').not('.slick-initialized').slick('slickPlay');
2214}
2215
2216// ImageSlideShow
2217revampCustomutils.premiumImageSlideShow = function () {
2218    $('.cmp-gallery-block').each(function () {
2219        let $thisGallery = $(this);
2220        $(this).find('.cmp-gallery-block__open').on("click", function () {
2221           $thisGallery.find('.cmp-gallery-block__popup').fadeIn(200);
2222           $thisGallery.find('.cmp-gallery-block__popup-slider').not('.slick-initialized').slick({
2223              centerPadding: '20px',
2224              infinite: false,
2225              slidesToShow: 1,
2226              slidesToScroll: 1,
2227              dots: false,
2228              prevArrow: '<button class="slide-arrow slick-custom-arrow slick-prev"><i class="mm-icon mm-white-icon mm-icon__arrow-right-sm"></i>  </button>',
2229              nextArrow: '<button class="slide-arrow slick-custom-arrow slick-next"><i class="mm-icon mm-white-icon mm-icon__arrow-left-sm"></i>  </button>'
2230           });
2231           $('body').addClass("overflow-hidden");
2232           $(".lazyload").unveil();
2233        });
2234     
2235        $thisGallery.find('.cmp-gallery-block__item:nth-child(2) .cmp-gallery-block__open').click(function () {
2236           let slider = $thisGallery.find('.cmp-gallery-block__popup-slider');
2237           slider[0].slick.slickGoTo(parseInt(1));
2238        });
2239        $thisGallery.find('.cmp-gallery-block__item:nth-child(3) .cmp-gallery-block__open').click(function () {
2240           let slider = $thisGallery.find('.cmp-gallery-block__popup-slider');
2241           slider[0].slick.slickGoTo(parseInt(2));
2242        });
2243     
2244        // close gallery
2245        $thisGallery.find('.cmp-gallery-block__popup-close').on("click", function () {
2246           $thisGallery.find('.cmp-gallery-block__popup').fadeOut(200);
2247           $('body').removeClass("overflow-hidden");
2248           $thisGallery.find('.cmp-gallery-block__popup-slider').slick('unslick');
2249        });
2250        $thisGallery.find('.cmp-gallery-block__popup-info').on("click", function () {
2251           $(this).closest('.cmp-gallery-block').toggleClass("galleryDispnhide");
2252        });
2253     
2254     });
2255
2256
2257}
2258
2259// Search component 
2260revampCustomutils.searchComponent = function () {
2261	const $switchLanguage = $('.cmp-search-popup__switch-language input[type="checkbox"]');
2262   	const $searchInput = $('.cmp-search-popup__input');
2263   	const $searchButton = $('.cmp-search-popup__btn');
2264	let enPlaceHold;
2265	let searchURL;
2266	let searchVal;
2267   	$switchLanguage.on('change', function() {
2268		console.log('clicked')
2269		const $ele = $(this);
2270        const isChecked = $ele.is(':checked');
2271        const wrap = $ele.closest('.cmp-search-popup__filed-block');
2272		const inputWrp = wrap.find('.cmp-search-popup__input-wrp');
2273		const indicaElement = inputWrp.find('[id^="Indica_Wrapper"]');
2274        if (isChecked) {
2275			let randNum = Math.floor(Math.random() * 1000);
2276			let newWrapId = 'search-mal-' + randNum;
2277			let Indica_Wrapper = 'Indica_Wrapper-' + randNum;
2278
2279			if(!inputWrp.attr('id')) {
2280				
2281				wrap.find('.cmp-search-popup__input-wrp').attr({
2282							'id': newWrapId,
2283			                'data-language': 'malayalam',
2284			                'data-keyboard': 'phonetic-mal'
2285			            });
2286			    wrap.find('.cmp-search-popup__input-wrp input').val('')
2287			    enPlaceHold = wrap.find('.cmp-search-popup__input-wrp input').attr('placeholder')
2288			
2289				if(document.getElementById(Indica_Wrapper) === null){
2290					new MMEditorSearch(document.getElementById(newWrapId), newWrapId, Indica_Wrapper);
2291
2292				}
2293			
2294			}
2295        
2296        }else{
2297        	inputWrp.find('.cmp-search-popup__input').removeAttr('id').removeAttr('placeholder');
2298        	inputWrp.find('.cmp-search-popup__input').attr('placeholder', enPlaceHold)
2299        	inputWrp.removeAttr('id').removeAttr('data-language').removeAttr('data-keyboard');
2300        	const indicaCont = indicaElement.html();
2301        	indicaElement.replaceWith(indicaCont);
2302		}
2303		inputWrp.find('.cmp-search-popup__input').focus();
2304        
2305    });
2306    $searchInput.on('keypress', function(e) {
2307        if (e.keyCode === 13) {
2308		searchVal = $(this).val();
2309		searchURL = $(this).data('url');
2310        searchResult(searchVal, searchURL, $(this));
2311        }
2312    });
2313    $searchButton.on('click', function() {
2314		const inpEle = $(this).closest('.cmp-search-popup__input-wrp').find('.cmp-search-popup__input');
2315        searchVal = inpEle.val();
2316		searchURL = inpEle.data('url');
2317        searchResult(searchVal, searchURL, $(this));
2318    });
2319    function searchResult(val,url,ele) {
2320        if (val && url) {
2321            const redirectUrl = url + encodeURI(val);
2322            window.location.href = redirectUrl;
2323        }
2324    }
2325}
2326
2327
2328// 404 page listing tab
2329revampCustomutils.errorPageListingTab = function () {
2330    $('.listing-nav-tab').each(function () {
2331        const tabThis = $(this);  
2332      	tabThis.find('.cmp-nav-tab__li:first-child').addClass('active');
2333        tabThis.find('.cmp-nav-tab__item').hide();
2334        tabThis.find('.cmp-nav-tab__item:first').show();
2335        tabThis.find('.cmp-nav-tab__li a').on("click", function (e) {
2336            e.preventDefault();
2337            const clickedTab = $(this).parent('.cmp-nav-tab__li');
2338            tabThis.find('.cmp-nav-tab__li').removeClass('active');
2339            clickedTab.addClass('active');
2340            tabThis.find('.cmp-nav-tab__item').hide().removeClass('active');
2341            const activeTab = $(this).attr('href');
2342            $(activeTab).fadeIn().addClass('active');
2343            try {
2344                if($('.story-card-list-block .cmp-story-list--slider').not('.slick-initialized').slick('refresh')){
2345                     $('.story-card-list-block .cmp-story-list--slider').on('afterChange', function(e, slick, currentSlide){
2346                          $(".lazyload").unveil();
2347                     });
2348                 }
2349            }
2350            catch (err) {
2351            }
2352        });
2353    });
2354}
2355
2356// added MMO25-1156 story-card-list-block slick slider
2357revampCustomutils.storyCardSlickSlider = function () {
2358    $('.story-card-list-block .cmp-story-list--slider').not('.slick-initialized').not('.slick-initialized').slick({
2359        centerMode: false,
2360        centerPadding: '0px',
2361        infinite: false,
2362        slidesToShow: 4,
2363        slidesToScroll: 1,
2364        dots: true,
2365        prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
2366        nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
2367        responsive: [{
2368            breakpoint: 1200,
2369            settings: {
2370                centerPadding: '40px',
2371                slidesToShow: 3,
2372                infinite: true,
2373            }
2374        }, {
2375            breakpoint: 992,
2376            settings: {
2377                centerPadding: '40px',
2378                slidesToShow: 2,
2379                infinite: true,
2380            }
2381        }, {
2382            breakpoint: 576,
2383            settings: {
2384                centerPadding: '40px',
2385                slidesToShow: 1,
2386                infinite: true,
2387            }
2388        }]
2389    });
2390}
2391
2392
2393
2394// Scroll bottom - comment section 
2395revampCustomutils.vuukleComment = function () {
2396	$("#vuukleComment").on('click', function () {
2397		$('html, body').animate({
2398			'scrollTop': $('#comments').offset().top
2399		}, 2000);
2400	});
2401}
2402
2403//Indepth list hide 
2404revampCustomutils.indepthListHide = function () {
2405    $('div.cmp-story-list__component-slot-in').each(function() {
2406        if($.trim($(this).text()) === '' && $(this).children().length == 0) {
2407            $(this).parent().hide();
2408        }
2409    });
2410}
2411
2412// MMO25-1615 List show more 
2413revampCustomutils.listShowMore = function () {
2414    try {
2415        if ($(".moreInarticle-story-block").find(".cmp-story-list").hasClass("listshowmore")){
2416			let currentURL = window.location.href;				
2417			let listlen = $(".moreInarticle-story-block").find(".cmp-story-list.listshowmore li.cmp-story-list__item").length-1;
2418			let duplicate = false;
2419			$(".moreInarticle-story-block").find(".cmp-story-list.listshowmore li.cmp-story-list__item").each(function (index, element) {				
2420				let hrefValue = $(this).find("a.cmp-story-list__title-link").attr("href");               
2421				if (currentURL.indexOf(hrefValue) !== -1) {
2422					$(this).remove();
2423					duplicate = true;                    
2424				}else if(index==listlen && duplicate== false){	
2425					$(".moreInarticle-story-block").find(".cmp-story-list.listshowmore li.cmp-story-list__item:last"). remove();
2426				}
2427                
2428				$(this).addClass("smhidden");
2429			});
2430            if($(".moreInarticle-story-block li.cmp-story-list__item").length===0){
2431                $(".moreInarticle-story-block .cmp-section-title-block").remove();
2432            }
2433
2434            // Set the number of items to show initially and the step size for each "Show More" click
2435            let itemsToShow = $(".cmp-story-list.listshowmore").attr("data-onloadlimit");
2436
2437            // Show the first set of items
2438            $(".cmp-story-list.listshowmore li.cmp-story-list__item").slice(0, itemsToShow).removeClass("smhidden");
2439            if ($(".cmp-story-list.listshowmore li.cmp-story-list__item").slice(0, itemsToShow).addClass("show")) {
2440                $(".lazyload").unveil();
2441                if ($(".cmp-story-list.listshowmore li.cmp-story-list__item.smhidden").length === 0) {
2442                    $('.moreInarticle-story-block').find('.cmp-more-stories').hide();
2443                }
2444            }
2445
2446            // Handle the "Show More" button click
2447            // To avoid live update show more conflict, below line updated
2448            // To avoid premium block show more conflict, below line updated
2449            $(".moreInarticle-story-block").find(".cmp-more-stories").click(function () {
2450                let $hiddenItems = $(".cmp-story-list.listshowmore li.cmp-story-list__item.smhidden");
2451                let stepSize = $(".cmp-story-list.listshowmore").attr("data-pagelimit");
2452                let numItemsToShow = Math.min(stepSize, $hiddenItems.length);
2453
2454                $hiddenItems.slice(0, numItemsToShow).removeClass("smhidden");
2455                $hiddenItems.slice(0, numItemsToShow).addClass("show");
2456
2457                // Hide the "Show More" button if there are no more hidden items
2458                if ($(".cmp-story-list.listshowmore li.cmp-story-list__item.smhidden").length === 0) {
2459                    $(this).hide();
2460                }
2461                $(".lazyload").unveil();
2462            });
2463        }
2464    } catch (err) { }
2465}
2466
2467//reporters corner share
2468revampCustomutils.reportersShare = function () {
2469	$('.rprtr-item-sharebtn').on("click", function(e){
2470	  e.stopPropagation();
2471	  var thispop = $(this).siblings('.rprtr-share-pop');
2472	  if (thispop.hasClass("shareActive")) {
2473		thispop.removeClass("shareActive");
2474	  } else {
2475		$('.rprtr-share-pop').removeClass("shareActive");
2476		thispop.addClass("shareActive");
2477	  }
2478			
2479	});
2480}
2481revampCustomutils.searchPopupScroll = function () {
2482	$('body').append($('.cmp-search-popup'));
2483	hasPageScrolled = true;
2484}
2485
2486
2487//remove watch next block when no articles are listed by default 
2488revampCustomutils.removeWatchNext = function () {  
2489    if($(".cmp-video-list-block.publish-mode li.cmp-story-list__item").length === 0 && $(".cmp-video-list-block .cmp-video-list-block__nav").length === 0) {
2490        $(".cmp-video-list-block.publish-mode").closest('.mmcontainer').remove();
2491    }  
2492}
2493
2494// MMO25-3649 Display Time stamp 
2495revampCustomutils.displayPublishDate = function () {
2496    const appendTimestamp = className => {
2497		const elements = document.querySelectorAll(`p.${className}`);
2498		const time = respDate => {
2499			const sec = Math.floor((Date.now() - respDate) / 1000);
2500			if (!isNaN(sec)) {
2501				 if (sec >= 86400) {
2502				  const date = new Date(respDate);
2503				  return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric'});
2504				} else if (sec >= 3600) {
2505				  const hours = Math.floor(sec / 3600);
2506				  return hours + (hours > 1 ? " hours ago" : " hour ago");
2507				} else if (sec >= 60 && sec < 120) {
2508				  return "Just now";
2509				} else if (sec >= 120) {
2510				  const minutes = Math.floor(sec / 60);
2511				  return minutes + " minutes ago";
2512				} else if (sec < 120){
2513				  return "Just now";
2514				} else {
2515                    return "invalid timestamp";
2516                }
2517			}
2518		};
2519		elements.forEach(element => {
2520            const publishDateAttr = element.getAttribute('data-publish-date');
2521			const timestamp = parseInt(publishDateAttr, 10);
2522            if (!isNaN(timestamp)) {
2523                const formattedTime = time(timestamp);
2524                if (publishDateAttr !== "") {
2525            		element.innerHTML = formattedTime;
2526        		}
2527            } else if (publishDateAttr === null) {
2528                	element.classList.remove('cmp-story-list__date');
2529            }
2530		});
2531	};
2532	appendTimestamp('cmp-story-list__date');
2533}
2534
2535// MMO25-3716 User Interaction Opinion Polling 
2536revampCustomutils.userInteractionPollingBlock = function () {
2537    const articleBodySlots = $('.article-body__component-slot[data-pollingUrl]');
2538    articleBodySlots.each(function (index) {
2539        let pollingUrl = $(this).attr('data-pollingUrl');
2540        const opinionPollBlockId = `opinionPollBlock_${(index + 1).toString().padStart(2, '0')}`;
2541        $(this).attr('id', opinionPollBlockId);
2542        const opinionPollBlock = $(`#${opinionPollBlockId}`);
2543        let multipleOptionAllowed = false;
2544        let responseData;
2545        let voteButtonText = "VOTE NOW";
2546        let questionTitleColor;
2547        let buttonColor;
2548        const errorBlockHide = () => {
2549            opinionPollBlock.on('click', '.cmp-polling-block__li', function () {
2550                let errorBlock = $(this).closest('.polling-block').find('.cmp-polling-block__error');
2551                errorBlock.hide();
2552            });
2553        };
2554        const getAndAppendPollingData = async () => {
2555            if (opinionPollBlock.find('.polling-block').length === 0) {
2556                const pollDataUrl = opinionPollBlock.attr('data-pollingurl');
2557                pollingUrl = `${pollDataUrl}.json`;
2558                try {
2559                    const resultData = await $.ajax({
2560                        url: pollingUrl,
2561                        method: 'GET',
2562                        dataType: 'json'
2563                    });
2564                    responseData = resultData;
2565					 if (resultData.opinionPollEventStatus !== 'Active') {
2566						 opinionPollBlock.remove();
2567						return; 
2568					}
2569                    if (resultData && resultData.opinionPollQuestion) {
2570                        resultData.opinionPollQuestion.forEach((questionData) => {
2571                            if (hasUserVoted(questionData.opinionPollQuestionId)) {
2572                                displayResult(questionData.opinionPollQuestionId);
2573                            }
2574                        });
2575                    }
2576                    questionTitleColor = resultData.opinionPollQuestionTitleColor;
2577                    buttonColor = resultData.opinionPollButtonColor;
2578                    const pollLanguage = resultData.opinionPollEventLanguage;
2579                    const pollTitleName = resultData.opinionPollEventName;
2580                    const opinionPollEventEndDate = new Date(resultData.opinionPollEventEndDate);
2581                    const pollPoweredByImage = resultData.opinionPollEventPoweredByImage;
2582                    const pollPoweredBy = resultData.opinionPollEventPoweredBy;
2583                    const pollPoweredByWebsiteUrl = resultData.opinionPollEventPoweredByWebsiteUrl;
2584                    const pollPoweredByNewTab = resultData.poweredByNewTab;
2585                    const sectionTitleBlockExists = opinionPollBlock.find('.cmp-section-title-block').length > 0;
2586                    opinionPollBlock.append('<div class="polling-block-outer"></div>');
2587                    if (!sectionTitleBlockExists) {
2588                        let sectionTitleBlock = `
2589                            <div class="cmp-section-title-block">
2590                                <h3 class="cmp-section-title"><span class="cmp-section-shape"></span>${pollTitleName}</h3>
2591                        `;
2592                        if (pollPoweredByImage || pollPoweredBy || pollPoweredByWebsiteUrl) {
2593                            sectionTitleBlock += `
2594                                <div class="cmp-sponser-block">
2595                                    <div class="cmp-sponser-block__title">Powered By</div>
2596                                    <div class="cmp-sponser-block__logo">
2597                                        <a tabindex="0" href="${pollPoweredByWebsiteUrl || '#'}" target="${pollPoweredByNewTab ? '_blank' : '_self'}">
2598                                            ${pollPoweredByImage ? `<img src="${pollPoweredByImage}" alt="${pollPoweredBy}
2598">` : ''}
2599                                        </a>
2600                                    </div>
2601                                </div>
2602                            `;
2603                        }
2604
2605                        sectionTitleBlock += `</div>`;
2606                        opinionPollBlock.find('.polling-block-outer').prepend(sectionTitleBlock);
2607                    }
2608
2609                    if (!opinionPollEventEndDate) {
2610                        console.warn("The opinion poll event end date is not set.");
2611                    } else {
2612                        const eventEndDate = opinionPollEventEndDate instanceof Date ? opinionPollEventEndDate : new Date(opinionPollEventEndDate);
2613                    
2614                        if (isNaN(eventEndDate.getTime())) {
2615                            console.error("Invalid opinion poll event end date.");
2616                        } else {
2617                            const currentDate = new Date();
2618                        
2619                            if (currentDate > eventEndDate) {
2620                                resultData.opinionPollQuestion.forEach((questionData) => {
2621                                    displayResult(questionData.opinionPollQuestionId);
2622                                });
2623
2624                                const observer = new MutationObserver(() => {
2625                                    const pollingBlocks = document.querySelectorAll('.cmp-polling-block__alertmsg');
2626                                    if (pollingBlocks.length > 0) {
2627                                        pollingBlocks.forEach((pollingBlock) => {
2628                                            pollingBlock.style.display = 'block';
2629                                        });
2630                                        observer.disconnect();
2631                                    }
2632                                });
2633                                observer.observe(document.body, { childList: true, subtree: true });
2634                            }
2635                        }
2636                    }
2637
2638                    resultData.opinionPollQuestion.forEach((questionData) => {
2639                        const opinionPollQuestionId = questionData.opinionPollQuestionId;
2640						let languageClass = '';
2641
2642						if (pollLanguage === 'Malayalam') {
2643						    languageClass = 'ml-font';
2644						} else if (pollLanguage === 'English') {
2645						    languageClass = 'english-font';
2646						}
2647						
2648                        const titleElement = $(`#pollingOuter-${opinionPollQuestionId} .cmp-section-title`);
2649                        const spanElement = $(`#pollingOuter-${opinionPollQuestionId} .cmp-section-shape`);
2650                        titleElement.append(spanElement, pollTitleName);
2651
2652                        if (pollPoweredByWebsiteUrl) {
2653                            $(`#pollingOuter-${opinionPollQuestionId} .cmp-sponser-block__title`).text('Powered By');
2654                            const sponsorLink = $(`#pollingOuter-${opinionPollQuestionId} .cmp-sponser-block__logo a`).attr('href', pollPoweredByWebsiteUrl);
2655                            if (pollPoweredByNewTab == true) {
2656                                sponsorLink.attr('target', '_blank');
2657                            }
2658                            if (pollPoweredByImage) {
2659                                $(`#pollingOuter-${opinionPollQuestionId} .cmp-sponser-block__logo img`).attr('src', pollPoweredByImage).attr('alt', pollPoweredBy);
2660                                updatePollSponsorImageTheme();
2661                            } else {
2662                                $(`#pollingOuter-${opinionPollQuestionId} .cmp-sponser-block__logo img`).remove();
2663                            }
2664                        } else {
2665                            $(`#pollingOuter-${opinionPollQuestionId} .cmp-sponser-block__logo a`).remove();
2666                        }
2667
2668                        const pollingOuter = $(`#pollingOuter-${opinionPollQuestionId}`);
2669
2670                        if (pollingOuter.length === 0) {
2671                            $(opinionPollBlock).find('.polling-block-outer').append(`
2672                                  <div id="pollingBlock-${opinionPollQuestionId}" class="polling-block ${languageClass}"></div>
2673                          `);
2674                        }
2675                        const pollMultipleChoiceBlk = $(`#pollingBlock-${opinionPollQuestionId}`);
2676                        appendPollingBlock(questionData, pollMultipleChoiceBlk);
2677                    });
2678                } catch (error) {
2679                    console.error('Error fetching data:', error);
2680                }
2681                updatePollSponsorImageTheme();
2682            }
2683            opinionPollBlock.find('.cmp-polling-block__ul li').off('click');
2684            errorBlockHide();
2685        };
2686
2687        const updatePollSponsorImageTheme = () => {
2688            $('.cmp-sponser-block__logo img').each(function() {
2689                var $parentDiv = $(this).closest('.article-body__component-slot'); 
2690                if ($parentDiv.data('pollingurl')) {
2691                    const sponsorImage = $(this);
2692                    const pollPoweredByImage = sponsorImage.attr('src');
2693                        if ($('html').hasClass('mm-light-theme')) {
2694                            sponsorImage.attr('src', pollPoweredByImage).removeClass('image-dark-theme').addClass('image-light-theme');
2695                        } else if ($('html').hasClass('mm-dark-theme')) {
2696                            sponsorImage.attr('src', pollPoweredByImage).removeClass('image-light-theme').addClass('image-dark-theme');
2697                        } else {
2698                            sponsorImage.attr('src', pollPoweredByImage).removeClass('image-dark-theme').addClass('image-light-theme');
2699                        }
2700                }
2701            });
2702        }; 
2703        
2704        const isMultipleOptionAllowed = (responseData) => {
2705            return responseData.multipleOptionAllowed;
2706        };
2707        const appendPollingBlock = (questionData, pollingBlock) => {
2708            const questionName = questionData.opinionPollQuestionName;
2709            const pollQuestionDescription = questionData.opinionPollQuestionDescription;
2710            const opinionPollQuestionId = questionData.opinionPollQuestionId;
2711            const pollOptions = questionData.opinionPollOption;
2712            multipleOptionAllowed = isMultipleOptionAllowed(responseData);
2713            let optionsHTML = '';
2714            if (questionData.opinionPollVoteButtonText) {
2715                voteButtonText = questionData.opinionPollVoteButtonText;
2716            }
2717           
2718            if (pollOptions && Array.isArray(pollOptions)) {
2719                pollOptions.forEach((option, optionIndex) => {
2720                    let iconBlock = '';
2721                    if (option.opinionPollOptionImage) {
2722                        iconBlock = `<div class="cmp-polling-block__icon"><img src="${option.opinionPollOptionImage}" alt="" title=""></div>`;
2723                    }
2724                    optionsHTML += `<li class="cmp-polling-block__li">
2725                          <label class="cmp-polling-block__option-label d-flex align-items-center">
2726                              ${iconBlock}
2727                              <div class="cmp-polling-block__option-text">${option.opinionPollOptionValue}</div>
2728                              <input type="${multipleOptionAllowed ? 'checkbox' : 'radio'}" data-pollQuestionId="${option.opinionPollOptionId}" id="option-${opinionPollQuestionId}-${optionIndex}" value="${option.opinionPollOptionValue}" name="pollingOption${opinionPollQuestionId}">
2729                              <div class="cmp-polling-block__ticker"> <i class="mm-icon mm-icon__check mm-white-icon"></i></div>
2730                          </label>
2731                      </li>`;
2732                });
2733            }
2734
2735            pollingBlock.html(`
2736                  <div class="cmp-polling-block mm-border-radius-8 card-gray-bg">
2737                      <div class="cmp-polling-block__option-block">
2738                          <div class="cmp-polling-block__head">
2739                              <h6 class="cmp-polling-block__title" ${questionTitleColor ? `style="color: ${questionTitleColor};"` : ''}>${questionName}</h6>
2740                              <p class="cmp-polling-block__dispn">${pollQuestionDescription}</p>
2741                              <p class="cmp-polling-block__alertmsg" style="display: none">Voting Completed</p>
2742                          </div>
2743                          <div class="cmp-polling-block__body">
2744                              <ul class="cmp-polling-block__ul d-flex flex-wrap">
2745                                  ${optionsHTML}
2746                              </ul>
2747                              <div class="cmp-polling-block__footer d-flex justify-content-between">
2748                                  <div class="cmp-polling-block__footer-left">
2749                                      <div class="cmp-polling-block__error" style="display: none">Please Select an Option !</div>
2750                                  </div>
2751                                  <div id="locked-msg-loading-overlay" class="locked-msg-loading-overlay" style="display: none; text-align: center;">
2752                                      <img src="/etc/designs/mmonline/cl
2752ientlibs/img/ajax-loader.gif" alt="loading" />
2753                                  </div>
2754                                  <div class="cmp-polling-block__footer-right">
2755                                      <button class="mm-btn mm-btn--primary vote-button" data-questionid="${opinionPollQuestionId}" ${buttonColor ? `style="background-color: ${buttonColor};border-color: ${buttonColor}"` : ''}><span>${voteButtonText}</span></button>
2756                                  </div>
2757                              </div>
2758                          </div>
2759                      </div>
2760                  </div>
2761              `);
2762            pollingBlock.find('.cmp-polling-block__icon').each(function () {
2763                if ($(this).children('img').length === 0) {
2764                    $(this).hide();
2765                }
2766            })
2767        };
2768        const displayResult = async (opinionPollQuestionId) => {
2769            const pollDataUrl = opinionPollBlock.attr('data-pollingurl');
2770            const resultDataUrl = `${pollDataUrl}-Votes.json`;
2771            try {
2772                const resultData = await $.ajax({
2773                    url: resultDataUrl,
2774                    method: 'GET',
2775                    dataType: 'json'
2776                });
2777                const pollingBlock = opinionPollBlock.find(`#pollingBlock-${opinionPollQuestionId}`);
2778                $('.locked-msg-loading-overlay').css('display','none');
2779                pollingBlock.find('.cmp-polling-block__body').remove();
2780                const resultBlock = `
2781                  <div class="cmp-polling-block__body cmp-polling-block__body--result">
2782                      <ul class="cmp-polling-block__ul d-flex flex-wrap">
2783                         
2784                      </ul>
2785                      
2786                  </div>`;
2787                pollingBlock.find('.cmp-polling-block__option-block').append(resultBlock);
2788                const resultUl = pollingBlock.find('.cmp-polling-block__ul');
2789                const resultDataList = resultData.opinionPollQuestion.find(q => q.opinionPollQuestionId === opinionPollQuestionId).opinionPollOption;
2790                if (Array.isArray(resultDataList) && resultDataList.length > 0) {
2791                    resultDataList.forEach((option) => {
2792                        const liElement = `
2793                          <li class="cmp-polling-block__li">
2794                              <div class="cmp-polling-block__prcntge">
2795                                  <div class="cmp-polling-block__prcntge-title">${option.opinionPollOptionValue}</div>
2796                                  <div class="cmp-polling-block__prcntge-barblock d-flex align-items-center">
2797                                      <div class="cmp-polling-block__prcntge-bar">
2798                                          <div class="cmp-polling-block__voteprcntge" style="width: ${option.opinionPollOptionVoteCountPercentage}%"></div>
2799                                      </div>
2800                                      <div class="cmp-polling-block__prcntge-value">${option.opinionPollOptionVoteCountPercentage}%</div>
2801                                  </div>
2802                                  <div class="cmp-polling-block__prcntge-votecount">${option.opinionPollOptionVoteCount} VOTES</div>
2803                              </div>
2804                          </li>`;
2805                        resultUl.append(liElement);
2806                    });
2807                }
2808            } catch (error) {
2809                console.error('Error fetching result data:', error);
2810            }
2811        };
2812
2813        const getCookie = (name) => {
2814            let cookieArr = document.cookie.split(';');
2815            for (let i = 0; i < cookieArr.length; i++) {
2816                let cookiePair = cookieArr[i].split('=');
2817                if (name === cookiePair[0].trim()) {
2818                    return decodeURIComponent(cookiePair[1]);
2819                }
2820            }
2821            return null;
2822        };
2823
2824        const storeVoteStatus = (opinionPollQuestionId) => {
2825            const userName = getUserName();
2826            sessionStorage.setItem(`hasVoted_${opinionPollQuestionId}_${userName}`, 'true');
2827        };
2828
2829        const hasUserVoted = (opinionPollQuestionId) => {
2830            const userName = getUserName();
2831            return sessionStorage.getItem(`hasVoted_${opinionPollQuestionId}_${userName}`) === 'true';
2832        };
2833
2834        const storeUserName = () => {
2835            const mmu_pn = getCookie('mmu_pn');
2836            sessionStorage.setItem('userName', mmu_pn);
2837        };
2838        
2839        const getUserName = () => {
2840            return sessionStorage.getItem('userName');
2841        };
2842
2843        let sso_auth = {
2844            isLoggedIn: function () {
2845                let loginStatus = getCookieVal(login_stat)?.trim();
2846                var loggedIn = false;
2847                if (loginStatus === 'userLoggedIn') {
2848                    loggedIn = true;
2849                }
2850                return loggedIn;
2851            }
2852        }
2853
2854        const submitVote = (opinionPollQuestionId, errorBlock) => {
2855            const pollingUl = opinionPollBlock.find(`#pollingBlock-${opinionPollQuestionId} .cmp-polling-block__ul`);
2856            const selectedInputOption = pollingUl.find('li input:checked');
2857            const signInValue = document.querySelector('.cmp-header__nav-button.sign-in-button').dataset.utmsource;
2858            const apiKeyVal = '2pJiKtQ64rJyjQNDDcrPxsefJ3AVmLemifVZOPLb5gQPPHex9qb5Zk1TrphUM8yydvr10vcfl8h5P8Y9NHKjlCIqRg2sN99Zwpcm3foCl8XdMk2MkYrSf34kRdwFVehe';
2859
2860            if (selectedInputOption.length === 0) {
2861                $('.locked-msg-loading-overlay').css('display','none');
2862                errorBlock.show();
2863                return;
2864            }
2865            const requestData = [];
2866            selectedInputOption.each(function () {
2867                const selectedOption = $(this);
2868                const selectedOptionId = selectedOption.data('pollquestionid');
2869                const selectedOptionVal = selectedOption.val();
2870                requestData.push({
2871                    "opinionPollOptionId": selectedOptionId.toString(),
2872                    "opinionPollOptionValue": selectedOptionVal.toString()
2873                });
2874            });
2875            if (sso_auth.isLoggedIn()) {
2876                    const submitUrl = `https://events.manoramaonline.com/MMQuizAndOpinionPollApp/opinion-poll/submit-question/${opinionPollQuestionId}`;
2877                    $.ajax({
2878                        url: submitUrl,
2879                        method: 'POST',
2880                        contentType: 'application/json',
2881                        headers: {
2882                            'apiKey': apiKeyVal
2883                        },
2884                        data: JSON.stringify(requestData),
2885                        success: function (responseData) {
2886                            storeVoteStatus(opinionPollQuestionId);
2887                            displayResult(opinionPollQuestionId);
2888                        },
2889                        error: function (error) {
2890                            console.error('Error submitting vote:', error);
2891                        }
2892                    });
2893            } else {
2894                console.log('User is not logged in.');
2895                $('.locked-msg-loading-overlay').css('display','none');
2896                ssoIn(false, signInValue);
2897            }
2898        };
2899
2900        function ssoIn(signUpFlag, utmsource) {
2901            let currLoc = encodeURIComponent(window.location.href);
2902            window.location.href = mmlog_path + "?a=in&pageURL=" + currLoc + "&signUpFlag=" + signUpFlag + "&utm_source=" + utmsource;
2903        }
2904        opinionPollBlock.on('click', '.vote-button', function (event) {
2905            event.preventDefault();
2906            $('.locked-msg-loading-overlay').css('display','block');
2907            const opinionPollQuestionId = $(this).data('questionid');
2908            const errorBlock = $(this).closest('.polling-block').find('.cmp-polling-block__error');
2909            if (sso_auth.isLoggedIn()) {
2910                storeUserName();
2911                if (hasUserVoted(opinionPollQuestionId)) {
2912                    $('.locked-msg-loading-overlay').css('display','none');
2913                    console.log('You have already voted on this question.');
2914                    return;
2915                }
2916            }
2917            submitVote(opinionPollQuestionId, errorBlock);
2918        });
2919
2920        errorBlockHide();
2921        getAndAppendPollingData();
2922    });
2923}
2924
2925//update SponsorImageTheme in UserInteractionBlock whenever the site theme changes.
2926revampCustomutils.themeLabelClickListener = function () {
2927    let themeLabels = document.querySelectorAll(".cmp-theme__label");
2928    themeLabels.forEach((label) => {
2929        label.addEventListener("click", function () {
2930            let themeValueselected = label.querySelector("input[name='theme']:checked");
2931            if (themeValueselected) {
2932                $(".cmp-sponser-block__logo img").each(function () {
2933                    var $parentDiv = $(this).closest(".article-body__component-slot");
2934                    if ($parentDiv.data("quizurl") || $parentDiv.data("pollingurl")) {
2935                        const sponsorImage = $(this);
2936                        const poweredByImage = sponsorImage.attr("src");
2937						let themeClass = "light";
2938
2939						 if ($("html").hasClass("mm-dark-theme")) {
2940						    themeClass = "dark";
2941						}
2942                        sponsorImage
2943                            .attr("src", poweredByImage)
2944                            .removeClass("image-light-theme image-dark-theme")
2945                            .addClass("image-" + themeClass + "-theme");
2946                    }
2947                });
2948            }
2949        });
2950    });
2951};
2952// MMO25-3716 User Interaction Quiz
2953revampCustomutils.userInteractionQuizBlock = function () {
2954    const articleBodySlots = $('.article-body__component-slot[data-quizUrl]');
2955    articleBodySlots.each(function (index) {
2956        let qaDataUrl = $(this).attr('data-quizUrl');
2957        const qaBlockId = `quizBlock_${(index + 1).toString().padStart(2, '0')}`;
2958        $(this).attr('id', qaBlockId);
2959        const qaBlock = $(`#${qaBlockId}`);
2960        let currentQuestionIndex = 0;
2961        let isCarousel = false;
2962        let anyOptionSelected = false;
2963        let respData = [];
2964        const createDescriptionElement = (description) => {
2965            return $('<div>').addClass('cmp-multiple-choice__answerDispn').append($('<p>').html(description));
2966        };
2967        const userInteractionQaBlock = async () => {
2968            if (qaBlock.find('.multiple-choice-outer').length === 0) {
2969                let dataQuizCode = qaBlock.attr('data-quizUrl');
2970                qaDataUrl = `${dataQuizCode}.json`;                
2971                try {
2972                    const responseData = await $.ajax({
2973                        url: qaDataUrl,
2974                        method: 'GET',
2975                        dataType: 'json'
2976                    });
2977                    respData = responseData.quizQuestions;
2978                    const quizLanguage = responseData.quizLanguage;
2979                    const quizName = responseData.quizName;
2980                    const quizPoweredByImage = responseData.quizPoweredByImage;
2981                    const quizPoweredBy = responseData.quizPoweredBy;
2982                    const quizPoweredByWebsiteUrl = responseData.quizPoweredByWebsiteUrl;
2983                    const quizPoweredByNewTab = responseData.quizPoweredByNewTab;
2984					let languageClass = '';
2985
2986					if (quizLanguage === 'Malayalam') {
2987					    languageClass = 'ml-font';
2988					} else if (quizLanguage === 'English') {
2989					    languageClass = 'english-font';
2990					}
2991                    qaBlock.append(`
2992                        <div class="multiple-choice-outer ">
2993                            <div class="cmp-section-title-block">
2994                                <h3 class="cmp-section-title"><span class="cmp-section-shape"></span></h3>
2995                                <div class="cmp-sponser-block ">
2996                                    <div class="cmp-sponser-block__title"></div>
2997                                    <div class="cmp-sponser-block__logo"><a tabindex="0"> <img> </a> </div>
2998                                </div>
2999                            </div>
3000                            <div class="multiple-choice-question-block ${languageClass}"></div>
3001                        </div>
3002                    `);
3003					 if (responseData.quizStatus !== 'Active') {
3004                        qaBlock.remove();
3005                        return;
3006                    }
3007                    const titleElement = $('<h3>').addClass('cmp-section-title').append(
3008                        $('<span>').addClass('cmp-section-shape'),
3009                        quizName,
3010
3011                    );
3012                    qaBlock.find('.cmp-section-title').html(titleElement);
3013                    if (quizPoweredByWebsiteUrl) {
3014                        qaBlock.find('.cmp-sponser-block__title').text('Powered By');
3015                        const sponsorLink = qaBlock.find('.cmp-sponser-block__logo a').attr('href', quizPoweredByWebsiteUrl);
3016                        if (quizPoweredByNewTab) {
3017                            sponsorLink.attr('target', '_blank');
3018                        }
3019                        if (quizPoweredByImage) {
3020                            const sponsorImage = qaBlock.find('.cmp-sponser-block__logo img');
3021                            sponsorImage.attr('src', quizPoweredByImage).attr('alt', quizPoweredBy);
3022                            updateSponsorImageTheme(sponsorImage);
3023                        } else {
3024                            qaBlock.find('.cmp-sponser-block__logo img').remove();
3025                        }
3026                    } else {
3027                        qaBlock.find('.cmp-sponser-block__logo a').remove();
3028                    }
3029                    appendQABlocks(responseData.quizQuestions);
3030                    if (responseData.quizDisplayType === 'horizontalVariant') {
3031                        qaBlock.find('.multiple-choice-outer').addClass('multiple-choice-outer--carousal');
3032                        isCarousel = true;
3033                    } else if (responseData.quizDisplayType === 'verticalVariant') {
3034                        qaBlock.find('.multiple-choice-outer').removeClass('multiple-choice-outer--carousal');
3035                        qaBlock.find('.cmp-multiple-choice').show();
3036                    }
3037
3038                    if (isCarousel) {
3039                        createPrimaryButton();
3040                    }
3041                } catch (error) {
3042                    console.error('Error fetching data:', error);
3043                }
3044            }
3045
3046        };
3047        const updateSponsorImageTheme = () => {
3048            $('.cmp-sponser-block__logo img').each(function() {
3049                var $parentDiv = $(this).closest('.article-body__component-slot'); 
3050                if ($parentDiv.data('quizurl')) {
3051                    const sponsorImage = $(this);
3052                    const quizPoweredByImage = sponsorImage.attr('src');
3053                    if ($('html').hasClass('mm-light-theme')) {
3054                        sponsorImage.attr('src', quizPoweredByImage).removeClass('image-dark-theme').addClass('image-light-theme');
3055                    } else if ($('html').hasClass('mm-dark-theme')) {
3056                        sponsorImage.attr('src', quizPoweredByImage).removeClass('image-light-theme').addClass('image-dark-theme');
3057                    } else {
3058                        sponsorImage.attr('src', quizPoweredByImage).removeClass('image-dark-theme').addClass('image-light-theme');
3059                    }
3060                }
3061            });
3062        };
3063        const calculateScore = () => {
3064            let correctAnswers = 0;
3065            respData.forEach((qaData, index) => {
3066                const selectedOption = qaBlock.find('.cmp-multiple-choice').eq(index).find('.cmp-multiple-choice__answer.cmp-multiple-choice__selected');
3067                if (selectedOption.length > 0 && selectedOption.index() === qaData.correctAnswer) {
3068                    correctAnswers++;
3069                }
3070            });
3071            return correctAnswers;
3072        };
3073        const displayResult = () => {
3074            const score = calculateScore();
3075            const totalQuestions = respData.length;
3076            const resultHTML = `
3077				<div class="cmp-multiple-choice cmp-multiple-choice__result">
3078					<div class="cmp-multiple-choice__result-title en-font">Thank you for participating...</div>
3079					<div class="cmp-multiple-choice__points en-font">Your score is <span class="total-count">${score}</span> of <span class="total-count">${totalQuestions}</span></div>
3080					<div style="width: 100%;margin-top: 10px;"><button class="mm-btn mm-btn--primary restartBtn"><span>Restart </span></button></div>
3081				</div>
3082			`;
3083            qaBlock.find('.cmp-multiple-choice__footer').before(resultHTML);
3084        };
3085       
3086        const createPrimaryButton = () => {
3087            qaBlock.find('.multiple-choice-question-block').append(`
3088			<div class="cmp-multiple-choice__footer d-flex justify-content-between">
3089				<div class="cmp-multiple-choice__footer-left">
3090					<div class="cmp-multiple-choice__error" style="display: none">Please Select an Option !</div>
3091				</div>
3092				<div class="cmp-multiple-choice__footer-right">
3093					<button class="mm-btn mm-btn--primary" disabled>
3094						<span>Next <i class="mm-icon mm-white-icon mm-icon__arrow-left-sm-rounded"></i></span>
3095					</button>
3096				</div>
3097			</div>
3098		`);
3099        };
3100        const createQABlock = (qaData, index, dataLength) => {
3101            let optionsHTML = '';
3102            qaData.quizOptions.forEach((option, optionIndex) => {
3103                optionsHTML += `<button class="cmp-multiple-choice__answer cmp-multiple-choice__unanswered cmp-multiple-choice__not-selected">
3104									<div class="cmp-multiple-choice__text">${option.quizOptionValue}</div>
3105								</button>`;
3106            });
3107
3108            let imageHTML = '';
3109            if (qaData.questionImage) {
3110                imageHTML = `<div class="cmp-story-figure">
3111								  <figure class="cmp-story-figure__in">
3112									<div class="cmp-story-figure__image">
3113									  <div class="cmp-story-figure__web-image"><img src="${qaData.questionImage}" title="" alt=""></div>
3114									</div>
3115								  </figure>
3116								</div>`;
3117            }
3118
3119            return `
3120				<div class="cmp-multiple-choice">
3121					<div class="cmp-multiple-choice__counter">
3122						<span class="cmp-multiple-choice__counter-current">${index + 1}</span> of ${dataLength}
3123					</div>
3124					<h6 class="cmp-multiple-choice__question">${qaData.question}</h6>
3125					${imageHTML}
3126					<div class="cmp-multiple-choice__option-block">
3127						${optionsHTML}
3128					</div>
3129				</div>
3130			`;
3131        };
3132        const appendQABlocks = (data, isCarousel) => {
3133
3134            data.forEach((qaData, index) => {
3135                const qaBlockHTML = createQABlock(qaData, index, data.length);
3136                qaBlock.find('.multiple-choice-question-block').append(qaBlockHTML);
3137                if (!isCarousel && index !== currentQuestionIndex) {
3138                    qaBlock.find('.cmp-multiple-choice').eq(index).hide();
3139                }
3140            });
3141        };
3142        qaBlock.on('click', '.mm-btn--primary', (event) => {
3143
3144            let currentQuestion = qaBlock.find('.cmp-multiple-choice').eq(currentQuestionIndex);
3145            let isVisibleBlock = currentQuestion.is(':visible');
3146
3147            if (isVisibleBlock) {
3148                if (!anyOptionSelected) {
3149                    qaBlock.find('.cmp-multiple-choice__error').show();
3150                } else {
3151                    let currentError = currentQuestion.find('.cmp-multiple-choice__footer .cmp-multiple-choice__error');
3152                    currentError.hide();
3153                    currentQuestionIndex++;
3154                    if (currentQuestionIndex < respData.length) {
3155                        anyOptionSelected = false;
3156                        showQuestion(currentQuestionIndex);
3157                    } else {
3158                        qaBlock.find('.cmp-multiple-choice').hide();
3159                        qaBlock.find('.cmp-multiple-choice__footer-right').hide();
3160                        displayResult();
3161                    }
3162                }
3163            }
3164        });
3165        qaBlock.on('click', '.cmp-multiple-choice__answer', (event) => {
3166            let selectedButton = $(event.currentTarget);
3167            let multipleChoiceBlk = selectedButton.closest('.cmp-multiple-choice');
3168            let questionAllOption = multipleChoiceBlk.find('.cmp-multiple-choice__answer');
3169            let selectedBtnIndex = selectedButton.index();
3170            let questionIndex = multipleChoiceBlk.index();
3171            let qaData = respData[questionIndex];
3172            let correctOptionIndex = qaData.correctAnswer;
3173            let isCorrectAnswer = selectedBtnIndex == correctOptionIndex;
3174            let correctOptionButton = questionAllOption[correctOptionIndex];
3175
3176            for (let i = 0; i < questionAllOption.length; i++) {
3177                questionAllOption[i].classList.remove('cmp-multiple-choice__unanswered');
3178                questionAllOption[i].classList.add('cmp-multiple-choice__answered');
3179            }
3180            if (isCarousel) {
3181                qaBlock.find('.cmp-multiple-choice__error').hide();
3182            }
3183            if (!selectedButton.hasClass('cmp-multiple-choice__selected')) {
3184                selectedButton.removeClass('cmp-multiple-choice__not-selected').addClass('cmp-multiple-choice__selected');
3185                if (isCorrectAnswer) {
3186                    selectedButton.addClass('cmp-multiple-choice__correct');
3187                } else {
3188                    selectedButton.addClass('cmp-multiple-choice__incorrect');
3189                    correctOptionButton.classList.add('cmp-multiple-choice__correct');
3190                }
3191                if (qaData.correctAnswerExplanation || qaData.correctAnswerExplanation == '') {
3192                    let descriptionElement = createDescriptionElement(qaData.correctAnswerExplanation);
3193                    multipleChoiceBlk.find('.cmp-multiple-choice__answerDispn').remove();
3194                    multipleChoiceBlk.append(descriptionElement);
3195                }
3196                anyOptionSelected = true;
3197                qaBlock.find('.mm-btn--primary').attr('disabled', false);
3198            }
3199        });
3200        qaBlock.on('click', '.restartBtn', () => {
3201            resetQuizState();
3202        });
3203        const resetQuizState = () => {
3204            currentQuestionIndex = 0;
3205            anyOptionSelected = false;
3206            let multipleChoiceOuter = qaBlock.find('.multiple-choice-outer');
3207            if (multipleChoiceOuter) {
3208                multipleChoiceOuter.remove();
3209            }
3210            userInteractionQaBlock();
3211        };
3212        const showQuestion = (index) => {
3213            qaBlock.find('.cmp-multiple-choice').hide();
3214            qaBlock.find('.cmp-multiple-choice').eq(index).show();
3215        };
3216        userInteractionQaBlock();
3217    });
3218}
3219
3220$(function () {
3221    var bkElement = document.getElementById('breaking-news-url');
3222
3223	if (bkElement) {
3224    	revampCustomutils.loadBreakingNews();
3225	}
3226    revampCustomutils.cartoonSlider();
3227    revampCustomutils.gameSlider();
3228    // revampCustomutils.todaysEpaper(); // command for next phase 
3229    revampCustomutils.videoPlayer();
3230    revampCustomutils.scoreBoardSlider();
3231    revampCustomutils.mmScoreBoardDateTab();
3232    revampCustomutils.articleSlider();
3233    revampCustomutils.articleGallery();
3234    revampCustomutils.artcleSimpleslider();
3235    revampCustomutils.premiumImageSlideShow();
3236    revampCustomutils.searchComponent();
3237    revampCustomutils.errorPageListingTab();
3238    revampCustomutils.storyCardSlickSlider();
3239    revampCustomutils.vuukleComment();
3240    revampCustomutils.indepthListHide();
3241	revampCustomutils.listShowMore();
3242    revampCustomutils.reportersShare();
3243    revampCustomutils.displayPublishDate();
3244    revampCustomutils.removeWatchNext();
3245    handleUserInteractionsOnScroll();
3246    mmTab();
3247    revampCustomutils.storylistMore();
3248	$('.cmp-pagination__btn--active, .cmp-pagination__btn--prev.hidden').on('click', function(e){
3249		e.preventDefault();
3250	});
3251});
3252
3253$(window).on('load resize scroll', function () {
3254    revampCustomutils.fullwidthBackground();
3255	if (!hasPageScrolled) {
3256		revampCustomutils.searchPopupScroll();
3257	}
3258});
3259
3260// User Interaction Scroll to load
3261function handleUserInteractionsOnScroll() {
3262    let scrollCount = 0;
3263    function handleUserInteractions() {
3264        scrollCount++;
3265        if (scrollCount >= 2) {
3266            revampCustomutils.userInteractionPollingBlock();
3267   			revampCustomutils.userInteractionQuizBlock();
3268            window.removeEventListener('scroll', handleUserInteractions);
3269        }
3270    }
3271    window.addEventListener('scroll', handleUserInteractions);
3272}
3273
3274/* Listcomponent Refresh */
3275$(document).ready(function () {
3276
3277	let clearTimer;
3278
3279        clearTimer = setInterval(() => {
3280          updateLatestNews();
3281    
3282        }, 60000);
3283    
3284        document.addEventListener("visibilitychange", () => {
3285    
3286             if (document.hidden) {
3287                clearInterval(clearTimer);
3288             } else {
3289    
3290               updateLatestNews();
3291               clearTimer = setInterval(() => {
3292                    updateLatestNews();
3293    
3294               }, 60000);
3295             }
3296         });
3297    
3298    });
3299    
3300    
3301    
3302    function updateLatestNews(){
3303    
3304       let refreshComp, datahtml = "",componentpath; 
3305       $(".refreshComponent").each(function () {
3306    
3307          componentpath = $(this).data("refreshurl");
3308           refreshComp = $(this);
3309           (function(refreshComp){
3310          $.ajax({
3311            url: componentpath,
3312            type: "GET",        
3313            dataType: 'html',
3314    
3315            success: function(data, status,xhr){
3316    
3317                  if(refreshComp.find(".recommendationListContainer").index() != -1){
3318                            froomleTopnews(data,refreshComp.find(".recommendationListContainer"));
3319                            initiateSlidersAndWidgets();
3320                  }
3321                  else{
3322    
3323                    datahtml = $(data);
3324                    recallAdEmbed(refreshComp,datahtml);
3325                    recallLiveUpdate(refreshComp,datahtml);
3326                    refreshComp.replaceWith(datahtml);
3327                    revampCustomutils.displayPublishDate(); 
3328					initiateSlidersAndWidgets();
3329    
3330                  }    
3331                if (typeof addSaveItemsEventListeners === "function") {
3332                    addSaveItemsEventListeners();
3333                    let savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
3334                    activateSavedArticlesOnLoad(savedData["addedIds"], "add");
3335                }
3336				if( (refreshComp.find(".trending-block").index() != -1) && checkMCookie("premium_token") && typeof handleTrendingNumber === 'function'){
3337                            handleAdReplace(document.querySelector(".trending-block"));
3338                            handleTrendingNumber();
3339                }
3340            
3341              },
3342            error: function(request, status, error){
3343                console.log(data)
3344            }
3345            });
3346              
3347           })(refreshComp);
3348
3349       });
3350
3351    
3352      }
3353
3354      function initiateSlidersAndWidgets(){
3355			getDeviceType();
3356            revampCustomutils.scoreBoardSlider();
3357       		utils.imageBlockSlider();
3358      }
3359    
3360    function recallAdEmbed(theComponent,datahtml) {
3361    
3362        let pElement;
3363    
3364            if (theComponent.find('.list-native-embed').length > 0) {
3365                pElement = theComponent.find(".list-native-embed");
3366                datahtml.find(".list-native-embed").replaceWith(pElement.get(0));
3367    
3368            }
3369    
3370    }
3371
3372    function recallLiveUpdate(theComponent,datahtml){
3373        let pElement;
3374        
3375		 if (theComponent.find('#mm-live-update-content-list').length > 0) {
3376                pElement = theComponent.find("#mm-live-update-content-list");
3377                datahtml.find("#mm-live-update-content-list").replaceWith(pElement.get(0));
3378    
3379            }
3380
3381    }             
3382    function mainNavHover(){
3383		var timeout; 
3384    $('.main-nav__li--with-mega-menu').on('mouseenter', function () {
3385        var $thisElement = $(this);
3386
3387        if (timeout != null) { clearTimeout(timeout); }
3388
3389        timeout = setTimeout(function () {
3390			  $('.main-nav__li--with-mega-menu').removeClass("hoverActive");
3391            $thisElement.addClass("hoverActive");
3392            $(".lazyload").unveil();
3393        }, 100);
3394    });
3395
3396    $('.main-nav__li--with-mega-menu').on('mouseleave', function () {
3397        if (timeout != null) { 
3398           clearTimeout(timeout); 
3399
3400           timeout = null;
3401			setTimeout(function() {
3402			 $('.main-nav__li--with-mega-menu').removeClass("hoverActive");
3403				 }, 100);
3404        }
3405    });
3406
3407    }
3408    
3409    function mmTab() {
3410        $('.cmp-mega-menu .cmp-tab-block').each(function () {
3411            let tabThis = $(this);
3412                if (!tabThis.find('.cmp-tab-block__nav-li').hasClass('active')) {
3413                    tabThis.find('.cmp-tab-block__nav-li:first-child').addClass('active');
3414                    tabThis.find('.cmp-tab-block__item:first').addClass('active');
3415                    tabThis.find('.cmp-tab-block__item').hide();
3416                    tabThis.find('.cmp-tab-block__item:first').show();
3417                } else {
3418                    let index = tabThis.find('.cmp-tab-block__nav-li.active').index();
3419                    tabThis.find('.cmp-tab-block__item').hide();
3420                    tabThis.find('.cmp-tab-block__item').eq(index).show();
3421    
3422                }
3423                tabThis.find('.cmp-tab-block__nav-li a').on("click", function () {
3424                    tabThis.find('.cmp-tab-block__nav-li').removeClass('active');
3425                    $(this).parent('.cmp-tab-block__nav-li').addClass('active');
3426                    tabThis.find('.cmp-tab-block__item').hide().removeClass('active');
3427                    let activeIndex = $(this).parent('.cmp-tab-block__nav-li').index();
3428                    tabThis.find('.cmp-tab-block__item').eq(activeIndex).fadeIn().addClass('active');
3429                    return false;
3430                });
3431        });
3432    }
3433revampCustomutils.storylistMore = function () {
3434    $('.cmp-story-list__control-btn--more-menu.cmp-history-custom-dropdown').off("click").on("click", function () {
3435        var $storylistMore = $(this).closest('.cmp-story-list__control-li').find(".cmp-story-list__drop-down");
3436        if ($storylistMore.hasClass("active")) {
3437            $storylistMore.removeClass("active").fadeOut(100);
3438        } else {
3439            $(".cmp-story-list__drop-down").removeClass("active").fadeOut(100);
3440            $storylistMore.fadeIn(100).delay(100).addClass("active");
3441        }
3442    });
3443    $(document).on("click", function () {
3444        $(".cmp-story-list__drop-down").removeClass("active").fadeOut(100);
3445    });
3446    $('.cmp-story-list__control-btn--more-menu, .cmp-story-list__drop-down').on("click", function (event) {
3447        event.stopPropagation();
3448    });
3449}
3450
3451$(document).ready(function () {
3452    mainNavHover();
3453    $(".mm-col-blk-3 .experiencefragment .cmp-container>.ad-premiumuser,.right-component-slot .experiencefragment .cmp-container>.ad-premiumuser").each(function (i, e) { !$(e).height() ? $(e).closest(".experiencefragment").remove() : "" });
3454    $(".article-body__aside .cmp-container>.ad-premiumuser").each(function (i, e) { !$(e).height() ? $(e).closest(".ad-premiumuser").remove() : "" });
3455
3456    /* Listingtab tab switching */
3457    $(".cmp-nav-tab .cmp-nav-tab-menu .cmp-nav-tab__ul a.cmp-nav-tab__a").click(function (e) {
3458        e.preventDefault();
3459        $(".cmp-nav-tab__li").removeClass("active");
3460        let tab = $(this).closest("li");
3461        tab.addClass("active");
3462        let category = tab.attr("id");
3463        if (category) {
3464            category = `[aria-labelledby='${category}']`;
3465            $(".cmp-nav-tab__content .cmp-tabs__tabpanel").removeClass("cmp-tabs__tabpanel--active").filter(category).addClass("cmp-tabs__tabpanel--active");
3466            if($('.cmp-story-list.cmp-story-list--slider').slick('refresh')){
3467                $('.cmp-story-list.cmp-story-list--slider').on('afterChange', function(e, slick, currentSlide){
3468                     $(".lazyload").unveil();
3469                });
3470            }
3471        }
3472    });
3473
3474}); 
3475
3476//podcastlisting
3477
3478const podcastListing = () => {
3479
3480    const podcastShowcaseListing = document.getElementById("podcast-showcase-listing");
3481    const podcastCarouselListing = document.getElementById("podcast-carousel-listing");
3482    const podcastPrograms = document.getElementById("podcastlisting");
3483    let liHTMLtoAppend = "";
3484    if (podcastShowcaseListing) {
3485        const playlistData = getPodcastPlaylistJSON(podcastShowcaseListing);
3486        if(playlistData !== null){
3487            liHTMLtoAppend = generatePodcastShowcaseHTML(playlistData,podcastPrograms);
3488        }
3489        podcastShowcaseListing.innerHTML = liHTMLtoAppend;
3490    }
3491    if(podcastCarouselListing){
3492        $(".podcastlisting").find(".cmp-story-list.cmp-podcast-list--slider.slick-initialized").slick('unslick');
3493        const playlistDataCarousel = getPodcastPlaylistJSON(podcastCarouselListing);
3494        if(playlistDataCarousel  !== null){
3495            liHTMLtoAppend = generatePodcastCarouselHTML(playlistDataCarousel ,podcastPrograms);
3496        }
3497        podcastCarouselListing.innerHTML = liHTMLtoAppend;
3498        slickPodcastCarousel();
3499
3500    }
3501 
3502
3503 
3504 }
3505
3506 function slickPodcastCarousel(){
3507    if($('.podcast-main-slider-block .cmp-podcast-list--slider').length > 0) {
3508        $('.podcast-main-slider-block .cmp-podcast-list--slider').each(function () {
3509           $(this).slick({
3510              infinite: true,
3511              centerMode: true,
3512              variableWidth: true,
3513              centerPadding: '50px',
3514              slidesToShow: 1,
3515              dots: true,
3516              prevArrow: '<button class="slide-arrow prev-arrow"><i class="mm-icon mm-icon__arrow-right-lg"></i> </button>',
3517              nextArrow: '<button class="slide-arrow next-arrow"><i class="mm-icon mm-icon__arrow-left-lg"></i> </button>',
3518              responsive: [
3519           
3520                 {
3521                    breakpoint: 836,
3522                    settings: {
3523                       centerPadding: '60px'
3524                    }
3525                 },
3526                 {
3527                    breakpoint: 576,
3528                    settings: {
3529                       centerPadding: '30px'
3530                    }
3531                 }
3532              ]
3533           });
3534        });
3535     }  
3536 }
3537 
3538function getPodcastPlaylistJSON(podcastElement) {
3539    const playlistId = podcastElement.getAttribute("data-playlist-id");
3540    const maxcount = podcastElement.getAttribute("data-listingcount");
3541    
3542    try {
3543        const response = $.ajax({
3544            type: "GET",
3545            url: `https://api.omny.fm/orgs/38abe477-df60-4cf0-bd9f-b1fe00d0bda4/playlists/` + playlistId + `/clips?pageSize=`+maxcount,
3546            async: false,
3547        });
3548
3549        if (response.status != 200) {
3550            throw Error(response.statusText);
3551          }
3552
3553        const allClips = response.responseJSON.Clips;
3554        if(allClips.length > 0){
3555            return allClips;
3556        }else{
3557            return null;
3558        }
3559        
3560        
3561    } catch (err) {
3562        console.error(err);
3563        return null;
3564    }
3565}
3566
3567function generatePodcastCarouselHTML(clipsArray,podcastElement){
3568    let carouselLiHTML = "";
3569    const programData=JSON.parse(podcastElement.getAttribute("data-program"));
3570    for (const element of clipsArray) {
3571        let program = programData[element.ProgramId];
3572        let programPath = program ? program.programPath : '';
3573        let programTitle =  program ? program.programTitle : '';
3574        carouselLiHTML += `
3575        <li class="cmp-story-list__item">
3576        <div class="cmp-story-list__item-in">
3577            <div class="cmp-story-list__content">
3578                <h2 class="cmp-story-list__title"> <a href="${programPath}#podcast_playlist"
3579                        class="cmp-story-list__title-link" title="${element.Title}"> ${element.Title} </a> </h2>
3580                        <div class="cmp-story-list__content-bottom">
3581                        <div class="cmp-story-list__content-btm-left">
3582
3583                            <a href="${programPath}" class="cmp-story-list__pretitle" title="${programTitle}">${programTitle}</a>
3584                        </div>
3585                        <div class="cmp-story-list__content-btm-right">
3586                            <ul class="cmp-story-list__controls">
3587                                <li class="cmp-story-list__control-li">
3588                                    <button class="cmp-story-list__control-btn" title=""><i
3589                                            class="mm-icon mm-gray-icon mm-icon__bookmark-sm"></i></button>
3590                                </li>
3591                            </ul>
3592                        </div>
3593                    </div>
3594
3595                </div>
3596                <div class="cmp-story-list__image-block"> <a class="cmp-story-list__image-link"
3597                        href="${programPath}#podcast_playlist" title="${element.Title}">
3598                        <div class="cmp-story-list__media-icon"><i
3599                                class="mm-icon mm-white-icon mm-icon__play-btn-icon"></i></div>
3600                        <img src="${element.ImageUrl}" alt="" class="cmp-story-list__img">
3601                    </a> </div>
3602            </div>
3603        </li>
3604
3605        `;
3606
3607    }
3608
3609    return carouselLiHTML;
3610}
3611
3612
3613function generatePodcastShowcaseHTML(clipsArray,podcastElement){
3614    let showcaseLiHTML = "";
3615    const programData=JSON.parse(podcastElement.getAttribute("data-program"));
3616    for (const element of clipsArray) {
3617        let program = programData[element.ProgramId];
3618        let programPath = program ? program.programPath : '';
3619        let programTitle =  program ? program.programTitle : '';
3620        showcaseLiHTML += `
3621        <li class="cmp-story-list__item">
3622        <div class="cmp-story-list__item-in">
3623            <div class="cmp-story-list__content">
3624                <h2 class="cmp-story-list__title"> <a href="${programPath}#podcast_playlist" class="cmp-story-list__title-link" title="${element.Title}">
3625                        ${element.Title}
3626                    </a> </h2>
3627                <div class="cmp-story-list__content-bottom">
3628                    <div class="cmp-story-list__content-btm-left"> <a href="${programPath}"
3629                            class="cmp-story-list__pretitle" title="${programTitle}">${programTitle}</a> </div>
3630                    <div class="cmp-story-list__content-btm-right">
3631                        <ul class="cmp-story-list__controls">
3632                            <li class="cmp-story-list__control-li">
3633                                <button class="cmp-story-list__control-btn" title=""><i
3634                                        class="mm-icon mm-gray-icon mm-icon__bookmark-sm"></i></button>
3635                            </li>
3636                        </ul>
3637                    </div>
3638                </div>
3639            </div>
3640            <div class="cmp-story-list__image-block"> <a class="cmp-story-list__image-link" href="${programPath}#podcast_playlist"
3641                    title="${element.Title}">
3642                    <div class="cmp-story-list__media-icon"><i
3643                            class="mm-icon mm-white-icon mm-icon__podcast"></i> </div>
3644                    <img src="${element.ImageUrl}"
3645                        alt="" class="cmp-story-list__img">
3646                </a> </div>
3647        </div>
3648    </li>
3649
3650        `;
3651    }
3652
3653    return showcaseLiHTML;
3654}
3655
3656
3657podcastListing();
3658
3659$('.podcast-page-block .mm-btn.mm-btn--primary-outline').each(function() {
3660    let currentHref = $(this).attr('href');
3661    // For MMO25-5855, It will Only append if href exists and doesn't already contain the fragment identifier
3662    if (currentHref && !currentHref.includes('#podcast_playlist')) {
3663        let newHref = currentHref + '#podcast_playlist';
3664        $(this).attr('href', newHref);
3665    }
3666});
3667const revampHeaderutils = {};
3668
3669
3670const LOGIN_STATUS_COOKIE = 'mmu_ls';
3671const USER_LOGGED_IN = 'userLoggedIn';
3672const login_userName = 'mmu_pn';
3673const signInButton = document.querySelector('.cmp-header__nav-button.sign-in-button');
3674const signInValue = signInButton ? signInButton.dataset.utmsource : null;
3675
3676// signin
3677revampHeaderutils.signIn = function () {
3678    $('.sign-in-button').on("click", function (e) {
3679        e.preventDefault();
3680       if(signInValue != null){
3681        ssoIn(false, signInValue);
3682        }
3683    });
3684}
3685
3686// cookies
3687revampHeaderutils.getCookieByName = function (cookieName) {
3688    const cookie = document.cookie;
3689    try {
3690        let cookieValue = cookie.split(cookieName + '=')[1].split(';')[0].replace(/\+/g, '%20');
3691        return decodeURIComponent(cookieValue);
3692    } catch (e) {
3693        console.log('Error reading cookie');
3694    }
3695}
3696
3697// username
3698revampHeaderutils.getUserName = function () {
3699    let userName = revampHeaderutils.getCookieByName(login_userName);
3700    if (userName) {
3701        const firstName = userName.trim().split(' ')[0];
3702        $('.cmp-login-block__after-head').attr('title', firstName);    
3703        $('.cmp-login-block__user-letter').text(decodeURIComponent(userName).trim());
3704        $('.cmp-login-block__user-name').text(decodeURIComponent(userName).trim());
3705    }
3706}
3707
3708// myaccount check
3709revampHeaderutils.myAccount = function () {
3710    if (revampHeaderutils.isLoggedIn()) {
3711        $(".cmp-login-block__before-login").hide();
3712        $(".cmp-login-block__after-login").show();
3713    }
3714}
3715
3716revampHeaderutils.isLoggedIn = function () {
3717    const loginStatus = revampHeaderutils.getCookieByName(LOGIN_STATUS_COOKIE);
3718    return loginStatus === USER_LOGGED_IN;
3719}
3720
3721revampHeaderutils.redirectToHome = function () {
3722    window.location.href = window.location.origin;
3723}
3724$(window).resize(function () {});
3725
3726// revampHeaderutils.handleHeaderOnScroll = function () {
3727//     let firstScrollTop = 0;
3728//     let headerTopAds = ($('.cmp-header').length > 0) ?  $('.cmp-header').offset().top : 0;
3729//     let headerTopOuter = $('.cmp-header__top').outerHeight(true) + 3;
3730//     let headerMainOuter = $('.cmp-header__main').outerHeight(true);
3731//     let headerFullHeight = $('.cmp-header').outerHeight(true);
3732//     let mainNavHeight = headerFullHeight + headerTopAds;
3733//     let footerNavOuter = $('.cmp-bottom-nav').outerHeight(true);
3734
3735//     $(window).scroll(function (event) {
3736//         let scrollTop = $(this).scrollTop();
3737
3738//         if (scrollTop > firstScrollTop && scrollTop > mainNavHeight) {
3739//             $('.cmp-header').addClass('sticky-header');
3740//             $('.cmp-header').removeClass('scroll-up');
3741//             $('body').addClass("header-gap").css({
3742//                 "padding-top": headerFullHeight
3743//             });
3744//             if ($(window).width() > 991) {
3745//                 $('.cmp-header').css({
3746//                     "top": -(headerTopOuter + headerMainOuter)
3747//                 });
3748//             } else {
3749//                 $('.cmp-header').css({
3750//                     "top": -(headerTopOuter + headerMainOuter)
3751//                 });
3752//             }
3753//         } else {
3754//             if (scrollTop + $(window).height() < $(document).height() && scrollTop > mainNavHeight) {
3755//                 $('.cmp-header').addClass('sticky-header');
3756//                 $('body').addClass("header-gap").css({
3757//                     "padding-top": headerFullHeight
3758//                 });
3759//                 if ($(window).width() > 991) {
3760//                     $('.cmp-header').css({
3761//                         "top": -(headerTopOuter)
3762//                     });
3763//                 } else {
3764//                     $('.cmp-header').css({
3765//                         "top": -(headerTopOuter)
3766//                     }).addClass("scroll-up");
3767//                     if ($('.cmp-bottom-nav').length > 0) {
3768//                         $('.cmp-bottom-nav').removeClass('scroll-down');
3769//                     }
3770//                 }
3771//             } else {
3772//                 $('.cmp-header').removeClass('scroll-up sticky-header');
3773//                 $('.cmp-header').css({
3774//                     "top": -(headerFullHeight)
3775//                 });
3776//                 $('body').removeClass("header-gap").css({
3777//                     "padding-top": 0
3778//                 });
3779//             }
3780
3781//         }
3782//         if (scrollTop > firstScrollTop && scrollTop > footerNavOuter && $(window).width() < 991 && $('.cmp-bottom-nav').length > 0) {
3783//             $('.cmp-bottom-nav').addClass('scroll-down');
3784//             $('.quikreadfloating').addClass('scroll-down-fixed');
3785//         } else {
3786//             if (scrollTop + $(window).height() < $(document).height() && $(window).width() < 991 && $('.cmp-bottom-nav').length > 0) {
3787//                 $('.cmp-bottom-nav').removeClass('scroll-down');
3788//                 $('.quikreadfloating').removeClass('scroll-down-fixed');
3789//             }
3790//         }
3791//         firstScrollTop = scrollTop;
3792//     });
3793// }
3794
3795// revampHeaderutils.handleTopAdBlockResize = function () {
3796//     let topAdvtBlock = $(".top-advt-block .advtBlock__content")[0];
3797//     let resizeObserver = new ResizeObserver(() => {
3798//         revampHeaderutils.handleHeaderOnScroll();
3799//         if ($(".top-advt-block .advtBlock__content").height() > 48) {
3800//             $('.cmp-header').removeClass("sticky-header");
3801//             $('body').removeClass("header-gap").css({
3802//                 "padding-top": 0
3803//             });
3804//             revampHeaderutils.handleHeaderOnScroll();
3805//         }
3806//     });
3807//     if (topAdvtBlock) {
3808//         resizeObserver.observe(topAdvtBlock);
3809//     }
3810// }
3811
3812
3813//Sets Current Date
3814revampHeaderutils.currentDate = function () {
3815    let formattedDate = new Date().toLocaleDateString('en-us', { weekday:"long", year:"numeric", month:"short", day:"numeric"}) ;
3816    document.querySelectorAll(".current-date").forEach(e => e.innerHTML = formattedDate);
3817}
3818
3819let navData = localStorage.getItem("NAV_CONTENT");
3820if (navData) {
3821    navData = JSON.parse(navData);
3822}
3823
3824// Function to check if the nav data is already saved in localstorage
3825const checkForNavDataInLocalStorage = (url) => {
3826
3827    if (navData) {
3828        let lastStored = navData.storedAt;
3829        let now = new Date().getTime();
3830        if (now - lastStored > 15 * 60 * 1000  || !navData.data[url]) {
3831            localStorage.removeItem("NAV_CONTENT");
3832            return null;
3833        } else {
3834            return navData.data[url];
3835        }
3836    }
3837    return null;
3838}
3839
3840const saveNavDataToLocalStorage = (key, data) => {
3841    let navData = {
3842        storedAt: new Date().getTime(),
3843        data: data
3844    }
3845    localStorage.setItem(key, JSON.stringify(navData));
3846}
3847
3848const updateNavContent = (ele, content) => {
3849    ele.innerHTML = content;
3850    let navImg = document.querySelectorAll('.navlist-load img:not([data-src]');
3851    navImg.forEach(function (img) {
3852        let dataWebsrc = img.getAttribute('data-websrc');
3853        img.setAttribute('data-src', dataWebsrc);
3854    });
3855    // For saved icons event handler register and indicators setting
3856    if (typeof addSaveItemsEventListeners === "function") {
3857        addSaveItemsEventListeners();
3858        let savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
3859        activateSavedArticlesOnLoad(savedData["addedIds"], "add");
3860    }
3861}
3862
3863let navContent = {};
3864
3865const loadNavContent = (ele) => {
3866    const url = ele.getAttribute('data-navlist-url');
3867
3868    return new Promise((resolve, reject) => {
3869        let navData = checkForNavDataInLocalStorage(url);
3870        try {
3871            if (navData) {
3872                updateNavContent(ele, navData);
3873                resolve();
3874                return;
3875            }
3876
3877            fetch(url)
3878                .then(response => response.text())
3879                .then(content => {
3880                    updateNavContent(ele, content);
3881                    navContent[url] = content;
3882                    resolve();
3883                })
3884                .catch(error => {console.error('Error fetching content:', error); reject(error);});
3885        } catch (error) {
3886            console.error('Unexpected error:', error);
3887            reject(error);
3888        }
3889    });
3890
3891};
3892
3893const fetchNavlistCont = () => {
3894    const screenSize = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
3895    const DELAY_LOADING_MS = 500;
3896    if (screenSize > 991) {
3897        const navLists = document.querySelectorAll('.navlist-load');
3898
3899        setTimeout(() => {
3900            const promises = Array.from(navLists).map(navList => {
3901                return loadNavContent(navList);
3902            });
3903            console.log("Promises:", promises);
3904            Promise.all(promises).then(() => {
3905                if (Object.keys(navContent).length > 0) {
3906                    saveNavDataToLocalStorage("NAV_CONTENT", navContent);
3907                }
3908            });
3909        }, DELAY_LOADING_MS);
3910
3911    }
3912};
3913
3914document.addEventListener('DOMContentLoaded', fetchNavlistCont);
3915
3916revampHeaderutils.headerfixedNew = function () {
3917    let lastScrollTopHeader = 0;
3918    const $header = $('.cmp-header');
3919    if ($header.length === 0) return;
3920    const $headerSecondrow = $('.cmp-header__main');
3921    const $headerThirdrow = $('.main-nav-outer');      
3922    let headerHeight = $header.outerHeight();
3923    let headerBottom = $header.offset().top + headerHeight;
3924
3925    function getSecondRowHeight() {
3926        return $headerSecondrow.outerHeight() - 0.5;
3927    }
3928
3929    $(window).on('scroll', function () {
3930        const scrollTopHeader = $(this).scrollTop();
3931        const secondRowHeight = getSecondRowHeight();
3932
3933        if (scrollTopHeader >= headerHeight) {
3934            if (scrollTopHeader > lastScrollTopHeader) {
3935                // Scrolling down
3936                $header.addClass('sticky-down').removeClass('sticky-up');
3937                $headerThirdrow.css('transform', '');
3938
3939                if ($('.cmp-bottom-nav').length > 0) {
3940                    $('.cmp-bottom-nav').addClass('scroll-down');
3941                }
3942            } else {
3943                // Scrolling up
3944                $header.addClass('sticky-down sticky-up');
3945                $headerThirdrow.css('transform', 'translateY(' + secondRowHeight + 'px)');
3946
3947                if ($('.cmp-bottom-nav').length > 0) {
3948                    $('.cmp-bottom-nav').removeClass('scroll-down');
3949                }
3950            }
3951        }
3952
3953        if (scrollTopHeader <= headerBottom) {
3954            // Reached top of header again
3955            $header.removeClass('sticky-down sticky-up');
3956            $headerThirdrow.css('transform', '');
3957        }
3958
3959        lastScrollTopHeader = scrollTopHeader;
3960    });
3961
3962    $(window).on('resize', function () {
3963        headerHeight = $header.outerHeight();
3964        headerBottom = $header.offset().top + headerHeight;
3965    });
3966}
3967
3968revampHeaderutils.quikereadscrolling = function () {
3969    let lastScrollTopquickread = 0;
3970    $(window).scroll(function (event) {
3971        quikreadscrolled();
3972    });
3973
3974    function quikreadscrolled() {
3975        let stquikread = $(this).scrollTop();
3976        if (stquikread > lastScrollTopquickread && stquikread > 10 && $(window).width() < 991 ) {
3977            $('.quikreadfloating').addClass('scroll-down-fixed');
3978        } else if (stquikread + $(window).height() < $(document).height() && $(window).width() < 991 ) {
3979                $('.quikreadfloating').removeClass('scroll-down-fixed');
3980        }
3981        lastScrollTopquickread = stquikread;
3982    }
3983}
3984
3985// Call functions when the document is ready
3986$(function () {
3987    revampHeaderutils.signIn();
3988    revampHeaderutils.myAccount();
3989    revampHeaderutils.getUserName();
3990    // revampHeaderutils.handleHeaderOnScroll();
3991    // revampHeaderutils.handleTopAdBlockResize();
3992    revampHeaderutils.headerfixedNew();
3993    revampHeaderutils.quikereadscrolling();
3994	revampHeaderutils.currentDate();
3995});
3996const mmlog_path = '/sso'; 
3997const login_stat = 'mmu_ls';
3998const login_un = 'mmu_pn';
3999const last_rf_time = 'mmu_lsrfd';
4000const rf_int = 'mmu_rfinv';
4001const rf_Int_default = 1500000;
4002const cool_down_default = 180000; //3 minutes = 3 * 60 * 1000; 
4003let rfTknTimer;
4004let sso_auth = {
4005    isLoggedIn: function() {
4006        let loginStatus = getCookieVal(login_stat);
4007            var loggedIn = false;
4008            if (loginStatus === 'userLoggedIn') {
4009                loggedIn = true;
4010            }
4011            return loggedIn;
4012    }
4013}
4014
4015function getCookieVal(v){
4016    var r = document.cookie.match('(^|[^;]+)\\s*' + v + '\\s*=\\s*([^;]+)');
4017    r = r ? r.pop(): undefined;
4018    return r
4019}
4020
4021function ssoIn(signUpFlag, utmsource) {
4022    let currLoc = encodeURIComponent(window.location.href);
4023    window.location.href = mmlog_path + "?a=in&pageURL=" + currLoc + "&signUpFlag=" + signUpFlag + "&utm_source=" + utmsource;
4024}
4025
4026function googleSsoIn(response){
4027	if(response.credential){
4028		let idToken = response.credential;
4029		let currLoc = encodeURIComponent(window.location.href);
4030		window.location.href = mmlog_path+"?a=goog&pageURL="+currLoc+"&token="+idToken;
4031	}
4032}
4033
4034function ssoOut(cl) {
4035    let currLoc;
4036    let randNo = Math.floor((Math.random() * 1000000) + 1);
4037	try{
4038        if(window.sessionStorage["evolok:ev_profile"]!=undefined){
4039            delete window.sessionStorage["evolok:ev_profile"];
4040        }
4041        if(window.localStorage["evolok:ev_session"]!=undefined){
4042            delete window.localStorage["evolok:ev_session"];
4043        }
4044    }catch(err){}
4045	if(cl){
4046		currLoc = encodeURIComponent(cl);
4047	}else{
4048		currLoc = encodeURIComponent(window.location.href);
4049	}
4050	google.accounts.id.disableAutoSelect();
4051	window.location.href = mmlog_path+"?a=out&pageURL="+currLoc+"&random="+randNo;
4052	localStorage.removeItem("savedItems"); // removed saveditems on logout.
4053	localStorage.removeItem("historyItems"); // removed history items on logout.
4054	localStorage.removeItem("obitVotedIds"); // removed Obituary Reacted items on logout.
4055	localStorage.removeItem("victoryVotedIds"); 
4056}
4057
4058function rfAccessTkn() {
4059	if(rfTknTimer) {
4060		clearInterval(rfTknTimer);
4061	}
4062/*
4063	$.ajax({
4064		type : "GET",
4065		url : mmlog_path,
4066		dataType : 'text',
4067		data : {
4068            a : 'rf'
4069		},
4070		success : function(response) {
4071			if(response=='true') {
4072				setRfTknInt();
4073				try{
4074					if(!getCookieVal(login_un) || !getCookieVal('ev_ss')){
4075						dataLayer.push({'event': 'mo-loginrefresh-fail'}) ;
4076						//location.reload();
4077                	}
4078				} catch (err) {console.log("err"+err)}
4079			}
4080		},
4081		error : function(xhr, err) {
4082			console.log("err" + JSON.stringify(err));
4083		}
4084	});
4085	*/
4086}
4087
4088function setLoggedInView() {
4089    try {
4090        if (sso_auth.isLoggedIn()) {
4091            let userName = getCookieVal(login_un);
4092            if (userName) {
4093                $('.profile_name_txt').text(decodeURIComponent(userName).trim());
4094            }
4095            $('.sign_in_button').removeClass("user-not-signed");
4096            $('.sign_in_button').addClass('user-signed-in');
4097
4098            $('.ml-login-icon-blk').removeClass('user-not-signed');
4099            $('.ml-login-icon-blk').addClass('user-signed-in');
4100        } else {
4101		
4102            $('.sign_in_button').addClass("user-not-signed");
4103            $('.sign_in_button').removeClass('user-signed-in');
4104
4105            $('.ml-login-icon-blk').addClass('user-not-signed');
4106            $('.ml-login-icon-blk').removeClass('user-signed-in');
4107
4108            $('.profile_name_txt').text('');
4109        }
4110    } catch (err) {}
4111}
4112
4113
4114function invokeRfTknReq() {
4115		let rfInt = getCookieVal(rf_int);
4116		let rfIntVal = 0;
4117		if(rfInt) {
4118			rfIntVal = parseInt(rfInt);
4119		}
4120		let lastRfTime = getCookieVal(last_rf_time);
4121		if(lastRfTime) {
4122			let lastRfTimeVal = parseInt(lastRfTime);
4123			let cTimeVal = 0;
4124			let cDate = new Date();
4125			
4126			let cTimeInMs = cDate.getTime();
4127			if(cTimeInMs) {
4128				cTimeVal = parseInt(cTimeInMs);
4129			}
4130			
4131			let timeDiff = cTimeVal - (lastRfTimeVal - 60000);
4132			if(timeDiff >= rfIntVal) {
4133				rfAccessTkn();
4134			} else {
4135				rfIntVal = rfIntVal - timeDiff;
4136			}
4137		}
4138
4139		if(!rfIntVal) {
4140			rfIntVal = rf_Int_default;
4141		}
4142
4143		if(rfTknTimer) {
4144			clearInterval(rfTknTimer);
4145		}
4146		rfTknTimer  = setInterval('rfAccessTkn()', rfIntVal);
4147}
4148
4149function setRfTknInt() {
4150	let rfInt = getCookieVal(rf_int);
4151	if(!rfInt) {
4152		rfInt = rf_Int_default;
4153	}
4154	rfTknTimer  = setInterval('rfAccessTkn()', rfInt);
4155}
4156
4157
4158$(document).ready(function() {
4159	$(".sso-signout-button").on("click", function(e){
4160	    ssoOut();
4161	});
4162
4163	setLoggedInView();
4164
4165	if(sso_auth.isLoggedIn()) {
4166        loadGoogleScript().then(() => googleOneTapLibraryLoad());
4167		invokeRfTknReq();
4168	}
4168 else if (typeof enablePrestitial === 'undefined' || !enablePrestitial)  {
4169		loadGoogleScript()
4170				.then(() => googleOneTapLibraryLoad())
4171				.then((val) => {
4172					if(val === 1){
4173						invokeGoogleOneTap();
4174					}
4175				})
4176				.catch((error) => {
4177					console.error("Error loading Google One Tap:", error);
4178				});
4179		}
4180
4181});
4182
4183function loadGoogleScript() {
4184	return new Promise((resolve, reject) => {
4185		const script = document.createElement('script');
4186		script.src = 'https://accounts.google.com/gsi/client'; 
4187        script.onload = () => {
4188			console.log('Google script loaded.');
4189			resolve();
4190		};
4191		script.onerror = () => reject(new Error('Failed to load Google script'));
4192		document.head.appendChild(script);
4193	});
4194}
4195
4196function googleOneTapLibraryLoad() {
4197	return new Promise((resolve, reject) => {
4198		if(typeof googleClientId !== 'undefined'){
4199			try {
4200				google.accounts.id.initialize({
4201					client_id: googleClientId,
4202					cancel_on_tap_outside: false,
4203					itp_support: true,
4204					use_fedcm_for_prompt: true,
4205					callback: googleSsoIn,
4206				});
4207				console.log('Google One Tap initialized.');
4208				
4209			} catch (error) {
4210				reject(error);
4211			}
4212		resolve(1);
4213		}
4214		else{
4215			resolve(0);
4216		}
4217		
4218		
4219	});
4220}
4221
4222// Function to invoke Google One Tap 
4223function invokeGoogleOneTap() {
4224    const isMobileView = window.matchMedia("(max-width: 768px)").matches; // Check if the view is mobile
4225        if (isMobileView) {
4226            const targetElement = document.querySelector('.cmp-header__main');
4227            if (targetElement) {
4228                const observer = new IntersectionObserver((entries) => {
4229                    entries.forEach(entry => {
4230                        if (!entry.isIntersecting && entry.boundingClientRect.top < 0) {
4231							google.accounts.id.prompt(); // excluded setExpirationTime()
4232                            observer.disconnect();
4233                        }
4234                    });
4235                }, { rootMargin: '0px', threshold: [1] }); 
4236                observer.observe(targetElement);
4237            } else {
4238                console.error("Element with class 'cmp-header__main' not found.");
4239            }
4240        } else {
4241		        google.accounts.id.prompt();
4242        }
4243}
4244
4245// Function to get a cookie by name
4246function getCookie(cookieName) {
4247    var name = cookieName + "=";
4248   	var decodedCookie = decodeURIComponent(document.cookie);
4248  // Decode the cookie string and split it into individual cookies
4249   	var cookieArray = decodedCookie.split(';');
4250   	for (const cookie of cookieArray) {
4251		// Trim leading and trailing spaces from the cookie string
4252		var trimmedCookie = cookie.trim();
4253		// Check if the cookie name matches the target name
4254		if (trimmedCookie.startsWith(name)) {
4255			return trimmedCookie.substring(name.length);
4256		}
4257	}
4258    return null; 
4259}
4260
4261// Function to set the expiration time for 'g_state' cookie
4262function setExpirationTime() {
4263	var now = new Date();
4264  	var time = now.getTime();
4265  	var expireTime = time + cool_down_default; // 3 minutes in the future
4266  	now.setTime(expireTime);
4267	var gStateValue = getCookie("g_state");
4268	if (gStateValue !== null) {
4269        document.cookie = 'g_state='+gStateValue+';path=/;expires='+now.toUTCString(); //Set the updated expiration time to g_state cookie
4270    } else {
4271        console.log("Cookie 'g_state' not found.");
4272    }
4273}
4274/* function to initiate google subscription Integration */
4275function loadSwgScript() {
4276  return new Promise((resolve, reject) => {
4277    const script = document.createElement('script');
4278    script.src = 'https://news.google.com/swg/js/v1/swg.js';
4279    script.async = true;
4280    script.type = 'application/javascript';
4281    script.setAttribute('subscriptions-control', 'manual');
4282
4283    script.onload = () => {
4284      resolve();
4285    };
4286
4287    script.onerror = () => reject(new Error('Failed to load SWG script'));
4288    document.head.appendChild(script);
4289  });
4290}
4291
4292function initiateGoogleSubscription(){
4293	let ppid = getCookie("ev_guid");
4294    let isGoogleLinked = getCookie("ev_gsubscription");
4295	let isPremium = getCookie("premium_user");
4296	if (isPremium && (isGoogleLinked === "false"  && ppid)) {	
4297		getReaderFromGoogle(ppid);
4298	}
4299}
4300
4301function linkSubscription(ppid) {
4302  self.SWG.push(async (subscriptions) => {
4303      try {
4304        const result = await subscriptions.linkSubscription({
4305          publisherProvidedId: ppid,
4306        })
4307		console.log(result);
4308      } catch(e) {
4309        console.log(e)
4310      }
4311    })
4312}
4313function getReaderFromGoogle(ppid){
4314	let keyfile = getCookie("g_subscriptionKey");
4315	$.ajax({
4316		type: "GET",
4317		url: `https://readerrevenuesubscriptionlinking.googleapis.com/v1/publications/CAowyeKNCw/readers/${ppid}`,
4318		headers: {
4319		"Authorization": `Bearer ${keyfile}`,
4320		},
4321		success: function (data) {
4322		console.log("Reader exists:", data);
4323		},
4324		error: function (xhr, status, error) {
4325		if (xhr.status === 404) {
4326			linkSubscription(ppid);
4327		} else {
4328			console.error("Error:", error, xhr.responseText);
4329		}
4330		},
4331	});
4332}
4333
4334document.addEventListener('DOMContentLoaded', async function () {
4335	await loadSwgScript();
4336
4337    self.SWG = self.SWG || [];
4338	self.SWG.push((subscriptions) => {
4339		subscriptions.init("CAowyeKNCw");
4340	});
4341	  initiateGoogleSubscription();
4342});
4343
4344
4345const initData = JSON.stringify({ "updated": 0,"deleteMeta": {"counter":0,"timestamp":0,"isBatch":false,"batchTimestamp":0},"addMeta": {"counter":0,"timestamp":0,"isBatch":false,"batchTimestamp":0}, "source": "", "isLoggedIn": "", "addedIds": [], "articles": {}, "deletedIds": [] });
4346const eventSelector  = {"article":"article-save-btn--saved","list":"cmp-story-list__control-btn--saved","dropdown":"cmp-story-list___dropdown-btn--saved"};
4347
4348const mainApiDomain = (typeof apiDomain !== "undefined" && apiDomain) ? apiDomain : "https://api.manoramaonline.com";
4349const mainImgDomain = (typeof imgDomain !== "undefined" && imgDomain) ? imgDomain : "https://img-mm.manoramaonline.com";
4350
4351/* Initial entry point. populate listing, setup event listeners and update with api calls */
4352document.addEventListener("DOMContentLoaded" ,async function () {
4353
4354    let savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
4355
4356    let diffTime = Date.now() - savedData["updated"];
4357    let fiveMins = 5 * 60 * 1000;
4358    if (diffTime > fiveMins && savedData["source"] !== "local" && !savedData["deleteMeta"]["isBatch"] && !savedData["deleteMeta"]["isBatch"]) {
4359        let apiData = await getSavedItems();
4360        if (apiData !== 0) {
4361            savedData = processApiRequestData(apiData)
4362            savedData["updated"] = apiData["updatedOn"] || Date.now();
4363            savedData["source"] = "api";
4364            localStorage.setItem("savedItems", JSON.stringify(savedData));
4365        }
4366    }
4367
4368    savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
4369
4370    populateSavedListing(savedData);
4371
4372    addSaveItemsEventListeners();
4373
4374    if (!revampHeaderutils.isLoggedIn()) {
4375       localStorage.removeItem("savedItems");
4376        return;
4377    }
4378
4379    savedData = await batchUpdateItems(savedData,true);
4380
4381    activateSavedArticlesOnLoad(savedData["addedIds"],"add");
4382    
4383});
4384
4385/* Setup events listeners : Saved onlick and remove all button listeners */
4386const addSaveItemsEventListeners = () =>{
4387
4388    /* Delete listener for remove all button  */
4389    $(".saved-items__remove-btn").off("click").on("click",async function(){
4390        let localStorageData = localStorage.getItem("savedItems") || initData;
4391        let savedData = JSON.parse(localStorageData);
4392        let addedIds = savedData["addedIds"];
4393        let clonedAddedIds = JSON.parse(JSON.stringify(savedData["addedIds"])); // deep clone for an unaffected array for looping
4394        let deletedIds = savedData["deletedIds"];
4395        if(addedIds.length > 0){
4396            clonedAddedIds.forEach(articleId => {
4397                let dIdx = deletedIds.indexOf(articleId);
4398                if(dIdx === -1){
4399                    deletedIds.push(articleId);
4400                }
4401                let idx = addedIds.indexOf(articleId);
4402                if(idx !== -1){
4403                    addedIds.splice(idx,1);
4404                }
4405                delete savedData["articles"][articleId];
4406            });
4407            let forceTimeStamp = Date.now() - (2 * 60 * 1000); // force an earlier timestamp for removeall
4408            savedData["addedIds"] = [];
4409            savedData["deletedIds"] = deletedIds;
4410            savedData["deleteMeta"]["isBatch"] = true;
4411            savedData["deleteMeta"]["batchTimestamp"] = forceTimeStamp;
4412
4413            activateSavedArticlesOnLoad(savedData["deletedIds"],"remove");
4414            $(".story-col-list-section.story-col-list-section--saved").css("display","none");
4415            $(".saved-items__remove-btn").css("display","none");
4416            $(".story-sort").css("display","none");
4417            $(".list-noresult").css("display","block");
4418            savedData = await batchUpdateItems(savedData,true);
4419            localStorage.setItem("savedItems", JSON.stringify(savedData));
4420        }
4421    });
4422
4423    /* On click listener for listing saved button */
4424    $(".cmp-story-list__control-btn.cmp-save__btn,.cmp-story-list___dropdown-btn.cmp-save__btn").off("click").on("click", async function () {
4425        let listItem = $(this).closest(".cmp-story-list__item");
4426        let titleLink = listItem.find(".cmp-story-list__title-link");
4427        let articleId = listItem.find(".cmp-story-list__item-in").attr("data-itemid");
4428        let articleLink = titleLink.attr("href");
4429        let articleTitle = titleLink.attr("title");
4430        let isPremium = listItem.find(".cmp-story-list__premium-icon").length;
4431        let hasVideoIcon = listItem.find(".mm-icon__play-sharp").length;
4432        let hasAudioIcon = listItem.find(".mm-icon__podcast").length;
4433        let stampLabel = listItem.find(".cmp-stamp-label").text().trim();
4434        let liveLabel = listItem.find(".cmp-live-label").text().trim();
4435        let imgEle = listItem.find(".cmp-story-list__img");
4436        let videoBlock = listItem.find(".cmp-story-list__video.cmp-video-block");
4437		let dataImgSrc = videoBlock?.data("imgSrc");
4438        let articleImg = ""
4439        let squareImg = ""
4440        if (typeof dataImgSrc != 'undefined' && dataImgSrc.length > 0) {
4441            articleImg = mainImgDomain + dataImgSrc;
4442            squareImg = getSquareImg(articleImg);
4443        } else {
4444            articleImg = imgEle.attr("src")?.split("?")[0];
4445            squareImg = getSquareImg(imgEle.attr("data-mobsrc") || imgEle.attr("src"));
4446        }
4447
4448        let sectionTitle = listItem.find(".cmp-story-list__pretitle").attr("title");
4449        let sectionLink = listItem.find(".cmp-story-list__pretitle").attr("href");
4450        let articleData = { "id": articleId, "sectionTitle": sectionTitle, "sectionLink": sectionLink, "title": articleTitle, "link": articleLink, "img": articleImg, "squareImg" : squareImg, "isPremium": isPremium, "stampLabel": stampLabel, "liveLabel": liveLabel, "hasVideoIcon": hasVideoIcon, "hasAudioIcon": hasAudioIcon };
4451        let selector = "list";
4452        if($(this).hasClass("cmp-story-list___dropdown-btn.cmp-save__btn")){
4453            selector = "dropdown";
4454        }
4455        await handleEventArticleData($(this),articleData,selector);
4456    });
4457
4458    $(".article-header__action-block-li .article-save-btn").off("
4458click").on("click", async function () {
4459        if(typeof pageDl === 'undefined'){
4460            return;
4461        }
4462        let pageData = JSON.parse(JSON.stringify(pageDl));
4463        let articleId = pageData.articleId;
4464        let articleLink = window.location.href;
4465        let articleTitle = pageData.headline;
4466        let articleImg = $(".cmp-story-figure__web-image img").attr("src")?.split("?")[0] || $('meta[property="og:image"]').attr('content') || "";
4467        let squareImg = getSquareImg(articleImg);
4468        let sectionTitle = pageData.sectionName;
4469        let sectionLink = $(".cmp-sectionpage-header__title a").attr("href")||"";
4470        let isPremium = pageData.articleType === "premium" ? 1 : 0;
4471        let stampLabel = $(".article-header .cmp-stamp-label").text().trim();
4472        let liveLabel = $(".article-header .cmp-live-label").text().trim();
4473        let hasVideoIcon = (pageData.ytVideoCount > 0 || pageData.bcVideoCount > 0)  ? 1 : 0;
4474        let hasAudioIcon = 0; // WIP
4475        let articleData = { "id": articleId, "sectionTitle": sectionTitle, "sectionLink": sectionLink, "title": articleTitle, "link": articleLink, "img": articleImg, "squareImg" : squareImg, "isPremium": isPremium, "stampLabel": stampLabel, "liveLabel": liveLabel, "hasVideoIcon": hasVideoIcon, "hasAudioIcon": hasAudioIcon };
4476        await handleEventArticleData($(this),articleData,"article");
4477    });
4478
4479}
4480
4481/** Article Data handler function: OnEvent */
4482const handleEventArticleData = async (thisObj,articleData,selector) => {
4483    return new Promise(async(resolve, reject) => {
4484        let localStorageData = localStorage.getItem("savedItems") || initData;
4485        let isAdded =  true;
4486        
4487        let maxSavedItems = $('.cmp-modal-box.cmp-modal-box--save-article').attr("data-maxitems") || 20;
4488
4489        let articleId = articleData["id"];
4490        if(!articleId){
4491            return resolve();
4492        }
4493        let isLoggedIn = revampHeaderutils.isLoggedIn();
4494        if (!isLoggedIn) {
4495            localStorageData = initData;
4496        }
4497        let savedData = JSON.parse(localStorageData);
4498        if (savedData["addedIds"].length >= parseInt(maxSavedItems)) {
4499            if(!thisObj.hasClass(eventSelector[selector])){
4500                console.log("Limit reached");
4501                $(".cmp-modal-box.cmp-modal-box--save-article").css('display','block');
4502                return resolve();
4503            }
4504        }
4505        let dIdx = savedData["deletedIds"].indexOf(articleId);
4506        let idx = savedData["addedIds"].indexOf(articleId);
4507        if (thisObj.hasClass(eventSelector[selector])) {
4508            if (dIdx === -1) {
4509                savedData["deletedIds"].push(articleId);
4510            }
4511            if (idx !== -1) {
4512                savedData["addedIds"].splice(idx, 1);
4513            }
4514            delete savedData["articles"][articleId];
4515            isAdded = false;
4516            activateSavedArticlesOnLoad([articleId],"remove");
4517        } else {
4518            if (dIdx !== -1) {
4519                savedData["deletedIds"].splice(dIdx, 1);
4520            }
4521            if (idx === -1) {
4522                savedData["source"] = "local";
4523                savedData["addedIds"].push(articleId);
4524                savedData["articles"]={[articleId] : articleData,...savedData["articles"]};
4525            }
4526            activateSavedArticlesOnLoad([articleId],"add");
4527        }
4528        savedData["isLoggedIn"] = isLoggedIn;
4529        localStorage.setItem("savedItems", JSON.stringify(savedData));
4530        if (!isLoggedIn) {
4531            ssoIn(false, signInValue);
4532        }
4533
4534        savedData = await addAndDeleteUpdateToAPI(savedData, articleId, isAdded);
4535     
4536        let savedContainerMain = $(".story-col-list-section.story-col-list-section--saved");
4537        if(savedContainerMain.length){
4538            populateSavedListing(savedData);
4539            activateSavedArticlesOnLoad(savedData["addedIds"],"add");
4540            addSaveItemsEventListeners();
4541        }
4542        return resolve();
4543    });
4544}
4545
4546const getCleanSectionUrl = (url) =>{
4547    if(url){
4548        let urlArray = url.split("/");
4549        if(urlArray.length > 4){
4550            urlArray.splice(1,3);
4551        }
4552        let sectionLink =  urlArray.join("/") + ".html";
4553        return sectionLink;
4554    }
4555    return "";
4556}
4557
4558const getSquareImg = (url) => {
4559    let urlParams = new URLSearchParams(url);
4560    url = url.split("?")[0];
4561    let rendition = "&w=100&h=100";
4562    if (urlParams.has("crop")) {
4563        url = `${url}?crop=${urlParams.get("crop")}${rendition}`;
4564    } else {
4565        url = `${url}?crop=fc${rendition}`
4566    }
4567    return url;
4568}
4569
4570/* Helper function to process data coming from api */
4571const processApiRequestData = (apiData) => {
4572    let savedData = JSON.parse(initData);
4573
4574    if(!apiData["data"] || apiData["data"]["contents"].length === 0){
4575        return savedData;
4576    }
4577
4578    for (let data of apiData["data"]["contents"]) {
4579        let articleId = data.id;
4580        let articleLink = data.contentTitle.url + ".html";
4581        let articleTitle = data.contentTitle.title;
4582        let articleImg = `${mainImgDomain}${data.contentImgs.filter(img => img.aspectratio == "image")[0]?.url}`;
4583        let squareImg = getSquareImg(`${mainImgDomain}${data.contentImgs.filter(img => img.aspectratio == "square")[0]?.url || data.contentImgs.filter(img => img.aspectratio == "image")[0]?.url}`);
4584        let sectionTitle = data.subSection.title;
4585        let sectionLink = getCleanSectionUrl(data.subSection.url);
4586        let isPremium = data.isPremium || false;
4587        let liveLabel = data.webExclusive || '';
4588        let hasVideoIcon = data.icon === "video" ? 1 : 0;
4589        let hasAudioIcon = data.icon === "audio" ? 1 : 0;
4590        let stampLabel = data.configurableLabel || '';
4591        let articleData = { "id": articleId, "sectionTitle": sectionTitle, "sectionLink": sectionLink, "title": articleTitle, "link": articleLink, "img": articleImg, "squareImg" : squareImg, "isPremium": isPremium, "stampLabel": stampLabel, "liveLabel": liveLabel, "hasVideoIcon": hasVideoIcon, "hasAudioIcon": hasAudioIcon };
4592        savedData["articles"][articleId] = articleData;
4593        savedData["addedIds"].push(articleId);
4594    }
4595    return savedData;
4596}
4597
4598/* Helper function to mark or remove saved button's activated state */
4599const activateSavedArticlesOnLoad = (idArray,op) => {
4600    /* Listing saved icon activate/deactivate */
4601    for (let id of idArray) {
4602        $(`[data-itemid=${id}]`).each(function () {
4603            let savedBtn = $(this).closest(".cmp-story-list__item").find(".cmp-story-list__control-btn.cmp-save__btn,.cmp-story-list___dropdown-btn.cmp-save__btn");
4604            let listSaveClass = eventSelector["list"];
4605            let dropdownSaveClass = eventSelector["dropdown"];
4606            if(op === "add"){
4607                if(!savedBtn.hasClass(listSaveClass)){
4608                    savedBtn.addClass(listSaveClass);
4609                }
4610                if(!savedBtn.hasClass(dropdownSaveClass)){
4611                    savedBtn.addClass(dropdownSaveClass);
4612                }
4613            }
4614            if(op === "remove"){
4615                if(savedBtn.hasClass(listSaveClass)){
4616                    savedBtn.removeClass(listSaveClass);
4617                }
4618                if(savedBtn.hasClass(dropdownSaveClass)){
4619                    savedBtn.removeClass(dropdownSaveClass);
4620                }
4621            }
4622        });
4623    }
4624
4625    /* Article saved icon activate/deactivate */
4626    let isArticle = (typeof pageDl !== 'undefined') && pageDl["pageType"] === "article" && idArray.includes(pageDl["articleId"]);
4627    if (!isArticle) {
4628        return;
4629    }
4630    let articleSaveClass = eventSelector["article"];
4631    let articleSaveBtn = $(".article-save-btn");
4632    if (op === "add") {
4633        if (!articleSaveBtn.hasClass(articleSaveClass)) {
4634            articleSaveBtn.addClass(articleSaveClass);
4635        }
4636    }
4637    if (op === "remove") {
4638        if (articleSaveBtn.hasClass(articleSaveClass)) {
4639            articleSaveBtn.removeClass(articleSaveClass);
4640        }
4641    }
4642}
4643
4644/** Batch update function which takes care of the batch POST update. 
4645 * function also has an onload parameter to be called for initial pageload */
4646const batchUpdateItems = async (savedData, onLoad = false, isAdded = false, isDeleted = false) => {
4647    let deleteMeta = savedData["deleteMeta"];
4648    let addMeta = savedData["addMeta"];
4649    let isAddBatchUpdate = false;
4650    let isDeleteBatchUpdate = false;
4651    let minDiff = 1 * 60 * 1000;
4652    
4653    
4654    if ((addMeta["isBatch"] && onLoad) || isAdded) {
4655
4656        if (addMeta["batchTimestamp"] === 0) {
4657            addMeta["batchTimestamp"] = Date.now();
4658            addMeta["isBatch"] = true;
4659        }
4660        let addBatchDiff = Date.now() - addMeta["batchTimestamp"];
4661
4662        if (addBatchDiff > minDiff) {
4663            isAddBatchUpdate = true;
4664        }
4665    }
4666
4667    if((deleteMeta["isBatch"] && onLoad) || isDeleted){
4668
4669        if (deleteMeta["batchTimestamp"] === 0) {
4670            deleteMeta["batchTimestamp"] = Date.now();
4671            deleteMeta["isBatch"] = true;
4672        }
4673
4674        let deleteBatchDiff = Date.now() - deleteMeta["batchTimestamp"];
4675
4676        if (deleteBatchDiff > minDiff) {
4677            isDeleteBatchUpdate = true;
4678        }
4679    }
4680    const promises = [];
4681    if (isDeleteBatchUpdate) {
4682        promises.push(deleteSavedItems(savedData["deletedIds"]).then((status) => {
4683            if (status === 1) {
4684                savedData["deletedIds"] = [];
4685                deleteMeta["batchTimestamp"] = 0;
4686                deleteMeta["isBatch"] = false;
4687            }
4688        }).catch(error => {
4689            console.error("Error during delete batch update:", error);
4690        }));
4691    }
4692
4693    if (isAddBatchUpdate) {
4694        promises.push(addSavedItems(savedData["addedIds"]).then((status) => {
4695            if (status === 1) {
4696                savedData["source"] = "";
4697                addMeta["batchTimestamp"] = 0;
4698                addMeta["isBatch"] = false;
4699            }
4700        }).catch(error => {
4701            console.error("Error during add batch update:", error);
4702        }));
4703    }
4704 
4705    await Promise.all(promises);
4706
4707    savedData["deleteMeta"] = deleteMeta;
4708    savedData["addMeta"] = addMeta;
4709    return savedData;
4710}
4711
4712/* Helper function which does add and delete functionality based on a counter which resets after every minute.
4713    if the number of articles in counter is less than 5 , the article is posted immediately. if the counter exceeds
4714    5, we are maintaining a queue to then batch update all the articles after a minute  */
4715const addAndDeleteUpdateToAPI = async (savedData, articleId, isAdded) => {
4716    let deleteMeta = savedData["deleteMeta"];
4717    let addMeta = savedData["addMeta"];
4718    let minDiff = 1 * 60 * 1000;
4719    let dIdx = savedData["deletedIds"].indexOf(articleId);
4720
4721    if (!isAdded) {
4722        deleteMeta["counter"] += 1;
4723        if(deleteMeta["timestamp"] === 0){
4724            deleteMeta["timestamp"] = Date.now();
4725        }
4726
4727        let diffTime = Date.now() - deleteMeta["timestamp"];
4728
4729        if (diffTime > minDiff && !deleteMeta["isBatch"]) {
4730            deleteMeta["counter"] = 1;
4731            deleteMeta["timestamp"] = Date.now();
4732            let status = await deleteSavedItems([articleId]);
4733            if(status === 1){
4734                if (dIdx !== -1) {
4735                    savedData["deletedIds"].splice(dIdx, 1);
4736                }
4737            }
4738        } else {
4739            if (deleteMeta["counter"] <= 5) {
4740                let status = await deleteSavedItems([articleId]);
4741                if(status === 1){
4742                    if (dIdx !== -1) {
4743                        savedData["deletedIds"].splice(dIdx, 1);
4744                    }
4745                }
4746            } else {
4747                savedData = await batchUpdateItems(savedData, false, false, true);
4748            }
4749        }
4750        
4751        savedData["deleteMeta"] = deleteMeta;
4752
4753    } else {
4754        addMeta["counter"] += 1;
4755        if(addMeta["timestamp"] === 0){
4756            addMeta["timestamp"] = Date.now();
4757        }
4758
4759        let diffTime = Date.now() - addMeta["timestamp"];
4760
4761        if (diffTime > minDiff && !addMeta["isBatch"]) {
4762            addMeta["counter"] = 1;
4763            addMeta["timestamp"] = Date.now();
4764            let status = await addSavedItems([articleId]);
4765            if (status === 1) {
4766                savedData["source"] = "";
4767            }
4768        } else {
4769            if (addMeta["counter"] <= 5) {
4770                let status = await addSavedItems([articleId]);
4771                if (status === 1) {
4772                    savedData["source"] = "";
4773                }
4774            } else {
4775                savedData = await batchUpdateItems(savedData, false, true, false);
4776            }
4777        }
4778        
4779        savedData["addMeta"] = addMeta;
4780    }
4781    
4782    localStorage.setItem("savedItems", JSON.stringify(savedData));
4783    return savedData;
4784}
4785
4786/* Helper function to get token and uid for api calls */
4787const getTokenAndUId = () => {
4788    let token = getCookieVal("mmu_id_token");
4789    if(!token){
4790        return [null,null]
4791    }
4792    let base64Url = token.split('.')[1];
4793    let base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
4794    let jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function (c) {
4795        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
4796    }).join(''));
4797    let payLoad = JSON.parse(jsonPayload);
4798    let uId = payLoad["sub"];
4799    let id_token = payLoad["id_token"];
4800    return [id_token, uId];
4801
4802}
4803
4804/* API Function: GET : get all the saved articles from API */
4805const getSavedItems = async () => {
4806    const [token, uId] = getTokenAndUId();
4807    return new Promise((resolve, reject) => {
4808        if (token === null) {
4809            return resolve(0);
4810        }
4811
4812        let fetchLimit = $(".cmp-modal-box.cmp-modal-box--save-article").attr("data-maxitems") || 20;
4813
4814        $.ajax({
4815            url: `${mainApiDomain}/profile/read/bookmark`,
4816            type: "GET",
4817            dataType: 'json',
4818            data: { "uId": uId , "limit" : fetchLimit },
4819            headers: {
4820                Authorization: 'Bearer ' + token,
4821            },
4822            success: function (res) {
4823                console.log(res);
4824                return resolve(res);
4825            },
4826            error: function (err) {
4827                console.log('Error:', err);
4828                return resolve(0);
4829            }
4830        })
4831    });
4832};
4833
4834/* API Function: POST : post new article ids to API */
4835const addSavedItems = async (articleIds) => {
4836    const [token, uId] = getTokenAndUId();
4837    return new Promise((resolve, reject) => {
4838        if (token === null) {
4839            return resolve(0);
4840        }
4841
4842        $.ajax({
4843            url: `${mainApiDomain}/profile/save/bookmark`,
4844            type: "POST",
4845            dataType: 'json',
4846            data: JSON.stringify({ "uId": uId, "aId": articleIds }),
4847            headers: {
4848                Authorization: 'Bearer ' + token,
4849            },
4850            success: function (res) {
4851                console.log("success");
4852                return resolve(1);
4853            },
4854            error: function (err) {
4855                console.log('Response Text:', err);
4856                return resolve(0);
4857            }
4858        })
4859    });
4860};
4861
4862/* API Function: POST : delete articles from API based on articleids */
4863const deleteSavedItems = async (articleIds) => {
4864    const [token, uId] = getTokenAndUId();
4865    return new Promise((resolve, reject) => {
4866        if (token === null) {
4867            return resolve(0);
4868        }
4869
4870        $.ajax({
4871            url: `${mainApiDomain}/profile/delete/bookmark`,
4872            type: "POST",
4873            dataType: 'json',
4874            data: JSON.stringify({ "uId": uId, "aId": articleIds }),
4875            headers: {
4876                Authorization: 'Bearer ' + token,
4877            },
4878            success: function (res) {
4879                console.log("success");
4880                return resolve(1);
4881            },
4882            error: function (err) {
4883                console.log('Response Text:', err);
4884                return resolve(0);
4885            }
4886        })
4887    });
4888};
4889
4890/* Ad script utilty funtion for saved items */
4891const setAdScriptForSaved = (savedCount, container) => {
4892    let isPremium = getCookieVal("prm_adfree") === 'true' ? true : false;
4893    if(isPremium){
4894        return;
4895    }
4896    let liPositionIndex = 4;
4897    if(savedCount < 5){
4898        liPositionIndex = savedCount - 1;
4899    }
4900    container.find(".cmp-story-list__item").eq(liPositionIndex).after(slb2AdScript);
4901    createAdUnit("slb2");
4902}
4903
4904/* Populate the listing page with the api data. Used in saved items landing page */
4905const populateSavedListing = (savedData) => {
4906    let container = $(".story-col-list-section.story-col-list-section--saved .cmp-story-list");
4907    if (!container.length) {
4908        return;
4909    }
4910
4911    let savedCount = savedData["addedIds"].length;
4912
4913    if(savedCount === 0 || !revampHeaderutils.isLoggedIn()){
4914        $(".list-noresult").css("display","block");
4915        $(".saved-items__remove-btn").css("display","none");
4916        $(".story-sort").css("display","none");
4917    }
4918    container.empty();
4919
4920    if (savedCount > 0) {
4921        $(".list-noresult").css("display","none");
4922        $(".saved-items__remove-btn").css("display","block");
4923        $(".story-sort").css("display","block");
4924        $(".cmp-story-sort__count span").html(savedData["addedIds"].length);
4925        let articleData = savedData["articles"];
4926        for (let key in articleData) {
4927            let data = articleData[key]
4928            let articleId = data.id;
4929            let articleLink = data.link;
4930            let articleTitle = data.title;
4931            let articleImg = data.img;
4932            let squareImg =  data.squareImg;
4933            let sectionTitle = data.sectionTitle;
4934            let sectionLink = data.sectionLink;
4935            let isPremium = data.isPremium;
4936            let liveLabel = data.liveLabel;
4937            let hasVideoIcon = data.hasVideoIcon;
4938            let hasAudioIcon = data.hasAudioIcon;
4939            let stampLabel = data.stampLabel;
4940            let htmlLi =
4941                `<li class="cmp-story-list__item">
4942                <div class="cmp-story-list__item-in" data-itemid="${articleId}">
4943                  <div class="cmp-story-list__content">
4944                    <h2 class="cmp-story-list__title"> <a href="${articleLink}" class="cmp-story-list__title-link" title="${articleTitle}">
4945                    ${liveLabel.length ?
4946                    `<label class="cmp-live-label">
4947                      <div class="live-blink-circile">
4948                        <div class="live-nomaral-circle"></div>
4949                        <div class="live-circle"></div>
4950                        <div class="live-circle"></div>
4951                        <div class="live-circle"></div>
4952                        <div class="live-circle"></div>
4953                      </div>
4954                      ${liveLabel}
4955                      </label>` : ''
4956                    }
4957                    ${stampLabel.length ?
4958                    `<label class="cmp-stamp-label">${stampLabel}</label>` : ''
4959                    }
4960                    ${isPremium ?
4961                    `<div class="cmp-story-list__premium-icon">
4962                            <i class="mm-icon  mm-icon__mm-premium"></i>
4963                        </div>` : ''
4964                     }
4965                      ${articleTitle}
4966                      </a> </h2>
4967                    
4968                    <div class="cmp-story-list__content-bottom">
4969                      <div class="cmp-story-list__content-btm-left"> <a href="${sectionLink}" class="cmp-story-list__pretitle" title="">${sectionTitle}</a> </div>
4970                       <div class="cmp-story-list__content-btm-right">
4971                          <ul class="cmp-story-list__controls">
4972                            <li class="cmp-story-list__control-li">
4973                              <button class="cmp-story-list__control-btn" title=""><i class="mm-icon mm-gray-icon mm-icon__listen"></i></button>
4974                            </li>
4975                            <li class="cmp-story-list__control-li">
4976                              <button class="cmp-story-list__control-btn cmp-save__btn" title=""><i class="mm-icon mm-gray-icon mm-icon__bookmark-sm"></i></button>
4977                            </li>
4978                          </ul>
4979                        </div>
4980                    </div>
4981                  </div>
4982                  <div class="cmp-story-list__image-block">
4983                    <a class="cmp-story-list__image-link" href="${articleLink}" title="${articleTitle}">
4984                    ${hasAudioIcon ?
4985                    `<div class="cmp-story-list__media-icon">
4986                            <i class="mm-icon mm-white-icon mm-icon__podcast"></i>
4987                        </div>` : ''
4988
4989                    }
4990                    ${hasVideoIcon ?
4991                    `<div class="cmp-story-list__media-icon">
4992                            <i class="mm-icon mm-white-icon mm-icon__play-sharp"></i>
4993                        </div>` : ''
4994                    }
4995                    <img src="/etc.clientlibs/revamp-mmonline/cl
4995ientlibs/clientlib-mmo-common-footer/resources/img/default-medium.jpg" data-websrc="${articleImg}?w=260&h=135" data-mobsrc="${squareImg}" data-tabsrc="${squareImg}" alt="${articleTitle}" class="cmp-story-list__img lazyload"></a> </div>
4996                </div>
4997              </li>`;
4998            container.append(htmlLi);
4999        }
5000        setAdScriptForSaved(savedCount, container); // set ad for saved
5001        getDeviceType(); // call for image lazyload
5002
5003    }
5004}
5005const POST_WAIT_TIME = 60 * 1000;
5006const GET_WAIT_TIME = 5 * 60 * 1000;
5007const AD_POS = 6;
5008
5009
5010// helper methods
5011const getHistoryFromLocalStorage = () => {
5012    let history = JSON.parse(localStorage.getItem("historyItems")) || {
5013        historyItems: [],
5014        saved_articles: [],
5015        deleted_articles: [],
5016        lastPosted: Date.now() - POST_WAIT_TIME,
5017        lastFetched: Date.now() - GET_WAIT_TIME,
5018        saveCounter: 0,
5019        deleteCounter: 0
5020    }
5021    return history
5022}
5023
5024const saveHistoryToLocalStorage = (history) => {
5025    let historyString = JSON.stringify(history)
5026    localStorage.setItem("historyItems", historyString);
5027}
5028
5029const checkIfUserisLoggedIn = () => {
5030    const [token, uId] = getTokenAndUId();
5031    return token && token != ""
5032}
5033
5034
5035function populateHistoryHtml(data) {
5036    let imageUrl = `${mainImgDomain}${data.image}`;
5037    let description = data.description
5038    let mobImage = ""
5039    if (data.mobImage) {
5040        let mobImgUrl = `${mainImgDomain}${data.mobImage}`
5041        mobImage = getSquareImg(mobImgUrl)
5042    } else {
5043        mobImage = getSquareImg(imageUrl)
5044    }
5045    let title = data.title
5046    let url = data.link
5047    let sectionTitle = data.sectionTitle
5048    let articleId = data.articleId
5049    let liveUpdate = data.liveUpdate
5050    let sectionLink = data.sectionLink
5051    let premium = data.isPremium
5052
5053    let liveUpdateSnippet = liveUpdate ? `<label class="cmp-live-label">
5054        <div class="live-blink-circile">
5055            <div class="live-nomaral-circle"></div>
5056            <div class="live-circle"></div>
5057            <div class="live-circle"></div>
5058            <div class="live-circle"></div>
5059            <div class="live-circle"></div>
5060        </div>
5061        LIVE UPDATES
5062    </label>` : ""
5063
5064    let premiumSnippet = premium ? `<div class="cmp-story-list__premium-icon"><i class="mm-icon  mm-icon__mm-premium"></i></div>` : ""
5065    let historyListHtml = `<li class="cmp-story-list__item">
5066        <div class="cmp-story-list__item-in" data-itemid="${articleId}">
5067            <div class="cmp-story-list__content">
5068                <h2 class="cmp-story-list__title"> <a href="${url}" class="cmp-story-list__title-link" title="${title}">
5069        ${liveUpdateSnippet}
5070            ${premiumSnippet}${title}</a> </h2>
5071        <p class="cmp-story-list__dispn"><a href="${url}">${description}</a></p>
5072        <div class="cmp-story-list__content-bottom">
5073        <div class="cmp-story-list__content-btm-left"> <a href="${sectionLink}" class="cmp-story-list__pretitle" title="${sectionTitle}">${sectionTitle}</a> </div>
5074        <div class="cmp-story-list__content-btm-right">
5075            <ul class="cmp-story-list__controls">
5076                <li class="cmp-story-list__control-li">
5077                    <button class="cmp-story-list__control-btn cmp-story-list__control-btn--more-menu cmp-history-custom-dropdown" title=""><i class="mm-icon mm-gray-icon mm-icon__more-vertical"></i> </button>
5078                    <div class="cmp-story-list__drop-down">
5079                        <div class="cmp-story-list__drop-down-in">
5080                            <ul class="cmp-story-list___dropdown-ul">
5081                                <li class="cmp-story-list___dropdown-li">
5082                                    <button class="cmp-story-list___dropdown-btn" data_articleId="${articleId}"><i class="mm-icon mm-gray-icon mm-icon__trash"></i><span class="cmp-story-list___dropdown-btn-text">Remove</span> </button>
5083                                </li>
5084                                <li class="cmp-story-list___dropdown-li">
5085                                    <button class="cmp-story-list___dropdown-btn cmp-save__btn"><i class="mm-icon mm-gray-icon mm-icon__bookmark-sm"></i><span class="cmp-story-list___dropdown-btn-text">Save </span> </button>
5086                                </li>
5087                                 <!-- <li class="cmp-story-list___dropdown-li">
5088                                 <button class="cmp-story-list___dropdown-btn"><i class="mm-icon mm-gray-icon mm-icon__listen"></i><span class="cmp-story-list___dropdown-btn-text">listen </span> </button>
5089                                </li> -->
5090                            </ul>
5091                        </div>
5092                    </div>
5093                </li>
5094            </ul>
5095        </div>
5096    </div>
5097    </div>
5098    <div class="cmp-story-list__image-block"> <a class="cmp-story-list__image-link" href="${url}" title="${title}">
5099    <img src="/etc.clientlibs/revamp-mmonline/clientlibs/clientlib-mmo-common-footer/resources/img/default-medium.jpg" data-websrc="${imageUrl}?w=315&h=164" data-mobsrc="${mobImage}" data-tabsrc="${mobImage}" alt="${title}" class="cmp-story-list__img lazyload"></a> </div>
5100</div>
5101</li>`
5102    return historyListHtml
5103}
5104
5105function wrapHistoryHtml(historyListHtml) {
5106    return `<ul class="cmp-story-list">${historyListHtml}</ul>`
5107}
5108
5109const updateCounters = () => {
5110    let history = getHistoryFromLocalStorage();
5111    if (history) {
5112        if (Date.now() - history.lastPosted > POST_WAIT_TIME) {
5113            if (history.save_pending) {
5114                let articleIds = history.saved_articles || [];
5115                saveHistory(articleIds)
5116                history.lastPosted = Date.now();
5117                history.source = ""
5118                history.save_pending = false
5119                history.saved_articles = []
5120                console.log("history saved")
5121            }
5122            history.saveCounter = 0;
5123        }
5124        if (Date.now() - history.lastDeleted > POST_WAIT_TIME) {
5125            if (history.delete_pending) {
5126                let articleIds = history.deletedIds;
5127                deleteHistoryItem(articleIds, history.deleteAll || false)
5128                history.source = ""
5129                history.deleteAll = false
5130                history.delete_pending = false
5131                history.deletedIds = []
5132                history.lastDeleted = Date.now()
5133                console.log("history deleted")
5134            }
5135            history.deleteCounter = 0;
5136        }
5137        saveHistoryToLocalStorage(history)
5138    }
5139}
5140
5141async function fetchHistory() {
5142
5143    let FETCH_LIMIT = $('.cmp-sectionpage-header[data-articleLimit]').attr('data-articleLimit') || "100"
5144    FETCH_LIMIT = FETCH_LIMIT.toString();
5145    const [token, uId] = getTokenAndUId();
5146    let params = {
5147        method: "GET",
5148        "headers": {
5149            "Authorization": "Bearer " + token
5150        }
5151    }
5152    let url = `${mainApiDomain}/profile/read/history?uId=${uId}&limit=${FETCH_LIMIT}`
5153    let historyItems = []
5154    let updatedOn;
5155    let resp = await fetch(url, params);
5156    if (resp.status === 200) {
5157        let response = await resp.json()
5158        response.data?.contents?.map((ele) => {
5159            let articleData = {
5160                "articleId": ele.id,
5161                "sectionTitle": ele.subSection.title,
5162                "sectionLink": getCleanSectionUrl(ele.subSection.url),
5163                "title": ele.contentTitle.title,
5164                "description": ele.description,
5165                "link": getCleanSectionUrl(ele.contentTitle.url),
5166                "image": ele.contentImgs.filter(img => img.aspectratio == "image")[0]?.url,
5167                "mobImage": ele.contentImgs.filter(img => img.aspectratio == "square")[0]?.url,
5168                "isPremium": ele.isPremium,
5169                "stampLabel": ele.configurableLabel,
5170                "hasVideoIcon": ele.icon === "video",
5171                "hasAudioIcon": ele.icon === "audio",
5172                "liveUpdate": ele.liveBlinkingLabel,
5173                "lastModified": ele.lastModified
5174            };
5175            historyItems.push(articleData)
5176        })
5177        updatedOn = response.updatedOn || Date.now()
5178        historyItems.reverse()
5179    } else {
5180        console.log(`failed to fetch history with status code ${resp.status}`)
5181    }
5182    return [historyItems, updatedOn]
5183}
5184
5185
5186const fetchHistoryItems = async () => {
5187    let FETCH_LIMIT = $('.cmp-sectionpage-header[data-articleLimit]').attr('data-articleLimit') || "100"
5188    FETCH_LIMIT = parseInt(FETCH_LIMIT)
5189    let history = getHistoryFromLocalStorage()
5190    let historyItems = []
5191    let updatedOn = null
5192    if (history.historyItems) {
5193        if (Date.now() - history.lastFetched > GET_WAIT_TIME) { // check if localstorage values are older than 5 minutes
5194            [historyItems, updatedOn] = await fetchHistory()
5195            history = {
5196                "lastFetched": updatedOn,
5197                "source": history.source || "",
5198                "lastPosted": history.lastPosted || Date.now(),
5199                "historyItems": historyItems,
5200                "deletedIds": historyItems.deletedIds || [],
5201                "saved_articles": historyItems.saved_articles || [],
5202                "save_pending": historyItems.save_pending || false,
5203                "delete_pending": historyItems.delete_pending || false,
5204                "lastDeleted": historyItems.lastDeleted || Date.now(),
5205                "saveCounter": historyItems.saveCounter || 0,
5206                "deleteCounter": historyItems.deleteCounter || 0
5207            }
5208            saveHistoryToLocalStorage(history)
5209        } else {
5210            historyItems = history.historyItems;
5211        }
5212    } else {
5213        [historyItems, updatedOn] = await fetchHistory()
5214        history = {
5215            "lastFetched": updatedOn,
5216            "source": "",
5217            "lastPosted": Date.now(),
5218            "historyItems": historyItems.reverse(),
5219            "saveCounter": 0,
5220            "deleteCounter": 0,
5221            "lastPosted":Date.now(),
5222            "lastDeleted": Date.now(),
5223        }
5224        saveHistoryToLocalStorage(history)
5225    }
5226
5227    let prmAdfree = getCookie("prm_adfree");
5228    prmAdfree = prmAdfree == "true" ? true : false;
5229
5230    let storyList = $('#history-list')[0];
5231    let finalHtml = ""
5232    history = getHistoryFromLocalStorage()
5233    historyItems = history.historyItems;
5234    if (historyItems.length > 0) {
5235        historyItems.reverse()
5236        limitedHistoryItems = historyItems.filter((element, index) => index < FETCH_LIMIT)
5237        if (storyList) {
5238            let itemCount = historyItems.length;
5239            limitedHistoryItems.map((element, key) => {
5240                finalHtml += populateHistoryHtml(element)
5241                if (key == AD_POS - 2 && !prmAdfree) {
5242                    finalHtml += slb2AdScript
5243                }
5244            })
5245            if (itemCount < AD_POS - 2 && !prmAdfree) {
5246                finalHtml += slb2AdScript
5247            }
5248            storyList.innerHTML = wrapHistoryHtml(finalHtml);
5249            $(".list-noresult.text-center").css("display", "none");
5250            createAdUnit("slb2")
5251        }
5252        let deleteButtons = document.querySelectorAll("button[data_articleid]")
5253        deleteButtons.forEach(button => {
5254            button.addEventListener('click', function () {
5255                const articleId = this.getAttribute('data_articleid');
5256                deleteHistory(articleId)
5257            });
5258        });
5259        $("#delete-history-confirm").css("display", "block")
5260        getDeviceType();
5261        revampCustomutils.storylistMore();
5262        addSaveItemsEventListeners();
5263
5264    } else {
5265        storyList ? storyList.innerHTML = "" : null
5266        console.log("no history items found")
5267        $("#delete-history-confirm").css("display", "none")
5268        $(".list-noresult.text-center").css("display", "block");
5269    }
5270}
5271
5272function deleteHistoryItem(articleIds, deleteAll = false) {
5273    const [token, uId] = getTokenAndUId();
5274
5275    return new Promise((resolve, reject) => {
5276        if (token === null) {
5277            return reject(0);
5278        }
5279        let data = JSON.stringify({ "uId": uId, "aId": articleIds, "deleteAll": deleteAll })
5280        $.ajax({
5281            url: `${mainApiDomain}/profile/delete/history`,
5282            type: "POST",
5283            dataType: 'json',
5284            data: data,
5285            headers: {
5286                Authorization: 'Bearer ' + token,
5287            },
5288            success: function (res) {
5289                console.log("success");
5290                return resolve(1);
5291            },
5292            error: function (err) {
5293                console.log('Response Text:', err);
5294                return reject(0);
5295            }
5296        })
5297    });
5298}
5299
5300const deleteHistory = (articleId, deleteAll = false) => {
5301    let history = getHistoryFromLocalStorage()
5302    if (history && history.historyItems) {
5303        let historyItems = history.historyItems;
5304        if (!history.deleteCounter) {
5305            history.deleteCounter = 0;
5306        }
5307        if (history.deleteCounter < 5) {
5308            deleteHistoryItem([articleId], deleteAll)
5309            history.deleteCounter += 1
5310            if (deleteAll) {
5311                history.historyItems = [];
5312                history.deletedIds = []
5313                history.lastFetched = Date.now()
5314            } else {
5315                historyItems = historyItems.filter(item => item.articleId !== articleId)
5316                history.historyItems = historyItems;
5317            }
5318        } else if (deleteAll) {
5319                history.historyItems = []
5320                history.deleteAll = true
5321                history.delete_pending = true
5322                history.deleteAll = true
5323            } else {
5324                historyItems = historyItems.filter(item => item.articleId !== articleId)
5325                history.historyItems = historyItems;
5326                history.source = "local"
5327                let deletedIds = history.deletedIds || [];
5328                deletedIds.push(articleId);
5329                history.deletedIds = deletedIds;
5330                history.delete_pending = true
5331            }
5332        console.log("article deleted from history")
5333        saveHistoryToLocalStorage(history)
5334        if (deleteAll) {
5335            $("#history-list").empty()
5336            $(".tost-message.slide-down").css("display", "block")
5337            setTimeout(() => $(".tost-message.slide-down").css("display", "none"), 2000)
5338            $("#delete-history-confirm").css("display", "none")
5339            $(".list-noresult.text-center").css("display", "block");
5340        } else {
5341            fetchHistoryItems()
5342        }
5343    }
5344}
5345
5346const getArticleData = () => {
5347    let pageData = JSON.parse(JSON.stringify(pageDl));
5348    let dateString = pageData.lastModified;
5349    let dateObject = new Date(dateString);
5350    let epochTime = dateObject.getTime();
5351
5352    let articleId = pageData.articleId;
5353    let description = $('meta[name="description"]').attr('content') || "";
5354    let url = window.location.href;
5355    let title = pageData.headline;
5356    let lastModified = epochTime
5357    let imageData = $(".cmp-story-figure__web-image img").attr("src")?.split("?")[0] || $('meta[property="og:image"]').attr('content') || "";
5358    let image = ""
5359    if (imageData.length > 0) {
5360        let parsedImg = new URL(imageData)
5361        image = parsedImg.pathname;
5362    }
5363    let sectionTitle = pageData.sectionName;
5364    let sectionLink = $(".cmp-sectionpage-header__title a").attr("href") || "";
5365    let isPremium = pageData.articleType === "premium";
5366    let stampLabel = $(".article-header .cmp-stamp-label")?.text().trim() || "";
5367    let liveLabel = $(".article-header .cmp-live-label")?.text().trim() || "";
5368    let liveUpdate = $(".article-header .cmp-live-label").text().trim() != "" && $(".article-header .cmp-live-label").text().trim();
5369    let hasVideoIcon = (pageData.ytVideoCount > 0 || pageData.bcVideoCount > 0)
5370    let hasAudioIcon = false;
5371    let articleData = { "articleId": articleId, "sectionTitle": sectionTitle, "sectionLink": sectionLink, "title": title, "description": description, "link": url, "image": image, "isPremium": isPremium, "stampLabel": stampLabel, "liveLabel": liveLabel, "hasVideoIcon": hasVideoIcon, "hasAudioIcon": hasAudioIcon, "liveUpdate": liveUpdate, "lastModified": lastModified };
5372    return articleData;
5373}
5374
5375function saveHistory(articleIds) {
5376    const [token, uId] = getTokenAndUId();
5377    return new Promise((resolve, reject) => {
5378        if (token === null) {
5379            return reject(0);
5380        }
5381        let data = JSON.stringify({ "uId": uId, "aId": articleIds })
5382        $.ajax({
5383            url: `${mainApiDomain}/profile/save/history`,
5384            type: "POST",
5385            dataType: 'json',
5386            data: data,
5387            headers: {
5388                Authorization: 'Bearer ' + token,
5389            },
5390            success: function (res) {
5391                console.log("success");
5392                return resolve(1);
5393            },
5394            error: function (err) {
5395                console.log('Response Text:', err);
5396                return reject(0);
5397            }
5398        })
5399    });
5400}
5401
5402const postHistoryItems = async () => {
5403
5404    let history = getHistoryFromLocalStorage()
5405    let exists = false
5406    let historyItems = history.historyItems || []
5407    let savedArticles = new Set(history.saved_articles || []);
5408    let articleData = getArticleData()
5409
5410    exists = historyItems.some(item => item.articleId === articleData.articleId);
5411
5412    if (!exists) {
5413        historyItems.push(articleData)
5414        history.historyItems = historyItems;
5415        history.saved_articles = Array.from(savedArticles);
5416        history.source = "local"
5417
5418        if (history.saveCounter < 5) {
5419            saveHistory([articleData.articleId])
5420            history.saveCounter += 1
5421        } else {
5422            history.save_pending = true
5423            savedArticles.add(articleData.articleId)
5424        }
5425
5426    }
5427    saveHistoryToLocalStorage(history)
5428}
5429
5430const setupEventListeners = () => {
5431    const userLoggedIn = checkIfUserisLoggedIn()
5432    if (userLoggedIn) {
5433        document.addEventListener("DOMContentLoaded", () => {
5434
5435            updateCounters();
5436            if (window.pageDl != undefined) {
5437                if (pageDl.contentType == "article") {
5438                    postHistoryItems().then()
5439                    console.log("article saved to history")
5440                }
5441            }
5442            if ($('#history-list').length > 0) {
5443                fetchHistoryItems()
5444                document.querySelector("#delete-history-button")?.addEventListener("click", (e) => {
5445                    e.preventDefault()
5446                    console.log("clear all triggered")
5447                    deleteHistory(null, true)
5448                    $(".cmp-modal-box.cmp-modal-box--history-clear").css("display", "none");
5449                })
5450            }
5451        })
5452    } else if ($('#history-list').length > 0) {
5453            $("#delete-history-confirm").css("display", "none")
5454            $(".list-noresult.text-center").css("display", "block");
5455    }
5456}
5457
5458setupEventListeners()
5459let idlength = 0;
5460document.addEventListener("DOMContentLoaded", function () {
5461  const searchBtn = document.querySelector(".cmp-lottery-result__srch-btn");
5462  const inputField = document.querySelector(".lottery-input");
5463  const resultItems = document.querySelectorAll(".cmp-lottery-result__li");
5464  const winMessage = document.querySelector(".win-msg");
5465  const loseMessage = document.querySelector(".lose-msg");
5466  const winnerIdSpan = document.querySelector(".winner-id");
5467  const prizeDetailsSpan = document.querySelector(".prize-details");
5468  const firstResultItem = document.querySelector(".cmp-lottery-result__li");
5469  const originalPlaceholder = inputField ? inputField.placeholder : '';
5470  const lotteryTopBlock = document.querySelector(".cmp-lottery-result__top");
5471  const defaultMessage=document.querySelector(".def-msg");
5472
5473  function resetMessages() {
5474    winMessage.style.display = "none";
5475    loseMessage.style.display = "none";
5476  }
5477  if (firstResultItem) {
5478    const winningText = Array.from(firstResultItem.childNodes)
5479      .filter((node) => node.nodeType === Node.TEXT_NODE)
5480      .map((node) => node.textContent.trim().replace(/\s+/g, ""))
5481      .join("");
5482    console.log(winningText);
5483
5484    idlength = winningText.length;
5485    console.log(idlength);
5486  }
5487
5488  function performSearch() {
5489    try {
5490      resetMessages();
5491      const userInput = inputField.value
5492        .replace(/\s+/g, " ")
5493        .trim()
5494        .toUpperCase();
5495      if (userInput.length == idlength && /^[A-Za-z]{2}\d{6}$/.test(userInput)) {
5496        let exactMatched = false;
5497        let last4Match = false;
5498        resultItems.forEach((item) =>
5499          checkAndRemoveClass(item,"cmp-lottery-result__winner")
5500        );
5501
5502        resultItems.forEach((item) => {
5503          const winnerIdText = Array.from(item.childNodes)
5504            .filter((node) => node.nodeType === Node.TEXT_NODE)
5505            .map((node) => node.textContent.trim().replace(/\s+/g, ""))
5506            .join("");
5507          const winnerId = winnerIdText;
5508          if (winnerId === userInput) {
5509            item.classList.add("cmp-lottery-result__winner");
5510            checkAndRemoveClass(lotteryTopBlock,"cmp-lottery-result__error");
5511            exactMatched = true;
5512            winMessage.style.display = "block";
5513            defaultMessage.style.display="none";
5514            if (winnerIdSpan && winnerId.length >= 2) {
5515                winnerIdSpan.textContent = winnerId.substring(0, 2) + " " + winnerId.substring(2);
5516             }
5517            prizeDetailsSpan.textContent = assignPrizeDetailsSpanContent(item);
5518          }
5519        });
5520
5521        if (!exactMatched && /^\S+\s?\d{6}$/.test(userInput)) {
5522          const last4 = userInput.slice(-4);
5523          resultItems.forEach((item) => {
5524            const winnerIdText = Array.from(item.childNodes)
5525              .filter((node) => node.nodeType === Node.TEXT_NODE)
5526              .map((node) => node.textContent.trim().replace(/\s+/g, ""))
5527              .join("");
5528            if (winnerIdText === last4) {
5529              item.classList.add("cmp-lottery-result__winner");
5530              checkAndRemoveClass(lotteryTopBlock,"cmp-lottery-result__error");
5531              winMessage.style.display = "block";
5532              defaultMessage.style.display="none";
5533              last4Match = true;
5534               if (winnerIdSpan && winnerIdText.length >= 2) {
5535                winnerIdSpan.textContent = userInput.substring(0, 2) + " " + userInput.substring(2);
5536             }
5537              prizeDetailsSpan.textContent = assignPrizeDetailsSpanContent(item);
5538            }
5539          });
5540        }
5541        if (!exactMatched && !last4Match) {
5542          checkAndRemoveClass(lotteryTopBlock,"cmp-lottery-result__error");
5543          loseMessage.style.display = "block";
5544          defaultMessage.style.display="none";
5545          checkAndRemoveClass(item,"cmp-lottery-result__winner");
5546        }
5547      } else {
5548        resetMessages();
5549        defaultMessage.style.display="block";
5550        resultItems.forEach((item) => {
5551          checkAndRemoveClass(item,"cmp-lottery-result__winner")
5552        });
5553        lotteryTopBlock.classList.add("cmp-lottery-result__error");
5554      }
5555    } catch (error) {
5556      console.log(error);
5557    }
5558  }
5559
5560  searchBtn?.addEventListener("click", performSearch);
5561
5562  inputField?.addEventListener("keyup", function (e) {
5563    if (e.key === "Enter") {
5564      performSearch();
5565    }
5566  });
5567  inputField?.addEventListener("focus", function (e) {
5568    inputField.placeholder = "";
5569  });
5570  inputField?.addEventListener("blur", function (e) {
5571    inputField.placeholder = originalPlaceholder;
5572  });
5573  inputField?.addEventListener("input", function (e) {
5574    this.value = this.value.replace(/\s+/g, "").substring(0, 8);
5575    if (this.value == "") {
5576      winMessage.style.display = "none";
5577      loseMessage.style.display = "none";
5578      defaultMessage.style.display="block";
5579      resultItems.forEach((item) => {
5580        checkAndRemoveClass(item,"cmp-lottery-result__winner")
5581      });
5582      checkAndRemoveClass(lotteryTopBlock, "cmp-lottery-result__error");
5583    }
5584  });
5585});
5586
5587//helper function to remove winner or error classes
5588function checkAndRemoveClass(element, className) {
5589  if (element.classList.contains(className)) {
5590    element.classList.remove(className);
5591  }
5592}
5593
5594//helper function to set the text content for the prize details message
5595function assignPrizeDetailsSpanContent(item) {
5596  let parentUl = item.parentElement;
5597  let prizeParagraph = parentUl.previousElementSibling;
5598  while (prizeParagraph) {
5599    if (
5600      prizeParagraph.tagName === "P" &&
5601      prizeParagraph.classList.contains("cmp-lottery-result__item-title")
5602    ) {
5603      const prizeNameAndAmount = prizeParagraph.innerText;
5604      const [, prizeAmount] = prizeNameAndAmount.split("Rs :");
5605      return "Rs :" + prizeAmount;
5606    }
5607    prizeParagraph = prizeParagraph.previousElementSibling;
5608  }
5609  return "";
5610}
5611
5612/**
5613 * jQuery Unveil
5614 * A very lightweight jQuery plugin to lazy load images
5615 * http://luis-almeida.github.com/unveil
5616 *
5617 * Licensed under the MIT license.
5618 * Copyright 2013 Luís Almeida
5619 * https://github.com/luis-almeida
5620 */
5621
5622;(function($) {
5623
5624  $.fn.unveil = function(threshold, callback) {
5625
5626    var $w = $(window),
5627        th = threshold || 0,
5628        retina = window.devicePixelRatio > 1,
5629        attrib = retina? "data-src-retina" : "data-src",
5630        images = this,
5631        loaded;
5632
5633    this.one("unveil", function() {
5634      var source = this.getAttribute(attrib);
5635      source = source || this.getAttribute("data-src");
5636      if (source) {
5637        this.setAttribute("src", source);
5638        if (typeof callback === "function") callback.call(this);
5639      }
5640    });
5641
5642    function unveil() {
5643      var inview = images.filter(function() {
5644        var $e = $(this);
5645        if ($e.is(":hidden")) return;
5646
5647        var wt = $w.scrollTop(),
5648            wb = wt + $w.height(),
5649            et = $e.offset().top,
5650            eb = et + $e.height();
5651
5652        return eb >= wt - th && et <= wb + th;
5653      });
5654
5655      loaded = inview.trigger("unveil");
5656      images = images.not(loaded);
5657    }
5658
5659    $w.on("scroll.unveil resize.unveil lookup.unveil", unveil);
5660
5661    unveil();
5662
5663    return this;
5664
5665  };
5666
5667})(window.jQuery || window.Zepto);
5668
5669$(() => {
5670  try {
5671    getDeviceType();
5672  } catch (error) {
5673    console.error('Error while getting device type:', error);
5674  }
5675});
5676
5677$(window).on("orientationchange", (event) => {
5678  getDeviceType();
5679});
5680
5681const getDeviceType = () => {
5682  const docWidth = $(window).width();
5683  if (docWidth > 991) {
5684    displayImages("web");
5685  } else if (575 < docWidth  && docWidth <= 991) {
5686    displayImages("tab");
5687  } else {
5688    displayImages("mob");
5689  }
5690};
5691
5692const displayImages = (dType) => {
5693  const imageLength = $("img.lazyload").length;
5694  const imageDomain = $("#websiteImageDomain").val() || "";	
5695  for (let i = 0; i < imageLength; i++) {
5696    let attrFind = $($("img.lazyload")[i]).attr(`data-${dType}src`);   
5697
5698    if (attrFind) {
5699      attrFind = `${imageDomain}${attrFind}`;
5700      $($("img.lazyload")[i]).attr("data-src", `${attrFind}`);
5701    } else {
5702      console.error("Error in LazyLoading Images");
5703    }
5704  }
5705  if($("button.cmp-header__section-nav").length > 0){
5706    document.querySelector("button.cmp-header__section-nav").addEventListener("click",function(){
5707      document.querySelectorAll(".cmp-mega-menu__body img.lazyload").forEach(lazyImg =>{
5708        let imgPath = lazyImg.dataset.src;
5709        if(imgPath){
5710          lazyImg.src = imgPath;
5711          lazyImg.classList.remove("lazyload");
5712        }
5713      })
5714    })
5715  }
5716
5717
5718  $(".lazyload").unveil();
5719};
5720document.addEventListener("DOMContentLoaded", (event) => {
5721	try {
5722	  document.querySelectorAll('.xf-cont-lazy:not(.cont-onclick), .mm-component-cont-lazy').forEach(element => {
5723		let observer = revampHeadCustomutils.observeElementIntersection(element,function(){lazyloadHandler(element)},false);
5724		if(element){observer.observe(element)}
5725	  });
5726	  
5727	} catch (error) {
5728		console.log("error while lazyloading the component",error)
5729	}
5730});
5731document.addEventListener("DOMContentLoaded", (event) => {
5732	try {
5733		document.querySelectorAll('.cont-onload').forEach(element => {
5734		lazyloadHandler(element)
5735		});
5736		
5737	} catch (error) {
5738		console.log("error while listcontainer onload",error)
5739	}
5740});
5741function processLazyImages(tempEle) {
5742	tempEle.documentElement.querySelectorAll(".lazyload").forEach(lazyLoadItem=>{
5743			let lazyLoadItemSrc;
5744			if(screen.width>=991){
5745				lazyLoadItemSrc=lazyLoadItem.dataset.websrc;
5746			}
5747			else if (screen.width<991 & screen.width>=575){
5748				lazyLoadItemSrc=lazyLoadItem.dataset.tabsrc;
5749			}
5750			else{
5751				lazyLoadItemSrc=lazyLoadItem.dataset.mobsrc;
5752			}
5753			if(lazyLoadItemSrc){
5754				lazyLoadItem.classList.remove("lazyload");
5755				lazyLoadItem.src = lazyLoadItemSrc;
5756			}
5757	});
5758}
5759
5760
5761function initializeLazySliders(element) {
5762	const sliderConfigs = [
5763		{ selector: ".story-slider-block__four-story-banner .cmp-story-list--slider", handler: () => utils.bannerfourstorySlider() },
5764		{ selector: ".cmp-story-list--single-slider, .stories-promo-block .cmp-story-list--slider", handler: () => utils.singleSlider() },
5765		{ selector: ".visual-stories-block .cmp-story-list--slider, .shots-stories-block .cmp-story-list--slider, .story-our-serivces-block .cmp-story-list--slider, .following-topics-block .cmp-story-list--slider", handler: () => utils.fourClmSlider() },
5766		{ selector: ".story-multimedia-list-block .cmp-story-list--slider", handler: () => utils.threeClmSlider() },
5767		{ selector: ".story-slider-block--3 .cmp-story-list--slider", handler: () => utils.leftClmSlider() },
5768		{ selector: ".cmp-story-list__img-slider", handler: () => utils.imageBlockSlider() },
5769		{ selector: ".visual-stories-block .cmp-story-list--slider, .shots-stories-block .cmp-story-list--slider", handler: () => utils.vslShrtsSlider() },
5770		{ selector: ".prm-shorts-block-slider", handler: () => utils.premiumShortslider() },
5771		{ selector: ".prm-video-block-slider", handler: () => utils.premiumVideoslider() },
5772		{ selector: ".prm-featured-block-slider", handler: () => utils.PremiumFeaturedSlider() },
5773		{ selector: ".cmp-editable-banner--slider, .editable-banner--text-only .cmp-story-list--slider", handler: () => utils.bannerSlider() },
5774		{ selector: ".cartooncarousel", handler: () => revampCustomutils.cartoonSlider() },
5775		{ selector: ".mm-game-block .cmp-story-list--slider", handler: () => revampCustomutils.gameSlider() },
5776		{ selector: ".single-common-slider", handler: () => initiateSlidersAndWidgets() },
5777		{ selector: ".cmp-article-slider__large", handler: () => revampCustomutils.articleSlider() },
5778		{ selector: ".cmp-simple-slider-block__main", handler: () => revampCustomutils.artcleSimpleslider() },
5779		{ selector: ".story-card-list-block .cmp-story-list--slider", handler: () => revampCustomutils.storyCardSlickSlider() }
5780	];
5781
5782	sliderConfigs.forEach(config => {
5783		if (element.querySelector(config.selector)) {
5784			config.handler();
5785		}
5786	});
5787}
5788
5789function initializeLazyComponents(element) {
5790	const componentConfigs = [
5791		{ selector: ".day-in-picture-block .cmp-story-list__title", handler: () => utils.daypitcurecontent() },
5792		{ selector: ".score-card-block", handler: () => utils.scorecardwidth() },
5793		{ selector: ".cmp-story-list__control-btn--more-menu", handler: () => utils.storylistMore() },
5794		{ selector: ".cmp-score-card__golBy", handler: () => scorcardGoalinfo() },
5795		{ selector: ".moreInarticle-story-block", handler: () => revampCustomutils.listShowMore() },
5796		{ selector: ".cmp-video-block__icon-top", handler: () => revampCustomutils.videoPlayer() },
5797		{ selector: ".mmscoreboarditem", handler: () => revampCustomutils.mmScoreBoardDateTab() },
5798		{ selector: ".cmp-list-gallery", handler: () => revampCustomutils.articleGallery() },
5799		{ selector: ".cmp-gallery-block", handler: () => revampCustomutils.premiumImageSlideShow() },
5800		{ selector: "#vuukleComment", handler: () => revampCustomutils.vuukleComment() },
5801		{ selector: "div.cmp-story-list__component-slot-in", handler: () => revampCustomutils.indepthListHide() },
5802		{ selector: ".rprtr-item-sharebtn", handler: () => revampCustomutils.reportersShare() },
5803		{ selector: ".lclExplore__nav", handler: () => utils.exploreTab() }
5804	];
5805
5806	componentConfigs.forEach(config => {
5807		if (element.querySelector(config.selector)) {
5808			config.handler();
5809		}
5810	});
5811}
5812
5813function handleLazySpecialCases(element) {
5814			if(element.querySelector(".moreInarticle-story-block") || element.querySelector(".story-slider-block.story-card-list-block") || element.querySelector(".cmp-video-list-block")){
5815				if(typeof videoViewUpdate != 'undefined'){
5816					videoViewUpdate();
5817				}
5818			}
5819			
5820			
5821			if(element.querySelector(".cmp-channel-block__nav")){
5822				calcWidth2();
5823			}
5824			if (checkMCookie("premium_token") && typeof handleAdReplace === 'function') {
5825				handleAdReplace(element);
5826			}
5827			if(element.querySelector(".story-list-block.prm-all-story-widget")){
5828				bindAllStoriesLazy();
5829			}
5830			
5831			// For saved icons event handler register and indicators setting
5832			if(typeof addSaveItemsEventListeners === "function"){
5833				addSaveItemsEventListeners();
5834				let savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
5835				activateSavedArticlesOnLoad(savedData["addedIds"],"add");
5836			}
5837
5838			if(element.querySelector('.cmp-market-rates__in')){
5839				if(typeof populateCommodityValues != 'undefined'){
5840					populateCommodityValues();
5841				}
5842			}
5843
5844			//To remove the experience fragment incase it has no ads for premium users.
5845
5846			$(".mm-col-blk-3 .experiencefragment .cmp-container>.ad-premiumuser,.right-component-slot .experiencefragment .cmp-container>.ad-premiumuser").each(function (i, e) { 
5847				if (!$(e).height()) {
5848					$(e).closest(".experiencefragment").remove();
5849				}
5850			});
5851			
5852			$(".article-body__aside .cmp-container>.ad-premiumuser").each(function (i, e) { 
5853				if (!$(e).height()) {
5854					$(e).closest(".ad-premiumuser").remove();
5855				}
5856			});			
5857}
5858
5859function lazyloadHandler(element){
5860	
5861	const url = element.getAttribute('data-lazy-url');
5862	let scriptsEval = document.createElement("div");
5863	let tempEle = document.createElement
5864	if(url){
5865		const xhr = new XMLHttpRequest();
5866		xhr.open('GET', url, true);
5867		xhr.onload = () => {
5868		if (xhr.status >= 200 && xhr.status < 300) {
5869			scriptsEval = new DOMParser().parseFromString(xhr.responseText, "text/html");
5870			tempEle = new DOMParser().parseFromString(xhr.responseText, "text/html");
5871			tempEle.documentElement.querySelectorAll("script").forEach(scripts=>{
5872				if(scripts.type!="application/json" && scripts.type!="application/ld+json"){
5873					scripts.remove();
5874				}
5875			});
5876			processLazyImages(tempEle);
5877			
5878			element.innerHTML = tempEle.documentElement.innerHTML;
5879			scriptsEval.documentElement.querySelectorAll("script").forEach(scripts=>{
5880				if(scripts.type!="application/json" && scripts.type!="application/ld+json"){
5881					eval(scripts.innerHTML.trim());
5882				}                                                            	
5883			});
5884			element.classList.remove("cont-initial");
5885			element.querySelectorAll('.xf-cont-lazy:not(.cont-onclick), .mm-component-cont-lazy').forEach(element => {
5886				let observer = revampHeadCustomutils.observeElementIntersection(element,function(){lazyloadHandler(element)},false);
5887				if(element){observer.observe(element)}
5888			});
5889
5890			initializeLazySliders(element);
5891			initializeLazyComponents(element)
5892			handleLazySpecialCases(element);
5893			
5894			 
5895		} else {
5896			console.error(`Request failed with status ${xhr.status}`);
5897		}
5898		};
5899		xhr.onerror = () => {
5900		console.error('Network error occurred');
5901		};
5902		try {
5903		xhr.send();
5904		} catch (error) {
5905		console.error('An error occurred during the request:', error);
5906		}
5907	}
5908}
5909
5910function bindAllStoriesLazy() {
5911	try {
5912	  const AllStoriesCom = document.querySelector('.story-list-block.prm-all-story-widget');
5913	  const AllStoriesOuter = AllStoriesCom.closest(".mm-component-cont-lazy");
5914	  const AllStoriesUl = AllStoriesCom.querySelector('.cmp-story-list');
5915	  const dataPerPage = AllStoriesCom.getAttribute("data-perpage");
5916	  const dataMaxcount = AllStoriesCom.getAttribute("data-maxcount");
5917	  const maxIteration = Math.ceil(dataMaxcount/dataPerPage);
5918      let currentPage = 1; 
5919      let isLoading = false; 
5920	  let lastLi = AllStoriesUl.lastElementChild;	
5921	  let itemsWithTimestamp = AllStoriesUl.querySelectorAll(":scope > li.cmp-story-list__item[data-timestamp]");
5922	  let dataTimestamp = itemsWithTimestamp.length > 0 ? itemsWithTimestamp[itemsWithTimestamp.length - 1].getAttribute("data-timestamp")     : null;
5923	  let lastArticleId = itemsWithTimestamp.length > 0 ? itemsWithTimestamp[itemsWithTimestamp.length - 1].querySelector(".cmp-story-list__item-in").getAttribute("data-itemid") : null;
5924		let observer = revampHeadCustomutils.observeElementIntersection(lastLi,function(){loadNextSetStories()},false);
5925		if(lastLi){observer.observe(lastLi)}
5926	  function loadNextSetStories() {
5927        if (isLoading) return; 
5928		isLoading = true;
5929		
5930		if(currentPage < maxIteration){
5931			AllStoriesCom.insertAdjacentHTML('beforeend', "<div class='xf-cont-lazy cont-initial'></div>");
5932			const xhr = new XMLHttpRequest();
5933			let lazyAllStoryUrl = AllStoriesOuter?.getAttribute("data-lazy-url");
5934			let esiExt = ".esi.html"
5935			if(lazyAllStoryUrl == null)
5936			{
5937				let authorUrl = new URL(window.location.href);
5938				lazyAllStoryUrl = AllStoriesCom.getAttribute("data-nextpage");
5939				if(authorUrl.searchParams.has('wcmmode')){					
5940					esiExt = ".html?wcmmode=disabled";
5941				}
5942			}
5943			let splitPath = "";
5944			let initPath = "";
5945			if(lazyAllStoryUrl.includes(".esi.")){
5946				splitPath = lazyAllStoryUrl.split(".esi.");
5947				initPath = splitPath[0];		    
5948			}
5949			else{
5950				splitPath = lazyAllStoryUrl.split(".html");
5951				initPath = splitPath[0];
5952			}		
5953			
5954			const nextPageUrl = `${initPath}.${dataTimestamp}.${currentPage }.${lastArticleId}.moreallstories${esiExt}`;
5955	
5956			xhr.open('GET', nextPageUrl, true);
5957	
5958			xhr.onload = function () {
5959
5960				let config = { AllStoriesUl, observer, lastLi, itemsWithTimestamp, dataTimestamp, lastArticleId, currentPage, nextPageUrl, isLoading };
5961				 
5962				({ observer, lastLi, itemsWithTimestamp, dataTimestamp, lastArticleId, currentPage, isLoading } = handleNextResponse(xhr, config));
5963
5964			};
5965	
5966			xhr.onerror = function () {
5967				console.error('An error occurred while loading the next page.');
5968				isLoading = false;
5969			};
5970	
5971			xhr.send();
5972		}
5973		
5974        
5975		}
5976	  
5977	} catch (error) {
5978		console.log("error while lazyloading the component",error)
5979	}
5980	
5981
5982	function handleNextResponse(xhr, config) {
5983		let { AllStoriesUl, observer, lastLi, itemsWithTimestamp, dataTimestamp, lastArticleId, currentPage, nextPageUrl, isLoading } = config;
5984		if (xhr.status === 200) {
5985			let tempDiv = document.createElement('div');
5986			tempDiv.innerHTML = xhr.responseText;
5987			tempDiv.querySelectorAll(".lazyload").forEach(lazyLoadItem => {
5988				let lazyLoadItemSrc;
5989				if (screen.width >= 991) {
5990					lazyLoadItemSrc = lazyLoadItem.dataset.websrc;
5991				}
5992				else if (screen.width < 991 & screen.width >= 575) {
5993					lazyLoadItemSrc = lazyLoadItem.dataset.tabsrc;
5994				}
5995				else {
5996					lazyLoadItemSrc = lazyLoadItem.dataset.mobsrc;
5997				}
5998				if (lazyLoadItemSrc) {
5999					lazyLoadItem.classList.remove("lazyload");
6000					lazyLoadItem.src = lazyLoadItemSrc;
6001				}
6002			});
6003
6004			let Ulnext = tempDiv.querySelector('ul');
6005			Ulnext.querySelectorAll('.xf-cont-lazy:not(.cont-onclick), .mm-component-cont-lazy').forEach(element => {
6006				let observer = revampHeadCustomutils.observeElementIntersection(element, function () { lazyloadHandler(element); }, false);
6007				if (element) { observer.observe(element); }
6008			});
6009			let Lilist = Ulnext.querySelectorAll(':scope > li');
6010			Lilist.forEach((li) => {
6011				AllStoriesUl.appendChild(li);
6012			});
6013			//Registers the saved icon event handler and sets up the saved icon indicator for infinite scroll in All Stories
6014			if(typeof addSaveItemsEventListeners === "function"){
6015				addSaveItemsEventListeners();
6016				let savedData = JSON.parse(localStorage.getItem("savedItems") || initData);
6017				activateSavedArticlesOnLoad(savedData["addedIds"],"add");
6018			}
6019			let loader = document.querySelector('.xf-cont-lazy.cont-initial');
6020			loader.parentNode.removeChild(loader);
6021			observer.unobserve(lastLi);
6022			lastLi = AllStoriesUl.lastElementChild;
6023			itemsWithTimestamp = AllStoriesUl.querySelectorAll(":scope > li.cmp-story-list__item[data-timestamp]");
6024			dataTimestamp = itemsWithTimestamp.length > 0 ? itemsWithTimestamp[itemsWithTimestamp.length - 1].getAttribute("data-timestamp") : null;
6025			lastArticleId = itemsWithTimestamp.length > 0 ? itemsWithTimestamp[itemsWithTimestamp.length - 1].querySelector(".cmp-story-list__item-in").getAttribute("data-itemid") : null;
6026
6027			observer = revampHeadCustomutils.observeElementIntersection(lastLi, function () { loadNextSetStories(); }, false);
6028			if (lastLi) { observer.observe(lastLi); }
6029			currentPage++;
6030		} else {
6031			console.error(`Failed to load page: ${nextPageUrl}`);
6032		}
6033		isLoading = false;
6034		return { observer, lastLi, itemsWithTimestamp, dataTimestamp, lastArticleId, currentPage, isLoading };
6035	}
6036};
6037
6038document.addEventListener('DOMContentLoaded', function () {
6039	if(document.querySelector(".story-list-block.prm-all-story-widget")){
6040				bindAllStoriesLazy();
6041	}
6042});
6043
6044document.addEventListener('DOMContentLoaded', function () {
6045	const headerNavButton = document.querySelector('.cmp-header__section-nav');
6046	if (headerNavButton) {
6047		setTimeout(hamburgerLazyLoad, 500);
6048	}
6049	function hamburgerLazyLoad() {
6050		const onClickexperienceFragment = document.querySelector('.cont-onclick');
6051		let firstLoad = true;
6052		let megaMenuInitialized = false;
6053		if (headerNavButton && onClickexperienceFragment) {
6054			const element = document.querySelector('.xf-cont-lazy.cont-onclick');
6055			if (element) {
6056				const url = element.getAttribute('data-lazy-url');
6057				if (url) {
6058					const xhr = new XMLHttpRequest();
6059					xhr.open('GET', url, true);
6060					xhr.onload = () => {
6061						if (xhr.status >= 200 && xhr.status < 300) {
6062							const tempEle = new DOMParser().parseFromString(xhr.responseText, 'text/html');
6063							tempEle.documentElement.querySelectorAll(".lazyload").forEach(lazyLoadItem => {
6064								let lazyLoadItemSrc;
6065								if (screen.width >= 991) {
6066									lazyLoadItemSrc = lazyLoadItem.dataset.websrc;
6067								} else if (screen.width < 991 && screen.width >= 575) {
6068									lazyLoadItemSrc = lazyLoadItem.dataset.tabsrc;
6069								} else {
6070									lazyLoadItemSrc = lazyLoadItem.dataset.mobsrc;
6071								}
6072								if (lazyLoadItemSrc) {
6073									lazyLoadItem.classList.remove("lazyload");
6074									lazyLoadItem.src = lazyLoadItemSrc;
6075								}
6076							});
6077							element.innerHTML = tempEle.documentElement.innerHTML;
6078							tempEle.documentElement.querySelectorAll("script").forEach(script => {
6079								if (script.type !== "application/json" && script.type !== "application/ld+json") {
6080									eval(script.innerHTML.trim());
6081								}
6082							});
6083							element.classList.remove("cont-onclick");
6084							const megaMenu = element.querySelector(".cmp-mega-menu");
6085							
6086							// if (element.querySelector(".cmp-mega-menu.active")) {
6087								utils.storylistMore();
6088								mmTab();
6089								megaMenusub();
6090								mmDropDOwn();
6091								mmFilter();
6092								mmFilterSub();
6093								menuMoreAdjust();
6094								calcWidth2();
6095								menuClick();
6096								modalPopup();
6097								searchClick();
6098								headerDropdowns();
6099								headerDropdownsPosition();
6100								revampHeaderutils.signIn();
6101								revampHeaderutils.myAccount();
6102								revampHeaderutils.getUserName();
6103								revampHeadCustomutils.TemplateThemeChange();
6104								revampHeadCustomutils.checkSelectedTheme();
6105								revampHeadCustomutils.changeHeaderBackground();
6106								revampHeadCustomutils.trackUserClickedContent();
6107								revampCustomutils.themeLabelClickListener();
6108							// }
6109
6110						} else {
6111							console.error(`Request failed with status ${xhr.status}`);
6112						}
6113					};
6114
6115					xhr.onerror = () => {
6116						console.error('Network error occurred');
6117					};
6118					xhr.send();
6119				}
6120			}
6121		}else{
6122			mmDropDOwn();
6123		}
6124	}
6125	function mmHamburgerDropDown() {
6126		const megaMenuActive = $('.cmp-mega-menu.active');
6127		megaMenuActive.find('.open-dropDown[data-target]').click(function (e) {
6128			e.preventDefault();
6129			e.stopPropagation();
6130			let $clickedDropdown = $(this);
6131			let dropDownBox = $clickedDropdown.attr('data-target');
6132			let closestMegaMenu = $clickedDropdown.closest('.cmp-mega-menu');
6133			if ($clickedDropdown.hasClass("active")) {
6134				$clickedDropdown.removeClass("active");
6135				closestMegaMenu.find('[data-id=' + dropDownBox + ']').removeClass("active").fadeOut(100);
6136			} else {
6137				closestMegaMenu.find('.open-dropDown').removeClass("active");
6138				closestMegaMenu.find(".mm-drop-down").removeClass("active").fadeOut(100);
6139				$clickedDropdown.addClass("active");
6140				closestMegaMenu.find('[data-id=' + dropDownBox + ']').fadeIn(10).delay(100).addClass("active");
6141			}
6142		});
6143		$(document).on("click", function () {
6144			megaMenuActive.find(".mm-drop-down").removeClass("active").fadeOut(100);
6145			megaMenuActive.find('.open-dropDown').removeClass("active");
6146		});
6147
6148		megaMenuActive.find('.open-dropDown, .mm-drop-down').on("click", function (event) {
6149			event.stopPropagation();
6150		});
6151	}
6152});
6153

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.