PageSourceSearch

https://www.popcarte.com/min/g=cms_js&v=63.js

js popcarte.com collected 2026-10-01 11:26:39 UTC 55,104 bytes, 331 lines download raw bytes

1class Form{static FORM_FIELDS_SELECTOR='input:not([type=hidden]), select, textarea';lightboxMaxWidth=700;init($form){this.$form=$form;if(!($form instanceof Element)){return false;}
2this.initProperties();this.initMessageClosable();this.initEvents();this.initInputHandlers();return true;}
3initProperties(){this.isSubmitting=false;this.ajaxSubmit=false;this.updateFields();this.$formErrorBanner=this.$form.querySelector('.js-form-error-banner');this.updateFormErrorBanner();return true;}
4updateFields(){this.$fields=this.$form.querySelectorAll(Form.FORM_FIELDS_SELECTOR);}
5runInitialValidation(){this.validateForm(false);}
6initInputHandlers(){if(typeof Input=='undefined'){return false;}
7this.input=new Input();return this.input.init(this.$form);}
8initMessageClosable(){this.$formMessage=this.$form.querySelector('.form_message.closable');if(!this.$formMessage){return false;}
9this.$formMessageClose=this.$form.querySelector('.form_message.closable .close');this.$formMessageClose?.addEventListener('click',()=>this.$formMessage.classList.add('hidden'));return true;}
10initEvents(){this.$fields.forEach($field=>{if($field.tagName==='INPUT'&&['text','email','tel','password','search','url','number'].includes($field.type)){const debouncedValidator=debounce(()=>{this.validateField($field);},100);$field.addEventListener('input',debouncedValidator);}
11else{$field.addEventListener('change',()=>{this.validateField($field);});}});this.$form.addEventListener('submit',(e)=>this.onSubmit(e));return true;}
12onSubmit(e){if(this.isSubmitting){e.preventDefault();return false;}
13const isValid=this.validateForm(true);if(!isValid){e.preventDefault();this.blinkFormErrors();return false;}
14this.beforeSubmit();this.isSubmitting=true;if(this.ajaxSubmit){e.preventDefault();}
15return true;}
16beforeSubmit(){}
17validateForm(validateRequired=true){let isValid=true;this.$fields.forEach($field=>{if(!validateRequired&&$field.value.trim()===''){return;}
18if(!this.validateField($field,validateRequired)){isValid=false;}});return isValid;}
19validateField($field,isSubmit=false){if(isSubmit&&$field.hasAttribute('required')&&$field.value.trim()===''){const errorMessage=$field.getAttribute('data-error-required')||'Ce champ est obligatoire.';this.showError($field,errorMessage);return false;}
20if($field.value.trim()!==''){const maxLength=$field.getAttribute('maxlength');if(maxLength&&$field.value.length>parseInt(maxLength)){this.showError($field,'Ce champ ne doit pas dépasser '+maxLength+' caractères.');return false;}}
21this.hideError($field);return true;}
22showError($field,errorMessage){const $formGroup=$field.closest('.form_group');const $formGroupError=$field.closest('.form_group_c')?.querySelector('.form_group_error');if($formGroup){$formGroup.classList.add('form_error');}
23if($formGroupError){if($formGroupError.hideTimeout){clearTimeout($formGroupError.hideTimeout);$formGroupError.hideTimeout=null;}
24const $existingMsg=$formGroupError.querySelector('.form_message.delete_progress');if($existingMsg){$existingMsg.classList.remove('delete_progress');}
25let $errorMessage=Array.from($formGroupError.querySelectorAll('.form_message.light.error')).find(el=>el.textContent===errorMessage);if(!$errorMessage){$formGroupError.innerHTML='';$errorMessage=document.createElement('div');$errorMessage.className='form_message light error';$errorMessage.textContent=errorMessage;$formGroupError.appendChild($errorMessage);}
26if(typeof lightboxResize==='function'){lightboxResize(this.lightboxMaxWidth);}}
27this.updateFormErrorBanner(true);}
28hideError($field){const $formGroup=$field.closest('.form_group');const $formGroupError=$field.closest('.form_group_c')?.querySelector('.form_group_error');if($formGroup){$formGroup.classList.remove('form_error');}
29if($formGroupError){const $errorMessages=$formGroupError.querySelectorAll('.form_message.light.error');if($errorMessages.length){$errorMessages.forEach($msg=>{$msg.classList.add('delete_progress');});$formGroupError.hideTimeout=setTimeout(()=>{const $pendingDeleteMessages=$formGroupError.querySelectorAll('.form_message.delete_progress');if($pendingDeleteMessages.length){$formGroupError.innerHTML='';}
30$formGroupError.hideTimeout=null;},300);}
31if(typeof lightboxResize==='function'){lightboxResize(this.lightboxMaxWidth);}}
32this.updateFormErrorBanner();}
33updateFormErrorBanner(forceVisible=null){if(!this.$formErrorBanner){return;}
34let shouldShow;if(forceVisible===true){shouldShow=true;}else if(forceVisible===false){shouldShow=false;}else{shouldShow=Boolean(this.$form.querySelector('.form_group.form_error'));}
35if(shouldShow){this.$formErrorBanner.classList.remove('hidden');}else{this.$formErrorBanner.classList.add('hidden');}}
36blinkFormErrors(){const errorGroups=this.$form.querySelectorAll('.form_group.form_error');errorGroups.forEach($group=>{$group.classList.remove('form_error_blink');void $group.offsetWidth;$group.classList.add('form_error_blink');
36if($group.errorBlinkTimeout){clearTimeout($group.errorBlinkTimeout);}
37$group.errorBlinkTimeout=setTimeout(()=>{$group.classList.remove('form_error_blink');$group.errorBlinkTimeout=null;},600);});}};class Input{init($form){this.$form=$form;if(!($form instanceof Element)){return false;}
38this.initTextCounters();this.initInputHandlers();return true;}
39initTextCounters(){const $textCounters=this.$form.querySelectorAll('.text_counter');$textCounters.forEach(element=>{let $textarea=element;let $counter=document.getElementById($textarea.getAttribute('name')+"_counter");if(!$counter)return;const calculateWords=()=>{let textLength=$textarea.value.length;let maxLength=$textarea.getAttribute('maxlength');$counter.textContent=textLength+"/"+maxLength;return textLength>=maxLength;}
40calculateWords();$textarea.addEventListener('input',(e)=>{let $target=e.currentTarget;let counterMaxWords=calculateWords();if(counterMaxWords){$target.parentElement.classList.add('form_error_counter');}else{$target.parentElement.classList.remove('form_error_counter');}});});}
41initInputHandlers(){const inputs=this.$form.querySelectorAll('.text_group input, .text_group textarea');inputs.forEach(element=>{this.initInputHandler(element);});}
42initInputHandler($input){if(!($input instanceof Element)){return false;}
43const $textGroup=$input.closest('.text_group');if(!$textGroup){return false;}
44const events=['focus','blur','input'];events.forEach(eventType=>{$input.addEventListener(eventType,()=>{const isFocused=document.activeElement===$input;const isFilled=Boolean($input.value);const classList=$textGroup.classList;classList.toggle('input_focused',isFocused);classList.toggle('input_filled',isFilled);classList.toggle('input_empty',!isFilled);});});return true;}};var ProductHotFoil=function(){var _this=this;_this.$preview=null;_this.$previewImage=null;_this.maskUrl=null;_this.$mask=null;_this.type=null;_this.colors=null;_this.speed=null;_this.imgWidth=0;_this.imgHeight=0;_this.ctx=null;_this.timer=0;_this.animation_frame_id=null;_this.init=function($preview,type,maskUrl,imageLoaded=true){if($preview.length<1||type==null||typeof window.hotfoil_colors=='undefined'||typeof window.hotfoil_colors[type]=='undefined'){return false;}
45_this.$preview=$preview;_this.type=type;_this.maskUrl=maskUrl;_this.$previewImage=_this.$preview.find('img');_this.colors=window.hotfoil_colors[type];_this.speed=0.02;_this.timer=0;var $oldMask=_this.$preview.find('.hotfoil_mask');if($oldMask.length>0)
46$oldMask.remove();var debug_hotfoil_speed=getURLParam('debug_hotfoil_speed');if(debug_hotfoil_speed!=null&&debug_hotfoil_speed!=''){_this.speed=parseFloat(debug_hotfoil_speed)/100;}
47if(!imageLoaded){_this.callbackImageLoaded();return true;}
48const $img=_this.$previewImage.get(0);if($img.complete){_this.callbackImageLoaded();}else{$img.addEventListener('load',_this.callbackImageLoaded)}
49return true;};_this.callbackImageLoaded=function(){if(_this.$mask)
50return;var mask=document.createElement('img');mask.src=_this.maskUrl;mask.onload=function(){var imagecanvas=document.createElement('canvas');_this.ctx=imagecanvas.getContext('2d');_this.imgWidth=_this.$previewImage.width();_this.imgHeight=_this.$previewImage.height();imagecanvas.width=_this.imgWidth;imagecanvas.height=_this.imgHeight;var previewImagePosition=_this.$previewImage.position();imagecanvas.style.position="absolute";imagecanvas.style.top=previewImagePosition.top+"px";imagecanvas.style.left=previewImagePosition.left+"0px";imagecanvas.style.zIndex="3";imagecanvas.className='hotfoil_mask';_this.$previewImage.after(imagecanvas);_this.ctx.drawImage(mask,0,0,_this.imgWidth,_this.imgHeight);var debug_no_mask=getURLParam('debug_hotfoil_no_mask');if(debug_no_mask==null||debug_no_mask==''){_this.ctx.globalCompositeOperation='source-atop';}
51_this.$mask=_this.$preview.find('.hotfoil_mask');_this.start();};};_this.start=function(){var x=Math.sin(_this.timer)*_this.imgWidth;var lingrad=_this.ctx.createLinearGradient(x,_this.imgHeight,_this.imgWidth+x,0);$.each(_this.colors,function(idx,color){lingrad.addColorStop(color.pos,color.color);});_this.ctx.fillStyle=lingrad;_this.ctx.fillRect(0,0,_this.imgWidth,_this.imgHeight);_this.timer=_this.timer+_this.speed;_this.animation_frame_id=window.requestAnimationFrame(_this.start);};_this.reInit=function(){if(_this.$preview==null||_this.$preview.length==0)
52return false;if(_this.animation_frame_id!=null)
53window.cancelAnimationFrame(_this.animation_frame_id);return _this.init(_this.$preview,_this.type,_this.maskUrl);};_this.resize=function(){if(_this.$mask==null||_this.$mask.length==0)
54return false;return _this.reInit();};};;var ProductAnimation=function(){var _this=this;_this.$container=null;_this.format=null;_this.$animation=null;_this.callbacksStart=$.Callbacks();_this.callbacksEnd=$.Callbacks();_this.endAnimationTimeOutToken=null;_this.endAnimationDelay=5000;_this.endAnimationStart=_this.endAnimationDelay;_this.endAnimationRemaining=_this.endAnimationDelay;_this.uniqid=(new Date().getTime()).toString(16);_this.init=function($container,previewHTML,format,envelope,envelope_inside,stamp,orientation,restartOnClick){if($container.length<1||previewHTML==''||format==null){return false;}
55restartOnClick=(typeof restartOnClick!='undefined'&&!restartOnClick)?false:true;_this.$container=$container;_this.format=format;if(previewHTML!=='prebuild'){orientation=(typeof orientation!="undefined"&&orientation==='portrait')?orientation:'';const restartOnClickClass=(restartOnClick)?'restart_on_click':'';let animationHTML='<div class="pa-cc"><div class="pa-c f_'+_this.format+' '+restartOnClickClass+' '+orientation+' env_color_'+envelope+' env_inside_'+envelope_inside+' stamp_'+stamp+'">';animationHTML+='<div class="pa-env">';animationHTML+='<div class="pa-env-fold"><div class="pa-env-fold-extern"></div><div class="pa-env-fold-intern"></div></div>';animationHTML+='<div class="pa-env-back"></div>';if(previewHTML!=='none'){animationHTML+='<div class="pa-img">';animationHTML+=previewHTML;animationHTML+='</div>';}
56animationHTML+='<div class="pa-env-inner"></div>';animationHTML+='<div class="pa-env-front"></div>';animationHTML+='</div>';animationHTML+='</div>';animationHTML+='</div>';_this.$container.html(animationHTML);}
57_this.$animation=_this.$container.find('.pa-c');var $img=_this.$container.find('.pa-img img');$img.removeAttr('width').removeAttr('height').removeAttr('style');if(restartOnClick){_this.$animation.find('.pa-env').click(function(){_this.start();});}
58return true;};
58_this.start=function(){if(_this.isStarted()&&!_this.isPaused()){_this.stop();}
59window.lazySizesConfig.pause=true;_this.$animation.addClass('started');_this.endAnimationStart=Date.now();clearTimeout(_this.endAnimationTimeOutToken);_this.callbacksStart.fire();_this.endAnimationTimeOutToken=setTimeout(function(){_this.callbacksEnd.fire();window.lazySizesConfig.pause=false;},_this.endAnimationRemaining);};_this.reset_animation=function(){var el=_this.$animation[0];el.style.animation='none';el.offsetHeight;el.style.animation=null;};_this.isStarted=function(){return _this.$animation.hasClass('started');};_this.stop=function(){clearTimeout(_this.endAnimationTimeOutToken);_this.endAnimationStart=_this.endAnimationDelay;_this.endAnimationRemaining=_this.endAnimationDelay;_this.$animation.removeClass('started pause');_this.reset_animation();};_this.restart=function(){_this.stop();_this.start();};_this.pause=function(){clearTimeout(_this.endAnimationTimeOutToken);_this.endAnimationRemaining-=Date.now()-_this.endAnimationStart;_this.$animation.addClass('pause');}
60_this.isPaused=function(){return _this.$animation.hasClass('pause');};_this.resume=function(){_this.start();_this.$animation.removeClass('pause');}
61_this.remove=function(){_this.$container=null;_this.image_front_url=null;_this.format=null;_this.$animation=null;_this.callbacksStart=null;_this.callbacksEnd=null;clearTimeout(_this.endAnimationTimeOutToken);};_this.callback_start=function(fnct){_this.callbacksStart.add(fnct);};_this.callback_end=function(fnct){_this.callbacksEnd.add(fnct);};_this.changeEnvelope=function(envelope){_this.$animation.removeClassPrefix('env_color_').addClass('env_color_'+envelope);};_this.changeEnvelopeInside=function(envelopeInside){_this.$animation.removeClassPrefix('env_inside_').addClass('env_inside_'+envelopeInside);};_this.changeStamp=function(stamp){_this.$animation.removeClassPrefix('stamp_').addClass('stamp_'+stamp);};};;class WishList{init(){if(!this.initProperties())
62return false;return true;}
63initProperties(){this.userIsConnected=!document.body.classList.contains('disconnected');this.items={};const $items=[...document.querySelectorAll('.product_item')].filter($item=>this.getLinkFromItem($item)!==null);for(const $item of $items){this.addItem($item);}
64return true;}
65getLinkFromItem($item){if(!$item){return null;}
66return $item.querySelector('.link_wishlist');}
67addItem($item){const tid=$item.getAttribute('data-tid');const ptid=$item.getAttribute('data-ptid');if(!tid||!ptid)
68return false;const productId=this.getProductId(ptid,tid);const $link=this.getLinkFromItem($item);if(!$link){return false;}
69for(const $objectItem of Object.values(this.items)){for(const $element of $objectItem['$elements']){if($element.isSameNode($item)){return false;}}}
70const wished=this.isLinkWished($link);if(!objectHasProperty(this.items,productId)){const productData=this.getProductDataFromLink($item);if(!productData){return false;}
71this.items[productId]={'$elements':[$item],'$links':[$link],'data':productData,'wished':wished}}else{this.items[productId]['$elements'].push($item);this.items[productId]['$links'].push($link);this.items[productId]['wished']=wished;}
72if(!wished){const paramAddWish=getURLParam('add_wish');if(typeof paramAddWish!='undefined'&&paramAddWish===this.items[productId]['data']['product_id']){this.add(this.items[productId]);}}
73this.initLinkEvent($link);return true;}
74getProductDataFromLink($item){if(!$item){return null;}
75const data={};const tid=$item.getAttribute('data-tid');const ptid=$item.getAttribute('data-ptid');if(!tid||!ptid){return null;}
76data['ptid']=ptid;data['tid']=tid;data['product_id']=this.getProductId(ptid,tid);let name=$item.getAttribute("data-name")??null;if(!name){name=$item.querySelector('.product_name')?$item.querySelector('.product_name').innerText:null;}
77if(!name){name=$item.querySelector('.name_text')?$item.querySelector('.name_text').innerText:null;}
78if(!name){return null;}
79data['product_name']=name;data['product_format']=$item.getAttribute('data-format')??'';data['product_orientation']=$item.getAttribute('data-orientation')??'';data['product_url']=this.getProductUrl($item,data['product_format']);data['category']=$item.getAttribute('data-category')??'';data['occasion-name']=$item.getAttribute('data-occasion-name')??'';data['suboccasion-name']=$item.getAttribute('data-suboccasion-name')??'';const $preview=$item.querySelector('.product_preview');if($preview){data['rounded_corners']=($preview&&$preview.classList.contains('rounded_corners'))?1:0;const $img=$preview.querySelector(".image img");if($img){data['product_image_url']=$img.getAttribute('src');if(srcIsPlaceHolder(data['product_image_url'])){data['product_image_url']=$img.getAttribute('data-src');}}}
80return data;}
81initLinkEvent($link){$link.addEventListener('click',(e)=>this.onLinkClick(e));}
82isLinkWished($link){return $link.classList.contains('wished');}
83onLinkClick(e){const $link=e.currentTarget;const wished=this.isLinkWished($link);const wishListClassNamePrefix='link_wishlist_';const wishListClassWithIds=Array.from($link.classList).find(className=>className.includes(wishListClassNamePrefix));if(!wishListClassWithIds){return false;}
84const productIds=wishListClassWithIds.substring(wishListClassNamePrefix.length).split('_');
84if(productIds.length<2){return false;}
85const tid=productIds[0];const ptid=productIds[1];const productId=this.getProductId(ptid,tid);const item=this.getItem(productId);if(!item){return false;}
86if(wished){this.remove(item);}else{this.add(item);}
87return true;}
88getItem(productId){if(objectHasProperty(this.items,productId))
89return this.items[productId];else
90return null;}
91getProductId(ptid,id){return id+'_'+ptid;}
92add(item){if(!this.userIsConnected){showLoginLightBox(null,updateURLParameter(document.location.href,'add_wish',item.data['product_id']));}else{for(const $link of item['$links']){$link.classList.add('wished');}
93$.ajax({type:"POST",url:"/wishlist.php",contentType:"application/x-www-form-urlencoded;charset=utf-8",data:{action:"add",wish:[item.data]}}).done((msg)=>{const wishlist=$.parseJSON(msg);this.updateItems(wishlist);sendFacebookEvent('track','AddToWishlist',{"content_name":item.data['suboccasion-name']+" "+item.data['product_name']});pushEcommerceGa4Event('add_to_wishlist',{currency:'EUR','items':[getEcommerceTemplateItem(item.data['product_name'],item.data['ptid'],item.data['tid'],0,item.data['occasion-name'],item.data['suboccasion-name'],item.data['category'])]});if(document.body.classList.contains('page-product_list')){pushDataLayer({'event':'catalog_page','action_type':'add_to_favorite',});}});}}
94remove(item){for(const $link of item['$links']){$link.classList.remove('wished');}
95$.ajax({type:"POST",url:"/wishlist.php",data:{action:"remove",product_id:item.data['product_id']}}).done((msg)=>{const wishlist=$.parseJSON(msg);this.updateItems(wishlist);});}
96updateItems(wishlist){if(!wishlist){return false;}
97const wishs=objectHasProperty(wishlist,'wishs')?wishlist['wishs']:[];for(const item of Object.values(this.items)){const wished=wishs.some(el=>item.data.product_id===el.product_id);for(const $link of item['$links']){$link.classList.toggle('wished',wished);}}}
98getProductUrl($item,format){const $productLink=$item.querySelector('.product_link');let currentProductUrl=$productLink.getAttribute('href')??'';if(!currentProductUrl){currentProductUrl=decodePofl($productLink.getAttribute('data-pofl'))}
99currentProductUrl=currentProductUrl.replace(/(\?|&)(virtuel=1|format=\d+)/g,'')+'?format='+format;if(window.location.href.includes('virtuel')){currentProductUrl+='&virtuel=1'}
100return currentProductUrl;}}
101$(document).ready(function(){const wishlist=new WishList();
101const initialized=wishlist.init();if(initialized)
102window.pop_wishlist=wishlist;});;class Slider{init($container,swiperProperties={},carouselMode=true,isFullWidth=false){if(!this.initProperties($container,swiperProperties,carouselMode,isFullWidth))
103return false;return true;}
104initProperties($container,swiperProperties={},carouselMode=true,isFullWidth=false){this.$container=$container;if(!this.$container.length)
105return false;if(typeof Swiper=='undefined'){return false;}
106this.carouselMode=carouselMode;this.isFullWidth=isFullWidth;this.$buttonPrev=this.$container[0].querySelector('.button_prev');this.$buttonNext=this.$container[0].querySelector('.button_next');this.swiperProperties=this.getDefaultSwiperProperties();if(typeof swiperProperties==="object"&&swiperProperties!==null){this.swiperProperties={...this.swiperProperties,...swiperProperties};}
107this.initSlider();this.initNavigationVisibility();this.initNavigationFocus();return true;}
108getDefaultSwiperProperties(){const defaultSwiperProperties={...getTouchPadSwipeConfig(this.carouselMode),roundLengths:true,slidesPerView:'auto',navigation:{prevEl:this.$buttonPrev,nextEl:this.$buttonNext,},spaceBetween:this.isFullWidth?0:16,slidesOffsetBefore:this.isFullWidth?0:16,slidesOffsetAfter:this.isFullWidth?0:16,breakpoints:{640:{spaceBetween:this.isFullWidth?0:16,slidesOffsetBefore:0,slidesOffsetAfter:0,},1024:{spaceBetween:this.isFullWidth?0:24,slidesOffsetBefore:0,slidesOffsetAfter:0,},}};if(this.$container[0].querySelector('.swiper-scrollbar')){defaultSwiperProperties.scrollbar={el:this.$container[0].querySelector('.swiper-scrollbar'),hide:false,draggable:true,};}
109return defaultSwiperProperties;}
110initSlider(){this.swiper=new Swiper(this.$container[0],this.swiperProperties);}
111initNavigationVisibility(){this.swiper.on('update',()=>{this.toogleNavigationVisibility();});$(window).resize($.throttle(250,()=>{this.toogleNavigationVisibility();}));}
112initNavigationFocus(){this.$container[0].addEventListener('focusin',(e)=>{const slideEl=e.target.closest('.swiper-slide');if(!slideEl){return;}
113if(this.isSlideFullyVisible(slideEl)){return;}
114const slideIndex=Array.from(this.$container[0].querySelectorAll('.swiper-slide')).indexOf(slideEl);if(slideIndex!==this.swiper.activeIndex){this.swiper.slideTo(slideIndex);}});}
115isSlideFullyVisible(slideEl){const containerRect=this.$container[0].getBoundingClientRect();const slideRect=slideEl.getBoundingClientRect();return slideRect.left>=containerRect.left&&slideRect.right<=containerRect.right;}
116toogleNavigationVisibility(){let navigationVisible=false;if(typeof this.$buttonPrev!='undefined'&&this.$buttonPrev&&!this.$buttonPrev.classList.contains('swiper-button-disabled')){navigationVisible=true;}
117if(typeof this.$buttonNext!='undefined'&&this.$buttonNext&&!this.$buttonNext.classList.contains('swiper-button-disabled')){navigationVisible=true;}
118this.$container[0].classList.toggle('swiper-navigation-visible',navigationVisible);}};class Reviews{init(){if(!this.initProperties())
119return false;this.initEvents();return true;}
120initProperties(){this.$container=$('.block_reviews');if(!this.$container.length){return false;}
121this.$reviews_c=this.$container.find('.review_list');this.$reviews=this.$reviews_c.find('.review');this.$reviewsTogglerBtnC=this.$container.find('.review_toogler_c');this.$reviewsTogglerBtn=this.$container.find('.review_toogler');return true;}
122initEvents(){this.$reviewsTogglerBtn.on('click',()=>this.onReviewsTogglerBtnClick());}
123onReviewsTogglerBtnClick(){this.showFilteredReviews();}
124showFilteredReviews(){this.$reviews_c.height(this.$reviews_c.height());let hasRemainingHiddenReviews=false;this.$reviews.filter('.hidden').each((i,$review)=>{if(i<6){$review.classList.remove('hidden');}else{hasRemainingHiddenReviews=true;}});if(!hasRemainingHiddenReviews){this.$reviewsTogglerBtnC.addClass('hidden');}
125const content=this.$reviews_c[0];this.$reviews_c.height(content.scrollHeight);const transitionendListener=()=>{content.removeEventListener('transitionend',transitionendListener);content.style.height=null;content.style.transition=null;};content.addEventListener('transitionend',transitionendListener);}};
125class BlockTabs extends EventTarget{init($container){this.$container=$container;if(!this.$container){return;}
126this.tabItems=this.$container.querySelectorAll('.tab-item');this.contentContainer=this.$container.querySelector('.tabs-content-container');this.tabContents=this.$container.querySelectorAll('.tab-content');this.headContainer=this.$container.querySelector('.tabs-head-container');this.prevBtn=this.$container.querySelector('.tabs-navigation-btn.prev');this.nextBtn=this.$container.querySelector('.tabs-navigation-btn.next');if(!this.tabItems.length||!this.contentContainer||!this.tabContents.length){return;}
127this.totalTabs=this.tabItems.length;this.visibleTabs=2;this.currentTabIndex=0;this.activeIndex=0;this.updateTabIndexes();this.initEvents();this.initMobileTabsSlider();}
128initEvents(){this.tabItems.forEach((tab,index)=>{tab.addEventListener('click',()=>this.switchTab(index));tab.addEventListener('keydown',(e)=>{if(e.key==='ArrowRight'||e.key==='ArrowLeft'){e.preventDefault();this.handleArrowNavigation(e.key,index);}});});if(this.prevBtn&&this.nextBtn){this.prevBtn.addEventListener('click',()=>{if(!this.prevBtn.classList.contains('disabled')){this.navigateToAdjacentTab('prev');}});this.nextBtn.addEventListener('click',()=>{if(!this.nextBtn.classList.contains('disabled')){this.navigateToAdjacentTab('next');}});}
129window.addEventListener('resize',()=>this.checkMobileTabsSlider());}
130initMobileTabsSlider(){if(this.totalTabs<=2||!this.headContainer||!this.prevBtn||!this.nextBtn){return;}
131this.checkMobileTabsSlider();}
132checkMobileTabsSlider(){if(window.innerWidth<768&&this.totalTabs>2){this.ensureTabIsVisible(this.activeIndex);this.updateTabsNavigation();}else if(this.headContainer){this.headContainer.style.transform='translateX(0)';this.currentTabIndex=0;}}
133navigateToAdjacentTab(direction){let newIndex=this.activeIndex;if(direction==='prev'&&this.activeIndex>0){newIndex=this.activeIndex-1;}else if(direction==='next'&&this.activeIndex<this.totalTabs-1){newIndex=this.activeIndex+1;}else{return;}
134this.switchTab(newIndex);}
135ensureTabIsVisible(index){if(window.innerWidth<768&&this.totalTabs>2){if(index<this.currentTabIndex){this.currentTabIndex=index;}else if(index>=this.currentTabIndex+this.visibleTabs){this.currentTabIndex=index-this.visibleTabs+1;}
136this.updateTabsPosition();this.updateTabsNavigation();}}
137updateTabsPosition(){if(!this.headContainer)return;const slideAmount=this.currentTabIndex*50;this.headContainer.style.transform=`translateX(-${slideAmount}%)`;}
138updateTabsNavigation(){if(!this.prevBtn||!this.nextBtn)return;if(window.innerWidth<768&&this.totalTabs>2){const lastPossibleIndex=this.totalTabs-this.visibleTabs;this.prevBtn.classList.toggle('disabled',this.currentTabIndex<=0);this.nextBtn.classList.toggle('disabled',this.currentTabIndex>=lastPossibleIndex);}else{this.prevBtn.classList.add('disabled');this.nextBtn.classList.add('disabled');}}
139switchTab(index){if(index===this.activeIndex||index<0||index>=this.tabItems.length){return;}
140const isMobile=window.innerWidth<768&&this.totalTabs>2;const isAdjacentTabClick=isMobile&&this.isTabCurrentlyVisible(index)&&Math.abs(index-this.activeIndex)===1;this.ensureTabIsVisible(index);this.tabItems[this.activeIndex].classList.remove('active');this.tabItems[index].classList.add('active');this.tabContents[this.activeIndex].classList.remove('active');this.tabContents[index].classList.add('active');const translateX=index*100;requestAnimationFrame(()=>{this.contentContainer.style.transform=`translateX(-${translateX}%)`;this.tabItems.forEach((tab,i)=>{tab.setAttribute('aria-selected',i===index?'true':'false');tab.setAttribute('tabindex',i===index?'0':'-1');});this.tabContents.forEach((content,i)=>{content.setAttribute('aria-hidden',i===index?'false':'true');});});this.activeIndex=index;this.updateTabIndexes();this.dispatchEvent(new CustomEvent('switch_tab',{detail:{name:this.tabItems[index].innerText}}));if(isAdjacentTabClick){this.slideToShowAdjacentTab(index);}}
141isTabCurrentlyVisible(index){return index>=this.currentTabIndex&&index<this.currentTabIndex+this.visibleTabs;}
142slideToShowAdjacentTab(clickedIndex){const isRightTab=clickedIndex===this.currentTabIndex+1;const isLeftTab=clickedIndex===this.currentTabIndex;if(isRightTab&&this.currentTabIndex+this.visibleTabs<this.totalTabs){this.currentTabIndex++;this.updateTabsPosition();this.updateTabsNavigation();}else if(isLeftTab&&this.currentTabIndex>0){this.currentTabIndex--;this.updateTabsPosition();this.updateTabsNavigation();}}
143handleArrowNavigation(key,currentIndex){let newIndex=currentIndex;if(key==='ArrowRight'){newIndex=currentIndex<this.totalTabs-1?currentIndex+1:0;}else if(key==='ArrowLeft'){newIndex=currentIndex>0?currentIndex-1:this.totalTabs-1;}
144this.switchTab(newIndex);this.tabItems[newIndex].focus();}
145updateTabIndexes(){this.tabItems.forEach((tab,i)=>{tab.setAttribute('tabindex',i===this.activeIndex?'0':'-1');});}};class ProductListSlider extends Slider{getDefaultSwiperProperties(){const defaultSliderProperties=super.getDefaultSwiperProperties();const defaultProductSliderProperties={on:{init:(swiper)=>{const $slides=this.$container.find('.swiper-slide');if(typeof window.pop_wishlist!='undefined'){$slides.each((i,slide)=>{const $productItem=slide.querySelector('.product_item');if($productItem){window.pop_wishlist.addItem($productItem);}});}}}};return{...defaultSliderProperties,...defaultProductSliderProperties};}};class ReadMore{init(){if(!this.initProperties())
146return false;this.initEvents();return true;}
147initProperties(){this.$containers=$('.read_more_c');if(this.$containers.length==0)
148return;this.$showMoreLinks=this.$containers.find('.show_more_link');return true;}
149initEvents(){this.$showMoreLinks.on('click',(e)=>this.onShowMoreLinksClick(e));}
150onShowMoreLinksClick(e){const $showMoreLink=$(e.currentTarget);const $container=$showMoreLink.parents('.read_more_c');$container.addClass('open');$showMoreLink.hide();const $insertContainer=$container.find('p').length?$container.find('p').last():$container;$insertContainer.append(' <span class="show_less_link b u">R&eacute;duire</span>');const $showLessLink=$insertContainer.find('.show_less_link');$showLessLink.on('click',(e)=>this.onShowLessLinkClick(e));}
151onShowLessLinkClick(e){const $showLessLink=$(e.currentTarget);const $container=$showLessLink.parents('.read_more_c');$container.removeClass('open');$showLessLink.remove();const $showMoreLink=$container.find('.show_more_link');$showMoreLink.show();}}
152$(document).ready(function(){window.read_more=new ReadMore();window.read_more.init();});;class CmsBlock{initBlock(cms,$block){this.cms=cms;this.sectionPosition=$block.parents('.page-section').index()+1;this.blockPosition=$block.parents('.cms_block_c').index()+1;this.blockType=$block.data('type');this.blockLayout=$block.data('layout');}
153sendGA4Event(blockName,itemPosition){let itemPositionAction='';if(typeof itemPosition!='undefined'&&itemPosition!==null&&itemPosition!==false){if(!Number.isInteger(itemPosition)||itemPosition<=0){return false;}
154itemPositionAction=`_item-${itemPosition}`;}
155const dataLayer={'event':'merch_cms','action_type':`section-${this.sectionPosition}_block-${this.blockPosition}${itemPositionAction}_${this.blockType}_${this.blockLayout}`,'action_value':blockName};pushDataLayer(dataLayer);}
156getHrefFromLink($link){if($link.hasAttribute('data-pofl')){const pofl=$link.getAttribute('data-pofl');if(pofl){return decodePofl(pofl)??false;}else{return false;}}else if($link.nodeName==='A'){return $link.getAttribute('href')??false;}
157return false;}};class CmsBanner extends CmsBlock{init(cms,$bannerBlock){if(!this.initProperties(cms,$bannerBlock))
158return false;this.initEvents();return true;}
159initProperties(cms,$bannerBlock){this.$container=$bannerBlock;if(this.$container.length===0)
160return;this.initBlock(cms,$bannerBlock);this.$swiperContainer=this.$container.find('.swiper');if(this.$swiperContainer.length>0)
161this.initSwiper();this.$links=this.$container.find('a');return true;}
162initSwiper(){if(!this.$swiperContainer.length)
163return false;const sliderConfig={speed:1000,autoplay:{delay:3000,},roundLengths:true,loop:true,autoplayDisableOnInteraction:false,pagination:{el:this.$swiperContainer.find('.swiper-pagination')[0],clickable:true},};this.slider=new Slider();this.slider.init(this.$swiperContainer,sliderConfig,false,true);}
164initEvents(){this.$links.on('click',(e)=>this.onSlideLinkClick(e));}
165onSlideLinkClick(e){const $link=$(e.currentTarget);let realClickedIndex=0;if(this.slider&&this.slider.swiper){realClickedIndex=this.slider.swiper.realIndex;if(!Number.isInteger(realClickedIndex)||realClickedIndex<0){return false;}}
166this.sendGA4Event($link.attr('href'),realClickedIndex+1);}};class CmsBannerMood extends CmsBlock{init(cms,$bannerBlock){if(!this.initProperties(cms,$bannerBlock))
167return false;this.initEvents();return true;}
168initProperties(cms,$bannerBlock){this.$container=$bannerBlock;if(this.$container.length===0)
169return;this.initBlock(cms,$bannerBlock);this.$links=this.$container.find('a');return true;}
170initEvents(){this.$links.on('click',(e)=>this.onSlideLinkClick(e));}
171onSlideLinkClick(e){const $link=$(e.currentTarget);this.sendGA4Event($link.attr('href'));}};class CmsHtml extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
172return false;this.initEvents();return true;}
173initProperties(cms,$block){this.$container=$block;if(this.$container.length==0)
174return;this.initBlock(cms,$block);return true;}
175initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
176onLinkClick(e){const $target=$(e.currentTarget);this.sendGA4Event($target.attr('href'));}};class CmsMerch extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
177return false;this.initEvents();return true;}
178initProperties(cms,$block){this.$container=$block;if(this.$container.length==0)
179return;this.initBlock(cms,$block);return true;}
180initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
181onLinkClick(e){const $target=$(e.currentTarget);this.sendGA4Event($target.attr('href'));}};class CmsMerchDetailed extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
182return false;this.initEvents();return true;}
183initProperties(cms,$block){this.$container=$block;if(this.$container.length===0)
184return;this.initBlock(cms,$block);return true;}
185initEvents(){this.$container.find('.merch_detailed_button').on('click',(e)=>this.onButtonClick(e));this.$container.find('.merch_detailed_link').on('click',(e)=>this.onLinkClick(e));}
186onButtonClick(e){const $target=e.currentTarget;const href=this.getHrefFromLink($target);this.sendGA4Event(href);}
187onLinkClick(e){const $target=e.currentTarget;const href=this.getHrefFromLink($target);this.sendGA4Event(href);}
188getHrefFromLink($link){if($link.hasAttribute('data-pofl')){const pofl=$link.getAttribute('data-pofl');
188if(pofl){return decodePofl(pofl)??false;}else{return false;}}else if($link.nodeName==='A'){return $link.getAttribute('href')??false;}
189return false;}};class CmsMerchBiGout extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
190return false;this.initEvents();return true;}
191initProperties(cms,$block){this.$container=$block;if(this.$container.length===0)
192return;this.initBlock(cms,$block);return true;}
193initEvents(){this.$container.find('.merch_bi_gout_button').on('click',(e)=>this.onButtonClick(e));}
194onButtonClick(e){const $target=e.currentTarget;const href=this.getHrefFromLink($target);this.sendGA4Event(href);}};class CmsTrustpilot extends CmsBlock{init(cms,$trustPilotBlock){if(!this.initProperties(cms,$trustPilotBlock))
195return false;return true;}
196initProperties(cms,$trustPilotBlock){this.$container=$trustPilotBlock;if(this.$container.length==0)
197return;this.initBlock(cms,$trustPilotBlock);this.$reviewsSwiperContainer=this.$container.find('.swiper-container');if(this.$reviewsSwiperContainer.length>0)
198this.initReviewsSwiper();return true;}
199initReviewsSwiper(){if(!typeof Swiper!='undefined'&&!this.$reviewsSwiperContainer.length)
200return false;this.reviewsSwiper=new Swiper(this.$reviewsSwiperContainer[0],{speed:1000,autoplay:{delay:3000,},loop:true,roundLengths:true,noSwiping:true,simulateTouch:false,});}};class Newsletter{init($container){if(!this.initProperties($container))
201return false;this.initEvents();return true;}
202initProperties($container){this.$container=$container;if(this.$container.length===0)
203return;this.$form=this.$container.querySelector('.newsletter_form');this.$input=this.$container.querySelector('.newsletter_input');this.$submitButton=this.$container.querySelector('.newsletter_submit_btn');this.$formError=this.$container.querySelector('.newsletter_form_error');this.$success=this.$container.querySelector('.newsletter_success');this.$description=this.$container.querySelector('.newsletter_description');return true;}
204initEvents(){this.$form.addEventListener('submit',(e)=>this.onFormSubmit(e));}
205onFormSubmit(e){e.preventDefault();this.startLoading();const formData=new FormData(this.$form);fetch('/ajax/newsletter.php',{method:'POST',body:formData,}).then(response=>response.json()).then(data=>{this.stopLoading();if(!data.code){console.error('Form post error: ',error);this.showErrorMessage('error_system');return;}
206switch(data.code){case'success':this.showSuccessMessage();break;default:this.showErrorMessage(data.code);break;}}).catch(error=>{console.error('Form post error: ',error);this.showErrorMessage('error_system');this.stopLoading();});}
207startLoading(){this.$submitButton.disabled=true;this.$submitButton.classList.add('loading');}
208stopLoading(){this.$submitButton.disabled=false;this.$submitButton.classList.remove('loading');}
209showSuccessMessage(){this.$form.classList.add('hidden');this.$description.classList.add('hidden');this.$success.classList.remove('hidden');}
210showErrorMessage(code){if(!this.$formError){this.$formError=document.createElement('div');this.$formError.classList.add('newsletter_form_error');this.$form.appendChild(this.$formError);}
211let message='';switch(code){case'email_invalid':message='Email invalide. Vérifiez le format et réessayez';break;case'already_subscribed':message='Vous êtes déjà bien inscrit.';break;default:message='Une erreur est survenue, merci de réessayer.';}
212this.$formError.textContent=message;this.$formError.classList.remove('hidden');}};class CmsNewsletter extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
213return false;this.initEvents();return true;}
214initProperties(cms,$block){this.$container=$block;if(this.$container.length===0)
215return;this.newsletter=new Newsletter();this.newsletter.init(this.$container[0]);this.initBlock(cms,$block);return true;}
216initEvents(){}};class CmsProductListSlider extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))return false;this.initEvents();return true;}
217initProperties(cms,$block){this.$container=$block;if(!this.$container.length)return;this.$swiperContainer=this.$container.find('.swiper-container');if(!this.$swiperContainer.length)return;this.$links=this.$container.find('a');this.initBlock(cms,$block);this.initSlider();return true;}
218initSlider(){this.productListSlider=new ProductListSlider();this.productListSlider.init(this.$swiperContainer);}
219initEvents(){this.$links.on('click',(e)=>this.onLinkClick(e));}
220onLinkClick(e){const $link=$(e.currentTarget);this.sendGA4Event($link.attr('href'),this.productListSlider.swiper.clickedIndex+1);}};class CmsProductListGrid extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))return false;this.initEvents();return true;}
221initProperties(cms,$block){this.$container=$block;if(!this.$container.length)return;this.initBlock(cms,$block);return true;}
222initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
223onLinkClick(e){const $link=$(e.currentTarget);const position=$link.parents('.product_list_item').index()+1;this.sendGA4Event($link.attr('href'),position);}};class CmsMerchSlider extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
224return false;this.initEvents();return true;}
225initProperties(cms,$block){this.$container=$block;if(!this.$container.length)
226return;this.$swiperContainer=this.$container.find('.swiper-container');if(!this.$swiperContainer.length)
227return;this.initBlock(cms,$block);this.initSlider();return true;}
228initSlider(){this.slider=new Slider();this.slider.init(this.$swiperContainer);}
229initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
230onLinkClick(e){const $target=$(e.currentTarget);this.sendGA4Event($target.attr('href'),this.slider.swiper.clickedIndex+1);}};class CmsMerchCircleSlider extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
231return false;this.initEvents();return true;}
232initProperties(cms,$block){this.$container=$block;if(!this.$container.length)
233return;this.$swiperContainer=this.$container.find('.swiper-container');if(!this.$swiperContainer.length)
234return;this.initBlock(cms,$block);this.initSlider();return true;}
235initSlider(){const sliderConfig={centerInsufficientSlides:true,};this.slider=new Slider();this.slider.init(this.$swiperContainer,sliderConfig);}
236initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
237onLinkClick(e){const $target=$(e.currentTarget);this.sendGA4Event($target.attr('href'),this.slider.swiper.clickedIndex+1);}};class CmsButton extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
238return false;this.initEvents();return true;}
239initProperties(cms,$block){this.$container=$block;if(this.$container.length==0)
240return;this.initBlock(cms,$block);return true;}
241initEvents(){this.$container.find('a').on('click',(e)=>this.onLinkClick(e));}
242onLinkClick(e){const $target=$(e.currentTarget);this.sendGA4Event($target.attr('href'));}};class CmsContest extends CmsBlock{init(cms,$contestBlock){if(!this.initProperties(cms,$contestBlock))
243return false;this.initEvents();return true;}
244initProperties(cms,$contestBlock){if($contestBlock.length===0)
245return;this.initBlock(cms,$contestBlock);this.$container=$contestBlock[0];this.$form=this.$container.querySelector('.contest_form');this.$btnSubmit=this.$container.querySelector('.contest_submit_btn');this.$formInputFirstName=this.$form.querySelector('input[name="first_name"]');this.$formInputName=this.$form.querySelector('input[name="name"]');this.$formInputEmail=this.$form.querySelector('input[name="email"]');this.initInputLight();this.loadData();return true;}
246loadData(){const isConnected=(getUserId());if(!isConnected){return;}
247fetch('/ajax/cms_contest_load.php',{method:'POST',}).then(response=>response.json()).then(data=>{if(data?.connected){const fieldMap={$formInputFirstName:'first_name',$formInputName:'name',$formInputEmail:'email',};for(const[key,prop]of Object.entries(fieldMap)){const el=this[key];el.value=data.user[prop]??'';el.dispatchEvent(new Event('input',{bubbles:true}));}}}).catch(error=>{console.error('Form post error',error);});}
248initEvents(){this.$form.addEventListener('submit',(e)=>this.onSubmitForm(e));}
249initInputLight(){const form=document.getElementsByClassName('contest_form')[0];const input=new Input();input.init(form);}
250onSubmitForm(e){e.preventDefault();this.removeFormErrorMessages();this.disableFormSubmission();const form=e.target;const formData=new FormData(form);fetch('/ajax/cms_contest_submit.php',{method:'POST',body:formData,}).then(response=>response.json()).then(data=>{if(data.error){this.addFormErrorMessage(data?.message??'error_system');this.enableFormSubmission();}else if(data.success){this.showSuccess(data.html);}else{console.error('Form post content error',data);this.addFormErrorMessage('error_system');this.enableFormSubmission();}}).catch(error=>{console.error('Form post error',error);this.addFormErrorMessage('error_system');this.enableFormSubmission();});}
251addFormErrorMessage(messageKey){let message;switch(messageKey){case'already_participated':message='Vous avez déjà participé à ce concours.';break;case'error_system':default:message='Une erreur est survenue, merci de réessayer.';break;}
252const $formError=document.createElement("div");$formError.classList.add('form_message');$formError.classList.add('error');$formError.textContent=message;this.$form.prepend($formError);}
253removeFormErrorMessages(){this.$form.querySelectorAll('.form_message.error').forEach($formError=>{$formError.remove();});}
254showLoading(){this.$form.classList.add('loading');}
255hideLoading(){this.$form.classList.remove('loading');}
256disableFormSubmission(){this.showLoading();this.$btnSubmit.disabled=true;}
257enableFormSubmission(){this.hideLoading();this.$btnSubmit.disabled=false;}
258showSuccess(html){this.$container.innerHTML=html;}};class CmsTabs extends CmsBlock{init(cms,$block){if(!this.initProperties(cms,$block))
259return false;this.initEvents();return true;}
260initProperties(cms,$block){this.$container=$block;if(this.$container.length===0)
261return;this.$tabsContainer=this.$container.find('.block-tabs');if(this.$tabsContainer.length===0){return;}
262this.initBlock(cms,$block);this.blockTabs=new BlockTabs();this.blockTabs.init(this.$tabsContainer[0]);return true;}
263initEvents(){this.blockTabs.addEventListener('switch_tab',(e)=>this.onSwitchTab(e));}
264onSwitchTab(e){const tabName=e?.detail?.name;if(!tabName){return;}
265this.sendGA4Event(tabName);}};class Accordion{constructor($accordion,settings){this.init($accordion,settings);}
266init($accordion,settings){if(!this.initProperties($accordion,settings))
267return false;this._listeners={};this.initEvents();return true;}
268initProperties($accordion,settings){if(!($accordion instanceof Element)){return false;}
269this.$accordion=$accordion;this.$togglers={...this.$accordion.querySelectorAll('.accordion_toggler')};this.$panels={...this.$accordion.querySelectorAll('.accordion_panel')};this.settings=this.getDefaultSettings();if(typeof settings==="object"&&settings!==null){this.settings={...this.settings,...settings};}
270return true;}
271getDefaultSettings(){return{auto_close_other_panels:true};}
272initEvents(){for(const $toggler of Object.values(this.$togglers)){$toggler.addEventListener('click',(e)=>this.onTogglerClick(e));}}
273onTogglerClick(e){const $toggler=e.currentTarget;const panelId=$toggler.getAttribute('data-panel-id');if(!panelId){return false;}
274this.toggle(panelId);return true;}
275onLabelClick(e){this.toggle();}
276getToggler(id){return Object.values(this.$togglers).find($toggler=>$toggler.getAttribute('data-panel-id')===id);}
277getPanel(id){return Object.values(this.$panels).find($panel=>$panel.getAttribute('data-panel-id')===id);}
278getPanelId($panel){return $panel.getAttribute('data-panel-id');}
279toggle(panelId){const $panel=this.getPanel(panelId);if(!$panel){return false;}
280if($panel.classList.contains('open')){this.close(panelId,true);}else{this.open(panelId);}
281return true;}
282isPanelOpen(panelId){const $panel=this.getPanel(panelId);if(!$panel){return false;}
283return $panel.classList.contains('open');}
284open(panelId){const $panel=this.getPanel(panelId);if(!$panel){return false;}
285const $toggler=this.getToggler(panelId);if(!$toggler){return false;}
286if(this.isPanelOpen(panelId)){return false;}
287this.dispatchEvent(new CustomEvent('open',{detail:{panelId:panelId,$toogler:$toggler,$panel:$panel,}}));this.$accordion.style.minHeight=this.$accordion.scrollHeight;let $lasOtherPanelOpen=null;if(this.settings.auto_close_other_panels){const $otherOpenPanels=Object.values(this.$panels).filter($panel=>this.isPanelOpen(this.getPanelId($panel)));if($otherOpenPanels){for(let $otherPanel of $otherOpenPanels){this.close(this.getPanelId($otherPanel),false);$lasOtherPanelOpen=$otherPanel;}}}
288const $anchorPanel=$lasOtherPanelOpen??$panel;const $anchorScrollTop=$anchorPanel.getBoundingClientRect().top+document.documentElement.scrollTop;if($anchorScrollTop<document.documentElement.scrollTop){window.scrollTo({top:$anchorScrollTop,behavior:'smooth'});}
289const panelHeight=$panel.scrollHeight;$panel.classList.add('open');$toggler.classList.add('open');$panel.style.height=panelHeight+'px';$panel.style.transition='height 0.3s ease-out';const transitionendListener=(e)=>{$panel.removeEventListener('transitionend',transitionendListener);$panel.style.height='';$panel.style.transition=null;this.$accordion.style.minHeight='';};$panel.addEventListener('transitionend',transitionendListener);return true;}
290close(panelId,isDirect){const $panel=this.getPanel(panelId);if(!$panel){return false;}
291const $toggler=this.getToggler(panelId);if(!$toggler){return false;}
292if(!this.isPanelOpen(panelId)){return false;}
293this.dispatchEvent(new CustomEvent('close',{detail:{panelId:panelId,isDirect:isDirect,$toogler:$toggler,$panel:$panel,}}));const panelHeight=$panel.scrollHeight;$panel.style.transition='';requestAnimationFrame(()=>{$panel.style.height=panelHeight+'px';$panel.style.transition='height 0.3s ease-out';$panel.classList.remove('open');$toggler.classList.remove('open');requestAnimationFrame(()=>{$panel.style.height='0px';const transitionendListener=(e)=>{$panel.removeEventListener('transitionend',transitionendListener);$panel.style.height=null;$panel.style.transition=null;};$panel.addEventListener('transitionend',transitionendListener);});});return true;}
294update(){this.initProperties(this.$accordion,this.settings);this.initEvents();}
295addEventListener(type,listener){if(!(type in this._listeners)){this._listeners[type]=[];}
296this._listeners[type].push(listener);}
297removeEventListener(type,listener){if(!(type in this._listeners)){return;}
298const index=this._listeners[type].indexOf(listener);if(index!==-1){this._listeners[type].splice(index,1);}}
299dispatchEvent(event){if(!(event.type in this._listeners)){return;}
300for(const listener of this._listeners[event.type]){listener.call(this,event);}}};class FaqQuestions{init($container,$parent=null){this.$parent=$parent;this.$container=$container;if(!this.$container.length){return false;}
301this.faqAccordion=new Accordion(this.$container[0],{auto_close_other_panels:false});this.faqAccordion.addEventListener('open',(e)=>this.onFaqAccordionOpen(e));this.faqAccordion.addEventListener('close',(e)=>this.onFaqAccordionClose(e));}
302onFaqAccordionOpen(e){const $toogler=e.detail.$toogler;if(!$toogler)
303return false;const actionValue=$toogler.querySelector('.text')?.innerText;if(this.$parent&&typeof this.$parent.sendGA4Event==='function'){this.$parent.sendGA4Event('faq','faq_open',actionValue);}}
304onFaqAccordionClose(e){const $toogler=e.detail.$toogler;if(!$toogler)
305return false;const actionValue=$toogler.querySelector('.text')?.innerText;if(this.$parent&&typeof this.$parent.sendGA4Event==='function'){this.$parent.sendGA4Event('faq','faq_close',actionValue);}}};class Cms{init(){if(!this.initProperties())
306return false;return true;}
307initProperties(){this.$container=$('.cms_grid');if(this.$container.length==0)
308return;this.id=this.$container.data('id');this.initTrustPilot();this.initBanner();this.initBannerMood();this.initHtml();this.initMerch();this.initMerchDetailed();this.initMerchBiGout();this.initRecentlyViewedTemplates();this.initProductListSliders();this.initProductListGrids();this.initMerchSliders();this.initMerchCircleSliders();this.initButton();this.initNewsletter();this.initContest();this.initFaq();this.initTabs();this.initReviews();return true;}
309initTrustPilot(){const $blocks=this.$container.find('.block_trustpilot');this.blocks_trustpilots=[];$blocks.each((index,$block)=>{const block=new CmsTrustpilot();block.init(this,$($block));this.blocks_trustpilots.push(block);});}
310initBanner(){const $blocks=this.$container.find('.block_banner');this.blocks_banners=[];$blocks.each((index,$block)=>{const block=new CmsBanner();block.init(this,$($block));this.blocks_banners.push(block);});}
311initBannerMood(){const $blocks=this.$container.find('.block_banner_mood');this.blocks_banners_mood=[];$blocks.each((index,$block)=>{const block=new CmsBannerMood();block.init(this,$($block));this.blocks_banners_mood.push(block);});}
312initHtml(){const $blocks=this.$container.find('.block_html');this.blocks_html=[];$blocks.each((index,$block)=>{const block=new CmsHtml();block.init(this,$($block));this.blocks_html.push(block);});}
313initMerch(){const $blocks=this.$container.find('.block_merch');this.blocks_html=[];$blocks.each((index,$block)=>{const block=new CmsMerch();block.init(this,$($block));this.blocks_html.push(block);});}
314initMerchDetailed(){const $blocks=this.$container.find('.block_merch_detailed');this.blocks_merch_detailed=[];$blocks.each((index,$block)=>{const block=new CmsMerchDetailed();block.init(this,$($block));this.blocks_merch_detailed.push(block);});}
315initMerchBiGout(){const $blocks=this.$container.find('.block_merch_bi_gout');this.blocks_merch_bi_gout=[];$blocks.each((index,$block)=>{const block=new CmsMerchBiGout();block.init(this,$($block));this.blocks_merch_bi_gout.push(block);});}
316initRecentlyViewedTemplates(){const $rvt=this.$container.find('.rvt_cc');if($rvt.length>0){window.rvt=new RecentlyViewedTemplates();window.rvt.init();this.deferSliderInit($rvt,()=>window.rvt.loadTemplates());}}
316
317initProductListSliders(){const $blocks=this.$container.find('.block_product_list_slider');this.blocks_product_list_sliders=[];$blocks.each((index,$block)=>{const block=new CmsProductListSlider();this.blocks_product_list_sliders.push(block);this.deferSliderInit($($block),()=>block.init(this,$($block)));});}
318initProductListGrids(){const $blocks=this.$container.find('.block_product_list_grid');this.blocks_product_list_grids=[];$blocks.each((index,$block)=>{const block=new CmsProductListGrid();block.init(this,$($block));this.blocks_product_list_grids.push(block);});}
319initMerchSliders(){const $blocks=this.$container.find('.block_merch_slider');this.blocks_merch_sliders=[];$blocks.each((index,$block)=>{const block=new CmsMerchSlider();this.blocks_merch_sliders.push(block);this.deferSliderInit($($block),()=>block.init(this,$($block)));});}
320initMerchCircleSliders(){const $blocks=this.$container.find('.block_merch_circle_slider');this.blocks_merch_circle_sliders=[];$blocks.each((index,$block)=>{const block=new CmsMerchCircleSlider();this.blocks_merch_circle_sliders.push(block);this.deferSliderInit($($block),()=>block.init(this,$($block)));});}
321initButton(){const $blocks=this.$container.find('.block_button');this.blocks_button=[];$blocks.each((index,$block)=>{const block=new CmsButton();block.init(this,$($block));this.blocks_button.push(block);});}
322initNewsletter(){const $blocks=this.$container.find('.block_newsletter');this.blocks_newsletter=[];$blocks.each((index,$block)=>{const block=new CmsNewsletter();block.init(this,$($block));this.blocks_newsletter.push(block);});}
323initContest(){const $blocks=this.$container.find('.block_contest');this.blocks_contest=[];$blocks.each((index,$block)=>{const block=new CmsContest();block.init(this,$($block));this.blocks_contest.push(block);});}
324initFaq(){const $blocks=this.$container.find('.faq_questions');this.blocks_faq=[];$blocks.each((index,$block)=>{const block=new FaqQuestions();block.init($($block));this.blocks_faq.push(block);});}
325initTabs(){const $blocks=this.$container.find('.block_tabs');this.blocks_tabs=[];$blocks.each((index,$block)=>{const block=new CmsTabs();block.init(this,$($block));this.blocks_tabs.push(block);});}
326initReviews(){const $blocks=this.$container.find('.block_reviews');this.blocks_reviews=[];$blocks.each((index,$block)=>{const block=new Reviews();block.init(this,$($block));this.blocks_reviews.push(block);});}
327deferSliderInit($block,callback){const el=$block&&$block[0];if(!el){callback();return;}
328const runWhenIdle=()=>{if(typeof window.requestIdleCallback==='function'){window.requestIdleCallback(callback,{timeout:500});}else{setTimeout(callback,0);}};if(typeof window.IntersectionObserver!=='function'){runWhenIdle();return;}
329const observer=new IntersectionObserver((entries,obs)=>{entries.forEach((entry)=>{if(!entry.isIntersecting){return;}
330obs.unobserve(entry.target);runWhenIdle();});},{root:null,rootMargin:'200px 0px',threshold:0,});observer.observe(el);}}
331$(document).ready(function(){window.cms=new Cms();window.cms.init();});

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.