!function(){"use strict";const e="mirakl tag",t=`🚨 ${e} error: `,r=`⚠️ ${e} warning: `,a=`✅ ${e} : `,n=e=>{console.error(`${t}${e}`)},o=e=>{console.warn(`${r}${e}`)},i={home:[1e3,1199],product:[1200,1399],list:[1400,1599],cart:[1600,1799],content:[2200,2399],postPayment:[2400,2599],login:[2600,2799],account_creation_start:[2800,2999],account_creation_end:[3e3,3199],purchase_begin:[3200,3399],search_results_empty:[3400,3599],not_found:[3600,3799]},s=["home","content","login","account_creation_start","account_creation_end","purchase_begin","search_results_empty","not_found"],d=(e,t)=>{const r="number"==typeof e?e:+e;return!Number.isNaN(r)&&(r>=i[t][0]&&r<=i[t][1])},c=e=>{const t=l(e);return void 0!==t&&""!==t},l=e=>window._t2sparams?.[e],u=[{validatorFunction:()=>!!window._t2sparams,errorMessage:"_t2sparams global variable must be defined before using any T2S method."},{validatorFunction:()=>c("cID"),errorMessage:"cID field must be defined on _t2sparams object before using any T2S method."},{validatorFunction:()=>c("pID"),errorMessage:"pID field must be defined on _t2sparams object before using any T2S method."},{validatorFunction:()=>!d(l("pID"),"list")||c("aID"),errorMessage:"aID field should be provided when pID correspond to a list page.",optional:!0},{validatorFunction:()=>!d(l("pID"),"cart")||c("bS"),errorMessage:"bS field should be provided when pID correspond to a cart page.",optional:!0},{validatorFunction:()=>{return e=l("pID"),!!s.some((t=>d(e,t)))||(d(l("pID"),"postPayment")||c("iID"));var e},errorMessage:"iID field is missing or null so there is no product in the page's context. Please note that this type of context is required for the following page types: product page, shopping cart, list / category, post-payment, search results (not empty); More generally, all page where one or several products are displayed.",optional:!0},{validatorFunction:()=>!d(l("pID"),"postPayment")||c("oID"),errorMessage:"oID field should be provided when pID correspond to a post payment page.",optional:!0},{validatorFunction:()=>{return!l("domain")||(e=l("domain"),new RegExp(/^((www\.)?)(?!-)([\dA-Za-z-]+)*([\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*(\.[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*\.[A-Za-z]{2,}$/).test(e));var e},errorMessage:"domain field must be a valid domain name before using any T2S method."}],p=()=>u.every((e=>{if(e.validatorFunction())return!0;return(e.optional?o:n)(e.errorMessage),e.optional})),m=e=>"video-player"===e?((e,t)=>{const r="mirakl-video-player-script";return document.getElementById(r)&&t?Promise.resolve({id:r,alreadyLoaded:!0}):document.getElementById(r)&&!t?new Promise((e=>{document.getElementById(r).addEventListener("load",(()=>{e({id:r,alreadyLoaded:!0})}))})):new Promise((t=>{const a=document.createElement("script");a.src=`https://static.target2sell.com/${e}`,a.async=!0,a.id=r,a.addEventListener("load",(()=>{t({id:r,alreadyLoaded:!1})}));const n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(a,n):document.head.append(a)}))})("t2s.video-player.min.js",window.playMiraklAdsVideo):null,g="mirakl-",w="t2s-",h=()=>{const e=Date.now();return new Date(e+33696e6).toUTCString()},y=e=>document.cookie.split(`${e}=`)[1]?.split(";")[0],I=()=>"https:"===document.location.protocol,f=()=>{const e=window?._t2sparams?.domain||window?._miraklTagParameters?.domain||!1;return""+(e?`Domain=${e}`:"")},b=(e,t,{expire:r}={})=>{document.cookie=`t2s-${e}=${t}; Path=/; Expires=${r?.toUTCString()??h()}; ${I()?"Secure; SameSite=None":""}; ${f()}`,document.cookie=`mirakl-${e}=${t}; Path=/; Expires=${r?.toUTCString()??h()}; ${I()?"Secure; SameSite=None":""}; ${f()}`},v=e=>{const t=y(`${g}${e}`),r=y(`${w}${e}`);return t?(r||b(e,t),t):r&&"p"===e?r:r?(b(e,r),r):void 0},k=e=>{document.cookie=`${w}${e}= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; ${I()?"Secure; SameSite=None":""}; ${f()}`,document.cookie=`${g}${e}= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; ${I()?"Secure; SameSite=None":""}; ${f()}`},T=()=>window._t2sparams?"v2":"v3",S=()=>"v2"===T()?!0===window._t2sparams?.optOut:!0===window._miraklTagParameters?.optOut,_="personalisation",P=()=>window.t2sConsiderUserConsent,x=()=>{if(S())return!1;if(!P())return!0;return"true"===v(_)},C=e=>Object.entries(e).reduce(((e,[t,r])=>r?{...e,[t]:r}:e),{});var $;!function(e){e.Search="search",e.Category="category",e.Product="product",e.Home="home"}($||($={}));const D={[$.Search]:{start:2e3,end:2199},[$.Category]:{start:1400,end:1599},[$.Product]:{start:1200,end:1399},[$.Home]:{start:1e3,end:1199}},E=e=>{const{categoryId:t,keywords:r,pageId:a,productId:n,...o}=e;if(!a)return e;const i=(e=>{const t=Number.parseInt(e,10);if(Number.isNaN(t))return null;for(const[e,r]of Object.entries(D))if(t>=r.start&&t<=r.end)return e;return null})(a);switch(i){case $.Search:return{...o,pageId:a,keywords:r};case $.Category:return{...o,pageId:a,categoryId:t};case $.Product:return{...o,pageId:a,productId:n};case $.Home:return{...o,pageId:a};default:return e}},N=async e=>{const t={categoryId:e?.categoryId||window._miraklTagParameters?.categoryId,device:e?.device,filter:e?.filter,keywords:e?.keywords||window._miraklTagParameters?.keywords,pageId:e?.pageId||window._miraklTagParameters?.pageId,productId:e?.productId||window._miraklTagParameters?.productId},r=C(t);return E(r)},O="analytics",j=()=>S()?"":(v(O)||b(O,(()=>{let e=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,(t=>{const r=Math.trunc((e+16*Math.random())%16);return e=Math.floor(e/16),("x"==t?r:7&r|8).toString(16)}))})()),b("p",v(O)),v(O)),M=async(e,t,r)=>{try{const a=await window.fetch(e+(e=>{const t=e?.queryParameters??{},r=new URLSearchParams;for(const e of Object.keys(t))r.append(e,t[e]?.toString());return e?.invalidateCache&&r.append("tmst",Date.now().toString()),r.toString()?`?${r.toString()}`:""})(r),{method:t,headers:r?.headers,body:r?.body}),n=await a.json();return r?.onSuccess?.(n),n}catch(e){throw r?.onError?.(e),e}},A=(e,t)=>M(e,"POST",t),R={publisherId:"string",userKey:"string",userId:"string",url:"string",basketProducts:"string",pageId:"string",domain:"string",lang:"string",setId:"string",wishList:"string",keywords:"string",productId:"string",categoryId:"string",pageNumber:"string",basketAmount:"string",productsQuantity:"string",orderId:"string",priceList:"string",hasRankOption:"boolean",trace:"string",eventName:"string",adId:"string",trackingId:"string",viewId:"string",optOut:"boolean"},U=["hasRankOption","optOut"],L=(e,t)=>{const r=new URL(e);return new URLSearchParams(r.search).get(t)||void 0},V="rank",z=()=>{const e=9e5+Date.now();return new Date(e)},Z=async e=>{const t=v(V);if(t)return t;try{const t=`https://api.target2sell.com/user/indexes/${j()}`,{rank:r}=await((e,t)=>M(e,"GET",t))(t,{headers:{"t2s-customer-id":e},invalidateCache:!0});return b(V,r,{expire:z()}),r}catch{return k(V)}},F={eventName:"eN",userId:"tID",publisherId:"cID",pageId:"pID",categoryId:"aID",referer:"rF",url:"cURL",productId:"iID",productsQuantity:"qTE",setId:"setID",basketAmount:"bS",basketProducts:"bP",orderId:"oID",userKey:"uEM",secondaryUserId:"uID",space:"sp",rule:"ru",position:"po",destination:"dES",keywords:"kW",query:"q",trace:"trace",traceToken:"traceToken",callstack:"callstack",noEvent:"noEvent",shuffle:"shuffle",nonContextual:"nonContextual",priceList:"priceL",abDisplay:"abDisplay",lang:"lang",userRank:"userRank",crmPrefix:"crm_",crmKeyValueMap:"crm",pageNumber:"pageNbr",wishList:"wl",constraint:"constraint",mediaRuleId:"mediaRuleId",mediaCampaignId:"mediaCampaignId",mediaType:"mediaType",mediaAlgo:"mediaAlgo",maxProduct:"maxProduct",domain:"domain",trackingId:"trackingId",embeddedStructure:"embeddedStructure",render:"render",noTimeout:"noTimeout",formats:"formats",visualSearchImg:"visualSearchImage",visualSearchObject:"visualSearchObject",userConsent:"userConsent",multisets:"setL",addToCartProduct:"addToCartProductId",adId:"adId",viewId:"viewId",offerId:"offerID",progress:"progress",hasRankOption:"hasRankOption",optOut:"optOut"},q=Object.fromEntries(Object.entries(F).map((([e,t])=>[t,e]))),B=e=>Object.entries(e).reduce(((e,[t,r])=>t in q?{...e,[q[t]]:r}:{...e,[t]:r}),{}),J=async e=>{const t=S(),r=e.hasRankOption&&!t&&await Z(`${e.publisherId}`);var a,n;return{...(a=e,n=U,Object.keys(a).reduce(((e,t)=>n.includes(t)?e:{...e,[t]:a[t]}),{})),...!t&&{userId:j()},userConsent:x(),...document.referrer&&{referer:document.referrer},url:window.location.href,userKey:e.userKey??L(window.location.href,"t2suEM"),trace:e.trace??L(window.location.href,"trace")??sessionStorage.getItem("t2sTrace"),...r&&{userRank:r}}},K=async e=>{const t=await J(e);return new URLSearchParams((r=t,Object.entries(r).reduce(((e,[t,r])=>r?{...e,[t]:r.toString()}:e),{}))).toString();var r},H=async e=>{const t=(r=await J(e),Object.entries(r).reduce(((e,[t,r])=>t in F?{...e,[F[t]]:r}:{...e,[t]:r}),{}));var r;return C(t)},W=e=>e in R,G={home:[1e3,1199],product:[1200,1399],list:[1400,1599],cart:[1600,1799],content:[2200,2399],postPayment:[2400,2599],login:[2600,2799],account_creation_start:[2800,2999],account_creation_end:[3e3,3199],purchase_begin:[3200,3399],search_results_empty:[3400,3599],not_found:[3600,3799]},Q=(e,t)=>{const r="number"==typeof e?e:+e;return!Number.isNaN(r)&&(r>=G[t][0]&&r<=G[t][1])},X=["home","content","login","account_creation_start","account_creation_end","purchase_begin","search_results_empty","not_found"],Y=[{isValid:e=>{if(!e||0===Object.keys(e).length)throw new Error("_miraklTagParameters global variable must be defined before using any miraklTag method.");let t=0;for(const[r,a]of Object.entries(e))W(r)?typeof a!==R[r]&&(n(`Invalid type for parameter ${r}: expected ${R[r]}, got ${typeof a}`),t+=1):r.startsWith("crm_")||o(`Unknown parameter: ${r}`);return 0===t},error:"some types are invalid in _miraklTagParameters object."},{isValid:e=>!!e,error:"_miraklTagParameters global variable must be defined before using any miraklTag method."},{isValid:e=>!!e?.publisherId,error:"publisherId field must be defined on _miraklTagParameters object before using any miraklTag method."},{isValid:e=>!!e?.pageId,error:"pageId field must be defined on _miraklTagParameters object before using any miraklTag method."},{isValid:e=>!Q(e?.pageId,"list")||!!e?.categoryId,error:"categoryId field should be provided when pageId correspond to a list page.",optional:!0},{isValid:e=>!Q(e?.pageId,"cart")||!!e?.basketAmount,error:"basketAmount field should be provided when pageId correspond to a cart page.",optional:!0},{isValid:e=>{return t=Number.parseInt(`${e.pageId}`,10),!!X.some((e=>Q(t,e)))||(Q(e?.pageId,"postPayment")||!!e?.productId);var t},error:"productId field is missing or null so there is no product in the page's context. Please note that this type of context is required for the following page types: product page, shopping cart, list / category, post-payment, search results (not empty); More generally, all page where one or several products are displayed.",optional:!0},{isValid:e=>!Q(e?.pageId,"postPayment")||!!e?.orderId,error:"orderId field should be provided when pageId correspond to a post payment page.",optional:!0},{isValid:e=>{return!e.domain||(t=`${e.domain}`,/^((www\.)?)(?!-)([\dA-Za-z-]+)*([\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*(\.[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*\.[A-Za-z]{2,}$/.test(t));var t},error:"domain field must be a valid domain name before using any miraklTag method."}],ee=async(e,t,r=!1)=>{if("v3"===T()&&(a={...t,...window._miraklTagParameters},!Y.every((({error:e,isValid:t,optional:r})=>!!t(a)||((r?o:n)(e),r)))))return Promise.reject(new Error("Invalid parameters"));var a;const i=await K({...t,...window._miraklTagParameters,eventName:e});return A("https://serv-api.target2sell.com/1.1/json/T/t",{invalidateCache:!0,headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i}).catch((e=>{if(r)throw e;n(e.message)}))},te=async(e,t,r=!0)=>{const a=await ee("click",t,r);return e&&(window.location.href=e),a},re=async(e,t={})=>(t.trackingId&&await ee("click",{productId:e,...t}),ee("addToCart",{productId:e,...t})),ae={threshold:[.25,.5,.75,1]},ne=(e,t)=>{let r;const a=new IntersectionObserver((t=>{const n=t[0],o=n.target.attributes.getNamedItem(`data-${e}`)?.value;return o?new Promise((e=>{n.intersectionRatio>=.5?r?e():r=setTimeout((()=>{("v2"===T()?window.T2S.event("viewableImpression",{viewId:o}):ee("viewableImpression",{viewId:o})).then((()=>{a.unobserve(n.target),r=void 0,e()}))}),1e3):(r&&(clearTimeout(r),r=void 0),e())})):Promise.reject(new Error("current view id is not defined"))}),ae),n=document.querySelector(`[data-${e}="${t}"]`);n&&a.observe(n)},oe=(e="mirakl-view-id")=>{const t=document.querySelectorAll(`[data-${e}]`),r=Array.from(t).map((t=>t.attributes.getNamedItem(`data-${e}`).value));for(const t of r)ne(e,t)},ie=(e,t=[])=>Object.keys(e).reduce(((r,a)=>{const n=e[a];if(t.includes(a)||!n||["function","boolean"].includes(typeof n))return r;if("object"==typeof n)r[a]=n;else try{r[a]=JSON.parse(n.toString())}catch{r[a]=n.toString()}return r}),{}),se=(e=!1)=>ie(e?{...window._t2sparams,tID:j(),userConsent:x().toString(),rF:document.referrer,cURL:window.location.href,uEM:l("uEM")?.toString()??L(window.location.href,"t2suEM"),trace:l("trace")?.toString()??L(window.location.href,"trace")??sessionStorage.getItem("t2sTrace")}:{publisherId:l("cID")?.toString(),pageId:l("pID")?.toString(),userId:j(),userConsent:x().toString(),referer:document.referrer,url:window.location.href,userKey:l("uEM")?.toString()??L(window.location.href,"t2suEM"),trace:l("trace")?.toString()??L(window.location.href,"trace")??sessionStorage.getItem("t2sTrace")}),de=async(e,t)=>{const r={...se(),...ie({eventName:e,userRank:l("hasRankOption")?await Z(`${l("cID")}`):void 0}),...ie(t,["redir"])};return new URLSearchParams(r).toString()},ce=()=>(async(e,t,r)=>{if(p())try{await A("https://serv-api.target2sell.com/1.1/json/T/t",{invalidateCache:!0,headers:{"Content-Type":"application/x-www-form-urlencoded"},body:await de(e,t||{}),onSuccess:r}),t?.redir&&(window.location.href=t.redir)}catch(e){n(e.message)}})(""),le=async(e,t={},r)=>{if(!e||"string"!=typeof e)return n("you must provide a valid event name string when calling event method");if(!p())return;const{redir:a,...o}=t??{},i=B({...o,...window._t2sparams});return ee(e,i,!1).then((e=>(r&&r(e),a&&(window.location.href=a),e)))},ue=async(e,t=!1)=>{const r=window._miraklTagParameters?.publisherId||e.publisherId,a=await A("https://reco.target2sell.com/content/v3",{invalidateCache:!0,headers:{"Content-Type":"application/json"},queryParameters:{render:!0},body:JSON.stringify(await H({...e,...window._miraklTagParameters}))}).catch((e=>{if(t)throw e;return n(e.message),{spaces:[]}}));return((e,t)=>{t.forEach((t=>{const r=document.getElementById(`${e}-${t.id}`);r&&t.html&&(r.innerHTML=t.html)}))})(r,a.spaces),a},pe=async(e,t=!1)=>{if(S())return n("recommend can not work if user has opted out"),{spaces:{}};const r=`https://reco.target2sell.com/product/v2/${window._miraklTagParameters?.publisherId||e.publisherId}/render`,a=await H({...e,...window._miraklTagParameters}),o=await A(r,{invalidateCache:!0,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).catch((e=>{if(t)throw e;return n(e.message),{spaces:{}}}));var i;return i=o.spaces,Object.entries(i).forEach((([e,t])=>{const r=document.getElementById(e);r&&t&&(r.innerHTML=t)})),sessionStorage.setItem("t2sRecoCalled","true"),o},me=async(e,t)=>{if(!p())return;const r=await pe(B({...window._t2sparams,...e}));return t&&t(r),r},ge="t2s_wl",we="mirakl-adunit-id";sessionStorage.setItem("t2sRecoCalled","false"),S()||("v2"===T()?le("view"):ee("view"));const he={considerUserConsent:e=>void 0===e?n("considerUserConsent parameter is required"):"boolean"!=typeof e?n("considerUserConsent parameter must be a valid boolean"):(window.t2sConsiderUserConsent=e,window.t2sConsiderUserConsent),userConsentsToT2S:e=>{const t=P();return void 0===t?(n("considerUserConsent must be called at least once before userConsentsToT2S call"),!1):"boolean"!=typeof e?(n("considerUserConsent must be called with a valid boolean value"),!1):(t&&b(_,e?"true":"false"),e)},event:le,click:async(e,t)=>{const{redir:r,...a}=e,n=B({...a,...window._t2sparams}),o=te(r,n,!1);return t&&t(o),o},inspire:async(e,t)=>{if(!p())return;const r=await ue(B({...window._t2sparams,...e}));return t&&t(r),r},reco:me,addToCart:({productId:e,...t}={})=>{if(void 0===e)return n("you must provide a valid productId when calling addToCart method.");const r=B({...t,...window._t2sparams});return re(e,r)},recordShopInteraction:(e,t)=>(({interactionType:e,setExternalId:t})=>{if(!l("cID"))return n("_t2sparams.cID must be set before calling recordShopInteraction.");const r=L(window.location.href,"localize"),a="UNKNOWN"===l("uEM")?void 0:l("uEM");return A("https://serv-api.target2sell.com/user/v1/recordShopInteraction",{headers:{"Content-Type":"application/json"},body:JSON.stringify({customerPublicId:l("cID"),interactionType:!t&&r?"LIVE_EXPLICIT_DECISION":e,setExternalId:t??r??l("setId"),tID:j(),uEM:L(window.location.href,"t2suEM")??a??null})})})({interactionType:e,setExternalId:t}),clickProductInWhishlist:(e,t)=>{const r=v(ge)??"",a=r.includes(e)?r.split("|").filter((t=>t!==e)):[...r.split("|"),e];a.length>0?b(ge,a.filter(Boolean).join("|")):k(ge),t?.()},checkCustomerConfig:()=>{var e;p()&&(e="_t2sparams global object is valid.",console.info(`${a}${e}`))},watchViewability:oe,writeParams:new Promise(((e,t)=>{window._t2sparams&&e(window._t2sparams),window._miraklTagParameters&&e(window._miraklTagParameters),t("no params")})),playVideo:async(...e)=>(await m("video-player"),window.playMiraklAdsVideo(...e)),_sendTracking:()=>ce(),_sendTrackingWithRank:()=>ce(),_sendReco:()=>me(),version:"3.10.0"},ye={click:te,event:ee,addToCart:re,recommend:pe,inspire:ue,watchViewability:oe,playVideo:async(...e)=>(await m("video-player"),window.playMiraklAdsVideo(...e)),version:"3.10.0"};window.T2S=he,window.miraklAds={fetchAds:async e=>{const{customerId:t,publisherId:r,...a}=e||{},n=t||r||window._miraklTagParameters?.publisherId;return A("https://api.eu1.retailmedia.mirakl.net/ads/v1/public",{invalidateCache:!0,headers:{"Content-Type":"application/json","x-customer-id":n,"x-current-timestamp":Date.now().toString()},body:JSON.stringify({...await N(a),userId:j(),userConsent:x()})})},renderAds:async e=>{try{const{publisherId:t,...r}=e||{},a=t||window._miraklTagParameters?.publisherId,i=await A("https://api.eu1.retailmedia.mirakl.net/ads/v1/public/rendered-content",{invalidateCache:!0,headers:{"Content-Type":"application/json","x-customer-id":a,"x-current-timestamp":Date.now().toString()},body:JSON.stringify({...await N(r),userId:j(),userConsent:x()})}),s=[...i.productAds||[],...i.display||[]];if(!s.length)return void o("No ads to render");await(async e=>{e.forEach((e=>{const t=document.querySelector(`[data-${we}="${e.adUnitId}"]`);t?e.renderedContent&&"Success"===e.renderingDetails.type?(t.innerHTML=e.renderedContent,ee("impression",{adId:e.products.map((e=>e.adId)).join("|")}),ne(we,e.adUnitId)):"Error"===e.renderingDetails.type&&n(`Rendering details error for ad unit: ${e.adUnitId}`):n(`Target not found for ad unit: ${e.adUnitId}`)}))})(s)}catch(e){throw n("Failed to render ads"),e}}},window.miraklTag=ye,window.dispatchEvent(new Event("t2sReady")),window.dispatchEvent(new Event("miraklTagReady")),window._miraklVideoPlayers&&window._miraklVideoPlayers.forEach((({rootElement:e,adId:t,videoUrl:r,settings:a})=>{window.T2S.playVideo(e,t,r,a)}))}();