{"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/Shared/PriceHelper.ts","webpack:///./Typescript/Checkout/checkoutStep2.ts","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingStep2.ts","webpack:///./Typescript/Tracking/GoogleTracking.ts","webpack:///./Typescript/Shared/ProductHelper.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","4","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","isCentPrice","toFixed","error","checkoutService","CheckoutService","loginSlides","button","getId","attr","$","find","show","next","removeClass","slideUp","slideDown","showBasket","then","response","cart","onloadTracking","val","click","preventDefault","on","e","middleName","target","lastName","trackPrefixNameProblem","Promise","undefined","__ucCmp","isInitialized","lineItems","productPrices","productNetPrice","singleItemNetPrice","ProductHelper","breadcrumb","pageTitle","checkout","actionField","step","setTimeout","windowHeight","innerHeight","trackGooglePromotionEvent_view","eventName","promoView","promotions","ecCustomProperties","icampv","rqtype","trackGooglePromotionEvent_click","promoClick","icampc","trboPromotionViewTracking","each","IsVisibleElement","moduleName","campaignId","campaignName","usertype","_trboq","_trbo","app","tracker","trackExternalView","addClass","element","hasClass","top_of_element","offset","top","bottom_of_element","outerHeight","top_of_screen","scrollTop","Target","loginTracking","pageType","loggedInResult","includes","Cookies","remove","pushTrboId","eId","external_user_id","trackIdLayerComplete","hId","hMail","hKid","externalIdHash","emailHash","kupCustomerNumberHash","trackIdLayerReduced","trackingParam","action","searchQuery","resolve","reject","storedAvailabilityStatusList","sessionStorage","getItem","text","ajax","method","dataType","url","success","availabilityStatusList","setItem","drmId","drmMapping","drmMappingItem","DRmid","AnzeigeText","systemanforderungenLink","storedOrderableAvailabilityStatusList","some","orderableAvailabilityStatusList","deliverytypeId","priceinfo","tocId","width","height","imageSize","DeliveryTypeID","Bruttopreis","PreisvariantenMerkmal","Urheberzeile","Verlag","CalculatePrice","currentPrice","currentPriceTypeId","highestPriceDescription","highestPrice","laufzeitFaktor","getLaufzeitFaktor","aboWert","summeProbeAbosWerte","getHighestValidPriceFromLineItem","currentDate","Date","validPrices","validFrom","validUntil","priceGross","Math","max","map","y","summeProbeAbosGrossWerte","singleItemGrossPrice","amount","hoechsterPreis","description","priceCalculation","highestPriceAmount","priceNet","CalculatePriceFromLineItem","currentPricetypeId","CalculatePriceFromPriceCalculationModel","console","fadeIn","html","elementId","doNotShowAgain","set","fadeOut","spinnerModal","expressKauf","responseText","complete","log","dangerAlert","addAdditionalInfoToCart","orderCode","customerMessage","OrderCode","CustomerMessage","headers","addDiscountToCart","code","addItemByIsbnSearch","isbn","AddToCartTrackingLineItem","updateLineItem","lineItemChange","deleteLineItem","addProductToBasket","pricetypeId","ChosenDeliveryType","chosenDeliveryType","getItemCountInBasket","addPaymentShippingDataToCart","addresschange","paymentmethodChange","bskAdditionalInfo","relatedBusinessPartnerId","paymentmethodchange","updateBillingaddressInCart","billingAddressId","getAvailableDeliveryAddresses","isBusiness","AddAddressesToCartGast","billingAddress","shippingAddress","emailAddress","shippingAsBilling","isGuestUser","location","reload","AddPaymentmethodToCartGast","isDataUsageAccepted","dataUsageAccepted","AddArvatoAddressesToCart","addresses","getSaferpayIframe","recaptchaResponse","href"],"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,UAA2C,OAAhC3B,EAASE,QAAQ0B,WACxB5B,EAASE,QAAQ0B,WACjB,MACA5B,EAASE,QAAQO,UAAYT,EAASE,QAAQO,UAClD,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,4GC9BrE,8BAAmC/B,EAAegG,GAC9C,IACI,OAAKhG,GAAkB,GAATA,GAGVgG,IACAhG,GAAgB,KAEbA,EAAMiG,QAAQ,IALV,KAMb,MAAOC,GACL,OAAO,Q,ogDChBf,aACA,OAEA,OACMC,EAAkB,IAAI,EAAAC,gBA8B5B,SAASC,EAAYC,GACjB,IAAIC,EAAQD,EAAOE,KAAK,eAExBC,EAAE,kBAAkBC,KAAK,SAASC,OACrB,kBAATJ,IACAE,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeC,UACxEL,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeE,YACxEN,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeC,WAE/D,kBAATP,IACAE,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeC,UACxEL,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeC,UACxEL,EAAE,kBAAkBG,KAAK,oBAAoBC,YAAY,eAAeE,aAxChFN,GAAE,WACEN,EAAgBa,aACXC,MAAK,SAAOC,GAA+B,0C,wCACpCC,EAAOD,EAASC,KACpB,EAAAC,eAAeD,G,aAGiB,QAApCV,EAAE,yBAAyBY,OAC3BhB,EAAYI,EAAE,oBAGlBA,EAAE,6BAA6Ba,OAAM,SAAUhE,GAC3CA,EAAMiE,iBACNlB,EAAYI,EAAE9C,UAGlB8C,EAAE,yBAAyBe,GAAG,UAAU,SAAUC,GAC9C,IAAMC,EAAajB,EAAEgB,EAAEE,QAAQjB,KAAK,eAAeW,MAC7CO,EAAWnB,EAAEgB,EAAEE,QAAQjB,KAAK,YAAYW,MAE1CK,IAAeE,GACf,EAAAC,iC,0/CC1BZ,WAGA,OACA,OASA,0BAAsBT,EAAeD,G,qBAAcW,SAAO,W,mFAClD,OAAsBC,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,uBAApC,YACIC,EAAYf,EAAOA,EAAKe,UAAY,GACpC/D,EAAW,GACXf,EAAa,GACb+E,EAAgB,G,IACC,EAAAD,E,wBAAA,YAAZnI,EAAQ,KACTE,EAAUF,EAASE,QACvBmD,EAAW7G,KAAK0D,EAAQS,WACpB0H,EAAkBrI,EAASsI,mBACzB,EAAA1H,mBAAmB,EAAAC,mBAAmBb,IAAW,GACjD,GACNoI,EAAc5L,KAAK6L,GACM,GAAME,EAActH,qBAAqBf,EAAQgB,iBAPhD,M,OAOtBsH,EAAqB,SACzBpE,EAAS5H,KAAK,CACVuB,KAAMmC,EAAQO,UACdC,GAAIR,EAAQS,UACZV,MAAOoI,EACPvH,MAAOZ,EAAQa,UAAYb,EAAQa,UAAUC,cAAgB,GAC7DI,SAAUoH,GAA0B,GACpCnH,QAASnB,EAAQoB,UAAYpB,EAAQoB,UAAUC,cAAgB,GAC/DC,SAAUxB,EAASwB,SACnBM,WAAY5B,EAAQ2B,gB,wBAhBP,I,oBAoBrB/B,UAAUtD,KAAK,CACXiM,UAAW,2CACXlF,MAAO,mBACPU,UAAW,CACPyE,SAAU,CACNC,YAAa,CAAEC,KAAM,GACrBxE,SAAUA,M,aAKtByE,WAAWxB,EAAetI,KAAK,KAAMqI,GAAO,K,q+DCnDpD,WAGI0B,EAAepC,EAAErH,QAAQ0J,cAS7B,SAAsBC,EAA+BC,G,uGAC7C,OAAsBjB,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,GACApI,UAAUtD,KAAK,CACX+G,MAAO,oBACPU,UAAW,CACPiF,UAAW,CACPC,WAAY,CACR,CACIpL,KAAMkL,QAO1BnJ,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChBC,OAAQ,CAAC,CAACJ,IACVK,OAAQ,eAIhBT,WAAWG,EAA+BjK,KAAK,KAAMkK,GAAY,K,WAGzE,SAAgBM,EAAgCN,GAC5CnJ,UAAUtD,KAAK,CACX+G,MAAO,qBACPU,UAAW,CACPuF,WAAY,CACRL,WAAY,CACR,CACIpL,KAAMkL,QAO1BnJ,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChBK,OAAQ,CAAC,CAACR,IACVK,OAAQ,cA0LpB,SAAeI,I,uGACP,OAAsB1B,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,EAC8BxB,EAAE,yCACViD,MAAK,WACvB,GAAIC,EAAiBhG,MAAO,CACxB,IAAMjI,EAAW+K,EAAE9C,MAAMlI,KAAK,YACxBmO,EAAanD,EAAE9C,MAAMlI,KAAK,cAC1BoO,EAAapD,EAAE9C,MAAMlI,KAAK,cAC1BqO,EAAerD,EAAE9C,MAAMlI,KAAK,gBAC5BsO,EAAWtD,EAAE9C,MAAMlI,KAAK,iBAELsM,IAArB3I,OAAe,aAAuC2I,IAApB3I,OAAc,OAAmB1D,GAAYmO,IAC/EG,OAAOzN,KAAK,CAAC,YAAa,CAAEb,SAAUA,EAAUmO,WAAYA,KAC5DI,MAAMC,IAAIC,QAAQC,kBAAkBL,EAAUF,EAAYC,EAAcpO,EAAUkO,GAClFnD,EAAE9C,MAAM0G,SAAS,iBAK7BzB,WAAWa,EAA2B,K,WAiE9C,SAASE,EAAiBW,GACtB,GAAI7D,EAAE6D,GAASC,SAAS,QACpB,OAAO,EAEX,IAAIC,EAAiB/D,EAAE6D,GAASG,SAASC,IACrCC,EAAoBlE,EAAE6D,GAASG,SAASC,IAAMjE,EAAE6D,GAASM,cACzDC,EAAgBpE,EAAErH,QAAQ0L,YAG9B,OAFuBD,EAAgBhC,EAEhB2B,GAAkBK,EAAgBF,EAnU7D,mCA0BA,oCAuBA,2CAAgDjK,GAC5Cb,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,eACfC,YAAa,kBACbC,WAAY,OAAO/C,IAGvBb,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,eAAgB,uBAAiCrK,EAAa,EAAG,KAC1E2I,OAAQ,eAKpB,2CAAgD5F,GAC5C5D,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,uBACbC,WAAYA,IAGhB5D,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,YAAa,wBAA+BtH,EAAY,EAAG,KACpE4F,OAAQ,eAKpB,6C,0FACI,SAAMN,EAA+B,0B,cAArC,S,YAGJ,qDACIO,EAAgC,0BAGpC,gCAAqCN,GACjCnJ,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,kBACfC,YAAa,mBACbC,WAAYuF,IAGhBnJ,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,kBAAmB,oBAA2B/B,EAAW,EAAG,KACrEK,OAAQ,eAKpB,yBAAsB2B,EAAcC,EAAkBC,G,uGAC9C,OAAsBnD,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,GACIgD,EAASE,SAAS,gBAClBtL,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,oBACbC,WAA8B,UAAlByH,EAA6B,eAAiB,kBAG9DrL,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CACJ,YACA,sBAA+C,UAAlBG,EAA6B,eAAiB,iBAC3E,EACA,KAEJ7B,OAAQ,gBAIhBxJ,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,iBACbC,WAA8B,UAAlByH,EAA6B,eAAiB,kBAG9DrL,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CACJ,YACA,mBAA4C,UAAlBG,EAA6B,eAAiB,iBACxE,EACA,KAEJ7B,OAAQ,eAIpB+B,EAAQC,OAAO,oBACfD,EAAQC,OAAO,mBAEfzC,WAAWoC,EAAclM,KAAK,KAAMmM,EAAUC,GAAiB,K,YAIvE,sBAAsBI,EAAWC,G,uGACzB,OAAsBxD,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,GACA+B,OAASA,QAAU,GACnBA,OAAOzN,KAAK,CACR,eACA,CACIiP,iBAAkBD,MAI1B3C,WAAW0C,EAAWxM,KAAK,KAAMyM,GAAM,K,YAI/C,gCAAsBE,EAAqBC,EAAaC,EAAeC,G,uGAC/D,OAAsB7D,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,EACApI,UAAUtD,KAAK,CACX+G,MAAO,yBACPuI,eAAgBH,EAChBI,UAAWH,EACXI,sBAAuBH,IAG3BhD,WAAW6C,EAAqB3M,KAAK,KAAM4M,EAAKC,EAAOC,GAAO,K,YAItE,+BAAsBI,EAAoBL,EAAe3C,G,uGACjD,OAAsBjB,IAAtB3I,OAAgB,SAAoB,GAAM4I,QAAQC,iBAAlD,M,OAAmC,EAAC,S,wBAApC,EACApI,UAAUtD,KAAK,CACX+G,MAAO0F,EACP8C,UAAWH,IAGf/C,WAAWoD,EAAoBlN,KAAK,KAAM6M,EAAO3C,GAAY,K,YAIrE,wCAA6CA,GACrCA,IACAnJ,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,2BACbC,WAAYuF,IAGhBnJ,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,YAAa,4BAAmC/B,EAAW,EAAG,KACvEK,OAAQ,gBAMxB,uC,0FAYI,OAX0B5C,EAAE,oDACViD,MAAK,WACnB,GAAIC,EAAiBhG,MAAO,CACxB,IAAMsI,EAAgBxF,EAAE9C,MAAMlI,KAAK,iBAC/BwQ,GACAlD,EAA+BkD,GAEnCxF,EAAE9C,MAAM0G,SAAS,gBAIzB,GAAMZ,K,cAAN,S,YA0BJ,oCAAyC/I,EAAmB+C,EAAoBD,GAC5E3D,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,eACfC,YAAaA,EACbC,WAAeA,EAAU,IAAI/C,IAGjCb,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,eAAgB,4BAAsCtH,EAAU,IAAI/C,EAAa,EAAG,KAC7F2I,OAAQ,eAKpB,oCACIxJ,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa,oBACbC,WAAY,wBAGhB5D,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,YAAa,wCAAmD,EAAG,KAC5E1B,OAAQ,eAKpB,wCAA6C6C,EAAgB7I,GACzDxD,UAAUtD,KAAK,CACX+G,MAAO,QACPC,cAAe,YACfC,YAAa0I,EACbzI,WAAYJ,IAGhBxD,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChB4B,OAAQ,CAAC,YAAamB,EAAS,IAAM7I,EAAO,EAAG,KAC/CgG,OAAQ,eAKpB,qCAA0C8C,GACtCtM,UAAUtD,KAAK,CACX+G,MAAO,cACP6F,mBAAoB,CAChBK,OAAQ,CAAC,CAAC2C,EAAc,gBAAgBA,EAAgB,iBACxD9C,OAAQ,iB,sUCvTpB,iCAAsCvH,GAClC,OAAO,IAAIgG,SAAQ,SAACsE,EAASC,GACzB,IAAIC,EAA+B5M,KAAKI,MACpCyM,eAAeC,QAAQ,2BAEvBF,EACAF,EAAQE,EAA6BnM,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMqB,KAAsB,GAAG2K,MAElFhG,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,kDACLC,QAAS,SAACC,GACNR,eAAeS,QAAQ,yBAA0BtN,KAAKC,UAAUoN,IAChEX,EAAQW,EAAuB5M,QAAO,SAAAC,GAAK,OAAAA,EAAEK,IAAMqB,KAAsB,GAAG2K,OAEhFvG,MAAO,WACHmG,WAWpB,sBAA2BY,GACvB,OAAO,IAAInF,SAAQ,SAACsE,EAASC,GACzB,IAAIa,EAAaxN,KAAKI,MAAMyM,eAAeC,QAAQ,eACnD,GAAIU,EAAY,CACZ,IAAIC,EAAiBD,EAAW/M,QAAO,SAAAC,GAAK,OAAAA,EAAEgN,OAASH,KAAO,GAC1DE,GACAf,EAAQe,EAAeE,aAE3BjB,EAAQ,WAER3F,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,sCACLC,QAAS,SAACI,GACNX,eAAeS,QAAQ,aAActN,KAAKC,UAAUuN,IACpD,IAAIC,EAAiBD,EAAW/M,QAAO,SAAAC,GAAK,OAAAA,EAAEgN,OAASH,KAAO,GAC1DE,GACAf,EAAQe,EAAeE,aAE3BjB,EAAQ,OAEZlG,MAAO,WACHmG,WAWpB,wCACI,OAAO,IAAIvE,SAAQ,SAACsE,EAASC,GACzB,IAAIiB,EAA0B5N,KAAKI,MAAMyM,eAAeC,QAAQ,4BAC5Dc,EACAlB,EAAQkB,GAER7G,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,mDACLC,QAAS,SAACQ,GACNf,eAAeS,QAAQ,0BAA2BtN,KAAKC,UAAU2N,IACjElB,EAAQkB,IAEZpH,MAAO,WACHmG,WAWpB,mCAAwCvK,GACpC,OAAO,IAAIgG,SAAQ,SAACsE,EAASC,GACzB,IAAIkB,EAAwC7N,KAAKI,MAC7CyM,eAAeC,QAAQ,oCAEvBe,EACAnB,EAAQmB,EAAsCC,MAAK,SAAApN,GAAK,OAAAA,GAAK0B,MAE7D2E,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,2DACLC,QAAS,SAACW,GACNlB,eAAeS,QACX,kCACAtN,KAAKC,UAAU8N,IAEnBrB,EAAQqB,EAAgCtC,SAASrJ,KAErDoE,MAAO,WACHmG,WAWpB,iDAAsDqB,GAClD,OAAO,IAAI5F,SAAQ,SAACsE,EAASC,GACzB,IAAIsB,EAAYpB,eAAeC,QAAQ,aAAekB,GAClDC,EACAvB,EAAQuB,GAERlH,EAAEiG,KAAK,CACHC,OAAQ,MACRE,IAAK,8EAAgFa,EACrFZ,QAAS,SAACa,GACNpB,eAAeS,QAAQ,aAAeU,EAAgBC,GACtDvB,EAAQuB,IAEZzH,MAAO,WACHmG,WAWpB,gCAAqCuB,GACjC,OAAO,IAAI9F,SAAQ,SAACsE,EAASC,GACpBuB,GACDxB,EAAQ,0BAEZ,IAAI7D,EAAagE,eAAeC,QAAQ,cAAgBoB,GACpDrF,EACA6D,EAAQ7D,GAER9B,EAAEiG,KAAK,CACHC,OAAQ,MACRE,IAAK,oDAAsDe,EAC3Dd,QAAS,SAACvE,GACNgE,eAAeS,QAAQ,cAAgBY,EAAOrF,GAC9C6D,EAAQ7D,IAEZrC,MAAO,WACHmG,WAapB,wBAA6B3L,EAAmBmN,EAAoBC,GAChE,YAD4C,IAAAD,OAAiB,QAAG,IAAAC,OAAkB,GAC3E,IAAIhG,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IACI,qDACAnM,EACA,UACAmN,EACA,WACAC,EACJhB,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,WACHmG,WAUhB,yBAA8B0B,GAC1B,OAAO,IAAIjG,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,MACRC,SAAU,OACVC,IAAK,uDAAyDkB,EAC9DjB,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,WACHmG,WAUhB,gCAAqCpM,GACjC,MAC8B,KAA1BA,EAAQ+N,gBACe,MAAvB/N,EAAQgO,aACyB,SAAjChO,EAAQiO,uBACgB,MAAxBjO,EAAQkO,eACW,YAAlBlO,EAAQmO,QAA0C,UAAlBnO,EAAQmO,W,gDClIjD,SAASC,EACLC,EACAC,EACAC,EACAC,GAEA,GAAyC,MAArCF,EAAmB7I,WAAW,IAA8B,GAAhB4I,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,EAAiC5O,GACtC,IAAI6O,EAAc,IAAIC,KAClBC,EAAc/O,EAAOC,QACrB,SAAAC,GACI,OAAgB,MAAfA,EAAE8O,WAAqB,IAAIF,KAAK5O,EAAE8O,WAAaH,KAC/B,MAAhB3O,EAAE+O,YAAsB,IAAIH,KAAK5O,EAAE+O,YAAcJ,MAE1D,OAAKE,EAGEA,EAAY9O,QAAO,SAAAC,GAAK,OAAAA,EAAEgP,YAAcC,KAAKC,IAAG,MAARD,KAAYJ,EAAYM,KAAI,SAAAC,GAAK,OAAAA,EAAEJ,kBAAc,GAFrF,KAKf,SAAST,EAAkBF,EAAsBD,GAC7C,OAAKC,EAGDD,EAAwBrD,SAAS,iBAAmBqD,EAAwBrD,SAAS,YAC9E,EAGJ,EANI,K,iKA1IJ,EAAA0D,oBAA8B,EAC9B,EAAAY,yBAAmC,EAE9C,gCAAqC1P,GAajC,GAA4D,MAAxDA,EAASQ,iBAAiBD,YAAYoF,WAAW,IAAsD,GAAxC3F,EAAS2P,qBAAqBC,OAAa,CAC1G,IACIC,EAAiBd,EAAiC/O,EAASE,QAAQC,QACnEwO,EAAiBC,EAAkBiB,EAAeR,WAAYQ,EAAeC,aACjF,GAAID,GAAkBlB,EAAgB,CAClC,IAAIE,EAJc,GAIJgB,EAAeR,WAA6BV,EAG1D,OAFA,EAAAe,0BAA4Bb,EAErBA,GAIf,OAAO7O,EAAS2P,qBAAuB3P,EAAS2P,qBAAqBC,OAAS,MAQlF,8BAAmC5P,EAAqB+P,GAapD,IACI,OAAK/P,GAAa+P,EAId/P,EAqCZ,SAAoCA,GAChC,IAAIuO,EAAuBvO,EAASsI,mBAAmBsH,OACnDpB,EAA6BxO,EAASQ,iBAAiBD,YACvDmO,EAAuBK,EAAiC/O,EAASE,QAAQC,QAC7E,IAAKuO,EACD,OAAO,KAEX,IAAID,EAAkCC,EAAaoB,YAC/CE,EAA6BtB,EAAauB,SAC9C,OAAO3B,EAAeC,EAAcC,EAAoBC,EAAyBuB,GA7ClEE,CAA2BlQ,GA2B9C,SAAiD+P,GAC7C,OAAOzB,EACHyB,EAAiBxB,aACjBwB,EAAiBI,mBACjBJ,EAAiBtB,wBACjBsB,EAAiBrB,cA9BV0B,CAAwCL,GANpC,KAOb,MAAO5J,GAEL,OADAkK,QAAQlK,MAAMA,GACP,OAIf,qBAA0B7B,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,uBAA4B4G,GACpBA,GACAhG,EAAE,gBAAgBI,YAAY,QAAQwJ,OAAO,QAAQ3J,KAAK,KAAK4J,KAAK7D,IAI5E,wBAA6BA,GACrBA,GACAhG,EAAE,iBAAiBI,YAAY,QAAQwJ,OAAO,QAAQ3J,KAAK,KAAK4J,KAAK7D,IAI7E,sBAA2B8D,EAAWC,GAC9BA,GACApF,EAAQqF,IAAI,iBAAmBF,EAAW,QAE9C9J,EAAE8J,GAAWG,QAAQ,QAAQ,WACzBjK,EAAE8J,GAAWlG,SAAS,QAAQ3D,KAAK,KAAK4J,KAAK,U,uIClBrD,WAWA,QACIK,EAAuBlK,EAAE,iBAE7B,2BAuaA,OAtaI,YAAAmK,YAAA,WAEI,OADAD,EAAa9J,YAAY,QAClB,IAAIiB,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,MACRE,IAAK,uCACLC,QAAS,SAAC5F,GACNkF,EAAQlF,IAEZhB,MAAO,SAAAzK,GAEH4Q,EAAO5Q,EAAKoV,eAEhBC,SAAU,WACNH,EAAatG,SAAS,eAStC,YAAArD,WAAA,WAII,OAFAoJ,QAAQW,IAAI,iBAAmB,IAAI/B,MACnC2B,EAAa9J,YAAY,QAClB,IAAIiB,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,MACRE,IAAK,mCACLC,QAAS,SAAC5F,GACNkF,EAAQlF,IAEZhB,MAAO,SAAAzK,GAEH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,KAEJyE,SAAU,WACNH,EAAatG,SAAS,QAEtB+F,QAAQW,IAAI,eAAiB,IAAI/B,aASjD,YAAAiC,wBAAA,SAAwBC,EAAmBC,GACvC,OAAO,IAAIrJ,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAMiE,KAAKC,UAAU,CACjByR,UAAWF,EACXG,gBAAiBF,IAErBG,QAAS,CACL,eAAgB,oBAEpBpM,KAAM,OACN2H,IAAK,iDACLC,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAUhB,YAAAkF,kBAAA,SAAkBC,GACd,OAAO,IAAI1J,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OAERE,IAAK,mDAAqD2E,EAC1D1E,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAUhB,YAAAoF,oBAAA,SAAoBC,GAEhB,OADAf,EAAa9J,YAAY,QAClB,IAAIiB,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAMiE,KAAKC,UAAU,CAAE+R,KAAMA,IAC7BJ,QAAS,CACL,eAAgB,oBAEpBpM,KAAM,OACN2H,IAAK,+CACLC,QAAS,SAAC5F,GACN,EAAAyK,0BAA0BzK,EAASnH,UACnCqM,EAAQlF,EAASC,OAErBjB,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,KAEJyE,SAAU,WACNH,EAAatG,SAAS,eAUtC,YAAAuH,eAAA,SAAeC,GACX,OAAO,IAAI/J,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAMiE,KAAKC,UAAUkS,GACrBP,QAAS,CACL,eAAgB,oBAEpBpM,KAAM,OACN2H,IAAK,0CACLC,QAAS,SAAC3F,GACNiF,EAAQjF,IAEZjB,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAUhB,YAAAyF,eAAA,SAAeD,GAEX,OADAlB,EAAa9J,YAAY,QAClB,IAAIiB,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAMiE,KAAKC,UAAUkS,GACrBP,QAAS,CACL,eAAgB,oBAEpBzE,IAAK,0CACLC,QAAS,SAAC3F,GACNiF,EAAQjF,IAEZjB,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,KAEJyE,SAAU,WACNH,EAAatG,SAAS,eAWtC,YAAA0H,mBAAA,SACIrR,EACAsR,EACAC,GAEA,OAAO,IAAInK,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAM,CACFiF,UAAWA,EACXJ,YAAa0R,EACbE,mBAAoBD,GAExBpF,IAAK,2CACLC,QAAS,SAAC5F,GACNkF,EAAQlF,IAEZhB,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAShB,YAAA8F,qBAAA,WACI,OAAO,IAAIrK,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,MACRE,IAAK,wCACLC,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH4Q,WAMhB,YAAA+F,6BAAA,SACIC,EACAC,EACAC,EACAC,GAEA7B,EAAa9J,YAAY,QAEzB,IAAIpL,EAAO,CACP4W,cAAeA,EACfI,oBAAqBH,EACrBE,yBAA0BA,EAC1BD,kBAAmBA,GAGvB,OAAO,IAAIzK,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,wDACLpR,KAAMiE,KAAKC,UAAUlE,GACrB6V,QAAS,CACL,eAAgB,oBAEpBpM,KAAM,OACN4H,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,aAAa/N,QAAQ,MAAO,KAC7CuJ,KAEJyE,SAAU,WACNH,EAAatG,SAAS,eAMtC,YAAAqI,2BAAA,SAA2BC,GACvB,OAAO,IAAI7K,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,mEAAmE8F,EACxE7F,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,EAAO5Q,EAAKoV,eAEhBC,SAAU,mBAStB,YAAA8B,8BAAA,SAA8BD,EAA0BE,GACpD,OAAO,IAAI/K,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,4EAA4E8F,EAAgB,eAAeE,EAChH/F,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH4Q,KAEJyE,SAAU,mBAKtB,YAAAgC,uBAAA,SACIC,EACAC,EACAC,EACAC,EACAC,GAEA,OAAO,IAAIrL,SAAQ,SAACsE,EAASC,GACzB,IAAI5Q,EAAO,CACPsX,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,EACdC,kBAAmBA,EACnBC,YAAaA,GAGjB1M,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,0DACLyE,QAAS,CACL,eAAgB,oBAEpB7V,KAAMiE,KAAKC,UAAUlE,GACrBqR,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACsB,UAArBA,EAAKoV,aACLzR,OAAOgU,SAASC,UAEhB,EAAArC,YAAYvV,EAAKoV,cACjBxE,YAOpB,YAAAiH,2BAAA,SACIb,EACAc,EACAJ,GAEA,OAAO,IAAIrL,SAAQ,SAACsE,EAASC,GACzB,IAAI5Q,EAAO,CACPgX,oBAAqBA,EACrBe,kBAAmBD,EACnBJ,YAAaA,GAGjB1M,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,8DACLyE,QAAS,CACL,eAAgB,oBAEpB7V,KAAMiE,KAAKC,UAAUlE,GACrBqR,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAMhB,YAAAoH,yBAAA,SAAyBC,GACrB,OAAO,IAAI5L,SAAQ,SAACsE,EAASC,GACzB,IAAI5Q,EAAO,CACPsX,eAAgBW,EAAUX,eAC1BC,gBAAiBU,EAAUV,iBAG/BvM,EAAEiG,KAAK,CACHC,OAAQ,OACRE,IAAK,gEACLyE,QAAS,CACL,eAAgB,oBAEpB7V,KAAMiE,KAAKC,UAAUlE,GACrBqR,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACsB,UAArBA,EAAKoV,aACLzR,OAAOgU,SAASC,UAEhB,EAAArC,YAAYvV,EAAKoV,cACjBxE,YAOpB,YAAAsH,kBAAA,SAAkBC,GACd,OAAO,IAAI9L,SAAQ,SAACsE,EAASC,GACzB5F,EAAEiG,KAAK,CACHC,OAAQ,OACRlR,KAAMiE,KAAKC,UAAU,CACjBpB,MAAOqV,EACP/G,IAAKzN,OAAOgU,SAASS,OAEzBvC,QAAS,CACL,eAAgB,oBAEpBpM,KAAM,OACN2H,IAAK,+CACLC,QAAS,SAAArR,GACL2Q,EAAQ3Q,IAEZyK,MAAO,SAAAzK,GACH,EAAAuV,YAAYvV,EAAKoV,cACjBxE,WAKpB,EAvaA,GAAa,EAAAjG,oB","file":"checkoutStep2.c4ea509f776a7d6681df.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\t4: 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([294,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: lineItem.product.authorList !== null ?\r\n lineItem.product.authorList +\r\n ' - ' +\r\n lineItem.product.titleMain : 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","/**\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 { onloadTracking } from './Tracking/checkoutTrackingStep2';\r\nimport { CheckoutService } from \"./checkoutService\";\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport { trackPrefixNameProblem } from '../Tracking/GoogleTracking';\r\nconst checkoutService = new CheckoutService();\r\n\r\n$(() => {\r\n checkoutService.showBasket()\r\n .then(async (response: ICheckoutflowResponse) => {\r\n let cart = response.cart; \r\n onloadTracking(cart);\r\n })\r\n\r\n if ($(\"#RegisterErrorOccured\").val() == \"True\") {\r\n loginSlides($(\"#registerButton\"));\r\n }\r\n\r\n $(\".loginDataSection-trigger\").click(function (event) {\r\n event.preventDefault();\r\n loginSlides($(this));\r\n });\r\n\r\n $('#checkoutRegisterForm').on('submit', function (e) {\r\n const middleName = $(e.target).find(\"#MiddleName\").val();\r\n const lastName = $(e.target).find(\"#Surname\").val();\r\n\r\n if (middleName && !lastName) {\r\n trackPrefixNameProblem();\r\n }\r\n });\r\n\r\n\r\n});\r\n\r\nfunction loginSlides(button : JQuery) {\r\n var getId = button.attr(\"data-target\");\r\n\r\n $(\"#mm-content-01\").find(\".link\").show();\r\n if (getId == \"#mm-content-02\") {\r\n $(\"#mm-content-01\").next(\".min-max-content\").removeClass(\"hideContent\").slideUp();\r\n $(\"#mm-content-02\").next(\".min-max-content\").removeClass(\"hideContent\").slideDown();\r\n $(\"#mm-content-03\").next(\".min-max-content\").removeClass(\"hideContent\").slideUp();\r\n }\r\n if (getId == \"#mm-content-03\") {\r\n $(\"#mm-content-01\").next(\".min-max-content\").removeClass(\"hideContent\").slideUp();\r\n $(\"#mm-content-02\").next(\".min-max-content\").removeClass(\"hideContent\").slideUp();\r\n $(\"#mm-content-03\").next(\".min-max-content\").removeClass(\"hideContent\").slideDown();\r\n }\r\n}\r\n","declare var dataLayer: any[];\r\nimport ProductHelper = require('../../Shared/ProductHelper');\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { formatPrice2Digits } from '../../Shared/PriceHelper';\r\nimport { getProductNetPrice } from './checkoutTrackingHelper';\r\ndeclare var dataLayer: any[];\r\ndeclare var __ucCmp: any;\r\n\r\n/**\r\n * führt den dataLayer-Push im Step 2 des Checkouts durch.\r\n * Für Warenkorb-onload\r\n * @param lineItems\r\n */\r\nexport async function onloadTracking(cart: ICart): Promise {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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\r\n ? formatPrice2Digits(getProductNetPrice(lineItem), true)\r\n : '';\r\n productPrices.push(productNetPrice);\r\n let breadcrumb: string = await ProductHelper.getBreadcrumbByTocId(product.mainTocNodeId);\r\n products.push({\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 pageTitle: 'Anmeldung, Registrierung, Gastbestellung',\r\n event: 'eec.checkoutStep',\r\n ecommerce: {\r\n checkout: {\r\n actionField: { step: 2 },\r\n products: products,\r\n },\r\n },\r\n });\r\n } else {\r\n setTimeout(onloadTracking.bind(null, cart), 100);\r\n }\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 __ucCmp: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n * @param eventName Der Name des Trackingevents\r\n */\r\nexport async function trackGooglePromotionEvent_view(eventName: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 async function MerklisteKarusellInViewTracking() {\r\n await 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 async function loginTracking(pageType: string, loggedInResult: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 async function pushTrboId(eId: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 async function trackIdLayerComplete(hId: string, hMail: string, hKid: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 async function trackIdLayerReduced(hMail: string, eventName: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 async 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 await trboPromotionViewTracking();\r\n}\r\n\r\nasync function trboPromotionViewTracking() {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.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 && moduleId && campaignId) {\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 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":""}