{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/src/js/utils/form-validation-utils.js","webpack:///./assets/src/js/modules/consumer-account/account-api.js","webpack:///./assets/src/js/modules/consumer-account/account-status-helpers.js","webpack:///./assets/src/js/utils/url-utils.js","webpack:///./assets/src/js/modules/consumer-account/login.js","webpack:///./assets/src/js/product-registration.js","webpack:///./assets/src/js/modules/product-registration/add-product-new.js","webpack:///./assets/src/js/modules/product-registration/complete-registration.js","webpack:///./assets/src/js/modules/consumer-account/authentication.js","webpack:///./assets/src/js/modules/product-registration/registration-info.js","webpack:///./assets/src/js/modules/consumer-account/create-account.js","webpack:///./assets/src/js/modules/accessibility/status-messages.js","webpack:///./assets/src/js/modules/site-modal.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","validateByType","type","val","status","RegExp","test","addRequiredAttrs","form","inputList","querySelectorAll","length","setAttribute","clearInputValues","init","validate","fieldList","fieldErrorList","field","isValid","required","isFormValid","getAttribute","fieldWrapper","querySelector","id","parentNode","fieldError","classList","remove","add","push","focus","formatPhone","match","arr","join","substring","positionWindowAtFormElement","options","position","element","offsetTop","offset","window","scrollTo","top","behavior","removeAllErrors","removeRequiredAttrs","removeAttribute","resetSelectValues","selectList","firstOption","digitalUserApi","digitalUserApiEndoint","addDealer","data","callback","request","XMLHttpRequest","open","setRequestHeader","onload","responseData","JSON","parse","responseText","updateAccountIconStatus","updateAccountStatusMessage","onerror","console","log","send","stringify","userId","addPhoto","imageUrl","thumbUrl","description","productLineId","productLineName","addProduct","addSwatch","colorName","colorNumber","displayMessage","newSwatch","partNumber","colorRange","swatchKey","tileName","widenUrl","addVisualization","dealerIdParam","getParameterByName","requestUrl","micrositeName","toString","createAccount","callbacks","onSuccess","e","onError","forgotPassword","username","getAccountData","getItemsByType","localTesting","hasAssets","login","password","rememberMe","onloadend","logout","removeItemByType","msgType","updateAccount","updatePassword","updateProduct","showNavIndicator","icon","document","isAuthenticated","assetType","action","msgDiv","innerHTML","setTimeout","detectProduction","location","href","indexOf","url","results","replace","exec","decodeURIComponent","initialLanuch","modalDiv","modal","SiteModal","onClose","clearFormData","onModalButtonClick","event","preventDefault","launchLoginModal","onLoginSuccess","isNewAccount","myAccountUrl","onLoginFail","onLogoutButtonClick","loginUrl","checkLoginStatus","body","getElementsByTagName","modalBtns","map","btn","removeEventListener","removeModalEventHandlers","logoutBtns","addEventListener","addLogoutEventHandlers","addModalEventHandlers","toggleCreateAccountForm","isVisible","style","height","resetCreateAccountForm","msg","loginMessageSwatch","loginMessagePhoto","loginMessageProduct","loginMessageDealer","loginMessageVisualization","loginSubmitBtn","modalForm","modalErrorMsg","remember","getElementById","success","close","announceMessage","updateHeight","onLoginSubmit","stopPropagation","setCreateAccountFocus","addCreateAccountCallbacks","submitForm","tooltipBtn","tooltip","findOrderBtn","completeRegistrationBtn","productsWrapper","defaultErrorMsg","duplicateItemsErrorMsg","unsavedItemsErrorMsg","mulitpleLineItemsMsg","orderData","storeGroup","storeGroupDescription","checkForSessionData","sessionStorage","getItem","getProductCodeEntry","getUserId","isNaN","sessionObj","enableUiBtn","label","className","removeSaveResponseMessages","displaySaveResponseMessages","response","errorType","multipleItemsPerLine","submitLead","userData","page_submitted_from","customer_store_group","customer_store_group_description","failure","_dcq","removeItem","defaultBtnLabel","textContent","disableUiBtn","addProductsEndpoint","OrderNumber","setStoreGroupValues","lineItemsDiv","ul","createElement","lineItems","li","zeroCt","item","substr","append","onOrderNumberLookupSuccess","UserId","thankYouAuthenticatedLink","thankYouNoAccountLink","contains","passwordMatch","passIpt","passConfirmIpt","scrollToPageTop","submitBtn","mismatchErrorMsg","existingErrorMsg","accountCreationErrorMsg","passwordStrengthErrorMsg","setCookieValue","passwordStrength","getCookieValue","cookies","cookie","split","getLoggedInStatus","parseInt","date","Date","year","getFullYear","month","getMonth","day","getDate","expiryDate","toUTCString","sessionUserId","isExistingAccount","saveSessionData","setItem","tags","optInVal","email","first_name","last_name","phone","address1","address2","city","state","zip","country","source","serverErrorMsg","address","AddProductsUrl","runUpdateAccount","isAddAccount","runCreateAccount","onSubmitCallbacks","removeCreateAccountCallbacks","disableScroll","errorMsg","updateModalHeight","contentHeight","offsetHeight","checked","message","alertStatusMessage","div","appendChild","this","onOpen","isOpen","previousElementInFocus","onResize","onDocumentModalKeyUp","toggleBtn","keyCode","resetFocus","setPreviousElementInFocus","activeElement"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,oFChF/CC,EAAiB,SAACC,EAAMC,GAE5B,IAAIC,EACJ,OAAQF,GACN,IAAK,OACHE,EAAiB,KAAR,EACT,MACF,IAAK,QACHA,EAAS,IAAIC,OAAO,uDAAuDC,KAAKH,GAChF,MACF,IAAK,UACHC,EAAS,IAAIC,OAAO,mFAAmFC,KAAKH,GAC5G,MACF,IAAK,QAEHC,EAAS,IAAIC,OAAO,0JAA0JC,KAAKH,GAEnL,MACF,IAAK,WACHC,EAAS,IAAIC,OAAO,qEAAqEC,KAAKH,GAC9F,MACF,IAAK,cAGHC,EAAS,IAAIC,OAAO,cAAcC,KAAKH,GAK3C,OAAOC,G,EAsIPG,iBAxDuB,SAACC,GAExB,QADMC,EAAYD,EAAKE,iBAAiB,wDAC/BzC,EAAI,EAAGA,EAAIwC,EAAUE,OAAQ1C,IACpCwC,EAAUxC,GAAG2C,aAAa,WAAY,a,EAsDxCC,iBA3CuB,SAACL,GAExB,QADMC,EAAYD,EAAKE,iBAAiB,wDAC/BzC,EAAI,EAAGA,EAAIwC,EAAUE,OAAQ1C,IACpCwC,EAAUxC,GAAGiB,MAAQ,I,EAyCvB4B,KAPW,a,EAQXC,SA1He,SAACP,GAQhB,QANMQ,EAAYR,EAAKE,iBAAiB,cAClCO,EAAiB,GACnBC,SACAC,SACAC,SACAC,KACKpD,EAAI,EAAGA,EAAI+C,EAAUL,OAAQ1C,IAAK,CAEzCkD,MACAC,EAA8C,QAF9CF,EAAQF,EAAU/C,IAEDqD,aAAa,eAG5BH,EAAUlB,EAAeiB,EAAMI,aAAa,YAAaJ,EAAMhC,QAG5DkC,GAA4B,KAAhB,EAAMlC,OAAmD,SAAnC,EAAMoC,aAAa,cACxDH,EAAUlB,EAAeiB,EAAMI,aAAa,YAAaJ,EAAMhC,QAVxB,IAanCqC,EAAef,EAAKgB,cAAL,SAA4BN,EAAMO,GAAlC,MAA0CC,WACzDC,EAAaJ,EAAaC,cAAc,gBACzCL,GAUHI,EAAaK,UAAUC,OAAO,kBAC1BF,IACFA,EAAWC,UAAUC,OAAO,0BAC5BF,EAAWC,UAAUE,IAAI,6BAZ3BT,EAAcF,EAEdI,EAAaK,UAAUE,IAAI,kBACvBH,IACFA,EAAWC,UAAUE,IAAI,0BACzBH,EAAWC,UAAUC,OAAO,2BAE9BZ,EAAec,KAAKb,IAexB,OAJ4B,EAAxB,EAAeP,QAEjBM,EAAe,GAAGe,QAEbX,G,EA6EPY,YAtIkB,SAACjC,GACnB,GAAU,MAAN,GAAuC,KAAN,EAAU,CAC7C,GAAyC,OAArC,EAAEkC,MAAM,IAAI7B,OAAO,QAAU,IAAc,CAC7C,IAAM8B,EAAMnC,EAAEkC,MAAM,IAAI7B,OAAO,QAAU,IAAI+B,KAAK,IAClD,OAAUD,EAAIE,UAAU,EAAG,GAA3B,IAAiCF,EAAIE,UAAU,EAAG,GAAlD,IAAwDF,EAAIE,UAAU,GAExE,OAAOrC,EAET,OAAOA,G,EA+HPsC,4BA7BkC,SAACC,GACnC,IAAIC,EAAW,EACXD,EAAQE,UAEVD,EAAWD,EAAQE,QAAQC,WAEzBH,EAAQC,WACVA,EAAWD,EAAQC,UAErB,IAAIG,EAASJ,EAAQI,OAChBA,IACHA,EAAS,GAEXC,OAAOC,SAAS,CACdC,IAAKN,EAAWG,EAChBI,SAAU,Y,EAeZC,gBA5EsB,SAACxC,GAEvB,QADMQ,EAAYR,EAAKE,iBAAiB,cAC/BzC,EAAI,EAAGA,EAAI+C,EAAUL,OAAQ1C,IAAK,CAAC,IACpCiD,EAAQF,EAAU/C,GAClBsD,EAAef,EAAKgB,cAAL,SAA4BN,EAAMO,GAAlC,MAA0CC,WACzDC,EAAaJ,EAAaC,cAAc,gBAC9CD,EAAaK,UAAUC,OAAO,kBAC1BF,IACFA,EAAWC,UAAUC,OAAO,0BAC5BF,EAAWC,UAAUE,IAAI,6B,EAoE7BmB,oBAxD0B,SAACzC,GAE3B,QADMC,EAAYD,EAAKE,iBAAiB,wDAC/BzC,EAAI,EAAGA,EAAIwC,EAAUE,OAAQ1C,IACpCwC,EAAUxC,GAAGiF,gBAAgB,a,EAsD/BC,kBA3CwB,SAAC3C,GAEzB,QADM4C,EAAa5C,EAAKE,iBAAiB,UAChCzC,EAAI,EAAGA,EAAImF,EAAWzC,OAAQ1C,IAAK,CAAC,IAErCoF,EADSD,EAAWnF,GACCuD,cAAc,sBACrC6B,IACFD,EAAWnF,GAAGiB,MAAQmE,EAAYnE,S,EAsCtCe,kB,8UCxKIqD,EAAiBV,OAAOW,sB,EAgiB5BC,UAhbgB,SAACC,EAAMC,GAAc,IAE/BC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAFSP,EAEtB,cACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,IAEX,IAAAI,4BACA,IAAAC,4BAA2B,SAAU,SAGzCV,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEdb,EAAQc,KAAKR,KAAKS,UAAU,CAC1B,UAAW9B,OAAO+B,OAClB,YAAalB,EAAK,aAClB,kBAAmBA,EAAK,uB,EA4Z1BmB,SA5de,SAACnB,EAAMC,GAAc,IAElCmB,EAKEpB,EALFoB,SACAC,EAIErB,EAJFqB,SACAC,EAGEtB,EAHFsB,YACAC,EAEEvB,EAFFuB,cACAC,EACExB,EADFwB,gBAGItB,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAFSP,EAEtB,aACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,IAEX,IAAAI,4BACA,IAAAC,4BAA2B,QAAS,SAGxCV,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAUdb,EAAQc,KAAKR,KAAKS,UAAU,CAC1B,UAAW9B,OAAO+B,OAClB,YAAaE,EACb,gBAAiBC,EACjBC,cACA,kBAAmBC,EACnB,oBAAqBC,M,EAsbvBC,WAhiBiB,SAACzB,EAAMC,GACxBD,EAAK,WAAab,OAAO+B,OADY,IAG/BhB,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAFSP,EAEtB,eACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,IAEX,IAAAI,4BACA,IAAAC,4BAA2B,UAAW,SAG1CV,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEdb,EAAQc,KAAKR,KAAKS,UAAUjB,K,EA8gB5B0B,UA1ZgB,SAAC1B,EAAMC,GAAc,IAEnC0B,EASE3B,EATF2B,UACAC,EAQE5B,EARF4B,YACAC,EAOE7B,EAPF6B,eACAC,EAME9B,EANF8B,UACAC,EAKE/B,EALF+B,WACAC,EAIEhC,EAJFgC,WACAC,EAGEjC,EAHFiC,UACAC,EAEElC,EAFFkC,SACAC,EACEnC,EADFmC,SAGIjC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAFSP,EAEtB,eACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,IAEX,IAAAI,4BACA,IAAAC,4BAA2B,SAAU,SAGzCV,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAUdb,EAAQc,KAAKR,KAAKS,UAAU,CAC1B,UAAW9B,OAAO+B,OAClB,aAAce,EACd,cAAeF,EACf,aAAcJ,EACd,eAAgBC,EAChB,cAAeI,EACf,aAAcF,EACd,YAAaI,EACb,YAAaC,EACb,kBAAmBN,M,EA4WrBO,iBAxfuB,SAACpC,EAAMC,GAC9B,IAAIoC,EAAgB,GACmB,MAAnC,IAAAC,oBAAmB,cACrBD,gBAA6B,IAAAC,oBAAmB,aAHP,IAKrCC,EAAgB1C,EAAhB,uBAAqDV,OAAO+B,OAA5D,UAA4E/B,OAAOqD,cAAgBH,EACnGnC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAAQmC,GAArB,GACArC,EAAQG,iBAAiB,eAAgB,cACzCH,EAAQG,iBAAiB,SAAU,oBACnCH,EAAQI,OAAS,WACO,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,SAC/BsD,GACFA,KAEF,IAAAU,4BACA,IAAAC,4BAA2B,mBAAoB,SAGnDV,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEdb,EAAQc,KAAKhB,EAAKyC,a,EAmelBC,cA/DoB,SAAC1C,EAAM2C,GAAe,IAEpCzC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAAb,yBACAF,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OACnC,IACE,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCiC,EAAUC,WACZD,EAAUC,UAAUrC,GAEtB,MAAOsC,GACPF,EAAUG,QAAQD,KAIxB3C,EAAQW,QAAU,WAChB,GAAI8B,EAAUG,QAAS,CACrB,IAAMvC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUG,QAAQvC,KAUtBL,EAAQc,KAAKR,KAAKS,UAAU,CAC1BjB,KAAMQ,KAAKS,UAAUjB,O,EAiCvB+C,eA7NqB,SAAC/C,EAAM2C,GAAe,IAEzCK,EACEhD,EADFgD,SAGI9C,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAAb,8CACAF,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAKgG,EACH,OAEF,GAAIA,EAAUC,UAAW,CACvB,IAAMrC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUC,UAAUrC,MAI1BL,EAAQW,QAAU,WAChB,GAAK8B,GAGDA,EAAUG,QAAS,CACrB,IAAMvC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUG,QAAQvC,KAGtBL,EAAQc,KAAKR,KAAKS,UAAU,CAC1B+B,e,EAiMFC,eAjPqB,SAAChD,GAAc,IAC9BsC,EAAgB1C,EAAhB,YAA0CV,OAAO+B,OACjDhB,EAAU,IAAIC,eACpBD,EAAQE,KAAK,MAAOmC,GAApB,GACArC,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,KAIfL,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEdb,EAAQc,Q,EAkORkC,eAnTqB,SAACzG,EAAMwD,GAC5B,IAAIsC,EACJ,OAAQ9F,GACN,IAAK,WACH8F,EAAgB1C,EAAhB,iBAA+CV,OAAO+B,OACtD,MACF,IAAK,QACHqB,EAAgB1C,EAAhB,gBAA8CV,OAAO+B,OACrD,MACF,IAAK,UACHqB,EAAgB1C,EAAhB,kBAAgDV,OAAO+B,OACvD,MACF,IAAK,SACHqB,EAAgB1C,EAAhB,mBAAiDV,OAAO+B,OACxD,MACF,IAAK,gBACHqB,EAAgB1C,EAAhB,wBAAsDV,OAAO+B,OAA7D,SAA4E/B,OAAOqD,cAKvF,IAAMtC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,MAAOmC,GAApB,GACArC,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CAEjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,KAIfL,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAGV5B,OAAOgE,aAyBXjD,EAAQc,Q,EAsPRoC,UAhCgB,SAACnD,GAAc,IACzBsC,EAAgB1C,EAAhB,eAA6CV,OAAO+B,OACpDhB,EAAU,IAAIC,eACpBD,EAAQE,KAAK,MAAOmC,GAApB,GACArC,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,KAIfL,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEV5B,OAAOgE,cAGXjD,EAAQc,Q,EAcRqC,MAhMY,SAACrD,EAAM2C,GAAe,IAEhCK,EAGEhD,EAHFgD,SACAM,EAEEtD,EAFFsD,SACAC,EACEvD,EADFuD,WAGIrD,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAAb,iBACAF,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAKgG,EACH,OAEF,GAAIA,EAAUC,UAAW,CACvB,IAAMrC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUC,UAAUrC,MAI1BL,EAAQW,QAAU,WAChB,GAAK8B,GAGDA,EAAUG,QAAS,CACrB,IAAMvC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUG,QAAQvC,KAGlBpB,OAAOgE,eACTjD,EAAQsD,UAAY,WACdb,GAIFA,EAAUG,QAAQ,WAIxB5C,EAAQc,KAAKR,KAAKS,UAAU,CAC1BjB,KAAMQ,KAAKS,UAAU,CACnB,iBAAkB9B,OAAOqD,cACzBQ,WACAM,WACAC,mB,EAoJJE,OA/Ia,SAACd,GAAe,IAEvBzC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAAb,cAEAF,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAKgG,EACH,OAEF,GAAIA,EAAUC,UAAW,CAEvB,IAAMrC,EAAeL,EAAQQ,aAC7BiC,EAAUC,UAAUrC,MAI1BL,EAAQW,QAAU,WAChB,GAAK8B,GAGDA,EAAUG,QAAS,CAErB,IAAMvC,EAAeL,EAAQQ,aAC7BiC,EAAUG,QAAQvC,KAGtBL,EAAQc,Q,EAqHR0C,iBAhXuB,SAACjH,EAAMuB,EAAIiC,GAAc,IAE5CsC,SACAoB,EAAU,GACd,OAAQlH,GACN,IAAK,WACH8F,EAAgB1C,EAAhB,UACA8D,EAAU,SACV,MACF,IAAK,QACHpB,EAAgB1C,EAAhB,SACA8D,EAAU,QACV,MACF,IAAK,UACHpB,EAAgB1C,EAAhB,WACA8D,EAAU,UACV,MACF,IAAK,gBACHpB,EAAgB1C,EAAhB,iBACA8D,EAAU,mBACV,MACF,IAAK,SACHpB,EAAgB1C,EAAhB,WACA8D,EAAU,SAKd,IAAMzD,EAAU,IAAIC,eACpBD,EAAQE,KAAK,SAAUmC,GAAvB,GACArC,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,IAEX,IAAAI,4BACA,IAAAC,4BAA2B+C,EAAS,YAGxCzD,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAUdb,EAAQc,KAAKR,KAAKS,UAAU,CAC1B,WAAYjD,M,EA4Td4F,cA7FoB,SAAC5D,EAAM2C,GAAe,IAEpCzC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,QAFSP,EAEtB,eACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCiC,EAAUC,WACZD,EAAUC,UAAUrC,KAI1BL,EAAQW,QAAU,WAChB,GAAI8B,EAAUG,QAAS,CACrB,IAAMvC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUG,QAAQvC,KAGtBL,EAAQc,KAAKR,KAAKS,UAAUjB,K,EA2E5B6D,eApHqB,SAAC7D,EAAM2C,GAAe,IAErCzC,EAAU,IAAIC,eACpBD,EAAQE,KAAK,QAFSP,EAEtB,gBACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCiC,EAAUC,WACZD,EAAUC,UAAUrC,KAI1BL,EAAQW,QAAU,WAChB,GAAI8B,EAAUG,QAAS,CACrB,IAAMvC,EAAeC,KAAKC,MAAMP,EAAQQ,cACxCiC,EAAUG,QAAQvC,KAGtBL,EAAQc,KAAKR,KAAKS,UAAUjB,K,EAkG5B8D,cAvhBoB,SAAC9D,EAAMC,GAC3BD,EAAK,WAAab,OAAO+B,OADe,IAGlChB,EAAU,IAAIC,eACpBD,EAAQE,KAAK,MAFSP,EAEtB,eACAK,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cACpCT,GACFA,EAASM,KAIfL,EAAQW,QAAU,WAChBC,QAAQC,IAAI,UAEdb,EAAQc,KAAKR,KAAKS,UAAUjB,M,uJC5CxB+D,EAAmB,SAACpH,GAAY,IAC9BqH,EAAOC,SAASlG,cAAc,mCAG/BpB,EAGHqH,EAAK7F,UAAUE,IAAf,0BAFA2F,EAAK7F,UAAUC,OAAf,2B,EAqCFuC,wBAd8B,WACzBxB,OAAO+E,kBAGZ,IAAAd,YAAU,SAACpD,GACLA,EAAK,cACP+D,GAAiBA,GAEjBA,GAAiBA,O,EAOrBnD,2BAhCiC,SAACuD,EAAWC,GAC7C,IAAMC,EAASJ,SAASlG,cAAc,wCACjCoB,OAAO+E,iBAAoBG,IAIhCA,EAAOC,UAAY,GACnBC,YAAW,WACM,QAAX,IACFF,EAAOC,UAAeH,EAAtB,sCAEa,WAAX,IACFE,EAAOC,UAAeH,EAAtB,4CAED,Q,gFCCHK,iBAZuB,WAAY,SAEyB,IAA1DrF,OAAOsF,SAASC,KAAKC,QAAQ,0BACiC,IAA9DxF,OAAOsF,SAASC,KAAKC,QAAQ,8BACgC,IAA7DxF,OAAOsF,SAASC,KAAKC,QAAQ,6B,EAS/BrC,mBA7ByB,SAACvH,EAAM6J,GAChC,IAAIH,EAAWG,EACVH,IACHA,EAAWtF,OAAOsF,SAASC,MAHW,IAMlCG,EADQ,IAAIjI,OAAJ,OAAkB7B,EAAK+J,QAAQ,UAAW,QAA1C,qBACQC,KAAKN,GANa,OAOnCI,GAGAA,EAAQ,GAGNG,mBAAmBH,EAAQ,GAAGC,QAAQ,MAAO,MAL3C,K,kOCFPG,KAGEC,EAAWjB,SAASlG,cAAT,qBACXoH,EAAQ,IAAIC,UAAU,CAC1BpH,GAAGA,mBACH2E,UAAW,CACT0C,QAAS,WACPC,QAKAA,EAAgB,WAEpB,IAAMvI,EAAOmI,EAASnH,cAAc,0BAChChB,KACF,IAAAK,kBAAiBL,IACjB,IAAAwC,iBAAgBxC,GAChBA,EAAKgB,cAAc,uBAAuBI,UAAUE,IAAI,UA4DtDkH,EAAqB,SAACC,GAGtBrG,OAAO+E,kBAGXsB,EAAMC,iBACNC,EAAiB,CACfjJ,KAAM,GACNkG,UAAW,CACTgD,eAAgB,SAACC,GAEbzG,OAAOsF,SADLmB,EACmBzG,OAAO0G,aAFE,mBAIZ1G,OAAO0G,cAG7BC,YAAa,kBAObC,EAAsB,SAACP,GAC3BA,EAAMC,kBACN,IAAAhC,QAAO,CACLb,UAAW,WACTzD,OAAOsF,SAAWtF,OAAO6G,aA8BzBC,EAAmB,SAAChG,GAExB,IAAMiG,EAAOjC,SAASkC,qBAAqB,QAAQ,GAC/ChH,OAAO+E,iBACTgC,EAAK/H,UAAUE,IAAI,oBAtBU,WAC/B,IAAM+H,EAAYnC,SAAShH,iBAAiB,yBAGxCmJ,GACF,GAAGC,IAAI1L,KAAKyL,GAAW,mBAAOE,EAAIC,oBAAoB,QAAShB,MAkB/DiB,GA9B2B,WAC7B,IAAMC,EAAaxC,SAAShH,iBAAiB,yCACzCwJ,GACF,GAAGJ,IAAI1L,KAAK8L,GAAY,mBAAOH,EAAII,iBAAiB,QAASX,MA4B7DY,GACI1G,GACFA,KAEF,IAAAU,6BAEAuF,EAAK/H,UAAUC,OAAO,oBArBI,WAC5B,IAAMgI,EAAYnC,SAAShH,iBAAiB,yBAGxCmJ,GACF,GAAGC,IAAI1L,KAAKyL,GAAW,mBAAOE,EAAII,iBAAiB,QAASnB,MAiB5DqB,IACA,IAAAjG,6BAIEkG,EAA0B,SAACC,GAC3BA,GACF5B,EAASnH,cAAc,4BAA4BI,UAAUE,IAAI,UAEjE6G,EAASnH,cAAc,6BAA6BI,UAAUC,OAAO,UAEF,IAA/D8G,EAASjI,iBAAiB,0BAA0BC,QACtDgI,EAASnH,cAAc,0BAA0BI,UAAUE,IAAI,UAEjE6G,EAAS6B,MAAMC,OAAS,UAExB9B,EAASnH,cAAc,4BAA4BI,UAAUC,OAAO,UAEpE8G,EAASnH,cAAc,6BAA6BI,UAAUE,IAAI,UAElE6G,EAASzF,gBAAgB,SAC0C,IAA/DyF,EAASjI,iBAAiB,0BAA0BC,QACtDgI,EAASnH,cAAc,0BAA0BI,UAAUC,OAAO,YAKlEsH,EAAmB,SAAC5G,GAExB+H,KACA,IAAAI,wBAAuB,CACrBlK,KAAMkH,SAASlG,cAAc,6BAJK,IAOlCtB,EAEEqC,EAFFrC,KACAkG,EACE7D,EADF6D,UAEF,GAAIlG,EAAM,CACRyI,EAAS/G,UAAUE,IAAI,mBACvB6G,EAASnH,cAAc,0BAA0BI,UAAUC,OAAO,UAClE,IAAI8I,EAAM,GACV,OAAQzK,GACN,IAAK,SACHyK,EAAM/H,OAAOgI,mBACb,MACF,IAAK,QACHD,EAAM/H,OAAOiI,kBACb,MACF,IAAK,UACHF,EAAM/H,OAAOkI,oBACb,MACF,IAAK,WACHH,EAAM/H,OAAOmI,mBACb,MACF,IAAK,gBACHJ,EAAM/H,OAAOoI,0BAKjBrC,EAASnH,cAAc,4BAA4BuG,UAAY4C,OAE/DhC,EAAS/G,UAAUC,OAAO,mBAC1B8G,EAASnH,cAAc,0BAA0BI,UAAUE,IAAI,UAC/D6G,EAASnH,cAAc,4BAA4BuG,UAAY,GAEjEa,EAAM/E,OAEN,IAAMoH,EAAiBtC,EAASnH,cAAc,sCAE1CkH,IACFA,KACAuC,EAAed,iBAAiB,SAAS,SAAClB,IAvMxB,SAACA,EAAO7C,GAC5B6C,EAAMC,iBADoC,IAEpCgC,EAAYxD,SAASlG,cAAc,0BACnC2J,EAAgBD,EAAU1J,cAAc,uBAC9C,IAAI,IAAAT,UAASmK,GAAY,CACvBC,EAAcvJ,UAAUE,IAAI,QAE5B6G,EAASzF,gBAAgB,SACzB,IAAIkI,KACqE,IAArE1D,SAAShH,iBAAiB,gCAAgCC,SAC5DyK,OAEF,IAAAtE,OACE,CACEL,SAAUiB,SAAS2D,eAAe,qBAAqBnM,MACvD6H,SAAUW,SAAS2D,eAAe,qBAAqBnM,MACvD8H,WAAYoE,GAEd,CACE/E,UAAW,SAAC5C,GAELA,EAAK6H,SAKR1I,OAAO+E,iBAAP,EACA/E,OAAO+B,OAASlB,EAAK,WACrBiG,GAAiB,WACXtD,GACEA,EAAUgD,gBACZhD,EAAUgD,oBAIhBR,EAAM2C,UAbNJ,EAAcvJ,UAAUC,OAAO,QAC/Be,OAAO4I,gBAAgBL,EAAcpD,WACrCa,EAAM6C,iBAcVlF,QAAS,WACP4E,EAAcvJ,UAAUC,OAAO,QAC/Be,OAAO4I,gBAAgBL,EAAcpD,WACrCa,EAAM6C,gBACDrF,GAGDA,EAAUmD,aACZnD,EAAUmD,sBAMlBX,EAAM6C,eAoJJC,CAAczC,EAAO7C,MAEvB,GAAG0D,IAAI1L,KAAKuK,EAASjI,iBAAiB,+BAA+B,mBAAOqJ,EAAII,iBAAiB,SAAS,SAAClB,GACzGA,EAAM0C,kBACN/C,EAAM2C,QACFnF,EAAUmD,aACZnD,EAAUmD,oBAKd,GAAGO,IAAI1L,KAAKsJ,SAAShH,iBAAiB,sEAAsE,mBAAOqJ,EAAII,iBAAiB,SAAS,SAAClB,IAChJ,IAAA2C,uBAAsB,CACpBpL,KAAMkH,SAASlG,cAAc,6BAE/ByH,EAAMC,kBACN,IAAA2C,2BAA0B,CACxBzC,eAAgB,WACdhD,EAAUgD,gBAAV,GACAR,EAAM2C,SAERhC,YAAa,WACXnD,EAAUmD,iBAGde,GAAwBA,GACxB1B,EAAM6C,sBAGV7C,EAAM6C,gB,EAYN/B,mB,EACA5I,KANW,WACX4I,K,EAMAP,mB,EACA2C,WAZiB,SAACrI,EAAM2C,IACxB,IAAAU,OAAMrD,EAAM2C,K,kHCjQ6B,OAAvCsB,SAASlG,cAAc,cACzB,eAEsD,OAApDkG,SAASlG,cAAc,2BACzB,eAE+D,OAA7DkG,SAASlG,cAAc,oCACzB,gB,mGCRkB,WAClB,GAAwD,OAApDkG,SAASlG,cAAc,yBAA3B,KAIMhB,EAAOkH,SAASlG,cAAc,yBAC9BuK,EAAavL,EAAKgB,cAAc,iCAChCwK,EAAUxL,EAAKgB,cAAc,+BAC7ByK,EAAezL,EAAKgB,cAAc,eAClC0K,EAA0BxE,SAASlG,cAAc,8BACjD2K,EAAkB3L,EAAKgB,cAAc,kBACrC4K,EAAkB5L,EAAKgB,cAAc,0BACrC6K,EAAyB7L,EAAKgB,cAAc,kCAC5C8K,EAAuB9L,EAAKgB,cAAc,gCAC1C+K,EAAuB/L,EAAKgB,cAAc,gCAC1CgL,EAAY,CAChBC,WAAY,KACZC,sBAAuB,MAGnBC,EAAsB,WAAM,OAGb,OAFQ/J,OAAnBgK,eAC0BC,QAAQ,kBAOvCF,KAA0B/J,OAAO+E,gBA5BtC,IAkCMmF,EAAsB,kBAC1BX,EAAgB3K,cAAc,mBAAmBtC,OAG7C6N,EAAY,WAAO,IAEnBtL,EADemB,OAAX+B,OAER,GAAIqI,MAAMvL,GAAK,CAAC,IAERwL,EADqBrK,OAAnBgK,eAC0BC,QAAQ,iBACvB,OAAf,IACFpL,EAAKwC,KAAKC,MAAM+I,GAAYtI,QAGhC,OAAOlD,GA6CHyL,EAAc,SAAC3K,GAAa,IAE9BwH,EAGExH,EAHFwH,IACAoD,EAEE5K,EAFF4K,MACAC,EACE7K,EADF6K,UAEEA,EACFrD,EAAInI,UAAUC,OAAOuL,GAErBrD,EAAInI,UAAUC,OAAO,gBAEvBkI,EAAI7G,gBAAgB,YAChBiK,IACFpD,EAAIhC,UAAYoF,IAIdE,EAA6B,WACjCjB,EAAgBxK,UAAUE,IAAI,QAC9BuK,EAAuBzK,UAAUE,IAAI,QACrCwK,EAAqB1K,UAAUE,IAAI,QACnCyK,EAAqB3K,UAAUE,IAAI,SAG/BwL,EAA8B,SAACC,GAAc,IACzCC,EAAoCD,EAApCC,UAAWC,EAAyBF,EAAzBE,qBAWZ,IADCD,GAED,IAFCA,GAGD,IAHCA,GAID,IAJCA,EAKJpB,EAAgBxK,UAAUC,OAAO,QAE9B,IAPC2L,EAQJnB,EAAuBzK,UAAUC,OAAO,QAErC,IAVC2L,EAWAC,GACFlB,EAAqB3K,UAAUC,OAAO,QAIxCuK,EAAgBxK,UAAUC,OAAO,SAqGjC6L,EAAa,SAAChK,GAAc,IACxB+I,EAAsCD,EAAtCC,WAAYC,EAA0BF,EAA1BE,sBAGhBiB,EAAW,GACTV,EAFqBrK,OAAnBgK,eAE0BC,QAAQ,iBACvB,OAAf,IACFc,EAAW1J,KAAKC,MAAM+I,IAExBU,EAASC,oBAAsBhL,OAAOsF,SAASC,KAC/CwF,EAASE,qBAAuBpB,EAChCkB,EAASG,iCAAmCpB,EAC5CiB,EAASrC,QAAU,WACjB5H,KAEFiK,EAASI,QAAU,WACjBrK,KAEed,OAAToL,KACHjM,KAAK,CACR,WACA4L,IAzByB/K,OAAnBgK,eACOqB,WAAW,kBA6B5BhC,EAAa9B,iBAAiB,SAxGJ,SAAClB,GAEzB,GADAA,EAAMC,kBACD,IAAAnI,UAASP,GAAd,CAIA,IAAM0N,EAAkBjC,EAAakC,aAjGlB,SAAC5L,GAAa,IAE/BwH,EAGExH,EAHFwH,IACAoD,EAEE5K,EAFF4K,MACAC,EACE7K,EADF6K,UAEEA,EACFrD,EAAInI,UAAUE,IAAIsL,GAElBrD,EAAInI,UAAUE,IAAI,gBAEpBiI,EAAInJ,aAAa,WAAY,YACzBuM,IACFpD,EAAIhC,UAAYoF,GAqFlBiB,CAAa,CACXrE,IAAKkC,EACLmB,UAAW,gBACXD,MAAO,iBART,IAUQkB,EAAwBzL,OAAxByL,oBAEFC,EAAcxB,IAEpBO,IAdA,IAgBM1J,EAAU,IAAIC,eACpBD,EAAQE,KAAK,OAFMwK,GAEnB,GACA1K,EAAQG,iBAAiB,eAAgB,oBACzCH,EAAQI,OAAS,WACf,GAAsB,KAAlB,EAAQ3D,QAAkC,IAAjB,EAAQA,OAAc,CACjD,IAAM4D,EAAeC,KAAKC,MAAMP,EAAQQ,cAExCH,EAAawJ,UAAYxJ,EAAa,cACP,IAA3B,EAAawJ,WA9IK,SAAC/J,GACtB+I,EAAUC,aACbD,EAAUC,WAAahJ,EAAK,gBAEzB+I,EAAUE,wBACbF,EAAUE,sBAAwBjJ,EAAK,4BA0InC8K,CAAoBvK,GA9CO,SAACA,GAClC0D,SAASlG,cAAc,yBAAyBI,UAAUE,IAAI,UAC9D4F,SAASlG,cAAc,kCAAkCI,UAAUC,OAAO,UAO1E,QAJM2M,EAAe9G,SAASlG,cAAc,yBACtCiN,EAAK/G,SAASgH,cAAc,MAE5BC,EAAY3K,EAAa,cACtB/F,EAAI,EAAGA,EAAI0Q,EAAUhO,OAAQ1C,IAAK,CAAC,IACpC2Q,EAAKlH,SAASgH,cAAc,MAC5BG,EAAS,EAAIF,EAAU1Q,GAAGiI,WAAWvF,OACrCmO,EAAU9K,EAAa,gBAAvB,IAA0C,KAAa+K,OAAO,EAAGF,GAAUF,EAAU1Q,GAC3F2Q,EAAG7G,UAAY+G,EACfL,EAAGO,OAAOJ,GAEZJ,EAAaQ,OAAOP,GA+BdQ,CAA2BjL,KAG3BoI,EAAgBxK,UAAUC,OAAO,QACjCqL,EAAY,CACVnD,IAAKkC,EACLmB,UAAW,gBACXD,MAAOe,KAGXZ,EAA4BtJ,QAG5BoI,EAAgBxK,UAAUC,OAAO,QACjCqL,EAAY,CACVnD,IAAKkC,EACLmB,UAAW,gBACXD,MAAOe,KAabvK,EAAQW,QAAU,WAEhB8H,EAAgBxK,UAAUC,OAAO,QACjCqL,EAAY,CACVnD,IAAKkC,EACLmB,UAAW,gBACXD,MAAOe,KAGXvK,EAAQc,KAAKR,KAAKS,UAAU,CAC1BwK,OAAQnC,IACRuB,qBAoCJpC,EAAwB/B,iBAAiB,SAAS,SAAClB,GACjDA,EAAMC,iBADqD,MAMvDtG,OAHF+E,EAHyD,EAGzDA,gBACAwH,EAJyD,EAIzDA,0BACAC,EALyD,EAKzDA,sBAEEzC,IAEFe,GAAW,WAEP9K,OAAOsF,SADLP,EACgBwH,EAEAC,KAKpBxM,OAAOsF,SADLP,EACgBwH,EAEAC,KAIxBrD,EAAW5B,iBAAiB,SApON,WAChB6B,EAAQpK,UAAUyN,SAAS,QAC7BrD,EAAQpK,UAAUC,OAAO,QAEzBmK,EAAQpK,UAAUE,IAAI,WAiO1BiK,EAAW5B,iBAAiB,aA7OR,WAClB6B,EAAQpK,UAAUE,IAAI,WA6OxBiK,EAAW5B,iBAAiB,YA1OR,WAClB6B,EAAQpK,UAAUC,OAAO,c,iHClEA,WAAO,IAC5ByN,EAAgB,SAACC,EAASC,GAAoB,QAC9CD,EAAQrQ,QAAUsQ,EAAetQ,QAgBjCuQ,EAAkB,WACtB7M,OAAOC,SAAS,CACdC,IAAK,EACLC,SAAU,YASd,GAAiE,OAA7D2E,SAASlG,cAAc,kCAA3B,KAIMhB,EAAOkH,SAASlG,cAAc,kCAC9BkO,EAAYlP,EAAKgB,cAAc,eAC/B+N,EAAU/O,EAAKgB,cAAc,yBAC7BgO,EAAiBhP,EAAKgB,cAAc,gCACpCmO,EAAmBnP,EAAKgB,cAAc,oCACtCoO,EAAmBpP,EAAKgB,cAAc,mCACtCqO,EAA0BrP,EAAKgB,cAAc,mCAC7CsO,EAA2BtP,EAAKgB,cAAc,oCAEpDkO,EAAUvF,iBAAiB,SAAS,SAAClB,GAMnC,GALAA,EAAMC,iBACNyG,EAAiB/N,UAAUE,IAAI,QAC/B8N,EAAiBhO,UAAUE,IAAI,QAC/B+N,EAAwBjO,UAAUE,IAAI,QACtCgO,EAAyBlO,UAAUE,IAAI,SACnC,IAAAf,UAASP,IAAS8O,EAAcC,EAASC,GAAiB,CAAC,IAEzD7K,EAAS,GAEPsI,EADqBrK,OAAnBgK,eAC0BC,QAAQ,iBACvB,OAAf,IACFlI,EAASV,KAAKC,MAAM+I,GAAYtI,SAElC,IAAA2C,gBACE,CACE,UAAW3C,EACXoC,SAAUwI,EAAQrQ,MAClB,mBAAoB,IAEtB,CACEmH,UAAW,SAAC5C,GACV,GAAIA,EAAK6H,QAAS,EAChB,IAAAyE,gBAAepL,GADC,IAERwK,EAA8BvM,OAA9BuM,0BAzCSvM,OAAnBgK,eACOqB,WAAW,iBA0ChBrL,OAAOsF,SAAWiH,OAElBU,EAAwBjO,UAAUC,OAAO,SAG7C0E,QAAS,SAAC9C,GACRc,QAAQC,IAAIf,GACZoM,EAAwBjO,UAAUC,OAAO,gBAIrCyN,EAAcC,EAASC,IAMjCC,IA9EqB,SAACF,EAASC,GAAoB,QAC/B,KAAlB,EAAQtQ,OAAyC,KAAzB,EAAeA,YAGvC,IAAAe,gBAAe,WAAYsP,EAAQrQ,UAAU,IAAAe,gBAAe,WAAYuP,EAAetQ,QA2EpF8Q,CAAiBT,EAASC,IAC7BM,EAAyBlO,UAAUC,OAAO,UAP5C0N,EAAQ7N,WAAWE,UAAUE,IAAI,kBACjC0N,EAAe9N,WAAWE,UAAUE,IAAI,kBACxC6N,EAAiB/N,UAAUC,OAAO,QAClC4N,W,kFC9EAQ,EAAiB,WAIrB,QAHMC,EAAUxI,SAASyI,OAAOjK,WAAWkK,MAAM,KAGxCnS,EAAI,EAAGA,EAAIiS,EAAQvP,OAAQ1C,IAElC,GAAe,OADNiS,EAAQjS,GAAGiI,WAAWhE,MAAtB,gBAGP,OADMgO,EAAQjS,GAAGmS,MAAM,KACZ,GAGf,MAAO,I,EAePC,kBAZwB,WAAO,MACN,KAArBJ,K,EAYJlD,UANgB,kBAChBuD,SAASL,IAAkB,K,EAM3BF,eAtCqB,SAACpL,GAAY,IAC5B4L,EAAO,IAAIC,KACXC,EAAOF,EAAKG,cACZC,EAAQJ,EAAKK,WACbC,EAAMN,EAAKO,UACXC,EAAa,IAAIP,KAAKC,EAAO,EAAGE,EAAOE,GAE7CnJ,SAASyI,OAAT,iBAAmCxL,EAAnC,aAAsDoM,EAAWC,cAAjE,Y,wHCFuB,WAAO,IAG1BC,EADerO,OAAX+B,OAEJuM,KACJ,GAAKlE,MAAMiE,GAEJ,CAAC,IAEAhE,EADqBrK,OAAnBgK,eAC0BC,QAAQ,iBACvB,OAAf,IACFoE,EAAgBhN,KAAKC,MAAM+I,GAAYtI,OACvCuM,WANFA,KAN2B,IAkBvB5B,EAAgB,SAACC,EAASC,GAAoB,QAE7CA,GAAmBD,GAGpBA,EAAQrQ,QAAUsQ,EAAetQ,QAoBjCuQ,EAAkB,WACtB7M,OAAOC,SAAS,CACdC,IAAK,EACLC,SAAU,YAIRoO,EAAkB,SAAC1N,GAAU,IAG3BgD,EADOiB,SAASlG,cAAc,wBACdA,cAAc,yBAC5BoL,EAAmBhK,OAAnBgK,eAEY,KAAhB,EAAKjI,QACPiI,EAAewE,QAAQ,gBAAiBnN,KAAKS,UAAU,CAAEC,OAAQlB,EAAKkB,UAGxE,IAAM0M,EAAO,CAAC,yBACQ,IAAlB,EAAKC,UACPD,EAAKtP,KAAK,aAEP,IAAAkG,qBACHoJ,EAAKtP,KAAK,OAEZ6K,EAAewE,QAAQ,gBAAiBnN,KAAKS,UAAU,CACrD6M,MAAO9K,EAASvH,MAChBsS,WAAY9J,SAAS2D,eAAe,aAAanM,MACjDuS,UAAW/J,SAAS2D,eAAe,YAAYnM,MAC/CwS,OAAO,IAAAzP,aAAYyF,SAAS2D,eAAe,eAAenM,OAC1DyS,SAAUjK,SAAS2D,eAAe,WAAWnM,MAC7C0S,SAAUlK,SAAS2D,eAAe,YAAYnM,MAC9C2S,KAAMnK,SAAS2D,eAAe,QAAQnM,MACtC4S,MAAOpK,SAAS2D,eAAe,mBAAmBnM,MAClD6S,IAAKrK,SAAS2D,eAAe,cAAcnM,MAC3C8S,QAAStK,SAAS2D,eAAe,WAAWnM,MAC5C+S,OAAQ,UACRZ,WA0HJ,GAA2C,OAAvC3J,SAASlG,cAAc,YAAsB,CAAC,IAC1ChB,EAAOkH,SAASlG,cAAc,wBAC9BkO,EAAYlP,EAAKgB,cAAc,eAE/B+N,EAAU/O,EAAKgB,cAAc,yBAC7BgO,EAAiBhP,EAAKgB,cAAc,gCACpC0Q,EAAiB1R,EAAKgB,cAAc,yBACpCmO,EAAmBnP,EAAKgB,cAAc,oCACtCoO,EAAmBpP,EAAKgB,cAAc,mCACtCqO,EAA0BrP,EAAKgB,cAAc,mCAC7CsO,EAA2BtP,EAAKgB,cAAc,oCAGpDkO,EAAUvF,iBAAiB,SAAS,SAAClB,GACnCA,EAAMC,kBAHgC,OAAnB,GAAuC,OAAZnJ,KAK5C4P,EAAiB/N,UAAUE,IAAI,QAC/B+N,EAAwBjO,UAAUE,IAAI,QACtCgO,EAAyBlO,UAAUE,IAAI,SAEzCoQ,EAAetQ,UAAUE,IAAI,QAC7B8N,EAAiBhO,UAAUE,IAAI,SAC3B,IAAAf,UAASP,IAAS8O,EAAcC,EAASC,GACvC0B,EAlEe,WAAO,IAExB1Q,EAAOkH,SAASlG,cAAc,wBAC9B0Q,EAAiB1R,EAAKgB,cAAc,yBACtC8P,EAAW,EAC+C,IAA1D,EAAK5Q,iBAAiB,yBAAyBC,SAE/B,IADAH,EAAKE,iBAAiB,iCAAiCC,SAEvE2Q,EAAW,KAGf,IAAAjK,eACE,CACE,UAAW4J,EACX,mBAAoBK,EACpB,aAAc5J,SAAS2D,eAAe,aAAanM,MACnD,YAAawI,SAAS2D,eAAe,YAAYnM,MACjDiT,QAASzK,SAAS2D,eAAe,WAAWnM,MAC5C0S,SAAUlK,SAAS2D,eAAe,YAAYnM,MAC9C2S,KAAMnK,SAAS2D,eAAe,QAAQnM,MACtC,oBAAqBwI,SAAS2D,eAAe,mBAAmBnM,MAChE,cAAewI,SAAS2D,eAAe,cAAcnM,MACrD8S,QAAStK,SAAS2D,eAAe,WAAWnM,MAC5C,gBAAgB,IAAA+C,aAAYyF,SAAS2D,eAAe,eAAenM,QAErE,CACEmH,UAAW,WAET8K,EAAgB,CACdxM,OAAQ,GACR2M,aAEF1O,OAAOsF,SAAWtF,OAAOwP,gBAE3B7L,QAAS,SAAC9C,GACRc,QAAQC,IAAIf,GACZyO,EAAetQ,UAAUC,OAAO,QAChC4N,OA8BA4C,GA9IiB,WAAO,IAExB7R,EAAOkH,SAASlG,cAAc,wBAC9BiF,EAAWjG,EAAKgB,cAAc,yBAC9B+N,EAAU/O,EAAKgB,cAAc,yBAC7BgO,EAAiBhP,EAAKgB,cAAc,gCACpCoO,EAAmBpP,EAAKgB,cAAc,mCACtC0Q,EAAiB1R,EAAKgB,cAAc,yBACpCqO,EAA0BrP,EAAKgB,cAAc,mCAC7C8Q,EAAkC,OAAnB,GAAuC,OAAZ,EAC5ChB,EAAW,EAC+C,IAA1D,EAAK5Q,iBAAiB,yBAAyBC,SAE/B,IADAH,EAAKE,iBAAiB,iCAAiCC,SAEvE2Q,EAAW,IAGf,IAAIvK,EAAW,GACC,OAAZ,IACFA,EAAWwI,EAAQrQ,QAErB,IAAAiH,eACE,CACEM,SAAUA,EAASvH,MACnB6H,WACA,mBAAoBuK,EACpB,aAAc5J,SAAS2D,eAAe,aAAanM,MACnD,YAAawI,SAAS2D,eAAe,YAAYnM,MACjDiT,QAASzK,SAAS2D,eAAe,WAAWnM,MAC5C0S,SAAUlK,SAAS2D,eAAe,YAAYnM,MAC9C2S,KAAMnK,SAAS2D,eAAe,QAAQnM,MACtC,oBAAqBwI,SAAS2D,eAAe,mBAAmBnM,MAChE,cAAewI,SAAS2D,eAAe,cAAcnM,MACrD8S,QAAStK,SAAS2D,eAAe,WAAWnM,MAC5C,gBAAgB,IAAA+C,aAAYyF,SAAS2D,eAAe,eAAenM,OACnE,iBAAkB0D,OAAOqD,eAE3B,CACEI,UAAW,SAAC5C,GAEc,IAApB,EAAK,YAAwC,MAApB,EAAK,YAChCmM,EAAiBhO,UAAUC,OAAO,QAClC4N,MAC8B,IAArB,EAAK,YACV6C,EACFzC,EAAwBjO,UAAUC,OAAO,QAEzCqQ,EAAetQ,UAAUC,OAAO,QAElC4N,MAEA0B,EAAgB,CACdxM,OAAQlB,EAAK,WACb6N,aAEEgB,GACF1P,OAAO+E,iBAAP,EACA/E,OAAO+B,OAASlB,EAAK,YACrB,IAAAiG,mBAAiB,WACf9G,OAAOsF,SAAWtF,OAAOwP,mBAG3BxP,OAAOsF,SAAWtF,OAAOwP,iBAI/B7L,QAAS,SAAC9C,GACRc,QAAQC,IAAIf,GACZyO,EAAetQ,UAAUC,OAAO,QAChC4N,OA2EA8C,GAEQjD,EAAcC,EAASC,KASjC,IAAAlN,6BAA4B,CAC1BG,QAASjC,EAAKkB,WACdiB,QAAS,MAnNQ,SAAC4M,EAASC,GAAoB,QAEhDA,GAAmBD,IAGF,KAAlB,EAAQrQ,OAAyC,KAAzB,EAAeA,WAGvC,IAAAe,gBAAe,WAAYsP,EAAQrQ,UAAU,IAAAe,gBAAe,WAAYuP,EAAetQ,SA6MlF8Q,CAAiBT,EAASC,KAC7BM,EAAyBlO,UAAUC,OAAO,QAC1C4N,OAdFF,EAAQ7N,WAAWE,UAAUE,IAAI,kBACjC0N,EAAe9N,WAAWE,UAAUE,IAAI,kBACxC6N,EAAiB/N,UAAUC,OAAO,SAClC,IAAAS,6BAA4B,CAC1BG,QAASjC,EAAKkB,WACdiB,QAAS,Y,yOC3Nb2M,EAAgB,SAACC,EAASC,GAAoB,QAE9CD,EAAQrQ,QAAUsQ,EAAetQ,Q,EA8IrC2M,0BAjKgC,SAACzF,GACjCxD,OAAO4P,kBAAoBpM,G,EAiK3BqM,6BA9JmC,WACnC7P,OAAO4P,kBAAoB,M,EA8J3B1R,KA1GW,SAACyB,GAAa,IACjB/B,EAAwB+B,EAAxB/B,KAAMkS,EAAkBnQ,EAAlBmQ,cACRC,EAAWnS,EAAKgB,cAAc,oCAC9BoO,EAAmBpP,EAAKgB,cAAc,mCACtCqO,EAA0BrP,EAAKgB,cAAc,mCAC7CsO,EAA2BtP,EAAKgB,cAAc,oCAC9CiF,EAAWjG,EAAKgB,cAAc,yBAC9B+N,EAAU/O,EAAKgB,cAAc,yBAC7BgO,EAAiBhP,EAAKgB,cAAc,gCACpCkO,EAAYlP,EAAKgB,cAAc,eAE/BoR,EAAoB,WAAO,IACzBjK,EAAWjB,SAASlG,cAAc,qBAClCqR,EAAgBlK,EAASnH,cAAc,kBAAkBsR,aAC/DnK,EAASnH,cAAc,gBAAgBgJ,MAAMC,OAAYoI,EAAgB,GAAzE,MAGFnD,EAAUvF,iBAAiB,SAAS,SAAClB,GACnCA,EAAMC,iBADuC,IAErCsJ,EAAsB5P,OAAtB4P,kBAOR,GANAjD,EAAQ7N,WAAWE,UAAUC,OAAO,kBACpC2N,EAAe9N,WAAWE,UAAUC,OAAO,kBAC3C8Q,EAAS/Q,UAAUE,IAAI,QACvB8N,EAAiBhO,UAAUE,IAAI,QAC/B+N,EAAwBjO,UAAUE,IAAI,QACtCgO,EAAyBlO,UAAUE,IAAI,SACnC,IAAAf,UAASP,IAAS8O,EAAcC,EAASC,GAAiB,CAE5D,IAAI8B,EAAW,EACuD,IAAlE,EAAK5Q,iBAAiB,iCAAiCC,SACzD2Q,EAAW,IAEb,IAAAnL,eACE,CACEM,SAAUA,EAASvH,MACnB6H,SAAUwI,EAAQrQ,MAClB,mBAAoBoS,EACpB,iBAAkB1O,OAAOqD,eAE3B,CACEI,UAAW,SAAC5C,GAEc,IAApB,EAAK,YAAwC,MAApB,EAAK,YAChCmM,EAAiBhO,UAAUC,OAAO,SAClC,IAAA2J,iBAAgBoE,EAAiB7H,aACH,IAArB,EAAK,YACd8H,EAAwBjO,UAAUC,OAAO,SACzC,IAAA2J,iBAAgBqE,EAAwB9H,aAExCnF,OAAO+E,iBAAP,EACA/E,OAAO+B,OAASlB,EAAK,YACrB,IAAAiG,mBAAiB,WACX8I,EACFA,EAAkBpJ,iBAElBxG,OAAOsF,SAActF,OAAO0G,aAA5B,wBAKR/C,QAAS,SAAC9C,GACRc,QAAQC,IAAIf,GACZoM,EAAwBjO,UAAUC,OAAO,SACzC,IAAA2J,iBAAgBqE,EAAwB9H,WACpCyK,GACFA,EAAkBjJ,sBAKhB+F,EAAcC,EAASC,IAiB5BkD,EAMHE,KALA,IAAAtQ,6BAA4B,CAC1BG,QAASjC,EAAKkB,WACdiB,QAAS,KA1HM,SAAC4M,EAASC,GAAoB,QAE/B,KAAlB,EAAQtQ,OAAyC,KAAzB,EAAeA,YAGvC,IAAAe,gBAAe,WAAYsP,EAAQrQ,UAAU,IAAAe,gBAAe,WAAYuP,EAAetQ,QA0HlF8Q,CAAiBT,EAASC,KAC7BM,EAAyBlO,UAAUC,OAAO,SAC1C,IAAA2J,iBAAgBsE,EAAyB/H,cA1B3CwH,EAAQ7N,WAAWE,UAAUE,IAAI,kBACjC0N,EAAe9N,WAAWE,UAAUE,IAAI,kBACxC6Q,EAAS/Q,UAAUC,OAAO,SAC1B,IAAA2J,iBAAgBmH,EAAS5K,WAGpB2K,EAMHE,KALA,IAAAtQ,6BAA4B,CAC1BG,QAASjC,EAAKkB,WACdiB,QAAS,U,EA2BjB+H,uBAhI6B,SAACnI,GAAa,IACnC/B,EAAS+B,EAAT/B,KACFmS,EAAWnS,EAAKgB,cAAc,oCAC9BoO,EAAmBpP,EAAKgB,cAAc,mCACtCqO,EAA0BrP,EAAKgB,cAAc,mCAC7CsO,EAA2BtP,EAAKgB,cAAc,oCAC9CiF,EAAWjG,EAAKgB,cAAc,yBAC9B+N,EAAU/O,EAAKgB,cAAc,yBAC7BgO,EAAiBhP,EAAKgB,cAAc,gCAC1CiF,EAASvH,MAAQ,GACjBqQ,EAAQrQ,MAAQ,GAChBsQ,EAAetQ,MAAQ,GACvBsB,EAAKgB,cAAc,yBAAyBuR,SAA5C,EAEAJ,EAAS/Q,UAAUE,IAAI,QACvB8N,EAAiBhO,UAAUE,IAAI,QAC/B+N,EAAwBjO,UAAUE,IAAI,QACtCgO,EAAyBlO,UAAUE,IAAI,SACvC,IAAAkB,iBAAgBxC,I,EA+GhBoL,sBA7J4B,SAACrJ,GAAa,IAEpCkE,EADWlE,EAAT/B,KACcgB,cAAc,yBAChCiF,GACFuB,YAAW,WACTvB,EAASzE,UACR,K,gFCELwJ,gBApBsB,SAACwH,GACvB,IAAIC,EAAqBvL,SAAS2D,eAAe,qBAE7C4H,GAEFA,EAAmBpR,SALc,IAQ7B8H,EAAOjC,SAASlG,cAAc,QAC9B0R,EAAMxL,SAASgH,cAAc,OACnCwE,EAAIzR,GAAK,oBACTyR,EAAItR,UAAUE,IAAI,WAClBoR,EAAItS,aAAa,OAAQ,SACzB+I,EAAKwJ,YAAYD,IACjBD,EAAqBvL,SAAS2D,eAAe,sBAE1BtD,UAAYiL,I,uUChBZnK,E,WACnB,WAAYtG,GAAU,IAAD,Q,6FAAA,SACdA,EAAQ6D,YACX7D,EAAQ6D,UAAY,IAEtBgN,KAAKC,OAAS9Q,EAAQ6D,UAAUiN,OAChCD,KAAKtK,QAAUvG,EAAQ6D,UAAU0C,QACjCsK,KAAKzK,SAAWjB,SAASlG,cAAT,IAA2Be,EAAQd,IACnD2R,KAAKE,QAAL,EACAF,KAAKG,uBAAyB,KAE9B3Q,OAAOuH,iBAAiB,SAAUiJ,KAAKI,SAAS/T,KAAK2T,OACrD,GAAGtJ,IAAI1L,KAAKgV,KAAKzK,SAASjI,iBAAiB,oEAAoE,mBAAOqJ,EAAII,iBAAiB,QAAS,EAAKoB,MAAM9L,KAAK,OACpKiI,SAASyC,iBAAiB,QAASiJ,KAAKK,qBAAqBhU,KAAK2T,OAE9D7Q,EAAQmR,WACVnR,EAAQmR,UAAUvJ,iBAAiB,QAASiJ,KAAKvP,KAAKpE,KAAK2T,O,uDAI1CnK,GACG,KAAlB,EAAM0K,SAAkBP,KAAKE,QAC/BF,KAAK7H,U,gDAIiB9I,GACxB2Q,KAAKG,uBAAyB9Q,I,mCAI1B2Q,KAAKG,wBACPH,KAAKG,uBAAuBvR,U,qCAK9B,GAAKoR,KAAKE,OAAV,CAGA,IAAMT,EAAgBO,KAAKzK,SAASnH,cAAc,kBAAkBsR,aACpEM,KAAKzK,SAASnH,cAAc,gBAAgBgJ,MAAMC,OAAYoI,EAAgB,GAA9E,Q,iCAIKO,KAAKE,QAGVF,KAAK3H,iB,8BAIL2H,KAAKE,QAAL,EACIF,KAAKtK,SACPsK,KAAKtK,UAEPsK,KAAKzK,SAAS/G,UAAUC,OAAO,iBAC/BuR,KAAKQ,e,6BAILR,KAAKE,QAAL,EACAF,KAAKzK,SAAS/G,UAAUE,IAAI,iBACxBsR,KAAKC,QACPD,KAAKC,SAEPD,KAAKS,0BAA0BnM,SAASoM,eACxCV,KAAKzK,SAAS3G,QACdoR,KAAK3H,mB,eApEY5C","file":"product-registration.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","/* eslint-disable no-console */\n\nconst validateByType = (type, val) => {\n // console.log(`${type}, ${val}`);\n let status;\n switch (type) {\n case 'text':\n status = val !== '';\n break;\n case 'phone':\n status = new RegExp(/^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/).test(val);\n break;\n case 'zipcode':\n status = new RegExp(/(^\\d{5}(-\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$)/).test(val);\n break;\n case 'email':\n /* eslint-disable no-useless-escape */\n status = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/).test(val);\n /* eslint-enable no-useless-escape */\n break;\n case 'password':\n status = new RegExp(/^(?=.*[a-z])(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])(?=.{8,})/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n case 'productcode':\n // status = new RegExp(/^\\d{7,8}[\\.]\\d{3}$/).test(val); /* eslint-disable-line no-useless-escape */\n // status = new RegExp(/^(\\d{7,8}[\\.]\\d{3}$)|(^\\d{7,8}$)/).test(val); /* eslint-disable-line no-useless-escape */\n status = new RegExp(/^(\\d{1,}$)/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n default:\n break;\n }\n return status;\n};\n\n// Format phone as xxx xxx xxxx\nconst formatPhone = (s) => {\n if (s !== null && s !== undefined && s !== '') {\n if (s.match(new RegExp(/\\d/g) || []) !== null) {\n const arr = s.match(new RegExp(/\\d/g) || []).join('');\n return `${arr.substring(0, 3)}-${arr.substring(3, 6)}-${arr.substring(6)}`;\n }\n return s;\n }\n return s;\n};\n\nconst validate = (form) => {\n // Identify all fields with a validate attribute in form (will be on the label for the input/submit)\n const fieldList = form.querySelectorAll('[validate]');\n const fieldErrorList = [];\n let field;\n let isValid;\n let required;\n let isFormValid = true;\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n field = fieldList[i];\n isValid = true;\n required = field.getAttribute('required') !== null;\n // If value is required, run against validation OR\n if (required) {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // If value isn't required but value has been entered that requires validation, then run\n if (!required && field.value !== '' && field.getAttribute('validate') !== 'text') {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // Mark form as invalid\n const fieldWrapper = form.querySelector(`[for=\"${field.id}\"]`).parentNode;\n const fieldError = fieldWrapper.querySelector('.text-danger');\n if (!isValid) {\n isFormValid = isValid;\n // Toggle error class on element label\n fieldWrapper.classList.add('ValidationFail');\n if (fieldError) {\n fieldError.classList.add('field-validation-error');\n fieldError.classList.remove('field-validation-valid');\n }\n fieldErrorList.push(field);\n } else {\n fieldWrapper.classList.remove('ValidationFail');\n if (fieldError) {\n fieldError.classList.remove('field-validation-error');\n fieldError.classList.add('field-validation-valid');\n }\n }\n }\n // Add focus to first error, if form is invalid\n // console.log(fieldErrorList.length);\n if (fieldErrorList.length > 0) {\n // console.log(`Set focus to '${fieldErrorList[0].getAttribute('id')}'`);\n fieldErrorList[0].focus();\n }\n return isFormValid;\n};\n\nconst removeAllErrors = (form) => {\n const fieldList = form.querySelectorAll('[validate]');\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n const field = fieldList[i];\n const fieldWrapper = form.querySelector(`[for=\"${field.id}\"]`).parentNode;\n const fieldError = fieldWrapper.querySelector('.text-danger');\n fieldWrapper.classList.remove('ValidationFail');\n if (fieldError) {\n fieldError.classList.remove('field-validation-error');\n fieldError.classList.add('field-validation-valid');\n }\n }\n};\n\nconst addRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll('input[type=\"text\"], input[type=\"password\"], textarea');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].setAttribute('required', 'required');\n }\n};\n\nconst removeRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll('input[type=\"text\"], input[type=\"password\"], textarea');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].removeAttribute('required');\n }\n};\n\nconst clearInputValues = (form) => {\n const inputList = form.querySelectorAll('input[type=\"text\"], input[type=\"password\"], textarea');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].value = '';\n }\n};\n\nconst resetSelectValues = (form) => {\n const selectList = form.querySelectorAll('select');\n for (let i = 0; i < selectList.length; i++) { /* eslint-disable-line no-plusplus */\n const select = selectList[i];\n const firstOption = select.querySelector('option:first-child');\n if (firstOption) {\n selectList[i].value = firstOption.value;\n }\n }\n};\n\nconst positionWindowAtFormElement = (options) => {\n let position = 0;\n if (options.element) {\n // console.log(`form-validation-utils.js, positionWindowAtFormElement, ${options.element.offsetTop}`);\n position = options.element.offsetTop;\n }\n if (options.position) {\n position = options.position; /* eslint-disable-line prefer-destructuring */\n }\n let offset = options.offset; /* eslint-disable-line prefer-destructuring */\n if (!offset) {\n offset = 0;\n }\n window.scrollTo({\n top: position + offset,\n behavior: 'smooth',\n });\n};\n\nconst init = () => {};\n\n/* eslint-enable no-console */\n\nexport {\n addRequiredAttrs,\n clearInputValues,\n init,\n validate,\n formatPhone,\n positionWindowAtFormElement,\n removeAllErrors,\n removeRequiredAttrs,\n resetSelectValues,\n validateByType,\n};\n","/* eslint-disable no-console */\n// import * as testData from './test-data';\nimport { updateAccountIconStatus, updateAccountStatusMessage } from './account-status-helpers';\nimport { getParameterByName } from '../../utils/url-utils';\n\nconst baseUrl = '';\nconst digitalUserApi = window.digitalUserApiEndoint;\n\nconst addProduct = (data, callback) => {\n data['user-id'] = window.userId;\n const requestUrl = `${digitalUserApi}/product`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n updateAccountIconStatus();\n updateAccountStatusMessage('product', 'add');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify(data));\n};\n\nconst updateProduct = (data, callback) => {\n data['user-id'] = window.userId;\n const requestUrl = `${digitalUserApi}/product`;\n const request = new XMLHttpRequest();\n request.open('PUT', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify(data));\n};\n\nconst addVisualization = (data, callback) => {\n let dealerIdParam = '';\n if (getParameterByName('dealerid') !== '') {\n dealerIdParam = `?dealerid=${getParameterByName('dealerid')}`;\n }\n const requestUrl = `${digitalUserApi}/visualization/user/${window.userId}/?site=${window.micrositeName}${dealerIdParam}`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'text/plain');\n request.setRequestHeader('Accept', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (callback) {\n callback();\n }\n updateAccountIconStatus();\n updateAccountStatusMessage('visualizer scene', 'add');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(data.toString());\n};\n\nconst addPhoto = (data, callback) => {\n const {\n imageUrl,\n thumbUrl,\n description,\n productLineId,\n productLineName,\n } = data;\n const requestUrl = `${digitalUserApi}/photo`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n updateAccountIconStatus();\n updateAccountStatusMessage('photo', 'add');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n /* if (window.localTesting) {\n request.onloadend = () => {\n if (callback) {\n const responseData = testData.addPhotoJson;\n callback(JSON.parse(responseData.replace(/\\\\\"/gi, '')));\n }\n };\n } */\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'photo-url': imageUrl,\n 'thumbnail-url': thumbUrl,\n description,\n 'product-line-id': productLineId,\n 'product-line-name': productLineName,\n }));\n};\n\nconst addDealer = (data, callback) => {\n const requestUrl = `${digitalUserApi}/dealer`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n updateAccountIconStatus();\n updateAccountStatusMessage('dealer', 'add');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'record-id': data['record-id'],\n 'ship-to-account': data['ship-to-account'],\n }));\n};\n\nconst addSwatch = (data, callback) => {\n const {\n colorName,\n colorNumber,\n displayMessage,\n newSwatch,\n partNumber,\n colorRange,\n swatchKey,\n tileName,\n widenUrl,\n } = data;\n const requestUrl = `${digitalUserApi}/vswatch`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n updateAccountIconStatus();\n updateAccountStatusMessage('swatch', 'add');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n /* if (window.localTesting) {\n request.onloadend = () => {\n if (callback) {\n const responseData = testData.addSwatchJson;\n callback(JSON.parse(responseData.replace(/\\\\\"/gi, '')));\n }\n };\n } */\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'swatch-key': swatchKey,\n 'part-number': partNumber,\n 'color-name': colorName,\n 'color-number': colorNumber,\n 'color-range': colorRange,\n 'new-swatch': newSwatch,\n 'tile-name': tileName,\n 'widen-url': widenUrl,\n 'display-message': displayMessage,\n }));\n};\n\nconst removeItemByType = (type, id, callback) => {\n // console.log(`account-api.js, removeItemByType: ${type}, item: ${id}`);\n let requestUrl;\n let msgType = '';\n switch (type) {\n case 'location':\n requestUrl = `${digitalUserApi}/dealer`;\n msgType = 'dealer';\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photo`;\n msgType = 'photo';\n break;\n case 'product':\n requestUrl = `${digitalUserApi}/product`;\n msgType = 'product';\n break;\n case 'visualization':\n requestUrl = `${digitalUserApi}/visualization`;\n msgType = 'visualizer scene';\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/vswatch`;\n msgType = 'swatch';\n break;\n default:\n break;\n }\n const request = new XMLHttpRequest();\n request.open('DELETE', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n updateAccountIconStatus();\n updateAccountStatusMessage(msgType, 'remove');\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n /* if (window.localTesting) {\n request.onloadend = () => {\n if (callback) {\n const responseData = testData.removeItemJson;\n callback(JSON.parse(responseData.replace(/\\\\\"/gi, '')));\n }\n };\n } */\n request.send(JSON.stringify({\n 'asset-id': id,\n }));\n};\n\nconst getItemsByType = (type, callback) => {\n let requestUrl;\n switch (type) {\n case 'location':\n requestUrl = `${digitalUserApi}/vdealer/user/${window.userId}`;\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photos/user/${window.userId}`;\n break;\n case 'product':\n requestUrl = `${digitalUserApi}/products/user/${window.userId}`;\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/vswatches/user/${window.userId}`;\n break;\n case 'visualization':\n requestUrl = `${digitalUserApi}/visualizations/user/${window.userId}?site=${window.micrositeName}`;\n break;\n default:\n break;\n }\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n // const responseData = JSON.parse(request.responseText.replace(/\\\\\"/gi, '\\\\\"'));\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n // Local testing\n if (window.localTesting && callback) {\n /* let data;\n switch (type) {\n case 'location':\n data = testData.getDealersJson;\n break;\n case 'photo':\n data = testData.getPhotosJson;\n break;\n case 'product':\n data = testData.getProductsJson;\n break;\n case 'swatch':\n data = testData.getSwatchesJson;\n break;\n case 'visualization':\n data = testData.getVisualizationsJson;\n break;\n default:\n data = '';\n break;\n }\n callback(JSON.parse(data.replace(/\\\\\"/gi, '\\\\\"')));\n return; */\n }\n request.send();\n};\n\nconst getAccountData = (callback) => {\n const requestUrl = `${digitalUserApi}/account/${window.userId}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nconst forgotPassword = (data, callbacks) => {\n const {\n username,\n } = data;\n const requestUrl = `${baseUrl}/forgot-password/SendPasswordResetEmail`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify({\n username,\n }));\n};\n\nconst login = (data, callbacks) => {\n const {\n username,\n password,\n rememberMe,\n } = data;\n const requestUrl = `${baseUrl}/userlogin`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n if (window.localTesting) {\n request.onloadend = () => {\n if (callbacks) {\n // const responseData = testData.loginSuccessResponse;\n // console.log(callbacks);\n // callbacks.onSuccess(JSON.parse(responseData.replace(/\\\\\"/gi, '')));\n callbacks.onError('error');\n }\n };\n }\n request.send(JSON.stringify({\n data: JSON.stringify({\n 'microsite-name': window.micrositeName,\n username,\n password,\n rememberMe,\n }),\n }));\n};\n\nconst logout = (callbacks) => {\n const requestUrl = `${baseUrl}/logout`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n // request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n // const responseData = JSON.parse(request.responseText);\n const responseData = request.responseText;\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n // const responseData = JSON.parse(request.responseText);\n const responseData = request.responseText;\n callbacks.onError(responseData);\n }\n };\n request.send();\n};\n\nconst updatePassword = (data, callbacks) => {\n const requestUrl = `${digitalUserApi}/password`;\n const request = new XMLHttpRequest();\n request.open('PATCH', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify(data));\n};\n\nconst updateAccount = (data, callbacks) => {\n const requestUrl = `${digitalUserApi}/account`;\n const request = new XMLHttpRequest();\n request.open('PATCH', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify(data));\n};\n\nconst createAccount = (data, callbacks) => {\n const requestUrl = `${baseUrl}/usercreateaccount`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n try {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n } catch (e) {\n callbacks.onError(e);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n /* if (window.localTesting) {\n request.onloadend = () => {\n if (callbacks.onSuccess) {\n callbacks.onSuccess(testData.createAccountSuccess);\n }\n };\n } */\n request.send(JSON.stringify({\n data: JSON.stringify(data),\n }));\n};\n\nconst hasAssets = (callback) => {\n const requestUrl = `${digitalUserApi}/has-assets/${window.userId}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n if (window.localTesting) {\n return;\n }\n request.send();\n};\n\nexport {\n addDealer,\n addPhoto,\n addProduct,\n addSwatch,\n addVisualization,\n createAccount,\n forgotPassword,\n getAccountData,\n getItemsByType,\n hasAssets,\n login,\n logout,\n removeItemByType,\n updateAccount,\n updatePassword,\n updateProduct,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { hasAssets } from './account-api';\n\nconst showNavIndicator = (status) => {\n const icon = document.querySelector('.main-nav .icon-item-my-account');\n const visibleClass = 'items-added-to-account';\n\n if (!status) {\n icon.classList.remove(visibleClass);\n } else {\n icon.classList.add(visibleClass);\n }\n};\n\nconst updateAccountStatusMessage = (assetType, action) => {\n const msgDiv = document.querySelector('.main-nav .my-account-status-message');\n if (!window.isAuthenticated || !msgDiv) {\n return;\n }\n // Clear existing message\n msgDiv.innerHTML = '';\n setTimeout(() => {\n if (action === 'add') {\n msgDiv.innerHTML = `${assetType} has been added to your favorites.`;\n }\n if (action === 'remove') {\n msgDiv.innerHTML = `${assetType} has been removed from your favorites.`;\n }\n }, 100);\n};\n\nconst updateAccountIconStatus = () => {\n if (!window.isAuthenticated) {\n return;\n }\n hasAssets((data) => {\n if (data['has-assets']) {\n showNavIndicator(true);\n } else {\n showNavIndicator(false);\n }\n });\n};\n\nexport {\n updateAccountIconStatus,\n updateAccountStatusMessage,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console, no-useless-escape */\nconst getParameterByName = (name, url) => {\n let location = url;\n if (!location) {\n location = window.location.href;\n }\n const regex = new RegExp(`[?&]${name.replace(/[\\[\\]]/g, '\\\\$&')}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(location);\n if (!results) {\n return '';\n }\n if (!results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nconst detectProduction = function() {\n if (\n window.location.href.indexOf('www.vitaleblinds.com') !== -1 ||\n window.location.href.indexOf('https://vitaleblinds.com') !== -1 ||\n window.location.href.indexOf('http://vitaleblinds.com') !== -1\n ) {\n return true;\n }\n return false;\n};\n\nexport {\n detectProduction,\n getParameterByName,\n};\n/* eslint-enable no-console, no-useless-escape */\n","/* eslint-disable no-console */\nimport { login, logout } from './account-api';\nimport { addCreateAccountCallbacks, resetCreateAccountForm, setCreateAccountFocus } from './create-account';\nimport { clearInputValues, removeAllErrors, validate } from '../../utils/form-validation-utils';\nimport { updateAccountIconStatus } from './account-status-helpers';\nimport SiteModal from '../site-modal';\n\nlet initialLanuch = true;\n\nconst loginModalId = 'acct-login-modal';\nconst modalDiv = document.querySelector(`#${loginModalId}`);\nconst modal = new SiteModal({\n id: loginModalId,\n callbacks: {\n onClose: () => {\n clearFormData(); /* eslint-disable-line no-use-before-define */\n },\n },\n});\n\nconst clearFormData = () => {\n // Clear any form values, input errors, error messages\n const form = modalDiv.querySelector('.acct-login-modal-form');\n if (form) {\n clearInputValues(form);\n removeAllErrors(form);\n form.querySelector('.form-error-message').classList.add('hide');\n }\n};\n\nconst onLoginSubmit = (event, callbacks) => {\n event.preventDefault();\n const modalForm = document.querySelector('.acct-login-modal-form');\n const modalErrorMsg = modalForm.querySelector('.form-error-message');\n if (validate(modalForm)) {\n modalErrorMsg.classList.add('hide');\n // Reset modal height\n modalDiv.removeAttribute('style');\n let remember = false;\n if (document.querySelectorAll('#modalAcctRememberMe:checked').length === 1) {\n remember = true;\n }\n login(\n {\n username: document.getElementById('modalAcctUsername').value,\n password: document.getElementById('modalAcctPassword').value,\n rememberMe: remember,\n },\n {\n onSuccess: (data) => {\n // console.log(data);\n if (!data.success) {\n modalErrorMsg.classList.remove('hide');\n window.announceMessage(modalErrorMsg.innerHTML);\n modal.updateHeight();\n } else {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n checkLoginStatus(() => { /* eslint-disable-line no-use-before-define */\n if (callbacks) {\n if (callbacks.onLoginSuccess) {\n callbacks.onLoginSuccess();\n }\n }\n });\n modal.close();\n }\n },\n onError: () => {\n modalErrorMsg.classList.remove('hide');\n window.announceMessage(modalErrorMsg.innerHTML);\n modal.updateHeight();\n if (!callbacks) {\n return;\n }\n if (callbacks.onLoginFail) {\n callbacks.onLoginFail();\n }\n },\n },\n );\n } else {\n modal.updateHeight();\n }\n};\n\nconst onModalButtonClick = (event) => {\n // User is already logged in and for some reason this\n // event handler has not been removed.\n if (window.isAuthenticated) {\n return;\n }\n event.preventDefault();\n launchLoginModal({ /* eslint-disable-line no-use-before-define */\n type: '',\n callbacks: {\n onLoginSuccess: (isNewAccount) => {\n if (isNewAccount) {\n window.location = `${window.myAccountUrl}?newaccount=true`;\n } else {\n window.location = window.myAccountUrl;\n }\n },\n onLoginFail: () => {\n //\n },\n },\n });\n};\n\nconst onLogoutButtonClick = (event) => {\n event.preventDefault();\n logout({\n onSuccess: () => {\n window.location = window.loginUrl;\n },\n });\n};\n\nconst addLogoutEventHandlers = () => {\n const logoutBtns = document.querySelectorAll('a[href=\"/logout\"], a[href=\"/logout/\"]');\n if (logoutBtns) {\n [].map.call(logoutBtns, btn => btn.addEventListener('click', onLogoutButtonClick));\n }\n};\n\nconst removeModalEventHandlers = () => {\n const modalBtns = document.querySelectorAll('.acct-login-modal-btn');\n // console.log('login.js, removeModalEventHandlers');\n // console.log(modalBtns);\n if (modalBtns) {\n [].map.call(modalBtns, btn => btn.removeEventListener('click', onModalButtonClick));\n }\n};\n\nconst addModalEventHandlers = () => {\n const modalBtns = document.querySelectorAll('.acct-login-modal-btn');\n // console.log('login.js, addModalEventHandlers');\n // console.log(modalBtns);\n if (modalBtns) {\n [].map.call(modalBtns, btn => btn.addEventListener('click', onModalButtonClick));\n }\n};\n\nconst checkLoginStatus = (callback) => {\n // console.log(`login.js, checkLoginStatus, isAuthenticated: ${window.isAuthenticated}`);\n const body = document.getElementsByTagName('body')[0];\n if (window.isAuthenticated) {\n body.classList.add('is-authenticated');\n removeModalEventHandlers();\n addLogoutEventHandlers();\n if (callback) {\n callback();\n }\n updateAccountIconStatus();\n } else {\n body.classList.remove('is-authenticated');\n addModalEventHandlers();\n updateAccountIconStatus();\n }\n};\n\nconst toggleCreateAccountForm = (isVisible) => {\n if (isVisible) {\n modalDiv.querySelector('.account-login-container').classList.add('hidden');\n // modal.querySelector('.login-side-column').classList.add('hidden');\n modalDiv.querySelector('.create-account-container').classList.remove('hidden');\n // modal.querySelector('.create-account-side-column').classList.remove('hidden');\n if (modalDiv.querySelectorAll('.login-message-wrapper').length !== 0) {\n modalDiv.querySelector('.login-message-wrapper').classList.add('hidden');\n }\n modalDiv.style.height = '600px';\n } else {\n modalDiv.querySelector('.account-login-container').classList.remove('hidden');\n // modal.querySelector('.login-side-column').classList.remove('hidden');\n modalDiv.querySelector('.create-account-container').classList.add('hidden');\n // modal.querySelector('.create-account-side-column').classList.add('hidden');\n modalDiv.removeAttribute('style');\n if (modalDiv.querySelectorAll('.login-message-wrapper').length !== 0) {\n modalDiv.querySelector('.login-message-wrapper').classList.remove('hidden');\n }\n }\n};\n\nconst launchLoginModal = (options) => {\n // Reset modal\n toggleCreateAccountForm();\n resetCreateAccountForm({\n form: document.querySelector('.modal-acct-create-form'),\n });\n const {\n type,\n callbacks,\n } = options;\n if (type) {\n modalDiv.classList.add('login-modal-cta');\n modalDiv.querySelector('.login-message-wrapper').classList.remove('hidden');\n let msg = '';\n switch (type) {\n case 'swatch':\n msg = window.loginMessageSwatch;\n break;\n case 'photo':\n msg = window.loginMessagePhoto;\n break;\n case 'product':\n msg = window.loginMessageProduct;\n break;\n case 'location':\n msg = window.loginMessageDealer;\n break;\n case 'visualization':\n msg = window.loginMessageVisualization;\n break;\n default:\n break;\n }\n modalDiv.querySelector('.login-message-wrapper p').innerHTML = msg;\n } else {\n modalDiv.classList.remove('login-modal-cta');\n modalDiv.querySelector('.login-message-wrapper').classList.add('hidden');\n modalDiv.querySelector('.login-message-wrapper p').innerHTML = '';\n }\n modal.open();\n // Submit modal form\n const loginSubmitBtn = modalDiv.querySelector('.acct-login-modal-form .submit-btn');\n // Only run once\n if (initialLanuch) {\n initialLanuch = false;\n loginSubmitBtn.addEventListener('click', (event) => {\n onLoginSubmit(event, callbacks);\n });\n [].map.call(modalDiv.querySelectorAll('.close-btn, .modal-overlay'), btn => btn.addEventListener('click', (event) => {\n event.stopPropagation();\n modal.close();\n if (callbacks.onLoginFail) {\n callbacks.onLoginFail();\n }\n }));\n // Toggle create account form\n // Need to account for error message as well...\n [].map.call(document.querySelectorAll('.create-account-btn, .acct-login-modal-form .form-error-message a'), btn => btn.addEventListener('click', (event) => {\n setCreateAccountFocus({\n form: document.querySelector('.modal-acct-create-form'),\n });\n event.preventDefault();\n addCreateAccountCallbacks({\n onLoginSuccess: () => {\n callbacks.onLoginSuccess(true);\n modal.close();\n },\n onLoginFail: () => {\n callbacks.onLoginFail();\n },\n });\n toggleCreateAccountForm(true);\n modal.updateHeight();\n }));\n }\n modal.updateHeight();\n};\n\nconst submitForm = (data, callbacks) => {\n login(data, callbacks);\n};\n\nconst init = () => {\n checkLoginStatus();\n};\n\nexport {\n checkLoginStatus,\n init,\n launchLoginModal,\n submitForm,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport addProducts from './modules/product-registration/add-product-new';\nimport completeRegistration from './modules/product-registration/complete-registration';\nimport registrationInfo from './modules/product-registration/registration-info';\n\n// console.log('\\n\\n\\n****************************\\n\\nproduct-registration.min.js ver: 1.2.2\\n\\n****************************\\n\\n\\n');\nif (document.querySelector('.pr-form') !== null) {\n registrationInfo();\n}\nif (document.querySelector('.pr-add-products-form') !== null) {\n addProducts();\n}\nif (document.querySelector('.pr-complete-registration-form') !== null) {\n completeRegistration();\n}\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { validate } from '../../utils/form-validation-utils';\n\n// console.log('\\n\\n\\n****************************\\n\\nadd-product-new.js ver: 0.0.6\\n\\n****************************\\n\\n\\n');\n\nconst addProducts = () => {\n if (document.querySelector('.pr-add-products-form') === null) {\n return;\n }\n\n const form = document.querySelector('.pr-add-products-form');\n const tooltipBtn = form.querySelector('.tooltip-container .icon-help');\n const tooltip = form.querySelector('.tooltip-container .tooltip');\n const findOrderBtn = form.querySelector('.submit-btn');\n const completeRegistrationBtn = document.querySelector('.complete-registration-btn');\n const productsWrapper = form.querySelector('.product-items');\n const defaultErrorMsg = form.querySelector('.default-error-message');\n const duplicateItemsErrorMsg = form.querySelector('.duplicate-items-error-message');\n const unsavedItemsErrorMsg = form.querySelector('.unsaved-items-error-message');\n const mulitpleLineItemsMsg = form.querySelector('.mulitple-line-items-message');\n const orderData = {\n storeGroup: null,\n storeGroupDescription: null,\n };\n\n const checkForSessionData = () => {\n const { sessionStorage } = window;\n const sessionObj = sessionStorage.getItem('vitale_ppData');\n if (sessionObj !== null) {\n return true;\n }\n return false;\n };\n\n if (!checkForSessionData() && !window.isAuthenticated) {\n // document.querySelector('.pr-add-products-form').classList.add('hidden');\n // document.querySelector('.no-active-registration-content').classList.remove('hidden');\n // return;\n }\n\n const getProductCodeEntry = () => (\n productsWrapper.querySelector('#order-number-1').value\n );\n\n const getUserId = () => {\n const { userId } = window;\n let id = userId;\n if (isNaN(id)) { /* eslint-disable-line no-restricted-globals */\n const { sessionStorage } = window;\n const sessionObj = sessionStorage.getItem('vitale_userId');\n if (sessionObj !== null) {\n id = JSON.parse(sessionObj).userId;\n }\n }\n return id;\n };\n\n const setStoreGroupValues = (data) => {\n if (!orderData.storeGroup) {\n orderData.storeGroup = data['store-group'];\n }\n if (!orderData.storeGroupDescription) {\n orderData.storeGroupDescription = data['store-group-description'];\n }\n };\n\n const showTooltip = () => {\n tooltip.classList.add('show');\n };\n\n const hideTooltip = () => {\n tooltip.classList.remove('show');\n };\n\n const toggleTooltip = () => {\n if (tooltip.classList.contains('show')) {\n tooltip.classList.remove('show');\n } else {\n tooltip.classList.add('show');\n }\n };\n\n const disableUiBtn = (options) => {\n const {\n btn,\n label,\n className,\n } = options;\n if (className) {\n btn.classList.add(className);\n } else {\n btn.classList.add('disabled-btn');\n }\n btn.setAttribute('disabled', 'disabled');\n if (label) {\n btn.innerHTML = label;\n }\n };\n\n const enableUiBtn = (options) => {\n const {\n btn,\n label,\n className,\n } = options;\n if (className) {\n btn.classList.remove(className);\n } else {\n btn.classList.remove('disabled-btn');\n }\n btn.removeAttribute('disabled');\n if (label) {\n btn.innerHTML = label;\n }\n };\n\n const removeSaveResponseMessages = () => {\n defaultErrorMsg.classList.add('hide');\n duplicateItemsErrorMsg.classList.add('hide');\n unsavedItemsErrorMsg.classList.add('hide');\n mulitpleLineItemsMsg.classList.add('hide');\n };\n\n const displaySaveResponseMessages = (response) => {\n const { errorType, multipleItemsPerLine } = response;\n /*\n Error Codes:\n 0: Order number is incorrect. Please recheck the number and try again.\n 1:\n 2:\n 3:\n 4: Duplicate Registration\n 5: Product registered\n */\n switch (errorType) {\n case 0:\n case 1:\n case 2:\n case 3:\n defaultErrorMsg.classList.remove('hide');\n break;\n case 4:\n duplicateItemsErrorMsg.classList.remove('hide');\n break;\n case 5:\n if (multipleItemsPerLine) {\n mulitpleLineItemsMsg.classList.remove('hide');\n }\n break;\n default:\n defaultErrorMsg.classList.remove('hide');\n }\n };\n\n const onOrderNumberLookupSuccess = (responseData) => {\n document.querySelector('.pr-add-products-form').classList.add('hidden');\n document.querySelector('.complete-registration-content').classList.remove('hidden');\n // Populate items\n // console.log(responseData);\n const lineItemsDiv = document.querySelector('.order-line-item-list');\n const ul = document.createElement('ul');\n const leadingZeros = '00';\n const lineItems = responseData['line-items'];\n for (let i = 0; i < lineItems.length; i++) { /* eslint-disable-line no-plusplus */\n const li = document.createElement('li');\n const zeroCt = 3 - lineItems[i].toString().length;\n const item = `${responseData['order-number']}.${leadingZeros.substr(0, zeroCt)}${lineItems[i]}`;\n li.innerHTML = item;\n ul.append(li);\n }\n lineItemsDiv.append(ul);\n };\n\n const orderNumberLookup = (event) => {\n event.preventDefault();\n if (!validate(form)) {\n return;\n }\n // Disable buttons\n const defaultBtnLabel = findOrderBtn.textContent;\n disableUiBtn({\n btn: findOrderBtn,\n className: 'btn--disabled',\n label: 'Searching...',\n });\n const { addProductsEndpoint } = window;\n // Get order number from adjacent input\n const OrderNumber = getProductCodeEntry();\n // Remove any messaging\n removeSaveResponseMessages();\n const requestUrl = addProductsEndpoint;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n // console.log(responseData);\n responseData.errorType = responseData['error-type'];\n if (responseData.errorType === 5) {\n setStoreGroupValues(responseData);\n onOrderNumberLookupSuccess(responseData);\n } else {\n // Display error message\n defaultErrorMsg.classList.remove('hide');\n enableUiBtn({\n btn: findOrderBtn,\n className: 'btn--disabled',\n label: defaultBtnLabel,\n });\n }\n displaySaveResponseMessages(responseData);\n } else {\n // Display error message\n defaultErrorMsg.classList.remove('hide');\n enableUiBtn({\n btn: findOrderBtn,\n className: 'btn--disabled',\n label: defaultBtnLabel,\n });\n /* onOrderNumberLookupSuccess({\n 'order-number': 1658049,\n 'line-items': [1, 2, 3],\n 'store-group': '4009',\n 'store-group-description': 'SWF MFG GRABER DIRECT CANADA DIV 01',\n message: null,\n success: true,\n 'error-type': 5,\n }); */\n }\n };\n request.onerror = () => {\n // Display error message\n defaultErrorMsg.classList.remove('hide');\n enableUiBtn({\n btn: findOrderBtn,\n className: 'btn--disabled',\n label: defaultBtnLabel,\n });\n };\n request.send(JSON.stringify({\n UserId: getUserId(),\n OrderNumber,\n }));\n };\n\n const clearSessionData = () => {\n const { sessionStorage } = window;\n sessionStorage.removeItem('vitale_ppData');\n };\n\n const submitLead = (callback) => {\n const { storeGroup, storeGroupDescription } = orderData;\n // console.log(`${storeGroup}, ${storeGroupDescription}`);\n const { sessionStorage } = window;\n let userData = {};\n const sessionObj = sessionStorage.getItem('vitale_ppData');\n if (sessionObj !== null) {\n userData = JSON.parse(sessionObj);\n }\n userData.page_submitted_from = window.location.href; // Submit w/ page title\n userData.customer_store_group = storeGroup;\n userData.customer_store_group_description = storeGroupDescription;\n userData.success = () => {\n callback();\n };\n userData.failure = () => {\n callback();\n };\n const { _dcq } = window;\n _dcq.push([\n 'identify',\n userData,\n ]);\n clearSessionData();\n };\n // Init\n findOrderBtn.addEventListener('click', orderNumberLookup);\n completeRegistrationBtn.addEventListener('click', (event) => {\n event.preventDefault();\n const {\n isAuthenticated,\n thankYouAuthenticatedLink,\n thankYouNoAccountLink,\n } = window;\n if (checkForSessionData()) {\n // Save lead\n submitLead(() => {\n if (isAuthenticated) {\n window.location = thankYouAuthenticatedLink;\n } else {\n window.location = thankYouNoAccountLink;\n }\n });\n } else {\n if (isAuthenticated) { /* eslint-disable-line no-lonely-if */\n window.location = thankYouAuthenticatedLink;\n } else {\n window.location = thankYouNoAccountLink;\n }\n }\n });\n tooltipBtn.addEventListener('click', toggleTooltip);\n tooltipBtn.addEventListener('mouseover', showTooltip);\n tooltipBtn.addEventListener('mouseout', hideTooltip);\n};\nexport default addProducts;\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { updatePassword } from '../consumer-account/account-api';\nimport { setCookieValue } from '../consumer-account/authentication';\nimport { validate, validateByType } from '../../utils/form-validation-utils';\n\nconst completeRegistration = () => {\n const passwordMatch = (passIpt, passConfirmIpt) => {\n if (passIpt.value === passConfirmIpt.value) {\n return true;\n }\n return false;\n };\n\n const passwordStrength = (passIpt, passConfirmIpt) => {\n if (passIpt.value === '' && passConfirmIpt.value === '') {\n return true; // ignore\n }\n if (validateByType('password', passIpt.value) && validateByType('password', passConfirmIpt.value)) {\n return true;\n }\n return false;\n };\n\n const scrollToPageTop = () => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n };\n\n const clearSessionData = () => {\n const { sessionStorage } = window;\n sessionStorage.removeItem('vitale_userId');\n };\n\n if (document.querySelector('.pr-complete-registration-form') === null) {\n return;\n }\n\n const form = document.querySelector('.pr-complete-registration-form');\n const submitBtn = form.querySelector('.submit-btn');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n const mismatchErrorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n mismatchErrorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n if (validate(form) && passwordMatch(passIpt, passConfirmIpt)) {\n // Get user id from session storage\n let userId = '';\n const { sessionStorage } = window;\n const sessionObj = sessionStorage.getItem('vitale_userId');\n if (sessionObj !== null) {\n userId = JSON.parse(sessionObj).userId; /* eslint-disable-line prefer-destructuring */\n }\n updatePassword(\n {\n 'user-id': userId,\n password: passIpt.value,\n 'current-password': '',\n },\n {\n onSuccess: (data) => {\n if (data.success) {\n setCookieValue(userId);\n const { thankYouAuthenticatedLink } = window;\n clearSessionData();\n window.location = thankYouAuthenticatedLink;\n } else {\n accountCreationErrorMsg.classList.remove('hide');\n }\n },\n onError: (data) => {\n console.log(data);\n accountCreationErrorMsg.classList.remove('hide');\n },\n },\n );\n } else if (!passwordMatch(passIpt, passConfirmIpt)) {\n passIpt.parentNode.classList.add('ValidationFail');\n passConfirmIpt.parentNode.classList.add('ValidationFail');\n mismatchErrorMsg.classList.remove('hide');\n scrollToPageTop();\n } else {\n scrollToPageTop();\n if (!passwordStrength(passIpt, passConfirmIpt)) {\n passwordStrengthErrorMsg.classList.remove('hide');\n }\n }\n });\n};\nexport default completeRegistration;\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nconst setCookieValue = (userId) => {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n const expiryDate = new Date(year + 1, month, day);\n // console.log(`UserCookie=id=${userId}; expires=${expiryDate.toUTCString()};path=/`);\n document.cookie = `UserCookie=id=${userId}; expires=${expiryDate.toUTCString()};path=/`;\n};\n\nconst getCookieValue = () => {\n const cookies = document.cookie.toString().split(';');\n let cookie;\n let arr = [];\n for (let i = 0; i < cookies.length; i++) { /* eslint-disable-line no-plusplus */\n cookie = cookies[i].toString().match(new RegExp('UserCookie', 'gi'));\n if (cookie !== null) {\n arr = cookies[i].split('=');\n return arr[2];\n }\n }\n return '';\n};\n\nconst getLoggedInStatus = () => {\n if (getCookieValue() !== '') {\n return true;\n }\n return false;\n};\n\nconst getUserId = () => (\n parseInt(getCookieValue(), 10)\n);\n\nexport {\n getLoggedInStatus,\n getUserId,\n setCookieValue,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { createAccount, updateAccount } from '../consumer-account/account-api';\nimport { checkLoginStatus } from '../consumer-account/login';\nimport { validate, validateByType, positionWindowAtFormElement, formatPhone } from '../../utils/form-validation-utils';\nimport { detectProduction } from '../../utils/url-utils';\n\nconst registrationInfo = () => {\n // Check for user id in session storage\n const { userId } = window;\n let sessionUserId = userId;\n let isExistingAccount = false;\n if (!isNaN(sessionUserId)) { /* eslint-disable-line no-restricted-globals */\n isExistingAccount = true;\n } else {\n const { sessionStorage } = window;\n const sessionObj = sessionStorage.getItem('vitale_userId');\n if (sessionObj !== null) {\n sessionUserId = JSON.parse(sessionObj).userId;\n isExistingAccount = true;\n }\n }\n // console.log(`sessionUserId: ${sessionUserId}`);\n // console.log(`isExistingAccount: ${isExistingAccount}`);\n\n const passwordMatch = (passIpt, passConfirmIpt) => {\n // Ignore if there's no password confirm field\n if (!passConfirmIpt || !passIpt) {\n return true;\n }\n if (passIpt.value === passConfirmIpt.value) {\n return true;\n }\n return false;\n };\n\n const passwordStrength = (passIpt, passConfirmIpt) => {\n // Ignore if there's no password confirm field\n if (!passConfirmIpt || !passIpt) {\n return true;\n }\n if (passIpt.value === '' && passConfirmIpt.value === '') {\n return true; // ignore\n }\n if (validateByType('password', passIpt.value) && validateByType('password', passConfirmIpt.value)) {\n return true;\n }\n return false;\n };\n\n const scrollToPageTop = () => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n };\n\n const saveSessionData = (data) => {\n // console.log(data);\n const form = document.querySelector('.pr-acct-create-form');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const { sessionStorage } = window;\n // If user id is returned, save to session storage\n if (data.userId !== '') {\n sessionStorage.setItem('vitale_userId', JSON.stringify({ userId: data.userId }));\n }\n // Save all post-purchase lead data in session storage\n const tags = ['Post Purchase Program'];\n if (data.optInVal === 1) {\n tags.push('Opted In');\n }\n if (!detectProduction()) {\n tags.push('Dev');\n }\n sessionStorage.setItem('vitale_ppData', JSON.stringify({\n email: username.value,\n first_name: document.getElementById('FirstName').value,\n last_name: document.getElementById('LastName').value,\n phone: formatPhone(document.getElementById('PhoneNumber').value),\n address1: document.getElementById('Address').value,\n address2: document.getElementById('Address2').value,\n city: document.getElementById('City').value,\n state: document.getElementById('StateOrProvince').value,\n zip: document.getElementById('PostalCode').value,\n country: document.getElementById('Country').value,\n source: 'website',\n tags,\n }));\n };\n\n const runCreateAccount = () => {\n // console.log('registratoin-info.js, runCreateAccount');\n const form = document.querySelector('.pr-acct-create-form');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const serverErrorMsg = form.querySelector('.server-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const isAddAccount = passConfirmIpt !== null || passIpt !== null;\n let optInVal = 0;\n if (form.querySelectorAll('[name=\"offer-opt-in\"]').length !== 0) {\n const isChecked = form.querySelectorAll('[name=\"offer-opt-in\"]:checked').length;\n if (isChecked === 1) {\n optInVal = 1;\n }\n }\n let password = '';\n if (passIpt !== null) {\n password = passIpt.value;\n }\n createAccount(\n {\n username: username.value,\n password,\n 'marketing-opt-in': optInVal,\n 'first-name': document.getElementById('FirstName').value,\n 'last-name': document.getElementById('LastName').value,\n address: document.getElementById('Address').value,\n address2: document.getElementById('Address2').value,\n city: document.getElementById('City').value,\n 'state-or-province': document.getElementById('StateOrProvince').value,\n 'postal-code': document.getElementById('PostalCode').value,\n country: document.getElementById('Country').value,\n 'phone-number': formatPhone(document.getElementById('PhoneNumber').value),\n 'microsite-name': window.micrositeName,\n },\n {\n onSuccess: (data) => {\n // console.log(data);\n if (data['user-id'] === 0 || data['user-id'] === '0') {\n existingErrorMsg.classList.remove('hide');\n scrollToPageTop();\n } else if (data['user-id'] === -1) {\n if (isAddAccount) {\n accountCreationErrorMsg.classList.remove('hide');\n } else {\n serverErrorMsg.classList.remove('hide');\n }\n scrollToPageTop();\n } else {\n saveSessionData({\n userId: data['user-id'],\n optInVal,\n });\n if (isAddAccount) {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n checkLoginStatus(() => {\n window.location = window.AddProductsUrl;\n });\n } else {\n window.location = window.AddProductsUrl;\n }\n }\n },\n onError: (data) => {\n console.log(data);\n serverErrorMsg.classList.remove('hide');\n scrollToPageTop();\n },\n },\n );\n };\n\n const runUpdateAccount = () => {\n // console.log('registratoin-info.js, runUpdateAccount');\n const form = document.querySelector('.pr-acct-create-form');\n const serverErrorMsg = form.querySelector('.server-error-message');\n let optInVal = 0;\n if (form.querySelectorAll('[name=\"offer-opt-in\"]').length !== 0) {\n const isChecked = form.querySelectorAll('[name=\"offer-opt-in\"]:checked').length;\n if (isChecked === 1) {\n optInVal = 1;\n }\n }\n updateAccount(\n {\n 'user-id': sessionUserId,\n 'marketing-opt-in': optInVal,\n 'first-name': document.getElementById('FirstName').value,\n 'last-name': document.getElementById('LastName').value,\n address: document.getElementById('Address').value,\n address2: document.getElementById('Address2').value,\n city: document.getElementById('City').value,\n 'state-or-province': document.getElementById('StateOrProvince').value,\n 'postal-code': document.getElementById('PostalCode').value,\n country: document.getElementById('Country').value,\n 'phone-number': formatPhone(document.getElementById('PhoneNumber').value),\n },\n {\n onSuccess: () => {\n // console.log(data);\n saveSessionData({\n userId: '',\n optInVal,\n });\n window.location = window.AddProductsUrl;\n },\n onError: (data) => {\n console.log(data);\n serverErrorMsg.classList.remove('hide');\n scrollToPageTop();\n },\n },\n );\n };\n\n if (document.querySelector('.pr-form') !== null) {\n const form = document.querySelector('.pr-acct-create-form');\n const submitBtn = form.querySelector('.submit-btn');\n // const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n const serverErrorMsg = form.querySelector('.server-error-message');\n const mismatchErrorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n const isAddAccount = passConfirmIpt !== null || passIpt !== null;\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n if (isAddAccount) {\n mismatchErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n }\n serverErrorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n if (validate(form) && passwordMatch(passIpt, passConfirmIpt)) {\n if (isExistingAccount) {\n runUpdateAccount();\n } else {\n runCreateAccount();\n }\n } else if (!passwordMatch(passIpt, passConfirmIpt)) {\n passIpt.parentNode.classList.add('ValidationFail');\n passConfirmIpt.parentNode.classList.add('ValidationFail');\n mismatchErrorMsg.classList.remove('hide');\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n } else {\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n if (!passwordStrength(passIpt, passConfirmIpt)) {\n passwordStrengthErrorMsg.classList.remove('hide');\n scrollToPageTop();\n }\n }\n });\n }\n};\nexport default registrationInfo;\n/* eslint-enable no-console */\n","import { announceMessage } from '../accessibility/status-messages';\nimport { validate, validateByType, positionWindowAtFormElement, removeAllErrors } from '../../utils/form-validation-utils';\nimport { createAccount } from './account-api';\nimport { checkLoginStatus } from './login';\n\nconst addCreateAccountCallbacks = (callbacks) => {\n window.onSubmitCallbacks = callbacks;\n};\n\nconst removeCreateAccountCallbacks = () => {\n window.onSubmitCallbacks = null;\n};\n\nconst setCreateAccountFocus = (options) => {\n const { form } = options;\n const username = form.querySelector('[name=\"acctUsername\"]');\n if (username) {\n setTimeout(() => {\n username.focus();\n }, 0);\n }\n};\nconst passwordMatch = (passIpt, passConfirmIpt) => {\n // console.log(`${passIpt.value}/${passConfirmIpt.value}`);\n if (passIpt.value === passConfirmIpt.value) {\n return true;\n }\n return false;\n};\n\nconst passwordStrength = (passIpt, passConfirmIpt) => {\n // console.log(`${passIpt.value}/${passConfirmIpt.value}`);\n if (passIpt.value === '' && passConfirmIpt.value === '') {\n return true; // ignore\n }\n if (validateByType('password', passIpt.value) && validateByType('password', passConfirmIpt.value)) {\n return true;\n }\n return false;\n};\n\nconst resetCreateAccountForm = (options) => {\n const { form } = options;\n const errorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n username.value = '';\n passIpt.value = '';\n passConfirmIpt.value = '';\n form.querySelector('[name=\"offer-opt-in\"]').checked = true;\n // Remove errors\n errorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n removeAllErrors(form);\n};\n\nconst init = (options) => {\n const { form, disableScroll } = options;\n const errorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n const submitBtn = form.querySelector('.submit-btn');\n\n const updateModalHeight = () => {\n const modalDiv = document.querySelector('#acct-login-modal');\n const contentHeight = modalDiv.querySelector('.modal-content').offsetHeight;\n modalDiv.querySelector('.modal-panel').style.height = `${contentHeight + 30}px`;\n };\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n const { onSubmitCallbacks } = window;\n passIpt.parentNode.classList.remove('ValidationFail');\n passConfirmIpt.parentNode.classList.remove('ValidationFail');\n errorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n if (validate(form) && passwordMatch(passIpt, passConfirmIpt)) {\n // Unhecked/checked opt-in map to 0/1\n let optInVal = 0;\n if (form.querySelectorAll('[name=\"offer-opt-in\"]:checked').length === 1) {\n optInVal = 1;\n }\n createAccount(\n {\n username: username.value,\n password: passIpt.value,\n 'marketing-opt-in': optInVal,\n 'microsite-name': window.micrositeName,\n },\n {\n onSuccess: (data) => {\n // console.log(data);\n if (data['user-id'] === 0 || data['user-id'] === '0') {\n existingErrorMsg.classList.remove('hide');\n announceMessage(existingErrorMsg.innerHTML);\n } else if (data['user-id'] === -1) {\n accountCreationErrorMsg.classList.remove('hide');\n announceMessage(accountCreationErrorMsg.innerHTML);\n } else {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n checkLoginStatus(() => {\n if (onSubmitCallbacks) {\n onSubmitCallbacks.onLoginSuccess();\n } else {\n window.location = `${window.myAccountUrl}?newaccount=true`;\n }\n });\n }\n },\n onError: (data) => {\n console.log(data);\n accountCreationErrorMsg.classList.remove('hide');\n announceMessage(accountCreationErrorMsg.innerHTML);\n if (onSubmitCallbacks) {\n onSubmitCallbacks.onLoginFail();\n }\n },\n },\n );\n } else if (!passwordMatch(passIpt, passConfirmIpt)) {\n passIpt.parentNode.classList.add('ValidationFail');\n passConfirmIpt.parentNode.classList.add('ValidationFail');\n errorMsg.classList.remove('hide');\n announceMessage(errorMsg.innerHTML);\n // Don't run if in modal\n // console.log(`create-account.js, disableScroll: ${disableScroll}`);\n if (!disableScroll) {\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n } else {\n updateModalHeight();\n }\n } else {\n // Don't run if in modal\n if (!disableScroll) {\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n } else {\n updateModalHeight();\n }\n if (!passwordStrength(passIpt, passConfirmIpt)) {\n passwordStrengthErrorMsg.classList.remove('hide');\n announceMessage(passwordStrengthErrorMsg.innerHTML);\n }\n }\n });\n};\n\nexport {\n addCreateAccountCallbacks,\n removeCreateAccountCallbacks,\n init,\n resetCreateAccountForm,\n setCreateAccountFocus,\n};\n/* eslint-enable no-console */\n","/* eslint-disable import/prefer-default-export */\nconst announceMessage = (message) => {\n let alertStatusMessage = document.getElementById('formStatusMessage');\n // Has screenreader alert message already been appended to the page?\n if (alertStatusMessage) {\n // Then remove\n alertStatusMessage.remove();\n }\n // And recreate so it's re-read\n const body = document.querySelector('body');\n const div = document.createElement('div');\n div.id = 'formStatusMessage';\n div.classList.add('sr-only');\n div.setAttribute('role', 'alert');\n body.appendChild(div);\n alertStatusMessage = document.getElementById('formStatusMessage');\n // Set message\n alertStatusMessage.innerHTML = message;\n};\n\nexport {\n announceMessage,\n};\n/* eslint-enable import/prefer-default-export */\n\n","/* eslint-disable no-console */\nexport default class SiteModal {\n constructor(options) {\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.modalDiv = document.querySelector(`#${options.id}`);\n this.isOpen = false;\n this.previousElementInFocus = null;\n // Modal events\n window.addEventListener('resize', this.onResize.bind(this));\n [].map.call(this.modalDiv.querySelectorAll('.close-btn, .modal-overlay, #modal-refine-btn, .close-modal-btn'), btn => btn.addEventListener('click', this.close.bind(this)));\n document.addEventListener('keyup', this.onDocumentModalKeyUp.bind(this));\n // Add open to toggleBtn\n if (options.toggleBtn) {\n options.toggleBtn.addEventListener('click', this.open.bind(this));\n }\n }\n\n onDocumentModalKeyUp(event) {\n if (event.keyCode === 27 && this.isOpen) {\n this.close(); /* eslint-disable-line no-use-before-define */\n }\n }\n\n setPreviousElementInFocus(element) {\n this.previousElementInFocus = element;\n }\n\n resetFocus() {\n if (this.previousElementInFocus) {\n this.previousElementInFocus.focus();\n }\n }\n\n updateHeight() {\n if (!this.isOpen) {\n return;\n }\n const contentHeight = this.modalDiv.querySelector('.modal-content').offsetHeight;\n this.modalDiv.querySelector('.modal-panel').style.height = `${contentHeight + 30}px`;\n }\n\n onResize() {\n if (!this.isOpen) {\n return;\n }\n this.updateHeight();\n }\n\n close() {\n this.isOpen = false;\n if (this.onClose) {\n this.onClose();\n }\n this.modalDiv.classList.remove('modal-visible');\n this.resetFocus();\n }\n\n open() {\n this.isOpen = true;\n this.modalDiv.classList.add('modal-visible');\n if (this.onOpen) {\n this.onOpen();\n }\n this.setPreviousElementInFocus(document.activeElement);\n this.modalDiv.focus();\n this.updateHeight();\n }\n}\n/* eslint-enable no-console */\n"],"sourceRoot":""}