{"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/modules/consumer-account/login.js","webpack:///./assets/src/js/modules/accessibility/status-messages.js","webpack:///./assets/src/js/events/site-events.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/swatchbook-utils.js","webpack:///./assets/src/js/modules/consumer-account/account-modal.js","webpack:///./assets/src/js/modules/consumer-account/create-account.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","$","offset","top","animate","scrollTop","removeAllErrors","removeRequiredAttrs","removeAttribute","digitalUserApi","window","digitalUserApiEndoint","addVisualization","data","callback","dealerIdParam","globals","getParameterByName","requestUrl","userId","micrositeName","request","XMLHttpRequest","open","setRequestHeader","onload","updateAccountIconStatus","updateAccountStatusMessage","onerror","console","log","send","toString","addPhoto","imageUrl","thumbUrl","description","responseData","JSON","parse","responseText","stringify","addDealer","addSwatch","productLineCode","colorNumber","swatchId","addSwatches","callbacks","swatchlist","map","swatch","widenUrl","onSuccess","onError","createAccount","forgotPassword","username","getAccountData","getItemsByType","brandId","replace","hasAssets","login","password","rememberMe","logout","removeItemByType","msgType","updateAccount","updatePassword","showNavIndicator","icon","document","getElementById","indexOf","setTimeout","showNewNavIndicator","isAuthenticated","assetType","action","msgDiv","innerHTML","updateSwatchCartStatusMessage","a","initialLanuch","onModalClose","event","onModalButtonClick","grecaptchaApi","loginUrl","myAccountUrl","preventDefault","getScore","score","displayChallenge","location","launchLoginModal","onLoginSuccess","isNewAccount","onLoginFail","error","onLogoutButtonClick","clearAllSwatchbookData","checkLoginStatus","body","getElementsByTagName","modalBtns","btn","removeEventListener","removeModalEventHandlers","logoutBtns","addEventListener","addLogoutEventHandlers","localStorageData","getAllOfType","addModalEventHandlers","toggleCreateAccountForm","isVisible","modal","style","height","resetCreateAccountForm","msg","loginMessagePhoto","loginMessageDealer","loginMessageVisualization","overlay","openAccountModal","loginSubmitBtn","modalCloseBtn","modalForm","modalErrorMsg","remember","success","dispatchSiteEvent","siteEventNames","ON_LOGGED_IN","closeAccountModal","announceMessage","onLoginSubmit","stopPropagation","setCreateAccountFocus","addCreateAccountCallbacks","optinIpt","optin","checked","ON_ACCOUNT_CREATED","submitForm","message","alertStatusMessage","div","createElement","appendChild","ADD_EXPERT","ADD_SWATCH","DEALER_PHONE_CLICK","DEALER_WEBSITE_CLICK","ON_DEALER_SEARCH","ON_FORM_SUBMIT_SUCCESS","ON_ORDER_SUBMITTED","ON_ORDER_CONFIRMATION","REMOVE_SWATCH","eventName","siteEventRegistry","keys","forEach","dispatchEvent","getEventData","initSiteEvents","Event","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","href","customer_store_group","customer_store_group_description","failure","_dcq","removeItem","defaultBtnLabel","textContent","disableUiBtn","addProductsEndpoint","OrderNumber","setStoreGroupValues","lineItemsDiv","ul","lineItems","li","zeroCt","item","substr","append","onOrderNumberLookupSuccess","UserId","thankYouAuthenticatedLink","thankYouNoAccountLink","urlParams","contains","passwordMatch","passIpt","passConfirmIpt","scrollToPageTop","scrollTo","behavior","submitBtn","mismatchErrorMsg","existingErrorMsg","accountCreationErrorMsg","passwordStrengthErrorMsg","setCookieValue","passwordStrength","getCookieValue","cookies","cookie","split","getDigitalUserId","digitalUserStr","digitalUserId","getLoggedInStatus","parseInt","date","Date","year","getFullYear","month","getMonth","day","getDate","expiryDate","toUTCString","sessionUserId","isExistingAccount","saveSessionData","detectProduction","setItem","tags","optInVal","email","first_name","last_name","phone","address1","address2","city","state","zip","country","source","serverErrorMsg","address","AddProductsUrl","runUpdateAccount","isAddAccount","runCreateAccount","swatchbookData","getItemById","items","find","saved","getSwatchbookData","ls","getItemFromObj","swbk","cart","clearSwatchbook","setItemInObj","clearCart","clearOrderData","deleteItem","ordinfo","destroy","saveItem","widenUtils","getIdFromAssetUrl","page","dateSaved","now","setAssetCaption","at","findIndex","splice","addSwatchToCart","removeSwatchFromCart","getAllSelectedSwatches","StorageActions","swatchbook","getItemsFromAccount","Promise","resolve","swatches","filter","getUserData","getSwatchProductUrlParams","productName","toLowerCase","visualizerModelId","VisualizerModelId","visualizerProgamFamilyName","VisualizerProgramFamilyName","localTesting","testData","previousElementInFocus","onDocumentModalKeyUp","keyCode","closeBtn","zIndex","setPreviousElementInFocus","activeElement","onSubmitCallbacks","removeCreateAccountCallbacks","disableScroll","errorMsg"],"mappings":"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","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 = 6);\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);\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 let field;\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n field = fieldList[i];\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.remove('ValidationFail');\n }\n};\n\nconst addRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll('.o-form__input');\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('.o-form__input');\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('.o-form__input');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].value = '';\n }\n};\n\nconst positionWindowAtFormElement = (options) => {\n let position = 0;\n if (options.element) {\n position = $(options.element).offset().top;\n }\n if (options.position) {\n position = options.position;\n }\n let offset = options.offset;\n if (!offset) {\n offset = 0;\n }\n $('html, body').animate({\n scrollTop: position + offset,\n }, 250);\n};\n\nconst init = () => {};\n/* eslint-enable no-console */\n\nexport {\n addRequiredAttrs,\n clearInputValues,\n init,\n validate,\n formatPhone,\n positionWindowAtFormElement,\n removeAllErrors,\n removeRequiredAttrs,\n validateByType,\n};\n","/* eslint-disable no-console */\n// import * as testData from './test-data';\nimport { updateAccountIconStatus, updateAccountStatusMessage } from './account-status-helpers';\n\nconst baseUrl = '';\nconst digitalUserApi = window.digitalUserApiEndoint;\n\nconst addVisualization = (data, callback) => {\n // console.log('account-api.js, addVisualization');\n // console.log(data);\n let dealerIdParam = '';\n if (window.globals.getParameterByName('dealerid') !== null) {\n dealerIdParam = `?dealerid=${window.globals.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 } = 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 request.send(JSON.stringify({\n 'user-id': window.userId,\n 'photo-url': imageUrl,\n 'thumbnail-url': thumbUrl,\n description,\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 productLineCode,\n colorNumber,\n swatchId,\n } = data;\n const requestUrl = `${digitalUserApi}/swatch`;\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 request.send(JSON.stringify({\n 'user-id': window.userId,\n 'product-line-code': productLineCode,\n 'color-number': colorNumber,\n 'swatch-id': swatchId,\n }));\n};\n\nconst addSwatches = (data, callbacks) => {\n // console.log('account-api.js, addSwatches');\n const swatchlist = data.map(swatch => ({\n 'user-id': window.userId,\n 'product-line-code': swatch.productLineCode,\n 'color-number': swatch.colorNumber,\n 'swatch-id': swatch.swatchId,\n 'widen-url': swatch.widenUrl,\n }));\n // console.log(swatchlist);\n const requestUrl = `${baseUrl}/addswatches`;\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 data: JSON.stringify({\n swatchlist,\n }),\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 'visualization':\n requestUrl = `${digitalUserApi}/visualization`;\n msgType = 'visualizer scene';\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/swatch`;\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 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}/dealer/brand/${window.brandId}/user/${window.userId}`;\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photos/user/${window.userId}`;\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/swatches/microsite/${window.micrositeName}/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 if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n /*\n if (window.localTesting) {\n request.onloadend = () => {\n if (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 '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 }\n };\n }\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 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 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 /* 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 request.send();\n};\n\nexport {\n addVisualization,\n addPhoto,\n addDealer,\n addSwatch,\n addSwatches,\n createAccount,\n forgotPassword,\n getAccountData,\n getItemsByType,\n hasAssets,\n login,\n logout,\n removeItemByType,\n updateAccount,\n updatePassword,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { hasAssets } from './account-api';\n\nconst showNewNavIndicator = (status) => {\n const icon = document.querySelector('header .icon-item-my-account');\n if (icon === null) {\n return;\n }\n const visibleClass = 'items-added-to-account';\n if (!status) {\n icon.classList.remove(visibleClass);\n } else {\n icon.classList.add(visibleClass);\n }\n};\n\nconst showNavIndicator = (status) => {\n const icon = document.getElementById('swbk-plus');\n // if element doesn't exist, use new nav indicator\n if (icon === null) {\n showNewNavIndicator(status);\n return;\n }\n const visibleClass = 'is-visible';\n const growClass = 'is-grow';\n\n if (!status) {\n icon.classList.remove(visibleClass);\n return;\n }\n if (icon.classList.toString().indexOf(visibleClass) !== -1) {\n icon.classList.add(growClass);\n setTimeout(() => {\n icon.classList.remove(growClass);\n }, 200);\n } else {\n icon.classList.add(visibleClass);\n }\n};\n\nconst updateAccountStatusMessage = (assetType, action) => {\n const msgDiv = document.querySelector('.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 updateSwatchCartStatusMessage = (action) => {\n const msgDiv = document.querySelector('.my-account-status-message');\n if (!msgDiv) {\n return;\n }\n // Clear existing message\n msgDiv.innerHTML = '';\n setTimeout(() => {\n if (action === 'add') {\n msgDiv.innerHTML = 'Swatch has been added to your swatch cart.';\n }\n if (action === 'remove') {\n msgDiv.innerHTML = 'Swatch has been removed from your swatch cart.';\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 updateSwatchCartStatusMessage,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { announceMessage } from '../accessibility/status-messages';\nimport { clearAllSwatchbookData, getAllOfType } from '../swatchbook-utils';\nimport {\n dispatchSiteEvent,\n siteEventNames,\n} from '../../events/site-events';\nimport { login, logout, addSwatches } from './account-api';\nimport { openAccountModal, closeAccountModal } from './account-modal';\nimport { addCreateAccountCallbacks, resetCreateAccountForm, setCreateAccountFocus } from './create-account';\nimport { updateAccountIconStatus } from './account-status-helpers';\nimport { validate } from '../../utils/form-validation-utils';\n\nlet initialLanuch = true;\n\nconst loginModalId = 'acct-login-modal';\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 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 announceMessage(modalErrorMsg.innerHTML);\n } else {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n dispatchSiteEvent(siteEventNames.ON_LOGGED_IN);\n checkLoginStatus(() => { // eslint-disable-line no-use-before-define\n if (callbacks) {\n if (callbacks.onLoginSuccess) {\n callbacks.onLoginSuccess();\n }\n }\n });\n const modal = document.querySelector(`#${loginModalId}`);\n closeAccountModal(modal);\n }\n },\n onError: () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onLoginFail) {\n callbacks.onLoginFail();\n }\n },\n },\n );\n }\n};\n\nconst onModalClose = (event, callback) => {\n if (callback) {\n callback();\n }\n};\n\nconst onModalButtonClick = (event) => {\n const {\n grecaptchaApi,\n isAuthenticated,\n loginUrl,\n myAccountUrl,\n } = window;\n if (isAuthenticated) {\n return;\n }\n event.preventDefault();\n try {\n grecaptchaApi.getScore({\n action: 'login_click',\n callback: (score) => {\n // Only launch modal if score threshold is met.\n // Otherwise should redirect to login page\n // (w/ recaptcha challenge).\n if (grecaptchaApi.displayChallenge(score)) {\n window.location = loginUrl;\n } else {\n launchLoginModal({ // eslint-disable-line no-use-before-define\n type: '',\n callbacks: {\n onLoginSuccess: (isNewAccount) => {\n if (isNewAccount) {\n window.location = `${myAccountUrl}?newaccount=true`;\n } else {\n window.location = myAccountUrl;\n }\n },\n onLoginFail: () => {},\n },\n });\n }\n },\n });\n } catch (error) {\n console.log(error);\n window.location = loginUrl;\n }\n};\n\nconst onLogoutButtonClick = (event) => {\n event.preventDefault();\n logout({\n onSuccess: () => {\n clearAllSwatchbookData();\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 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 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 // Check to see if there are any swatches in localstorage\n const localStorageData = getAllOfType('swatch');\n if (localStorageData.length !== 0) {\n addSwatches(localStorageData, {\n onSuccess: () => {\n clearAllSwatchbookData();\n updateAccountIconStatus();\n if (callback) {\n callback();\n }\n },\n onError: () => {\n updateAccountIconStatus();\n if (callback) {\n callback();\n }\n },\n });\n } else {\n updateAccountIconStatus();\n if (callback) {\n callback();\n }\n }\n } else {\n body.classList.remove('is-authenticated');\n // Do not add unless recaptcha threshold score is met\n addModalEventHandlers();\n updateAccountIconStatus();\n }\n};\n\nconst toggleCreateAccountForm = (isVisible) => {\n const modal = document.getElementById(loginModalId);\n if (isVisible) {\n modal.querySelector('.account-login-container').classList.add('hidden');\n modal.querySelector('.login-side-column').classList.add('hidden');\n modal.querySelector('.create-account-container').classList.remove('hidden');\n modal.querySelector('.create-account-side-column').classList.remove('hidden');\n if (modal.querySelectorAll('.login-message-wrapper').length !== 0) {\n modal.querySelector('.login-message-wrapper').classList.add('hidden');\n }\n modal.style.height = '600px';\n } else {\n modal.querySelector('.account-login-container').classList.remove('hidden');\n modal.querySelector('.login-side-column').classList.remove('hidden');\n modal.querySelector('.create-account-container').classList.add('hidden');\n modal.querySelector('.create-account-side-column').classList.add('hidden');\n modal.removeAttribute('style');\n if (modal.querySelectorAll('.login-message-wrapper').length !== 0) {\n modal.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 const modal = document.getElementById(loginModalId);\n if (type) {\n modal.classList.add('c-modal--loginCTA');\n modal.querySelector('.login-message-wrapper').classList.remove('hidden');\n let msg = '';\n switch (type) {\n case 'photo':\n msg = window.loginMessagePhoto;\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 modal.querySelector('.login-message-wrapper p').innerHTML = msg;\n } else {\n modal.classList.remove('c-modal--loginCTA');\n modal.querySelector('.login-message-wrapper').classList.add('hidden');\n modal.querySelector('.login-message-wrapper p').innerHTML = '';\n }\n const overlay = document.querySelector('#modal-overlay');\n openAccountModal(modal);\n // Submit modal form\n const loginSubmitBtn = modal.querySelector('.acct-login-modal-form .o-form__submit');\n const modalCloseBtn = modal.querySelector('#close-btn');\n // Only run once\n if (initialLanuch) {\n initialLanuch = false;\n loginSubmitBtn.addEventListener('click', (event) => {\n onLoginSubmit(event, callbacks);\n });\n modalCloseBtn.addEventListener('click', (event) => {\n event.stopPropagation();\n onModalClose(event, callbacks.onLoginFail);\n });\n if (overlay) {\n overlay.addEventListener('click', event => onModalClose(event, callbacks.onLoginFail));\n }\n // Toggle create account form\n if (type === 'visualization' || type === 'photo' || type === 'location') {\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 // Get opt-in status and dispatch event\n const optinIpt = document.getElementById('modal-offer-opt-in');\n const optin = optinIpt ? optinIpt.checked : false;\n dispatchSiteEvent(siteEventNames.ON_ACCOUNT_CREATED, { optin });\n callbacks.onLoginSuccess(true);\n closeAccountModal(modal);\n },\n onLoginFail: () => {\n callbacks.onLoginFail();\n },\n });\n toggleCreateAccountForm(true);\n }));\n }\n }\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 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","const siteEventNames = {\n ADD_EXPERT: 'addexpert',\n ADD_SWATCH: 'addswatch',\n DEALER_PHONE_CLICK: 'dealerphoneclick',\n DEALER_WEBSITE_CLICK: 'dealerwebsiteclick',\n ON_ACCOUNT_CREATED: 'onaccountcreated',\n ON_DEALER_SEARCH: 'ondealersearch',\n ON_FORM_SUBMIT_SUCCESS: 'onformsubmitsuccess',\n ON_LOGGED_IN: 'onloggedin',\n ON_ORDER_SUBMITTED: 'onordersubmitted',\n ON_ORDER_CONFIRMATION: 'onorderconfirmation',\n REMOVE_SWATCH: 'removeswatch',\n};\n\nconst initSiteEvents = () => {\n if (window.siteEventRegistry) {\n return;\n }\n // Init events and add them to window scope here\n window.siteEventRegistry = {};\n Object.keys(siteEventNames).forEach((key) => {\n const value = siteEventNames[key];\n siteEventRegistry[value] = {\n event: new Event(value),\n data: {},\n }\n });\n};\n\nconst getEventData = (eventName) => {\n const { siteEventRegistry } = window;\n let data = {};\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n data = siteEventRegistry[key].data;\n }\n });\n return data;\n}\n\nconst dispatchSiteEvent = (eventName, data) => {\n const { siteEventRegistry } = window;\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n const event = siteEventRegistry[key].event;\n siteEventRegistry[key].data = data;\n window.dispatchEvent(event);\n }\n });\n};\n\nexport {\n dispatchSiteEvent,\n getEventData,\n initSiteEvents,\n siteEventNames,\n};\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('.o-form__submit');\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('grbr_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('grbr_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('o-form__submit--disabled');\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('o-form__submit--disabled');\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('grbr_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('grbr_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 const orderNumber = getProductCodeEntry();\n const urlParams = `?redirect=true&orderno=${orderNumber}`;\n if (checkForSessionData()) {\n // Save lead\n submitLead(() => {\n if (isAuthenticated) {\n window.location = thankYouAuthenticatedLink + urlParams;\n } else {\n window.location = thankYouNoAccountLink + urlParams;\n }\n });\n } else {\n if (isAuthenticated) { /* eslint-disable-line no-lonely-if */\n window.location = thankYouAuthenticatedLink + urlParams;\n } else {\n window.location = thankYouNoAccountLink + urlParams;\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('grbr_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('.o-form__submit');\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('grbr_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=/; httponly; secure`;\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\n// Retrieve digital user id for use in Usabilla survey\nconst getDigitalUserId = () => {\n const { sessionStorage, userId } = window;\n const digitalUserStr = sessionStorage.getItem('grbr_userId');\n let digitalUserId = userId;\n if (digitalUserStr) {\n digitalUserId = JSON.parse(digitalUserStr).userId;\n }\n if (isNaN(digitalUserId)) { /* eslint-disable-line no-restricted-globals */\n digitalUserId = '';\n }\n return digitalUserId;\n};\n\nexport {\n getDigitalUserId,\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';\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('grbr_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, globals } = window;\n const { detectProduction } = globals;\n // If user id is returned, save to session storage\n if (data.userId !== '') {\n sessionStorage.setItem('grbr_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('grbr_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('.o-form__submit');\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","/* eslint-disable no-console */\nimport { getAccountData } from './consumer-account/account-api';\nimport { updateSwatchCartStatusMessage } from './consumer-account/account-status-helpers';\n\nlet swatchbookData;\n\nconst getItemById = (id) => {\n // console.log(`swatchbook-utils.js, getItemById, id: ${id}`);\n const item = swatchbookData.items.find(saved => saved.id === id);\n if (item !== undefined) {\n return item;\n }\n return null;\n};\n\nconst getAllOfType = (type) => {\n if (!swatchbookData) {\n return [];\n }\n const arr = swatchbookData.items.filter(item => item.type === type);\n return arr;\n};\n\nconst getSwatchbookData = () => {\n let data = window.ls.getItemFromObj(window.ls.cookies.swbk);\n if (data === null) {\n // Set up an empty data object\n data = { items: [], cart: [] };\n }\n return data;\n};\n\nconst getUserData = (callback) => {\n getAccountData(callback);\n};\n\nconst saveItem = (options) => {\n switch(options.type) {\n case 'swatch':\n break;\n case 'photo':\n options.id = window.widenUtils.getIdFromAssetUrl(options.imageUrl);\n break;\n case 'location':\n options.id = 'dealer';\n break;\n }\n if (getItemById(options.id) !== null) {\n // console.log(`${options.id} already in swatchbook.`);\n return;\n }\n // Add timestamp\n options.page = window.location.href;\n options.dateSaved = Date.now();\n swatchbookData.items.push(options);\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n if (options.type === 'swatch') {\n updateSwatchCartStatusMessage('add');\n }\n if (options.type === 'photo' && options.description == null) {\n window.widenUtils.setAssetCaption(options.id, options.imageUrl);\n }\n};\n\nconst removeItem = (type, val) => {\n let id;\n switch(type) {\n case 'swatch':\n id = val;\n break;\n case 'photo':\n id = window.widenUtils.getIdFromAssetUrl(val);\n break;\n case 'location':\n id = val;\n break;\n case 'visualization':\n id = val;\n break;\n default:\n break;\n }\n const at = swatchbookData.items.findIndex(saved => saved.id === id);\n if (at !== undefined) {\n // Remove item\n swatchbookData.items.splice(at, 1);\n // console.log(`${id} removed from swatchbook.`);\n // Update data object in storage\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n if (type === 'swatch') {\n updateSwatchCartStatusMessage('remove');\n }\n }\n};\n\nconst addSwatchToCart = (id) => {\n if (getSwatchbookData === null) {\n init();\n }\n if (swatchbookData.cart.indexOf(id) === -1) {\n swatchbookData.cart.push(id);\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n }\n};\n\nconst removeSwatchFromCart = (id) => {\n const at = swatchbookData.cart.findIndex(saved => saved === id);\n if (at !== -1) {\n // Remove item\n // console.log(`${id} removed from cart.`);\n swatchbookData.cart.splice(at, 1);\n // Update data object in storage\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n }\n};\n\nconst clearSwatchbook = () => {\n if (swatchbookData === null || !swatchbookData) {\n return;\n }\n swatchbookData.items = [];\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n};\n\nconst clearCart = () => {\n if (swatchbookData === null || !swatchbookData) {\n return;\n }\n swatchbookData.cart = [];\n window.ls.setItemInObj(window.ls.cookies.swbk, swatchbookData);\n};\n\nconst clearOrderData = () => {\n clearCart();\n window.ls.deleteItem(window.ls.cookies.ordinfo);\n};\n\nconst destroy = () => {\n swatchbookData = null;\n};\n\nconst clearAllSwatchbookData = () => {\n if (swatchbookData === null || !swatchbookData) {\n return;\n }\n clearOrderData();\n clearSwatchbook();\n destroy();\n};\n\nconst getSwatchProductUrlParams = (productName, callback) => {\n // console.log(productName.toLowerCase());\n // Pass product name (lc) to get visualization url params...\n const requestUrl = '/api/service/getvisualizationproperties?pagename=' + productName.toLowerCase();\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 data = JSON.parse(request.responseText);\n if (callback) {\n callback({\n visualizerModelId: data.VisualizerModelId,\n visualizerProgamFamilyName: data.VisualizerProgramFamilyName\n });\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n if (window.localTesting) {\n if (callback) {\n let testData = {\n visualizerModelId: null,\n visualizerProgamFamilyName: null\n };\n if (productName.indexOf('Cellular Shades') !== -1) {\n testData = {\n visualizerModelId: 'CELL',\n visualizerProgamFamilyName: 'CELL'\n };\n }\n callback(testData);\n }\n return;\n }\n request.send();\n};\n\nconst getAllSelectedSwatches = () => {\n const {\n isAuthenticated,\n StorageActions,\n swatchbook,\n } = window;\n const { getItemsFromAccount } = StorageActions;\n const { getAllOfType } = swatchbook;\n const type = 'swatch';\n return new Promise((resolve) => {\n if (isAuthenticated) {\n getItemsFromAccount(type, (data) => {\n resolve(data.swatches);\n });\n } else {\n resolve(getAllOfType(type));\n }\n });\n};\n\nconst init = () => {\n swatchbookData = getSwatchbookData();\n};\n\nexport {\n saveItem,\n removeItem,\n addSwatchToCart,\n removeSwatchFromCart,\n getAllSelectedSwatches,\n getSwatchbookData,\n getItemById,\n getAllOfType,\n getUserData,\n clearAllSwatchbookData,\n clearCart,\n clearOrderData,\n clearSwatchbook,\n getSwatchProductUrlParams,\n init,\n destroy,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { clearInputValues, removeAllErrors } from '../../utils/form-validation-utils';\n\nlet previousElementInFocus = null;\n\nconst onDocumentModalKeyUp = (event, modal) => {\n if (event.keyCode === 27) {\n closeAccountModal(modal); // eslint-disable-line no-use-before-define\n }\n};\n\nconst setPreviousElementInFocus = (element) => {\n previousElementInFocus = element;\n};\n\nconst resetFocus = () => {\n if (previousElementInFocus) {\n previousElementInFocus.focus();\n }\n};\n\nconst openAccountModal = (modal) => {\n if (!modal) {\n return;\n }\n // Check if overlay bg exists\n let overlay = document.querySelector('#modal-overlay');\n if (!overlay) {\n const body = document.getElementsByTagName('body')[0];\n overlay = document.createElement('div');\n body.appendChild(overlay);\n overlay.setAttribute('id', 'modal-overlay');\n overlay.classList.add('c-modalOverlay');\n }\n overlay.style.zIndex = '9998';\n // Add active classes\n modal.classList.add('modal-visible');\n overlay.classList.add('modal-visible');\n const closeBtn = modal.querySelector('#close-btn');\n // Add events\n closeBtn.addEventListener('click', () => closeAccountModal(modal)); // eslint-disable-line no-use-before-define\n overlay.addEventListener('click', () => closeAccountModal(modal)); // eslint-disable-line no-use-before-define\n document.addEventListener('keyup', event => onDocumentModalKeyUp(event, modal));\n setPreviousElementInFocus(document.activeElement);\n modal.focus();\n};\n\nconst closeAccountModal = (modal) => {\n // Clear any form values, input errors, error messages\n const form = modal.querySelector('.acct-login-modal-form');\n clearInputValues(form);\n removeAllErrors(form);\n form.querySelector('.form-error-message').classList.add('hide');\n // Remove active classes\n modal.classList.remove('modal-visible');\n modal.removeAttribute('style');\n const closeBtn = modal.querySelector('#close-btn');\n const overlay = document.querySelector('#modal-overlay');\n overlay.classList.remove('modal-visible');\n // Remove event listeners\n closeBtn.removeEventListener('click', closeAccountModal);\n overlay.removeEventListener('click', closeAccountModal);\n document.removeEventListener('keyup', onDocumentModalKeyUp);\n resetFocus();\n};\n\nexport {\n openAccountModal,\n closeAccountModal,\n};\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';\nimport {\n dispatchSiteEvent,\n siteEventNames,\n} from '../../events/site-events';\n\nconst addCreateAccountCallbacks = (callbacks) => {\n window.onSubmitCallbacks = callbacks;\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};\n\nconst passwordMatch = (passIpt, passConfirmIpt) => {\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 // Reset\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\n\nconst init = (options) => {\n // console.log('create-account.js, init');\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('.o-form__submit');\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 // Depending on form class?... change out data object?\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 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 // Get opt-in status and dispatch event\n const optin = optInVal === 1;\n dispatchSiteEvent(siteEventNames.ON_ACCOUNT_CREATED, { optin });\n checkLoginStatus(() => {\n if (onSubmitCallbacks) {\n onSubmitCallbacks.onLoginSuccess();\n } else {\n window.location = `${window.myAccountUrl}?newaccount=true`;\n }\n });\n }\n },\n onError: () => {\n errorMsg.classList.remove('hide');\n announceMessage(errorMsg.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 }\n } else {\n // Don't run if in modal\n if (!disableScroll) {\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\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"],"sourceRoot":""}