{"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/login.js","webpack:///./assets/src/js/modules/consumer-account/account-nav-icon.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/utils/url-utils.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","field","isValid","required","isFormValid","getAttribute","querySelector","id","parentNode","classList","remove","add","formatPhone","match","arr","join","substring","positionWindowAtFormElement","options","position","element","$","offset","top","animate","scrollTop","removeAllErrors","removeRequiredAttrs","removeAttribute","digitalUserApi","window","digitalUserApiEndoint","addVisualization","data","callback","dealerIdParam","getParameterByName","requestUrl","userId","micrositeName","request","XMLHttpRequest","open","setRequestHeader","onload","onerror","console","log","send","toString","addPhoto","imageUrl","thumbUrl","description","productLineId","productLineName","responseData","JSON","parse","responseText","stringify","addDealer","addSwatch","productLineCode","colorNumber","swatchId","widenUrl","addSwatches","callbacks","swatchlist","map","swatch","onSuccess","onError","createAccount","forgotPassword","username","getAccountData","getItemsByType","brandId","replace","hasAssets","login","password","rememberMe","logout","removeItemByType","updateAccount","updatePassword","initialLanuch","onModalClose","event","onModalButtonClick","isAuthenticated","preventDefault","launchLoginModal","onLoginSuccess","location","myAccountUrl","onLoginFail","onLogoutButtonClick","clearAllSwatchbookData","loginUrl","checkLoginStatus","body","document","getElementsByTagName","modalBtns","btn","removeEventListener","removeModalEventHandlers","logoutBtns","addEventListener","addLogoutEventHandlers","localStorageData","getAllOfType","updateAccountIconStatus","addModalEventHandlers","toggleCreateAccountForm","isVisible","modal","getElementById","style","height","resetCreateAccountForm","msg","loginMessagePhoto","loginMessageDealer","loginMessageVisualization","innerHTML","overlay","openAccountModal","loginSubmitBtn","modalCloseBtn","modalForm","modalErrorMsg","remember","success","closeAccountModal","onLoginSubmit","stopPropagation","addCreateAccountCallbacks","submitForm","updateIconCss","icon","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","push","removeItem","defaultBtnLabel","textContent","disableUiBtn","addProductsEndpoint","OrderNumber","setStoreGroupValues","lineItemsDiv","ul","createElement","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","url","results","exec","decodeURIComponent","getUrlSafeHash","str","toLowerCase","getCookieValue","cookies","cookie","split","getDigitalUserId","digitalUserStr","digitalUserId","getLoggedInStatus","parseInt","date","Date","year","getFullYear","month","getMonth","day","getDate","expiryDate","toUTCString","sessionUserId","isExistingAccount","saveSessionData","setItem","tags","optInVal","isProd","forEach","indexOf","detectProduction","email","first_name","last_name","phone","address1","address2","city","state","zip","country","source","serverErrorMsg","address","AddProductsUrl","runUpdateAccount","isAddAccount","runCreateAccount","swatchbookData","getItemById","getSwatchbookData","items","find","saved","getTruncatedWidenUrl","updateNavIcon","useLocalStorage","localStorage","cart","order","saveSwatchbookItem","modalData","div","dataset","imageStory","appendChild","trList","tr","innerText","removeChild","encodeSwatchModalTableDataById","page","dateSaved","now","removeSwatchbookItem","at","findIndex","splice","clearSwatchbook","clearOrderData","destroy","saveItem","widenUtils","getIdFromAssetUrl","setAssetCaption","decodeSwatchModalTableDataById","td","rows","index","localStorageSwatchEventHandlers","collection","colorName","productLine","styleId","swatchCatId","swatchCatName","swatchStyleName","newSwatch","displayMessage","addSwatchToCart","removeSwatchFromCart","filter","updateOrderData","getUserData","clearCart","getSwatchProductUrlParams","productName","isVisualizerActive","visualizerModelId","VisualizerModelId","visualizerProgamFamilyName","VisualizerProgramFamilyName","getProductDetailsPageUrl","previousElementInFocus","getPreviousElementInFocus","onDocumentModalKeyUp","keyCode","closeBtn","focus","zIndex","setPreviousElementInFocus","activeElement","onSubmitCallbacks","removereateAccountCallbacks","disableScroll","errorMsg","checked"],"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 = 4);\n","/* eslint-disable no-console */\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 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 if (!isValid) {\n isFormValid = isValid;\n // Toggle error class on element label\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.add('ValidationFail');\n } else {\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.remove('ValidationFail');\n }\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; /* eslint-disable-line prefer-destructuring */\n }\n let offset = options.offset; /* eslint-disable-line prefer-destructuring */\n if (!offset) {\n offset = 0;\n }\n $('html, body').animate({\n scrollTop: position + offset,\n }, 250);\n};\n\nconst init = () => {};\n\nexport {\n addRequiredAttrs,\n clearInputValues,\n init,\n validate,\n formatPhone,\n positionWindowAtFormElement,\n removeAllErrors,\n removeRequiredAttrs,\n validateByType,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\n// import * as testData from './test-data';\nimport { getParameterByName } from '../../utils/url-utils';\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 (getParameterByName('dealerid') !== null) {\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 }\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 }\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 '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 }\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 widenUrl,\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 }\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 'widen-url': widenUrl,\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 switch (type) {\n case 'location':\n requestUrl = `${digitalUserApi}/dealer`;\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photo`;\n break;\n case 'visualization':\n requestUrl = `${digitalUserApi}/visualization`;\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/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 }\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 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 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 { clearAllSwatchbookData, getAllOfType } from '../swatchbook-utils';\nimport { login, logout, addSwatches } from './account-api';\nimport { openAccountModal, closeAccountModal } from './account-modal';\nimport { addCreateAccountCallbacks, resetCreateAccountForm } from './create-account';\nimport { validate } from '../../utils/form-validation-utils';\nimport { updateAccountIconStatus } from './account-nav-icon';\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 } 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 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 // 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: () => {\n window.location = window.myAccountUrl;\n },\n onLoginFail: () => {\n //\n },\n },\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 // 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 // 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 if (callback) {\n callback();\n updateAccountIconStatus();\n }\n },\n onError: () => {\n if (callback) {\n callback();\n }\n },\n });\n } else {\n if (callback) { /* eslint-disable-line no-lonely-if */\n callback();\n updateAccountIconStatus();\n }\n }\n } else {\n body.classList.remove('is-authenticated');\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 // const toggleCreateAccountBtn = modal.querySelector('.create-account-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') {\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 event.preventDefault();\n addCreateAccountCallbacks({\n onLoginSuccess: () => {\n callbacks.onLoginSuccess();\n closeAccountModal(modal);\n },\n onLoginFail: () => {\n // console.log('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 no-console, import/prefer-default-export */\nimport { hasAssets } from './account-api';\n\nconst updateIconCss = (status) => {\n const icon = document.querySelector('.topbar-section .my-account-item');\n const visibleClass = 'items-added-to-swatchbook';\n\n if (!status) {\n icon.classList.remove(visibleClass);\n } else {\n icon.classList.add(visibleClass);\n }\n};\n\nconst updateAccountIconStatus = () => {\n if (!window.isAuthenticated) {\n return;\n }\n hasAssets((data) => {\n if (data['has-assets']) {\n updateIconCss(true);\n } else {\n updateIconCss(false);\n }\n });\n};\n\nexport {\n updateAccountIconStatus,\n};\n/* eslint-enable no-console, import/prefer-default-export */\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('bali_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('bali_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('bali_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('bali_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('bali_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('bali_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, 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 null;\n }\n if (!results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nconst getUrlSafeHash = str => (\n str.toLowerCase().replace(/[\\s|\\/]+/g, '-').replace(/\\&/g, 'and').replace(/[^a-zA-Z0-9-]+/g, '')\n);\n\nexport {\n getParameterByName,\n getUrlSafeHash,\n};\n/* eslint-enable no-console, no-useless-escape */\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};\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('bali_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('bali_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 detectProduction = () => {\n const prodUrls = [\n 'www.baliblinds.com',\n 'https://baliblinds.com',\n 'http://baliblinds.com',\n ];\n const { location } = window;\n const { href } = location;\n let isProd = false;\n prodUrls.forEach((url) => {\n if (href.indexOf(url) !== -1) {\n isProd = true;\n }\n });\n return isProd;\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('bali_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('bali_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: (data) => {\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 { updateAccountIconStatus } from './consumer-account/account-nav-icon';\nimport { getAccountData } from './consumer-account/account-api';\n\nconst swatchbookLsObj = 'bali_swbk';\nlet swatchbookData;\n\nconst getItemById = (id) => {\n if (!swatchbookData) {\n swatchbookData = getSwatchbookData(); /* eslint-disable-line no-use-before-define */\n }\n const item = swatchbookData.items.find(saved => saved.id === id);\n if (item !== undefined) {\n return item;\n }\n return null;\n};\n\n// We're only saving the portion of the url AFTER springswindowfashions/\nconst getTruncatedWidenUrl = (url) => {\n if (url.indexOf('springswindowfashions/') !== -1) {\n return url.split('springswindowfashions/')[1];\n }\n return url;\n};\n\nconst encodeSwatchModalTableDataById = (id) => {\n const div = document.createElement('div');\n let s = '';\n div.classList.add('hidden');\n div.innerHTML = document.querySelector(`#${id} .image-wrapper`).dataset.imageStory;\n document.getElementsByTagName('body')[0].appendChild(div);\n const trList = div.getElementsByTagName('table')[0].querySelectorAll('tr');\n let tr;\n for (let i = 0; i < trList.length; i++) { /* eslint-disable-line no-plusplus */\n tr = trList[i];\n if (tr.querySelector('.lightbox-label')) {\n s += `${tr.querySelector('.lightbox-label').innerText},,`;\n }\n if (tr.querySelector('.lightbox-value')) {\n s += tr.querySelector('.lightbox-value').innerText;\n }\n s += ';;';\n }\n document.getElementsByTagName('body')[0].removeChild(div);\n return s;\n};\n\nconst decodeSwatchModalTableDataById = (data) => {\n const arr = data.split(';;');\n let td = [];\n let rows = '';\n let className = '';\n arr.forEach((tr) => {\n rows += '';\n td = tr.split(',,');\n td.forEach((str, index) => {\n if (index === 0 && td.length === 2) {\n className = 'lightbox-label';\n } else {\n className = 'lightbox-value';\n }\n rows += `${str}`;\n });\n rows += '';\n });\n return rows.replace(/\"/g, '"');\n};\n\nconst isEmpty = () => {\n if (swatchbookData.items.length === 0) {\n return true;\n }\n return false;\n};\n\nconst updateNavIcon = () => {\n // Do not update icon if window.useLocalStorage = false and window.isAuthenticated = false\n if (!window.useLocalStorage && !window.isAuthenticated) {\n return;\n }\n let icon = document.querySelector('.my-account-item');\n if (icon === null) {\n icon = document.querySelector('.my-favorites-item');\n }\n const addedClass = 'items-added-to-swatchbook';\n if (icon === null) {\n return;\n }\n if (isEmpty()) {\n icon.classList.remove(addedClass);\n } else {\n icon.classList.add(addedClass);\n }\n};\n\nconst getSwatchbookData = () => {\n let data = JSON.parse(window.localStorage.getItem(swatchbookLsObj));\n if (data === null) {\n // Set up an empty data object\n data = { items: [], cart: [], order: [] };\n } else {\n /* eslint-disable no-lonely-if */\n if (data.order === undefined) {\n data.order = [];\n }\n /* eslint-enable no-lonely-if */\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 default:\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.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n updateAccountIconStatus();\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.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n updateAccountIconStatus();\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 saveSwatchbookItem = (options) => {\n if (options.type === 'swatch') {\n options.modalData = encodeSwatchModalTableDataById(options.id);\n }\n if (getItemById(options.id) === null) {\n options.page = window.location.href;\n options.dateSaved = Date.now();\n swatchbookData.items.push(options);\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n updateNavIcon();\n }\n};\n\nconst removeSwatchbookItem = (options) => {\n let id;\n switch (options.type) {\n case 'swatch':\n id = options.value;\n break;\n case 'photo':\n id = options.value;\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 // Update data object in storage\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n updateNavIcon();\n};\n\nconst localStorageSwatchEventHandlers = (item) => {\n if (!item) {\n return;\n }\n const id = item.getAttribute('id');\n const btn = item.querySelector('.swatchbutton');\n const label = item.querySelector('.swatchbutton--label');\n if (btn) {\n // Toggle button to remove state if in swatchbook\n if (getItemById(id) !== null) {\n btn.classList.add('is-active');\n label.innerHTML = 'Remove Swatch';\n } else {\n btn.classList.remove('is-active');\n label.innerHTML = 'Add Swatch';\n }\n // Add/remove swatch event handlers\n btn.addEventListener('click', (event) => {\n event.stopPropagation();\n // Remove\n if (btn.classList.toString().indexOf('is-active') !== -1) {\n removeSwatchbookItem({\n type: 'swatch',\n value: id,\n });\n btn.classList.remove('is-active');\n label.innerHTML = 'Add Swatch';\n // Add\n } else {\n const data = {\n collection: btn.getAttribute('data-collection'),\n colorName: btn.getAttribute('data-colorName'),\n colorNumber: btn.getAttribute('data-colorNumber'),\n id: btn.getAttribute('data-id'),\n imageUrl: btn.getAttribute('data-imageUrl'),\n productLine: btn.getAttribute('data-productLine'),\n productLineCode: btn.getAttribute('data-productLineCode'),\n styleId: btn.getAttribute('data-styleId'),\n swatchCatId: btn.getAttribute('data-swatchCatId'),\n swatchCatName: btn.getAttribute('data-swatchCatName'),\n swatchStyleName: btn.getAttribute('data-swatchStyleName'),\n swatchId: btn.getAttribute('data-swatchId'),\n newSwatch: btn.getAttribute('data-new-swatch'),\n displayMessage: btn.getAttribute('data-display-message'),\n type: btn.getAttribute('data-type'),\n widenUrl: getTruncatedWidenUrl(btn.getAttribute('data-imageUrl')),\n };\n saveSwatchbookItem(data);\n btn.classList.add('is-active');\n label.innerHTML = 'Remove Swatch';\n }\n });\n }\n};\n\nconst addSwatchToCart = (id) => {\n if (getSwatchbookData === null) {\n init(); /* eslint-disable-line no-use-before-define */\n }\n if (swatchbookData.cart.indexOf(id) === -1) {\n swatchbookData.cart.push(id);\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n};\n\nconst removeSwatchFromCart = (id) => {\n const at = swatchbookData.cart.findIndex(saved => saved === id);\n if (at !== -1) {\n // Remove item\n swatchbookData.cart.splice(at, 1);\n // Update data object in storage\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n};\n\nconst clearSwatchbook = () => {\n if (swatchbookData === null) {\n return;\n }\n swatchbookData.items = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst clearCart = () => {\n if (swatchbookData === null) {\n return;\n }\n swatchbookData.cart = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst updateOrderData = (data) => {\n swatchbookData.order = data;\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst clearOrderData = () => {\n swatchbookData.cart = [];\n swatchbookData.order = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst destroy = () => {\n swatchbookData = null;\n};\n\nconst clearAllSwatchbookData = () => {\n if (!swatchbookData) {\n swatchbookData = getSwatchbookData();\n }\n clearOrderData();\n clearSwatchbook();\n destroy();\n};\n\nconst init = () => {\n swatchbookData = getSwatchbookData();\n // console.log(swatchbookData);\n if (window.useLocalStorage) {\n updateNavIcon();\n } else {\n updateAccountIconStatus();\n }\n};\n\nconst getProductDetailsPageUrl = (productLineId, callback) => {\n const requestUrl = `/GetProductDetailsUrl?productLineId=${productLineId}`;\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.url);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nconst getSwatchProductUrlParams = (productName, callback) => {\n // If visualizer isn't active immediately run the callback method\n if (!window.isVisualizerActive) {\n callback();\n return;\n }\n // console.log(productName.toLowerCase());\n // Pass product name (lc) to get visualization url params...\n const requestUrl = `/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 responseData = JSON.parse(request.responseText);\n if (callback) {\n callback({\n visualizerModelId: responseData.VisualizerModelId,\n visualizerProgamFamilyName: responseData.VisualizerProgramFamilyName,\n });\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nexport {\n saveItem,\n removeItem,\n getTruncatedWidenUrl,\n saveSwatchbookItem,\n decodeSwatchModalTableDataById,\n removeSwatchbookItem,\n localStorageSwatchEventHandlers,\n addSwatchToCart,\n removeSwatchFromCart,\n getSwatchbookData,\n getItemById,\n getAllOfType,\n updateOrderData,\n getUserData,\n clearAllSwatchbookData,\n clearCart,\n clearOrderData,\n clearSwatchbook,\n getSwatchProductUrlParams,\n getProductDetailsPageUrl,\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 getPreviousElementInFocus = () => (\n previousElementInFocus\n);\n\nconst setPreviousElementInFocus = (element) => {\n previousElementInFocus = element;\n};\n\nconst resetFocus = () => {\n if (getPreviousElementInFocus()) {\n getPreviousElementInFocus().focus();\n }\n};\n\nconst onDocumentModalKeyUp = (event, modal) => {\n if (event.keyCode === 27) {\n closeAccountModal(modal); /* eslint-disable-line no-use-before-define */\n }\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 // Focus\n resetFocus();\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 // Focus\n setPreviousElementInFocus(document.activeElement);\n overlay.focus();\n console.log(document.activeElement);\n // Add events\n closeBtn.addEventListener('click', () => closeAccountModal(modal));\n overlay.addEventListener('click', () => closeAccountModal(modal));\n document.addEventListener('keyup', event => onDocumentModalKeyUp(event, modal));\n};\n\nexport {\n openAccountModal,\n closeAccountModal,\n};\n/* eslint-enable no-console */\n","import { 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};\nconst removereateAccountCallbacks = () => {\n window.onSubmitCallbacks = null;\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 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};\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\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('.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 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 } else if (data['user-id'] === -1) {\n accountCreationErrorMsg.classList.remove('hide');\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;\n }\n });\n }\n },\n onError: () => {\n errorMsg.classList.remove('hide');\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 // 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) { /* eslint-disable-line no-lonely-if */\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n }\n if (!passwordStrength(passIpt, passConfirmIpt)) {\n passwordStrengthErrorMsg.classList.remove('hide');\n }\n }\n });\n};\n\nexport {\n addCreateAccountCallbacks,\n removereateAccountCallbacks,\n init,\n resetCreateAccountForm,\n};\n/* eslint-enable no-console */\n"],"sourceRoot":""}