{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingGlobal.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/AddToCartTrackingModel.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/IAddToCartPush.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/IEcondaPush.ts","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingStep1.ts","webpack:///./Typescript/ShoppingList/shoppingListService.ts","webpack:///./Typescript/Checkout/checkoutShared.ts","webpack:///./Typescript/Shared/Models/DummyImageSizeEnum.ts","webpack:///./Typescript/Checkout/checkoutStep1.ts","webpack:///./Typescript/Shared/PriceHelper.ts","webpack:///./Typescript/Tracking/GoogleTracking.ts","webpack:///./Typescript/Shared/ProductHelper.ts","webpack:///./Typescript/Factfinder/Tracking/factFinderTracking.ts","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingHelper.ts","webpack:///./Typescript/Shared/AlertHelper.ts","webpack:///./Typescript/Checkout/checkoutService.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","3","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","AddToCartTracking","trackingModel","addToCartPush","JSON","stringify","econdaPush","dataLayer","parse","lineItem","price","product","prices","filter","x","priceType","priceTypeId","currentPriceType","titleMain","id","productId","formatPrice2Digits","getProductNetPrice","brand","publisher","publisherName","getBreadcrumbByTocId","mainTocNodeId","Products","category","variant","mediaType","mediaTypeName","quantity","sku","isbnIssn","comboName","authorList","displayFormat","dimension8","availabilityStatusId","isApproximatePrice","isNew","isStandardwerk","isStandard","isTop","isTopArticle","isPreview","addToCartTrackingData","AddToCartTrackingModel","miniBasket","current_basket","ItemCount","itemCount","TotalNet","totalNet","replace","TotalGross","totalGross","Currency","currency","ProductIdsCurrentBasket","productIds","label","event","eventCategory","eventAction","eventLabel","trackingData","this","AddToCartPush","EcondaPush","addTCartPushProducts","addToCartPushProducts","ecommerce","currencyCode","add","products","forEach","trackingProduct","AddToCartPushProduct","dimesion8","econdaPushProducts","emosUrl","ecSiteId","document","head","querySelector","getAttribute","ecContent","ecProducts","EcondaPushProduct","type","pid","group","count","var1","var2","var3","var4","toString","var5","firstPart","secondPart","buildVar5","var6","onloadTracking","cart","undefined","UC_UI","isInitialized","lineItems","productPrices","productNetPrice","singleItemNetPrice","ProductHelper","breadcrumb","totalNetPrice","amount","setTimeout","updatedLineItem","newQuantitiy","oldQuantity","quantityChange","Number","parseFloat","Math","abs","deleteItem","completeFunction","$","ajax","method","dataType","url","complete","addItem","success","response","updateCounter","showAlert","successMessage","addClass","updateShoppingListCount","merklistenElement","element","html","message","text","show","delay","fadeOut","ShoppingListService","selectedBasketItemToDelete","itemToDeleteId","checkoutService","CheckoutService","basketContainer","shoppingListService","fillBasket","currentItemList","find","basketItemListClone","clone","reverse","addLineItemToBasket","giftLineItems","addGiftLineItemToBasket","replaceWith","currentCart","areTotalPricesApproximated","removeClass","totalGrossPrice","toLocaleString","style","currencyIsoCode","basketItem","append","fillProductContainer","gift","attr","seoOptimizedUrlPart","hasProduktabbildung","image","getImagePath","getDummyImage","DummyImageSize","large","titleMainHead","remove","edition","publicationYear","totalItemGrossPrice","val","priceDescriptionShort","priceTypeDescription","canNotBeReturned","mediaTypeId","checkAvailabilityStatus","getAvailabilityStatus","dateOfPublicationDescription","mediaGroupName","getDRMInfo","dRMId","drmInfo","drmInfoLinks","bindingType","drmInfoRechts","getSystemanforderungenLink","systemanforderungenLink","displayName","href","target","deliveryTypeId","chosenDeliveryType","description","priceDescriptionLink","getAdditionalPriceInfoByDelivertypeId","additionalPriceInfo","singleItemGrossPrice","some","prepend","loadImage","each","index","imageWidth","width","round","buildLineItemChange","lineitem","lineItemChange","lineItemId","updateLineItem","newCart","deleteLineItemFromBasket","deleteElement","basketitem","parents","lineItemToDelete","getLineItemById","newQuantity","deleteLineItem","deletedLineItem","getItemCountForBasket","onChangeQuantityTracking","overrideEmptyBasket","getItemCountInBasket","setItemCountForBasket","TrackMiniBasket","items","basketOverlay","item","itemPrototype","title","availabilityStatus","imageUrl","seoPath","singleItemPrice","totalItemPrice","fillBasketOverlay","console","log","showModal","modal","hideModal","hide","on","counter","next","currentvalue","trigger","prev","countElement","lineItemToUpdate","oldQuantitiy","updateQuantityOfLineItem","catch","then","setNewQuantityOfBasketItem","merklisteModal","modalId","currentLineItem","produktvariantenContainer","checkItemPrototype","pricetypeId","newCheckItem","priceAmount","priceGross","specialConditions","prop","fillProduktVariantenModal","removeAttr","container","checkitem","fillBezugsartenModal","button","parentContainer","newPricetypeId","updatePriceTypeOfLineItem","_","setNewPricetypeIdOfBasketItem","newChosenDeliveryType","updateChosenDeliveryTypeOfLineItem","setNewChosenDeliveryTypeOfBasketItem","initBasket","showBasket","additionalCartInfo","orderCode","customerMessage","fillAdditionalInfo","shippingCostInfo","hideNoShippingCostHintAtCart","showShippingNotification","initEvents","localStorage","setItem","factfinderBasketTracking","addProductByIsbn","input","isbn","addItemByIsbnSearch","dangerAlert","code","addDiscountToCart","e","keyCode","OrderCode","CustomerMessage","redirectLink","trim","addAdditionalInfoToCart","location","isCentPrice","toFixed","error","windowHeight","innerHeight","trackGooglePromotionEvent_view","eventName","promoView","promotions","ecCustomProperties","icampv","rqtype","trackGooglePromotionEvent_click","promoClick","icampc","trboPromotionViewTracking","IsVisibleElement","moduleName","campaignId","campaignName","usertype","_trboq","_trbo","app","tracker","trackExternalView","hasClass","top_of_element","offset","top","bottom_of_element","outerHeight","top_of_screen","scrollTop","Target","loginTracking","pageType","loggedInResult","includes","Cookies","pushTrboId","eId","external_user_id","trackIdLayerComplete","hId","hMail","hKid","externalIdHash","emailHash","kupCustomerNumberHash","trackIdLayerReduced","trackingParam","action","searchQuery","Promise","resolve","reject","storedAvailabilityStatusList","sessionStorage","getItem","availabilityStatusList","drmId","drmMapping","drmMappingItem","DRmid","AnzeigeText","storedOrderableAvailabilityStatusList","orderableAvailabilityStatusList","deliverytypeId","priceinfo","tocId","height","imageSize","DeliveryTypeID","Bruttopreis","PreisvariantenMerkmal","Urheberzeile","Verlag","factfinderCartTracking","sessionId","contentType","factfinderCheckoutTracking","parent","parseInt","origPos","query","pos","page","pagesize","simi","factFinderCampaign","searchResultClickTracking","closest","CalculatePrice","currentPrice","currentPriceTypeId","highestPriceDescription","highestPrice","laufzeitFaktor","getLaufzeitFaktor","aboWert","summeProbeAbosWerte","getHighestValidPriceFromLineItem","currentDate","Date","validPrices","validFrom","validUntil","max","map","y","summeProbeAbosGrossWerte","hoechsterPreis","priceCalculation","highestPriceAmount","priceNet","CalculatePriceFromLineItem","currentPricetypeId","CalculatePriceFromPriceCalculationModel","fadeIn","elementId","doNotShowAgain","set","spinnerModal","expressKauf","responseText","headers","AddToCartTrackingLineItem","addProductToBasket","ChosenDeliveryType","addPaymentShippingDataToCart","addresschange","paymentmethodChange","bskAdditionalInfo","relatedBusinessPartnerId","paymentmethodchange","updateBillingaddressInCart","billingAddressId","getAvailableDeliveryAddresses","isBusiness","AddAddressesToCartGast","billingAddress","shippingAddress","emailAddress","shippingAsBilling","isGuestUser","reload","AddPaymentmethodToCartGast","isDataUsageAccepted","dataUsageAccepted","AddArvatoAddressesToCart","addresses","getSaferpayIframe","recaptchaResponse"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrBiB,EAAG,GAGAZ,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU8B,QAGnC,IAAIC,EAASH,EAAiB5B,GAAY,CACzCK,EAAGL,EACHgC,GAAG,EACHF,QAAS,IAUV,OANAhB,EAAQd,GAAUW,KAAKoB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG/DK,EAAOC,GAAI,EAGJD,EAAOD,QAKfJ,EAAoBO,EAAInB,EAGxBY,EAAoBQ,EAAIN,EAGxBF,EAAoBS,EAAI,SAASL,EAASM,EAAMC,GAC3CX,EAAoBY,EAAER,EAASM,IAClC5B,OAAO+B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEX,EAAoBgB,EAAI,SAASZ,GACX,oBAAXa,QAA0BA,OAAOC,aAC1CpC,OAAO+B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DrC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKzC,OAAO0C,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBzC,OAAO+B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBS,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAL,EAAoBS,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRX,EAAoBY,EAAI,SAASgB,EAAQC,GAAY,OAAO/C,OAAOC,UAAUC,eAAeC,KAAK2C,EAAQC,IAGzG7B,EAAoB8B,EAAI,GAExB,IAAIC,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAW5C,KAAKuC,KAAKK,GAC5CA,EAAW5C,KAAOf,EAClB2D,EAAaA,EAAWG,QACxB,IAAI,IAAIvD,EAAI,EAAGA,EAAIoD,EAAWlD,OAAQF,IAAKP,EAAqB2D,EAAWpD,IAC3E,IAAIU,EAAsB4C,EAI1B1C,EAAgBJ,KAAK,CAAC,IAAI,IAEnBM,I,2jDCtJT,YAOA,OACA,OACA,OAEA,SAAgB0C,EAAkBC,GAC9B,GAAIA,EAAe,CACf,IAAIC,EAAgBC,KAAKC,UAAUH,EAAcC,eAC7CG,EAAaF,KAAKC,UAAUH,EAAcI,YAC9CC,UAAUtD,KAAKmD,KAAKI,MAAMF,IAC1BC,UAAUtD,KAAKmD,KAAKI,MAAML,KALlC,sBASA,qCAAgDM,G,sGAWtB,OAVhBC,EAAQD,EAASE,QAAQC,OAAOC,QAAO,SAACC,GAAM,OAAAA,EAAEC,UAAUC,aAC5DP,EAASQ,iBAAiBD,eAAa,G,QAK/BxC,KAAMiC,EAASE,QAAQO,UACvBC,GAAIV,EAASE,QAAQS,UACrBV,OAAQ,EAAAW,mBAAmB,EAAAC,mBAAmBb,IAAW,GACzDc,MAAOd,EAASE,QAAQa,UAAUC,eACxB,GAAM,EAAAC,qBACZjB,EAASE,QAAQgB,gB,cAP7B,EAAAC,SAAU,EAMF,EAAAC,SAAU,SAGV,EAAAC,QAASrB,EAASE,QAAQoB,UAAUC,cACpC,EAAAC,SAAU,EACV,EAAAC,IAAKzB,EAASE,QAAQwB,SACtB,EAAAC,UACI3B,EAASE,QAAQ0B,WACjB,MACA5B,EAASE,QAAQO,UACrB,EAAAoB,cAAe7B,EAASE,QAAQ2B,cAChC,EAAAC,WAAY9B,EAASE,QAAQ2B,cAC7B,EAAAb,cAAehB,EAASE,QAAQa,UAAUC,cAC1C,EAAAe,qBAAsB/B,EAASE,QAAQ6B,qBACvC,EAAAC,mBAAoB/B,aAAK,EAALA,EAAO+B,mBAC3B,EAAAC,MAAOjC,EAASE,QAAQ+B,MACxB,EAAAC,eAAgBlC,EAASE,QAAQiC,WACjC,EAAAC,MAAOpC,EAASE,QAAQmC,aACxB,EAAAC,UAAWtC,EAASE,QAAQoC,U,IAzBpCC,E,EAgCJ/C,EAH6B,IAAI,EAAAgD,uBAC7BD,I,YAKR,2BAAgCE,G,QACxBA,EACA3C,UAAUtD,KAAK,CACXkG,eAAgB,CACZC,UAAWF,EAAWG,UACtBC,SAA6B,QAArB,EAAEJ,EAAWK,gBAAQ,eAAEC,QAAQ,IAAK,KAC5CC,WAAiC,QAAvB,EAAEP,EAAWQ,kBAAU,eAAEF,QAAQ,IAAK,KAChDG,SAAUT,EAAWU,SACrBC,wBAAyBX,EAAWY,cAK5CvD,UAAUtD,KAAK,CACXkG,eAAgB,CACZC,UAAW,EACXE,SAAU,EACVG,WAAY,EACZE,SAAU,MACVE,wBAAyB,OAMzC,yCAA8CE,GACtCA,IACAxD,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,kBACfC,YAAa,wBACbC,WAAYJ,IAGhBxD,UAAUtD,KAAK,CACX,MAAS,cACT,mBAAsB,CAClB,OAAW,CAAC,kBAAmB,yBAAgC8G,EAAO,EAAG,KACzE,OAAW,iB,iHClG3B,YACA,QAEA,EACI,SAAYK,GACRC,KAAKlE,cAAgB,IAAI,EAAAmE,cAAcF,EAAaxC,UACpDyC,KAAK/D,WAAa,IAAI,EAAAiE,WAAWH,EAAaxC,WAHzC,EAAAqB,0B,wGCDb,MACI,SAAYuB,GAyDhB,IACQC,EAzDAJ,KAAKL,MAAQ,gBACbK,KAAKK,UAAY,GACjBL,KAAKK,UAAUC,aAAe,MAC9BN,KAAKK,UAAUE,IAAM,GACrBP,KAAKK,UAAUE,IAAIC,UAqDnBJ,EAAwB,GArD+BD,EAsD1CM,SAAQ,SAACC,GACtBN,EAAsBxH,KAAK,IAAI+H,EAAqBD,OAEjDN,IA/DE,EAAAH,gBAiBb,MACI,SAAYS,GACRV,KAAK7F,KAAOuG,EAAgBvG,KAC5B6F,KAAKlD,GAAK4D,EAAgB5D,GAC1BkD,KAAK3D,MAAQqE,EAAgBrE,MAC7B2D,KAAK9C,MAAQwD,EAAgBxD,MAC7B8C,KAAKxC,SAAWkD,EAAgBlD,SAChCwC,KAAKvC,QAAUiD,EAAgBjD,QAC/BuC,KAAKpC,SAAW8C,EAAgB9C,SAChCoC,KAAKY,UAAYF,EAAgBzC,gB,qGC1BzC,MACI,SAAYuC,GAoEhB,IACQK,EApEAb,KAAKc,QAAU,2BACfd,KAAKe,SAAWC,SAASC,KAAKC,cAAc,8BAA8BC,aAAa,WACvFnB,KAAKoB,UAAY,GACjBpB,KAAKqB,YAiELR,EAAqB,GAjEmBL,EAkE3BC,SAAQ,SAACC,GACtBG,EAAmBjI,KAAK,IAAI0I,EAAkBZ,OAE3CG,IA1EE,EAAAX,aAoBb,MACI,SAAYQ,GACRV,KAAKuB,KAAO,QACZvB,KAAKwB,IAAMd,EAAgB5D,GAC3BkD,KAAKnC,IAAM6C,EAAgB7C,IAC3BmC,KAAK7F,KAAOuG,EAAgB3C,UAC5BiC,KAAK3D,MAAQqE,EAAgBrE,MAC7B2D,KAAKyB,MAAQf,EAAgBlD,SAC7BwC,KAAK0B,MAAQhB,EAAgB9C,SAC7BoC,KAAK2B,KAAOjB,EAAgBjD,QAC5BuC,KAAK4B,KAAOlB,EAAgBzC,cAC5B+B,KAAK6B,KAAOnB,EAAgBtD,cAC5B4C,KAAK8B,KAAOpB,EAAgBvC,qBAAqB4D,WACjD/B,KAAKgC,KA4Cb,SAAmBtB,GACf,IAAIuB,EAAY,QACc,IAA1BvB,EAAgBlC,MAChByD,EAAY,SAC8B,IAAnCvB,EAAgBpC,iBACvB2D,EAAY,kBAGhB,IAAIC,EAAa,OAOjB,OAN6B,GAAzBxB,EAAgBrC,MAChB6D,EAAa,QACuB,GAA7BxB,EAAgBhC,YACvBwD,EAAa,aAGPD,EAAS,IAAIC,EA3DPC,CAAUzB,GACtBV,KAAKoC,KAAO1B,EAAgBtC,mBAAqB,UAAY,c,mgDCpCrE,WAGA,OACA,OASA,0BAAsBiE,EAAeC,G,0HACTC,IAApB9G,OAAc,QAAmB+G,MAAMC,cAAvC,YACIC,EAAYJ,EAAMA,EAAKI,UAAY,GACvClC,EAAW,GACXf,EAAa,GACbkD,EAAgB,G,IACC,EAAAD,E,wBAAA,YAAZtG,EAAQ,KACTE,EAAUF,EAASE,QACvBmD,EAAW7G,KAAK0D,EAAQS,WACpB6F,EAAkBxG,EAASyG,mBAAqB,EAAA7F,mBAAmB,EAAAC,mBAAmBb,IAAW,GAAQ,GAC7GuG,EAAc/J,KAAKgK,GACM,GAAME,EAAczF,qBAAqBf,EAAQgB,iBALhD,M,OAKtByF,EAAqB,SACzBvC,EAAS5H,KACL,CACI,KAAQ0D,EAAQO,UAChB,GAAMP,EAAQS,UACd,MAAS6F,EACT,MAAStG,EAAQa,UAAYb,EAAQa,UAAUC,cAAgB,GAC/D,SAAY2F,GAA0B,GACtC,QAAWzG,EAAQoB,UAAYpB,EAAQoB,UAAUC,cAAgB,GACjE,SAAYvB,EAASwB,SACrB,WAActB,EAAQ2B,gB,wBAfb,I,oBAmBrB/B,UAAUtD,KAAK,CACX,QAAW,2BACX,UAAa,YACb,MAAS,mBACT,UAAa,CACT,SAAY,CACR,YAAe,CAAE,KAAQ,GACzB,SAAY4H,MAKxBtE,UAAUtD,KAAK,CACX,kBAAqB,CACjB,eAAkB,OAClB,aAAgB6G,EAChB,aAAgBkD,EAChB,iBAAoBL,GAAQA,EAAKU,cAAiB,EAAAhG,mBAAmBsF,EAAKU,cAAcC,QAAQ,GAAQ,M,aAO5GC,WAAWb,EAAelH,KAAK,KAAMmH,GAAO,K,mCAapD,oCAA+CA,EAAaa,EAA4BC,EAAsBC,G,sGAEjF,OADjB/G,EAAU6G,EAAgB7G,QACT,GAAMwG,EAAczF,qBAAqBf,EAAQgB,gB,cAAtEyF,EAAqB,SACrBO,EAAiBF,EAAeC,EAC9BhH,EAAQ8G,EAAgB7G,QAAQC,OAAOC,QAAO,SAACC,GAAM,OAAAA,EAAEC,UAAUC,aACnEwG,EAAgBvG,iBAAiBD,eAAa,GAC1C2G,EAAiB,EACjBpH,UAAUtD,KAAK,CACX,WAAc,CACV,CACI2I,KAAM,QACNC,IAAKlF,EAAQS,UACbc,IAAKvB,EAAQwB,SACb3D,KAAMmC,EAAQ0B,WAAa,MAAQ1B,EAAQO,UAC3CR,MAAO8G,EAAgBN,mBAAqB,EAAA7F,mBAAmB,EAAAC,mBAAmBkG,IAAkB,GAAQ,GAC5G1B,MAAOsB,EACPrB,MAAO4B,EACP3B,KAAMrF,EAAQoB,UAAYpB,EAAQoB,UAAUC,cAAgB,GAC5DiE,KAAMtF,EAAQ2B,cACd4D,KAAMvF,EAAQa,UAAYb,EAAQa,UAAUC,cAAgB,GAC5D0E,KAAMxF,EAAQ6B,qBAAqB4D,WACnCC,KAAM,EAAAG,UAAU7F,GAChB8F,MAAM/F,aAAK,EAALA,EAAO+B,oBAAqB,UAAY,cAGtD,QAAW,2BACX,SAAY4C,SAASC,KAAKC,cAAc,8BAA8BC,aAAa,WACnF,UAAa,GACb,MAAS,gBACT,UAAa,CACT,aAAgB,MAChB,IAAO,CACH,SAAY,CACR,CACI,KAAQ7E,EAAQO,UAChB,GAAMP,EAAQS,UACd,MAASoG,EAAgBN,mBAAqB,EAAA7F,mBAAmB,EAAAC,mBAAmBkG,IAAkB,GAAQ,GAC9G,MAAS7G,EAAQa,UAAYb,EAAQa,UAAUC,cAAgB,GAC/D,SAAY2F,EACZ,QAAWzG,EAAQoB,UAAYpB,EAAQoB,UAAUC,cAAgB,GACjE,SAAY2F,EACZ,WAAchH,EAAQ2B,mBAMtC,CACI,kBAAqB,CACjB,eAAkB,OAClB,aAAgB3B,EAAQS,UACxB,aAAgBoG,EAAgBN,mBAAqB,EAAA7F,mBAAmB,EAAAC,mBAAmBkG,IAAkB,GAAQ,GACrH,iBAAoBb,EAAKU,cAAgB,EAAAhG,mBAAmBsF,EAAKU,cAAcC,QAAQ,GAAQ,MAM3G/G,UAAUtD,KAAK,CACX,QAAW,2BACX,SAAYoI,SAASC,KAAKC,cAAc,8BAA8BC,aAAa,WACnF,UAAa,GACb,MAAS,qBACT,UAAa,CACT,aAAgB,MAChB,OAAU,CACN,SAAY,CACR,CACI,KAAQ7E,EAAQO,UAChB,GAAMP,EAAQS,UACd,MAASoG,EAAgBN,mBAAqBU,OAAOC,WAAW,EAAAxG,mBAAmB,EAAAC,mBAAmBkG,IAAkB,IAAS,GACjI,MAAS7G,EAAQa,UAAYb,EAAQa,UAAUC,cAAgB,GAC/D,SAAY2F,EACZ,QAAWzG,EAAQoB,UAAYpB,EAAQoB,UAAUC,cAAgB,GACjE,SAAY8F,KAAKC,IAAIJ,GACrB,WAAchH,EAAQ2B,oB,wICpJtD,+BAiEA,OA1DI,YAAA0F,WAAA,SAAW5G,EAAgB6G,GACvBC,EAAEC,KAAK,CACHC,OAAQ,SACRC,SAAU,OACVC,IAAK,kDAAkDlH,EACvDmH,SAAUN,KASlB,YAAAO,QAAA,SAAQpH,GAAR,WACI8G,EAAEC,KAAK,CACHC,OAAQ,OACRC,SAAU,OACVC,IAAK,+CAA+ClH,EACpDqH,QAAS,SAAAtM,GACL,IAAIuM,EAAWvM,EACf,EAAKwM,cAAcT,EAAE,mCAAoCQ,EAAS3C,OAClE,EAAK6C,UAAUF,EAASG,gBACxBX,EAAE,iBAAiBY,SAAS,YAQxC,YAAAC,wBAAA,sBACQC,EAAoBd,EAAE,mCACtBc,EAAkBrM,OAAS,GAC3BuL,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,qDACLG,QAAS,SAAAtM,GACL,EAAKwM,cAAcK,EAAmB7M,OAM9C,YAAAwM,cAAR,SAAsBM,EAASlD,GACvBA,EAAQ,EACRkD,EAAQC,KAAK,wBAAwBnD,EAAK,WAG1CkD,EAAQC,KAAK,KAIb,YAAAN,UAAR,SAAkBO,GACdjB,EAAE,qBAAqBkB,KAAKD,GAC5BjB,EAAE,mBAAmBmB,OAAOC,MAAM,KAAMC,WAEhD,EAjEA,GAAa,EAAAC,wB,ikDCGb,MACA,IAmBIC,EACAC,EApBJ,QACA,OACA,OACA,QAEMC,EAAkB,IAAI,EAAAC,gBAC5B,QAQIC,GADmB3B,EAAE,qBACHA,EAAE,sBAGlB4B,EAAsB,IAD5B,MACgCN,qBAUhC,SAAsBO,EAAWpD,G,6GACzBqD,EAAkBH,EAAgBI,KAAK,qBACvCtD,GAAQA,EAAKI,WAAaJ,EAAKI,UAAUpK,OAAS,GAAlD,aACIuN,EAAsBF,EAAgBG,SACtBjB,KAAK,I,IAEJ,EAAAvC,EAAKI,UAAUqD,U,wBAAf,WACjB,GAAMC,EADO,KACuBH,IADK,M,OACzC,S,wBADiB,I,aAIrB,GAAIvD,EAAK2D,eAAiB3D,EAAK2D,cAAc3N,OAAS,EAClD,IAAK,EAAL,EAAyB,EAAAgK,EAAK2D,cAAcF,UAAnB,eACrBG,EADiB,KACqBL,G,OAI9CF,EAAgBQ,YAAYN,G,aAE5BF,EAAgBd,KAAK,I,wBAEzB,EAAAuB,YAAc9D,EACdkD,EAAgBI,KAAK,0BAA0BnB,SAAS,QAyQpD,EAAA2B,cACI,EAAAA,YAAYC,4BACZxC,EAAE,qBACG+B,KAAK,sBACLf,KAAK,qBACVhB,EAAE,qBACG+B,KAAK,0BACLU,YAAY,SAEyB/D,MAAtC,EAAA6D,YAAYG,gBAAgBtD,QAC5BY,EAAE,qBACG+B,KAAK,sBACLf,MACI,EAAAuB,YAAYG,gBAAgBtD,OAAS,KAAKuD,eAAe,QAAS,CAC/DC,MAAO,WACPlH,SAAU,EAAA6G,YAAYG,gBAAgBhH,SAASmH,oBAtRvElB,EAAgBf,SAAS,QAkSrB,EAAA2B,aAAe,EAAAA,YAAY1D,UAAUpK,OAAS,GAC9CuL,EAAE,qBAAqByC,YAAY,QACnCzC,EAAE,2BAA2ByC,YAAY,QACzCzC,EAAE,sBAAsBY,SAAS,QACjCZ,EAAE,yBAAyByC,YAAY,sBAEvCzC,EAAE,2BAA2BY,SAAS,QACtCZ,EAAE,sBAAsByC,YAAY,QACpCzC,EAAE,yBAAyBY,SAAS,qB,WAtS5C,SAAeyB,EAAwB9J,EAAyByJ,G,gGAK5D,OAJIc,EAAa9C,EAAE,qBACd+B,KAAK,oBACLE,QACLD,EAAoBe,OAAOD,GAC3B,GAAME,EAAqBF,EAAYvK,GAAU,I,cAAjD,S,WAGJ,SAAe4J,EAAoB5J,EAAqByJ,G,gGAKpD,OAJIc,EAAa9C,EAAE,qBACd+B,KAAK,oBACLE,QACLD,EAAoBe,OAAOD,GAC3B,GAAME,EAAqBF,EAAYvK,GAAU,I,cAAjD,S,WASJ,SAAeyK,EAAqBF,EAAoBvK,EAAqB0K,G,6IACrExK,EAAUF,EAASE,QACnBS,EAAYT,EAAQS,UAGxB4J,EAAWI,KAAK,KAAM,mBAAqB3K,EAASU,IACpD6J,EAAWI,KAAK,kBAAmB3K,EAASU,IAG5C6J,EAAWf,KAAK,yBAAyBmB,KAAK,OAAQ,IAAMzK,EAAQ0K,oBAAsB,YAAcjK,GACpGT,EAAQ2K,qBACJC,EAAQP,EAAWf,KAAK,0BAC5B,KAAAsB,GAAMH,K,GAAK,YAAY,GAAMjE,EAAcqE,aAAapK,EAAW,OAFnE,M,cAEA,oBAAuB,Y,aAID,OAFtB,KAAA4J,EACKf,KAAK,2BACLmB,K,GAAK,YAAY,GAAMjE,EAAcsE,cAAc,EAAAC,eAAeC,Q,OAFvE,oBAEsB,Y,wBAE1BX,EAAWf,KAAK,mBAAmBf,KAAKvI,EAAQiL,cAAgBjL,EAAQiL,cAAgBjL,EAAQO,WAE3FiK,GAaDH,EAAWf,KAAK,+BAA+B4B,SAC/Cb,EAAWf,KAAK,2CAA2C4B,WAb3Db,EAAWf,KAAK,wBAAwBf,KAAKvI,EAAQ0B,YACjD1B,EAAQwB,SACR6I,EAAWf,KAAK,kBAAkBf,KAAK,QAAUvI,EAAQwB,UAEzD6I,EAAWf,KAAK,kBAAkBnB,SAAS,QAE/CkC,EAAWf,KAAK,qBAAqBf,KAAKvI,EAAQmL,SAC9CnL,EAAQoL,gBAAkB,GAC1Bf,EAAWf,KAAK,6BAA6Bf,KAAKvI,EAAQoL,gBAAkB,IAEhFf,EAAWf,KAAK,uBAAuBf,KAAKvI,EAAQoB,UAAUC,gBAM9DrB,EAAQa,WAAab,EAAQa,UAAUC,eACvCuJ,EAAWf,KAAK,uBAAuBf,KAAKvI,EAAQa,UAAUC,eAGlEuJ,EAAWf,KAAK,wBAAwBf,MACnCzI,EAASuL,oBAAoB1E,OAAS,KAAKuD,eAAe,QAAS,CAChEC,MAAO,WACPlH,SAAUnD,EAASuL,oBAAoBpI,SAASmH,mBAIxDC,EACKf,KAAK,mBACLgC,IAAIxL,EAASwB,SAAW,IACxBiH,KAAKzI,EAASwB,SAAW,IAE1BvB,EAAQC,EAAQC,OAAOC,QACvB,SAAAC,GAAK,OAAAA,EAAEC,UAAUC,aAAeP,EAASQ,iBAAiBD,eAC5D,GACFgK,EACKf,KAAK,kCACLf,KACGxI,EAAMwL,sBAAwBxL,EAAMwL,sBAAwBzL,EAASQ,iBAAiBkL,sBAG1FzL,EAAM+B,oBACNuI,EAAWf,KAAK,oBAAoBU,YAAY,SAIhDhK,EAAQyL,kBAAqD,KAAjCzL,EAAQoB,UAAUsK,cAC9CrB,EAAWf,KAAK,mCAAmCU,YAAY,QAG9DQ,GAA0C,IAAjCxK,EAAQoB,UAAUsK,aAA6D,IAAxC5L,EAASuL,oBAAoB1E,QAC9E0D,EAAWf,KAAK,0BAA0BnB,SAAS,oBAElD3B,EAAcmF,wBAAwB3L,EAAQ6B,sBAA/C,OACAwI,EAAWf,KAAK,kCAAkCU,YAAY,Q,eAEjD,SAAMxD,EAAcoF,sBAAsB5L,EAAQ6B,uB,cAAlD,SAEuB,GAAhC7B,EAAQ6B,sBACgC,MAAxC7B,EAAQ6L,8BACgC,IAAxC7L,EAAQ6L,6BAFR,OAIA,KAAAxB,EACKf,KAAK,2BACLf,KACI,GAAM/B,EAAcoF,sBAAsB5L,EAAQ6B,wB,cAH3D,WAGS,SACG,KACA7B,EAAQ6L,6BACR,M,cAKF,OAFV,KAAAxB,EACKf,KAAK,2BACLf,KAAK,GAAM/B,EAAcoF,sBAAsB5L,EAAQ6B,uB,OAF5D,WAEU,WAC0B,GAAhC7B,EAAQ6B,sBAA6D,GAAhC7B,EAAQ6B,uBAC7CwI,EAAWf,KAAK,0BAA0BnB,SAAS,gCACnDkC,EAAWf,KAAK,8BAA8BU,YAAY,S,0BAIjC,KAAjChK,EAAQoB,UAAUsK,aAClBrB,EAAWf,KAAK,oBAAoBnB,SAAS,WAE7CnI,EAAQoB,UAAU0K,gBAAuD,UAArC9L,EAAQoB,UAAU0K,eACxC,GAAMtF,EAAcuF,WAAW/L,EAAQgM,QADrD,O,QAc8B,OAb1BC,EAAU,YAENC,EAAe,KAAKlM,EAAQmM,YAAW,IAAIF,EAAO,IAClDG,EAAmBpM,EAAQmM,YAAW,KAAKF,EAAO,IACtD5B,EACKf,KAAK,sCACLf,KAAK2D,GACLlC,YAAY,QACjBK,EACKf,KAAK,oCACLf,KAAK6D,GACLpC,YAAY,SAES,GAAMxD,EAAc6F,8B,QAA9CC,EAA0B,SAC9BjC,EACKf,KAAK,uCACLU,YAAY,QACZV,KAAK,KACLf,KAAK+D,EAAwBC,aAC7B9B,KAAK,OAAQ6B,EAAwBE,MACrC/B,KAAK,SAAU6B,EAAwBG,QAC5CpC,EAAWf,KAAK,qBAAqBU,YAAY,QACjDK,EAAWf,KAAK,yBAAyBU,YAAY,QACrDK,EAAWf,KAAK,oBAAoBnB,SAAS,W,0BAGpB,GAAzBnI,EAAQC,OAAOjE,QACY,GAA1BgE,EAAQ0M,gBAAiD,GAA1B1M,EAAQ0M,gBACkB,MAAxD5M,EAASQ,iBAAiBD,YAAYoF,WAAW,KAGnD4E,EAAWf,KAAK,0CAA0CU,YAAY,QACtEK,EAAWf,KAAK,oBAAoBnB,SAAS,WACV,GAA/BrI,EAAS6M,oBACTtC,EAAWf,KAAK,oCAAoCU,YAAY,QAEjC,GAA/BlK,EAAS6M,oBACTtC,EAAWf,KAAK,yBAAyBU,YAAY,SAG/B,GAA1BhK,EAAQ0M,gBACRrC,EAAWf,KAAK,mCAAmCU,YAAY,QAEnEK,EACKf,KAAK,8BACLf,KACGvI,EAAQC,OAAOC,QAAO,SAAAC,GAAK,OAAAA,EAAEC,UAAUC,aAAeP,EAASQ,iBAAiBD,eAAa,GAAGuM,aAEnG5C,YAAY,SAIb6C,EAAuBxC,EAAWf,KAAK,8BAA8BA,KAAK,gBAK1EuD,EAAqB7Q,QACY,iFAAjC6Q,EAAqB,GAAGL,MAExBK,EAAqB3B,SAGK,GAA1BlL,EAAQ0M,gBAAiD,GAA1B1M,EAAQ0M,eAAvC,OAC0B,GAAMlG,EAAcsG,sCAAsC9M,EAAQ0M,iB,SAAxFK,EAAsB,WAGtB1C,EACKf,KAAK,iCACLf,KAAKwE,GACL/C,YAAY,Q,0BAIzBK,EAAWf,KAAK,uBAAuBf,MAClCzI,EAASkN,qBAAqBrG,OAAS,KAAKuD,eAAe,QAAS,CACjEC,MAAO,WACPlH,SAAUnD,EAASkN,qBAAqB/J,SAASmH,mBAIjCtK,EA+BRE,QAAQC,OAAOgN,MAAK,SAAA9M,GAAK,OAAAA,EAAE2B,wBA9BvCuI,EAAWf,KAAK,uBAAuB4D,QAAQ,QAC/C7C,EAAWf,KAAK,wBAAwB4D,QAAQ,SAIhDlN,EAAQC,OAAOjE,OAAS,IAExBqO,EAAWf,KAAK,mCAAmCU,YAAY,QAC/DK,EAAWf,KAAK,oBAAoBnB,SAAS,YAGjDkC,EAAWf,KAAK,gBAAgBmB,KAAK,iBAAkBhK,GACvD4J,EAAWL,YAAY,QACvBmD,EAAU9C,G,WAGd,SAAsB8C,EAAU9C,G,0EACN9C,EAAE8C,GAAYf,KAAK,eACzB8D,MAAK,SAACC,EAAO/E,GACzB,IAAIgF,EAAa/F,EAAEe,GAASiF,QACxB3C,EAAQrD,EAAEe,GAASgB,KAAK,0BAC5BsB,EAAMH,KAAK,MAAUG,EAAMH,KAAK,YAAW,UAAUtD,KAAKqG,MAAMF,O,UAgBxE,SAASG,EAAoBC,GACzB,IAAIC,EAAiB,GAIrB,OAHAA,EAAelN,UAAYiN,EAAS1N,QAAQS,UAC5CkN,EAAeC,WAAaF,EAASlN,GACrCmN,EAAerM,SAAWoM,EAASpM,SAC5BqM,EAwNX,SAAeE,EAAeF,G,gGAEN,O,sBAAA,GAAM3E,EAAgB6E,eAAeF,I,OAErD,OADAvE,EADM0E,EAAU,UAET,CAAP,EAAOA,G,qDA8Ef,SAAeC,EAAyBC,G,0GAOpC,OANIC,EAAaD,EAAcE,QAAQ,oBACnCN,EAAaK,EAAWxD,KAAK,mBAC7B0D,EAAmBC,EAAgBR,GACnC7G,EAAcoH,EAAiB7M,SAC/B+M,EAAc,EAElB,GAAMC,EADeb,EAAoBU,K,OAIzC,OAHA,SACAA,EAAiB7M,SAAW,EACxBiN,EAAkBJ,EACtB,GAAMK,GAAsB,I,cAA5B,SACA,EAAAC,yBAAyB,EAAA3E,YAAayE,EAAiBF,EAAatH,G,WAGxE,SAAeuH,EAAeX,G,0FACV,SAAM3E,EAAgBsF,eAAeX,I,cACrDvE,EADgB,U,WAIpB,SAASgF,EAAgBR,GACrB,IAAI9N,EAAW,EAAAgK,YAAY1D,UAAUlG,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMoN,KAAY,GACrE,OAAI9N,GAGG,EAAAgK,YAAYH,cAAczJ,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMoN,KAAY,GAMrE,SAAsBY,EAAsBE,G,kBAAA,IAAAA,OAAA,G,2FAEvB,O,sBAAA,GAAM1F,EAAgB2F,wB,eAA7B3I,EAAO,WACAA,EAAKtD,WAAcgM,MAgBxC,SAA+BhM,GACvBA,EAAY,GACZ6E,EAAE,wBACGgB,KAAK7F,EAAY,IACjBsH,YAAY,QAEJ,GAAbtH,GACA6E,EAAE,wBACGgB,KAAK,IACLJ,SAAS,QAxBVyG,CAAqC,QAAhB,EAAC5I,aAAI,EAAJA,EAAMtD,iBAAS,QAAI,GACzC,EAAAmM,gBAAgB7I,IAEhBA,GAAQA,EAAK8I,OAqCzB,SAA2B9I,GACvB,IAAM+I,EAAgBxH,EAAE,uBAExBwH,EAAczF,KAAK,oCAAoCf,KAAKvC,EAAKjD,YAEjEgM,EAAczF,KAAK,eAAe4B,SAElC,IAAiB,UAAAlF,EAAK8I,MAAL,eAAY,CAAxB,IAAIE,EAAI,KACLC,EAAgBF,EAAczF,KAAK,mBAAmBE,QAC1DyF,EACKjF,YAAY,aACZA,YAAY,UACZ7B,SAAS,SACd8G,EAAc3F,KAAK,WAAWf,KAAKyG,EAAKtN,YACxCuN,EAAc3F,KAAK,UAAUf,KAAKyG,EAAKE,OACvCD,EAAc3F,KAAK,YAAYf,KAAKyG,EAAK7D,SAEzC8D,EAAc3F,KAAK,iBAAiBf,KAAKyG,EAAKG,oBACZ,IAA9BH,EAAKnN,sBACLoN,EAAc3F,KAAK,iBAAiBU,YAAY,aAGpDiF,EAAc3F,KAAK,gBAAgBf,KAAKyG,EAAK1N,SAASmE,YACtDwJ,EAAc3F,KAAK,OAAOmB,KAAK,MAAOuE,EAAKI,UAC3CH,EAAc3F,KAAK,KAAKmB,KAAK,OAAQ,IAAIuE,EAAKK,QAAO,YAAYL,EAAKvO,WACtEsO,EAAczF,KAAK,iBAAiBgB,OAAO2E,GAE3CA,EACK3F,KAAK,qBACLf,MAAMyG,EAAKM,gBAAkB,KAAKpF,eAAe,QAAS,CAAEC,MAAO,WAAYlH,SAAU,SAC9FgM,EACK3F,KAAK,oBACLf,MAAMyG,EAAKO,eAAiB,KAAKrF,eAAe,QAAS,CAAEC,MAAO,WAAYlH,SAAU,UApEzFuM,CAAkBxJ,G,+BAGtByJ,QAAQC,IAAI,G,8BAqBpB,SAASC,EAAUC,GACfrI,EAAE,QAAQY,SAAS,cACnBZ,EAAE,qBAAqBmB,OACvBkH,EAAMlH,OAGV,SAASmH,EAAUD,GACfrI,EAAE,QAAQyC,YAAY,cACtBzC,EAAE,qBAAqBuI,OACvBF,EAAME,OAvoBV,eA4PA,cAyEA,wBAEIvI,EAAE2B,GAAiB6G,GAAG,QAAS,yCAAyC,WACpE,IAAIC,EAAUzI,EAAE7D,MAAMuM,KAAK,mBACvBC,GAAgBF,EAAQ1E,MACxB4E,EAAe,GACfF,EAAQ1E,IAAI4E,EAAe,GAC3BF,EAAQG,QAAQ,WAEhBpC,EAAyBxG,EAAE7D,UAKnC6D,EAAE2B,GAAiB6G,GAAG,QAAS,uCAAuC,WAClE,IAAIC,EAAUzI,EAAE7D,MAAM0M,KAAK,mBACvBF,GAAgBF,EAAQ1E,MAC5B0E,EAAQ1E,IAAI4E,EAAe,GAC3BF,EAAQG,QAAQ,aAIpB5I,EAAE2B,GAAiB6G,GAAG,SAAU,mBAAmB,WAC3CxI,EAAE7D,MAAM4H,MAAQ,EAChB/D,EAAE7D,MAAM4H,IAAI,GA+ExB,SAAoC+E,GAChC,IAAIpC,EAAaoC,EAAanC,QAAQ,oBACtCD,EAAW3E,KAAK,0BAA0BnB,SAAS,oBACnD,IAAI7G,EAAW+O,EAAa/E,OAwChC,SAAwCgF,EAA6BhP,G,oGAIpD,OAHTqM,EAAiBF,EAAoB6C,GACrCC,EAAeD,EAAiBhP,SACpCqM,EAAerM,SAAWA,EACb,GAAMuM,EAAeF,I,OAElC,OAFa,SACT9G,EAAkBuH,EAAgBkC,EAAiB9P,IACvD,GAAMgO,K,cAAN,SACA,EAAAC,yBAAyB,EAAA3E,YAAajD,EAAiBvF,EAAUiP,G,YA5CjEC,CADepC,EADEH,EAAWxD,KAAK,oBAEEnJ,GAC9BmP,QACAC,MAAK,eArFFC,CAA2BpJ,EAAE7D,UAKrC6D,EAAE2B,GAAiB6G,GAAG,QAAS,qCAAqC,WAChE,IAAMa,EAAiBrJ,EAAE,6BACK,IAA1BqJ,EAAe5U,QACf4U,EAAehB,QACf7G,EAAiBxB,EAAE7D,MAAM+G,KAAK,kBAC9B3B,EAA6BvB,EAAE7D,QAG/B6D,EAAE7D,MAAMyE,SAAS,oBACjB4F,EAAyBxG,EAAE7D,WAInC6D,EAAE,6BAA6BwI,GAAG,QAAS,+BAA+B,WACtEjH,EAA2BkB,YAAY,oBACvCzC,EAAE,6BAA6BqI,MAAM,QACrC7B,EAAyBjF,MAG7BvB,EAAE,6BAA6BwI,GAAG,QAAS,qBAAqB,WAC5DjH,EAA2BkB,YAAY,oBACvCzC,EAAE,6BAA6BqI,MAAM,QACrCzG,EAAoBtB,QAAQkB,GAC5BgF,EAAyBjF,MAI7BvB,EAAE2B,GAAiB6G,GAAG,QAAS,yBAAyB,WACpD,IAAIc,EAAUtJ,EAAE7D,MAAM+G,KAAK,eAC3BkF,EAAUpI,EAAEsJ,OAIhBtJ,EAAE2B,GAAiB6G,GAAG,QAAS,mCAAmC,WAC9D,IAAIc,EAAUtJ,EAAE7D,MAAM+G,KAAK,eACvBmF,EAAQrI,EAAEsJ,IAoHtB,SAAmCjB,EAAekB,GAC9C,IAAIC,EAA4BnB,EAAMtG,KAAK,8BAC3CyH,EAA0B7C,QAAQ,mCAAmCzD,KAAK,kBAAmBqG,EAAgBtQ,IAC7GuQ,EAA0BxI,KAAK,IAE/B,IADA,IAAIyI,EAAqBzJ,EAAE,0CACT,MAAAuJ,EAAgB9Q,QAAQC,OAAxB,eAAgC,CAA7C,IAAIF,EAAK,KACNkR,EAAclR,EAAMK,UAAUC,YAC9B6Q,EAAeF,EAAmBxH,QACtC0H,EACK5H,KAAK,qBACLgC,IAAI2F,GACJxG,KAAK,KAAM,4BAA8BwG,GACzChB,KAAK,SACLxF,KAAK,MAAO,4BAA8BwG,GAC/C,IAAIE,GAAepR,EAAMqR,WAAa,KAAKlH,eAAe,QAAS,CAC/DC,MAAO,WACPlH,SAAUlD,EAAMkD,SAASmH,kBAE7B8G,EACK5H,KAAK,yBACLf,KACGxI,EAAMwL,sBACAxL,EAAMwL,sBAAwB,IAAM4F,EACpCpR,EAAMK,UAAUoL,qBAAuB,IAAM2F,GAE3DD,EAAa5H,KAAK,gCAAgCf,KAAKxI,EAAM6M,aAC7DsE,EAAa5H,KAAK,sCAAsCf,KAAKxI,EAAMsR,mBAC/DP,EAAgBxQ,iBAAiBD,aAAeN,EAAMK,UAAUC,aAChE6Q,EAAa/I,SAAS,oBAE1B4I,EAA0BzG,OAAO4G,GAIrCH,EACKzH,KAAK,6BAA+BwH,EAAgBxQ,iBAAiBD,aACrEiR,KAAK,WAAW,GAnJjBC,CAA0B3B,EADJxB,EAHL7G,EAAE7D,MACdwK,QAAQ,oBACRzD,KAAK,qBAGVkF,EAAUC,MAIdrI,EAAE2B,GAAiB6G,GAAG,QAAS,0CAA0C,WACrE,IAAIc,EAAUtJ,EAAE7D,MAAM+G,KAAK,eACvBmF,EAAQrI,EAAEsJ,GACdjB,EAAMtG,KAAK,qBAAqBU,YAAY,oBAC5C4F,EAAMtG,KAAK,qBAAqBkI,WAAW,WAkJnD,SAA8B5B,EAAe9P,GACzC,IAAI2R,EAAY7B,EAAMtG,KAAK,yBAC3BmI,EAAUnI,KAAK,6BAA6BgI,KAAK,WAAW,GACrB,GAAnCxR,EAASE,QAAQ0M,iBACjB+E,EAAUnI,KAAK,qCAAqCU,YAAY,QAChEyH,EAAUnI,KAAK,oCAAoCnB,SAAS,SAEzB,GAAnCrI,EAASE,QAAQ0M,iBACjB+E,EAAUnI,KAAK,oCAAoCU,YAAY,QAC/DyH,EAAUnI,KAAK,qCAAqCnB,SAAS,SAEjEsJ,EAAUvD,QAAQ,8BAA8BzD,KAAK,kBAAmB3K,EAASU,IAChEiR,EAAUnI,KAAK,eACrB8D,MAAK,WACZ,IAAIsE,EAAYnK,EAAE7D,MACdgO,EAAUpI,KAAK,yBAAyBgC,OAASxL,EAAS6M,oBAC1D+E,EAAUpI,KAAK,yBAAyBgI,KAAK,WAAW,GACxDI,EAAUvJ,SAAS,qBAEnBuJ,EAAU1H,YAAY,uBAhK1B2H,CAAqB/B,EADCxB,EAHL7G,EAAE7D,MACdwK,QAAQ,oBACRzD,KAAK,qBAGVkF,EAAUC,MAMdrI,EAAE2B,GAAiB6G,GAAG,QAAS,uCAAuC,YAsB1E,SAAuC6B,GACnCA,EAAOzJ,SAAS,oBAChB,IAAI0J,EAAkBD,EAAO1D,QAAQ,mCACjCN,EAAaiE,EAAgBpH,KAAK,mBAClCqH,EAAiBD,EAAgBvI,KAAK,kCAAkCgC,OAsChF,SAAyCgF,EAA6BW,G,gGAGlE,OAFItD,EAAiBF,EAAoB6C,IAC1BjQ,YAAc4Q,EAC7B,GAAMpD,EAAeF,I,cAArB,S,YAvCAoE,CADuB3D,EAAgBR,GACKkE,GACvCpB,MAAK,SAAAsB,GACFnC,EAAUgC,EAAgB3D,QAAQ,8BAErCuC,QACAC,MAAK,SAAAsB,GACFJ,EAAO5H,YAAY,uBAjCvBiI,CAA8B1K,EAAE7D,UAIpC6D,EAAE,mCAAmCwI,GAAG,SAAS,YAiCrD,SAA8C6B,GAC1CA,EAAOzJ,SAAS,oBAChB,IAAI0J,EAAkBD,EAAO1D,QAAQ,8BACjCN,EAAaiE,EAAgBpH,KAAK,mBAClCyH,GAAyBL,EAAgBvI,KAAK,qCAAqCgC,OA4B3F,SAAkDgF,EAA6B3D,G,gGAI3E,OAHIgB,EAAiBF,EAAoB6C,IAC1B3D,mBAAqBA,EACpCgB,EAAetN,YAAciQ,EAAiBhQ,iBAAiBD,YAC/D,GAAMwN,EAAeF,I,cAArB,S,YA9BAwE,CADuB/D,EAAgBR,GACcsE,GAChDxB,MAAK,SAAAsB,GACFnC,EAAU+B,EAAO1D,QAAQ,oCAE5BuC,QACAC,MAAK,SAAAsB,GACFJ,EAAO5H,YAAY,uBA5CvBoI,CAAqC7K,EAAE7D,WAuL/C,4B,0HC/nBA,SAAYqH,GACR,qBACA,uBACA,qBAHJ,CAAY,EAAAA,iBAAA,EAAAA,eAAc,M,ogDCA1B,YAEM/B,EAAkB,IADxB,KAC4BC,iBAC5B,QACA,QAGA,OAyDA,SAASoJ,IAAT,WACIrJ,EAAgBsJ,aACX5B,MAAK,SAAO3I,GAA+B,qC,wCACpC/B,EAAO+B,EAAS/B,KACpB,EAAAoD,WAAWpD,GAiCvB,SAA4BA,GACpBA,GAAQA,EAAKuM,qBACbhL,EAAE,gCAAgC+D,IAAItF,EAAKuM,mBAAmBC,WAC9DjL,EAAE,sCAAsC+D,IAAItF,EAAKuM,mBAAmBE,kBAnChEC,CAAmB1M,GA4C/B,SAAkC+B,GAC1BA,EAAS4K,kBAAoB5K,EAAS4K,iBAAiBC,8BACvDrL,EAAE,4BAA4BY,SAAS,QACvCZ,EAAE,0CAA0CgB,KAAK,IACjDhB,EAAE,2CAA2CyC,YAAY,UAGzDzC,EAAE,2CAA2CY,SAAS,QACtDZ,EAAE,4BAA4ByC,YAAY,SAnDtC6I,CAAyB9K,GACzB,EAAA+K,aACA,EAAA/M,eAAeC,GACf+M,aAAaC,QAAQ,cAAevT,KAAKC,UAAUqI,EAAS/B,OAC5D,EAAAiN,yBAAyBjN,EAAKI,W,aAEjCqK,OAAM,WACHlJ,EAAE,sBAAsBY,SAAS,QACjCZ,EAAE,sBAAsByC,YAAY,QACpCzC,EAAE,yBAAyBY,SAAS,uBAQhD,SAAS+K,EAAiBC,GAEtB,GAAIA,EAAO,CACP,IAAIC,EAAOD,EAAM7H,MACb8H,GACApK,EAAgBqK,oBAAoBD,GAC/B1C,MAAK,SAAC1K,GACH,EAAAoD,WAAWpD,MACZyK,OAAM,gBAtFzBlJ,GAAE,WACE8K,IAEI9K,EAAE,aAAa+D,OACf,EAAAgI,YAAY/L,EAAE,aAAa+D,UAInC/D,EAAE,2BAA2BwI,GAAG,SAAS,WACrC,IAAIwD,EAAOhM,EAAE,wBAAwB+D,MACjCiI,GACAvK,EAAgBwK,kBAAkBD,GAAgB7C,MAAK,SAAAlV,GACvC,GAARA,IACA6W,IACA9K,EAAE,wBAAwB+D,IAAI,IAC9B/D,EAAE,mCAAmCY,SAAS,QAC9CZ,EAAE,0CAA0CyC,YAAY,YAE7DyG,OAAM,kBAIjBlJ,EAAE,6BAA6BwI,GAAG,SAC9B,WACImD,EAAiB3L,EAAE7D,MAAMuM,KAAK,aAAa3G,KAAK,2BAGxD/B,EAAE,uBAAuBwI,GAAG,SACxB,SAAU0D,GACW,IAAbA,EAAEC,SACFR,EAAiB3L,EAAE7D,UAI/B6D,EAAE,0BAA0BwI,GAAG,SAC3B,WACI,IAAI4D,EAAYpM,EAAE,gCAAgC+D,MAC9CsI,EAAkBrM,EAAE,sCAAsC+D,MAC1DuI,EAAetM,EAAE7D,MAAM+G,KAAK,qBAC3BkJ,GAAaA,EAAUG,QAAYF,GAAmBA,EAAgBE,OAEvE9K,EAAgB+K,wBAAwBJ,EAAWC,GAC9ClD,MAAK,WACFvR,OAAO6U,SAASxH,KAAOqH,KACxBpD,OAAM,eAIbtR,OAAO6U,SAASxH,KAAOqH,O,6HCnDnC,8BAAmC9T,EAAekU,GAC9C,IACI,OAAKlU,GAAkB,GAATA,GAGVkU,IACAlU,GAAgB,KAEbA,EAAMmU,QAAQ,IALV,KAMb,MAAOC,GACL,OAAO,Q,kkBChBf,WAGIC,EAAe7M,EAAEpI,QAAQkV,cAS7B,SAAgBC,EAA+BC,QACnBtO,IAApB9G,OAAc,OAAmB+G,MAAMC,eACvCvG,UAAUtD,KAAK,CACX+G,MAAO,oBACPU,UAAW,CACPyQ,UAAW,CACPC,WAAY,CACR,CACI5W,KAAM0W,QAO1B3U,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChBC,OAAQ,CAAC,CAACJ,IACVK,OAAQ,eAIhBhO,WAAW0N,EAA+BzV,KAAK,KAAM0V,GAAY,KAGzE,SAAgBM,EAAgCN,GAC5C3U,UAAUtD,KAAK,CACX+G,MAAO,qBACPU,UAAW,CACP+Q,WAAY,CACRL,WAAY,CACR,CACI5W,KAAM0W,QAO1B3U,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChBK,OAAQ,CAAC,CAACR,IACVK,OAAQ,cA0LpB,SAASI,SACmB/O,IAApB9G,OAAc,OAAmB+G,MAAMC,cACToB,EAAE,yCACV6F,MAAK,WACvB,GAAI6H,EAAiBvR,MAAO,CACxB,IAAMjI,EAAW8L,EAAE7D,MAAMlI,KAAK,YACxB0Z,EAAa3N,EAAE7D,MAAMlI,KAAK,cAC1B2Z,EAAa5N,EAAE7D,MAAMlI,KAAK,cAC1B4Z,EAAe7N,EAAE7D,MAAMlI,KAAK,gBAC5B6Z,EAAW9N,EAAE7D,MAAMlI,KAAK,iBAELyK,IAArB9G,OAAe,aAAuC8G,IAApB9G,OAAc,QAChDmW,OAAOhZ,KAAK,CAAC,YAAa,CAAEb,SAAUA,EAAU0Z,WAAYA,KAC5DI,MAAMC,IAAIC,QAAQC,kBAAkBL,EAAUF,EAAYC,EAAc3Z,EAAUyZ,GAClF3N,EAAE7D,MAAMyE,SAAS,iBAK7BvB,WAAWoO,EAA2B,KAiE9C,SAASC,EAAiB3M,GACtB,GAAIf,EAAEe,GAASqN,SAAS,QACpB,OAAO,EAEX,IAAIC,EAAiBrO,EAAEe,GAASuN,SAASC,IACrCC,EAAoBxO,EAAEe,GAASuN,SAASC,IAAMvO,EAAEe,GAAS0N,cACzDC,EAAgB1O,EAAEpI,QAAQ+W,YAG9B,OAFuBD,EAAgB7B,EAEhBwB,GAAkBK,EAAgBF,EAnU7D,mCA0BA,oCAuBA,2CAAgDtV,GAC5Cb,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,eACfC,YAAa,kBACbC,WAAY,OAAO/C,IAGvBb,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,eAAgB,uBAAiC1V,EAAa,EAAG,KAC1EmU,OAAQ,eAKpB,2CAAgDpR,GAC5C5D,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,uBACbC,WAAYA,IAGhB5D,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,YAAa,wBAA+B3S,EAAY,EAAG,KACpEoR,OAAQ,eAKpB,6CACIN,EAA+B,0BAGnC,qDACIO,EAAgC,0BAGpC,gCAAqCN,GACjC3U,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,kBACfC,YAAa,mBACbC,WAAY+Q,IAGhB3U,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,kBAAmB,oBAA2B5B,EAAW,EAAG,KACrEK,OAAQ,eAKpB,yBAAgBwB,EAAcC,EAAkBC,QACpBrQ,IAApB9G,OAAc,OAAmB+G,MAAMC,eACnCkQ,EAASE,SAAS,gBAClB3W,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,oBACbC,WAA8B,UAAlB8S,EAA6B,eAAiB,kBAG9D1W,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CACJ,YACA,sBAA+C,UAAlBG,EAA6B,eAAiB,iBAC3E,EACA,KAEJ1B,OAAQ,gBAIhBhV,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,iBACbC,WAA8B,UAAlB8S,EAA6B,eAAiB,kBAG9D1W,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CACJ,YACA,mBAA4C,UAAlBG,EAA6B,eAAiB,iBACxE,EACA,KAEJ1B,OAAQ,eAIpB4B,EAAQtL,OAAO,oBACfsL,EAAQtL,OAAO,mBAEftE,WAAWwP,EAAcvX,KAAK,KAAMwX,EAAUC,GAAiB,MAIvE,sBAAgBG,EAAWC,QACCzQ,IAApB9G,OAAc,OAAmB+G,MAAMC,eACvCmP,OAASA,QAAU,GACnBA,OAAOhZ,KAAK,CACR,eACA,CACIqa,iBAAkBD,MAI1B9P,WAAW6P,EAAW5X,KAAK,KAAM6X,GAAM,MAI/C,gCAAgBE,EAAqBC,EAAaC,EAAeC,QACrC9Q,IAApB9G,OAAc,OAAmB+G,MAAMC,cACvCvG,UAAUtD,KAAK,CACX+G,MAAO,yBACP2T,eAAgBH,EAChBI,UAAWH,EACXI,sBAAuBH,IAG3BnQ,WAAWgQ,EAAqB/X,KAAK,KAAMgY,EAAKC,EAAOC,GAAO,MAItE,+BAAgBI,EAAoBL,EAAevC,QACvBtO,IAApB9G,OAAc,OAAmB+G,MAAMC,cACvCvG,UAAUtD,KAAK,CACX+G,MAAOkR,EACP0C,UAAWH,IAGflQ,WAAWuQ,EAAoBtY,KAAK,KAAMiY,EAAOvC,GAAY,MAIrE,wCAA6CA,GACrCA,IACA3U,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,2BACbC,WAAY+Q,IAGhB3U,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,YAAa,4BAAmC5B,EAAW,EAAG,KACvEK,OAAQ,gBAMxB,uCAC8BrN,EAAE,oDACV6F,MAAK,WACnB,GAAI6H,EAAiBvR,MAAO,CACxB,IAAM0T,EAAgB7P,EAAE7D,MAAMlI,KAAK,iBAC/B4b,GACA9C,EAA+B8C,GAEnC7P,EAAE7D,MAAMyE,SAAS,gBAIzB6M,KA0BJ,oCAAyCvU,EAAmB+C,EAAoBD,GAC5E3D,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,eACfC,YAAaA,EACbC,WAAeA,EAAU,IAAI/C,IAGjCb,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,eAAgB,4BAAsC3S,EAAU,IAAI/C,EAAa,EAAG,KAC7FmU,OAAQ,eAKpB,oCACIhV,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,oBACbC,WAAY,wBAGhB5D,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,YAAa,wCAAmD,EAAG,KAC5EvB,OAAQ,eAKpB,wCAA6CyC,EAAgBjU,GACzDxD,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa8T,EACb7T,WAAYJ,IAGhBxD,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChByB,OAAQ,CAAC,YAAakB,EAAS,IAAMjU,EAAO,EAAG,KAC/CwR,OAAQ,eAKpB,qCAA0C0C,GACtC1X,UAAUtD,KAAK,CACX+G,MAAO,cACPqR,mBAAoB,CAChBK,OAAQ,CAAC,CAACuC,EAAc,gBAAgBA,EAAgB,iBACxD1C,OAAQ,iB,sUCvTpB,iCAAsC/S,GAClC,OAAO,IAAI0V,SAAQ,SAACC,EAASC,GACzB,IAAIC,EAA+BjY,KAAKI,MACpC8X,eAAeC,QAAQ,2BAEvBF,EACAF,EAAQE,EAA6BxX,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMqB,KAAsB,GAAG4G,MAElFlB,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,kDACLG,QAAS,SAAC+P,GACNF,eAAe3E,QAAQ,yBAA0BvT,KAAKC,UAAUmY,IAChEL,EAAQK,EAAuB3X,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMqB,KAAsB,GAAG4G,OAEhF0L,MAAO,WACHsD,WAWpB,sBAA2BK,GACvB,OAAO,IAAIP,SAAQ,SAACC,EAASC,GACzB,IAAIM,EAAatY,KAAKI,MAAM8X,eAAeC,QAAQ,eACnD,GAAIG,EAAY,CACZ,IAAIC,EAAiBD,EAAW7X,QAAO,SAAAC,GAAK,OAAAA,EAAE8X,OAASH,KAAO,GAC1DE,GACAR,EAAQQ,EAAeE,aAE3BV,EAAQ,WAERjQ,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,sCACLG,QAAS,SAACiQ,GACNJ,eAAe3E,QAAQ,aAAcvT,KAAKC,UAAUqY,IACpD,IAAIC,EAAiBD,EAAW7X,QAAO,SAAAC,GAAK,OAAAA,EAAE8X,OAASH,KAAO,GAC1DE,GACAR,EAAQQ,EAAeE,aAE3BV,EAAQ,OAEZrD,MAAO,WACHsD,WAWpB,wCACI,OAAO,IAAIF,SAAQ,SAACC,EAASC,GACzB,IAAInL,EAA0B7M,KAAKI,MAAM8X,eAAeC,QAAQ,4BAC5DtL,EACAkL,EAAQlL,GAER/E,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,mDACLG,QAAS,SAACwE,GACNqL,eAAe3E,QAAQ,0BAA2BvT,KAAKC,UAAU4M,IACjEkL,EAAQlL,IAEZ6H,MAAO,WACHsD,WAWpB,mCAAwC5V,GACpC,OAAO,IAAI0V,SAAQ,SAACC,EAASC,GACzB,IAAIU,EAAwC1Y,KAAKI,MAC7C8X,eAAeC,QAAQ,oCAEvBO,EACAX,EAAQW,EAAsClL,MAAK,SAAA9M,GAAK,OAAAA,GAAK0B,MAE7D0F,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,2DACLG,QAAS,SAACsQ,GACNT,eAAe3E,QACX,kCACAvT,KAAKC,UAAU0Y,IAEnBZ,EAAQY,EAAgC7B,SAAS1U,KAErDsS,MAAO,WACHsD,WAWpB,iDAAsDY,GAClD,OAAO,IAAId,SAAQ,SAACC,EAASC,GACzB,IAAIa,EAAYX,eAAeC,QAAQ,aAAeS,GAClDC,EACAd,EAAQc,GAER/Q,EAAEC,KAAK,CACHC,OAAQ,MACRE,IAAK,8EAAgF0Q,EACrFvQ,QAAS,SAACwQ,GACNX,eAAe3E,QAAQ,aAAeqF,EAAgBC,GACtDd,EAAQc,IAEZnE,MAAO,WACHsD,WAWpB,gCAAqCc,GACjC,OAAO,IAAIhB,SAAQ,SAACC,EAASC,GACpBc,GACDf,EAAQ,0BAEZ,IAAI/Q,EAAakR,eAAeC,QAAQ,cAAgBW,GACpD9R,EACA+Q,EAAQ/Q,GAERc,EAAEC,KAAK,CACHC,OAAQ,MACRE,IAAK,oDAAsD4Q,EAC3DzQ,QAAS,SAACrB,GACNkR,eAAe3E,QAAQ,cAAgBuF,EAAO9R,GAC9C+Q,EAAQ/Q,IAEZ0N,MAAO,WACHsD,WAapB,wBAA6BhX,EAAmB8M,EAAoBiL,GAChE,YAD4C,IAAAjL,OAAiB,QAAG,IAAAiL,OAAkB,GAC3E,IAAIjB,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IACI,qDACAlH,EACA,UACA8M,EACA,WACAiL,EACJ1Q,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,WACHsD,WAUhB,yBAA8BgB,GAC1B,OAAO,IAAIlB,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,uDAAyD8Q,EAC9D3Q,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,WACHsD,WAUhB,gCAAqCzX,GACjC,MAC8B,KAA1BA,EAAQ0Y,gBACe,MAAvB1Y,EAAQ2Y,aACyB,SAAjC3Y,EAAQ4Y,uBACgB,MAAxB5Y,EAAQ6Y,eACW,YAAlB7Y,EAAQ8Y,QAA0C,UAAlB9Y,EAAQ8Y,W,oOC5OjD,WAEA,OA8FA,SAAgBC,EAAuBtY,EAAmBuY,EAAmBjZ,EAAeqF,GACxFmC,EAAEC,KAAK,CACHC,OAAQ,MACRwR,YAAa,mBACbtR,IACI,0DAEAlH,EACA,cACAuY,EACA,UACA,EAAAtY,mBAAmBX,GAAO,GAC9B+H,QAAS,SAAAtM,KACT2Y,MAAO,eAUf,SAAgB+E,EAA2BzY,EAAmBuY,EAAmBjZ,EAAeqF,GAC5FmC,EAAEC,KAAK,CACHC,OAAQ,MACRwR,YAAa,mBACbtR,IACI,8DAEAlH,EACA,cACAuY,EACA,UACA,EAAAtY,mBAAmBX,GAAO,GAC9B+H,QAAS,SAAAtM,KACT2Y,MAAO,eAhIf5M,GAAE,WACEA,EAAE,oCAAoCwI,GAAG,QAAS,2BAA2B,WACzE,IAAIoJ,EAAS5R,EAAE7D,MACVwK,QAAQ,eACRhQ,IAAI,GACLsC,EAAK4Y,SAAS7R,EAAE4R,GAAQ3d,KAAK,OAC7Bwd,EAAYzR,EAAE4R,GAAQ3d,KAAK,aAC3B6d,EAAU9R,EAAE4R,GAAQ3d,KAAK,WACzB8d,EAAQ/R,EAAE4R,GAAQ3d,KAAK,SACvB+d,EAAMhS,EAAE4R,GAAQ3d,KAAK,OACrBge,EAAOjS,EAAE4R,GAAQ3d,KAAK,QACtBie,EAAWlS,EAAE4R,GAAQ3d,KAAK,YAC1Bke,EAAOnS,EAAE4R,GAAQ3d,KAAK,QACtBme,EAAqBpS,EAAE4R,GAAQ3d,KAAK,sBAExC,EAAAoe,0BAA0BN,GAE1B/R,EAAEC,KAAK,CACHC,OAAQ,MACRwR,YAAa,mBACbtR,IACI,mEAEAnH,EACA,cACAwY,EACA,UACAM,EACA,aACAC,EACA,iBACAF,EACA,SACAG,EACA,aACAC,EACA,iBACAA,EACA,SACAC,EACA,uBACAC,EAEJ7R,QAAS,SAAAtM,KACT2Y,MAAO,kBAIf5M,EAAE7C,UAAUqL,GAAG,QAAS,+BAA+B,WACnD,IAAIoJ,EAAS5R,EAAE7D,MAAMmW,QAAQ,eAK7Bd,EAJSK,SAAS7R,EAAE4R,GAAQ3d,KAAK,OACjB+L,EAAE4R,GAAQ3d,KAAK,aACnB+L,EAAE4R,GAAQ3d,KAAK,SAEkB,SAQrD,oCAAyC4K,GACrC,IAAqB,UAAAA,EAAA,eAAW,CAA3B,IAAItG,EAAQ,KAKbiZ,EAJgBjZ,EAASE,QAAQS,UACjB8G,EAAE,qBAAqB+D,MAC3BxL,EAASkN,qBAAqBrG,OAC9B7G,EAASwB,YAS7B,sCAA2C8E,GACvC,IAAqB,UAAAA,EAAA,eAAW,CAA3B,IAAItG,EAAQ,KAKboZ,EAJgBpZ,EAASE,QAAQS,UACjB8G,EAAE,qBAAqB+D,MAC3BxL,EAASkN,qBAAqBrG,OAC9B7G,EAASwB,YAW7B,2BAuBA,iC,gDCbA,SAASwY,EACLC,EACAC,EACAC,EACAC,GAEA,GAAyC,MAArCF,EAAmBvU,WAAW,IAA8B,GAAhBsU,EAAmB,CAC/D,IACII,EAAiBC,EAAkBF,EAAcD,GACrD,GAAIC,GAAgBC,EAAgB,CAChC,IAAIE,EAHc,GAGJH,EAA+BC,EAG7C,OAFA,EAAAG,qBAAuBD,EAEhBA,GAIf,OAAON,EAGX,SAASQ,EAAiCta,GACtC,IAAIua,EAAc,IAAIC,KAClBC,EAAcza,EAAOC,QACrB,SAAAC,GACI,OAAgB,MAAfA,EAAEwa,WAAqB,IAAIF,KAAKta,EAAEwa,WAAaH,KAC/B,MAAhBra,EAAEya,YAAsB,IAAIH,KAAKta,EAAEya,YAAcJ,MAE1D,OAAKE,EAGEA,EAAYxa,QAAO,SAAAC,GAAK,OAAAA,EAAEiR,YAAcjK,KAAK0T,IAAG,MAAR1T,KAAYuT,EAAYI,KAAI,SAAAC,GAAK,OAAAA,EAAE3J,kBAAc,GAFrF,KAKf,SAASgJ,EAAkBF,EAAsBD,GAC7C,OAAKC,EAGDD,EAAwB1D,SAAS,iBAAmB0D,EAAwB1D,SAAS,YAC9E,EAGJ,EANI,K,iKA1IJ,EAAA+D,oBAA8B,EAC9B,EAAAU,yBAAmC,EAE9C,gCAAqClb,GAajC,GAA4D,MAAxDA,EAASQ,iBAAiBD,YAAYoF,WAAW,IAAsD,GAAxC3F,EAASkN,qBAAqBrG,OAAa,CAC1G,IACIsU,EAAiBV,EAAiCza,EAASE,QAAQC,QACnEka,EAAiBC,EAAkBa,EAAe7J,WAAY6J,EAAerO,aACjF,GAAIqO,GAAkBd,EAAgB,CAClC,IAAIE,EAJc,GAIJY,EAAe7J,WAA6B+I,EAG1D,OAFA,EAAAa,0BAA4BX,EAErBA,GAIf,OAAOva,EAASkN,qBAAuBlN,EAASkN,qBAAqBrG,OAAS,MAQlF,8BAAmC7G,EAAqBob,GAapD,IACI,OAAKpb,GAAaob,EAIdpb,EAqCZ,SAAoCA,GAChC,IAAIia,EAAuBja,EAASyG,mBAAmBI,OACnDqT,EAA6Bla,EAASQ,iBAAiBD,YACvD6Z,EAAuBK,EAAiCza,EAASE,QAAQC,QAC7E,IAAKia,EACD,OAAO,KAEX,IAAID,EAAkCC,EAAatN,YAC/CuO,EAA6BjB,EAAakB,SAC9C,OAAOtB,EAAeC,EAAcC,EAAoBC,EAAyBkB,GA7ClEE,CAA2Bvb,GA2B9C,SAAiDob,GAC7C,OAAOpB,EACHoB,EAAiBnB,aACjBmB,EAAiBI,mBACjBJ,EAAiBjB,wBACjBiB,EAAiBhB,cA9BVqB,CAAwCL,GANpC,KAOb,MAAO/G,GAEL,OADA1E,QAAQ0E,MAAMA,GACP,OAIf,qBAA0B/P,GACtB,IAAIuB,EAAY,QACqB,IAAjCvB,EAAgBjC,aAChBwD,EAAY,SAC0B,IAA/BvB,EAAgBnC,aACvB0D,EAAY,kBAGhB,IAAIC,EAAa,OAOjB,OAN6B,GAAzBxB,EAAgBrC,MAChB6D,EAAa,QACuB,GAA7BxB,EAAgBhC,YACvBwD,EAAa,aAGPD,EAAS,IAAIC,I,8IClF3B,WAEA,uBAA4B6C,GACpBA,GACAlB,EAAE,gBAAgByC,YAAY,QAAQwR,OAAO,QAAQlS,KAAK,KAAKf,KAAKE,IAI5E,wBAA6BA,GACrBA,GACAlB,EAAE,iBAAiByC,YAAY,QAAQwR,OAAO,QAAQlS,KAAK,KAAKf,KAAKE,IAI7E,sBAA2BgT,EAAWC,GAC9BA,GACAlF,EAAQmF,IAAI,iBAAmBF,EAAW,QAE9ClU,EAAEkU,GAAW7S,QAAQ,QAAQ,WACzBrB,EAAEkU,GAAWtT,SAAS,QAAQmB,KAAK,KAAKf,KAAK,U,uIClBrD,WAWA,QACIqT,EAAuBrU,EAAE,iBAE7B,2BAuaA,OAtaI,YAAAsU,YAAA,WAEI,OADAD,EAAa5R,YAAY,QAClB,IAAIuN,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,MACRE,IAAK,uCACLG,QAAS,SAACC,GACNyP,EAAQzP,IAEZoM,MAAO,SAAA3Y,GAEHic,EAAOjc,EAAKsgB,eAEhBlU,SAAU,WACNgU,EAAazT,SAAS,eAStC,YAAAmK,WAAA,WAII,OAFA7C,QAAQC,IAAI,iBAAmB,IAAI+K,MACnCmB,EAAa5R,YAAY,QAClB,IAAIuN,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,MACRE,IAAK,mCACLG,QAAS,SAACC,GACNyP,EAAQzP,IAEZoM,MAAO,SAAA3Y,GAEH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,KAEJ7P,SAAU,WACNgU,EAAazT,SAAS,QAEtBsH,QAAQC,IAAI,eAAiB,IAAI+K,aASjD,YAAA1G,wBAAA,SAAwBvB,EAAmBC,GACvC,OAAO,IAAI8E,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAMiE,KAAKC,UAAU,CACjBiU,UAAWnB,EACXoB,gBAAiBnB,IAErBsJ,QAAS,CACL,eAAgB,oBAEpB9W,KAAM,OACN0C,IAAK,iDACLG,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAUhB,YAAAjE,kBAAA,SAAkBD,GACd,OAAO,IAAIgE,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OAERE,IAAK,mDAAqD4L,EAC1DzL,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAUhB,YAAApE,oBAAA,SAAoBD,GAEhB,OADAwI,EAAa5R,YAAY,QAClB,IAAIuN,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAMiE,KAAKC,UAAU,CAAE0T,KAAMA,IAC7B2I,QAAS,CACL,eAAgB,oBAEpB9W,KAAM,OACN0C,IAAK,+CACLG,QAAS,SAACC,GACN,EAAAiU,0BAA0BjU,EAASjI,UACnC0X,EAAQzP,EAAS/B,OAErBmO,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,KAEJ7P,SAAU,WACNgU,EAAazT,SAAS,eAUtC,YAAA0F,eAAA,SAAeF,GACX,OAAO,IAAI4J,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAMiE,KAAKC,UAAUiO,GACrBoO,QAAS,CACL,eAAgB,oBAEpB9W,KAAM,OACN0C,IAAK,0CACLG,QAAS,SAAC9B,GACNwR,EAAQxR,IAEZmO,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAUhB,YAAAnJ,eAAA,SAAeX,GAEX,OADAiO,EAAa5R,YAAY,QAClB,IAAIuN,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAMiE,KAAKC,UAAUiO,GACrBoO,QAAS,CACL,eAAgB,oBAEpBpU,IAAK,0CACLG,QAAS,SAAC9B,GACNwR,EAAQxR,IAEZmO,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,KAEJ7P,SAAU,WACNgU,EAAazT,SAAS,eAWtC,YAAA8T,mBAAA,SACIxb,EACAwQ,EACAiL,GAEA,OAAO,IAAI3E,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAM,CACFiF,UAAWA,EACXJ,YAAa4Q,EACbtE,mBAAoBuP,GAExBvU,IAAK,2CACLG,QAAS,SAACC,GACNyP,EAAQzP,IAEZoM,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAShB,YAAA9I,qBAAA,WACI,OAAO,IAAI4I,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,MACRE,IAAK,wCACLG,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACHic,WAMhB,YAAA0E,6BAAA,SACIC,EACAC,EACAC,EACAC,GAEAX,EAAa5R,YAAY,QAEzB,IAAIxO,EAAO,CACP4gB,cAAeA,EACfI,oBAAqBH,EACrBE,yBAA0BA,EAC1BD,kBAAmBA,GAGvB,OAAO,IAAI/E,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,wDACLnM,KAAMiE,KAAKC,UAAUlE,GACrBugB,QAAS,CACL,eAAgB,oBAEpB9W,KAAM,OACN6C,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,aAAajZ,QAAQ,MAAO,KAC7C4U,KAEJ7P,SAAU,WACNgU,EAAazT,SAAS,eAMtC,YAAAsU,2BAAA,SAA2BC,GACvB,OAAO,IAAInF,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,mEAAmE+U,EACxE5U,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,EAAOjc,EAAKsgB,eAEhBlU,SAAU,mBAStB,YAAA+U,8BAAA,SAA8BD,EAA0BE,GACpD,OAAO,IAAIrF,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,4EAA4E+U,EAAgB,eAAeE,EAChH9U,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACHic,KAEJ7P,SAAU,mBAKtB,YAAAiV,uBAAA,SACIC,EACAC,EACAC,EACAC,EACAC,GAEA,OAAO,IAAI3F,SAAQ,SAACC,EAASC,GACzB,IAAIjc,EAAO,CACPshB,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,EACdC,kBAAmBA,EACnBC,YAAaA,GAGjB3V,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,0DACLoU,QAAS,CACL,eAAgB,oBAEpBvgB,KAAMiE,KAAKC,UAAUlE,GACrBsM,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACsB,UAArBA,EAAKsgB,aACL3c,OAAO6U,SAASmJ,UAEhB,EAAA7J,YAAY9X,EAAKsgB,cACjBrE,YAOpB,YAAA2F,2BAAA,SACIZ,EACAa,EACAH,GAEA,OAAO,IAAI3F,SAAQ,SAACC,EAASC,GACzB,IAAIjc,EAAO,CACPghB,oBAAqBA,EACrBc,kBAAmBD,EACnBH,YAAaA,GAGjB3V,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,8DACLoU,QAAS,CACL,eAAgB,oBAEpBvgB,KAAMiE,KAAKC,UAAUlE,GACrBsM,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAMhB,YAAA8F,yBAAA,SAAyBC,GACrB,OAAO,IAAIjG,SAAQ,SAACC,EAASC,GACzB,IAAIjc,EAAO,CACPshB,eAAgBU,EAAUV,eAC1BC,gBAAiBS,EAAUT,iBAG/BxV,EAAEC,KAAK,CACHC,OAAQ,OACRE,IAAK,gEACLoU,QAAS,CACL,eAAgB,oBAEpBvgB,KAAMiE,KAAKC,UAAUlE,GACrBsM,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACsB,UAArBA,EAAKsgB,aACL3c,OAAO6U,SAASmJ,UAEhB,EAAA7J,YAAY9X,EAAKsgB,cACjBrE,YAOpB,YAAAgG,kBAAA,SAAkBC,GACd,OAAO,IAAInG,SAAQ,SAACC,EAASC,GACzBlQ,EAAEC,KAAK,CACHC,OAAQ,OACRjM,KAAMiE,KAAKC,UAAU,CACjBpB,MAAOof,EACP/V,IAAKxI,OAAO6U,SAASxH,OAEzBuP,QAAS,CACL,eAAgB,oBAEpB9W,KAAM,OACN0C,IAAK,+CACLG,QAAS,SAAAtM,GACLgc,EAAQhc,IAEZ2Y,MAAO,SAAA3Y,GACH,EAAA8X,YAAY9X,EAAKsgB,cACjBrE,WAKpB,EAvaA,GAAa,EAAAxO,oB","file":"checkoutStep1.7a46b06da956f51a5a68.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([291,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","declare var dataLayer: any[];\r\nimport {\r\n IAddToCartTracking,\r\n ITrackingProduct,\r\n IAddToCartTrackingData,\r\n AddToCartTrackingModel,\r\n} from '../../Tracking/Models/AddToCartTracking/AddToCartTrackingModel';\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { getProductNetPrice } from '../Tracking/checkoutTrackingHelper';\r\nimport { formatPrice2Digits } from '../../Shared/PriceHelper';\r\nimport { getBreadcrumbByTocId } from '../../Shared/ProductHelper';\r\n\r\nexport function AddToCartTracking(trackingModel: IAddToCartTracking) {\r\n if (trackingModel) {\r\n let addToCartPush = JSON.stringify(trackingModel.addToCartPush);\r\n let econdaPush = JSON.stringify(trackingModel.econdaPush);\r\n dataLayer.push(JSON.parse(econdaPush));\r\n dataLayer.push(JSON.parse(addToCartPush));\r\n }\r\n}\r\n\r\nexport async function AddToCartTrackingLineItem(lineItem: ILineItem) {\r\n const price = lineItem.product.prices.filter((x) => x.priceType.priceTypeId ==\r\n lineItem.currentPriceType.priceTypeId)[0];\r\n \r\n let addToCartTrackingData = {\r\n Products: [\r\n {\r\n name: lineItem.product.titleMain,\r\n id: lineItem.product.productId,\r\n price: +formatPrice2Digits(getProductNetPrice(lineItem), true),\r\n brand: lineItem.product.publisher.publisherName,\r\n category: await getBreadcrumbByTocId(\r\n lineItem.product.mainTocNodeId\r\n ),\r\n variant: lineItem.product.mediaType.mediaTypeName,\r\n quantity: 1,\r\n sku: lineItem.product.isbnIssn,\r\n comboName:\r\n lineItem.product.authorList +\r\n ' - ' +\r\n lineItem.product.titleMain,\r\n displayFormat: lineItem.product.displayFormat,\r\n dimension8: lineItem.product.displayFormat,\r\n publisherName: lineItem.product.publisher.publisherName,\r\n availabilityStatusId: lineItem.product.availabilityStatusId,\r\n isApproximatePrice: price?.isApproximatePrice,\r\n isNew: lineItem.product.isNew,\r\n isStandardwerk: lineItem.product.isStandard,\r\n isTop: lineItem.product.isTopArticle,\r\n isPreview: lineItem.product.isPreview\r\n },\r\n ] as ITrackingProduct[],\r\n } as IAddToCartTrackingData;\r\n let addToCartTrackingModel = new AddToCartTrackingModel(\r\n addToCartTrackingData\r\n );\r\n AddToCartTracking(addToCartTrackingModel);\r\n}\r\n\r\nexport function TrackMiniBasket(miniBasket: any) {\r\n if (miniBasket) {\r\n dataLayer.push({\r\n current_basket: {\r\n ItemCount: miniBasket.itemCount,\r\n TotalNet: miniBasket.totalNet?.replace(',', '.'),\r\n TotalGross: miniBasket.totalGross?.replace(',', '.'),\r\n Currency: miniBasket.currency,\r\n ProductIdsCurrentBasket: miniBasket.productIds,\r\n },\r\n });\r\n }\r\n else {\r\n dataLayer.push({\r\n current_basket: {\r\n ItemCount: 0,\r\n TotalNet: 0,\r\n TotalGross: 0,\r\n Currency: 'EUR',\r\n ProductIdsCurrentBasket: '',\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function TrackBasketOverlayInteraction(label: string) {\r\n if (label) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'navigation data',\r\n eventAction: 'meta-cart_interaction',\r\n eventLabel: label,\r\n });\r\n\r\n dataLayer.push({\r\n 'event': \"econdaEvent\",\r\n 'ecCustomProperties': {\r\n 'Target' : ['navigation data', 'meta-cart_interaction' + '/' + label, 0, 'd'], \r\n 'rqtype' : 'hiddenpi'\r\n }\r\n });\r\n }\r\n}\r\n","import { AddToCartPush, IAddToCartPush } from \"./IAddToCartPush\";\r\nimport { EcondaPush, IEcondaPush } from \"./IEcondaPush\";\r\n\r\nexport class AddToCartTrackingModel implements IAddToCartTracking{\r\n constructor(trackingData: IAddToCartTrackingData) {\r\n this.addToCartPush = new AddToCartPush(trackingData.Products);\r\n this.econdaPush = new EcondaPush(trackingData.Products);\r\n }\r\n addToCartPush: IAddToCartPush;\r\n econdaPush: IEcondaPush;\r\n}\r\n\r\nexport interface IAddToCartTracking {\r\n addToCartPush: IAddToCartPush;\r\n econdaPush: IEcondaPush;\r\n}\r\n\r\nexport interface IAddToCartTrackingData {\r\n Products: ITrackingProduct[];\r\n}\r\n\r\nexport interface ITrackingProduct {\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n sku: string;\r\n comboName: string;\r\n displayFormat: string;\r\n publisherName: string;\r\n dimension8: string;\r\n availabilityStatusId: number;\r\n isApproximatePrice: boolean;\r\n isNew: boolean;\r\n isStandardwerk: boolean;\r\n isTop: boolean;\r\n isPreview: boolean;\r\n}\r\n\r\n\r\n\r\n","import { ITrackingProduct } from './AddToCartTrackingModel';\r\n\r\nexport class AddToCartPush implements IAddToCartPush {\r\n constructor(addTCartPushProducts: ITrackingProduct[]) {\r\n this.event = 'eec.addToCart';\r\n this.ecommerce = {} as IEcommerce;\r\n this.ecommerce.currencyCode = 'EUR';\r\n this.ecommerce.add = {} as IAdd;\r\n this.ecommerce.add.products = mapAddToCartPushProducts(addTCartPushProducts);\r\n }\r\n event: string;\r\n ecommerce: IEcommerce;\r\n}\r\n\r\nexport interface IAddToCartPush {\r\n event: string;\r\n ecommerce: IEcommerce;\r\n}\r\n\r\nclass AddToCartPushProduct {\r\n constructor(trackingProduct: ITrackingProduct) {\r\n this.name = trackingProduct.name;\r\n this.id = trackingProduct.id;\r\n this.price = trackingProduct.price;\r\n this.brand = trackingProduct.brand;\r\n this.category = trackingProduct.category;\r\n this.variant = trackingProduct.variant;\r\n this.quantity = trackingProduct.quantity;\r\n this.dimesion8 = trackingProduct.displayFormat;\r\n }\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n dimesion8: string;\r\n}\r\n\r\nexport interface IAddToCartPushProduct {\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n dimesion8: string;\r\n}\r\n\r\ninterface IEcommerce {\r\n currencyCode: string;\r\n add: IAdd;\r\n}\r\n\r\ninterface IAdd {\r\n products: IAddToCartPushProduct[];\r\n}\r\n\r\nfunction mapAddToCartPushProducts(trackingProducts: ITrackingProduct[]): IAddToCartPushProduct[] {\r\n let addToCartPushProducts = [] as IAddToCartPushProduct[];\r\n trackingProducts.forEach((trackingProduct: ITrackingProduct) => {\r\n addToCartPushProducts.push(new AddToCartPushProduct(trackingProduct));\r\n });\r\n return addToCartPushProducts;\r\n}\r\n","import { ITrackingProduct } from './AddToCartTrackingModel';\r\n\r\nexport class EcondaPush implements IEcondaPush {\r\n constructor(products: ITrackingProduct[]) {\r\n this.emosUrl = '/scripts/Econda/emos3.js';\r\n this.ecSiteId = document.head.querySelector('[name~=econdaurl][content]').getAttribute('content');\r\n this.ecContent = '';\r\n this.ecProducts = mapEcondaPushProducts(products);\r\n }\r\n emosUrl: string;\r\n ecSiteId: string;\r\n ecContent: string;\r\n ecProducts: IEcondaPushProduct[];\r\n}\r\n\r\nexport interface IEcondaPush {\r\n emosUrl: string;\r\n ecSiteId: string;\r\n ecContent: string;\r\n ecProducts: IEcondaPushProduct[];\r\n}\r\n\r\nclass EcondaPushProduct implements IEcondaPushProduct {\r\n constructor(trackingProduct: ITrackingProduct) {\r\n this.type = 'c_add';\r\n this.pid = trackingProduct.id;\r\n this.sku = trackingProduct.sku;\r\n this.name = trackingProduct.comboName;\r\n this.price = trackingProduct.price;\r\n this.group = trackingProduct.category;\r\n this.count = trackingProduct.quantity;\r\n this.var1 = trackingProduct.variant;\r\n this.var2 = trackingProduct.displayFormat;\r\n this.var3 = trackingProduct.publisherName;\r\n this.var4 = trackingProduct.availabilityStatusId.toString();\r\n this.var5 = buildVar5(trackingProduct);\r\n this.var6 = trackingProduct.isApproximatePrice ? 'CaPreis' : 'Festpreis';\r\n }\r\n type: string;\r\n pid: number;\r\n sku: string;\r\n name: string;\r\n price: number;\r\n group: string;\r\n count: number;\r\n var1: string;\r\n var2: string;\r\n var3: string;\r\n var4: string;\r\n var5: string;\r\n var6: string;\r\n dimension8: string;\r\n}\r\n\r\nexport interface IEcondaPushProduct {\r\n type: string;\r\n pid: number;\r\n sku: string;\r\n name: string;\r\n price: number;\r\n group: string;\r\n count: number;\r\n var1: string;\r\n var2: string;\r\n var3: string;\r\n var4: string;\r\n var5: string;\r\n var6: string;\r\n dimension8: string;\r\n}\r\n\r\nfunction mapEcondaPushProducts(trackingProducts: ITrackingProduct[]): IEcondaPushProduct[] {\r\n let econdaPushProducts = [] as IEcondaPushProduct[];\r\n trackingProducts.forEach((trackingProduct: ITrackingProduct) => {\r\n econdaPushProducts.push(new EcondaPushProduct(trackingProduct));\r\n });\r\n return econdaPushProducts;\r\n}\r\n\r\nfunction buildVar5(trackingProduct: ITrackingProduct): string {\r\n let firstPart = 'none';\r\n if (trackingProduct.isTop === true) {\r\n firstPart = 'isTop';\r\n } else if (trackingProduct.isStandardwerk === true) {\r\n firstPart = 'isStandardwerk';\r\n }\r\n\r\n var secondPart = 'none';\r\n if (trackingProduct.isNew == true) {\r\n secondPart = 'isNew';\r\n } else if (trackingProduct.isPreview == true) {\r\n secondPart = 'isPreview';\r\n }\r\n\r\n return `${firstPart}_${secondPart}`;\r\n}\r\n","import ProductHelper = require(\"../../Shared/ProductHelper\");\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { formatPrice2Digits } from \"../../Shared/PriceHelper\";\r\nimport { buildVar5, getProductNetPrice } from \"./checkoutTrackingHelper\";\r\ndeclare var dataLayer: any[];\r\ndeclare var UC_UI: any;\r\n\r\n/**\r\n * führt die dataLayer-Pushes für die übergebenen LineItems aus.\r\n * Für Warenkorb-onload\r\n * @param lineItems\r\n */\r\nexport async function onloadTracking(cart: ICart) {\r\n if (window[\"UC_UI\"] !== undefined && UC_UI.isInitialized) {\r\n let lineItems = cart? cart.lineItems : [];\r\n let products = [];\r\n let productIds = [];\r\n let productPrices = [];\r\n for (let lineItem of lineItems) {\r\n let product = lineItem.product;\r\n productIds.push(product.productId)\r\n let productNetPrice = lineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(lineItem), true) : \"\";\r\n productPrices.push(productNetPrice);\r\n let breadcrumb: string = await ProductHelper.getBreadcrumbByTocId(product.mainTocNodeId);\r\n products.push(\r\n {\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': productNetPrice,\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb ? breadcrumb : \"\",\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': lineItem.quantity,\r\n 'dimension8': product.displayFormat\r\n\r\n });\r\n }\r\n dataLayer.push({\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'pageTitle': 'Warenkorb',\r\n 'event': 'eec.checkoutStep',\r\n 'ecommerce': {\r\n 'checkout': {\r\n 'actionField': { 'step': 1 },\r\n 'products': products\r\n }\r\n }\r\n });\r\n\r\n dataLayer.push({\r\n 'google_tag_params': {\r\n 'ecomm_pagetype': 'cart',\r\n 'ecomm_prodid': productIds,\r\n 'ecomm_pvalue': productPrices,\r\n 'ecomm_totalvalue':(cart && cart.totalNetPrice) ? formatPrice2Digits(cart.totalNetPrice.amount, true) : \"\"\r\n }\r\n\r\n });\r\n\r\n }\r\n else {\r\n setTimeout(onloadTracking.bind(null, cart), 100);\r\n }\r\n \r\n}\r\n\r\n\r\n\r\n /**\r\n * Führt die dataLayer-Pushes für das übergebene LineItem durch.\r\n * add, oder remove bei Quantity-change.\r\n * @param updatedLineItem\r\n * @param oldQuantity\r\n */\r\nexport async function onChangeQuantityTracking(cart: ICart, updatedLineItem: ILineItem, newQuantitiy: number, oldQuantity: number) {\r\n let product = updatedLineItem.product;\r\n let breadcrumb: string = await ProductHelper.getBreadcrumbByTocId(product.mainTocNodeId);\r\n let quantityChange = newQuantitiy - oldQuantity;\r\n const price = updatedLineItem.product.prices.filter((x) => x.priceType.priceTypeId ==\r\n updatedLineItem.currentPriceType.priceTypeId)[0];\r\n if (quantityChange > 0) {\r\n dataLayer.push({\r\n 'ecProducts': [\r\n {\r\n type: 'c_add',\r\n pid: product.productId,\r\n sku: product.isbnIssn,\r\n name: product.authorList + \" - \" + product.titleMain,\r\n price: updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n group: breadcrumb,\r\n count: quantityChange,\r\n var1: product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n var2: product.displayFormat,\r\n var3: product.publisher ? product.publisher.publisherName : \"\",\r\n var4: product.availabilityStatusId.toString(),\r\n var5: buildVar5(product),\r\n var6: price?.isApproximatePrice ? \"CaPreis\" : \"Festpreis\"\r\n }\r\n ],\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'ecSiteId': document.head.querySelector(\"[name~=econdaurl][content]\").getAttribute(\"content\"),\r\n 'ecContent': '',\r\n 'event': 'eec.addToCart',\r\n 'ecommerce': {\r\n 'currencyCode': 'EUR',\r\n 'add': { // 'add' actionFieldObject measures.\r\n 'products': [\r\n { // adding a product to a shopping cart.\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb,\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': quantityChange,\r\n 'dimension8': product.displayFormat\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n {\r\n 'google_tag_params': {\r\n 'ecomm_pagetype': 'cart',\r\n 'ecomm_prodid': product.productId,\r\n 'ecomm_pvalue': updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n 'ecomm_totalvalue': cart.totalNetPrice ? formatPrice2Digits(cart.totalNetPrice.amount, true) : \"\"\r\n\r\n }\r\n }\r\n );\r\n } else {\r\n dataLayer.push({\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'ecSiteId': document.head.querySelector(\"[name~=econdaurl][content]\").getAttribute(\"content\"),\r\n 'ecContent': '',\r\n 'event': 'eec.removeFromCart',\r\n 'ecommerce': {\r\n 'currencyCode': 'EUR',\r\n 'remove': { // 'remove' actionFieldObject measures.\r\n 'products': [\r\n { // removing a product to a shopping cart.\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': updatedLineItem.singleItemNetPrice ? Number.parseFloat(formatPrice2Digits(getProductNetPrice(updatedLineItem), true)) : \"\",\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb,\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': Math.abs(quantityChange),\r\n 'dimension8': product.displayFormat\r\n }\r\n ]\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n \r\n","import { AddItemResponse } from \"./addItemResponse\";\r\n\r\nexport class ShoppingListService {\r\n \r\n /**\r\n * Enterfnert ein Produkt von der Shoppinglist\r\n * @param productId Die Id des Produkts was von der ShoppingList entfernt werden soll\r\n * @param completeFunction Wird ausgeführt, wenn der ajax request beendet wurde\r\n */\r\n deleteItem(productId: any, completeFunction: (xhr, status) => void) {\r\n $.ajax({\r\n method: \"DELETE\", \r\n dataType: 'JSON',\r\n url: `/Umbraco/api/ShoppingList/DeleteItem?productId=${productId}`,\r\n complete: completeFunction\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Fügt ein Produkt der Merkliste hinzu und aktualisiert bei Erfolg den Zähler\r\n * @param productId \r\n */\r\n addItem(productId: any) {\r\n $.ajax({\r\n method: \"POST\", \r\n dataType: 'JSON',\r\n url: `/Umbraco/api/ShoppingList/AddItem?productId=${productId}`,\r\n success: data => {\r\n var response = data as AddItemResponse;\r\n this.updateCounter($(\".wrapper.remember.navItemSymbol\"), response.count);\r\n this.showAlert(response.successMessage);\r\n $(\"#spinnerModal\").addClass(\"hide\");\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Aktualsiert das Symbol zur Anzahl der Items in der Merklsite\r\n */\r\n updateShoppingListCount() {\r\n var merklistenElement = $(\".wrapper.remember.navItemSymbol\");\r\n if (merklistenElement.length > 0) {\r\n $.ajax({\r\n method: \"GET\", \r\n dataType: 'JSON',\r\n url: `/Umbraco/api/ShoppingList/GetShoppingListItemCount`,\r\n success: data => {\r\n this.updateCounter(merklistenElement, data);\r\n }\r\n }); \r\n }\r\n }\r\n\r\n private updateCounter(element, count) {\r\n if (count > 0) {\r\n element.html(`${count}`);\r\n }\r\n else {\r\n element.html(\"\");\r\n }\r\n }\r\n\r\n private showAlert(message) {\r\n $(\"#merklisteAddId p\").text(message)\r\n $(\"#merklisteAddId\").show().delay(3000).fadeOut();\r\n }\r\n}","/*\r\n * Wording Info:\r\n * currentCart = zwischengespeicherter Warenkorb in der variable currentCart\r\n * Basket = Html-Objekt, das auf der Webseite zu sehen ist\r\n */\r\nimport 'bootstrap';\r\nimport { DummyImageSize } from '../Shared/Models/DummyImageSizeEnum';\r\nimport ProductHelper = require('../Shared/ProductHelper');\r\nimport { CheckoutService } from './checkoutService';\r\nimport { TrackMiniBasket } from './Tracking/checkoutTrackingGlobal';\r\nimport { IBasketOverlayModel } from './Models/BasketOverlay/IBasketOverlayModel';\r\nconst checkoutService = new CheckoutService();\r\nimport { onChangeQuantityTracking } from './Tracking/checkoutTrackingStep1';\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport IPrice = CheckoutflowReponse.IPrice;\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport IGiftLineItem = CheckoutflowReponse.IGiftLineItem;\r\nimport ILineItemChange = CheckoutflowRequest.ILineItemChange;\r\nvar basketPrototypes = $('#BasketPrototypes') as JQuery;\r\nvar basketContainer = $('#basket_container') as JQuery;\r\nexport var currentCart: ICart;\r\nimport { ShoppingListService } from \"../ShoppingList/shoppingListService\";\r\nconst shoppingListService = new ShoppingListService();\r\n\r\nlet selectedBasketItemToDelete: JQuery;\r\nlet itemToDeleteId: string;\r\n\r\n/**\r\n * Füllt den basket_container mit den Daten aus der übergebenen Cart.\r\n * @param cart\r\n * @returns {}\r\n */\r\nexport async function fillBasket(cart: ICart) {\r\n let currentItemList = basketContainer.find('#BasketItemList');\r\n if (cart && cart.lineItems && cart.lineItems.length > 0) {\r\n let basketItemListClone = currentItemList.clone();\r\n basketItemListClone.html('');\r\n\r\n for (let lineItem of cart.lineItems.reverse()) {\r\n await addLineItemToBasket(lineItem, basketItemListClone);\r\n }\r\n\r\n if (cart.giftLineItems && cart.giftLineItems.length > 0) {\r\n for (let giftLineItem of cart.giftLineItems.reverse()) {\r\n addGiftLineItemToBasket(giftLineItem, basketItemListClone);\r\n }\r\n }\r\n\r\n currentItemList.replaceWith(basketItemListClone);\r\n } else {\r\n currentItemList.html('');\r\n }\r\n currentCart = cart;\r\n basketContainer.find('.approximatedPriceNote').addClass('hide');\r\n refreshTotalCartPrice();\r\n basketContainer.addClass('hide');\r\n hideOrShowElementsBasedOnNewCart();\r\n}\r\n\r\nasync function addGiftLineItemToBasket(lineItem: IGiftLineItem, basketItemListClone: JQuery) {\r\n let basketItem = $('#BasketPrototypes')\r\n .find('.basket_lineitem')\r\n .clone();\r\n basketItemListClone.append(basketItem);\r\n await fillProductContainer(basketItem, lineItem, true);\r\n}\r\n\r\nasync function addLineItemToBasket(lineItem: ILineItem, basketItemListClone: JQuery) {\r\n let basketItem = $('#BasketPrototypes')\r\n .find('.basket_lineitem')\r\n .clone();\r\n basketItemListClone.append(basketItem);\r\n await fillProductContainer(basketItem, lineItem, false);\r\n}\r\n\r\n/**\r\n * Füllt das übergebene BasketItem mit den Daten aus dem übergebenen LineItem und blendet es dannach ein\r\n * @param basketItem leerer ausgeblendeter (über die Klasse \"hide\") - aber bereits der Produktliste angehängter - Produktcontainer\r\n * @param lineItem das im Warenkorb liegende LineItem\r\n * @param gift Flag das anzeigt, ob es sich um ein Werbemittel handelt\r\n */\r\nasync function fillProductContainer(basketItem: JQuery, lineItem: ILineItem, gift: boolean) {\r\n let product = lineItem.product;\r\n let productId = product.productId;\r\n\r\n //basketItem\r\n basketItem.attr('id', 'basket_lineitem_' + lineItem.id);\r\n basketItem.attr('data-lineitemid', lineItem.id);\r\n\r\n //productdetails\r\n basketItem.find('.lineitem_productlink').attr('href', '/' + product.seoOptimizedUrlPart + '/product/' + productId);\r\n if (product.hasProduktabbildung) {\r\n let image = basketItem.find('.lineitem_productimage');\r\n image.attr('data-src', await ProductHelper.getImagePath(productId, 100));\r\n } else {\r\n basketItem\r\n .find('.lineitem_productimage')\r\n .attr('data-src', await ProductHelper.getDummyImage(DummyImageSize.large));\r\n }\r\n basketItem.find('.lineitem_title').html(product.titleMainHead ? product.titleMainHead : product.titleMain);\r\n\r\n if (!gift) {\r\n basketItem.find('.lineitem_authorlist').html(product.authorList);\r\n if (product.isbnIssn) {\r\n basketItem.find('.lineitem_isbn').html('ISBN ' + product.isbnIssn);\r\n } else {\r\n basketItem.find('.lineitem_isbn').addClass('hide');\r\n }\r\n basketItem.find('.lineitem_edition').html(product.edition);\r\n if (product.publicationYear > 0) {\r\n basketItem.find('.lineitem_publicationyear').html(product.publicationYear + '');\r\n }\r\n basketItem.find('.lineitem_mediatype').html(product.mediaType.mediaTypeName);\r\n } else {\r\n basketItem.find('.isbn-webcode.lineitem_isbn').remove();\r\n basketItem.find('.counter-elements.ajax_checkout_counter').remove();\r\n }\r\n\r\n if (product.publisher && product.publisher.publisherName) {\r\n basketItem.find('.lineitem_publisher').html(product.publisher.publisherName);\r\n }\r\n\r\n basketItem.find('.lineitem_totalprice').html(\r\n (lineItem.totalItemGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: lineItem.totalItemGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n\r\n basketItem\r\n .find('.lineitem_count')\r\n .val(lineItem.quantity + '')\r\n .html(lineItem.quantity + '');\r\n\r\n let price = product.prices.filter(\r\n x => x.priceType.priceTypeId == lineItem.currentPriceType.priceTypeId\r\n )[0] as IPrice;\r\n basketItem\r\n .find('.lineitem_pricetypedescription')\r\n .html(\r\n price.priceDescriptionShort ? price.priceDescriptionShort : lineItem.currentPriceType.priceTypeDescription\r\n );\r\n\r\n if (price.isApproximatePrice) {\r\n basketItem.find('.lineitem_caInfo').removeClass('hide');\r\n }\r\n\r\n // mediaTypeId == 213 entspricht e-Learning\r\n if (product.canNotBeReturned || product.mediaType.mediaTypeId == 213) {\r\n basketItem.find('.LineItem_CanNotBeReturnedLabel').removeClass('hide');\r\n }\r\n //Ebook oder kostenloses Produkt\r\n if (!gift && (product.mediaType.mediaTypeId == 82 || lineItem.totalItemGrossPrice.amount === 0)) {\r\n basketItem.find('.ajax_checkout_counter').addClass('disabled-Element');\r\n }\r\n if (!ProductHelper.checkAvailabilityStatus(product.availabilityStatusId)) {\r\n basketItem.find('.LineItem_CanNotBeOrderedLabel').removeClass('hide');\r\n } else {\r\n let status = await ProductHelper.getAvailabilityStatus(product.availabilityStatusId);\r\n if (\r\n product.availabilityStatusId == 3 &&\r\n product.dateOfPublicationDescription != null &&\r\n product.dateOfPublicationDescription != ''\r\n ) {\r\n basketItem\r\n .find('.lineitem_availability')\r\n .html(\r\n (await ProductHelper.getAvailabilityStatus(product.availabilityStatusId)) +\r\n ' (' +\r\n product.dateOfPublicationDescription +\r\n ')'\r\n );\r\n } else {\r\n basketItem\r\n .find('.lineitem_availability')\r\n .html(await ProductHelper.getAvailabilityStatus(product.availabilityStatusId));\r\n if (product.availabilityStatusId == 1 || product.availabilityStatusId == 4) {\r\n basketItem.find('.lineitem_availability').addClass('availabilityStatusColorGreen');\r\n basketItem.find('.lineitem_availability_img').removeClass('hide');\r\n }\r\n }\r\n }\r\n if (product.mediaType.mediaTypeId == 213) {\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n if (product.mediaType.mediaGroupName && product.mediaType.mediaGroupName === 'eBook') {\r\n let drmInfo = await ProductHelper.getDRMInfo(product.dRMId);\r\n if (drmInfo) {\r\n let drmInfoLinks = ` (${product.bindingType} ${drmInfo})`;\r\n let drmInfoRechts = `${product.bindingType} (${drmInfo})`;\r\n basketItem\r\n .find('.lineitem_kopierschutzInfo_details')\r\n .html(drmInfoLinks)\r\n .removeClass('hide');\r\n basketItem\r\n .find('.lineitem_kopierschutzInfo_price')\r\n .html(drmInfoRechts)\r\n .removeClass('hide');\r\n }\r\n let systemanforderungenLink = await ProductHelper.getSystemanforderungenLink();\r\n basketItem\r\n .find('.lineitem_systemvoraussetzungenLink')\r\n .removeClass('hide')\r\n .find('a')\r\n .html(systemanforderungenLink.displayName)\r\n .attr('href', systemanforderungenLink.href)\r\n .attr('target', systemanforderungenLink.target);\r\n basketItem.find('.LineItem_isEbook').removeClass('hide');\r\n basketItem.find('.checkoutServiceIcons').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n if (\r\n product.prices.length == 1 &&\r\n (product.deliveryTypeId == 5 || product.deliveryTypeId == 4) &&\r\n !(lineItem.currentPriceType.priceTypeId.toString()[0] === '3')\r\n ) {\r\n //Produktvarianten vorhanden\r\n basketItem.find('.aktualisierungsService_aendern_Button').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n if (lineItem.chosenDeliveryType == 2) {\r\n basketItem.find('.lineitem_aktualisierungsservice').removeClass('hide');\r\n }\r\n if (lineItem.chosenDeliveryType == 1) {\r\n basketItem.find('.lineitem_einzelbezug').removeClass('hide');\r\n }\r\n }\r\n if (product.deliveryTypeId == 2) {\r\n basketItem.find('.LineItem_AbonnementHinweistext').removeClass('hide');\r\n }\r\n basketItem\r\n .find('.lineitem_pricedescription')\r\n .html(\r\n product.prices.filter(x => x.priceType.priceTypeId == lineItem.currentPriceType.priceTypeId)[0].description\r\n )\r\n .removeClass('hide');\r\n\r\n // In der Pricedesription soll der Link auf die Info Seite für den Aktualisierungsservice entfernt werden.\r\n // Ticket ECOM-459\r\n let priceDescriptionLink = basketItem.find('.lineitem_pricedescription').find('a.internal') as JQuery<\r\n HTMLAnchorElement\r\n >;\r\n if (\r\n priceDescriptionLink &&\r\n priceDescriptionLink.length &&\r\n priceDescriptionLink[0].href === 'https://www.beck-shop.de/content/loseblattwerke/aktualisierungsservice/7841/'\r\n ) {\r\n priceDescriptionLink.remove();\r\n }\r\n\r\n if (product.deliveryTypeId == 3 || product.deliveryTypeId == 6) {\r\n let additionalPriceInfo = await ProductHelper.getAdditionalPriceInfoByDelivertypeId(product.deliveryTypeId);\r\n\r\n if (additionalPriceInfo) {\r\n basketItem\r\n .find('.lineitem_additionalPriceInfo')\r\n .html(additionalPriceInfo)\r\n .removeClass('hide');\r\n }\r\n }\r\n\r\n basketItem.find('.lineitem_unitprice').html(\r\n (lineItem.singleItemGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: lineItem.singleItemGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n\r\n if (isPriceApproximated(lineItem)) {\r\n basketItem.find('.lineitem_unitprice').prepend('ca. ');\r\n basketItem.find('.lineitem_totalprice').prepend('ca. ');\r\n }\r\n\r\n //Button-logik\r\n if (product.prices.length > 1) {\r\n //Produktvarianten vorhanden\r\n basketItem.find('.produktvariante_aendern_button').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n\r\n basketItem.find('.delete-item').attr('data-productid', productId);\r\n basketItem.removeClass('hide');\r\n loadImage(basketItem);\r\n}\r\n\r\nexport async function loadImage(basketItem) {\r\n let allImageWrapper = $(basketItem).find('.imgWrapper');\r\n allImageWrapper.each((index, element) => {\r\n let imageWidth = $(element).width();\r\n let image = $(element).find('.lineitem_productimage');\r\n image.attr('src', `${image.attr('data-src')}&width=${Math.round(imageWidth)}`);\r\n });\r\n}\r\n\r\n/**\r\n * Überprüft ob ein Preis des LineItems ein Circa-Preis ist\r\n * @param lineitem\r\n */\r\nfunction isPriceApproximated(lineitem: ILineItem): boolean {\r\n return lineitem.product.prices.some(x => x.isApproximatePrice);\r\n}\r\n\r\n/**\r\n * füllt das update-Model mit den aktuellen Daten. Das was geändert werden soll wird in der entsprechenden Methode angepasst.\r\n * @param lineitem\r\n */\r\nfunction buildLineItemChange(lineitem: ILineItem): ILineItemChange {\r\n let lineItemChange = {} as ILineItemChange;\r\n lineItemChange.productId = lineitem.product.productId;\r\n lineItemChange.lineItemId = lineitem.id;\r\n lineItemChange.quantity = lineitem.quantity;\r\n return lineItemChange;\r\n}\r\n\r\n/*\r\n * Setzt den Gesamtpreis des Baskets auf den aktuellen Wert aus der currentCart.\r\n * Wenn es sich um einen Ca.-Preis handelt wird \"Preis auf Anfrage\" zusammen mit einer Erläuterung ausgegeben\r\n */\r\nfunction refreshTotalCartPrice() {\r\n if (currentCart) {\r\n if (currentCart.areTotalPricesApproximated) {\r\n $('#basket_container')\r\n .find('.basket_totalprice')\r\n .html('Preis auf Anfrage');\r\n $('#basket_container')\r\n .find('.approximatedPriceNote')\r\n .removeClass('hide');\r\n } else {\r\n if (currentCart.totalGrossPrice.amount != undefined) {\r\n $('#basket_container')\r\n .find('.basket_totalprice')\r\n .html(\r\n (currentCart.totalGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: currentCart.totalGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n/*\r\n * Zeigt Elemente an oder blendet Sie aus je nachdem ob die currentCart befüllt ist oder nicht\r\n */\r\nfunction hideOrShowElementsBasedOnNewCart() {\r\n if (currentCart && currentCart.lineItems.length > 0) {\r\n $('#basket_container').removeClass('hide');\r\n $('.onlyShowInFilledBasket').removeClass('hide');\r\n $('.showInEmptyBasket').addClass('hide');\r\n $('.disableInEmptyBasket').removeClass('disabled-Element');\r\n } else {\r\n $('.onlyShowInFilledBasket').addClass('hide');\r\n $('.showInEmptyBasket').removeClass('hide');\r\n $('.disableInEmptyBasket').addClass('disabled-Element');\r\n }\r\n}\r\n\r\nexport function initEvents() {\r\n //Zieht dem Item-Quantity 1 ab und triggert das Change Event des input-Fields\r\n $(basketContainer).on('click', '.ajax_checkout_counter .counter-subtr', function() {\r\n let counter = $(this).next('.lineitem_count');\r\n let currentvalue = +counter.val();\r\n if (currentvalue > 1) {\r\n counter.val(currentvalue - 1);\r\n counter.trigger('change');\r\n } else {\r\n deleteLineItemFromBasket($(this));\r\n }\r\n });\r\n\r\n //Addiert 1 zu der Item-Quantity und triggert das Change Event des input-Fields\r\n $(basketContainer).on('click', '.ajax_checkout_counter .counter-add', function() {\r\n let counter = $(this).prev('.lineitem_count');\r\n let currentvalue = +counter.val();\r\n counter.val(currentvalue + 1);\r\n counter.trigger('change');\r\n });\r\n\r\n //Updatet die LineItem-Quantity auf den Wert des Input-Fields\r\n $(basketContainer).on('change', '.lineitem_count', function() {\r\n if ($(this).val() < 1) {\r\n $(this).val(1);\r\n } else {\r\n setNewQuantityOfBasketItem($(this));\r\n }\r\n });\r\n\r\n //Disabled den löschen-Button und löscht dann das LineItem\r\n $(basketContainer).on('click', '.ajax_checkout_delete_from_basket', function() {\r\n const merklisteModal = $('#delete-basket-item-modal');\r\n if (merklisteModal.length === 1) {\r\n merklisteModal.modal();\r\n itemToDeleteId = $(this).attr('data-productid'); \r\n selectedBasketItemToDelete = $(this);\r\n }\r\n else {\r\n $(this).addClass('disabled-Element');\r\n deleteLineItemFromBasket($(this));\r\n }\r\n });\r\n\r\n $('#delete-basket-item-modal').on('click', '#delete-basket-item-confirm', function() {\r\n selectedBasketItemToDelete.removeClass('disabled-Element');\r\n $('#delete-basket-item-modal').modal('hide');\r\n deleteLineItemFromBasket(selectedBasketItemToDelete);\r\n });\r\n\r\n $('#delete-basket-item-modal').on('click', '#add-to-merkliste', function() {\r\n selectedBasketItemToDelete.removeClass('disabled-Element');\r\n $('#delete-basket-item-modal').modal('hide');\r\n shoppingListService.addItem(itemToDeleteId);\r\n deleteLineItemFromBasket(selectedBasketItemToDelete);\r\n });\r\n\r\n //Zeigt das Aktualisierungs-Service-Modal an\r\n $(basketContainer).on('click', '.changeServiceTrigger', function() {\r\n let modalId = $(this).attr('data-target');\r\n showModal($(modalId));\r\n });\r\n\r\n //Füllt das Modal aus dem geklickten LineItem und zeigt es an\r\n $(basketContainer).on('click', '.produktvariante_aendern_button', function() {\r\n let modalId = $(this).attr('data-target');\r\n let modal = $(modalId);\r\n let lineItemId = $(this)\r\n .parents('.basket_lineitem')\r\n .attr('data-lineitemid') as string;\r\n let currentLineItem = getLineItemById(lineItemId);\r\n fillProduktVariantenModal(modal, currentLineItem);\r\n showModal(modal);\r\n });\r\n\r\n //Füllt das Modal aus dem geklickten LineItem und zeigt es an\r\n $(basketContainer).on('click', '.aktualisierungsService_aendern_Button', function() {\r\n let modalId = $(this).attr('data-target');\r\n let modal = $(modalId);\r\n modal.find('.disabled-Element').removeClass('disabled-Element');\r\n modal.find('input[type=radio]').removeAttr('checked');\r\n let lineItemId = $(this)\r\n .parents('.basket_lineitem')\r\n .attr('data-lineitemid') as string;\r\n let currentLineItem = getLineItemById(lineItemId);\r\n fillBezugsartenModal(modal, currentLineItem);\r\n showModal(modal);\r\n });\r\n\r\n /**\r\n * Aktualisiert den Pricetype des aktuellen LineItems mit dem neu ausgewählten Pricetype\r\n */\r\n $(basketContainer).on('click', '.refresh-basket-btn_produktvariante', function() {\r\n setNewPricetypeIdOfBasketItem($(this));\r\n });\r\n\r\n //Aktualisiert den ChosenDeliveryType des aktuellen LineItems mit dem neu ausgewählten ChosenDeliveryType\r\n $('.refresh-basket-btn_bezugsarten').on('click', function() {\r\n setNewChosenDeliveryTypeOfBasketItem($(this));\r\n });\r\n}\r\n\r\n//Updatetet die Quantity des LineItems\r\nfunction setNewQuantityOfBasketItem(countElement: JQuery) {\r\n let basketitem = countElement.parents('.basket_lineitem');\r\n basketitem.find('.ajax_checkout_counter').addClass('disabled-Element');\r\n let quantity = countElement.val() as number;\r\n let lineItemId = basketitem.attr('data-lineitemid') as string;\r\n let lineItem = getLineItemById(lineItemId);\r\n updateQuantityOfLineItem(lineItem, quantity)\r\n .catch()\r\n .then(() => {});\r\n}\r\n\r\nfunction setNewPricetypeIdOfBasketItem(button: JQuery) {\r\n button.addClass('disabled-Element');\r\n let parentContainer = button.parents('.produktvarianten_modal_content');\r\n let lineItemId = parentContainer.attr('data-lineitemid') as string;\r\n let newPricetypeId = parentContainer.find('.produktvariante_radio:checked').val() as number;\r\n let lineItemToUpdate = getLineItemById(lineItemId);\r\n updatePriceTypeOfLineItem(lineItemToUpdate, newPricetypeId)\r\n .then(_ => {\r\n hideModal(parentContainer.parents('#produktvariantenModal'));\r\n })\r\n .catch()\r\n .then(_ => {\r\n button.removeClass('disabled-Element');\r\n });\r\n}\r\n\r\nfunction setNewChosenDeliveryTypeOfBasketItem(button: JQuery) {\r\n button.addClass('disabled-Element');\r\n let parentContainer = button.parents('.bezugsarten_modal_content');\r\n let lineItemId = parentContainer.attr('data-lineitemid') as string;\r\n let newChosenDeliveryType = +parentContainer.find('.chosenDeliveryType_radio:checked').val() as number;\r\n let lineItemToUpdate = getLineItemById(lineItemId);\r\n updateChosenDeliveryTypeOfLineItem(lineItemToUpdate, newChosenDeliveryType)\r\n .then(_ => {\r\n hideModal(button.parents('#aktualisierungsServiceModal'));\r\n })\r\n .catch()\r\n .then(_ => {\r\n button.removeClass('disabled-Element');\r\n });\r\n}\r\n\r\nasync function updateQuantityOfLineItem(lineItemToUpdate: ILineItem, quantity: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n let oldQuantitiy = lineItemToUpdate.quantity;\r\n lineItemChange.quantity = quantity;\r\n const cart = await updateLineItem(lineItemChange);\r\n var updatedLineItem = getLineItemById(lineItemToUpdate.id);\r\n await getItemCountForBasket();\r\n onChangeQuantityTracking(currentCart, updatedLineItem, quantity, oldQuantitiy);\r\n}\r\n\r\nasync function updatePriceTypeOfLineItem(lineItemToUpdate: ILineItem, pricetypeId: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n lineItemChange.priceTypeId = pricetypeId;\r\n await updateLineItem(lineItemChange);\r\n}\r\n\r\nasync function updateChosenDeliveryTypeOfLineItem(lineItemToUpdate: ILineItem, chosenDeliveryType: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n lineItemChange.chosenDeliveryType = chosenDeliveryType;\r\n lineItemChange.priceTypeId = lineItemToUpdate.currentPriceType.priceTypeId;\r\n await updateLineItem(lineItemChange);\r\n}\r\n\r\nasync function updateLineItem(lineItemChange: ILineItemChange) {\r\n try {\r\n const newCart = await checkoutService.updateLineItem(lineItemChange);\r\n fillBasket(newCart);\r\n return newCart;\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Füllt das Produktvarianten-Modal mit den Preisen aus dem übergebenen LineItem\r\n * @param modal\r\n * @param lineItem\r\n */\r\nfunction fillProduktVariantenModal(modal: JQuery, currentLineItem: ILineItem) {\r\n let produktvariantenContainer = modal.find('.produktvariantenContainer');\r\n produktvariantenContainer.parents('.produktvarianten_modal_content').attr('data-lineitemid', currentLineItem.id);\r\n produktvariantenContainer.html('');\r\n let checkItemPrototype = $('#produktvariantePrototypes .check-item');\r\n for (let price of currentLineItem.product.prices) {\r\n let pricetypeId = price.priceType.priceTypeId;\r\n let newCheckItem = checkItemPrototype.clone();\r\n newCheckItem\r\n .find('input[type=radio]')\r\n .val(pricetypeId)\r\n .attr('id', 'produktvariante_checkbox_' + pricetypeId)\r\n .next('label')\r\n .attr('for', 'produktvariante_checkbox_' + pricetypeId);\r\n let priceAmount = (price.priceGross / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: price.currency.currencyIsoCode,\r\n });\r\n newCheckItem\r\n .find('.produktvariante_head')\r\n .html(\r\n price.priceDescriptionShort\r\n ? price.priceDescriptionShort + ' ' + priceAmount\r\n : price.priceType.priceTypeDescription + ' ' + priceAmount\r\n );\r\n newCheckItem.find('.produktvariante_description').html(price.description);\r\n newCheckItem.find('.produktvariante_specialConditions').html(price.specialConditions);\r\n if (currentLineItem.currentPriceType.priceTypeId == price.priceType.priceTypeId) {\r\n newCheckItem.addClass('disabled-Element');\r\n }\r\n produktvariantenContainer.append(newCheckItem);\r\n }\r\n\r\n //Checked die aktuelle Produktvariante\r\n produktvariantenContainer\r\n .find('#produktvariante_checkbox_' + currentLineItem.currentPriceType.priceTypeId)\r\n .prop('checked', true);\r\n}\r\n\r\n/**\r\n * Füllt das Bezugsarten-Modal mit den chosenDeliveryType aus dem übergebenen LineItem\r\n * @param modal\r\n * @param lineItem\r\n */\r\nfunction fillBezugsartenModal(modal: JQuery, lineItem: ILineItem) {\r\n let container = modal.find('.bezugsartenContainer');\r\n container.find('.chosenDeliveryType_radio').prop('checked', false);\r\n if (lineItem.product.deliveryTypeId == 4) {\r\n container.find('.description_optionalefortsetzung').removeClass('hide');\r\n container.find('.description_standardfortsetzung').addClass('hide');\r\n }\r\n if (lineItem.product.deliveryTypeId == 5) {\r\n container.find('.description_standardfortsetzung').removeClass('hide');\r\n container.find('.description_optionalefortsetzung').addClass('hide');\r\n }\r\n container.parents('.bezugsarten_modal_content').attr('data-lineitemid', lineItem.id);\r\n let checkItems = container.find('.check-item');\r\n checkItems.each(function() {\r\n let checkitem = $(this);\r\n if (checkitem.find('input[name=bezugsart]').val() == lineItem.chosenDeliveryType) {\r\n checkitem.find('input[name=bezugsart]').prop('checked', true);\r\n checkitem.addClass('disabled-Element');\r\n } else {\r\n checkitem.removeClass('disabled-Element');\r\n }\r\n });\r\n}\r\n\r\n//Löscht das LineItem aus dem Warenkorb\r\nasync function deleteLineItemFromBasket(deleteElement: JQuery) {\r\n let basketitem = deleteElement.parents('.basket_lineitem');\r\n let lineItemId = basketitem.attr('data-lineitemid') as string;\r\n let lineItemToDelete = getLineItemById(lineItemId);\r\n let oldQuantity = lineItemToDelete.quantity;\r\n let newQuantity = 0;\r\n let lineItemChange = buildLineItemChange(lineItemToDelete);\r\n await deleteLineItem(lineItemChange);\r\n lineItemToDelete.quantity = 0;\r\n let deletedLineItem = lineItemToDelete;\r\n await getItemCountForBasket(true);\r\n onChangeQuantityTracking(currentCart, deletedLineItem, newQuantity, oldQuantity);\r\n}\r\n\r\nasync function deleteLineItem(lineItemChange: ILineItemChange) {\r\n const newCart = await checkoutService.deleteLineItem(lineItemChange);\r\n fillBasket(newCart);\r\n}\r\n\r\nfunction getLineItemById(lineItemId: string) {\r\n var lineItem = currentCart.lineItems.filter(x => x.id == lineItemId)[0];\r\n if (lineItem) {\r\n return lineItem;\r\n }\r\n return currentCart.giftLineItems.filter(x => x.id == lineItemId)[0];\r\n}\r\n\r\n/*\r\n * Ruft die Anzahl der Produkte im Warenkorb ab.\r\n */\r\nexport async function getItemCountForBasket(overrideEmptyBasket: boolean = false) {\r\n try {\r\n const cart = await checkoutService.getItemCountInBasket();\r\n if ((cart && cart.itemCount) || overrideEmptyBasket) {\r\n setItemCountForBasket(cart?.itemCount ?? 0);\r\n TrackMiniBasket(cart); \r\n }\r\n if (cart && cart.items) {\r\n fillBasketOverlay(cart);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n}\r\n\r\n/**\r\n * Zeigt die Anzahl der Produkte im Warenkorb an.\r\n * @param itemCount\r\n */\r\nfunction setItemCountForBasket(itemCount: number) {\r\n if (itemCount > 0) {\r\n $('.headerBasket.notify')\r\n .html(itemCount + '')\r\n .removeClass('hide');\r\n }\r\n if (itemCount == 0) {\r\n $('.headerBasket.notify')\r\n .html('')\r\n .addClass('hide');\r\n }\r\n}\r\n\r\nfunction showModal(modal: JQuery) {\r\n $('body').addClass('modal-open');\r\n $('#modal-bg-layover').show();\r\n modal.show();\r\n}\r\n\r\nfunction hideModal(modal: JQuery) {\r\n $('body').removeClass('modal-open');\r\n $('#modal-bg-layover').hide();\r\n modal.hide();\r\n}\r\n\r\nfunction fillBasketOverlay(cart: IBasketOverlayModel) {\r\n const basketOverlay = $('.basket-menu-bubble');\r\n\r\n basketOverlay.find('.basket-summary .pricebox .price').html(cart.totalGross);\r\n\r\n basketOverlay.find('.item.added').remove();\r\n\r\n for (let item of cart.items) {\r\n let itemPrototype = basketOverlay.find('.item.prototype').clone();\r\n itemPrototype\r\n .removeClass('prototype')\r\n .removeClass('hidden')\r\n .addClass('added');\r\n itemPrototype.find('.author').html(item.authorList);\r\n itemPrototype.find('.title').html(item.title);\r\n itemPrototype.find('.edition').html(item.edition);\r\n\r\n itemPrototype.find('.availability').html(item.availabilityStatus);\r\n if (item.availabilityStatusId !== 1) {\r\n itemPrototype.find('.availability').removeClass('available');\r\n }\r\n\r\n itemPrototype.find('.amount span').html(item.quantity.toString());\r\n itemPrototype.find('img').attr('src', item.imageUrl);\r\n itemPrototype.find('a').attr('href', `/${item.seoPath}/product/${item.productId}`);\r\n basketOverlay.find('.basket-items').append(itemPrototype);\r\n\r\n itemPrototype\r\n .find('.singleprice span')\r\n .html((item.singleItemPrice / 100).toLocaleString('de-De', { style: 'currency', currency: 'EUR' }));\r\n itemPrototype\r\n .find('.totalprice span')\r\n .html((item.totalItemPrice / 100).toLocaleString('de-De', { style: 'currency', currency: 'EUR' }));\r\n }\r\n}\r\n","export enum DummyImageSize {\r\n small,\r\n medium,\r\n large\r\n}\r\n","import { fillBasket, initEvents } from \"./checkoutShared\";\r\nimport { CheckoutService } from \"./checkoutService\";\r\nconst checkoutService = new CheckoutService();\r\nimport { onloadTracking } from './Tracking/checkoutTrackingStep1';\r\nimport { factfinderBasketTracking } from '../Factfinder/Tracking/factFinderTracking';\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport { dangerAlert } from \"../Shared/AlertHelper\";\r\n\r\n$(() => {\r\n initBasket();\r\n\r\n if ($(\"#ApiError\").val()) {\r\n dangerAlert($(\"#ApiError\").val());\r\n }\r\n});\r\n\r\n$(\"#checkoutDiscountButton\").on('click', function () {\r\n var code = $(\"#discountInputSearch\").val();\r\n if (code) {\r\n checkoutService.addDiscountToCart(code as string).then(data => {\r\n if (data == false) {\r\n initBasket();\r\n $(\"#discountInputSearch\").val('');\r\n $(\"#discountContainer .coupon-code\").addClass(\"hide\");\r\n $('#discountContainer .coupon-code-result').removeClass(\"hide\");\r\n }\r\n }).catch(() => {\r\n });;\r\n }\r\n});\r\n$(\"#checkoutIsbnSearchButton\").on('click',\r\n function () {\r\n addProductByIsbn($(this).next(\".inputEls\").find(\"#checkoutIsbnSearch\"));\r\n });\r\n\r\n$(\"#checkoutIsbnSearch\").on('keyup',\r\n function (e) {\r\n if (e.keyCode == 13) {\r\n addProductByIsbn($(this));\r\n }\r\n });\r\n\r\n$(\".addAdditionalCartInfo\").on('click',\r\n function () {\r\n let OrderCode = $(\".additionalCartInfoOrderCode\").val() as string;\r\n let CustomerMessage = $(\".additionalCartInfoCustomerMessage\").val() as string;\r\n let redirectLink = $(this).attr(\"data-redirectlink\") as string;\r\n if ((OrderCode && OrderCode.trim()) || (CustomerMessage && CustomerMessage.trim()))\r\n {\r\n checkoutService.addAdditionalInfoToCart(OrderCode, CustomerMessage)\r\n .then(() => {\r\n window.location.href = redirectLink;\r\n }).catch(() => {\r\n });\r\n }\r\n else {\r\n window.location.href = redirectLink;\r\n }\r\n });\r\n\r\n/**\r\n* Initialer Request beim Warenkorb-Aufruf.\r\n*/\r\nfunction initBasket() {\r\n checkoutService.showBasket()\r\n .then(async (response: ICheckoutflowResponse) => {\r\n let cart = response.cart;\r\n fillBasket(cart);\r\n fillAdditionalInfo(cart);\r\n showShippingNotification(response);\r\n initEvents();\r\n onloadTracking(cart);\r\n localStorage.setItem(\"currentCart\", JSON.stringify(response.cart));\r\n factfinderBasketTracking(cart.lineItems);\r\n })\r\n .catch(() => {\r\n $(\".hideInEmptyBasket\").addClass(\"hide\");\r\n $(\".showInEmptyBasket\").removeClass(\"hide\");\r\n $(\".disableInEmptyBasket\").addClass(\"disabled-Element\");\r\n });\r\n}\r\n\r\n/**\r\n * Ruft \"addItemByIsbnSearch\" mit dem value aus dem übergebenen Inputfield auf. \r\n * @param input\r\n */\r\nfunction addProductByIsbn(input: JQuery) {\r\n\r\n if (input) {\r\n let isbn = input.val() as string;\r\n if (isbn) {\r\n checkoutService.addItemByIsbnSearch(isbn)\r\n .then((cart: ICart) => {\r\n fillBasket(cart);\r\n }).catch(() => {\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction fillAdditionalInfo(cart: ICart) {\r\n if (cart && cart.additionalCartInfo) {\r\n $(\".additionalCartInfoOrderCode\").val(cart.additionalCartInfo.orderCode);\r\n $(\".additionalCartInfoCustomerMessage\").val(cart.additionalCartInfo.customerMessage);\r\n }\r\n}\r\n\r\n/**\r\n * Je nachdem, ob in der Cart das Flag zum Verstecken des Lieferkostsenhinweises gesetzt ist,\r\n * wird dieser asugeblendet\r\n * @param response \r\n */\r\nfunction showShippingNotification(response: ICheckoutflowResponse) {\r\n if (response.shippingCostInfo && response.shippingCostInfo.hideNoShippingCostHintAtCart) {\r\n $(\"#basket-shipping-taxCost\").addClass(\"hide\");\r\n $(\".total-shipping-notification-container\").html(\"\");\r\n $(\"#basket-shipping-taxCost_with_hyperLink\").removeClass(\"hide\");\r\n }\r\n else {\r\n $(\"#basket-shipping-taxCost_with_hyperLink\").addClass(\"hide\");\r\n $(\"#basket-shipping-taxCost\").removeClass(\"hide\");\r\n }\r\n}\r\n\r\n","/**\r\n * Formatiert den Übergebenen Betrag in das Format 0.00.\r\n * Wenn es sich um einen Cent-Betrag handelt wird vorher /100 geteilt\r\n * @param price\r\n * @param isCentPrice\r\n */\r\nexport function formatPrice2Digits(price: number, isCentPrice?: boolean) {\r\n try {\r\n if (!price && price != 0) {\r\n return null;\r\n }\r\n if (isCentPrice) {\r\n price = price / 100;\r\n }\r\n return price.toFixed(2);\r\n } catch (error) {\r\n return null;\r\n }\r\n}","import * as Cookies from 'js-cookie';\r\n\r\ndeclare var dataLayer: any[];\r\nvar windowHeight = $(window).innerHeight();\r\ndeclare var _trboq: any;\r\ndeclare var _trbo: any;\r\ndeclare var UC_UI: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n * @param eventName Der Name des Trackingevents\r\n */\r\nexport function trackGooglePromotionEvent_view(eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: 'eec.promotionView',\r\n ecommerce: {\r\n promoView: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampv: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n setTimeout(trackGooglePromotionEvent_view.bind(null, eventName), 100);\r\n }\r\n}\r\nexport function trackGooglePromotionEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'eec.promotionClick',\r\n ecommerce: {\r\n promoClick: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackGoogleAddToMerkliste_click(productId: number) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'add to wishlist',\r\n eventLabel: `add_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'add to wishlist' + '/' + `add_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackMerklisteInteraction_click(eventLabel: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_wishlist',\r\n eventLabel: eventLabel,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_wishlist' + '/' + eventLabel, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function MerklisteKarusellInViewTracking() {\r\n trackGooglePromotionEvent_view('all_merklisten_static');\r\n}\r\n\r\nexport function MerklisteKarusellProductClickedTracking() {\r\n trackGooglePromotionEvent_click('all_merklisten_static');\r\n}\r\n\r\nexport function trackNaviEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'navigation data',\r\n eventAction: 'navigation_click',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['navigation data', 'navigation_click' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function loginTracking(pageType: string, loggedInResult: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n if (pageType.includes('meine-daten')) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_meine-daten',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_meine-daten' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_checkout',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_checkout' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n Cookies.remove('LoggedInPageType');\r\n Cookies.remove('LoggedInResult');\r\n } else {\r\n setTimeout(loginTracking.bind(null, pageType, loggedInResult), 100);\r\n }\r\n}\r\n\r\nexport function pushTrboId(eId: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n _trboq = _trboq || [];\r\n _trboq.push([\r\n 'dataMatching',\r\n {\r\n external_user_id: eId,\r\n },\r\n ]);\r\n } else {\r\n setTimeout(pushTrboId.bind(null, eId), 100);\r\n }\r\n}\r\n\r\nexport function trackIdLayerComplete(hId: string, hMail: string, hKid: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: 'idLayer_complete_login',\r\n externalIdHash: hId,\r\n emailHash: hMail,\r\n kupCustomerNumberHash: hKid,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerComplete.bind(null, hId, hMail, hKid), 100);\r\n }\r\n}\r\n\r\nexport function trackIdLayerReduced(hMail: string, eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: eventName,\r\n emailHash: hMail,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerReduced.bind(null, hMail, eventName), 100);\r\n }\r\n}\r\n\r\nexport function trackNewsletterRegisterEvent(eventName: string) {\r\n if (eventName) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'newsletter_registrierung',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'newsletter_registrierung' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function tracking_eecPromotionview() {\r\n const promotionElements = $('.googleTracking.promotionTracking:not(.promoted)');\r\n promotionElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const trackingParam = $(this).data('trackingevent');\r\n if (trackingParam) {\r\n trackGooglePromotionEvent_view(trackingParam);\r\n }\r\n $(this).addClass('promoted');\r\n }\r\n });\r\n\r\n trboPromotionViewTracking();\r\n}\r\n\r\nfunction trboPromotionViewTracking() {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n const promotionTrboElements = $('.trboPromotionTracking:not(.promoted)');\r\n promotionTrboElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const moduleId = $(this).data('moduleid');\r\n const moduleName = $(this).data('modulename');\r\n const campaignId = $(this).data('campaignid');\r\n const campaignName = $(this).data('campaignname');\r\n const usertype = $(this).data('usertype');\r\n\r\n if (window['_trboq'] !== undefined && window['_trbo'] !== undefined) {\r\n _trboq.push(['layerView', { moduleId: moduleId, campaignId: campaignId }]);\r\n _trbo.app.tracker.trackExternalView(usertype, campaignId, campaignName, moduleId, moduleName);\r\n $(this).addClass('promoted');\r\n }\r\n }\r\n });\r\n } else {\r\n setTimeout(trboPromotionViewTracking, 100);\r\n }\r\n}\r\n\r\nexport function trackExternalBasketClick(productId: number, eventLabel: string, eventAction: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: eventAction,\r\n eventLabel: `${eventLabel}_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'newsletter_registrierung' + '/' + `${eventLabel}_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackPrefixNameProblem() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_forms',\r\n eventLabel: 'problem_name-prefix',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_forms' + '/' + 'problem_name-prefix', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackLageRegistrationAccount(action: string, label: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: action,\r\n eventLabel: label,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', action + '/' + label, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function searchResultClickTracking(searchQuery: string) {\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[searchQuery ? `Suchergebnis/${searchQuery}` : 'Suchergebnis']],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nfunction IsVisibleElement(element) {\r\n if ($(element).hasClass('hide')) {\r\n return false;\r\n }\r\n var top_of_element = $(element).offset().top;\r\n var bottom_of_element = $(element).offset().top + $(element).outerHeight();\r\n var top_of_screen = $(window).scrollTop();\r\n var bottom_of_screen = top_of_screen + windowHeight;\r\n\r\n if (bottom_of_screen > top_of_element && top_of_screen < bottom_of_element) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","import request = require('request');\r\nimport { DummyImageSize } from '../Shared/Models/DummyImageSizeEnum';\r\nimport { IAvailabilityStatus } from './Models/AvailabilityStatus';\r\nimport { IDRMMapping } from './Models/DRMMapping';\r\nimport { StandardLink } from '../Produktdetails/Models/StandardLink';\r\n\r\n/**\r\n * Holt den availabilityStatus zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('availabilityStatusList')\r\n ) as IAvailabilityStatus[];\r\n if (storedAvailabilityStatusList) {\r\n resolve(storedAvailabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetAvailabilityStatusList',\r\n success: (availabilityStatusList: IAvailabilityStatus[]) => {\r\n sessionStorage.setItem('availabilityStatusList', JSON.stringify(availabilityStatusList));\r\n resolve(availabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die DRM-Info zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getDRMInfo(drmId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var drmMapping = JSON.parse(sessionStorage.getItem('drmMapping')) as IDRMMapping[];\r\n if (drmMapping) {\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetDRMMapping',\r\n success: (drmMapping: IDRMMapping[]) => {\r\n sessionStorage.setItem('drmMapping', JSON.stringify(drmMapping));\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt den Link zu den Systemanforderungen (In Umbraco hinterlegt)\r\n * @param availabilityStatusId\r\n */\r\nexport function getSystemanforderungenLink(): Promise {\r\n return new Promise((resolve, reject) => {\r\n var systemanforderungenLink = JSON.parse(sessionStorage.getItem('systemanforderungenLink')) as StandardLink;\r\n if (systemanforderungenLink) {\r\n resolve(systemanforderungenLink);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetSystemanforderungenLink',\r\n success: (systemanforderungenLink: StandardLink) => {\r\n sessionStorage.setItem('systemanforderungenLink', JSON.stringify(systemanforderungenLink));\r\n resolve(systemanforderungenLink);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Checkt, ob die übergene availabilityStatusId lieferbar ist oder nicht\r\n * @param availabilityStatusId\r\n */\r\nexport function checkAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedOrderableAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('orderableAvailabilityStatusList')\r\n ) as number[];\r\n if (storedOrderableAvailabilityStatusList) {\r\n resolve(storedOrderableAvailabilityStatusList.some(x => x == availabilityStatusId));\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetOrderableAvailabilityStatusList',\r\n success: (orderableAvailabilityStatusList: number[]) => {\r\n sessionStorage.setItem(\r\n 'orderableAvailabilityStatusList',\r\n JSON.stringify(orderableAvailabilityStatusList)\r\n );\r\n resolve(orderableAvailabilityStatusList.includes(availabilityStatusId));\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getAdditionalPriceInfoByDelivertypeId(deliverytypeId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n let priceinfo = sessionStorage.getItem('priceinfo_' + deliverytypeId) as string;\r\n if (priceinfo) {\r\n resolve(priceinfo);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetAdditionalPriceInfoByDelivertypeId?deliverytypeId=' + deliverytypeId,\r\n success: (priceinfo: any) => {\r\n sessionStorage.setItem('priceinfo_' + deliverytypeId, priceinfo);\r\n resolve(priceinfo);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getBreadcrumbByTocId(tocId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!tocId) {\r\n resolve('Produkt ohne Kategorie');\r\n }\r\n let breadcrumb = sessionStorage.getItem('breadcrumb_' + tocId) as string;\r\n if (breadcrumb) {\r\n resolve(breadcrumb);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetBreadcrumbByTocId?tocId=' + tocId,\r\n success: (breadcrumb: string) => {\r\n sessionStorage.setItem('breadcrumb_' + tocId, breadcrumb);\r\n resolve(breadcrumb);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Baut den Link zu einem Produktbild zusammen.\r\n * @param productId\r\n * @param width\r\n * @param height\r\n */\r\nexport function getImagePath(productId: number, width: number = -1, height: number = -1): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url:\r\n '/Umbraco/api/ImageServerApi/GetImageUrl?productId=' +\r\n productId +\r\n '&width=' +\r\n width +\r\n '&height=' +\r\n height,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gibt den Pfad des Dummybildes passend zur übergebenen Größe zurück\r\n * @param imageSize\r\n */\r\nexport function getDummyImage(imageSize: DummyImageSize): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/ImageServerApi/GetDummyImage?imageSize=' + imageSize,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gilt für Factfinder-Produkte\r\n * @param product\r\n */\r\nexport function showBezugsartOverlay(product): boolean {\r\n return (\r\n product.DeliveryTypeID == '5' &&\r\n product.Bruttopreis != null &&\r\n product.PreisvariantenMerkmal == 'false' &&\r\n product.Urheberzeile != null &&\r\n (product.Verlag == 'C.H.BECK' || product.Verlag == 'Vahlen')\r\n );\r\n}\r\n","import { searchResultClickTracking } from '../../Tracking/GoogleTracking';\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { formatPrice2Digits } from '../../Shared/PriceHelper';\r\n\r\n$(() => {\r\n $('.FactFinderSearchResultContainer').on('click', '.factFinderTrackingItem', function() {\r\n var parent = $(this)\r\n .parents('.resultItem')\r\n .get(0);\r\n var id = parseInt($(parent).data('id'));\r\n var sessionId = $(parent).data('sessionid');\r\n var origPos = $(parent).data('origpos');\r\n var query = $(parent).data('query');\r\n var pos = $(parent).data('pos');\r\n var page = $(parent).data('page');\r\n var pagesize = $(parent).data('pagesize');\r\n var simi = $(parent).data('simi');\r\n var factFinderCampaign = $(parent).data('factfindercampaign');\r\n\r\n searchResultClickTracking(query);\r\n\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/ProductDetailTracking?' +\r\n 'productId=' +\r\n id +\r\n '&sessionId=' +\r\n sessionId +\r\n '&query=' +\r\n query +\r\n '&position=' +\r\n pos +\r\n '&origPosition=' +\r\n origPos +\r\n '&page=' +\r\n page +\r\n '&pageSize=' +\r\n pagesize +\r\n '&origPageSize=' +\r\n pagesize +\r\n '&simi=' +\r\n simi +\r\n '&factFinderCampaign=' +\r\n factFinderCampaign,\r\n\r\n success: data => {},\r\n error: function() {},\r\n });\r\n });\r\n\r\n $(document).on('click', '.factFinderCartTrackingItem', function() {\r\n var parent = $(this).closest('.resultItem');\r\n var id = parseInt($(parent).data('id'));\r\n var sessionId = $(parent).data('sessionid');\r\n var price = $(parent).data('price');\r\n\r\n factfinderCartTracking(id, sessionId, price, 1);\r\n });\r\n});\r\n\r\n/**\r\n * Ruft das FactfinderCartTracking für jedes LineItem im Warenkorb auf\r\n * @param lineItems\r\n */\r\nexport function factfinderBasketTracking(lineItems: ILineItem[]): void {\r\n for (let lineItem of lineItems) {\r\n let productId = lineItem.product.productId;\r\n let sessionId = $('#CurrentSessionId').val() as string;\r\n let price = lineItem.singleItemGrossPrice.amount;\r\n let count = lineItem.quantity;\r\n factfinderCartTracking(productId, sessionId, price, count);\r\n }\r\n}\r\n\r\n/**\r\n * Ruft das FactfinderCartTracking für jedes LineItem im Warenkorb auf\r\n * @param lineItems\r\n */\r\nexport function factfinderThankYouTracking(lineItems: ILineItem[]): void {\r\n for (let lineItem of lineItems) {\r\n let productId = lineItem.product.productId;\r\n let sessionId = $('#CurrentSessionId').val() as string;\r\n let price = lineItem.singleItemGrossPrice.amount;\r\n let count = lineItem.quantity;\r\n factfinderCheckoutTracking(productId, sessionId, price, count);\r\n }\r\n}\r\n\r\n/**\r\n * Ruft das Factfinder Cart-Tracking auf\r\n * @param productId\r\n * @param sessionId\r\n * @param price\r\n */\r\nexport function factfinderCartTracking(productId: number, sessionId: string, price: number, count: number) {\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/CartTracking?' +\r\n 'productId=' +\r\n productId +\r\n '&sessionId=' +\r\n sessionId +\r\n '&price=' +\r\n formatPrice2Digits(price, true),\r\n success: data => {},\r\n error: function() {},\r\n });\r\n}\r\n\r\n/**\r\n * Ruft das Factfinder Checkout-Tracking auf (Danke-Seite)\r\n * @param productId\r\n * @param sessionId\r\n * @param price\r\n */\r\nexport function factfinderCheckoutTracking(productId: number, sessionId: string, price: number, count: number) {\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/ThankYouTracking?' +\r\n 'productId=' +\r\n productId +\r\n '&sessionId=' +\r\n sessionId +\r\n '&price=' +\r\n formatPrice2Digits(price, true),\r\n success: data => {},\r\n error: function() {},\r\n });\r\n}\r\n","import ILineItem = CheckoutflowReponse.ILineItem;\r\nimport IPrice = CheckoutflowReponse.IPrice;\r\nimport { IPriceCalculation } from '../models/pricecalculation';\r\nexport var summeProbeAbosWerte: number = 0;\r\nexport var summeProbeAbosGrossWerte: number = 0;\r\n\r\nexport function getProductGrossPrice(lineItem: ILineItem): number {\r\n /*Anpassung für Probe-Abos (Gross)\r\n \r\n Hier die Formel für den errechneten Wert eines Probe-Abos (BYTE-261):\r\n\r\n Höchster verfügbarer Produktpreis * Wandlungsrate (0.2) * Faktor für angenommene Laufzeit\r\n\r\n > Höchster, verfügbarer Produktpreis > max(PriceGross)\r\n > Wandlungsrate > aus der Datenanalyse gehen wir von einer Wandlungsrate von 20% aus\r\n > Faktor für die angenommene Laufzeit (2 Jahre) > richtet sich nach den Abrechnungszeiträumen der Abos. Hier die Regeln dazu:\r\n\r\n Faktor 4 (4 Halbjahre sind 2 Jahre) > Wenn das Feld \"Preisbeschreibung\" \"halbjährlich\" ODER \"Halbjahr\"enthält\r\n Faktor 2 (2 ganze Jahre sind 2 Jahre) > Wenn das Feld nichts enthält, \"^jährlich.\", \"\\sjährlich.\" oder \"^Jahres.*\" enthält*/\r\n if (lineItem.currentPriceType.priceTypeId.toString()[0] === '4' && lineItem.singleItemGrossPrice.amount == 0) {\r\n const wandlungsrate = 0.2;\r\n let hoechsterPreis = getHighestValidPriceFromLineItem(lineItem.product.prices);\r\n let laufzeitFaktor = getLaufzeitFaktor(hoechsterPreis.priceGross, hoechsterPreis.description);\r\n if (hoechsterPreis && laufzeitFaktor) {\r\n let aboWert = hoechsterPreis.priceGross * wandlungsrate * laufzeitFaktor;\r\n summeProbeAbosGrossWerte += aboWert;\r\n\r\n return aboWert;\r\n }\r\n }\r\n\r\n return lineItem.singleItemGrossPrice ? lineItem.singleItemGrossPrice.amount : null;\r\n}\r\n\r\n/**\r\n * Im priceCalculation müssen die Preise valid übergeben werden.\r\n * @param priceCalculation\r\n * @param lineItem\r\n */\r\nexport function getProductNetPrice(lineItem: ILineItem, priceCalculation?: IPriceCalculation): number {\r\n /*Anpassung für Probe-Abos (Net)\r\n \r\n Hier die Formel für den errechneten Wert eines Probe-Abos (BYTE-261):\r\n\r\n Höchster verfügbarer Produktpreis * Wandlungsrate (0.2) * Faktor für angenommene Laufzeit\r\n\r\n > Höchster, verfügbarer Produktpreis > max(PriceGross)\r\n > Wandlungsrate > aus der Datenanalyse gehen wir von einer Wandlungsrate von 20% aus\r\n > Faktor für die angenommene Laufzeit (2 Jahre) > richtet sich nach den Abrechnungszeiträumen der Abos. Hier die Regeln dazu:\r\n\r\n Faktor 4 (4 Halbjahre sind 2 Jahre) > Wenn das Feld \"Preisbeschreibung\" \"halbjährlich\" ODER \"Halbjahr\"enthält\r\n Faktor 2 (2 ganze Jahre sind 2 Jahre) > Wenn das Feld nichts enthält, \"^jährlich.\", \"\\sjährlich.\" oder \"^Jahres.*\" enthält*/\r\n try {\r\n if (!lineItem && !priceCalculation) {\r\n return null;\r\n }\r\n\r\n if (lineItem) {\r\n return CalculatePriceFromLineItem(lineItem);\r\n }\r\n return CalculatePriceFromPriceCalculationModel(priceCalculation);\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n}\r\n\r\nexport function buildVar5(trackingProduct: CheckoutflowReponse.IProduct): string {\r\n let firstPart = 'none';\r\n if (trackingProduct.isTopArticle === true) {\r\n firstPart = 'isTop';\r\n } else if (trackingProduct.isStandard === true) {\r\n firstPart = 'isStandardwerk';\r\n }\r\n\r\n let secondPart = 'none';\r\n if (trackingProduct.isNew == true) {\r\n secondPart = 'isNew';\r\n } else if (trackingProduct.isPreview == true) {\r\n secondPart = 'isPreview';\r\n }\r\n\r\n return `${firstPart}_${secondPart}`;\r\n}\r\n\r\nfunction CalculatePriceFromPriceCalculationModel(priceCalculation: IPriceCalculation) {\r\n return CalculatePrice(\r\n priceCalculation.currentPrice,\r\n priceCalculation.currentPricetypeId,\r\n priceCalculation.highestPriceDescription,\r\n priceCalculation.highestPrice\r\n );\r\n}\r\n\r\nfunction CalculatePriceFromLineItem(lineItem: ILineItem): number {\r\n let currentPrice: number = lineItem.singleItemNetPrice.amount;\r\n let currentPriceTypeId: number = lineItem.currentPriceType.priceTypeId;\r\n let highestPrice: IPrice = getHighestValidPriceFromLineItem(lineItem.product.prices);\r\n if (!highestPrice) {\r\n return null;\r\n }\r\n let highestPriceDescription: string = highestPrice.description;\r\n let highestPriceAmount: number = highestPrice.priceNet;\r\n return CalculatePrice(currentPrice, currentPriceTypeId, highestPriceDescription, highestPriceAmount);\r\n}\r\n\r\nfunction CalculatePrice(\r\n currentPrice: number,\r\n currentPriceTypeId: number,\r\n highestPriceDescription: string,\r\n highestPrice: number\r\n): number {\r\n if (currentPriceTypeId.toString()[0] === '4' && currentPrice == 0) {\r\n const wandlungsrate = 0.2;\r\n let laufzeitFaktor = getLaufzeitFaktor(highestPrice, highestPriceDescription);\r\n if (highestPrice && laufzeitFaktor) {\r\n let aboWert = highestPrice * wandlungsrate * laufzeitFaktor;\r\n summeProbeAbosWerte += aboWert;\r\n\r\n return aboWert;\r\n }\r\n }\r\n\r\n return currentPrice;\r\n}\r\n\r\nfunction getHighestValidPriceFromLineItem(prices: IPrice[]): IPrice {\r\n let currentDate = new Date();\r\n let validPrices = prices.filter(\r\n x =>\r\n (x.validFrom == null || new Date(x.validFrom) < currentDate) &&\r\n (x.validUntil == null || new Date(x.validUntil) > currentDate)\r\n );\r\n if (!validPrices) {\r\n return null;\r\n }\r\n return validPrices.filter(x => x.priceGross == Math.max(...validPrices.map(y => y.priceGross)))[0];\r\n}\r\n\r\nfunction getLaufzeitFaktor(highestPrice: number, highestPriceDescription: string): number {\r\n if (!highestPrice) {\r\n return null;\r\n }\r\n if (highestPriceDescription.includes('halbjährlich') || highestPriceDescription.includes('Halbjahr')) {\r\n return 4;\r\n }\r\n\r\n return 2;\r\n}\r\n","import * as Cookies from \"js-cookie\";\r\n//Blendet eine Allgemeine Fehlermeldung ein mit dem übergebenen Text, die nach 6 Sekunden langsam ausblendet\r\nexport function dangerAlert(text) {\r\n if (text) {\r\n $(\"#dangerAlert\").removeClass(\"hide\").fadeIn(\"fast\").find(\"p\").html(text);\r\n }\r\n}\r\n\r\nexport function successAlert(text) { \r\n if (text) {\r\n $(\"#successAlert\").removeClass(\"hide\").fadeIn(\"fast\").find(\"p\").html(text);\r\n }\r\n}\r\n\r\nexport function closeAlert(elementId, doNotShowAgain) {\r\n if (doNotShowAgain) {\r\n Cookies.set(\"doNotShowAgain\" + elementId, \"True\");\r\n }\r\n $(elementId).fadeOut(\"slow\", () => {\r\n $(elementId).addClass(\"hide\").find(\"p\").html(\"\");\r\n });\r\n}","import request = require('request');\r\nimport { dangerAlert } from '../Shared/AlertHelper';\r\nimport IAddressChange = CheckoutflowRequest.IAddressChange;\r\nimport IPaymentMethodChange = CheckoutflowRequest.IPaymentMethodChange;\r\nimport IBillingAddress = CheckoutflowRequest.IBillingAddress;\r\nimport IShippingAddress = CheckoutflowRequest.IShippingAddress;\r\nimport ILineItemChange = CheckoutflowRequest.ILineItemChange;\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport IBskAdditionalInfo = CheckoutflowRequest.IBskAdditionalInfo;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport CheckoutActionResponseModel = require('./Models/Api/CheckoutActionResponseModel');\r\nimport ICheckoutActionResponseModel = CheckoutActionResponseModel.ICheckoutActionResponseModel;\r\nimport { AddToCartTrackingLineItem } from './Tracking/checkoutTrackingGlobal';\r\nlet spinnerModal: JQuery = $('#spinnerModal');\r\n\r\nexport class CheckoutService {\r\n expressKauf(): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/ExpressKaufApi/Checkout',\r\n success: (response: boolean) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n //Message im Fehlerfall\r\n reject(data.responseText);\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um den aktuellen Warenkorb zu bekommen\r\n */\r\n showBasket(): Promise {\r\n //Logs sind mit Absicht noch drin\r\n console.log('start-Request ' + new Date());\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/CheckoutApi/GetCart',\r\n success: (response: ICheckoutflowResponse) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n //Message im Fehlerfall\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n //Logs sind mit Absicht noch drin\r\n console.log('End-Request ' + new Date());\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Gibt die Zusätzlichen Informationen an die Cart weiter\r\n */\r\n addAdditionalInfoToCart(orderCode: string, customerMessage: string) {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({\r\n OrderCode: orderCode,\r\n CustomerMessage: customerMessage,\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/AddAdditionalCartInfo',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param lineItemChange\r\n */\r\n addDiscountToCart(code: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n //data: { \"code\": code },\r\n url: '/Umbraco/api/CheckoutApi/AddDiscountToCart?code=' + code,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt derm Warenkorb über seine ISBN hinzuzufügen\r\n * @param lineItemChange\r\n */\r\n addItemByIsbnSearch(isbn: string): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({ isbn: isbn }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/AddItemByIsbnSearch',\r\n success: (response: ICheckoutActionResponseModel) => {\r\n AddToCartTrackingLineItem(response.lineItem);\r\n resolve(response.cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt im Warenkorb zu updaten\r\n * @param lineItemChange\r\n */\r\n updateLineItem(lineItemChange: ILineItemChange): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify(lineItemChange),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/UpdateLineItem',\r\n success: (cart: ICart) => {\r\n resolve(cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt aus dem Warenkorb zu löschen\r\n * @param lineItemChange\r\n */\r\n deleteLineItem(lineItemChange: ILineItemChange): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify(lineItemChange),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n url: '/Umbraco/api/CheckoutApi/DeleteLineItem',\r\n success: (cart: ICart) => {\r\n resolve(cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt dem Warenkorb hinzuzufügen\r\n * @param productId\r\n * @param pricetypeId\r\n */\r\n addProductToBasket(\r\n productId: number,\r\n pricetypeId: number,\r\n ChosenDeliveryType?: number\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: {\r\n productId: productId,\r\n priceTypeId: pricetypeId,\r\n chosenDeliveryType: ChosenDeliveryType,\r\n },\r\n url: '/Umbraco/api/CheckoutApi/AddItemToBasket',\r\n success: (response: ICheckoutActionResponseModel) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um die Anzahl der Produke im Warenkorb zu erhalten\r\n */\r\n getItemCountInBasket(): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/MiniBasket/GetMiniBasket',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n addPaymentShippingDataToCart(\r\n addresschange: IAddressChange,\r\n paymentmethodChange: IPaymentMethodChange,\r\n bskAdditionalInfo: IBskAdditionalInfo,\r\n relatedBusinessPartnerId: string\r\n ): Promise {\r\n spinnerModal.removeClass('hide');\r\n\r\n var data = {\r\n addresschange: addresschange,\r\n paymentmethodchange: paymentmethodChange,\r\n relatedBusinessPartnerId: relatedBusinessPartnerId,\r\n bskAdditionalInfo: bskAdditionalInfo,\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/api/CheckoutApi/AddPaymentShippingDataToCart',\r\n data: JSON.stringify(data),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText.replace(/\\\"/g, ''));\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n updateBillingaddressInCart(billingAddressId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: `/Umbraco/surface/CheckoutSurface/UpdateBillingAddress?addressId=${billingAddressId}`,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject(data.responseText);\r\n },\r\n complete: () => {},\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Lädt die Lieferadressen die vom Benutzer ausgewählt werden können.\r\n * @param billingAddressId Die Id der BillingAddress\r\n */\r\n getAvailableDeliveryAddresses(billingAddressId: string, isBusiness: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: `/Umbraco/surface/CheckoutSurface/GetAvailableDeliveryAddresses?addressId=${billingAddressId}&isBusiness=${isBusiness}`,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n reject();\r\n },\r\n complete: () => {},\r\n });\r\n });\r\n }\r\n\r\n AddAddressesToCartGast(\r\n billingAddress: IBillingAddress,\r\n shippingAddress: IShippingAddress,\r\n emailAddress: string,\r\n shippingAsBilling: boolean,\r\n isGuestUser: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n billingAddress: billingAddress,\r\n shippingAddress: shippingAddress,\r\n emailAddress: emailAddress,\r\n shippingAsBilling: shippingAsBilling,\r\n isGuestUser: isGuestUser,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddAddressesToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n if (data.responseText == 'Reload') {\r\n window.location.reload();\r\n } else {\r\n dangerAlert(data.responseText);\r\n reject();\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n AddPaymentmethodToCartGast(\r\n paymentmethodchange: IPaymentMethodChange,\r\n isDataUsageAccepted: boolean,\r\n isGuestUser: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n paymentmethodchange: paymentmethodchange,\r\n dataUsageAccepted: isDataUsageAccepted,\r\n isGuestUser: isGuestUser,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddPaymentmethodToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n AddArvatoAddressesToCart(addresses) {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n billingAddress: addresses.billingAddress,\r\n shippingAddress: addresses.shippingAddress,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddArvatoAddressesToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n if (data.responseText == 'Reload') {\r\n window.location.reload();\r\n } else {\r\n dangerAlert(data.responseText);\r\n reject();\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n getSaferpayIframe(recaptchaResponse: string) {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({\r\n value: recaptchaResponse,\r\n url: window.location.href,\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CreditCardApi/GetsaferpayIframe',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n}\r\n"],"sourceRoot":""}