1const LOCKED_CARRIER_HANDLE="locked-to-a-carrier";window.PYD={state:{...window.PYD?.state||{}},config:{GRAPHQL_URL:"https://api.ecoatm.com/omni/v1/graphql/graphql",CHANNELS:["WEB","TRADE_IN"],SHOPIFY_URL:"https://ecoatm-public.myshopify.com/api/2025-04/graphql.json",SHOPIFY_ACCESS_TOKEN:"b5a1a54d256bb415c6098f182d75d015",...window.PYD?.config||{}},allErrorMessages:{email:"Please enter a valid email","payable-to":"Enter a full name","first-name":"Enter a first name","last-name":"Enter a last name",address:"Enter an address","address-1":"Enter an apartment or suite",city:"Enter a city",state:"Enter a state","zip-code":"Enter a ZIP code",phone:"Enter a phone number","payment-address":"Enter a billing address","paypal-email":"Enter a PayPal email address",terms:"Please agree to the terms of service",mailin:"Please select an option","payment-method":"Please select a payment method"},screens:{pyd:"#ti-device-picker",cart:"#ti-cart",checkout:"#ti-checkout",thankYou:"#ti-thank-you"},queries:{brands:`query Brands( $channels: [ChannelName]) { 2 brands(channels: $channels) { 3 id 4 name 5 } 6 }`,categories:`query Categories($channels: [ChannelName]) { 7 categories(channels: $channels) { 8 id 9 name 10 } 11 }`,series:`query Series($brandId: ID!, $categoryId: ID!, $channels: [ChannelName]) { 12 series(brandId: $brandId, categoryId: $categoryId, channels: $channels) { 13 id 14 name 15 readyForSale 16 moratoriumEndDate 17 } 18 }`,models:`query Models($brandId: String!, $categoryId: ID, $seriesId: String) { 19 models(categoryId: $categoryId, brandId: $brandId, seriesId: $seriesId) { 20 id 21 name 22 } 23 }`,storage:`query StorageOptions($brandId: String!, $seriesId: String!, $modelName: String!) { 24 storageOptions(brandId: $brandId, seriesId: $seriesId, modelName: $modelName) { 25 id 26 name 27 } 28 }`,carriers:`query Carriers { 29 carriers { 30 id 31 name 32 } 33 }`,createPackingSlip:`mutation CreatePackingSlip($item: TransactionItemInput!) { 34 checkout(input: { 35 operation: CREATE_PACKING_SLIP, 36 transactionItems: [$item] 37 }) { 38 packingSlip { number } 39 } 40 }`,addOffer:`mutation AddOffer($item: TransactionItemInput!, $packingSlipNumber: String!) { 41 checkout(input: { 42 operation: ADD_OFFER, 43 packingSlipNumber: $packingSlipNumber, 44 transactionItem: $item 45 }) { 46 packingSlip { number } 47 } 48 }`,removeOffer:` 49 mutation RemoveOffer($packingSlipNumber: String!, $offerNumber: String!) { 50 checkout(input: { 51 operation: REMOVE_OFFER, 52 packingSlipNumber: $packingSlipNumber, 53 offerNumber: $offerNumber 54 }) { 55 packingSlip { number } 56 } 57 } 58 `,payout:`query Payout($brandName: String! 59 $modelName: String! 60 $seriesName: String 61 $storageOption: String 62 $carrierName: String 63 $categoryId: ID 64 $powerUp: Boolean 65 $lcdOK: Boolean 66 $cracks: Boolean 67 $additionalPromoQualifiers: JSON 68 $channels: [ChannelName] 69 $countryCode: String 70 $currencyCode: String 71 ) { 72 payout( 73 brandName: $brandName 74 modelName: $modelName 75 seriesName: $seriesName 76 storageOption: $storageOption 77 carrierName: $carrierName 78 categoryId: $categoryId 79 powerUp: $powerUp 80 lcdOK: $lcdOK 81 cracks: $cracks 82 additionalPromoQualifiers: $additionalPromoQualifiers 83 channels: $channels 84 countryCode: $countryCode 85 currencyCode: $currencyCode 86 ) { 87 deviceId 88 offerId 89 pid 90 recyclable 91 promotion { 92 promoCode 93 promoPrice 94 sourceId 95 } 96 offerState 97 offerV3 { 98 amount 99 channel 100 currencyCode 101 } 102 } 103 }`,packingSlip:`query PackingSlip($number: String!) { 104 packingSlip(number: $number) { 105 createdAt 106 email 107 expirationDate 108 id 109 number 110 totalEstimatedValue 111 totalPayoutBonus 112 totalPromo 113 totalEstimatedPayment 114 paymentInformation { 115 id 116 payoutType 117 paypalEmail 118 checkAddress { 119 id 120 checkName 121 street1 122 city 123 state 124 zipCode 125 country 126 phoneNumber 127 } 128 } 129 status 130 submittedAt 131 updatedAt 132 shippingInformation { 133 id 134 firstName 135 lastName 136 street1 137 city 138 state 139 zipCode 140 country 141 phoneNumber 142 } 143 shippingOptions { 144 id 145 name 146 } 147 transactionItems { 148 id 149 number 150 product { 151 id 152 name 153 manufacturerName 154 categoryName 155 imageUrl 156 } 157 status 158 estimatedValue 159 actualValue 160 hasEstimatedValue 161 createdAt 162 updatedAt 163 } 164 } 165 }`,deviceFAQ:` 166 query GetDeviceFAQ($handle: MetaobjectHandleInput!) { 167 metaobject(handle: $handle) { 168 handle 169 fields { 170 key 171 value 172 } 173 } 174 } 175 `,verifyAddress:`query VerifyAddress($street1: String!, $city: String!, $state: String!, $zip: String!) { 176 verifyAddress(street1: $street1, city: $city, state: $state, zip: $zip) { 177 city 178 country 179 state 180 street1 181 zip 182 } 183 }`,checkout:`mutation Checkout($input: CheckoutInput!) { 184 checkout(input: $input) { 185 operation 186 packingSlip { 187 id 188 number 189 status 190 email 191 transactionItems { 192 id 193 number 194 product { 195 id 196 name 197 manufacturerName 198 categoryName 199 imageUrl 200 } 201 status 202 estimatedValue 203 actualValue 204 hasEstimatedValue 205 createdAt 206 updatedAt 207 } 208 shippingInformation { 209 id 210 firstName 211 lastName 212 street1 213 city 214 state 215 zipCode 216 country 217 phoneNumber 218 } 219 paymentInformation { 220 id 221 payoutType 222 paypalEmail 223 checkAddress { 224 street1 225 city 226 state 227 zipCode 228 country 229 phoneNumber 230 } 231 } 232 totalEstimatedValue 233 totalPayoutBonus 234 totalPromo 235 totalEstimatedPayment 236 #eligibleForBox 237 expirationDate 238 shippingLabelUrl 239 user { 240 email 241 firstName 242 lastName 243 } 244 createdAt 245 updatedAt 246 submittedAt 247 } 248 } 249 }`},init(){this.parseSettings(),this.initScreen("pyd")},parseSettings(){try{const settings=JSON.parse(document.querySelector("#pyd")?.dataset.settings||"{}");return window.PYD??={},window.PYD.config={...window.PYD.config,...settings},window.PYD_META_TAGS_ENABLED=!!window.PYD.config?.UPDATE_META_TAGS,settings}catch{return{}}},initScreen(defaultScreen){const{["ti-screen"]:screen}=this.getUrlParams(["ti-screen"]),existingScreen=screen&&this.screens[screen]?screen:defaultScreen;this.showScreen(existingScreen)},showScreen(key){const selector=this.screens[key];if(PYD.state.currentScreen=key,!selector){console.error(`Screen key "${key}" is not defined in PYD.screens{}.`);return}
249Object.values(this.screens).forEach(sel=>{const el=document.querySelector(sel);el&&(el.style.display="none",el.setAttribute("hidden",""))});const target=document.querySelector(selector);target?(target.style.display="block",target.removeAttribute("hidden"),PYD.updateUrlParam("ti-screen",key),key==="pyd"&&window.dispatchEvent(new CustomEvent("pageload",{detail:{stepName:selector}}))):console.error(`Element for selector "${selector}" not found.`)},async fetchData(url,query2=null,method="GET",extraHeaders={}){const headers=new Headers({"Content-Type":"application/json",Accept:"application/json",...extraHeaders});let finalUrl=url;const requestOptions={method,query:query2,headers,redirect:"follow"};return method==="GET"?(finalUrl=`${url}?query=${encodeURIComponent(query2.query)}`,query2.variables&&(finalUrl+=`&variables=${encodeURIComponent(JSON.stringify(query2.variables))}`)):(requestOptions.method="POST",requestOptions.body=JSON.stringify({query:query2.query,variables:query2.variables||null})),fetch(finalUrl,requestOptions)},getUrlParams(keys=[]){return Object.fromEntries(keys.map(k=>[k,new URLSearchParams(window.location.search).get(k)||""]))},formatCurrency(value){return value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},updateUrlParams(updates){const url=new URL(window.location.href);let hasChanges=!1;Object.entries(updates).forEach(([key,value])=>{const current=url.searchParams.get(key);value?current!==value&&(url.searchParams.set(key,value),hasChanges=!0):current!==null&&(url.searchParams.delete(key),hasChanges=!0)}),hasChanges&&window.history.replaceState({},"",url.toString())},buildCanonicalFromUrl(excludeParams=["ti-screen"]){const url=new URL(window.location.href);return excludeParams.forEach(param=>url.searchParams.delete(param)),`${url.origin}${url.pathname}${url.search}`},updateUrlParam(key,value){this.updateUrlParams({[key]:value})},setSessionStorage:(key,value)=>{const existing=sessionStorage.getItem(key);let dataToStore=value;if(existing&&typeof value=="object"){const parsed=JSON.parse(existing);parsed&&typeof parsed=="object"&&(dataToStore={...parsed,...value})}sessionStorage.setItem(key,JSON.stringify(dataToStore))},getSessionStorage:key=>{try{return JSON.parse(sessionStorage.getItem(key))}catch{return sessionStorage.getItem(key)}},clearSessionStorage:key=>{typeof Storage>"u"||sessionStorage.removeItem(key)},reset(){const PYDForm2=document.querySelector("pyd-form");PYDForm2?.resetDownstream(["brand","series","model","storage","carrier"]),PYDForm2?.disableSubmit(),PYDForm2?.disableQuestions(),PYD.updateUrlParams({brand:null,series:null,model:null,storage:null,carrier:null,q1:null,q2:null,q3:null}),this.state={},PYD.hideAll(".offer-screen").then(()=>{document.querySelector(".device-placeholder")?.classList.remove("hidden")}),this.showScreen("pyd");const scrollTarget=document.getElementById("ti-device-picker");scrollTarget&&scrollTarget.scrollIntoView({behavior:"smooth",block:"start"}),PYDForm2?.init()},resetPYDState(){Object.assign(this.state,{brand:void 0,category:void 0,series:void 0,model:void 0,storage:void 0,carrier:void 0,q1:void 0,q2:void 0,q3:void 0})},hideAll(selector){return new Promise(resolve=>{document.querySelectorAll(selector).forEach(el=>{el.classList.add("hidden")}),resolve()})},async getPriceEstimate(){const activeChannel=document.querySelector("[data-channel]").dataset.channel.split(",").map(s=>s.trim()).filter(s=>s.length);PYD.config.CHANNELS=activeChannel;const countryCode=document.querySelector("[data-country]").dataset.country,currencyCode={US:"USD",CA:"CAD"}[countryCode]||"USD",validPromoParams=PYD.getSessionStorage("socialMarketingPromoUTM"),{brand,category,series,model,storage,carrier,q1,q2,q3}=PYD.state,carrierName=carrier?.handle===LOCKED_CARRIER_HANDLE?"Other":carrier?.name??null,variables={brandName:brand?.name??null,seriesName:series?.name??null,modelName:model?.name??series?.name??null,storageOption:storage?.name??null,carrierName,categoryId:category?.id??null,powerUp:q1.id==="yes",lcdOK:q2.id==="yes",cracks:q3.id==="yes",channels:PYD.config?.CHANNELS??["WEB"],latitude:null,longitude:null,countryCode:countryCode??"US",currencyCode};
249validPromoParams!=null&&Object.keys(validPromoParams).length>0&&(variables.additionalPromoQualifiers=validPromoParams);const data=await(await PYD.fetchData(PYD.config.GRAPHQL_URL,{query:PYD.queries.payout,variables},"POST")).json(),payout=data?.data?.payout||[];document.querySelector(".device-cash-offer")?.classList.add("active"),typeof data.errors<"u"||payout.offerV3==null?PYD.hideAll(".offer-type").then(()=>{document.querySelector(".device-placeholder")?.classList.add("hidden"),document.querySelector(".offer-card")?.classList.remove("hidden"),document.querySelector(".offer-error")?.classList.remove("hidden")}):document.querySelector(".offer-error").classList.add("hidden"),PYD.state.payout=payout},setDeviceInfo:()=>{let sessionData=PYD.getSessionStorage("pyd");const brandName=sessionData&&sessionData.brandName.charAt(0).toUpperCase()+sessionData.brandName.slice(1),categoryName=sessionData&&sessionData.categoryName,modelName=sessionData&&sessionData.modelName,seriesName=sessionData&&sessionData.seriesName,storageOption=sessionData&&sessionData.storageOption,carrierName=sessionData&&sessionData.carrierName,powerUp=sessionData&&sessionData.powerUp,lcdOk=sessionData&&sessionData.lcdOk,cracks=sessionData&&sessionData.cracks,offerPrice=sessionData&&sessionData.offerPrice,promoPrice=sessionData&&sessionData.promoPrice,offerPriceMailIn=sessionData&&sessionData.offerPriceMailIn,offerState=sessionData&&sessionData.offerState?.toLowerCase(),countryCode=document.querySelector("[data-country]").dataset.country,currencyCode={CA:" CAD"}[countryCode]||"",displayName=modelName&&modelName.trim()!==""&&modelName!==seriesName?modelName:seriesName;document.querySelectorAll(".strikethrough-price").forEach(i2=>{i2.innerHTML=""}),document.querySelector(".device-name").innerHTML=`${decodeURIComponent(brandName)} ${decodeURIComponent(displayName)}`,document.querySelector(".device-storage").classList.add("hidden"),storageOption&&(document.querySelector(".device-storage").innerHTML=`${storageOption}`,document.querySelector(".device-storage").classList.remove("hidden")),document.querySelector(".device-carrier").classList.add("hidden"),carrierName&&(document.querySelector(".device-carrier").innerHTML=`${carrierName}`,document.querySelector(".device-carrier").classList.remove("hidden")),document.querySelector(".powers-on.yes").classList.toggle("hidden",powerUp==="no"),document.querySelector(".powers-on.no").classList.toggle("hidden",powerUp!=="no"),document.querySelector(".lights-up.yes").classList.toggle("hidden",lcdOk==="no"),document.querySelector(".lights-up.no").classList.toggle("hidden",lcdOk!=="no"),document.querySelector(".has-cracks.yes").classList.toggle("hidden",cracks!=="no"),document.querySelector(".has-cracks.no").classList.toggle("hidden",cracks==="no");let offerType=document.querySelector(".device-offer").dataset.offerType;PYD.setSessionStorage("pyd",{selectedOfferType:offerType}),PYD.hideAll(".offer-type").then(()=>{if(offerType=="both"&&((offerPrice==null||offerPrice==0)&&(offerType="mailin"),(offerPriceMailIn==null||offerPriceMailIn==0)&&(offerType="kiosk")),offerType=="both"){PYD.setSessionStorage("pyd",{offerDisplayed:"both"}),document.querySelector(".device-placeholder").classList.add("hidden"),document.querySelector(".offer-card").classList.remove("hidden"),document.querySelector(".kiosk-mailin").classList.remove("hidden");let kioskDiscount=1-document.querySelector(".kiosk").dataset.discount/100;kioskDiscount<1&&Math.round(offerPrice*kioskDiscount)<offerPrice&&(document.querySelector("label[for='kiosk-offer'] .strikethrough-price").innerHTML=`$${Math.round(offerPrice*kioskDiscount)}<div class="currency-code">${currencyCode}</div>`),document.querySelector("label[for='kiosk-offer'] .amount:not(.counter)").innerHTML=`${offerPrice}`,PYD.countUp(offerPrice,"label[for='kiosk-offer'] .offer-amount"),document.querySelector("label[for='mailin-offer'] .amount:not(.counter)").innerHTML=`${offerPriceMailIn}`,PYD.countUp(offerPriceMailIn,"label[for='mailin-offer'] .offer-amount"),this.dispatchEvent(new CustomEvent("pyd:condition-completed",{detail:{...PYD.state,stepName:"condition"},bubbles:!0})),this.dispatchEvent(new CustomEvent("pyd:form-completed",{detail:{...PYD.state,stepName:"offer page"},bubbles:!0}))}offerType=="kiosk"&&(PYD.setSessionStorage("pyd",{offerDisplayed:"kiosk"}),document.querySelector(".kiosk")?.classList.remove("hidden"),document.querySelector(".offer-card")?.classList.remove("hidden"),PYD.hideAll(".offer-state").then(()=>
249{if(this.dispatchEvent(new CustomEvent("pyd:screen-loaded",{detail:{screen:offerState?.replaceAll("_","-")},bubbles:!0})),offerState){if(offerState=="base_price"){document.querySelector(".base-price").classList.remove("hidden");let kioskDiscount=1-document.querySelector(".kiosk").dataset.discount/100;kioskDiscount<1&&Math.round(offerPrice*kioskDiscount)<offerPrice&&(document.querySelector(".base-price .strikethrough-price").innerHTML=`$${Math.round(offerPrice*kioskDiscount)}<div class="currency-code">${currencyCode}</div>`),document.querySelector(".base-price .amount:not(.counter)").innerHTML=`${offerPrice}${currencyCode}`,PYD.countUp(offerPrice,".base-price .offer-amount",currencyCode)}if(offerState=="promo_price"){let offerPriceWithPromo=offerPrice+promoPrice,promoPercent=1-document.querySelector(".kiosk").dataset.promoPercent/100;if(promoPercent<1&&Math.round(offerPriceWithPromo*promoPercent)<offerPriceWithPromo)document.querySelector(".promo-price").classList.remove("hidden"),document.querySelector(".promo-price .strikethrough-price").innerHTML=`$${Math.round(offerPriceWithPromo*promoPercent)}<div class="currency-code">${currencyCode}</div>`,document.querySelector(".promo-price .amount:not(.counter)").innerHTML=`${Math.round(offerPriceWithPromo)}${currencyCode}`,PYD.countUp(offerPriceWithPromo,".promo-price .offer-amount",currencyCode);else{let strikethroughPrice=offerPrice,offerPriceWithPromo2=offerPrice+promoPrice;PYD.setSessionStorage("pyd",{offerPrice:offerPriceWithPromo2}),document.querySelector(".promo-price").classList.remove("hidden"),document.querySelector(".promo-price .strikethrough-price").innerHTML=`$${Math.round(strikethroughPrice)}<div class="currency-code">${currencyCode}</div>`,document.querySelector(".promo-price .amount:not(.counter)").innerHTML=`${Math.round(offerPriceWithPromo2)}${currencyCode}`,PYD.countUp(offerPriceWithPromo2,".promo-price .offer-amount",currencyCode)}}if(offerState=="no_lock"){document.querySelector(".no-lock").classList.remove("hidden"),categoryName.toLowerCase()=="tablet"?document.querySelector(".no-lock .tablet").classList.remove("hidden"):document.querySelector(".no-lock .non-tablet").classList.remove("hidden");let kioskDiscount=1-document.querySelector(".kiosk").dataset.discount/100;kioskDiscount<1&&Math.round(offerPrice*kioskDiscount)<offerPrice&&(document.querySelector(".no-lock .strikethrough-price").innerHTML=`$${Math.round(offerPrice*kioskDiscount)}<div class="currency-code">${currencyCode}</div>`),document.querySelector(".no-lock .amount:not(.counter)").innerHTML=`${offerPrice}${currencyCode}`,PYD.countUp(offerPrice,".no-lock .offer-amount",currencyCode)}offerState=="recycle"&&document.querySelector(".recycle").classList.remove("hidden"),offerState=="check_back"&&document.querySelector(".check-back").classList.remove("hidden"),offerState=="device_not_accepted"&&document.querySelector(".device-not-accepted").classList.remove("hidden"),document.querySelector(".device-email").classList.add("hidden"),document.querySelector(".device-dropoff").classList.add("hidden"),document.querySelector(".device-placeholder").classList.add("hidden"),this.dispatchEvent(new CustomEvent("pyd:condition-completed",{detail:{...PYD.state,stepName:"condition"},bubbles:!0})),this.dispatchEvent(new CustomEvent("pyd:form-completed",{detail:{...PYD.state,stepName:"offer page"},bubbles:!0}))}})),offerType=="mailin"&&(document.querySelector(".mailin").classList.remove("hidden"),document.querySelector(".mail-in-error").classList.add("hidden"),offerPriceMailIn<=0||sessionData.productId==""?(PYD.setSessionStorage("pyd",{offerDisplayed:"none"}),document.querySelector(".offer-error").classList.add("hidden"),document.querySelector(".mail-in").classList.add("hidden"),document.querySelector(".mail-in-error").classList.remove("hidden"),this.dispatchEvent(new CustomEvent("pyd:form-completed",{detail:{...PYD.state,stepName:"no price available"},bubbles:!0}))):(PYD.setSessionStorage("pyd",{offerDisplayed:"mail-in"}),document.querySelector(".mail-in").classList.remove("hidden"),document.querySelector(".mailin").classList.remove("hidden"),document.querySelector(".mailin .amount:not(.counter)").innerHTML=`${offerPriceMailIn}`,PYD.countUp(offerPriceMailIn,".mailin .offer-amount")),document.querySelector(".device-placeholder").classList.add("hidden"),document.querySelector(".offer-card").classList.remove("hidden"),this.dispatchEvent(new CustomEvent("pyd:condition-completed",{detail:{...PYD.state,stepName:"condition"},bubbles:!0})),this.dispatchEvent(new CustomEvent("pyd:form-completed",{detail:{...PYD.state,stepName:"offer page"},bubbles:!0})))}),document.querySelector(".ti-pyd-offer").scrollIntoView({behavior:"smooth",block:"start"}),window.dispatchEvent(new CustomEvent("pyd:offer-shown",{detail:PYD.state,bubbles:!0,composed:!0}))},countUp:(countTo,selector,suffix="")=>{suffix!==""&&(suffix=" "+suffix);const el=document.querySelector(`${selector} .counter`);if(!countTo||!el)return;const duration=1e3,start=performance.now(),animate=t=>{const progress=Math.min((t-start)/duration,1),value=Math.floor(progress*countTo);el.textContent=`${value}${suffix}`,progress<1?requestAnimationFrame(animate):el.textContent=`${countTo}${suffix}`};requestAnimationFrame(animate)},copyToClipboard:text=>{navigator.clipboard.writeText(text).then(()=>
249{const copied=document.querySelector(".device-offer .copied");copied.classList.add("show"),setTimeout(()=>{copied.classList.remove("show")},2e3)}).catch(err=>{console.error("Failed to copy:",err)})},updateMetaTags:({title,description,canonical})=>{canonical=(canonical||"").toLowerCase();const upsertMeta=(selector,attributes)=>{let tag=document.querySelector(selector);tag||(tag=document.createElement("meta"),Object.keys(attributes).forEach(key=>{key!=="content"&&tag.setAttribute(key,attributes[key])}),document.head.appendChild(tag)),attributes.content&&tag.setAttribute("content",attributes.content)};title&&(document.title=title),upsertMeta('meta[name="description"]',{name:"description",content:description});let canonicalLink=document.querySelector('link[rel="canonical"]');canonicalLink||(canonicalLink=document.createElement("link"),canonicalLink.setAttribute("rel","canonical"),document.head.appendChild(canonicalLink)),canonical&&canonicalLink.setAttribute("href",canonical),title&&upsertMeta('meta[property="og:title"]',{property:"og:title",content:title}),description&&upsertMeta('meta[property="og:description"]',{property:"og:description",content:description}),canonical&&upsertMeta('meta[property="og:url"]',{property:"og:url",content:canonical}),title&&upsertMeta('meta[name="twitter:title"]',{name:"twitter:title",content:title}),description&&upsertMeta('meta[name="twitter:description"]',{name:"twitter:description",content:description}),canonical&&upsertMeta('meta[name="twitter:url"]',{name:"twitter:url",content:canonical})},capitalize:str=>str.charAt(0).toUpperCase()+str.slice(1),getBrandFromDomain:()=>{const domain=location.hostname.toLowerCase();return domain.includes("ecoatm")?"ecoatm":domain.includes("gazelle")?"gazelle":"ecoatm"},acceptOffer:e=>{document.querySelector("#kiosk-offer").checked==!0&&PYD.setSessionStorage("pyd",{selectedOfferType:"kiosk"}),document.querySelector("#mailin-offer").checked==!0&&PYD.setSessionStorage("pyd",{selectedOfferType:"mailin"});let sessionData=PYD.getSessionStorage("pyd");const offerType=sessionData&&sessionData.selectedOfferType,offerId=sessionData&&sessionData.offerId,productId=sessionData&&sessionData.productId;if(offerType==="kiosk"&&(PYD.getEmail(e),window.dispatchEvent(new CustomEvent("pyd:offer-kiosk",{detail:{...PYD.state,stepName:"offer page"}}))),offerType==="mailin"){let newDevice={productId,offerId};PYD.setSessionStorage("pyd",{currency:"USD"}),window.tradeIn.addItem(newDevice),["brand","series","model","storage","carrier","q1","q2","q3"].forEach(p=>PYD.updateUrlParam(p,null)),window.dispatchEvent(new CustomEvent("pyd:offer-accepted",{detail:PYD.state,bubbles:!0,composed:!0})),PYD.showScreen("cart")}},getEmail:e=>{const combinedVariant=document.querySelector('[data-contact-variant="combined"]'),legacyVariant=document.querySelector('[data-contact-variant="legacy"]');window.PYD_ENABLE_COMBINED_CONTACT?legacyVariant?.remove():combinedVariant?.remove();const countryCode=document.querySelector("[data-country]").dataset.country,currencyCode={CA:" CAD"}[countryCode]||"";document.querySelector("#email-button img")?.classList.remove("hidden"),document.querySelector("#email-button .pyd-spinner")?.classList.add("hidden"),document.querySelector("#phone-button img")?.classList.remove("hidden"),document.querySelector("#phone-button .pyd-spinner")?.classList.add("hidden"),PYD.enableButton("#email-button"),PYD.enableButton("#phone-button"),document.querySelector(".kiosk-mailin").classList.add("hidden"),document.querySelector(".kiosk").classList.remove("hidden");let sessionData=PYD.getSessionStorage("pyd");document.querySelectorAll(".offer-state").forEach(el=>{el.classList.add("hidden")}),document.querySelector(".device-email").classList.remove("hidden");const combinedEmailInput=document.querySelector('.combined-contact-form input[name="email-address"]');if(combinedEmailInput&&(PYD.updateContactButtonState(),combinedEmailInput.oninput=PYD.updateContactButtonState),sessionData?.offerState.toLowerCase()=="promo_price"){let offerPriceWithPromo=sessionData?.offerPrice+sessionData?.promoPrice,promoPercent=1-document.querySelector(".kiosk").dataset.promoPercent/100;promoPercent<1&&Math.round(offerPriceWithPromo*promoPercent)<offerPriceWithPromo?document.querySelector(".device-email .strikethrough-price").innerHTML=`$${Math.round(offerPriceWithPromo*promoPercent)}<div class="currency-code">${currencyCode}</div>`:document.querySelector(".device-email .strikethrough-price").innerHTML=`$${Math.round(se
249ssionData?.offerPrice-sessionData?.promoPrice)}<div class="currency-code">${currencyCode}</div>`,document.querySelector(".device-email .amount:not(.counter)").innerHTML=`${offerPriceWithPromo}${currencyCode}`,document.querySelector(".device-email .amount.counter").innerHTML=`${offerPriceWithPromo}${currencyCode}`}else{let kioskDiscount=1-document.querySelector(".kiosk").dataset.discount/100;kioskDiscount<1&&Math.round(sessionData.offerPrice*kioskDiscount)<sessionData.offerPrice&&(document.querySelector(".device-email .strikethrough-price").innerHTML=`$${Math.round(sessionData.offerPrice*kioskDiscount)}<div class="currency-code">${currencyCode}</div>`),document.querySelector(".device-email .amount:not(.counter)").innerHTML=`${sessionData.offerPrice}${currencyCode}`,document.querySelector(".device-email .amount.counter").innerHTML=`${sessionData.offerPrice}${currencyCode}`}this.dispatchEvent(new CustomEvent("pyd:screen-loaded",{detail:{screen:"contact-form"},bubbles:!0}))},disableButton:selector=>{let targetButton=document.querySelector(selector);targetButton?.setAttribute("disabled","disabled"),targetButton?.classList.add("disabled"),targetButton?.setAttribute("disabled","true"),targetButton?.style&&(targetButton.style.pointerEvents="none"),targetButton?.style&&(targetButton.style.opacity=.5)},enableButton:selector=>{let targetButton=document.querySelector(selector);targetButton?.removeAttribute("disabled","disabled"),targetButton?.classList.remove("disabled"),targetButton?.removeAttribute("disabled","true"),targetButton?.style&&(targetButton.style.pointerEvents="auto"),targetButton?.style&&(targetButton.style.opacity=1)},updateContactButtonState:()=>{if(!document.querySelector(".combined-contact-form"))return;const emailAddress=document.querySelector('input[name="email-address"]')?.value.trim()||"";PYD.validateEmail(emailAddress)?PYD.enableButton("#email-button"):PYD.disableButton("#email-button")},getOfferCodeEmail:e=>{PYD.disableButton("#email-button");const emailAddress=document.querySelector('input[name="email-address"]').value.trim();PYD.validateEmail(emailAddress)===!1?(document.querySelector(".input-email").classList.add("error"),document.querySelector('input[name="email-address"]').addEventListener("input",PYD.errorMessageRemove),PYD.enableButton("#email-button")):(document.querySelector(".input-email").classList.remove("error"),document.querySelector("#email-button img")?.classList.add("hidden"),document.querySelector("#email-button .pyd-spinner").classList.remove("hidden"),PYD.setSessionStorage("pyd",{emailAddress}),PYD.state.emailAddress=emailAddress,PYD.getOfferCode("email"))},getOfferCodePhone:e=>{PYD.disableButton("#phone-button");const phone=document.querySelector('input[name="phone-number"]').value.trim();PYD.validatePhone(phone)===!1?(document.querySelector(".error-message.phone-error")?.classList.remove("hidden"),document.querySelector(".error-message.checkbox-error")?.classList.add("hidden"),document.querySelector(".input-phone")?.classList.add("error"),document.querySelector('input[name="phone-number"]').addEventListener("input",PYD.errorMessageRemove),PYD.enableButton("#phone-button")):document.querySelector("#text-subscribe")?.dataset.requireConsent!=="false"&&!document.querySelector('#text-subscribe input[type="checkbox"]')?.checked?(document.querySelector(".error-message.checkbox-error")?.classList.remove("hidden"),document.querySelector(".error-message.phone-error")?.classList.add("hidden"),document.querySelector(".input-phone")?.classList.add("error"),PYD.enableButton("#phone-button")):(document.querySelector(".input-phone")?.classList.remove("error"),document.querySelector(".error-message.checkbox-error")?.classList.add("hidden"),document.querySelector(".error-message.phone-error")?.classList.add("hidden"),document.querySelector("#phone-button img")?.classList.add("hidden"),document.querySelector("#phone-button .pyd-spinner")?.classList.remove("hidden"),PYD.setSessionStorage("pyd",{phoneNumber:phone}),PYD.state.phone=phone,PYD.getOfferCode("phone"))},getOfferCodeContact:e=>{PYD.disableButton("#email-button");const emailAddress=document.querySelector('input[name="email-address"]').value.trim();if(PYD.validateEmail(emailAddress)===!1){document.querySelector(".input-email").classList.add("error"),document.querySelector('input[name="email-address"]').addEventListener("input",PYD.errorMessageRemove),PYD.enableButton("#email-button");return}document.querySelector(".input-email").classList.remove("error");const phoneInput=document.querySelector('input[name="phone-number"]'),phone=phoneInput?phoneInput.value.trim():"";if(phone&&PYD.validatePhone(phone)===!1){document.querySelector(".error-message.phone-error")?.classList.remove("hidden"),document.querySelector(".input-phone")?.classList.add("error"),phoneInput.addEventListener("input",PYD.errorMessageRemove),PYD.enableButton("#email-button");return}document.querySelector(".input-phone")?.classList.remove("error"),document.querySelector(".error-message.phone-error")?.classList.add("hidden"),document.querySelector("#email-button img")?.classList.add("hidden"),document.querySelector("#email-button .pyd-spinner")?.classList.remove("hidden"),PYD.setSessionStorage("pyd",{emailAddress,phoneNumber:phone||void 0}),PYD.state.emailAddress=emailAddress,PYD.state.phone=phone||void 0,PYD.getOfferCode("email")},getOfferCode:type=>{const countryCode=document.querySelector("[data-country]").dataset.country,currencyCode={CA:" CAD"}[countryCode]||"";let sessionData=PYD.getSessionStorage("pyd"),apiUrl=`${PYD.config.GRAPHQL_URL}/graphql`,moneyLionExist=!1,moneyLionElement=document.getElementById("moneyLionMain");moneyLionElement&&moneyLionElement.style.display!=="none"&&(moneyLionExist=!0);let optimizelyDecisionData=PYD.getSessionStorage("optimizelyDecisionData"),metaData={moneylionVisible:moneyLionExist,optimizelyDecisionData,referringDomain:window.location.hostname};const sessionKeys={pyd_gclid:"gclid",pyd_msclkid:"msclkid",pyd_fbclid:"fbclid"};
249Object.keys(sessionKeys).forEach(storageKey=>{const value=sessionStorage.getItem(storageKey);value&&(metaData[sessionKeys[storageKey]]=value)}),PYD.handleNewsletterSubscribe();let stepName=sessionData.emailAddress&&sessionData.phoneNumber?"enter email and phone":"enter "+type;this.dispatchEvent(new CustomEvent("pyd:enter-contact",{detail:{...PYD.state,stepName},bubbles:!0,composed:!0}));var graphql={query:`mutation DropOffCode( 250 $DeviceId: String! 251 ${sessionData.emailAddress?"$Email: String":""} 252 ${sessionData.phoneNumber?"$phoneNumber: String":""} 253 $OfferId: String 254 $scratches: Boolean 255 $cracks: Boolean 256 $powerUp: Boolean 257 $lcdOk: Boolean 258 $channelName: ChannelName 259 $v2PaymentInfo: PaymentInfoV2Input 260 $codeType: String 261 $metadata: JSON 262 ) { 263 dropOffCode( 264 DeviceId: $DeviceId 265 ${sessionData.emailAddress?"Email: $Email":""} 266 ${sessionData.phoneNumber?"phoneNumber: $phoneNumber":""} 267 OfferId: $OfferId 268 scratches: $scratches 269 cracks: $cracks 270 powerUp: $powerUp 271 lcdOk: $lcdOk 272 channelName: $channelName 273 v2PaymentInfo: $v2PaymentInfo 274 codeType: $codeType 275 metadata: $metadata 276 ) { 277 Code 278 ChannelName 279 CodeVersion 280 CreationDateTime 281 DevicePriceId 282 ${sessionData.emailAddress?"Email":""} 283 ${sessionData.phoneNumber?"PhoneNumber":""} 284 ExpirationDateTime 285 Id 286 Price 287 PriceGrade 288 } 289 }`,variables:{DeviceId:sessionData.deviceId,Email:sessionData.emailAddress,OfferId:sessionData.offerId,scratches:sessionData.cracks==="yes",cracks:sessionData.cracks==="yes",powerUp:sessionData.powerUp==="yes",lcdOk:sessionData.lcdOk==="yes",channelName:"WEB",codeType:"W",metadata:metaData,...sessionData.emailAddress&&{Email:sessionData.emailAddress.toLowerCase()},...sessionData.phoneNumber&&{phoneNumber:sessionData.phoneNumber}}};PYD.fetchData(apiUrl,graphql,"POST").then(response=>response.json()).then(results=>{if(results.errors&&results.errors.length>0){let error=results.errors[0],errorData={apiUrl,query:graphql};PYD.handleError("Error caught while fetching DropOffCode",error,errorData)}else{let offer=results.data.dropOffCode;PYD.setSessionStorage("pyd",{createdAt:offer.CreationDateTime,expiryDate:offer.ExpirationDateTime,kioskCode:offer.Code,currency:"USD"});let sessionData2=PYD.getSessionStorage("pyd");if(PYD.state.kioskCode=offer.Code,this.dispatchEvent(new CustomEvent("pyd:thank-you",{detail:{...PYD.state,stepName:"thank you page"},bubbles:!0,composed:!0})),document.querySelector(".device-email")?.classList.add("hidden"),document.querySelector(".device-dropoff")?.classList.remove("hidden"),document.querySelector(".offer-code .code")&&(document.querySelector(".offer-code .code").innerHTML=`${offer.Code}`),document.querySelector(".expire-date span")&&(document.querySelector(".expire-date span").innerHTML=` Expires ${PYD.formatDate(offer.ExpirationDateTime)}`),sessionData2?.offerState.toLowerCase()=="promo_price"){let offerPriceWithPromo=sessionData2?.offerPrice+sessionData2?.promoPrice,promoPercent=1-document.querySelector(".kiosk").dataset.promoPercent/100;promoPercent<1&&Math.round(offerPriceWithPromo*promoPercent)<offerPriceWithPromo?document.querySelector(".device-dropoff .strikethrough-price").innerHTML=`$${Math.round(offerPriceWithPromo*promoPercent)}<div class="currency-code">${currencyCode}</div>`:document.querySelector(".device-dropoff .strikethrough-price").innerHTML=`$${Math.round(sessionData2?.offerPrice-sessionData2?.promoPrice)}<div class="currency-code">${currencyCode}</div>`,document.querySelector(".device-dropoff .amount:not(.counter)").innerHTML=`${offerPriceWithPromo}${currencyCode}`,document.querySelector(".device-dropoff .amount.counter").innerHTML=`${offerPriceWithPromo}${currencyCode}`}else{let kioskDiscount=1-document.querySelector(".kiosk").dataset.discount/100;kioskDiscount<1&&Math.round(sessionData2.offerPrice*kioskDiscount)<sessionData2.offerPrice&&(document.querySelector(".device-dropoff .strikethrough-price").innerHTML=`$${Math.round(se
289ssionData2.offerPrice*kioskDiscount)}<div class="currency-code">${currencyCode}</div>`),document.querySelector(".device-dropoff .amount:not(.counter)").innerHTML=`${sessionData2.offerPrice}${currencyCode}`,document.querySelector(".device-dropoff .amount.counter").innerHTML=`${sessionData2.offerPrice}${currencyCode}`}PYD.sendOffer(),PYD.clearSessionStorage("pyd")}}).catch(error=>{PYD.hideAll(".offer-type").then(()=>{error.code=="VALIDATION_ERROR"?(document.querySelector(".input-email")?.classList.add("error"),document.querySelector("#email-button img")?.classList.remove("hidden"),document.querySelector("#email-button .pyd-spinner")?.classList.add("hidden"),document.querySelector(".kiosk")?.classList.remove("hidden"),PYD.enableButton("#email-button")):(document.querySelector(".device-placeholder")?.classList.add("hidden"),document.querySelector(".offer-card")?.classList.remove("hidden"),document.querySelector(".offer-error")?.classList.remove("hidden"))});let errorData={apiUrl,query:graphql};PYD.handleError("Error caught while fetching DropOffCode",error,errorData)})},handleNewsletterSubscribe:()=>{const newsletterInputs=document.querySelectorAll('.contact-form input[name="method"]'),sessionData=PYD.getSessionStorage("pyd");newsletterInputs.length?newsletterInputs.forEach(input=>{input.checked&&input.getAttribute("id")=="email-method"&&document.querySelector("#email-newsletter").checked&&(PYD.setSessionStorage("pyd",{emailSubscribed:!0}),PYD.subscribeToNewsletter(sessionData.emailAddress.toLowerCase(),PYD.getBrandFromDomain(),PYD.config.NEWSLETTER_SOURCE))}):document.querySelector("#email-newsletter")?.checked&&sessionData.emailAddress&&(PYD.setSessionStorage("pyd",{emailSubscribed:!0}),PYD.subscribeToNewsletter(sessionData.emailAddress.toLowerCase(),PYD.getBrandFromDomain(),PYD.config.NEWSLETTER_SOURCE))},setSessionStorage:(key,value)=>{const existing=sessionStorage.getItem(key);let dataToStore=value;if(existing&&typeof value=="object"){const parsed=JSON.parse(existing);parsed&&typeof parsed=="object"&&(dataToStore={...parsed,...value})}sessionStorage.setItem(key,JSON.stringify(dataToStore))},getSessionStorage:key=>{try{return JSON.parse(sessionStorage.getItem(key))}catch{return sessionStorage.getItem(key)}},clearSessionStorage:key=>{typeof Storage>"u"||sessionStorage.removeItem(key)},handleize:(input="")=>input?input.trim().toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/&/g,"-and-").replace(/\+/g,"-plus-").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-"):"",validateEmail:email=>!!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email),validatePhone:phone=>{const cleaned=phone.replace(/[^\d]/g,"");return!!/^(\d{10}|\d{11})$/.test(cleaned)},validateZip:zip=>!!/^\d{5}(-\d{4})?$/.test(zip),formatDate:isoString=>{const date=new Date(isoString),options={month:"short",day:"2-digit",year:"numeric",timeZone:"UTC"};return date.toLocaleDateString("en-US",options)},formatPhoneNumber:input=>{let value=input.value.replace(/\D/g,""),formattedValue="";value==""&&input.classList.remove("filled"),value.length>0&&(input.classList.add("filled"),formattedValue=value.substring(0,3)),value.length>=4&&(formattedValue+="-"+value.substring(3,6)),value.length>=7&&(formattedValue+="-"+value.substring(6,10)),input.value=formattedValue},formatAddress:({street1,city,state,zip})=>`${street1}<br>${city}, ${state} ${zip}`,errorMessageRemove:e=>{const input=e.target;input.value==""&&(input.closest(".contact-form-container").classList.remove("error"),input.removeEventListener("input",PYD.errorMessageRemove))},handleError(message,error,payout){throw console.error(message,error),window.ecoATMTheme.sendLogsToDataDog({error,message,payload:{apiURL:payout?.apiUrl,query:payout?.query}}),error},deActivateErrorCard:()=>{document.querySelector(".offer-screen.device-error")?.classList.add("hidden"),document.querySelector(".offer-screen.device-placeholder")?.classList.remove("hidden"),document.querySelector(".offer-screen.offer-card")?.classList.add("hidden")},activateErrorCard:()=>{if(document.querySelector(".offer-screen.device-placeholder")?.classList.add("hidden"),document.querySelector(".offer-screen.device-error")?.classList.remove("hidden"),document.querySelector(".offer-screen.offer-card")?.classList.add("hidden"),window.innerWidth<650){const target=document.getElementById("estimate-button");target&&target.scrollIntoView({behavior:"smooth",block:"start"})}},sendOffer:e=>{let sessionData=PYD.getSessionStorage("pyd"),apiUrl=`${PYD.config.GRAPHQL_URL}}/graphql`;var graphql={query:`mutation SendDropoffCode($input: SendDropoffCodeInput) { 290 sendDropoffCode(input: $input) 291 }`,variables:{input:{kioskCode:sessionData.kioskCode,deviceId:sessionData.deviceId,offerId:sessionData.offerId}}};PYD.fetchData(apiUrl,graphql,"POST").then(response=>response.json()).then(results=>{console.log(results)}).catch(error=>{let errorData={apiUrl,query:graphql};PYD.handleError("Error caught while fetching sendDropoffCode",error,errorData)})},subscribeToNewsletter:(email,domain,contactSourceDetail)=>new Promise((resolve,reject)=>{let apiUrl=`${PYD.config.GRAPHQL_URL}/graphql`;var graphql={query:`mutation subscribeToNewsletter($input: NewsletterSubscribeInput!) { 292 subscribeToNewsletter(input: $input) 293 }`,variables:{input:{referringDomain:window.location.hostname,emailAddress:email,domain,contactSourceDetail}}};PYD.fetchData(apiUrl,graphql,"POST").then(response=>response.json()).then(results=>{resolve(results)}).catch(error=>{let errorData={apiUrl,query:graphql};PYD.handleError("Error caught while fetching subscribeToNewsletter",error,errorData),reject(error)})}),validateAddressesAndSubmit:async function(customerData){const mailingUserInputAddress=document.querySelector(".gpyd-m-checkout__confirm-ad
293dress--mailing [user-input-address]");mailingUserInputAddress&&(mailingUserInputAddress.innerHTML=PYD.formatAddress({street1:customerData.customerAddress,city:customerData.customerCity,state:customerData.customerState,zip:customerData.customerZip}));const primary=await PYD.verifyShippingAddress({street1:customerData.customerAddress,city:customerData.customerCity,state:customerData.customerState,zip:customerData.customerZip});if(primary){VERIFIED_MAIN_ADDRESS=primary;const mailingVerifiedAddress=document.querySelector(".gpyd-m-checkout__confirm-address--mailing [verified-address]");mailingVerifiedAddress&&(mailingVerifiedAddress.innerHTML=PYD.formatAddress({street1:primary.street1,city:primary.city,state:primary.state,zip:primary.zip}))}const useSameAddress=!!document.querySelector(".checkout-payment-options")?.shadowRoot.querySelector(".gpyd-m-checkout__check-address checkbox-input")?.shadowRoot.querySelector('input[type="checkbox"]')?.checked,checkAddress=customerData.checkCustomerAddress,hasCheckAddress=checkAddress&&checkAddress.customerAddress&&checkAddress.customerCity&&checkAddress.customerState&&checkAddress.customerZip;let secondary=null;if(useSameAddress==!0)secondary=primary,VERIFIED_CHECK_ADDRESS=primary;else if(hasCheckAddress){const checkUserInputAddress=document.querySelector(".gpyd-m-checkout__confirm-address--check [user-input-address]");if(checkUserInputAddress&&(checkUserInputAddress.innerHTML=PYD.formatAddress({street1:checkAddress.customerAddress,city:checkAddress.customerCity,state:checkAddress.customerState,zip:checkAddress.customerZip})),secondary=await PYD.verifyShippingAddress({street1:checkAddress.customerAddress,city:checkAddress.customerCity,state:checkAddress.customerState,zip:checkAddress.customerZip}),secondary){VERIFIED_CHECK_ADDRESS=secondary;const checkVerifiedAddress=document.querySelector(".gpyd-m-checkout__confirm-address--check [verified-address]");checkVerifiedAddress&&(checkVerifiedAddress.innerHTML=PYD.formatAddress({street1:secondary.street1,city:secondary.city,state:secondary.state,zip:secondary.zip}))}}CUSTOMER_DATA={...customerData};const normalize=str=>(str||"").trim().toUpperCase();let isMainSameAddress=!0;primary&&(isMainSameAddress=normalize(customerData.customerAddress)===normalize(primary.street1)&&normalize(customerData.customerCity)===normalize(primary.city)&&normalize(customerData.customerState)===normalize(primary.state)&&normalize(primary.zip).includes(normalize(customerData.customerZip)));let isCheckSameAddress=!0;if(!useSameAddress&&secondary&&(isCheckSameAddress=normalize(checkAddress.customerAddress)===normalize(secondary.street1)&&normalize(checkAddress.customerCity)===normalize(secondary.city)&&normalize(checkAddress.customerState)===normalize(secondary.state)&&normalize(secondary.zip).includes(normalize(checkAddress.customerZip))),isMainSameAddress&&isCheckSameAddress)PYD.moveToThankYou();else{document.querySelector(".gpyd-m-checkout__confirm-sale")?.removeAttribute("disabled");const leftInner=document.querySelector(".gpyd-m-checkout__left-inner");leftInner&&leftInner.classList.add("inactive");const address=document.querySelector(".gpyd-m-checkout__confirm-address");address&&address.classList.add("active"),window.scrollTo(0,0)}},async moveToThankYou(){document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.setAttribute("disabled","true");const mailInUserVerifiedAddress=document.querySelector('[data-name="user-default-address-mailin"]'),checkUserVerifiedAddress=document.querySelector('[data-name="user-default-address-check"]');let useVerifiedMainAddress=!1,useVerifiedCheckAddress=!1;if(mailInUserVerifiedAddress?.shadowRoot){const checkbox=mailInUserVerifiedAddress.shadowRoot.querySelector('input[type="checkbox"]');checkbox&&(useVerifiedMainAddress=checkbox.checked)}if(checkUserVerifiedAddress?.shadowRoot){const checkbox=checkUserVerifiedAddress.shadowRoot.querySelector('input[type="checkbox"]');checkbox&&(useVerifiedCheckAddress=checkbox.checked)}Object.entries(CUSTOMER_ADDRESS).forEach(([id,value])=>{const el=document.getElementById(id);el&&(el.textContent=value)});let customerMainDataForPackingSlip={...CUSTOMER_DATA};
293if(useVerifiedMainAddress&&VERIFIED_MAIN_ADDRESS){const verifiedMap={customerAddress:VERIFIED_MAIN_ADDRESS.street1||"",customerCity:VERIFIED_MAIN_ADDRESS.city||"",customerState:VERIFIED_MAIN_ADDRESS.state||"",customerZip:VERIFIED_MAIN_ADDRESS.zip||""};Object.entries(verifiedMap).forEach(([id,value])=>{const el=document.getElementById(id);el&&(el.textContent=value)}),customerMainDataForPackingSlip={...customerMainDataForPackingSlip,customerAddress:VERIFIED_MAIN_ADDRESS.street1,customerCity:VERIFIED_MAIN_ADDRESS.city,customerState:VERIFIED_MAIN_ADDRESS.state,customerZip:VERIFIED_MAIN_ADDRESS.zip}}useVerifiedCheckAddress&&VERIFIED_CHECK_ADDRESS&&(customerMainDataForPackingSlip={...customerMainDataForPackingSlip,checkCustomerAddress:{...customerMainDataForPackingSlip.checkCustomerAddress,customerAddress:VERIFIED_CHECK_ADDRESS.street1,customerCity:VERIFIED_CHECK_ADDRESS.city,customerState:VERIFIED_CHECK_ADDRESS.state,customerZip:VERIFIED_CHECK_ADDRESS.zip}});const selectedShippingOptionId=document.getElementById("shippingOptions")?.shadowRoot?.querySelector('input[type="radio"]:checked')?.value||null;if(await PYD.submitPackingSlip(customerMainDataForPackingSlip,selectedShippingOptionId)){window.dispatchEvent(new CustomEvent("tradeIn:thankYouLoaded",{detail:{...PYD.state,stepName:"thank you mail-in"}})),document.querySelector('checkbox-input[data-name="subscribe"]')?.shadowRoot?.querySelector('input[type="checkbox"]')?.checked&&PYD.subscribeToNewsletter(CUSTOMER_DATA.customerEmail,PYD.getBrandFromDomain(),PYD.config.NEWSLETTER_SOURCE),document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.removeAttribute("disabled"),window.tradeIn.deletePackingSlipFromStorage();const nextStepsCard=document.querySelector(".gpyd-m-checkout__thank-you--card-2-row.row-2"),descriptionContainer=nextStepsCard.querySelector(".gpyd-m-checkout__description"),labelText=descriptionContainer?.getAttribute("data-label-text")||"Print out your shipping label, then pack & ship your device(s).",boxText=descriptionContainer?.getAttribute("data-label-box")||"Wait for your box to arrive, then pack & ship your device(s).",mailInState=PYD.getSessionStorage("pyd").mailInMethod;descriptionContainer.innerHTML=mailInState==="Get a box sent to you"?boxText:labelText;const leftInner=document.querySelector(".gpyd-m-checkout__left-inner");leftInner&&leftInner.classList.add("inactive");const confirmSection=document.querySelector(".gpyd-m-checkout__confirm-address"),thankYouSection=document.querySelector(".gpyd-m-checkout__thank-you");confirmSection?.classList.remove("active"),thankYouSection?.classList.add("active"),window.scrollTo(0,0),document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.removeAttribute("disabled"),document.querySelector(".gpyd-m-checkout__confirm-sale")?.removeAttribute("disabled"),PYD.clearSessionStorage("pyd")}else document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.removeAttribute("disabled"),document.querySelector(".gpyd-m-checkout__confirm-sale")?.removeAttribute("disabled"),console.error("Packing slip submission failed.")},showCheckoutErrorMessage:type=>{let selector="input-address";document.querySelector(".gpyd-m-checkout__left .gpyd-m-checkout__confirm-address")?.classList.contains("active")&&(selector="verify-address"),document.querySelector(".gpyd-m-checkout__confirm-sale")?.removeAttribute("disabled"),document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.removeAttribute("disabled"),document.querySelectorAll(".ti-checkout__error-popup .ti-checkout__error-popup--content").forEach(el=>{el.classList.remove("active")}),document.querySelector(`.ti-checkout__error-popup[data-type="${selector}"]`)?.classList.add("active"),document.querySelector(`.ti-checkout__error-popup[data-type="${selector}"] .ti-checkout__error-popup--content[data-type="${type}"]`)?.classList.add("active")},hideCheckoutErrorMessage:()=>{document.querySelectorAll(".ti-checkout__error-popup").forEach(popup=>{popup.classList.remove("active")}),document.querySelectorAll(".ti-checkout__error-popup--content").forEach(popup=>{popup.classList.remove("active")})},setMailInMethods:shippingOptions=>{const options=[],fallback=shippingOptions.find(opt=>opt.name!=="obb");fallback&&options.push({value:fallback.id.toString(),title:"Print a Shipping Label",caption:"Sent via email"});const obbOption=shippingOptions.find(opt=>opt.name==="obb");obbOption&&options.length<2&&options.push({value:obbOption.id.toString(),title:"Get a box sent to you",caption:"6 - 7 days to arrive"});const radioGroup=document.getElementById("shippingOptions");
293if(radioGroup&&(radioGroup.setAttribute("data-options",JSON.stringify(options)),options.length===1)){const shadow=radioGroup.shadowRoot;if(shadow){const radio=shadow.querySelector('input[type="radio"]');radio&&(radio.checked=!0,radio.dispatchEvent(new Event("change",{bubbles:!0})));const radioOption=shadow.querySelector(".radio-option.checked");radioOption&&radioOption.classList.add("hide-radio")}}},gettingPackingSlip:async paymentType=>{const packingSlip=await window.tradeIn.getPackingSlip(),isCheckoutPage=window.location.search.includes("ti-screen=checkout");if(!packingSlip&&isCheckoutPage){const baseUrl=window.location.origin+window.location.pathname;window.location.href=baseUrl;return}if(!packingSlip)return;const items=packingSlip.transactionItems||[],html=` 294 <div class="gpyd-m-checkout__right-summary--content gpyd-m-checkout__description"> 295 ${items.map(item=>` 296 <div class="gpyd-m-checkout__right-summary--content-row"> 297 <div>${item.product.name}</div> 298 <div>$${item.estimatedValue.toFixed(2)}</div> 299 </div> 300 `).join("")} 301 </div> 302 `;packingSlip.shippingOptions&&PYD.setMailInMethods(packingSlip.shippingOptions),new MutationObserver((mutations,obs)=>{const containers=document.querySelectorAll(".gpyd-m-checkout__right-summary");containers.length>0&&(containers.forEach(container=>{container.innerHTML=html}),obs.disconnect())}).observe(document.body,{childList:!0,subtree:!0});const subTotal=packingSlip.totalEstimatedValue||0,promoPrice=packingSlip.totalPromo||0;let amazonGiftcardPrice=packingSlip.totalPayoutBonus||0,totalPrice=packingSlip.totalEstimatedPayment||0,showPromoPrice=!1;paymentType=="Amazon Gift Card"&&amazonGiftcardPrice==0&&(amazonGiftcardPrice=parseFloat((subTotal*.015).toFixed(2)),totalPrice=parseFloat((subTotal+promoPrice+amazonGiftcardPrice).toFixed(2))),PYD.setSessionStorage("pyd",{promotionalBonus:promoPrice,coupon:""});function updateElementsTextRaw(selector,value,prefix="$"){document.querySelectorAll(selector).forEach(el=>{el.textContent=`${prefix}${value}`})}function updateElementsText(selector,value,prefix="$"){document.querySelectorAll(selector).forEach(el=>{el.textContent=`${prefix}${value.toFixed(2)}`})}function addClassToElement(selector,newClass){document.querySelectorAll(selector).forEach(el=>{el.classList.add(newClass)})}function removeClassFromElement(selector,newClass){document.querySelectorAll(selector).forEach(el=>{el.classList.remove(newClass)})}const itemCount=items.length;document.querySelectorAll(".gpyd-m-checkout__right-subtotal--amount-count").forEach(span=>{span.textContent=itemCount===1?"1 item":`${itemCount} items`}),updateElementsTextRaw(".gpyd-m-checkout__right-subtotal--amount-number",PYD.formatCurrency(subTotal)),showPromoPrice?(updateElementsText(".gpyd-m-checkout__right-promo--amount-number",promoPrice),removeClassFromElement(".gpyd-m-checkout__right-promo","inactive")):addClassToElement(".gpyd-m-checkout__right-promo","inactive"),paymentType=="Amazon Gift Card"?(updateElementsText(".gpyd-m-checkout__right-amazon--amount-number",amazonGiftcardPrice),removeClassFromElement(".gpyd-m-checkout__right-amazon","inactive")):addClassToElement(".gpyd-m-checkout__right-amazon","inactive"),updateElementsTextRaw(".gpyd-m-checkout__right-total--amount-number",PYD.formatCurrency(totalPrice)),updateElementsTextRaw(".gpyd-m-checkout__summary-top-amount",PYD.formatCurrency(totalPrice))},submitPackingSlip:async(customerData,selectedShippingOptionId)=>{let input={operation:"SUBMIT",packingSlipNumber:window.tradeIn.getPackingSlipFromStorage(),email:customerData.customerEmail,shippingInformation:{firstName:customerData.customerFirstName,lastName:customerData.customerLastName,address:{street1:customerData.customerAddress,city:customerData.customerCity,state:customerData.customerState,zipCode:customerData.customerZip,country:"United States"},phoneNumber:customerData.customerPhone},selectedShippingOptionId:parseInt(selectedShippingOptionId)};customerData.customerPaymentName==="Paypal"&&(input.paymentInformation={payoutType:"PAYPAL",paypalEmail:customerData.customerPaymentAddress}),customerData.customerPaymentName==="Amazon Gift Card"&&(input.paymentInformation={payoutType:"AMAZON_GIFT_CARD"}),customerData.customerPaymentName==="Check"&&(input.paymentInformation={payoutType:"CHECK"},input.paymentInformation.checkName=customerData.checkCustomerAddress.customerFullName,input.paymentInformation.checkAddress={street1:customerData.checkCustomerAddress.customerAddress,city:customerData.checkCustomerAddress.customerCity,state:customerData.checkCustomerAddress.customerState,zipCode:customerData.checkCustomerAddress.customerZip,country:"United States"});let variables={input},apiUrl=`${PYD.config.GRAPHQL_URL}/graphql`;const graphql={query:PYD.queries.checkout,variables};return PYD.fetchData(apiUrl,graphql,"POST").then(response=>response.json()).then(results=>(results?.errors?.[0]?.code==="TRANSACTION_ITEM_LIMIT_EXCEEDED"||results?.errors?.[0]?.code==="TRANSACTION_ITEM_LIMIT_WOULD_EXCEED"?PYD.showCheckoutErrorMessage("limit"):PYD.hideCheckoutErrorMessage(),results?.data?.checkout?.packingSlip||null)).catch(error=>{PYD.showCheckoutErrorMessage("general");let errorData={apiUrl,query:graphql};return PYD.handleError("Error caught while Submitting PackingSlip",error,errorData),null})},verifyShippingAddress:async({street1,city,state,zip})=>{let apiUrl=`${PYD.config.GRAPHQL_URL}/graphql`;const graphql={query:PYD.queries.verifyAddress,variables:{street1,city,state,zip}};return PYD.fetchData(apiUrl,graphql,"GET").then(response=>response.json()).then(results=>{const verified=results?.data?.verifyAddress;return PYD.hideCheckoutErrorMessage(),verified||null}).catch(error=>{PYD.showCheckoutErrorMessage("general");let errorData={apiUrl,query:graphql};return PYD.handleError("Error caught while verifyShippingAddress",error,errorData),null})},initCheckoutPage:async()=>{document.querySelector(".ti-cart")?.classList.add("inactive");const packingSlip=await window.tradeIn.getPackingSlip();if(packingSlip){PYD.state.confirmationNumber=packingSlip.number;const span=document.getElementById("gpydOrderNumber");span&&(span.textContent=packingSlip.number),await PYD.gettingPackingSlip("paypal")}else PYD.init(),initTradeIn();await PYD.cartReady,window.dispatchEvent(new CustomEvent("tradeIn:CheckoutLoaded",{detail:{...PYD.state,stepName:"mail-in checkout"}}))},getFAQs:async handle=>{try{let variables={handle:{handle,type:"device_faq"}};const deviceFAQResponse=await PYD.fetchData(PYD.config.SHOPIFY_URL,{query:PYD.queries.deviceFAQ,variables},"POST",{"X-Shopify-Storefront-Access-Token":PYD.config.SHOPIFY_ACCESS_TOKEN});if(!deviceFAQResponse||!deviceFAQResponse.ok)return console.info(`No FAQ response for handle "${handle}" (status: ${deviceFAQResponse?.status})`),null;const text=await deviceFAQResponse.text();if(!text?.trim())return console.info(`No FAQ content found for handle "${handle}"`),null;let deviceFAQData;try{deviceFAQData=JSON.parse(text)}catch{return console.info(`FAQ data not JSON for handle "${handle}" \u2014 ignoring`),null}const metaobject=deviceFAQData?.data?.metaobject;if(!metaobject?.fields?.length)return console.info(`No FAQ metaobject fields foun
302d for handle "${handle}"`),null;let faq={};return metaobject.fields.forEach(field=>{field.value&&(faq[field.key]=field.value)}),faq||null}catch(error){return console.warn(`FAQ fetch failed for "${handle}"`,error),null}},parseFAQs:answerStr=>{try{let cleanedStr=answerStr.replace(/\\"/g,'"').replace(/\\n/g,"");return JSON.parse(cleanedStr)}catch(e){return console.warn("Failed to parse answer:",e),null}},extractFAQ:faqData=>{let faqList=[];for(let i2=1;;i2++){let questionKey=`brand_question_${i2}`,answerKey=`answer_${i2}`;if(!(questionKey in faqData)||!(answerKey in faqData))break;let question=faqData[questionKey],answerRaw=faqData[answerKey],answer=PYD.parseFAQs(answerRaw);faqList.push({question,answer})}return faqList},loadFAQs:async handle=>{try{let faqResponse=await PYD.getFAQs(handle);if(faqResponse){let faqs=PYD.extractFAQ(faqResponse);PYD.renderFAQs(faqs)}else console.log("No FAQ fields found for handle:",handle)}catch(error){console.warn("Error loading FAQs:",error)}},renderFAQs:faqList=>{let container=document.getElementById("dynamic-accordion-container");if(!container||!faqList.length)return;let generateHTMLFromRichText=richText=>{let renderNode=node=>{if(node.type==="text")return node.value;if(node.type==="paragraph")return`<p>${node.children.map(renderNode).join("")}</p>`;if(node.type==="list"){let tag=node.listType==="ordered"?"ol":"ul";return`<${tag}>${node.children.map(renderNode).join("")}</${tag}>`}return node.type==="list-item"?`<li>${node.children.map(renderNode).join("")}</li>`:""};return richText.children.map(renderNode).join("")};const html=faqList.map((faq,index)=>{const contentHtml=generateHTMLFromRichText(faq.answer);return` 303 <div class="accordion" data-index="${index}"> 304 <details> 305 <summary aria-expanded="false" role="button"> 306 <h3 class="accordion__title inline-richtext h4">${faq.question}</h3> 307 <svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"></path></svg> 308 </summary> 309 <div class="accordion__content rte" role="region"> 310 <div class="metafield-rich_text_field"> 311 ${contentHtml} 312 </div> 313 </div> 314 </details> 315 </div> 316 `}).join("");container.innerHTML=html},deleteFAQs:()=>{let container=document.getElementById("dynamic-accordion-container");container&&(container.innerHTML="")},handleFAQs:async function(state){const{brand,series,model,stepName}=state??{};if(stepName){if(stepName=="brand"){if(!brand)return;this.deleteFAQs(),await this.loadFAQs(brand.handle)}else if(stepName=="series"){if(!brand||!series)return;const handle=`${brand.name}-${this.handleize(series.handle)}`;this.deleteFAQs(),await this.loadFAQs(handle)}else if(stepName=="model"){if(!brand||!model)return;this.deleteFAQs();const handle=`${brand?.name}-${this.handleize(model.handle)}`;await this.loadFAQs(handle)}}}};function parseProductName(fullName=""){const carrierMatch=fullName.match(/\(([^)]+)\)$/),carrier=carrierMatch?carrierMatch[1]:null;let remaining=fullName.replace(/\([^)]+\)$/,"").trim();const capacityMatch=remaining.match(/(\d+GB)$/i),capacity=capacityMatch?capacityMatch[1]:null;return capacity&&(remaining=remaining.replace(/\d+GB$/i,"").trim()),{name:remaining,capacity,carrier}}let DATALAYER={dataLayerTrackEvent(payload){(window.dataLayer=window.dataLayer||[]).push(payload)},stringToHash(str){let hash=0;if(!str)return hash;for(let i2=0;i2<str.length;i2++)hash=(hash<<5)-hash+str.charCodeAt(i2),hash|=0;return hash},buildPayload(st){let stepName=st?.stepName;const{brand,category,series,model,payout,storage,carrier,q1,q2,q3}=st,cartItems=st?.cart?.items||[];let doneState=!1,displayCartItems=!1,pydSession=PYD.getSessionStorage("pyd");if(stepName?.toLowerCase().includes("condition")&&q3==null||stepName?.toLowerCase().includes("q1")||stepName?.toLowerCase().includes("q2")||stepName?.toLowerCase().includes("q3"))return;if(stepName?.toLowerCase().includes("mail-in estimate")&&!PYD.state?.currentScreen?.toLowerCase().includes("cart"))return;stepName?.toLowerCase().includes("#ti-device-picker")?stepName="start":stepName?.toLowerCase().includes("series")?stepName="device model":stepName?.toLowerCase().includes("thank you")&&(doneState=!0),stepName?.toLowerCase().includes("mail-in")&&(
316displayCartItems=!0);let price,value=null,offerAmountWeb=null,offerAmountTradeIn=null;if(Array.isArray(payout?.offerV3))for(const o of payout.offerV3)o.channel?.toLowerCase().includes("web")&&(offerAmountWeb=o.amount),o.channel?.toLowerCase().includes("trade_in")&&(offerAmountTradeIn=o.amount);const selectedOfferType=pydSession?.selectedOfferType;selectedOfferType?.toLowerCase().includes("mailin")?(price=offerAmountTradeIn,value=st?.cart?.estimatedTotal):selectedOfferType?.toLowerCase().includes("kiosk")&&offerAmountWeb&&(payout?.offerState.toLowerCase()=="promo_price"?(price=payout.promotion.promoPrice+offerAmountWeb,value=payout.promotion.promoPrice+offerAmountWeb):(price=offerAmountWeb,value=offerAmountWeb));const promoBonus=pydSession?.promotionalBonus,userFields={...st?.emailAddress&&{hashedemail:this.stringToHash(st?.emailAddress)},...st?.phone&&{hashedphone:this.stringToHash(st?.phone)},...st?.kioskCode&&{offer_code:st?.kioskCode},...pydSession?.emailSubscribed&&{marketing_opt_in:pydSession.emailSubscribed},...pydSession?.mailInMethod&&{"mail-in_method":pydSession.mailInMethod},...pydSession?.offerDisplayed&&{offer_displayed:pydSession.offerDisplayed},...selectedOfferType&&{offer_type:selectedOfferType},...st?.paymentOption&&{payment_type:st?.paymentOption},...(st?.confirmationNumber||st?.kioskCode)&&{transaction_id:st?.confirmationNumber||st.kioskCode},...promoBonus!=null&&{promotional_bonus:promoBonus},...value&&{value},...pydSession?.currency&&{currency:pydSession.currency},...pydSession?.coupon&&{coupon:pydSession.coupon}};let itemsFromCart=[];displayCartItems&&(itemsFromCart=cartItems.map((dev,idx)=>{const parsed=parseProductName(dev?.product?.name);return{item_id:dev?.product?.id,item_brand:dev?.product?.manufacturerName,item_category:dev?.product?.categoryName,item_name:parsed?.name,device_capacity:parsed?.capacity,device_carrier:parsed?.carrier,device_power:dev?.q1?.id,device_light:dev?.q2?.id,device_cracks:dev?.q3?.id,offer_state:dev?.offerState,price:dev?.actualValue||dev?.estimatedValue,offer_amount_mail_in:dev?.actualValue||dev?.estimatedValue,quantity:1,index:idx+1}}));const hasActiveDevice=brand||category||series||model||storage||carrier||q1||q2||q3;let currentDevicePayload=[];hasActiveDevice&¤tDevicePayload.push({item_id:payout?.pid||null,item_brand:brand?.name||null,item_category:category?.name||null,item_name:model?.name??series?.name??null,device_capacity:storage?.name||null,device_carrier:carrier?.name||null,device_power:q1==null?null:q1.id?.toLowerCase().includes("yes"),device_light:q2==null?null:q2.id?.toLowerCase().includes("yes"),device_cracks:q3==null?null:q3.id?.toLowerCase().includes("yes"),offer_state:payout?.offerState||null,price,offer_amount_kiosk:offerAmountWeb,offer_amount_mail_in:offerAmountTradeIn,quantity:1,index:itemsFromCart.length+1});const items=[...itemsFromCart,...currentDevicePayload],optimizely_data=PYD.getSessionStorage("optimizelyDecisionData")||null,payload={gtm:{uniqueEventId:Date.now(),priorityId:1,start:performance.now()},event:"page.submit",site_id:window.location.hostname,v:12,name:"price your device",step_name:stepName,done:doneState,record:{recordType:"user"},domain:window.location.hostname,...userFields,items,...optimizely_data&&{optimizely_data}};this.dataLayerTrackEvent(payload)},trackDevicePricing:st=>{let stepName=st?.stepName;const{brand,category,series,model,payout,storage,carrier,q1,q2,q3}=st;let doneState=!1;if(stepName?.toLowerCase().includes("condition")&&q3==null||stepName?.toLowerCase().includes("q1")||stepName?.toLowerCase().includes("q2")||stepName?.toLowerCase().includes("q3"))return;if(stepName?.toLowerCase().includes("mail-in estimate")&&!PYD.state?.currentScreen?.toLowerCase().includes("cart"))return;stepName?.toLowerCase().includes("ti-device-picker")?stepName="start":stepName?.toLowerCase().includes("series")?stepName="device model":stepName?.toLowerCase().includes("thank you")&&(doneState=!0);let offerAmountWeb;if(Array.isArray(payout?.offerV3))for(const o of payout.offerV3)o.channel?.toLowerCase().includes("web")&&(offerAmountWeb=o.amount);let data={};brand?.name&&(data.device_brand=brand.name),category?.name&&(data.device_category=category.name),series?.name&&(data.device_model=decodeURIComponent(series.name)),model?.name&&(data.device_model=decodeURIComponent(model.name)),storage?.name&&(data.device_capacity=storage.name),carrier?.name&&(data.device_carrier=carrier.name),payout?.offerState&&(data.offer_state=payout.offerState),offerAmountWeb&&(payout?.offerState.toLowerCase()=="promo_price"?data.offer_amount=payout.promotion.promoPrice+offerAmountWeb:data.offer_amount=offerAmountWeb),st?.emailAddress&&(data.email=st.emailAddress),st?.emailAddress&&(data.hashedemail=DATALAYER.stringToHash(st.emailAddress)),st?.kioskCode&&(data.offer_code=st.kioskCode),PYD.getSessionStorage("pyd")?.emailSubscribed&&(
316data.marketing_opt_in=PYD.getSessionStorage("pyd").emailSubscribed),q1?.id&&(data.device_power=q1.id?.toLowerCase().includes("yes")),q2?.id&&(data.device_light=q2.id?.toLowerCase().includes("yes")),q3?.id&&(data.device_cracks=q3.id?.toLowerCase().includes("yes")),stepName?.toLowerCase().includes("offer page")&&(delete data.device_power,delete data.device_light,delete data.device_cracks);const optimizely_data=PYD.getSessionStorage("optimizelyDecisionData")||null,eventData={event:"page.submit",v:12,name:"price your device",done:doneState,step:{name:stepName},record:{recordType:"user"},...Object.keys(data).length>0&&{data},...optimizely_data&&{optimizely_data}};DATALAYER.dataLayerTrackEvent(eventData)}};const PYD_EVENTS=["pageload","pyd:enter-contact","pyd:thank-you","tradeIn:cartLoadedPYD","pyd:form-completed","pyd:condition-completed","pyd:offer-kiosk","tradeIn:CheckoutLoaded","tradeIn:thankYouLoaded","pyd:form-change-completed"];PYD_EVENTS.forEach(evtName=>{window.addEventListener(evtName,event=>{window.PYD?.config?.DATALAYER_FLAG?DATALAYER.trackDevicePricing(event?.detail):DATALAYER.buildPayload(event?.detail)})}),window.tradeIn={},(()=>{const initTradeIn2=()=>{window.tradeIn={API_URL:PYD.config.GRAPHQL_URL,resetCart(){PYD.state.cart={}},async getCart(){return window.dispatchEvent(new CustomEvent("tradeIn:cartLoading")),PYD._cartPromise||(PYD._cartPromise=(async()=>{window.dispatchEvent(new CustomEvent("tradeIn:cartLoading"));try{const packingSlip=await this.getPackingSlip();return packingSlip?(PYD.state.cart={items:packingSlip.transactionItems||[],estimatedTotal:packingSlip.totalEstimatedPayment||0},window.dispatchEvent(new CustomEvent("tradeIn:cartLoaded",{detail:{cart:PYD.state.cart}})),localStorage.setItem("tradein_cart",JSON.stringify(PYD.state.cart)),window.dispatchEvent(new CustomEvent("tradeIn:cartLoadedPYD",{detail:{...PYD.state,cart:PYD.state.cart,stepName:"mail-in estimate"},bubbles:!0,composed:!0})),PYD._resolveCartReady&&(PYD._resolveCartReady(),PYD._resolveCartReady=null),PYD.state.cart):(this.resetCart(),window.dispatchEvent(new CustomEvent("tradeIn:cartLoaded",{detail:{cart:PYD.state.cart}})),PYD._resolveCartReady&&(PYD._resolveCartReady(),PYD._resolveCartReady=null),PYD.state.cart)}catch(err){let errorData={apiUrl:this.API_URL,query:PYD.queries.packingSlip};throw PYD.handleError("Failed to get cart for given packing slip number:",err,errorData),window.dispatchEvent(new CustomEvent("tradeIn:cartError",{detail:{error:err}})),err}finally{PYD._cartPromise=null}})()),PYD._cartPromise},async addItem(item){window.dispatchEvent(new CustomEvent("tradeIn:cartLoading"));const packingSlipNumber=(await this.getPackingSlip())?.number,isNew=!packingSlipNumber;try{const query2=isNew?PYD.queries.createPackingSlip:PYD.queries.addOffer,variables=isNew?{item}:{item,packingSlipNumber},PSNumber=(await(await PYD.fetchData(this.API_URL,{query:query2,variables},"POST")).json())?.data?.checkout?.packingSlip?.number;return this.setPackingSlipToStorage(PSNumber),this.packingSlipData=null,this._packingSlipPromise=null,window.dispatchEvent(new CustomEvent("tradeIn:item-added",{detail:{packingSlipNumber:PSNumber,item,cart:PYD.state.cart},bubbles:!0,composed:!0})),PYD.resetPYDState(),await this.getCart()}catch(err){let errorData={apiUrl:this.API_URL,query};return PYD.handleError("Failed to add item to cart:",err,errorData),window.dispatchEvent(new CustomEvent("tradeIn:cartError",{detail:{error:err}})),[]}},async deleteItem(SRNumber,productId){window.dispatchEvent(new CustomEvent("tradeIn:cartLoading"));const packingSlip=await this.getPackingSlip();if(!packingSlip?.number)return null;try{return await PYD.fetchData(this.API_URL,{query:PYD.queries.removeOffer,variables:{packingSlipNumber:packingSlip.number,offerNumber:SRNumber}},"POST"),this._packingSlipPromise=null,this.packingSlipData=null,window.dispatchEvent(new CustomEvent("tradeIn:item-removed",{detail:{packingSlipNumber:packingSlip.number,item:{SRNumber,productId},cart:PYD.state.cart},bubbles:!0,composed:!0})),dataLayer.push({items:null}),await this.getCart()}catch(err){let errorData={apiUrl:this.API_URL,query:PYD.queries.removeOffer};return PYD.handleError("Failed to remove item from cart:",err,errorData),window.dispatchEvent(new CustomEvent("tradeIn:cartError",{detail:{error:err}})),null}},async getPackingSlip(){const packingSlipNumber=this.getPackingSlipFromStorage();return packingSlipNumber?this.packingSlipData?.number===packingSlipNumber?this.packingSlipData:this._packingSlipPromise?this._packingSlipPromise:(this._packingSlipPromise=(async()=>{try{const packingSlip=(await(await PYD.fetchData(this.API_URL,{query:PYD.queries.packingSlip,variables:{number:packingSlipNumber}},"POST")).json())?.data?.packingSlip||null;return this.packingSlipData=packingSlip,packingSlip}catch(err){let errorData={apiUrl:this.API_URL,query:PYD.queries.packingSlip};return PYD.handleError("Failed to fetch packingSlip:",err,errorData),null}finally{this._packingSlipPromise=null}})(),this._packingSlipPromise):null},setPackingSlipToStorage(value){localStorage.setItem("packingSlipNumber",value)},getPackingSlipFromStorage(){return localStorage.getItem("packingSlipNumber")},deletePackingSlipFromStorage(){localStorage.removeItem("packingSlipNumber")}},window.tradeIn.getCart()};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{PYD.init(),initTradeIn2()}):(PYD.init(),initTradeIn2())})();class PYDSearchableDropdown extends HTMLElement{constructor(){super(),this.options=[],this.filteredOptions=[],this.isOpen=!1,this.isRestoringFromUrl=!1,this.selectedValue="",this.activeOptionIndex=-1}connectedCallback(){this.cacheElements(),this.setupAria(),this.attachListeners()}cacheElements(){this.input=this.querySelector("[data-input]"),this.icon=this.querySelector("[data-icon]"),this.spinner=this.querySelector("[data-spinner]"),this.dropdown=this.querySelector("[dropdown-menu]")}setupAria(){if(!this.input||!this.dropdown)return;const selection=this.getAttribute("data-selection")||"field",counter=PYDSearchableDropdown._idCounter=(PYDSearchableDropdown._idCounter||0)+1,dropdownId=this.dropdown.id||"pyd-dd-"+selection+"-"+counter;this.dropdown.id=dropdownId,this.dropdown.setAttribute("role","listbox"),this.input.setAttribute("role","combobox"),this.input.setAttribute("aria-expanded","fal
316se"),this.input.setAttribute("aria-haspopup","listbox"),this.input.setAttribute("aria-autocomplete","list"),this.input.setAttribute("aria-controls",dropdownId)}attachListeners(){this.input?.addEventListener("focus",()=>{}),this.input?.addEventListener("click",()=>{this.input.value="",this.showAllOptions(),this.open()}),this.input?.addEventListener("input",e=>{this.filter(e.target.value),this.open()}),this.input?.addEventListener("blur",()=>{setTimeout(()=>{this.contains(document.activeElement)||(this.input.value.trim()||(this.input.value=this.selectedValue),this.close())},100)}),this.dropdown?.addEventListener("click",e=>{const option=e.target.closest("[data-value]"),isHeader=e.target.closest("[data-is-header]"),isLink=e.target.closest("[data-is-link]");!option||isHeader||isLink||this._selectOption(option)}),this.dropdown?.addEventListener("mousedown",e=>{e.preventDefault()}),document.addEventListener("click",e=>{this.contains(e.target)||this.close()}),this.input?.addEventListener("keydown",e=>{const isOpen=this.isOpen,options=this._getSelectableOptions();if(e.key==="Enter")e.preventDefault(),isOpen?this.activeOptionIndex>=0&&options[this.activeOptionIndex]&&this._selectOption(options[this.activeOptionIndex]):(this.input.value="",this.showAllOptions(),this.open());else if(e.key==="ArrowDown"){e.preventDefault(),isOpen||(this.showAllOptions(),this.open());const newIndex=Math.min(this.activeOptionIndex+1,options.length-1);this.activeOptionIndex=newIndex,this._highlightOption(options,this.activeOptionIndex)}else e.key==="ArrowUp"?(e.preventDefault(),this.activeOptionIndex>0&&(this.activeOptionIndex--,this._highlightOption(options,this.activeOptionIndex))):e.key==="Escape"&&(e.preventDefault(),this.close())})}_getSelectableOptions(){return Array.from(this.dropdown?.querySelectorAll("[data-value]")||[])}_highlightOption(options,index){options.forEach((opt,i2)=>{const isActive=i2===index;opt.classList.toggle("active",isActive),opt.setAttribute("aria-selected",isActive?"true":"false"),isActive&&opt.scrollIntoView({block:"nearest"})}),index>=0&&options[index]?this.input?.setAttribute("aria-activedescendant",options[index].id||""):this.input?.removeAttribute("aria-activedescendant")}_selectOption(option){const id=option.dataset.value||null,categoryId=option.dataset.categoryId||null,categoryName=option.dataset.categoryName||null,handle=option.dataset.handle||null,name=option.textContent.trim();this.setSelectedValue(name,handle),this.close(),this.dispatchEvent(new CustomEvent("pyd:form-changed",{detail:{id,name,categoryId,categoryName,selection:this.getAttribute("data-selection"),stepName:this.getAttribute("data-selection")},bubbles:!0,composed:!0}))}toggle(){this.hasAttribute("disabled")||(this.isOpen?this.close():this.open())}open(){this.hasAttribute("disabled")||(this.isOpen=!0,this.activeOptionIndex=-1,this.dropdown?.removeAttribute("hidden"),this.input?.setAttribute("aria-expanded","true"))}close(){this.isOpen=!1,this.activeOptionIndex=-1,this.dropdown?.setAttribute("hidden",""),this.input?.setAttribute("aria-expanded","false"),this.input?.removeAttribute("aria-activedescendant"),this.dropdown?.querySelectorAll("[data-value]").forEach(opt=>opt.classList.remove("active"))}enable(){this.input?.removeAttribute("disabled")}disable(){this.input?.setAttribute("disabled",""),this.close()}hide(){this.setAttribute("hidden","")}show(){this.removeAttribute("hidden")}setValue(label){this.input&&(this.input.value=label)}getDisplayLabel(label,handle=null){return this.getAttribute("data-selection")==="carrier"&&handle===LOCKED_CARRIER_HANDLE?window.PYD?.config?.LOCKED_CARRIER_LABEL||"Locked":label}setSelectedValue(label,handle=null){const displayLabel=this.getDisplayLabel(label,handle);this.selectedValue=displayLabel,this.setValue(displayLabel)}reset(){this.options=[],this.filteredOptions=[],this.selectedValue="",this.input&&(this.input.value=""),this.renderOptions(),this.disable()}setLoading(loading){loading?(this.spinner?.removeAttribute("hidden"),this.icon?.setAttribute("hidden","")):(this.spinner?.setAttribute("hidden",""),this.icon?.removeAttribute("hidden"))}setOptions(options){this.options=options,this.filteredOptions=options,this.renderOptions(),this.enable()}showAllOptions(){this.filteredOptions=this.options,this.renderOptions()}filter(query2){const q=query2.trim().toLowerCase();this.filteredOptions=q?this.options.filter(opt=>!opt.isHeader&&opt.name.toLowerCase().includes(q)):this.options,this.renderOptions()}getItemSeoLink(selection,handle){const order=["brand","series","model"],baseUrl=`${window.location.origin}${window.location.pathname}`,params=new URLSearchParams,selectionIndex=order.indexOf(selection);if(selectionIndex===-1)return baseUrl;
316for(let i2=0;i2<selectionIndex;i2++){const key=order[i2],value=PYD.state?.[key]?.handle;value&¶ms.set(key,value)}handle&¶ms.set(selection,handle);const query2=params.toString();return query2?`${baseUrl}?${query2}`:baseUrl}renderOptions(){if(!this.dropdown)return;const selection=this.dropdown.getAttribute("data-menu-selection")||"",mappedOptions=(this.filteredOptions.length?this.filteredOptions:[{name:"No results",id:"",isHeader:!0}]).map(opt=>{if(opt.isHeader)return opt.name==="Cell Phone"?'<div class="searchable-dropdown__menu-header searchable-dropdown__menu-header--small pyd-header pyd-dropdown-header device-subtitle" data-is-header="true" aria-hidden="true">CELL PHONE</div>':opt.name==="Tablet"||opt.name==="MP3 Player"?`<div class="searchable-dropdown__menu-header pyd-header pyd-dropdown-header device-subtitle" data-is-header="true" aria-hidden="true">${opt.name}</div>`:`<div class="searchable-dropdown__menu-header pyd-header pyd-dropdown-header" data-is-header="true" aria-hidden="true">${opt.name}</div>`;if(opt.isLink)return`<a data-tracking-id="${opt.dataTrackingId}" href="${opt.url}" target="_blank" rel="noopener noreferrer" class="searchable-dropdown__menu-item searchable-dropdown__menu-item--link" data-is-link="true"> 317 ${opt.name} 318 <svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 319 <path d="M9.5 1.25C9.5 0.84375 9.8125 0.5 10.25 0.5H15.2188C15.6562 0.5 15.9688 0.84375 15.9688 1.25V6.25C15.9688 6.6875 15.6562 7 15.2188 7C14.8125 7 14.4688 6.6875 14.4688 6.25V3.0625L7.5 10.0312C7.21875 10.3438 6.75 10.3438 6.46875 10.0312C6.15625 9.75 6.15625 9.28125 6.46875 8.96875L13.4375 2H10.25C9.8125 2 9.5 1.6875 9.5 1.25ZM2.25 1.5H6.25C6.65625 1.5 7 1.84375 7 2.25C7 2.6875 6.65625 3 6.25 3H2.25C1.8125 3 1.5 3.34375 1.5 3.75V14.25C1.5 14.6875 1.8125 15 2.25 15H12.75C13.1562 15 13.5 14.6875 13.5 14.25V10.25C13.5 9.84375 13.8125 9.5 14.25 9.5C14.6562 9.5 15 9.84375 15 10.25V14.25C15 15.5 13.9688 16.5 12.75 16.5H2.25C1 16.5 0 15.5 0 14.25V3.75C0 2.53125 1 1.5 2.25 1.5Z" fill="currentColor"/> 320 </svg> 321 </a>`;const{id,name,categoryId,categoryName,tracking,handle}=opt,selection2=this.getAttribute("data-selection")||"item",attrs=[`id="${`pyd-opt-${selection2}-${id||i}`}"`,`data-value="${id}"`,'role="option"','aria-selected="false"',categoryId?`data-category-id="${categoryId}"`:"",categoryName?`data-category-name="${categoryName}"`:"",tracking?`data-tracking-id="${tracking}"`:"",handle?`data-handle="${handle}"`:""].filter(Boolean).join(" "),seoLink=this.getItemSeoLink(selection2,handle);return`<div class="searchable-dropdown__menu-item" ${attrs}> 322 <a href="${seoLink}" onclick="event.preventDefault();">${name}</a> 323 </div>`});this.dropdown.innerHTML=mappedOptions.join("")}}customElements.define("pyd-searchable-dropdown",PYDSearchableDropdown);class PYDForm extends HTMLElement{constructor(){super(),this.apiUrl=PYD.config.GRAPHQL_URL,this.props=this.parseProps()}parseProps(){try{const propsAttr=this.getAttribute("data-props");return propsAttr?JSON.parse(propsAttr):{}}catch(error){return console.error("Error parsing data-props:",error),{}}}connectedCallback(){this.props.lockedCarrierLabel!==void 0&&window.PYD?.config&&(window.PYD.config.LOCKED_CARRIER_LABEL=this.props.lockedCarrierLabel),this.cacheFormFields(),this.disableQuestions(),this.setupDownstream(),this.attachEventListeners(),this.init()}cacheFormFields(){this.dropdowns={brand:this.querySelector('[data-selection="brand"]'),series:this.querySelector('[data-selection="series"]'),model:this.querySelector('[data-selection="model"]'),storage:this.querySelector('[data-selection="storage"]'),carrier:this.querySelector('[data-selection="carrier"]')},this.conditionQuestions={q1:this.querySelector('[data-condition="q1"]'),q2:this.querySelector('[data-condition="q2"]'),q3:this.querySelector('[data-condition="q3"]')},this.submit=this.querySelector("button[data-submit]")}setupDownstream(){this.addEventListener("pyd:form-changed",async e=>{const{id,name,selection,value,categoryId,categoryName}=e.detail??{};e.asyncResult=(async()=>{try{if(selection==="brand"){const handle=PYD.handleize(name);PYD.state={...PYD.state,brand:{id,name,handle},series:null,model:null,category:null,storage:null,carrier:null,q1:null,q2:null,q3:null,payout:[]},this.resetDownstream(["series","model","storage","carrier"]),this.disableQuestions(),this.disableSubmit(),PYD.updateUrlParams({brand:handle,series:null,model:null,storage:null,carrier:null,q1:null,q2:null,q3:null}),window.PYD_META_TAGS_ENABLED&&PYD.updateMetaTags({title:`Sell Your ${PYD.capitalize(handle)} ${handle=="apple"?"iPhone for Cash or Estimate the Trade In Value":`Phones, Trade In Your ${PYD.capitalize(handle)} Phones for Cash`} \u2013 EcoATM`,description:`Safely sell your ${PYD.capitalize(handle)} ${handle=="apple"?"iPhone, iPad or iPod":"phone"} at an ecoATM kiosk near you! Get cash immediately for your old devices!`,canonical:PYD.buildCanonicalFromUrl()}),await this.loadDevices()}else if(selection==="series"){const{brand}=PYD.state,deviceResponse=await PYD.fetchData(this.apiUrl,{query:PYD.queries.models,variables:{brandId:brand.id,seriesId:id,categoryId}},"GET");let handle;const deviceData=await deviceResponse.json(),deviceArr=deviceData?.data?.models||[];
323if(deviceArr.length==1){handle=PYD.handleize(deviceArr[0].name);const device=deviceArr.length>0?{...deviceArr[0],handle:PYD.handleize(deviceArr[0].name)}:null;PYD.state={...PYD.state,series:{id,name,handle},model:{id:null,name:null,handle:null},category:{id:categoryId,name:categoryName,handle:PYD.handleize(categoryName)},storage:null,carrier:null,q1:null,q2:null,q3:null}}else handle=PYD.handleize(name),PYD.state={...PYD.state,series:{id,name,handle},model:{id:null,name:null,handle:null},category:{id:categoryId,name:categoryName,handle:PYD.handleize(categoryName)},storage:null,carrier:null,q1:null,q2:null,q3:null};this.resetDownstream(["model","storage","carrier"]),this.disableQuestions(),this.disableSubmit(),PYD.updateUrlParams({series:handle,model:null,storage:null,carrier:null,q1:null,q2:null,q3:null}),window.PYD_META_TAGS_ENABLED&&PYD.updateMetaTags({title:`Sell Your ${PYD.capitalize(brand.handle)} ${PYD.capitalize(name)}, Trade In Your ${PYD.capitalize(brand.handle)} ${PYD.capitalize(name)} for Cash \u2013 EcoATM `,description:`Get instant cash for your ${PYD.capitalize(brand.handle)} ${PYD.capitalize(name)} at an ecoATM kiosk near you. Fast, secure, and available nationwide.`,canonical:PYD.buildCanonicalFromUrl()}),(await this.loadModels(deviceData)).length<=1&&await this.loadStorage()}else if(selection==="model"){const handle=PYD.handleize(name);PYD.state={...PYD.state,model:{id,name,handle},storage:null,carrier:null,q1:null,q2:null,q3:null},this.resetDownstream(["storage","carrier"]),this.disableQuestions(),this.disableSubmit(),PYD.updateUrlParams({model:handle,storage:null,carrier:null,q1:null,q2:null,q3:null}),window.PYD_META_TAGS_ENABLED&&PYD.updateMetaTags({title:`Sell Your ${PYD.capitalize(PYD.state.brand.handle)} ${PYD.capitalize(handle)}, Trade In Your ${PYD.capitalize(PYD.state.brand.handle)} ${PYD.capitalize(handle)} for Cash \u2013 EcoATM `,description:`Get instant cash for your ${PYD.capitalize(PYD.state.brand.handle)} ${PYD.capitalize(handle)} at an ecoATM kiosk near you. Fast, secure, and available nationwide.`,canonical:PYD.buildCanonicalFromUrl()}),await this.loadStorage()}else if(selection==="storage"){const handle=PYD.handleize(name);PYD.state={...PYD.state,storage:{id,name,handle},carrier:null,q1:null,q2:null,q3:null},this.resetDownstream(["carrier"]),this.disableQuestions(),this.disableSubmit(),PYD.updateUrlParams({storage:handle,carrier:null,q1:null,q2:null,q3:null}),await this.loadCarriers()}else if(selection==="carrier"){const handle=PYD.handleize(name);PYD.state={...PYD.state,carrier:{id,name,handle},q1:null,q2:null,q3:null},this.disableQuestions(),this.disableSubmit(),PYD.updateUrlParams({carrier:handle,q1:null,q2:null,q3:null}),this.enableQuestion("q1")}else selection==="q1"?(PYD.state={...PYD.state,q1:{id:value,name:"powerUp"}},this.disableSubmit(),PYD.updateUrlParam("q1",value),this.enableQuestion("q2")):selection==="q2"?(PYD.state={...PYD.state,q2:{id:value,name:"lcdOk"}},this.disableSubmit(),PYD.updateUrlParam("q2",value),this.enableQuestion("q3")):selection==="q3"&&(PYD.state={...PYD.state,q3:{id:value,name:"cracks"}},PYD.updateUrlParam("q3",value),this.enableSubmit());window.dispatchEvent(new CustomEvent("pyd:form-change-completed",{detail:{...PYD.state,stepName:selection},bubbles:!0,composed:!0}))}catch(error){let errorData={apiUrl:this.apiUrl,query:PYD.state};PYD.handleError(`Failed to process ${selection}`,error,errorData)}})()})}attachEventListeners(){Object.entries(this.conditionQuestions).forEach(([key,question])=>{if(!question)return;question.querySelectorAll('input[type="radio"]').forEach(radio=>{radio.addEventListener("change",()=>{this.dispatchEvent(new CustomEvent("pyd:form-changed",{detail:{selection:key,value:radio.value,stepName:"condition"},bubbles:!0}))}),radio.addEventListener("keydown",e=>{e.key==="Enter"&&(e.preventDefault(),radio.checked=!0,radio.dispatchEvent(new Event("change",{bubbles:!0})))})}),question.querySelectorAll("label.pyd-form__question-card").forEach(label=>{label.addEventListener("keydown",e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),label.click())})})}),this.submit.addEventListener("click",e=>{e.preventDefault(),this.handleFormSubmit()})}
323async init(){try{if(PYD.deActivateErrorCard(),PYD.state?.currentScreen?.toLowerCase().includes("pyd")){this.dropdowns.brand.setLoading(!0);const channels=this.props.channel?[this.props.channel]:null,brands=((await(await PYD.fetchData(this.apiUrl,{query:PYD.queries.brands,variables:channels?{channels}:{}},"GET")).json())?.data?.brands||[]).map(brand=>({...brand,handle:PYD.handleize(brand.name)})),topBrandNames=["Apple","Samsung","Google","HTC","LG","Motorola","Nokia"],brandMap=new Map(brands.map(b=>[b.name.toLowerCase(),b])),topBrands=topBrandNames.map(name=>brandMap.get(name.toLowerCase())).filter(Boolean),otherBrands=brands.filter(b=>!topBrandNames.some(name=>b.name.toLowerCase()===name.toLowerCase())),groupedBrands=[{id:"",name:"Top Brands",isHeader:!0},...topBrands,...otherBrands.length?[{id:"",name:"Other Brands",isHeader:!0},...otherBrands]:[]];this.dropdowns.brand.setOptions(groupedBrands),this.autoSelectFromUrl(),window.dispatchEvent(new CustomEvent("pyd:form-initialized",{detail:{},bubbles:!0})),PYD.deActivateErrorCard()}PYD.cartPromise=null}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.queries.brands};PYD.handleError("Failed to load brands",error,errorData)}finally{this.dropdowns.brand.setLoading(!1)}}async loadDevices(){const{brand}=PYD.state;try{this.dropdowns.series.setLoading(!0);const channels=this.props.channel?[this.props.channel]:null,categories=((await(await PYD.fetchData(this.apiUrl,{query:PYD.queries.categories,variables:channels?{channels}:{}},"GET")).json())?.data?.categories||[]).map(category=>({...category,name:this.props.deviceCategories[PYD.handleize(category.name)]??category.name,handle:PYD.handleize(category.name)})),allDevices=(await Promise.all(categories.map(async({id,name})=>{const variables={brandId:brand.id,categoryId:id};channels&&(variables.channels=channels);const res=await PYD.fetchData(this.apiUrl,{query:PYD.queries.series,variables},"GET"),{data}=await res.json(),devices=data.series||[];return devices.length?[{id,name,isHeader:!0},...devices.map(d=>({id:d.id,name:d.name,categoryId:id,categoryName:name,handle:PYD.handleize(d.name)}))]:[]}))).flat();this.props.deviceLinkText&&this.props.deviceLinkUrl&&allDevices.unshift({id:null,name:this.props.deviceLinkText,url:this.props.deviceLinkUrl,isLink:!0,dataTrackingId:"how-to-find-device"}),allDevices.unshift({id:"",name:"Search for & select a device",isHeader:!0}),this.dropdowns.series.setOptions(allDevices)}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.queries.categories};PYD.handleError("Failed to load devices:",error,errorData)}finally{this.dropdowns.series.setLoading(!1)}}async loadModels(prefetchedData=null){const{brand,series,category}=PYD.state;try{this.dropdowns.model.setLoading(!0);let modelData;prefetchedData?modelData=prefetchedData:modelData=await(await PYD.fetchData(this.apiUrl,{query:PYD.queries.models,variables:{brandId:brand.id,seriesId:series.id,categoryId:category.id}},"GET")).json();const models=(modelData?.data?.models||[]).map(model=>({...model,handle:PYD.handleize(model.name)}));if(models.length==1){const model=models[0];PYD.state={...PYD.state,model:{id:model.id,name:model.name,handle:model.handle}}}return models.length>1&&(this.dropdowns.model.show(),this.dropdowns.model.setOptions(models)),models}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.queries.models};return PYD.handleError("Failed to load model",error,errorData),[]}finally{this.dropdowns.model.setLoading(!1)}}async loadStorage(){const{brand,model,series}=PYD.state;try{this.dropdowns.storage.setLoading(!0);let storages=((await(await PYD.fetchData(this.apiUrl,{query:PYD.queries.storage,variables:{brandId:brand.id,seriesId:series.id,modelName:model.name}},"GET")).json())?.data?.storageOptions||[]).map(storage=>({...storage,handle:PYD.handleize(storage.name)}));if(!storages.length){this.dropdowns.storage.disable(),this.dropdowns.carrier.disable(),PYD.state={...PYD.state,storage:{id:null,name:null,handle:null},carrier:{id:null,name:null,handle:null}}
323,this.enableQuestion("q1");return}return storages.forEach(storage=>{storage.tracking=`capacity-${storage.name}-button`}),storages.unshift({id:"",name:"Select the storage",isHeader:!0}),this.props.storageLinkText&&this.props.storageLinkUrl&&storages.push({id:null,name:this.props.storageLinkText,url:this.props.storageLinkUrl,isLink:!0,dataTrackingId:"how-to-find-storage"}),this.dropdowns.storage.setOptions(storages),storages}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.queries.storage};PYD.handleError("Failed to load storage",error,errorData)}finally{this.dropdowns.storage.setLoading(!1)}}async loadCarriers(){try{this.dropdowns.carrier.setLoading(!0);const categoryHandle=PYD.state?.category?.handle,showCarrierList=this.props?.showCarrierList!==!1;let carriers=((await(await PYD.fetchData(this.apiUrl,{query:PYD.queries.carriers},"GET")).json())?.data?.carriers||[]).map(carrier=>({...carrier,handle:PYD.handleize(carrier.name)}));if(categoryHandle==="mp3-player"||!carriers.length){this.dropdowns.carrier.disable(),PYD.state={...PYD.state,carrier:{id:null,name:null,handle:null}},this.enableQuestion("q1");return}if(categoryHandle==="tablet")carriers=carriers.filter(c=>c.id?.toLowerCase().includes("wifi"));else if(carriers=carriers.filter(c=>!c.id?.toLowerCase().includes("wifi")),!showCarrierList){const unlockedCarrier=carriers.find(c=>c.handle==="unlocked"),otherCarrier=carriers.find(c=>c.handle==="other");carriers=[unlockedCarrier?{id:unlockedCarrier.id,name:unlockedCarrier.name,handle:unlockedCarrier.handle}:{id:"unlocked",name:"Unlocked",handle:"unlocked"},{id:otherCarrier?.id||"other",name:"Locked to a carrier",handle:LOCKED_CARRIER_HANDLE}]}if(carriers.forEach(carrier=>{carrier.tracking=`capacity-${carrier.name}-button`}),carriers.unshift({id:"",name:showCarrierList?"Select the carrier":categoryHandle==="tablet"?"Does your tablet connect to cellular":"Is your device unlocked?",isHeader:!0}),this.props.carrierLinkText&&this.props.carrierLinkUrl){const carrierUrl=categoryHandle==="tablet"&&this.props.carrierLinkUrlTablet?this.props.carrierLinkUrlTablet:this.props.carrierLinkUrl;carriers.push({id:null,name:this.props.carrierLinkText,url:carrierUrl,isLink:!0,dataTrackingId:"how-to-find-carrier"})}return this.dropdowns.carrier.setOptions(carriers),carriers}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.queries.carriers};PYD.handleError("Failed to load carrier",error,errorData)}finally{this.dropdowns.carrier.setLoading(!1)}}async autoSelectFromUrl(){this.formSubmitting(!0);const urlParams=PYD.getUrlParams(["brand","series","model","storage","carrier","q1","q2","q3"]),{brand,series,model,storage,carrier}=urlParams,selectDropdown=async(dropdown,value,selection)=>
323{if(!value||!dropdown)return null;const dropdownOptions=Array.from(dropdown.querySelectorAll("[data-value]"));let matchedDropdown=dropdownOptions.find(item=>item.getAttribute("data-handle")?.trim()===value);const shouldMapLegacyCarrierToLocked=selection==="carrier"&&this.props?.showCarrierList===!1&&value!=="unlocked";if(!matchedDropdown&&shouldMapLegacyCarrierToLocked&&(matchedDropdown=dropdownOptions.find(item=>item.getAttribute("data-handle")?.trim()===LOCKED_CARRIER_HANDLE)),!matchedDropdown)return null;const id=matchedDropdown.dataset.value,name=matchedDropdown.textContent.trim(),handle=matchedDropdown.dataset.handle||null,categoryId=matchedDropdown.dataset.categoryId||null,categoryName=matchedDropdown.dataset.categoryName||null;dropdown.setSelectedValue(name,handle);const wait=this.waitForEventResult(this,"pyd:form-changed");return this.dispatchEvent(new CustomEvent("pyd:form-changed",{detail:{id,name,selection,categoryId,categoryName,stepName:selection},bubbles:!0})),await wait,{id,name}},brandData=await selectDropdown(this.dropdowns.brand,brand,"brand"),seriesData=brandData?await selectDropdown(this.dropdowns.series,series,"series"):null,deviceData=seriesData;if(((seriesData?await selectDropdown(this.dropdowns.model,model,"model"):null)||seriesData?await selectDropdown(this.dropdowns.storage,storage,"storage"):null)&&await selectDropdown(this.dropdowns.carrier,carrier,"carrier"),this.formSubmitting(!1),brandData===null){this.disableQuestions(),this.disableSubmit();return}let allSelected=!0;["q1","q2","q3"].forEach(key=>{const value=urlParams[key];if(!value){allSelected=!1;return}const question=this.conditionQuestions[key];if(!question){allSelected=!1;return}const radio=question.querySelector(`input[type="radio"][value="${value}"]`);if(!radio){allSelected=!1;return}radio.checked=!0,this.dispatchEvent(new CustomEvent("pyd:form-changed",{detail:{selection:key,value,stepName:key},bubbles:!0}))}),allSelected&&brandData!==null&&deviceData!==null&&this.handleFormSubmit()}waitForEventResult(target,eventName){return new Promise(resolve=>{const handler=async e=>{target.removeEventListener(eventName,handler),resolve(e.asyncResult instanceof Promise?await e.asyncResult:e.asyncResult)};target.addEventListener(eventName,handler)})}resetDownstream(keys){keys.forEach(key=>{const dropdown=this.dropdowns[key];dropdown?.reset(),key==="model"&&dropdown?.hide()})}disableQuestions(){Object.values(this.conditionQuestions).forEach(question=>{question&&(question.setAttribute("disabled",""),question.querySelectorAll('input[type="radio"]').forEach(input=>{input.checked=!1,input.disabled=!0,input.tabIndex=-1}),question.querySelectorAll("label.pyd-form__question-card").forEach(label=>{label.tabIndex=-1}))})}enableQuestion(key){const section=this.conditionQuestions[key];section&&(section.removeAttribute("disabled"),section.querySelectorAll('input[type="radio"]').forEach(input=>{input.disabled=!1,input.tabIndex=-1}),section.querySelectorAll("label.pyd-form__question-card").forEach(label=>{label.tabIndex=0}))}enableSubmit(){this.submit.removeAttribute("disabled")}disableSubmit(){const anyDisabled=Object.values(this.conditionQuestions).some(q=>q?.hasAttribute("disabled"));this.submit.toggleAttribute("disabled",anyDisabled)}formSubmitting(submitting=!1){this.classList.toggle("submitting",submitting),this.submit.classList.toggle("loading",submitting),submitting?(this.submit.toggleAttribute("disabled",!0),Object.values(this.dropdowns||{}).forEach(dropdown=>{typeof dropdown?.disable=="function"&&dropdown.disable()})):(Object.values(this.dropdowns||{}).forEach(dropdown=>{typeof dropdown?.enable=="function"&&dropdown.options?.length>0&&dropdown.enable()}),this.disableSubmit())}async handleFormSubmit(){this.formSubmitting(!0);try{document.querySelector(".offer-screen.device-error")?.classList.add("hidden"),await PYD.getPriceEstimate(),this.handleFormComplete()}catch(error){PYD.activateErrorCard();let errorData={apiUrl:this.apiUrl,query:PYD.state};PYD.handleError("Failed to submit form",error,errorData)}finally{this.formSubmitting(!1),this.submit.toggleAttribute("disabled",!0)}}handleFormComplete(){const{brand,series,model,category,storage,carrier,payout,q1,q2,q3}=PYD.state,offerList=payout?.offerV3??[],mailInEntry=offerList.find(entry=>entry.channel==="TRADE_IN")||null,kioskEntry=offerList.find(entry=>entry.channel==="WEB")||null,mailInPayout=mailInEntry?.amount??null,baseKioskPayout=kioskEntry?.amount??null;PYD.clearSessionStorage("pyd"),PYD.clearSessionStorage("price_your_device"),PYD.setSessionStorage("pyd",{carrierName:carrier?.handle===LOCKED_CARRIER_HANDLE?"Other":carrier?.name??null,brandId:brand?.id??null,brandName:brand?.name??null,carrierId:carrier?.id??null,categoryId:category?.id??null,categoryName:category?.name??null,cracks:q3?.id??null,deviceId:payout?.deviceId,lcdOk:q2?.id??null,modelId:model?.id??null,modelName:model?.name??null,productId:payout?.pid??null,offerId:payout?.offerId??null,offerPriceMailIn:mailInPayout??null,offerPrice:baseKioskPayout??null,offerState:payout?.offerState??null,promoPrice:payout?.promotion?.promoPrice??0,powerUp:q1?.id??null,seriesHandle:model?.handle||series?.handle,seriesId:model?.id||series?.id,seriesName:model?.name||series?.name,storageHandle:storage?.handle??null,storageId:storage?.id??null,storageOption:storage?.name??null}),PYD.setSessionStorage("price_your_device",PYD.state),PYD.setDeviceInfo()}}customElements.define("pyd-form",PYDForm);class PYDModal extends HTMLElement{constructor(){super(),this.backdrop=null,this.dialog=null,this.triggerElement=null,this.closeHandler=this.closeHandler.bind(this),this.outsideClickHandler=this.outsideClickHandler.bind(this),this.keydownHandler=this.keydownHandler.bind(this)}connectedCallback(){const id=this.dataset.modalId;id&&document.querySelectorAll(`[data-modal-trigger="${id}"]`).forEach(btn=>{btn.addEventListener("click",()=>{this.triggerElement=btn,this.open()})})}open(){const clone=this.cloneNode(!0);for(this.backdrop=document.createElement("div"),this.backdrop.classList.add("pyd-modal__backdrop"),this.backdrop.setAttribute("role","dialog"),this.backdrop.setAttribute("aria-modal","true"),this.dialog=document.createElement("div"),this.dialog.classList.add("pyd-modal__dialog");clone.firstChild;)this.dialog.appendChild(clone.firstChild);this.backdrop.appendChild(this.dialog);const titleEl=this.dialog.querySelector(".pyd-modal__title");if(titleEl){if(!titleEl.id){const modalCounter=PYDModal._idCounter=(PYDModal._idCounter||0)+1;titleEl.id="pyd-modal-title-"+modalCounter}this.backdrop.setAttribute("aria-labelledby",titleEl.id)}document.body.appendChild(this.backdrop),requestAnimationFrame(()=>{this.backdrop.classList.add("show"),this.dialog.classList.add("show");const focusable=this.dialog.querySelector('button:not([disabled]):not([hidden]), [href]:not([disabled]):not([hidden]), input:not([disabled]):not([hidden]), select:not([disabled]):not([hidden]), textarea:not([disabled]):not([hidden]), [tabindex]:not
323([tabindex="-1"]):not([disabled]):not([hidden])');focusable&&focusable.focus()}),this.bindEvents()}close(){if(!this.backdrop)return;this.backdrop.classList.remove("show"),this.dialog.classList.remove("show");const trigger=this.triggerElement;setTimeout(()=>{this.backdrop&&this.backdrop.parentNode&&this.backdrop.parentNode.removeChild(this.backdrop),this.unbindEvents(),trigger&&trigger.focus()},250)}bindEvents(){this.backdrop.addEventListener("click",this.outsideClickHandler),this.backdrop.querySelectorAll("[data-modal-close]").forEach(btn=>{btn.addEventListener("click",this.closeHandler)}),document.addEventListener("keydown",this.keydownHandler)}unbindEvents(){this.backdrop&&(this.backdrop.removeEventListener("click",this.outsideClickHandler),this.backdrop.querySelectorAll("[data-modal-close]").forEach(btn=>{btn.removeEventListener("click",this.closeHandler)}),document.removeEventListener("keydown",this.keydownHandler))}outsideClickHandler(e){e.target===this.backdrop&&this.close()}closeHandler(){this.close()}keydownHandler(e){e.key==="Escape"&&(e.preventDefault(),this.close())}}customElements.define("pyd-modal",PYDModal);class PYDTabs extends HTMLElement{constructor(){super(),this.buttons=[],this.contents=[]}connectedCallback(){this.buttons=Array.from(this.querySelectorAll("[data-tab-btn]")),this.contents=Array.from(this.querySelectorAll("[data-tab-content]")),this.buttons.forEach(btn=>{btn.addEventListener("click",()=>this.openTab(btn.dataset.tabBtn))});const defaultBtn=this.querySelector("[data-default]");defaultBtn?this.openTab(defaultBtn.dataset.tabBtn):this.buttons.length&&this.openTab(this.buttons[0].dataset.tabBtn)}openTab(id){this.buttons.forEach(btn=>{btn.classList.toggle("active",btn.dataset.tabBtn===id)}),this.contents.forEach(content=>{const match=content.dataset.tabContent===id;content.classList.toggle("active",match)})}}customElements.define("pyd-tabs",PYDTabs);class PYDSlider extends HTMLElement{constructor(){super(),this.index=0}connectedCallback(){this.track=this.querySelector("[data-track]"),this.slides=Array.from(this.querySelectorAll("[data-slide]")),this.total=this.slides.length,this.count=this.querySelector("[data-count]"),this.prevBtn=this.querySelector("[data-prev]"),this.nextBtn=this.querySelector("[data-next]"),this.update(),this.prevBtn.addEventListener("click",()=>this.prev()),this.nextBtn.addEventListener("click",()=>this.next())}update(){this.style.setProperty("--index",this.index),this.count.textContent=`${this.index+1} / ${this.total}`}next(){this.index<this.total-1&&(this.index++,this.update())}prev(){this.index>0&&(this.index--,this.update())}}customElements.define("pyd-slider",PYDSlider);class TradeInCartItems extends HTMLElement{constructor(){super()}connectedCallback(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.onDomReady.bind(this)):this.onDomReady(),this.emptyCartText=this.getAttribute("empty-cart-text")||"",this.emptyCartCta=this.getAttribute("empty-cart-cta")||"",this.sellMoreCta=this.getAttribute("sell-more-cta")||"",window.addEventListener("tradeIn:cartLoading",()=>this.renderSkeleton()),window.addEventListener("tradeIn:cartLoaded",e=>this.renderCart(e.detail.cart)),window.addEventListener("tradeIn:cartError",e=>this.renderError(e.detail.error))}onDomReady(){this.renderSkeleton()}renderCart(cart){const items=Array.isArray(cart?.items)?cart.items:[],hasItems=items.length>0;this.innerHTML=hasItems?this.renderTable(items):this.renderEmpty(),this.querySelectorAll(".delete-btn").forEach(btn=>{btn.addEventListener("click",e=>{const srNumber=e.currentTarget.dataset.srNumber,productId=e.currentTarget.dataset.productId;window.tradeIn.deleteItem(srNumber,productId)})})}renderTable(items){return` 324 <div class="ti-cart-items"> 325 <table class="ti-table"> 326 <thead> 327 <tr> 328 <th>Device</th> 329 <th></th> 330 <th>Offer</th> 331 </tr> 332 </thead> 333 <tbody> 334 ${items.map(item=>` 335 <tr data-id="${item.number}"> 336 <td>${item.product.manufacturerName} ${item.product.name}</td> 337 <td> 338 <button class="delete-btn" data-sr-number="${item.number}" data-product-id="${item.id}" aria-label="Delete item"> 339 <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 340 <path fill-rule="evenodd" clip-rule="evenodd" 341 d="M12.97 5.5h3.53a.5.5 0 0 1 0 1h-1.25v10a.5.5 0 0 1-.5.5h-8.5c-.28 0-.5-.22-.5-.5v-10H4.5a.5.5 0 1 1 0-1h3.53a3.06 3.06 0 0 1 .6-1.65C9.06 3.32 9.7 3 10.5 3s1.44.32 1.87.85a3.07 3.07 0 0 1 .6 1.65ZM10.5 4c-.51 0-.86.19-1.09.48-.19.24-.31.6-.36 1.02h2.9c-.06-.42-.16-.78-.36-1.02-.24-.29-.58-.48-1.09-.48ZM6.75 6.5V16h7.5V6.5h-7.5Zm1.946 1.396a.5.5 0 0 1 .854.354v6a.5.5 0 0 1-1 0v-6a.5.5 0 0 1 .146-.354Zm2.9 0a.5.5 0 0 1 .854.354v6a.5.5 0 0 1-1 0v-6a.5.5 0 0 1 .146-.354Z" 342 fill="#000"/> 343 </svg> 344 </button> 345 </td> 346 <td> 347 ${item.bonus>0?`<span class="bonus-price"><s>$${item.estimatedValue.toFixed(2)}</s></span> <span>$${item.estimatedValue.toFixed(2)+item.bonus.toFixed(2)}</span>`:`<span>$${item.estimatedValue.toFixed(2)}</span>`} 348 </td> 349 </tr> 350 `).join("")} 351 </tbody> 352 </table> 353 354 <button data-ti-get-pyd-btn class="pyd-button pyd-button--outline" onclick="javascript:PYD.reset(this);"> 355 <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> 356 <path d="M10 3H6L4.5.781C4.281.47 4.531 0 4.906 0h6.157c.374 0 .624.469.406.781L10 3ZM6 4h4c.094.094.25.188.406.281C12.156 5.406 16 7.844 16 13a3 3 0 0 1-3 3H3a3 3 0 0 1-3-3c0-5.156 3.813-7.594 5.594-8.719.125-.093.281-.187.406-.281Zm2.625 2.75A.627.627 0 0 0 8 6.125a.627.627 0 0 0-.625.625v.438c-.25.062-.5.156-.719.28-.437.25-.812.72-.781 1.376 0 .625.375 1.031.75 1.281.344.188.781.313 1.125.438h.063c.375.124.656.218.875.343.156.094.156.156.
356156.25.031.156-.031.25-.156.313-.157.125-.407.156-.688.156-.344 0-.656-.125-1.094-.25-.062-.031-.156-.063-.218-.094-.344-.094-.688.063-.782.406a.604.604 0 0 0 .375.782c.063.031.125.031.188.062.281.094.562.188.875.281v.438c0 .344.281.625.625.625a.627.627 0 0 0 .625-.625v-.406c.25-.063.5-.156.75-.281.437-.282.781-.75.75-1.407 0-.656-.344-1.062-.75-1.312a4.994 4.994 0 0 0-1.156-.469h-.032c-.406-.125-.687-.219-.875-.344-.156-.094-.187-.156-.187-.187 0-.125.062-.219.218-.313.157-.094.407-.156.657-.156.312 0 .625.094.968.188.344.062.688-.126.782-.47.094-.312-.125-.655-.438-.75-.219-.062-.437-.124-.656-.155V6.75Z" fill="currentColor"/> 357 </svg> 358 ${this.sellMoreCta} 359 </button> 360 </div> 361 `}renderEmpty(){return` 362 <div class="ti-cart-items"> 363 <div class="ti-cart-empty"> 364 <div class="ti-cart-empty__text"> 365 ${this.emptyCartText} 366 </div> 367 <button data-ti-get-pyd-btn class="pyd-button pyd-button--primary" onclick="javascript:PYD.reset(this);"> 368 <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> 369 <path d="M10 3H6L4.5.781C4.281.47 4.531 0 4.906 0h6.157c.374 0 .624.469.406.781L10 3ZM6 4h4c.094.094.25.188.406.281C12.156 5.406 16 7.844 16 13a3 3 0 0 1-3 3H3a3 3 0 0 1-3-3c0-5.156 3.813-7.594 5.594-8.719.125-.093.281-.187.406-.281Zm2.625 2.75A.627.627 0 0 0 8 6.125a.627.627 0 0 0-.625.625v.438c-.25.062-.5.156-.719.28-.437.25-.812.72-.781 1.376 0 .625.375 1.031.75 1.281.344.188.781.313 1.125.438h.063c.375.124.656.218.875.343.156.094.156.156.156.25.031.156-.031.25-.156.313-.157.125-.407.156-.688.156-.344 0-.656-.125-1.094-.25-.062-.031-.156-.063-.218-.094-.344-.094-.688.063-.782.406a.604.604 0 0 0 .375.782c.063.031.125.031.188.062.281.094.562.188.875.281v.438c0 .344.281.625.625.625a.627.627 0 0 0 .625-.625v-.406c.25-.063.5-.156.75-.281.437-.282.781-.75.75-1.407 0-.656-.344-1.062-.75-1.312a4.994 4.994 0 0 0-1.156-.469h-.032c-.406-.125-.687-.219-.875-.344-.156-.094-.187-.156-.187-.187 0-.125.062-.219.218-.313.157-.094.407-.156.657-.156.312 0 .625.094.968.188.344.062.688-.126.782-.47.094-.312-.125-.655-.438-.75-.219-.062-.437-.124-.656-.155V6.75Z" fill="currentColor"/> 370 </svg> 371 ${this.emptyCartCta} 372 </button> 373 </div> 374 </div> 375 `}renderSkeleton(){this.innerHTML=` 376 <div class="pyd-skeleton pyd-skeleton-line-items"> 377 <div><span></span><span></span></div> 378 <div><span></span><span></span><span></span></div> 379 <div><span></span><span></span><span></span></div> 380 </div> 381 `}renderError(error){this.innerHTML=` 382 <div class="ti-cart-items ti-error"> 383 <p>Something went wrong while loading your cart.</p> 384 <p>${error?.message||"Unknown error"}</p> 385 </div> 386 `}}customElements.define("tradein-cart-items",TradeInCartItems);class TradeInCartSummary extends HTMLElement{connectedCallback(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.onDomReady.bind(this)):this.onDomReady(),window.addEventListener("tradeIn:cartLoading",()=>this.renderSkeleton()),window.addEventListener("tradeIn:cartLoaded",e=>this.renderSummary(e.detail.cart)),window.addEventListener("tradeIn:cartLoaded",e=>{const cart=e.detail?.cart;this.renderSummary(cart)})}onDomReady(){this.renderSkeleton()}renderSummary(cart){const{estimatedSubtotal,estimatedBonus,estimatedTotal}=cart||{},hasItems=(Array.isArray(cart?.items)?cart.items:[])?.length>0,disclaimer=this.getAttribute("disclaimer")||"",cta=this.getAttribute("cta")||"",terms=this.getAttribute("terms")||"",bonus=this.getAttribute("bonus")||"Bonus",subtotal=this.getAttribute("subtotal")||"Subtotal",total=this.getAttribute("total")||"Total",currency="USD";this.innerHTML=hasItems?` 387 <ul class="ti-cart__summary-content"> 388 ${estimatedSubtotal?` 389 <li class="ti-cart__summary-item"> 390 <span>${subtotal}</span> 391 <span>$${PYD.formatCurrency(estimatedSubtotal)}</span> 392 </li>`:""} 393 394 ${estimatedBonus?` 395 <li class="ti-cart__summary-item bonus">
396 <span>${bonus}</span> 397 <span>+ $${PYD.formatCurrency(estimatedBonus)}</span> 398 </li>`:""} 399 400 ${estimatedTotal!==void 0?` 401 <li class="ti-cart__summary-item total"> 402 <span>${total}</span> 403 <span><span>${currency}</span> $${PYD.formatCurrency(estimatedTotal)}</span> 404 </li>`:""} 405 406 ${disclaimer?` 407 <li class="ti-cart__summary-item disclaimer"><p>${disclaimer}</p></li>`:""} 408 409 ${cta?` 410 <li class="ti-cart__summary-item btn"> 411 <button class="pyd-button pyd-button--primary w-full ti-cart__checkout">${cta}</button> 412 </li>`:""} 413 414 ${terms?` 415 <li class="ti-cart__summary-item terms">${terms}</li>`:""} 416 </ul> 417 `:"",cta&&this.querySelector(".ti-cart__checkout")?.addEventListener("click",()=>{PYD.showScreen("checkout")??PYD.initCheckoutPage()})}renderSkeleton(){this.innerHTML=` 418 <div class="pyd-skeleton pyd-skeleton-cart-summary ti-cart__summary-content"> 419 <div><span></span><span></span></div> 420 <div><span></span><span></span></div> 421 <div><span></span><span></span></div> 422 <div><span></span><span></span><span></span></div> 423 <div><span></span></div> 424 <div><span></span><span></span></div> 425 </div> 426 `}}customElements.define("tradein-cart-summary",TradeInCartSummary);class TextInput extends HTMLElement{static get observedAttributes(){return["data-name","data-label","text-color","placeholder-color","border-color","background-color","data-type","data-required","paragraph-size","legend-size","input-label-checked-size"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this.style.setProperty("--text-color",this.getAttribute("text-color")||"#000000"),this.style.setProperty("--placeholder-color",this.getAttribute("placeholder-color")||"#707070"),this.style.setProperty("--border-color",this.getAttribute("border-color")||"#e85200"),this.style.setProperty("--background-color",this.getAttribute("background-color")||"#fff3f3"),this.style.setProperty("--paragraph-size",this.getAttribute("paragraph-size")+"px"||"16px"),this.style.setProperty("--legend-size",this.getAttribute("legend-size")+"px"||"16px"),this.style.setProperty("--input-label-checked-size",this.getAttribute("input-label-checked-size")+"px"||"14px"),this.style.setProperty("--input-error-color",this.getAttribute("input-error-color")),this.render()}attributeChangedCallback(name,oldVal,newVal){oldVal!==newVal&&(["text-color","placeholder-color","border-color","background-color","paragraph-size","legend-size","input-label-checked-size"].includes(name)&&(this.style.setProperty("--text-color",this.getAttribute("text-color")||"#000000"),this.style.setProperty("--placeholder-color",this.getAttribute("placeholder-color")||"#707070"),this.style.setProperty("--border-color",this.getAttribute("border-color")||"#e85200"),this.style.setProperty("--background-color",this.getAttribute("background-color")||"#fff3f3"),this.style.setProperty("--paragraph-size",this.getAttribute("paragraph-size")+"px"||"16px"),this.style.setProperty("--legend-size",this.getAttribute("legend-size")+"px"||"16px"),this.style.setProperty("--input-label-checked-size",this.getAttribute("input-label-checked-size")+"px"||"14px")),["data-name","data-label"].includes(name)&&(this.inputName=this.getAttribute("data-name")||"input-name",this.inputLabel=this.getAttribute("data-label")||"Label"),this.render())}render(){if(!!!this.shadowRoot.querySelector("style")){const style=document.createElement("style");style.textContent=` 427 :host { 428 display: block; 429 } 430 431 .input-box { 432 position: relative; 433 display: block; 434 max-width: 749px; 435 margin: 0; 436 } 437 438 input[type="text"], input[type="email"], input[type="tel"] { 439 width: 100%; 440 box-sizing: border-box; 441 height: 48px; 442 padding: 16px 16px 0 16px; 443 border: 1px solid var(--border-color); 444 border-radius: 6px; 445 background-color: var(--background-color); 446 color: var(--text-color); 447 font-size: var(--paragraph-size); 448 font-weight: 500; 449 outline: none; 450 } 451 452 input[type="text"]::placeholder, input[type="email"]::placeholder, input[type="tel"]::placeholder { 453 color: transparent; 454 } 455 456 label { 457 position: absolute; 458 left: 12px; 459 top: 50%; 460 transform: translateY(-50%); 461 font-size: var(--legend-size); 462 color: var(--placeholder-color); 463 background: transparent; 464 pointer-events: none; 465 transition: 466 top 0.2s ease, 467 right 0.2s ease, 468 left 0.2s ease, 469 font-size 0.2s ease, 470 color 0.2s ease; 471 } 472 473 .input-box.focused label, 474 .input-box.error label, 475 .input-box.filled label { 476 top: 5px; 477 left: 12px; 478 right: 12px; 479 font-size: var(--input-label-checked-size); 480 color: var(--placeholder-color); 481 } 482 483 .input-box.error input { 484 border-color: var(--input-error-color); 485 } 486 487 .input-box .error-message { 488 color: var(--input-error-color); 489 font-size: var(--legend-size); 490 margin-top: 4px; 491 display: none; 492 line-height: 1; 493 } 494 495 .input-box.error .error-message { 496 display: block; 497 var(--legend-size) 498 } 499 `,this.shadowRoot.appendChild(style)}const existing=this.shadowRoot.querySelector(".input-box");existing&&this.shadowRoot.removeChild(existing);const container=document.createElement("div");container.className="input-box",container.innerHTML=` 500 <input type="${this.getAttribute("data-type")}" name="${this.inputName}" id="${this.inputName}" aria-label="${this.inputLabel}"> 501 <label for="${this.inputName}">${this.inputLabel}</label> 502 <div class="error-message">This field is required</div> 503 `,this.shadowRoot.appendChild(container);const input=container.querySelector("input"),dataRequired=this.getAttribute("data-required");dataRequired=="true"&&(input.required=!0),this.getAttribute("data-type")=="tel"&&(input.setAttribute("pattern","[0-9]{3}-[0-9]{3}-[0-9]{4}"),input.setAttribute("title","Enter a 10-digit phone number"),input.addEventListener("input",function(e){let x=e.target.value.replace(/\D/g,"").match(/(\d{0,3})(\d{0,3})(\d{0,4})/);e.target.value=x[2]?x[1]+"-"+x[2]+(x[3]?"-"+x[3]:""):x[1]})),(this.inputName==="first-name"||this.inputName==="last-name")&&(input.setAttribute("pattern",".{2,}"),input.setAttribute("title","Please enter at least 2 characters"));const updateState=()=>{container.classList.toggle("filled",!!input.value)};input.addEventListener("focus",()=>container.classList.add("focused"));const errorMessage=container.querySelector(".error-message"),validate=()=>{const isRequired=dataRequired==="true",isEmpty=!input.value.trim(),inputId=input.getAttribute("id"),message=PYD.allErrorMessages[inputId]||"This field is required";isRequired&&isEmpty?(container.classList.add("error"),errorMessage.textContent=message):(container.classList.remove("error"),errorMessage.textContent="")};input.addEventListener("blur",()=>
503{container.classList.remove("focused"),updateState(),validate()}),input.addEventListener("input",updateState),updateState()}}customElements.define("text-input",TextInput);class CheckboxInput extends HTMLElement{static get observedAttributes(){return["data-name","data-checked","data-richtext","data-label","check-color","text-color","border-color","background-color","data-required","paragraph-size","legend-size"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this.updateCustomProperties(),this.render()}attributeChangedCallback(name,oldVal,newVal){oldVal!==newVal&&(["check-color","text-color","border-color","background-color"].includes(name)&&this.updateCustomProperties(),["data-name","data-label"].includes(name)&&(this.inputName=this.getAttribute("data-name")||"checkbox-name",this.inputLabel=this.getAttribute("data-label")||"Check me"),this.render())}updateCustomProperties(){this.style.setProperty("--check-color",this.getAttribute("check-color")||"#ffffff"),this.style.setProperty("--text-color",this.getAttribute("text-color")||"#000000"),this.style.setProperty("--border-color",this.getAttribute("border-color")||"#e85200"),this.style.setProperty("--background-color",this.getAttribute("background-color")||"#fff3f3"),this.style.setProperty("--checkbox-error-color",this.getAttribute("checkbox-error-color")||"#FF2026"),this.style.setProperty("--checkbox-unchecked-border-color",this.getAttribute("checkbox-unchecked-border-color")||"#000000"),this.style.setProperty("--paragraph-size",this.getAttribute("paragraph-size")+"px"||"16px"),this.style.setProperty("--legend-size",this.getAttribute("legend-size")+"px"||"16px")}render(){if(!!!this.shadowRoot.querySelector("style")){const style=document.createElement("style");style.textContent=` 504 :host { 505 display: block; 506 } 507 508 .checkbox-wrapper { 509 display: grid; 510 grid-template-columns: 24px auto; 511 align-items: start; 512 gap: 0; 513 margin: 0; 514 cursor: pointer; 515 color: var(--text-color); 516 } 517 518 input[type="checkbox"] { 519 appearance: none; 520 width: 16px; 521 height: 16px; 522 margin: 3px 0; 523 border: 1.5px solid var(--checkbox-unchecked-border-color); 524 border-radius: 4px; 525 background-color: transparent; 526 cursor: pointer; 527 position: relative; 528 } 529 530 input[type="checkbox"]:checked { 531 border: 1.5px solid var(--border-color); 532 background-color: var(--background-color); 533 } 534 535 input[type="checkbox"]:checked::after { 536 content: ''; 537 position: absolute; 538 left: 4px; 539 top: 0; 540 width: 4px; 541 height: 8px; 542 border: solid var(--check-color); 543 border-width: 0 2px 2px 0; 544 transform: rotate(45deg); 545 } 546 547 label { 548 font-size: var(--legend-size); 549 cursor: pointer; 550 } 551 552 input[type="checkbox"].invalid:checked { 553 border: 1.5px solid var(--border-color); 554 } 555 556 .error-message { 557 display: none; 558 color: var(--checkbox-error-color); 559 font-size: var(--legend-size); 560 grid-column: 1 / -1; 561 letter-spacing: 0; 562 margin-top: 10px; 563 } 564 565 .label-content * { 566 margin: 0; 567 } 568 569 .label-content a { 570 color: inherit; 571 text-decoration: underline; 572 } 573 `,this.shadowRoot.appendChild(style)}const existing=this.shadowRoot.querySelector(".checkbox-wrapper");existing&&this.shadowRoot.removeChild(existing),this.inputName=this.getAttribute("data-name")||"checkbox-name";const isRichtext=this.getAttribute("data-richtext")==="true";let inputLabel=this.getAttribute("data-label")||"Check me";if(isRichtext){const el=document.getElementById(inputLabel);el&&(inputLabel=el.innerHTML.trim())}const isChecked=this.getAttribute("data-checked")==="true",dataRequired=this.getAttribute("data-required")==="true",wrapper=document.createElement("label");
573wrapper.className="checkbox-wrapper",wrapper.innerHTML=` 574 <input type="checkbox" name="${this.inputName}" id="${this.inputName}" ${isChecked?"checked":""} ${dataRequired?"required":""}> 575 <div class="label-content"></div> 576 <div class="error-message">This field is required.</div> 577 `;const labelContent=wrapper.querySelector(".label-content");isRichtext?labelContent.innerHTML=inputLabel:labelContent.textContent=inputLabel,this.shadowRoot.appendChild(wrapper);const checkbox=this.shadowRoot.querySelector('input[type="checkbox"]'),errorMessage=this.shadowRoot.querySelector(".error-message");checkbox.addEventListener("change",()=>{checkbox.checked&&(checkbox.classList.remove("invalid"),checkbox.setCustomValidity(""),errorMessage&&(errorMessage.textContent="",errorMessage.style.display="none"))})}}customElements.define("checkbox-input",CheckboxInput);class RadioAccordion extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.options=[]}static get observedAttributes(){return["data-name","data-options","title-color","caption-color","border-color","background-color","hide-dropdown","paragraph-size","legend-size","data-required"]}attributeChangedCallback(name,oldVal,newVal){name==="data-name"&&(this.radioName=newVal||"dynamic-radio",this.render()),name==="data-options"&&oldVal!==newVal&&(this.parseOptionsFromAttribute(newVal),this.render()),name==="title-color"&&this.style.setProperty("--title-color",newVal||"#000000"),name==="caption-color"&&this.style.setProperty("--caption-color",newVal||"#707070"),name==="border-color"&&this.style.setProperty("--border-color",newVal||"#e85200"),name==="background-color"&&this.style.setProperty("--background-color",newVal||"#fff3f3"),name==="hide-dropdown"&&(newVal=="true"?this.style.setProperty("--hide-dropdown","none"):this.style.setProperty("--hide-dropdown","block"))}connectedCallback(){this.radioName=this.getAttribute("data-name")||"radio-name";const dataAttr=this.getAttribute("data-options");this.parseOptionsFromAttribute(dataAttr),this.style.setProperty("--title-color",this.getAttribute("title-color")||"#000000"),this.style.setProperty("--caption-color",this.getAttribute("caption-color")||"#707070"),this.style.setProperty("--border-color",this.getAttribute("border-color")||"#e85200"),this.style.setProperty("--background-color",this.getAttribute("background-color")||"#fff3f3"),this.style.setProperty("--input-error-color",this.getAttribute("input-error-color")||"#FF2026"),this.style.setProperty("--paragraph-size",this.getAttribute("paragraph-size")+"px"||"16px"),this.style.setProperty("--legend-size",this.getAttribute("legend-size")+"px"||"16px"),this.render()}parseOptionsFromAttribute(data){try{this.options=data?JSON.parse(data):[]}catch(e){console.error("Invalid JSON in data-options:",e),this.options=[]}}render(){this.shadowRoot.innerHTML=` 578 <style> 579 :host { 580 display: block; 581 } 582 .info-wrapper { 583 display: grid; 584 grid-template-columns: 26px auto; 585 align-items: start; 586 } 587 .info-icon { 588 width: 18px; 589 height: 18px; 590 background-repeat: no-repeat; 591 background-position: center; 592 background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTciIHZpZXdCb3g9IjAgMCAxOCAxNyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTkgMkM2LjY1NjI1IDIgNC41MzEyNSAzLjI1IDMuMzQzNzUgNS4yNUMyLjE4NzUgNy4yODEyNSAyLjE4NzUgOS43NSAzLjM0Mzc1IDExLjc1QzQuNTMxMjUgMTMuNzgxMiA2LjY1NjI1IDE1IDkgMTVDMTEuMzEyNSAxNSAxMy40Mzc1IDEzLjc4MTIgMTQuNjI1IDExLjc1QzE1Ljc4MTIgOS43NSAxNS43ODEyIDcuMjgxMjUgMTQuNjI1IDUuMjVDMTMuNDM3NSAzLjI1IDExLjMxMjUgMiA5IDJaTTkgMTYuNUM2LjEyNSAxNi41IDMuNSAxNSAyLjA2MjUgMTIuNUMwLjYyNSAxMC4wMzEyIDAuNjI1IDcgMi4wNjI1IDQuNUMzLjUgMi4wMzEyNSA2LjEyNSAwLjUgOSAwLjVDMTEuODQzOCAwLjUgMTQuNDY4OCAyLjAzMTI1IDE1LjkwNjIgNC41QzE3LjM0MzggNyAxNy4zNDM4IDEwLjAzMTIgMTUuOTA2MiAxMi41QzE0LjQ2ODggMTUgMTEuODQzOCAxNi41IDkgMTYuNVpNNy43NSAxMUg4LjVWOUg3Ljc1QzcuMzEyNSA5IDcgOC42ODc1IDcgOC4yNUM3IDcuODQzNzUgNy4zMTI1IDcuNSA3Ljc1IDcuNUg5LjI1QzkuNjU2MjUgNy41IDEwIDcuODQzNzUgMTAgOC4yNVYxMUgxMC4yNUMxMC42NTYyIDExIDExIDExLjM0MzggMTEgMTEuNzVDMTEgMTIuMTg3NSAxMC42NTYyIDEyLjUgMTAuMjUgMTIuNUg3Ljc1QzcuMzEyNSAxMi41IDcgMTIuMTg3NSA3IDExLjc1QzcgMTEuMzQzOCA3LjMxMjUgMTEgNy43NSAxMVpNOSA2LjVDOC40Mzc1IDYuNSA4IDYuMDYyNSA4IDUuNUM4IDQuOTY4NzUgOC40Mzc1IDQuNSA5IDQuNUM5LjUzMTI1IDQuNSAxMCA0Ljk2ODc1IDEwIDUuNUMxMCA2LjA2MjUgOS41MzEyNSA2LjUgOSA2LjVaIiBmaWxsPSIjNTI0RjREIi8+Cjwvc3ZnPgo=); 593 } 594 595 .radio-option { 596 position: relative; 597 display: block; 598 border: 2px solid #ffffff; 599 background-color: #F0EBE3; 600 margin-bottom: -1px; 601 max-width: 600px; 602 transition: border-color 0.2s, background-color 0.2s; 603 overflow: hidden; 604 } 605 606 label.radio-option:first-of-type { 607 border-top-left-radius: 8px; 608 border-top-right-radius: 8px; 609 } 610 611 label.radio-option:last-of-type { 612 border-bottom-left-radius: 8px; 613 border-bottom-right-radius: 8px; 614 } 615 616 .radio-option.checked { 617 border-radius: 8px; 618 background-color: var(--background-color); 619 border-color: var(--border-color); 620 z-index: 1; 621 } 622 623 .radio-header { 624 display: grid; 625 grid-template-columns: 26px 1fr 100px; 626 align-items: start; 627 padding: 10px; 628 cursor: pointer; 629 transition: background 0.2s; 630 align-items: center; 631 } 632 633 .radio-option:hover .radio-header { 634 background-color: #ffffff; 635 } 636 637 .radio-input { 638 appearance: none; 639 -webkit-appearance: none; 640 width: 18px; 641 height: 18px; 642 border: 2px solid #000000; 643 border-radius: 50%; 644 margin: 3px 0; 645 position: relative; 646 background-color: white; 647 cursor: pointer; 648 transition: border 0.2s; 649 } 650 651 .radio-input:checked { 652 border: 6px solid var(--border-color); 653 } 654 .text-content { 655 display: flex; 656 flex-direction: column; 657 } 658 659 .image-content { 660 text-align: right; 661 } 662 663 .image-content img { 664 max-width: 80px; 665 } 666 667 .title { 668 font-weight: 400; 669 font-size: var(--legend-size); 670 margin-top: 0; 671 color: var(--title-color); 672 } 673 674 .caption { 675 font-size: var(--legend-size); 676 color: var(--caption-color); 677 margin-top: 2px; 678 } 679 680 .dropdown { 681 font-size: var(--legend-size); 682 padding: 12px 10px; 683 display: none; 684 background: var(--background-color); 685 border-top: 1px solid #ddd; 686 } 687 688 .radio-option.checked .dropdown { 689 display: block; 690 } 691 692 .radio-option.checked .dropdown{ 693 display: var(--hide-dropdown); 694 } 695 696 .radio-checked-content { 697 display: none; 698 } 699 700 .radio-checked-content.active { 701 padding: 14px 0; 702 display: flex; 703 flex-direction: column; 704 gap: 14px; 705 } 706 707 .radio-checked-content__grid-3 { 708 display: grid; 709 grid-template-columns: 1fr 1fr 1fr; 710 gap: 14px; 711 } 712 713 .info-wrapper { 714 margin-top: 14px; 715 } 716 717 #container.invalid .radio-options-wrapper { 718 border-radius: 8px; 719 border: 1px solid var(--input-error-color); 720 padding-bottom: 1px; 721 } 722 723 #container.invalid .error-message { 724 display: block!important; 725 font-size: var(--legend-size); 726 } 727 </style> 728 <div id="container"></div> 729 `;const container=this.shadowRoot.querySelector("#container");container.innerHTML="";const optionsWrapper=document.createElement("div");optionsWrapper.className="radio-options-wrapper",this.options.forEach((opt,
729index)=>{const label=document.createElement("label");label.className="radio-option",label.innerHTML=` 730 <div class="radio-header"> 731 <input class="radio-input" type="radio" name="${this.radioName}" value="${opt.value}"> 732 <div class="text-content"> 733 <div class="title">${opt.title}</div> 734 <div class="caption">${opt.caption}</div> 735 </div> 736 <div class="image-content"> 737 ${opt.image?`<img src="${opt.image}">`:""} 738 </div> 739 </div> 740 `,label.querySelector("input").addEventListener("change",()=>this.updateChecked());const dropdown=document.createElement("div");if(dropdown.className="dropdown",opt.html){const temp=document.createElement("div");temp.innerHTML=opt.html,[...temp.children].forEach(el=>dropdown.appendChild(el))}label.appendChild(dropdown),optionsWrapper.appendChild(label)}),container.appendChild(optionsWrapper);const errorDiv=document.createElement("div");errorDiv.className="error-message",errorDiv.style.display="none",errorDiv.style.color="#FF2026",container.appendChild(errorDiv),this.updateChecked()}updateChecked(){const allOptions=this.shadowRoot.querySelectorAll(".radio-option"),hasCheckoutPaymentOptions=this.classList.contains("checkout-payment-options");let anyChecked=!1;allOptions.forEach(label=>{const input=label.querySelector('input[type="radio"]'),isChecked=input.checked;label.classList.toggle("checked",isChecked),isChecked&&(anyChecked=!0,hasCheckoutPaymentOptions&&PYD.gettingPackingSlip(input.value))});const radioContainer=this.shadowRoot.querySelector("#container");radioContainer&&anyChecked&&radioContainer.classList.remove("invalid")}}customElements.define("radio-accordion",RadioAccordion);class RadioGroup extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.options=[]}static get observedAttributes(){return["data-name","data-options","title-color","caption-color","border-color","background-color","background-color-checked","error-color","data-required"]}attributeChangedCallback(name,oldVal,newVal){name==="data-name"&&(this.radioName=newVal||"dynamic-radio",this.render()),name==="data-options"&&oldVal!==newVal&&(this.parseOptionsFromAttribute(newVal),this.render()),name==="title-color"&&this.style.setProperty("--title-color",newVal),name==="caption-color"&&this.style.setProperty("--caption-color",newVal),name==="border-color"&&this.style.setProperty("--border-color",newVal),name==="background-color"&&this.style.setProperty("--background-color",newVal),name==="error-color"&&this.style.setProperty("--input-error-color",newVal)}connectedCallback(){this.radioName=this.getAttribute("data-name")||"radio-name";const dataAttr=this.getAttribute("data-options");this.parseOptionsFromAttribute(dataAttr);const titleColor=this.getAttribute("title-color"),captionColor=this.getAttribute("caption-color"),borderColor=this.getAttribute("border-color"),bgColor=this.getAttribute("background-color"),errorColor=this.getAttribute("error-color"),bgColorChecked=this.getAttribute("background-color-checked");this.style.setProperty("--title-color",titleColor),this.style.setProperty("--caption-color",captionColor),this.style.setProperty("--border-color",borderColor),this.style.setProperty("--background-color",bgColor),this.style.setProperty("--background-color-checked",bgColorChecked),this.style.setProperty("--input-error-color",errorColor);const legendSizeAttr=this.getAttribute("legend-size"),legendSize=legendSizeAttr?legendSizeAttr+"px":"16px";this.style.setProperty("--legend-size",legendSize),this.render()}parseOptionsFromAttribute(data){try{this.options=data?JSON.parse(data):[]}catch(e){console.error("Invalid JSON in data-options:",e),this.options=[]}}render(){this.shadowRoot.innerHTML=` 741 <style> 742 :host { 743 display: block; 744 } 745 746 .radio-option { 747 position: relative; 748 display: flex; 749 align-items: flex-start; 750 padding: 14px 8px 14px; 751 border: 1px solid #dedcdf; 752 margin-bottom: -1px; 753 max-width: 749px; 754 cursor: pointer; 755 transition: border-color 0.2s, background-color 0.2s; 756 background-color: var(--background-color); 757 } 758 759 .radio-option.hide-radio { 760 padding: 14px; 761 } 762 763 label.radio-option:first-of-type { 764 border-top-left-radius: 8px; 765 border-top-right-radius: 8px; 766 } 767 768 label.radio-option:last-of-type { 769 border-bottom-left-radius: 8px; 770 border-bottom-right-radius: 8px; 771 } 772 773 .radio-option:hover { 774 background-color: var(--background-color-checked); 775 border-color: var(--border-color); 776 z-index: 1; 777 border-radius: 8px; 778 } 779 780 .radio-option.checked { 781 background-color: var(--background-color-checked); 782 border-color: var(--border-color); 783 z-index: 1; 784 border-width: 2px; 785 border-radius: 8px; 786 } 787 788 .radio-input { 789 appearance: none; 790 -webkit-appearance: none; 791 width: 18px; 792 height: 18px; 793 border: 1px solid #dedede; 794 border-radius: 50%; 795 margin-right: 8px; 796 position: relative; 797 cursor: pointer; 798 background-color: #ffffff; 799 transition: border 0.2s; 800 } 801 802 .radio-option.hide-radio .radio-input { 803 display: none; 804 } 805 806 .radio-input:checked { 807 border: 6px solid var(--border-color); 808 } 809 810 .radio-input:focus { 811 outline: none; 812 } 813 814 .radio-option:has(.radio-input:focus-visible) { 815 outline: 2px solid var(--border-color); 816 outline-offset: 2px; 817 z-index: 2; 818 } 819 820 .text-content { 821 display: flex; 822 flex-direction: column; 823 } 824 825 .title { 826 margin-top: 0; 827 font-weight: 700; 828 font-size: 14px; 829 color: var(--title-color); 830 } 831 832 .caption { 833 font-size: 14px; 834 color: var(--caption-color); 835 margin-top: 4px; 836 } 837 838 #container.invalid .radio-options-wrapper { 839 border-radius: 8px; 840 border: 1px solid var(--input-error-color); 841 padding-bottom: 1px; 842 } 843 844 .error-message { 845 color: var(--input-error-color); 846 } 847 848 #container.invalid .error-message { 849 display: block!important; 850 font-size: var(--legend-size); 851 } 852 </style> 853 <div id="container"></div> 854 `;const container=this.shadowRoot.querySelector("#container");container.innerHTML="";const optionsWrapper=document.createElement("div");optionsWrapper.className="radio-options-wrapper",this.options.forEach((opt,
854index)=>{const label=document.createElement("label");label.className="radio-option",label.innerHTML=` 855 <input class="radio-input" type="radio" name="${this.radioName}" value="${opt.value}"> 856 <div class="text-content"> 857 <div class="title">${opt.title}</div> 858 <div class="caption">${opt.caption}</div> 859 </div> 860 `,label.querySelector("input").addEventListener("change",()=>this.updateChecked()),optionsWrapper.appendChild(label)}),container.appendChild(optionsWrapper);const errorDiv=document.createElement("div");errorDiv.className="error-message",errorDiv.style.display="none",container.appendChild(errorDiv),this.updateChecked()}updateChecked(){const allOptions=this.shadowRoot.querySelectorAll(".radio-option");let anyChecked=!1;allOptions.forEach(label=>{const isChecked=label.querySelector('input[type="radio"]').checked;label.classList.toggle("checked",isChecked),isChecked&&(anyChecked=!0)});const radioContainer=this.shadowRoot.querySelector("#container");radioContainer&&anyChecked&&radioContainer.classList.remove("invalid")}}customElements.define("radio-group",RadioGroup);class SearchableSelect extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.states=[]}connectedCallback(){const name=this.getAttribute("data-name")||"state",label=this.getAttribute("data-label")||"Select",textColor=this.getAttribute("text-color"),placeholderColor=this.getAttribute("placeholder-color"),borderColor=this.getAttribute("border-color"),backgroundColor=this.getAttribute("background-color"),optionData=this.getAttribute("data-options"),paragraphSize=this.getAttribute("paragraph-size")+"px"||"16px",legendSize=this.getAttribute("legend-size")+"px"||"16px",inputLabelCheckedSize=this.getAttribute("input-label-checked-size")+"px"||"14px",inputErrorColor=this.getAttribute("input-error-color");try{this.states=JSON.parse(optionData)||[]}catch{console.warn("Invalid JSON in data-options attribute"),this.states=[]}this.shadowRoot.innerHTML=` 861 <style> 862 :host { 863 display: block; 864 position: relative; 865 max-width: 749px; 866 } 867 868 .input-box { 869 position: relative; 870 width: 100%; 871 } 872 873 input { 874 width: 100%; 875 box-sizing: border-box; 876 height: 48px; 877 padding: 16px 12px 0 12px; 878 border: 1px solid ${borderColor}; 879 border-radius: 6px; 880 background-color: ${backgroundColor}; 881 background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTEiIHZpZXdCb3g9IjAgMCAxOCAxMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguMzM1OTQgOS42NjQwNkwwLjgzNTkzOCAyLjE2NDA2QzAuNDQ1MzEyIDEuODEyNSAwLjQ0NTMxMiAxLjIyNjU2IDAuODM1OTM4IDAuODM1OTM4QzEuMTg3NSAwLjQ4NDM3NSAxLjc3MzQ0IDAuNDg0Mzc1IDIuMTY0MDYgMC44MzU5MzhMOSA3LjcxMDk0TDE1LjgzNTkgMC44NzVDMTYuMTg3NSAwLjQ4NDM3NSAxNi43NzM0IDAuNDg0Mzc1IDE3LjE2NDEgMC44NzVDMTcuNTE1NiAxLjIyNjU2IDE3LjUxNTYgMS44MTI1IDE3LjE2NDEgMi4xNjQwNkw5LjYyNSA5LjY2NDA2QzkuMjczNDQgMTAuMDU0NyA4LjY4NzUgMTAuMDU0NyA4LjMzNTk0IDkuNjY0MDZaIiBmaWxsPSIjNTM0RjRDIi8+Cjwvc3ZnPgo=); 882 background-repeat: no-repeat; 883 background-position: right 15px center; 884 color: ${textColor}; 885 font-size: ${paragraphSize}; 886 outline: none; 887 cursor: default; 888 caret-color: transparent; 889 } 890 891 .input-box.error input { 892 border-color: ${inputErrorColor}; 893 } 894 895 .input-box .error-message { 896 color: ${inputErrorColor}; 897 font-size: ${legendSize}; 898 margin-top: 4px; 899 display: none; 900 line-height: 1; 901 } 902 903 .input-box.error .error-message { 904 display: block; 905 } 906 907 label { 908 position: absolute; 909 left: 12px; 910 top: 50%; 911 transform: translateY(-50%); 912 font-size: 14px; 913 color: ${placeholderColor}; 914 background: transparent; 915 pointer-events: none; 916 transition: top 0.2s ease, font-size 0.2s ease; 917 } 918 919 .focused label, 920 .error label, 921 .filled label { 922 top: 5px; 923 font-size: ${inputLabelCheckedSize}px; 924 } 925 926 ul { 927 list-style: none; 928 padding: 0; 929 margin: 4px 0 0; 930 border: 1px solid ${borderColor}; 931 background: white; 932 max-height: 180px; 933 overflow-y: auto; 934 border-radius: 6px; 935 position: absolute; 936 width: -webkit-fill-available; 937 width: -moz-available; 938 z-index: 100; 939 display: none; 940 } 941 942 ul.visible { 943 display: block; 944 } 945 946 li { 947 padding: 8px 12px; 948 cursor: pointer; 949 } 950 951 li:hover, 952 li.active { 953 background: #eee; 954 } 955 </style> 956 957 <div class="input-box"> 958 <label for="${name}">${label}</label> 959 <input type="text" id="${name}" name="${name}" autocomplete="off" /> 960 <div class="error-message">This field is required</div> 961 <ul></ul> 962 </div> 963 `;const container=this.shadowRoot.querySelector(".input-box"),input=this.shadowRoot.querySelector("input"),ul=this.shadowRoot.querySelector("ul");this.getAttribute("data-required")=="true"&&(input.required=!0);let activeIndex=-1;const updateSuggestions=()=>
963{ul.innerHTML="",activeIndex=-1,this.states.forEach(state=>{const li=document.createElement("li");li.textContent=state,li.addEventListener("mousedown",()=>{input.value=state,ul.classList.remove("visible"),container.classList.add("filled")}),ul.appendChild(li)}),ul.classList.add("visible")},highlightItem=(items,index)=>{items.forEach((li,i2)=>li.classList.toggle("active",i2===index)),index>=0&&items[index]&&items[index].scrollIntoView({block:"nearest"})},getItems=()=>Array.from(ul.querySelectorAll("li"));input.addEventListener("focus",()=>{container.classList.add("focused"),updateSuggestions()}),input.addEventListener("blur",()=>{ul.classList.remove("visible"),container.classList.remove("focused"),activeIndex=-1;const inputId=input.getAttribute("id"),message=PYD.allErrorMessages[inputId]||"This field is required",errorMessage=container.querySelector(".error-message");input.value.trim()!==""?(container.classList.add("filled"),container.classList.remove("error"),errorMessage.textContent=""):(container.classList.remove("filled"),container.classList.add("error"),errorMessage.textContent=message)}),input.addEventListener("keydown",e=>{const isOpen=ul.classList.contains("visible");if(e.key==="ArrowDown"){e.preventDefault(),isOpen||updateSuggestions();const items=getItems();activeIndex=Math.min(activeIndex+1,items.length-1),highlightItem(items,activeIndex)}else if(e.key==="ArrowUp"){e.preventDefault();const items=getItems();activeIndex=Math.max(activeIndex-1,0),highlightItem(items,activeIndex)}else if(e.key==="Enter"||e.key===" "){e.preventDefault();const items=getItems();isOpen&&activeIndex>=0&&items[activeIndex]?items[activeIndex].dispatchEvent(new MouseEvent("mousedown",{bubbles:!0})):isOpen||updateSuggestions()}else e.key==="Escape"?(e.preventDefault(),ul.classList.remove("visible"),activeIndex=-1):e.key!=="Tab"&&e.key!=="Shift"&&e.preventDefault()})}}customElements.define("searchable-select",SearchableSelect);class AddressInjector extends HTMLElement{constructor(){super()}connectedCallback(){this.injectPlaceholder()}injectPlaceholder(){const placeholder=document.querySelector(".check-address-placeholder"),checkoutBlock=document.querySelector(".checkout-payment-options");if(!placeholder||!checkoutBlock||!checkoutBlock.shadowRoot)return;const addressContainer=checkoutBlock.shadowRoot.querySelector(".dropdown .address");if(!addressContainer)return;addressContainer.appendChild(placeholder),this.dispatchEvent(new CustomEvent("address-injected",{detail:{injected:!0},bubbles:!0}));const paymentRadio=document.querySelector(".checkout-payment-options");if(!paymentRadio||!paymentRadio.shadowRoot)return;const wrapper=paymentRadio.shadowRoot.querySelector(".gpyd-m-checkout__check-address checkbox-input"),target=paymentRadio.shadowRoot.querySelector(".gpyd-m-checkout__check-address .radio-checked-content");if(!wrapper||!target||!wrapper.shadowRoot)return;const checkbox=wrapper.shadowRoot.querySelector('input[type="checkbox"]');if(!checkbox)return;const toggleClass=()=>{checkbox.checked?target.classList.remove("active"):target.classList.add("active")};toggleClass(),checkbox.addEventListener("change",toggleClass)}}customElements.define("address-injector",AddressInjector),this.addEventListener("pyd:form-initialized",async e=>{PYD.state?.currentScreen?.toLowerCase().includes("pyd")&&PYD.loadFAQs("pyd")}),this.addEventListener("pyd:form-completed",async e=>{PYD.deleteFAQs()}),this.addEventListener("pyd:form-change-completed",async e=>{PYD.state?.currentScreen?.toLowerCase().includes("pyd")&&PYD.handleFAQs(e.detail)});let CUSTOMER_ADDRESS=null,VERIFIED_MAIN_ADDRESS=null,VERIFIED_CHECK_ADDRESS=null,CUSTOMER_DATA=null;document.querySelectorAll(".gpyd-m-checkout__summary-top").forEach(element=>{element.addEventListener("click",()=>{element.classList.toggle("active")})}),document.querySelectorAll(".ti-checkout__error-popup--close-icon").forEach(icon=>{icon.addEventListener("click",function(){const popup=this.closest(".ti-checkout__error-popup");popup&&popup.classList.remove("active")})});const form=document.querySelector(".confirm-sale-form");form?.addEventListener("submit",e=>{e.preventDefault();
963let isValid=!0,firstInvalidInput=null,customerEmail="",customerMailinMethodTitle="",customerMailinMethodCaption="",customerFirstName="",customerLastName="",customerAddress="",customerCity="",customerState="",customerZip="",customerPhone="",customerPaymentName="",customerPaymentAddress="",checkCustomerAddress={};const validateTermsCheckbox=()=>{const checkboxComponent=form.querySelector('checkbox-input[data-name="terms"]');if(checkboxComponent&&checkboxComponent.shadowRoot){const checkbox=checkboxComponent.shadowRoot.querySelector('input[type="checkbox"]'),errorMessage=checkboxComponent.shadowRoot.querySelector(".error-message"),isRequired=checkbox.hasAttribute("required"),isChecked=checkbox.checked;checkbox.setCustomValidity(""),isRequired&&!isChecked?(isValid=!1,firstInvalidInput||(firstInvalidInput=checkbox),checkbox.setCustomValidity(" "),checkbox.classList.add("invalid"),errorMessage&&(errorMessage.textContent=PYD.allErrorMessages.terms,errorMessage.style.display="block")):(checkbox.classList.remove("invalid"),checkbox.setCustomValidity(""),errorMessage&&(errorMessage.textContent="",errorMessage.style.display="none"))}},validateMailin=()=>{const radioGroupComponent=form.querySelector('radio-group[data-name="shipping-option"]');if(radioGroupComponent&&radioGroupComponent.shadowRoot){const checkedOption=radioGroupComponent.shadowRoot.querySelector('input[type="radio"]:checked'),errorMessage=radioGroupComponent.shadowRoot.querySelector(".error-message"),radioGroupContainer=radioGroupComponent.shadowRoot.querySelector("#container"),isRequired=radioGroupComponent.hasAttribute("data-required");radioGroupComponent.setCustomValidity?.(""),isRequired&&!checkedOption?(isValid=!1,firstInvalidInput||(firstInvalidInput=radioGroupComponent.shadowRoot.querySelector('input[type="radio"]')),radioGroupComponent.setCustomValidity?.(" "),radioGroupContainer.classList.add("invalid"),errorMessage&&(errorMessage.textContent=PYD.allErrorMessages.mailin)):(radioGroupContainer.classList.remove("invalid"),radioGroupComponent.setCustomValidity?.(""),errorMessage&&(errorMessage.textContent=""))}},validatePaymentOptions=()=>{const radioAccordionComponent=form.querySelector('radio-accordion[data-name="payment-option"]');if(radioAccordionComponent&&radioAccordionComponent.shadowRoot){const checkedOption=radioAccordionComponent.shadowRoot.querySelector('input[type="radio"]:checked'),errorMessage=radioAccordionComponent.shadowRoot.querySelector(".error-message"),radioGroupContainer=radioAccordionComponent.shadowRoot.querySelector("#container"),isRequired=radioAccordionComponent.hasAttribute("data-required");radioAccordionComponent.setCustomValidity?.(""),isRequired&&!checkedOption?(isValid=!1,firstInvalidInput||(firstInvalidInput=radioAccordionComponent.shadowRoot.querySelector('input[type="radio"]')),radioAccordionComponent.setCustomValidity?.(" "),radioGroupContainer.classList.add("invalid"),errorMessage&&(errorMessage.textContent=PYD.allErrorMessages["payment-method"])):(radioGroupContainer.classList.remove("invalid"),radioAccordionComponent.setCustomValidity?.(""),errorMessage&&(errorMessage.textContent=""))}},paymentOptionElement=form.querySelector('radio-accordion[data-name="payment-option"]')?.shadowRoot.querySelector(".radio-option.checked");paymentOptionElement&&paymentOptionElement.querySelector(".radio-input")&&(customerPaymentName=paymentOptionElement.querySelector(".radio-input").value,PYD.state.paymentOption=customerPaymentName);const components=Array.from(form.querySelectorAll("text-input, searchable-select, radio-group, radio-accordion"));form.querySelectorAll(".checkout-payment-options").forEach(accordion=>{accordion.shadowRoot&&accordion.shadowRoot.querySelectorAll("text-input, searchable-select").forEach(input=>{const inputName=input.shadowRoot?.querySelector("input, select")?.name,radioOption=input.closest(".radio-option"),isCheckField=["payable-to","address","city","state","zip-code","phone"].includes(inputName),hasCheckPlaceholder=radioOption?.querySelector(".check-address-placeholder");if(inputName==="paypal-email"){customerPaymentName==="Paypal"&&components.push(input);return}if(isCheckField){const isUsingSameAddress=hasCheckPlaceholder.querySelector("checkbox-input")?.shadowRoot?.querySelector('input[type="checkbox"]')?.checked;customerPaymentName==="Check"&&hasCheckPlaceholder&&!isUsingSameAddress&&components.push(input);return}components.push(input)})});const termsBox=form.querySelector('checkbox-input[data-name="terms"]');termsBox&&components.push(termsBox);let errorMessages={...PYD.allErrorMessages};customerPaymentName==="Paypal"?errorMessages["paypal-email"]="Enter a PayPal email address":delete errorMessages["paypal-email"],components.forEac
963h(component=>{if(component.getAttribute("data-name")=="shipping-option"){validateMailin();return}if(component.getAttribute("data-name")=="payment-option"){validatePaymentOptions();return}if(component.getAttribute("data-name")=="terms"){validateTermsCheckbox();return}const shadowInput=component.shadowRoot.querySelector("input"),container=component.shadowRoot.querySelector(".input-box"),errorMessage=container?.querySelector(".error-message"),inputName=shadowInput.name,isRequired=shadowInput.hasAttribute("required"),value=shadowInput.value.trim(),isEmpty=!value;if(shadowInput.setCustomValidity(""),isRequired&&isEmpty){isValid=!1,firstInvalidInput||(firstInvalidInput=shadowInput);const customMessage=errorMessages[inputName]||"This field is required";shadowInput.setCustomValidity(" "),container?.classList.add("error"),errorMessage&&(errorMessage.textContent=customMessage);return}let formatError="";switch((inputName==="email"||inputName==="paypal-email")&&(PYD.validateEmail(value)||(formatError="Enter a valid email address")),inputName==="zip-code"&&(PYD.validateZip(value)||(formatError="Enter a 5-digit or 9-digit ZIP code")),inputName==="phone"&&(PYD.validatePhone(value)||(formatError="Enter a 10-digit phone number")),formatError?(isValid=!1,firstInvalidInput||(firstInvalidInput=shadowInput),shadowInput.setCustomValidity(" "),container?.classList.add("error"),errorMessage&&(errorMessage.textContent=formatError)):(container?.classList.remove("error"),errorMessage&&(errorMessage.textContent="")),inputName){case"email":customerEmail||(customerEmail=value);break;case"first-name":customerFirstName||(customerFirstName=value);break;case"last-name":customerLastName||(customerLastName=value);break;case"address":customerAddress||(customerAddress=value);break;case"address-1":customerCity||(customerAddress+=" "+value);break;case"city":customerCity||(customerCity=value);break;case"state":customerState||(customerState=value);break;case"zip-code":customerZip||(customerZip=value);break;case"phone":customerPhone||(customerPhone=value);break}}),PYD.state.emailAddress=customerEmail;const subscribeInput=document.querySelector('checkbox-input[data-name="subscribe"]')?.shadowRoot?.querySelector('input[type="checkbox"]');PYD.setSessionStorage("pyd",{emailSubscribed:subscribeInput?subscribeInput.checked:!1});const mailInMethodElement=form.querySelector('radio-group[data-name="shipping-option"]')?.shadowRoot.querySelector(".radio-option.checked");if(mailInMethodElement&&(mailInMethodElement.querySelector(".title")&&(customerMailinMethodTitle=mailInMethodElement.querySelector(".title").textContent.trim()),mailInMethodElement.querySelector(".caption")&&(customerMailinMethodCaption=mailInMethodElement.querySelector(".caption").textContent.trim()),document.querySelectorAll(".gpyd-m-checkout__sale-confirmed").forEach(el=>{el.classList.remove("active")}),customerMailinMethodTitle==="Get a box sent to you"&&document.querySelector('.gpyd-m-checkout__sale-confirmed[data-type="box"]').classList.add("active"),customerMailinMethodTitle==="Print a Shipping Label"&&document.querySelector('.gpyd-m-checkout__sale-confirmed[data-type="shipping"]').classList.add("active")),PYD.setSessionStorage("pyd",{mailInMethod:customerMailinMethodTitle}),paymentOptionElement){if(customerPaymentName=="Paypal"&&paymentOptionElement.querySelector("text-input")){const paymentInput=paymentOptionElement.querySelector("text-input").shadowRoot.querySelector("input");paymentInput&&(customerPaymentAddress=paymentInput.value)}const checkAddressCard=document.querySelector(".gpyd-m-checkout__confirm-address--check");if(customerPaymentName=="Check"){checkAddressCard&&checkAddressCard.classList.remove("inactive"),checkCustomerAddress.customerFullName=customerFirstName+" "+customerLastName,checkCustomerAddress.customerAddress=customerAddress,checkCustomerAddress.customerCity=customerCity,checkCustomerAddress.customerState=customerState,checkCustomerAddress.customerZip=customerZip,checkCustomerAddress.customerPhone=customerPhone;const paymentOptions=document.querySelector(".checkout-payment-options");
963if(paymentOptions?.shadowRoot){const checkCheckboxContainer=paymentOptions.shadowRoot.querySelector(".gpyd-m-checkout__check-address checkbox-input");if(checkCheckboxContainer?.shadowRoot){const checkbox=checkCheckboxContainer.shadowRoot.querySelector('input[type="checkbox"]');if(checkbox)if(checkbox.checked)checkAddressCard&&checkAddressCard.classList.add("inactive");else{const checkAddressContainer=paymentOptions.shadowRoot.querySelector(".gpyd-m-checkout__check-address");if(checkAddressContainer){const getInputValue=selector=>checkAddressContainer.querySelector(selector)?.shadowRoot?.querySelector(selector)?.value?.trim()||"";checkCustomerAddress.customerFullName=getInputValue("#payable-to"),checkCustomerAddress.customerAddress=[getInputValue("#address"),getInputValue("#address-1")].filter(Boolean).join(" "),checkCustomerAddress.customerCity=getInputValue("#city"),checkCustomerAddress.customerZip=getInputValue("#zip-code"),checkCustomerAddress.customerState=getInputValue("#state"),checkCustomerAddress.customerPhone=getInputValue("#phone")}}}}}else checkAddressCard&&checkAddressCard.classList.add("inactive")}let customerData={customerEmail,customerMailinMethodTitle,customerMailinMethodCaption,customerFirstName,customerLastName,customerAddress,customerCity,customerState,customerZip,customerPhone,customerPaymentName,customerPaymentAddress,checkCustomerAddress};if(CUSTOMER_ADDRESS=customerData,!isValid&&firstInvalidInput){firstInvalidInput.reportValidity(),firstInvalidInput.focus();const absoluteTop=firstInvalidInput.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:absoluteTop-100,behavior:"smooth"});return}document.querySelector(".gpyd-m-checkout__confirm-sale")?.setAttribute("disabled","true"),PYD.validateAddressesAndSubmit(customerData),window.dispatchEvent(new CustomEvent("tradeIn:cartLoaded",{detail:{cart:{items:[]}}})),localStorage.setItem("tradein_cart",JSON.stringify([]))}),document.querySelector(".gpyd-m-checkout__confirm-address--submit")?.addEventListener("click",function(){PYD.moveToThankYou()});const editAddressButtons=document.querySelectorAll(".gpyd-m-checkout__confirm-address--edit");editAddressButtons.forEach(button=>{button.addEventListener("click",()=>{const address=document.querySelector(".gpyd-m-checkout__confirm-address"),leftInner=document.querySelector(".gpyd-m-checkout__left-inner");address&&address.classList.remove("active"),leftInner&&leftInner.classList.remove("inactive")})}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{new URLSearchParams(window.location.search).get("ti-screen")==="checkout"&&PYD.initCheckoutPage()}):new URLSearchParams(window.location.search).get("ti-screen")==="checkout"&&PYD.initCheckoutPage(); 964//# sourceMappingURL=/cdn/shop/t/127/assets/price-your-device.js.map?v=160148098092566794051790188586
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.