{"version":3,"file":"Registration2.min.js","sources":["Registration2.js"],"sourcesContent":["(function (w, $) {\r\n const assetId = '~/Parts/Views/User/Registration2/Registration2.min.js';\r\n\r\n if (!w.umwAssets || !w.umwAssets[assetId]) {\r\n console.error('No context found for ' + assetId);\r\n return;\r\n }\r\n\r\n for (let ctx of w.umwAssets[assetId]) {\r\n\r\n const handlerUrl = w.R + 'handlers/public/UserData.ashx';\r\n const $mainPanel = $('#' + ctx.mainPanelID);\r\n let regType = ctx.initialRegType;\r\n const labels = ctx.labels;\r\n const _isNewCustomer = ctx.customer && ctx.customer.IsNewCustomer;\r\n const _enableFullNameMode = ctx.enableFullNameMode;\r\n let $сontactSection;\r\n let $newContactUI = null;\r\n let $newDelivAddressSection;\r\n let $newDelivAddressUI = null;\r\n let company = null;\r\n const _showDeliveryAddressSection = ctx.showDeliveryAddressSection;\r\n const _contactFormModeIsEnabled = ctx.contactFormModeIsEnabled;\r\n const _deliveryAddressUserId = ctx.company ? ctx.company.UserID : (ctx.customer ? ctx.customer.UserID : 0);\r\n const _shouldShowContactTagify = ctx.company && ctx.thisUserId !== 2 && ctx.compactFormModeIsEnabled === true;\r\n const _shouldShowDeliveryAddressTagify = ctx.thisUserId !== 2 && ctx.compactFormModeIsEnabled === true && ctx.allowMultipleDelivAddresses === true;\r\n const _useTabs = ctx.useTabs || false;\r\n let contactPersonTagifyInput = null;\r\n let deliveryAddressTagifyInput = null;\r\n let validationFailsAddressIDs = [];\r\n\r\n w.onload = function() {\r\n const registrationSuccess = sessionStorage.getItem(\"registrationSuccess\");\r\n if (registrationSuccess) {\r\n sessionStorage.removeItem(\"registrationSuccess\");\r\n w.PubSub.publish('notification.success', ctx.messages.registrationSuccess);\r\n }\r\n }\r\n\r\n function _processClonedHtml($clonedHtml, parentSelector) {\r\n // Fix unique attributes\r\n var targetAttr = ['id', 'for', 'name', 'data-validates-section', 'data-rule-equalto'];\r\n\r\n const currentIndex = $(parentSelector).length + 1;\r\n $clonedHtml.find('*').add($clonedHtml).each(function() {\r\n const $this = $(this);\r\n for (let i = 0; i < targetAttr.length; i++) {\r\n const currentAttr = targetAttr[i];\r\n const currentAttrVal = $this.attr(currentAttr);\r\n if (currentAttrVal) {\r\n $this.attr(currentAttr, currentAttrVal.replace(/^(.*)(\\d)*$/i, '$1' + currentIndex));\r\n }\r\n }\r\n });\r\n };\r\n\r\n function _validateForm(successCallback) {\r\n let validator = null;\r\n\r\n if (_useTabs === true) {\r\n\r\n const isCompany = regType === 'company';\r\n\r\n validator = $mainPanel.validate({\r\n ignore: function (index, el) {\r\n var el = $(el);\r\n\r\n if (el.parents('.ContactPersonSectionTemplate').length ||\r\n el.parents('.DeliveryAddressSectionTemplate').length ||\r\n el.parents('.tab-pane.hidden').length ||\r\n (!_isNewCustomer && el.parents('.NewCustomerOnly').length) ||\r\n (isCompany && el.parents('.PrivateCustomerOnly').length) ||\r\n (!isCompany && el.parents('.CompanyUserOnly').length) ||\r\n el.parents('.ContactFormModeHiddenRow').length) {\r\n \r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n } else {\r\n validator = $mainPanel.validate({ ignore: ':hidden' });\r\n }\r\n\r\n validator.resetForm();\r\n const isFormValid = validator.form();\r\n if (isFormValid) {\r\n if (typeof (successCallback) === 'function') {\r\n successCallback.apply(this, []);\r\n }\r\n w.PubSub.publish('validation.success.registration2', validator.successList);\r\n } else {\r\n // Show default general validation error\r\n w.PubSub.publish('notification.error', ctx.messages.generalValidationError);\r\n w.PubSub.publish('validation.error.registration2', validator.errorList);\r\n if (_useTabs === true) {\r\n //Reset and hightlight tab error state at UI\r\n _clearErrorStates();\r\n const navTabs = $mainPanel.find('.nav-tabs');\r\n const firstFailedInput = $(validator.errorList[0].element);\r\n const tabID = firstFailedInput.parents('.tab-pane').attr('id');\r\n const tabSelector = navTabs.find('button').length ? 'button[data-bs-target=\"#' + tabID + '\"]' : 'a[href=\"#' + tabID + '\"]';\r\n const theTabHyperlinkWithErrors = navTabs.find(tabSelector);\r\n const theTabLiWithErrors = theTabHyperlinkWithErrors.parent('li');\r\n\r\n theTabLiWithErrors.addClass('has-required-fields');\r\n theTabHyperlinkWithErrors.tab('show');\r\n }\r\n }\r\n };\r\n\r\n function _showConfirmation(message, acceptCallback, cancelCallback) {\r\n const notyConfig = {\r\n layout: 'center',\r\n animation: {\r\n open: { height: 'toggle' },\r\n close: { height: 'toggle' },\r\n easing: 'swing',\r\n speed: 150\r\n },\r\n killer: true,\r\n modal: true,\r\n text: message,\r\n buttons: [\r\n {\r\n addClass: 'btn btn-primary btn-small',\r\n text: ctx.messages.yes,\r\n onClick: function(noty) {\r\n if (typeof (acceptCallback) === 'function') {\r\n acceptCallback.apply(this, [noty]);\r\n }\r\n noty.close();\r\n }\r\n },\r\n {\r\n addClass: 'btn btn-outline-danger btn-small',\r\n text: ctx.messages.no,\r\n onClick: function(noty) {\r\n if (typeof (cancelCallback) === 'function') {\r\n cancelCallback.apply(this, [noty]);\r\n }\r\n noty.close();\r\n }\r\n }\r\n ]\r\n };\r\n\r\n w.noty(notyConfig);\r\n };\r\n\r\n function _displayProperRegTypeFields(instantly) {\r\n const $companySection = $mainPanel.find('.CompanySection');\r\n if (regType === 'company') {\r\n $companySection.slideDown('fast');\r\n\r\n $mainPanel.find('.ContactPersonTitle').text(labels.contactPersonInfoTitle);\r\n $mainPanel.find('.CompanyUserOnly' +\r\n (_isNewCustomer ? ':not(.ExistingCustomerOnly)' : ':not(.NewCustomerOnly)')).show();\r\n $mainPanel.find('.PrivateCustomerOnly').hide();\r\n $mainPanel.find('.DeliveryCompanyNameRow').show();\r\n\r\n $mainPanel.find('.DeliveryAddressesSectionContainer').show();\r\n $mainPanel.find('.ContactPersonDeliveryDescriptionRow').hide();\r\n\r\n _setTabsForCompany();\r\n } else if (regType === 'private') {\r\n if (instantly) {\r\n $companySection.hide();\r\n } else {\r\n $companySection.slideUp('fast');\r\n }\r\n\r\n $mainPanel.find('.ContactPersonTitle').text(labels.profile);\r\n $mainPanel.find('.PrivateCustomerOnly' +\r\n (_isNewCustomer ? ':not(.ExistingCustomerOnly)' : ':not(.NewCustomerOnly)')).show();\r\n $mainPanel.find('.CompanyUserOnly').hide();\r\n $mainPanel.find('.DeliveryCompanyNameRow').hide();\r\n\r\n if (!_showDeliveryAddressSection) {\r\n $mainPanel.find('.DeliveryAddressesSectionContainer').hide();\r\n $mainPanel.find('.ContactPersonDeliveryDescriptionRow').show();\r\n } else {\r\n $mainPanel.find('.ContactPersonDeliveryDescriptionRow').hide();\r\n }\r\n\r\n _setTabsForPrivate();\r\n }\r\n };\r\n\r\n function _setTabsForCompany() {\r\n if (_useTabs === false) {\r\n return;\r\n }\r\n\r\n const els = _getTabsElements();\r\n\r\n els.liTabCompany.removeClass('hidden').removeAttr('hidden');\r\n els.tabCompany.removeClass('hidden').removeAttr('hidden');\r\n\r\n els.liTabContact.removeClass('hidden').removeAttr('hidden');\r\n els.tabContact.removeClass('hidden').removeAttr('hidden');\r\n\r\n els.liTabDelivery.removeClass('hidden').removeAttr('hidden');\r\n els.tabDelivery.removeClass('hidden').removeAttr('hidden');\r\n\r\n const contactPersonTabName = els.tabContact.find('div[data-umw-tab-name]').data('umw-tab-name');\r\n if (contactPersonTabName) {\r\n els.liTabContact.find('[role=\"tab\"]').text(contactPersonTabName);\r\n }\r\n\r\n if ($(\"body\").hasClass(\"bs5\")) {\r\n if (els.liTabContact.find('.nav-link').hasClass('active') || els.liTabDelivery.find('.nav-link').hasClass('active')) {\r\n els.liTabContact.find('.nav-link').removeClass('active');\r\n els.tabContact.removeClass('active show');\r\n\r\n els.liTabDelivery.find('.nav-link').removeClass('active');\r\n els.tabDelivery.removeClass('active show');\r\n\r\n els.liTabCompany.find('.nav-link').addClass('active');\r\n els.tabCompany.addClass('active show');\r\n }\r\n }\r\n else {\r\n if (els.liTabContact.hasClass('active') || els.liTabDelivery.hasClass('active')) {\r\n els.liTabContact.removeClass('active');\r\n els.tabContact.removeClass('active');\r\n\r\n els.liTabDelivery.removeClass('active');\r\n els.tabDelivery.removeClass('active');\r\n\r\n els.liTabCompany.addClass('active');\r\n els.tabCompany.addClass('active');\r\n }\r\n }\r\n }\r\n\r\n function _setTabsForPrivate() {\r\n if (_useTabs === false) {\r\n return;\r\n }\r\n\r\n const els = _getTabsElements();\r\n\r\n if ($(\"body\").hasClass(\"bs5\")) {\r\n if (els.liTabCompany.find('.nav-link').hasClass('active') || (els.liTabDelivery.find('.nav-link').hasClass('active') && _showDeliveryAddressSection === false)) {\r\n\r\n els.liTabCompany.find('.nav-link').removeClass('active');\r\n els.tabCompany.removeClass('active show');\r\n\r\n els.liTabDelivery.find('.nav-link').removeClass('active');\r\n els.tabDelivery.removeClass('active show');\r\n\r\n els.liTabContact.find('.nav-link').addClass('active');\r\n els.tabContact.addClass('active show');\r\n }\r\n }\r\n else {\r\n if (els.liTabCompany.hasClass('active') || (els.liTabDelivery.hasClass('active') && _showDeliveryAddressSection === false)) {\r\n els.liTabCompany.removeClass('active');\r\n els.tabCompany.removeClass('active');\r\n\r\n els.liTabDelivery.removeClass('active');\r\n els.tabDelivery.removeClass('active');\r\n\r\n els.liTabContact.addClass('active');\r\n els.tabContact.addClass('active');\r\n }\r\n }\r\n\r\n els.liTabCompany.addClass('hidden').attr('hidden', true);\r\n els.tabCompany.addClass('hidden').attr('hidden', true);\r\n\r\n if (_showDeliveryAddressSection === false) {\r\n els.liTabDelivery.addClass('hidden').attr('hidden', true);\r\n els.tabDelivery.addClass('hidden').attr('hidden', true);\r\n }\r\n\r\n els.liTabContact.find('[role=\"tab\"]').text(labels.profile);\r\n }\r\n\r\n function _getTabsElements() {\r\n return {\r\n liTabCompany: $mainPanel.find('li.js-company-tab'),\r\n liTabContact: $mainPanel.find('li.js-contact-tab'),\r\n liTabDelivery: $mainPanel.find('li.js-delivery-tab'),\r\n tabCompany: $mainPanel.find('div.js-company-tab'),\r\n tabContact: $mainPanel.find('div.js-contact-tab'),\r\n tabDelivery: $mainPanel.find('div.js-delivery-tab')\r\n };\r\n }\r\n\r\n function _detectAndHandleRedirect(response) {\r\n if (typeof (response) === 'string') {\r\n const redirectStringPrefix = 'REDIRECT:';\r\n if (response.indexOf(redirectStringPrefix) === 0) {\r\n const redirectUrl = response.slice(redirectStringPrefix.length);\r\n w.location.replace(redirectUrl);\r\n return true;\r\n }\r\n w.PubSub.publish('notification.error', 'Unexpected server response.');\r\n }\r\n return false;\r\n }\r\n\r\n function _setUpPostalAreaAutoCompletion($region) {\r\n const relatedPostAreaInputDataKey = 'relatedPostAreaInput';\r\n\r\n const $postCodeInput = $region.find('.PostCodeInput');\r\n const $postAreaInput = $region.find('.PostAreaInput');\r\n\r\n const isKeyUpHandlerAlreadySetUp = $postCodeInput.data(relatedPostAreaInputDataKey);\r\n\r\n $postCodeInput.data(relatedPostAreaInputDataKey, $postAreaInput);\r\n\r\n if (isKeyUpHandlerAlreadySetUp) {\r\n return;\r\n }\r\n\r\n $postCodeInput.keyup(function() {\r\n const $postCodeInput = $(this);\r\n const postCodeVal = $postCodeInput.val().trim();\r\n if (postCodeVal && w.globalSettings.CountryCode === 'NO') {\r\n $.getPostalCodeInfo(postCodeVal,\r\n function(d) {\r\n const $postAreaInput = $postCodeInput.data(relatedPostAreaInputDataKey);\r\n $postAreaInput.val(d.valid ? d.result : '');\r\n });\r\n }\r\n });\r\n }\r\n\r\n function _setupToolTip($container) {\r\n const $toolTipControl = $container.find('.Tooltip');\r\n\r\n if ($toolTipControl) {\r\n $toolTipControl.tooltip();\r\n }\r\n }\r\n\r\n function _displayCustomer($ui, customer) {\r\n var $lastNameRow = $ui.find('.ContactPersonLastNameRow');\r\n var isLastNameShown = $lastNameRow.length > 0;\r\n\r\n var isFullNameMode = _enableFullNameMode &&\r\n (isLastNameShown || customer.ECustomerID || (customer.FirstName && !customer.LastName));\r\n if (isFullNameMode) {\r\n if (isLastNameShown) {\r\n $lastNameRow.hide();\r\n $ui.find('.ContactPersonLastNameInput').val('');\r\n }\r\n\r\n var $firstNameLabel = $ui.find('.ContactPersonFirstNameLabel');\r\n if ($firstNameLabel.length) {\r\n $firstNameLabel.html($firstNameLabel.html().replace(ctx.firstNameText, labels.fullName));\r\n $firstNameLabel.removeClass('ContactPersonFirstNameLabel').addClass('ContactPersonFullNameLabel');\r\n }\r\n } else {\r\n if (isLastNameShown) {\r\n $lastNameRow.show();\r\n $ui.find('.ContactPersonLastNameInput').val(customer.LastName);\r\n }\r\n }\r\n\r\n $ui.find('.ContactPersonFirstNameInput').val(customer.FirstName);\r\n $ui.find('.ContactPersonGenderOption input').val([customer.Gender]);\r\n $ui.find('.ContactPersonDateOfBirthInput').val(customer.DateOfBirth);\r\n $ui.find('.ContactPersonPhoneInput').val(customer.Phone);\r\n $ui.find('.ContactPersonMobilePhoneInput').val(customer.MobilePhone);\r\n if (customer.InvoiceAddress) {\r\n $ui.find('.InvoiceAddressInput').val(customer.InvoiceAddress.Address);\r\n $ui.find('.InvoiceAddress2Input').val(customer.InvoiceAddress.Address2);\r\n $ui.find('.InvoicePostCodeInput').val(customer.InvoiceAddress.PostCode);\r\n $ui.find('.InvoicePostAreaInput').val(customer.InvoiceAddress.PostArea);\r\n }\r\n $ui.find('.ContactPersonEmailInput').val(customer.Email);\r\n _setNewsletterSubscirptionStatus($ui, customer.IsNewsletterRecipient);\r\n\r\n if (customer.IsNewCustomer) {\r\n $ui.find('.NewCustomerOnly' +\r\n (regType === 'company' ? ':not(.PrivateCustomerOnly)' : ':not(.CompanyUserOnly)')).show();\r\n $ui.find('.ExistingCustomerOnly').hide();\r\n } else {\r\n $ui.find('.ExistingCustomerOnly' +\r\n (regType === 'company' ? ':not(.PrivateCustomerOnly)' : ':not(.CompanyUserOnly)')).show();\r\n $ui.find('.NewCustomerOnly').hide();\r\n }\r\n };\r\n\r\n function _readCustomer($ui) {\r\n const customer = $ui.data('customer');\r\n\r\n customer.FirstName = $ui.find('.ContactPersonFirstNameInput').val();\r\n customer.LastName = $ui.find('.ContactPersonLastNameInput').val();\r\n customer.Gender = $ui.find('.ContactPersonGenderOption input:checked').val() || null;\r\n\r\n customer.DateOfBirth = $ui.find('.ContactPersonDateOfBirthInput').val();\r\n customer.Phone = $ui.find('.ContactPersonPhoneInput').val();\r\n customer.MobilePhone = $ui.find('.ContactPersonMobilePhoneInput').val();\r\n customer.Email = $ui.find('.ContactPersonEmailInput').val();\r\n customer.IsNewsletterRecipient = _getNewsletterSubscirptionStatus($ui);\r\n\r\n if (regType === 'private') {\r\n customer.InvoiceAddress = {\r\n Address: $ui.find('.InvoiceAddressInput').val(),\r\n Address2: $ui.find('.InvoiceAddress2Input').val(),\r\n PostCode: ($ui.find('.InvoicePostCodeInput').val() || '').trim(),\r\n PostArea: $ui.find('.InvoicePostAreaInput').val()\r\n };\r\n }\r\n\r\n return customer;\r\n };\r\n\r\n function _createCustomerUI() {\r\n const $tmp = $сontactSection.clone(true);\r\n _processClonedHtml($tmp, '.ContactPersonSection');\r\n $tmp.removeClass('ContactPersonSectionTemplate').addClass('ContactPersonSection');\r\n _setUpPostalAreaAutoCompletion($tmp);\r\n\r\n const $dateTimePicker = $tmp.find('.ContactPersonDateOfBirthInput');\r\n $dateTimePicker.datepicker({ onClose: function() { $(this).blur(); } });\r\n\r\n $tmp.insertBefore($сontactSection);\r\n $tmp.show();\r\n return $tmp;\r\n };\r\n\r\n function _onNewContactEditFinished(cancelled) {\r\n $mainPanel.find('.ButtonCanceladdcontact').hide();\r\n $mainPanel.find('.ButtonAddcontact').show();\r\n\r\n if (cancelled) {\r\n $newContactUI.remove();\r\n _updateContactTagifyWhitelist(ctx.thisUserId);\r\n }\r\n $newContactUI = null;\r\n };\r\n\r\n function _displayCompany() {\r\n const $ui = $mainPanel.find('.CompanySection');\r\n if (!$ui.length) {\r\n return;\r\n }\r\n\r\n if (_isNewCustomer) {\r\n $ui.find('.ExistingCustomerOnly').hide();\r\n } else {\r\n $ui.find('.NewCustomerOnly').hide();\r\n }\r\n\r\n if (!company) {\r\n return;\r\n }\r\n\r\n $ui.find('.CompanyInput').val(company.Name);\r\n $ui.find('.CompanyNoInput').val(company.CompanyNumber);\r\n $ui.find('.CompanyPhoneInput').val(company.Phone);\r\n\r\n $ui.find('.InvoiceContactInput').val(company.ContactPersonName);\r\n $ui.find('.InvoiceAddressInput').val(company.InvoiceAddress.Address);\r\n $ui.find('.InvoiceAddress2Input').val(company.InvoiceAddress.Address2);\r\n $ui.find('.InvoicePostCodeInput').val(company.InvoiceAddress.PostCode);\r\n $ui.find('.InvoicePostAreaInput').val(company.InvoiceAddress.PostArea);\r\n $ui.find('.InvoiceEmailInput').val(company.ContactPersonEmail);\r\n _setNewsletterSubscirptionStatus($ui, company.IsNewsletterRecipient);\r\n }\r\n\r\n function _readCompany() {\r\n const $ui = $mainPanel.find('.CompanySection');\r\n if (!$ui.length) {\r\n return;\r\n }\r\n\r\n if (!company)\r\n company = {};\r\n if (!company.InvoiceAddress)\r\n company.InvoiceAddress = {};\r\n\r\n company.Name = $ui.find('.CompanyInput').val();\r\n company.CompanyNumber = $ui.find('.CompanyNoInput').val();\r\n company.Phone = $ui.find('.CompanyPhoneInput').val();\r\n\r\n company.ContactPersonName = $ui.find('.InvoiceContactInput').val();\r\n company.InvoiceAddress.Address = $ui.find('.InvoiceAddressInput').val();\r\n company.InvoiceAddress.Address2 = $ui.find('.InvoiceAddress2Input').val();\r\n company.InvoiceAddress.PostCode = ($ui.find('.InvoicePostCodeInput').val() || '').trim();\r\n company.InvoiceAddress.PostArea = $ui.find('.InvoicePostAreaInput').val();\r\n company.ContactPersonEmail = $ui.find('.InvoiceEmailInput').val();\r\n company.IsNewsletterRecipient = _getNewsletterSubscirptionStatus($ui);\r\n };\r\n\r\n function _createDeliveryAddressUI() {\r\n const $tmp = $newDelivAddressSection.clone(true);\r\n _processClonedHtml($tmp, '.DeliveryAddressSection');\r\n $tmp.removeClass('DeliveryAddressSectionTemplate').addClass('DeliveryAddressSection');\r\n _setUpPostalAreaAutoCompletion($tmp);\r\n _setupToolTip($tmp);\r\n\r\n $tmp.insertBefore($newDelivAddressSection);\r\n $tmp.show();\r\n return $tmp;\r\n };\r\n\r\n function _displayDeliveryAddress($ui, deliveryAddress) {\r\n $ui.find('.DeliveryFirstNameInput').val(deliveryAddress.FirstName);\r\n $ui.find('.DeliveryLastNameInput').val(deliveryAddress.LastName);\r\n $ui.find('.DeliveryPhoneInput').val(deliveryAddress.Phone);\r\n $ui.find('.DeliveryEmailInput').val(deliveryAddress.EMail);\r\n $ui.find('.DeliveryAddressInput').val(deliveryAddress.Address);\r\n $ui.find('.DeliveryAddress2Input').val(deliveryAddress.Address2);\r\n $ui.find('.DeliveryPostCodeInput').val(deliveryAddress.PostCode);\r\n $ui.find('.DeliveryPostAreaInput').val(deliveryAddress.PostArea);\r\n $ui.find('.DeliveryCompanyInput').val(deliveryAddress.CompanyName);\r\n $ui.find('.DeliveryDescriptionInput').val(deliveryAddress.Description);\r\n\r\n _displayDeliveryAddressDefaultFlag($ui, deliveryAddress.IsDefault);\r\n }\r\n\r\n function _displayNewDeliveryAddressDefaultFlag(newDefaultDeliveryAddressId) {\r\n const $deliveryAddressSections = $mainPanel.find('.DeliveryAddressesSectionContainer .DeliveryAddressSection');\r\n $deliveryAddressSections.each(function(index, deliveryAddressSection) {\r\n const $addressUI = $(deliveryAddressSection);\r\n const address = $addressUI.data('deliveryAddress');\r\n if (address) {\r\n _displayDeliveryAddressDefaultFlag($addressUI, address.ID === newDefaultDeliveryAddressId);\r\n }\r\n });\r\n }\r\n\r\n function _displayDeliveryAddressDefaultFlag($ui, isDefault) {\r\n const $btnIsDef = $ui.find('.ButtonDefaultDeliveryAddress');\r\n if (isDefault)\r\n $btnIsDef.addClass('btn-primary');\r\n else\r\n $btnIsDef.removeClass('btn-primary');\r\n }\r\n\r\n function _displayDeliveryAddressDescriptionForPrivateUser($ui, deliveryAddresses) {\r\n if (deliveryAddresses && deliveryAddresses.length) {\r\n const defaultDeliveryAddresses = _.filter(deliveryAddresses,\r\n function(deliveryAddress) {\r\n return deliveryAddress.IsDefault;\r\n });\r\n\r\n if (defaultDeliveryAddresses && defaultDeliveryAddresses.length === 1) {\r\n const address = defaultDeliveryAddresses[0];\r\n const $deliveryDescriptionInput = $ui.find('.ContactPersonDeliveryDescriptionInput');\r\n $deliveryDescriptionInput.val(address.Description);\r\n $deliveryDescriptionInput.data('deliveryAddressID', address.ID);\r\n }\r\n }\r\n }\r\n\r\n function _readDeliveryAddress($delivAddressUI, $custUI) {\r\n let address = null;\r\n\r\n if ($custUI && $custUI.length && regType === 'private' && !_showDeliveryAddressSection) {\r\n address = _readDeliveryAddressForPrivateUser($custUI);\r\n } else if ($delivAddressUI && $delivAddressUI.length) {\r\n address = $delivAddressUI.data('deliveryAddress');\r\n address.FirstName = $delivAddressUI.find('.DeliveryFirstNameInput').val();\r\n address.LastName = $delivAddressUI.find('.DeliveryLastNameInput').val();\r\n address.Phone = $delivAddressUI.find('.DeliveryPhoneInput').val();\r\n address.EMail = $delivAddressUI.find('.DeliveryEmailInput').val();\r\n address.Address = $delivAddressUI.find('.DeliveryAddressInput').val();\r\n address.Address2 = $delivAddressUI.find('.DeliveryAddress2Input').val();\r\n address.PostCode = ($delivAddressUI.find('.DeliveryPostCodeInput').val() || '').trim();\r\n address.PostArea = $delivAddressUI.find('.DeliveryPostAreaInput').val();\r\n address.Company = $delivAddressUI.find('.DeliveryCompanyInput').val();\r\n address.Description = $delivAddressUI.find('.DeliveryDescriptionInput').val();\r\n address.IsDefault = ctx.allowMultipleDelivAddresses\r\n ? $delivAddressUI.find('.ButtonDefaultDeliveryAddress').hasClass('btn-primary')\r\n : true;\r\n }\r\n\r\n return address;\r\n };\r\n\r\n function _readDeliveryAddressForPrivateUser($custUI) {\r\n const address = {};\r\n address.FirstName = $custUI.find('.ContactPersonFirstNameInput').val();\r\n address.LastName = $custUI.find('.ContactPersonLastNameInput').val();\r\n address.Phone = $custUI.find('.ContactPersonPhoneInput').val();\r\n address.EMail = $custUI.find('.ContactPersonEmailInput').val();\r\n address.Address = $custUI.find('.InvoiceAddressInput').val();\r\n address.Address2 = $custUI.find('.InvoiceAddress2Input').val();\r\n address.PostCode = ($custUI.find('.InvoicePostCodeInput').val() || '').trim();\r\n address.PostArea = $custUI.find('.InvoicePostAreaInput').val();\r\n address.IsDefault = true;\r\n\r\n const $deliveryDescriptionUI = $custUI.find('.ContactPersonDeliveryDescriptionInput');\r\n address.Description = $deliveryDescriptionUI.val();\r\n address.ID = $deliveryDescriptionUI.data('deliveryAddressID');\r\n\r\n return address;\r\n }\r\n\r\n function _onNewDelivAddressEditFinished(cancelled) {\r\n $mainPanel.find('.ButtonCanceladddelivaddress').hide();\r\n $mainPanel.find('.ButtonAdddeliveryaddress').show();\r\n\r\n if (cancelled) {\r\n $newDelivAddressUI.remove();\r\n _updateDeliveryAddressesTagifyWhitelist(_getDefaultOrFirstDeliveryAddressId());\r\n }\r\n $newDelivAddressUI = null;\r\n }\r\n\r\n function _redirectToReturnUrlIfPresent(redirectUrl) {\r\n let isBeingRedirect = false;\r\n\r\n if (redirectUrl) {\r\n w.location.replace(redirectUrl);\r\n isBeingRedirect = true;\r\n }\r\n\r\n return isBeingRedirect;\r\n }\r\n\r\n function _setupShowNewsletterFlags() {\r\n if (!ctx.shouldShowNewsletterFlag) {\r\n $mainPanel.find('.js-company-newsletter-row').hide();\r\n $mainPanel.find('.js-contact-newsletter-row').hide();\r\n }\r\n }\r\n\r\n function _setupDateOfBirthValidator() {\r\n $.validator.addMethod(\r\n \"dateOfBirthMin1890\",\r\n function(value, element) {\r\n const inst = $.datepicker._getInst(element);\r\n const dateFormat = $.datepicker._get(inst, 'dateFormat');\r\n try {\r\n const date = $.datepicker.parseDate(dateFormat, value, $.datepicker._getFormatConfig(inst));\r\n return date >= new Date(1890, 0, 1);\r\n } catch (e) {\r\n return false;\r\n }\r\n },\r\n ctx.messages.dateOfBirthValidationError\r\n );\r\n }\r\n\r\n function _setupRegistrationType() {\r\n _displayProperRegTypeFields(true);\r\n\r\n const $rbtns = $mainPanel.find('.RegistrationTypeOption input:radio');\r\n\r\n $rbtns.change(function() {\r\n regType = $rbtns.filter(':checked').val();\r\n _displayProperRegTypeFields();\r\n _setupContactFormMode();\r\n });\r\n };\r\n\r\n function _setupCompanySection() {\r\n company = ctx.company;\r\n\r\n _displayCompany();\r\n\r\n const $ui = $mainPanel.find('.CompanySection');\r\n if ($ui.length) {\r\n _setUpPostalAreaAutoCompletion($ui);\r\n }\r\n };\r\n\r\n function _setupContactAndDeliveryAddressTagify() {\r\n const $contactCont = $mainPanel.find('.ContactPersonsSectionContainer');\r\n const $contactPersonInput = $contactCont.find('.ContactPersonInput');\r\n\r\n if ($contactPersonInput) {\r\n if (_shouldShowContactTagify) {\r\n contactPersonTagifyInput = new w.Tagify($contactPersonInput[0],\r\n {\r\n mode: 'select',\r\n dropdown: {\r\n maxItems: 100,\r\n highlightFirst: true,\r\n searchKeys: ['FirstName', 'LastName', 'Email']\r\n },\r\n templates: {\r\n dropdownItem: function (tagData) {\r\n return tagData.IsNewCustomer === true && !tagData.UserID\r\n ? `
\r\n ${labels.newContact}\r\n
`\r\n : `
\r\n ${tagData.FirstName} ${tagData.LastName} - ${tagData.Email\r\n }\r\n
`;\r\n },\r\n },\r\n });\r\n\r\n contactPersonTagifyInput.on('change',\r\n function (evt) {\r\n if (!evt || !evt.detail || !evt.detail.value) {\r\n console.warn(\r\n 'Contacts tagify selector: Did not find data in the event at evt.detail.value');\r\n return;\r\n }\r\n\r\n const selectedContacts = JSON.parse(evt.detail.value);\r\n const selectedContactUserId = selectedContacts[0].UserID;\r\n\r\n _setVisibleContactContainer(selectedContactUserId);\r\n });\r\n\r\n _updateContactTagifyWhitelist(ctx.thisUserId);\r\n } else {\r\n $contactPersonInput.parent().hide();\r\n }\r\n }\r\n\r\n if (_shouldShowDeliveryAddressTagify) {\r\n\r\n const $addressesCont = $mainPanel.find('.DeliveryAddressesSectionContainer');\r\n const $addressesInput = $addressesCont.find('.DeliveryAddressesInput');\r\n\r\n if ($addressesInput) {\r\n\r\n deliveryAddressTagifyInput = new w.Tagify($addressesInput[0],\r\n {\r\n mode: 'select',\r\n dropdown: {\r\n maxItems: 300,\r\n highlightFirst: true,\r\n searchKeys: [\r\n 'CompanyName', 'FirstName', 'LastName', 'Address', 'Address2', 'PostCode', 'PostArea', 'Description'\r\n ]\r\n },\r\n templates: {\r\n dropdownItem: function(tagData) {\r\n return `
\r\n \r\n ${!tagData.ID ? labels.newDeliveryAddress : _getDeliveryAddressSummary(tagData) }\r\n ${validationFailsAddressIDs.includes(tagData.ID) ? '' : ''}\r\n \r\n
`;\r\n },\r\n },\r\n });\r\n\r\n deliveryAddressTagifyInput.on('change',\r\n function(evt) {\r\n if (!evt || !evt.detail || !evt.detail.value) {\r\n console.warn(\r\n 'Delivery addresses tagify selector: Did not find data in the event at evt.detail.value');\r\n return;\r\n }\r\n\r\n const selectedAddresses = JSON.parse(evt.detail.value);\r\n const selectedAddressID = selectedAddresses[0].ID;\r\n\r\n _setVisibleDeliveryAddressContainer(selectedAddressID);\r\n });\r\n\r\n _updateDeliveryAddressesTagifyWhitelist(_getDefaultOrFirstDeliveryAddressId());\r\n }\r\n\r\n w.PubSub.subscribe('validation.error.registration2', function(ignore, errorList) {\r\n const uniqueErrorAddressIDs = new Set();\r\n const deliveryAddresses = _getDeliveryAddressesFromContainers();\r\n\r\n errorList.forEach(error => {\r\n const deliveryAddressSection = error.element.closest('.DeliveryAddressSection');\r\n if(deliveryAddressSection){\r\n const addresses = _readDeliveryAddress($(deliveryAddressSection));\r\n uniqueErrorAddressIDs.add(addresses.ID);\r\n }\r\n });\r\n validationFailsAddressIDs = Array.from(uniqueErrorAddressIDs);\r\n\r\n const firstErrorAddressID = validationFailsAddressIDs.length > 0 ? validationFailsAddressIDs[0] : null;\r\n if (firstErrorAddressID) {\r\n const firstErrorAddress = deliveryAddresses.find(address => address.ID === firstErrorAddressID);\r\n if (firstErrorAddress) {\r\n deliveryAddressTagifyInput.removeAllTags();\r\n deliveryAddressTagifyInput.addTags([firstErrorAddress]);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n function _getContactsFromContainers() {\r\n const $cont = $mainPanel.find('.ContactPersonsSectionContainer');\r\n const $contactConts = $cont.find('.ContactPersonSection');\r\n\r\n if (!$contactConts || $contactConts.length <= 0) {\r\n return null;\r\n }\r\n\r\n const contacts = [];\r\n\r\n $contactConts.each((_, contactCont) => {\r\n const contact = $(contactCont).data('customer');\r\n contacts.push(contact);\r\n });\r\n\r\n return contacts;\r\n }\r\n\r\n function _getContactsFromContainersWithTagifyWhitelistValue() {\r\n const contacts = _getContactsFromContainers();\r\n\r\n if (!contacts) {\r\n return null;\r\n }\r\n\r\n contacts.forEach(contact => {\r\n if (contact.IsNewCustomer === true && !contact.UserID) {\r\n contact['value'] = labels.newContact;\r\n } else {\r\n contact['value'] = `${contact.FirstName} ${contact.LastName} - ${contact.Email}`;\r\n }\r\n });\r\n\r\n return contacts;\r\n }\r\n \r\n function _findPreSelectContactById(contacts, preselectContactId) {\r\n if (!contacts) {\r\n return null;\r\n }\r\n\r\n let preselectContact = null;\r\n\r\n contacts.forEach(contact => {\r\n if (!isNaN(preselectContactId) &&\r\n (preselectContactId === 0 && contact.IsNewCustomer === true)\r\n || contact.UserID === preselectContactId) {\r\n\r\n preselectContact = contact;\r\n }\r\n });\r\n\r\n return preselectContact;\r\n }\r\n\r\n function _updateContactTagifyWhitelist(preselectContactId) {\r\n\r\n if (_shouldShowContactTagify === false) {\r\n return;\r\n }\r\n\r\n const contacts = _getContactsFromContainersWithTagifyWhitelistValue();\r\n\r\n if (contacts && contacts.length > 0) {\r\n $mainPanel.find('.ContactPersonSelector').show();\r\n $mainPanel.find('.js-no-contacts').addClass('hidden').attr('hidden', true);\r\n contactPersonTagifyInput.settings.whitelist = contacts;\r\n\r\n let preselectContact = _findPreSelectContactById(contacts, preselectContactId);\r\n if (preselectContact) {\r\n contactPersonTagifyInput.removeAllTags();\r\n contactPersonTagifyInput.addTags([preselectContact]);\r\n }\r\n } else {\r\n $mainPanel.find('.ContactPersonSelector').hide();\r\n $mainPanel.find('.js-no-contacts').removeClass('hidden').removeAttr('hidden');\r\n }\r\n }\r\n\r\n function _setVisibleContactContainer(contactUserId) {\r\n if (isNaN(contactUserId) || contactUserId < 0) {\r\n return;\r\n }\r\n\r\n const $contactCont = $mainPanel.find('.ContactPersonsSectionContainer');\r\n const $contactConts = $contactCont.find('.ContactPersonSection');\r\n const $selectContactCont = $($contactConts.get().find((c) => $(c).data('customer').UserID === contactUserId));\r\n\r\n if ($selectContactCont) {\r\n $contactConts.hide();\r\n $selectContactCont.show();\r\n }\r\n else {\r\n console.warn(`Contact container matching user Id ${contactUserId} was not found.`);\r\n }\r\n }\r\n\r\n function _getDeliveryAddressSummary(address) {\r\n const name = (address.CompanyName ? address.CompanyName : `${address.FirstName} ${address.LastName}`).trim();\r\n\r\n const elements = [];\r\n\r\n if (name && name.length > 0) {\r\n elements.push(name);\r\n }\r\n\r\n const addr = address.Address;\r\n if (addr && addr.trim().length > 0) {\r\n elements.push(addr.trim());\r\n }\r\n\r\n const post = address.PostCode + ' ' + address.PostArea;\r\n if (post && post.trim().length > 0) {\r\n elements.push(post.trim());\r\n }\r\n\r\n return elements.join(', ');\r\n }\r\n\r\n function _getDeliveryAddressesFromContainers() {\r\n const $cont = $mainPanel.find('.DeliveryAddressesSectionContainer');\r\n const $addressConts = $cont.find('.DeliveryAddressSection');\r\n\r\n if (!$addressConts || $addressConts.length <= 0) {\r\n return null;\r\n }\r\n\r\n const deliveryAddresses = [];\r\n\r\n $addressConts.each((_, deliveryAddressCont) => {\r\n const deliveryAddress = $(deliveryAddressCont).data('deliveryAddress');\r\n deliveryAddresses.push(deliveryAddress);\r\n });\r\n\r\n return deliveryAddresses;\r\n }\r\n\r\n function _getDefaultOrFirstDeliveryAddressId() {\r\n const deliveryAddresses = _getDeliveryAddressesFromContainers();\r\n\r\n if (!deliveryAddresses || deliveryAddresses.length <= 0) {\r\n return null;\r\n }\r\n\r\n return (deliveryAddresses.find(a => a.IsDefault) || deliveryAddresses[0]).ID;\r\n }\r\n\r\n function _setVisibleDeliveryAddressContainer(deliveryAddressId) {\r\n if (isNaN(deliveryAddressId) || deliveryAddressId < 0) {\r\n return;\r\n }\r\n\r\n const $addressesCont = $mainPanel.find('.DeliveryAddressesSectionContainer');\r\n const $addressConts = $addressesCont.find('.DeliveryAddressSection');\r\n const $selectAddressCont = $($addressConts.get().find((d) => $(d).data('deliveryAddress').ID === deliveryAddressId));\r\n\r\n if ($selectAddressCont) {\r\n $addressConts.hide();\r\n $selectAddressCont.show();\r\n }\r\n else {\r\n console.warn(`Delivery address container matching Id ${deliveryAddressId} was not found.`);\r\n }\r\n }\r\n\r\n function _getDeliveryAddressesFromContainersWithTagifyWhitelistValue() {\r\n const deliveryAddresses = _getDeliveryAddressesFromContainers();\r\n\r\n if (!deliveryAddresses) {\r\n return null;\r\n }\r\n\r\n deliveryAddresses.forEach(deliveryAddress => {\r\n if (!deliveryAddress.ID) {\r\n deliveryAddress['value'] = labels.newDeliveryAddress;\r\n } else {\r\n let addressValue = _getDeliveryAddressSummary(deliveryAddress);\r\n if ((!addressValue || !addressValue.length) && deliveryAddress.IsDefault === true) {\r\n addressValue = labels.defaultDeliveryAddress;\r\n }\r\n\r\n deliveryAddress['value'] = addressValue;\r\n }\r\n });\r\n\r\n return deliveryAddresses.filter(d => d.value);\r\n }\r\n\r\n function _findPreSelectDeliveryAddressById(deliveryAddresses, preselectDeliveryAddressId) {\r\n if (!deliveryAddresses || isNaN(preselectDeliveryAddressId)) {\r\n return null;\r\n }\r\n\r\n let preselectDeliveryAddress = null;\r\n\r\n deliveryAddresses.forEach(address => {\r\n if ((preselectDeliveryAddressId === 0 && address.ID === 0)\r\n || address.ID === preselectDeliveryAddressId) {\r\n\r\n preselectDeliveryAddress = address;\r\n }\r\n });\r\n\r\n return preselectDeliveryAddress;\r\n }\r\n\r\n function _updateDeliveryAddressesTagifyWhitelist(preselectDeliveryAddressId) {\r\n\r\n if (_shouldShowDeliveryAddressTagify === false) {\r\n return;\r\n }\r\n\r\n const deliveryAddresses = _getDeliveryAddressesFromContainersWithTagifyWhitelistValue();\r\n\r\n if (deliveryAddresses && deliveryAddresses.length > 0) {\r\n deliveryAddressTagifyInput.settings.whitelist = deliveryAddresses;\r\n\r\n let preselectDeliveryAddress = _findPreSelectDeliveryAddressById(deliveryAddresses, preselectDeliveryAddressId);\r\n if (preselectDeliveryAddress) {\r\n deliveryAddressTagifyInput.removeAllTags();\r\n deliveryAddressTagifyInput.addTags([preselectDeliveryAddress]);\r\n }\r\n }\r\n }\r\n\r\n function _setupCustomerSection() {\r\n $mainPanel.find('.ButtonDeletecustomer').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n const $custUI = $(this).closest('.ContactPersonSection');\r\n\r\n _showConfirmation(ctx.messages.confirmDeleteContact,\r\n function() {\r\n const cust = $custUI.data('customer');\r\n\r\n $.blockUI({ message: null });\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: { action: 'DeleteContact', Users: '[' + cust.UserID + ']' }\r\n })\r\n .always(function() {\r\n $.unblockUI();\r\n })\r\n .done(function(result) {\r\n if (_detectAndHandleRedirect(result)) {\r\n return;\r\n }\r\n\r\n $custUI.remove();\r\n\r\n if (_shouldShowContactTagify) {\r\n _updateContactTagifyWhitelist(ctx.thisUserId);\r\n }\r\n\r\n w.PubSub.publish('notification.success', ctx.messages.deletedSuccessfully);\r\n })\r\n .fail(function(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n });\r\n });\r\n });\r\n $mainPanel.find('.ButtonResetpassword').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n const $custUI = $(this).closest('.ContactPersonSection');\r\n\r\n _showConfirmation(ctx.messages.confirmResetPassword,\r\n function() {\r\n const cust = $custUI.data('customer');\r\n\r\n $.blockUI({ message: null });\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: { action: 'ResetPassword', UserID: cust.UserID }\r\n })\r\n .always(function() {\r\n $.unblockUI();\r\n })\r\n .done(function(result) {\r\n if (_detectAndHandleRedirect(result)) {\r\n return;\r\n }\r\n w.PubSub.publish('notification.success', ctx.messages.newPasswordEmailSent);\r\n })\r\n .fail(function(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n });\r\n });\r\n });\r\n $mainPanel.find('.ButtonAddcontact').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n $newContactUI = _createCustomerUI();\r\n const newContact = {\r\n FirstName: '',\r\n LastName: '',\r\n Gender: '',\r\n DateOfBirth: '',\r\n Phone: '',\r\n MobilePhone: '',\r\n Email: '',\r\n DeliveryAddresses: [],\r\n IsNewCustomer: true\r\n };\r\n $newContactUI.data('customer', newContact);\r\n\r\n // If compact mode, hide other contacts\r\n if (_shouldShowContactTagify) {\r\n const $contactConts = $newContactUI.parent().find('.ContactPersonSection').not($newContactUI);\r\n $contactConts.hide();\r\n $newContactUI.show();\r\n _updateContactTagifyWhitelist(0);\r\n }\r\n\r\n _displayCustomer($newContactUI, newContact);\r\n\r\n $(this).hide();\r\n $mainPanel.find('.ButtonCanceladdcontact').show();\r\n });\r\n $mainPanel.find('.ButtonCanceladdcontact').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n _onNewContactEditFinished(true);\r\n });\r\n\r\n const $cont = $mainPanel.find('.ContactPersonsSectionContainer');\r\n\r\n // Hide ContactPersonSection as blank\r\n $сontactSection = $cont.find('.ContactPersonSectionTemplate');\r\n $сontactSection.hide();\r\n const $dateTimePicker = $сontactSection.find('.ContactPersonDateOfBirthInput');\r\n $dateTimePicker.removeAttr('id');\r\n $dateTimePicker.removeClass('dateselector hasDatepicker');\r\n\r\n if (ctx.customer) {\r\n const customer = ctx.customer;\r\n const $customerUi = _createCustomerUI();\r\n $сontactSection.find('.PersonalData').remove(); // remove personal data section to not be displayed for other contacts\r\n\r\n $customerUi.data('customer', customer);\r\n\r\n _displayCustomer($customerUi, customer);\r\n _displayDeliveryAddressDescriptionForPrivateUser($customerUi, ctx.deliveryAddresses);\r\n }\r\n\r\n if (ctx.contacts) {\r\n const loggedInContact = ctx.contacts.find((c) => c.UserID === ctx.thisUserId);\r\n\r\n if (loggedInContact) {\r\n const cust = loggedInContact;\r\n const $contactUi = _createCustomerUI();\r\n $сontactSection.find('.PersonalData').remove();\r\n $contactUi.data('customer', cust);\r\n _displayCustomer($contactUi, cust);\r\n }\r\n\r\n for (let i = 0; i < ctx.contacts.length; i++) {\r\n const cust = ctx.contacts[i];\r\n if (!loggedInContact || cust !== loggedInContact) {\r\n const $contactUi = _createCustomerUI();\r\n $contactUi.data('customer', cust);\r\n $contactUi.find('.ButtonDeletecustomer').removeClass(\"hidden\");\r\n _displayCustomer($contactUi, cust);\r\n\r\n if (_shouldShowContactTagify) {\r\n if (!loggedInContact && i === 0) {\r\n $contactUi.show();\r\n } else {\r\n $contactUi.hide();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function _setupDeliveryAddressesSection() {\r\n $mainPanel.find('.ButtonAdddeliveryaddress').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n $newDelivAddressUI = _createDeliveryAddressUI();\r\n const newAddress = { ID: 0, Address: '', PostCode: '', PostArea: '' };\r\n newAddress.UserID = _deliveryAddressUserId;\r\n $newDelivAddressUI.data('deliveryAddress', newAddress);\r\n _displayDeliveryAddress($newDelivAddressUI, newAddress);\r\n\r\n // If compact mode, hide other delivery addresses\r\n if (_shouldShowDeliveryAddressTagify === true) {\r\n const $addressesConts = $newDelivAddressUI.parent().find('.DeliveryAddressSection');\r\n $addressesConts.hide();\r\n $newDelivAddressUI.show();\r\n _updateDeliveryAddressesTagifyWhitelist(0);\r\n }\r\n\r\n $(this).hide();\r\n $mainPanel.find('.ButtonCanceladddelivaddress').show();\r\n });\r\n $mainPanel.find('.ButtonCanceladddelivaddress').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n _onNewDelivAddressEditFinished(true);\r\n });\r\n $mainPanel.find('.ButtonDeletedeliveryaddress').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n const $ui = $(this).closest('.DeliveryAddressSection');\r\n const address = $ui.data('deliveryAddress');\r\n\r\n _showConfirmation(ctx.messages.confirmDeleteDelivAddress,\r\n function() {\r\n $.blockUI({ message: null });\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: {\r\n action: 'DeleteDeliveryAddress',\r\n customer: { DeliveryAddress: { ID: address.ID, UserID: address.UserID } }\r\n }\r\n })\r\n .always($.unblockUI)\r\n .done(function(result) {\r\n if (_detectAndHandleRedirect(result)) {\r\n return;\r\n }\r\n\r\n $ui.remove();\r\n\r\n if (_shouldShowDeliveryAddressTagify) {\r\n _updateDeliveryAddressesTagifyWhitelist(_getDefaultOrFirstDeliveryAddressId());\r\n }\r\n\r\n w.PubSub.publish('notification.success', ctx.messages.deletedSuccessfully);\r\n _displayNewDeliveryAddressDefaultFlag(result.defaultAddressId);\r\n })\r\n .fail(function(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n });\r\n });\r\n });\r\n $mainPanel.find('.ButtonDefaultDeliveryAddress').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n const $ui = $(this).closest('.DeliveryAddressSection');\r\n const address = $ui.data('deliveryAddress');\r\n\r\n $.blockUI({ message: null });\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: {\r\n action: 'SetDefaultDeliveryAddress',\r\n customer: { DeliveryAddress: { ID: address.ID, UserID: address.UserID } }\r\n }\r\n })\r\n .always($.unblockUI)\r\n .done(function(result) {\r\n if (_detectAndHandleRedirect(result)) {\r\n return;\r\n }\r\n _displayNewDeliveryAddressDefaultFlag(address.ID);\r\n })\r\n .fail(function(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n });\r\n });\r\n\r\n function firstTimeShowDeliveryAddresses(addresses) {\r\n const defaultOrFirstId = (addresses.find(a => a.IsDefault) || addresses[0]).ID;\r\n\r\n for (let i = 0; i < addresses.length; i++) {\r\n const address = addresses[i];\r\n address.UserID = _deliveryAddressUserId;\r\n const $ui = _createDeliveryAddressUI();\r\n $ui.data('deliveryAddress', address);\r\n if (!_isNewCustomer) {\r\n $ui.find('.ButtonDeletedeliveryaddress').show();\r\n $ui.find('.ButtonDefaultDeliveryAddress').show();\r\n }\r\n _displayDeliveryAddress($ui, address);\r\n\r\n if (_shouldShowDeliveryAddressTagify) {\r\n if (address.ID === defaultOrFirstId) {\r\n $ui.show();\r\n } else {\r\n $ui.hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const $ui = $mainPanel.find('.DeliveryAddressesSectionContainer .DeliveryAddressSectionTemplate');\r\n $newDelivAddressSection = $ui;\r\n $newDelivAddressSection.hide();\r\n\r\n if (ctx.deliveryAddresses)\r\n firstTimeShowDeliveryAddresses(ctx.deliveryAddresses);\r\n }\r\n\r\n function _setupRegisterButton() {\r\n $mainPanel.find('.ButtonRegisternewcustomer').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n _validateForm(function() {\r\n if (!_isNewCustomer) {\r\n return;\r\n }\r\n\r\n let comp = null;\r\n if (regType === 'company') {\r\n _readCompany();\r\n comp = company;\r\n }\r\n const $custUI = $mainPanel.find('.ContactPersonsSectionContainer .ContactPersonSection');\r\n const cust = _readCustomer($custUI);\r\n cust.password = $custUI.find('.ContactPersonPasswordInput').val();\r\n\r\n const $delivAddressUI = $mainPanel.find('.DeliveryAddressesSectionContainer .DeliveryAddressSection');\r\n cust.DeliveryAddress = _readDeliveryAddress($delivAddressUI, $custUI);\r\n\r\n $.blockUI({ message: null });\r\n if (_contactFormModeIsEnabled) {\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: {\r\n action: 'SendUserRegistrationNotification',\r\n regtype: regType,\r\n company: comp,\r\n customer: cust\r\n }\r\n })\r\n .done(function() {\r\n w.PubSub.publish('notification.success',\r\n {\r\n text: labels['userRegistrationRequestHasBeenSuccessfullySent'],\r\n timeout: 0,\r\n killer: true\r\n });\r\n })\r\n .fail(failCallback)\r\n .always($.unblockUI);\r\n } else {\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: { action: 'RegisterNewCustomer', regtype: regType, company: comp, customer: cust }\r\n })\r\n .done(function(result) {\r\n let redirectUrl = result.redirectUrl || ctx.returnURL;\r\n const pendingApprovalStatus = 1;\r\n\r\n if (redirectUrl && result.customer.RegistrationStatus === pendingApprovalStatus) {\r\n const registrationRequestSentMsgId = 80067;\r\n redirectUrl = $.setQueryStringParam(redirectUrl,\r\n 'infowarnmsgid',\r\n registrationRequestSentMsgId);\r\n }\r\n\r\n if (_redirectToReturnUrlIfPresent(redirectUrl)) {\r\n return;\r\n }\r\n\r\n if (result.customer.RegistrationStatus === pendingApprovalStatus) {\r\n w.PubSub.publish('notification.warning',\r\n { text: ctx.messages.registrationRequestSent, timeout: 0, killer: true });\r\n } else {\r\n sessionStorage.setItem('registrationSuccess', 'true');\r\n w.location.reload(true);\r\n }\r\n })\r\n .fail(failCallback)\r\n .always($.unblockUI);\r\n }\r\n\r\n function failCallback(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n function _setupSaveButton() {\r\n $mainPanel.find('.ButtonSave').click(function(evt) {\r\n evt.preventDefault();\r\n\r\n _validateForm(function() {\r\n _readCompany();\r\n\r\n var customers = [];\r\n var $customerSections = $mainPanel.find('.ContactPersonSection');\r\n var isCustomerAdded = false;\r\n var deliveryAddresses = [];\r\n\r\n $customerSections.each(function(index, customerSection) {\r\n const $customerUI = $(customerSection);\r\n const customer = _readCustomer($customerUI);\r\n if (regType === 'private' && !_showDeliveryAddressSection) {\r\n const address = _readDeliveryAddressForPrivateUser($customerUI);\r\n deliveryAddresses.push({ DeliveryAddress: address });\r\n }\r\n\r\n if (!customer.UserID) {\r\n isCustomerAdded = true;\r\n customer.password = $customerUI.find('.ContactPersonPasswordInput').val();\r\n }\r\n\r\n if (company) {\r\n customer.CompanyUserID = company.UserID;\r\n }\r\n customers.push(customer);\r\n });\r\n\r\n const $deliveryAddressSections = $mainPanel.find('.DeliveryAddressesSectionContainer .DeliveryAddressSection');\r\n let isAddressAdded = false;\r\n $deliveryAddressSections.each(function(index, deliveryAddressSection) {\r\n const $addressUI = $(deliveryAddressSection);\r\n const address = _readDeliveryAddress($addressUI);\r\n\r\n if (!address.ID) {\r\n isAddressAdded = true;\r\n }\r\n\r\n deliveryAddresses.push({ DeliveryAddress: address });\r\n });\r\n\r\n $.blockUI({ message: null });\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'POST',\r\n data: {\r\n action: 'UpdateRegistrationInfo',\r\n company: company,\r\n customers: customers,\r\n addresses: deliveryAddresses\r\n }\r\n })\r\n .always(function() {\r\n $.unblockUI();\r\n\r\n if (isCustomerAdded) {\r\n _onNewContactEditFinished(false);\r\n }\r\n\r\n if (isAddressAdded) {\r\n _onNewDelivAddressEditFinished(false);\r\n }\r\n })\r\n .done(function(result) {\r\n if (_detectAndHandleRedirect(result)) {\r\n return;\r\n }\r\n\r\n company = result.company;\r\n _displayCompany();\r\n\r\n $customerSections.each(function(index, customerSection) {\r\n if (index < result.customers.length) {\r\n const customer = result.customers[index];\r\n customer.IsNewCustomer = false;\r\n const $customerUI = $(customerSection);\r\n $customerUI.data('customer', customer);\r\n _displayCustomer($customerUI, customer);\r\n\r\n if (regType === 'private' && !_showDeliveryAddressSection) {\r\n _displayDeliveryAddressDescriptionForPrivateUser($customerUI, result.addresses);\r\n }\r\n\r\n if (company && customer.UserID !== ctx.thisUserId) {\r\n $customerUI.find('.ButtonDeletecustomer').removeClass('hidden').removeAttr('hidden');\r\n }\r\n }\r\n });\r\n\r\n if (_shouldShowContactTagify === true) {\r\n const contacts = _getContactsFromContainers();\r\n let newContactUserId = contacts && contacts.length ? contacts.pop().UserID : null;\r\n _setVisibleContactContainer(newContactUserId);\r\n _updateContactTagifyWhitelist(newContactUserId);\r\n }\r\n\r\n $deliveryAddressSections.each(function(index, deliveryAddressSection) {\r\n if (index < result.addresses.length) {\r\n const address = result.addresses[index];\r\n const $addressUI = $(deliveryAddressSection);\r\n\r\n if (!address) {\r\n if (ctx.allowMultipleDelivAddresses) {\r\n $addressUI.remove();\r\n }\r\n } else {\r\n const initialAddress = deliveryAddresses[index];\r\n address.UserID = initialAddress.DeliveryAddress.UserID;\r\n\r\n $addressUI.data('deliveryAddress', address);\r\n _displayDeliveryAddress($addressUI, address);\r\n $addressUI.find('.ButtonDeletedeliveryaddress').show();\r\n $addressUI.find('.ButtonDefaultDeliveryAddress').show();\r\n }\r\n }\r\n });\r\n\r\n if (_shouldShowDeliveryAddressTagify === true) {\r\n if (isAddressAdded === true) {\r\n const newDeliveryAddressId = _getDeliveryAddressesFromContainers().pop().ID;\r\n _setVisibleDeliveryAddressContainer(newDeliveryAddressId);\r\n _updateDeliveryAddressesTagifyWhitelist(newDeliveryAddressId);\r\n } else {\r\n _updateDeliveryAddressesTagifyWhitelist(null);\r\n }\r\n }\r\n\r\n if (!_redirectToReturnUrlIfPresent(ctx.returnURL)) {\r\n w.PubSub.publish('notification.success', ctx.messages.savedSuccessfully);\r\n _clearErrorStates();\r\n }\r\n })\r\n .fail(function(jqXHR, textStatus) {\r\n if (typeof (jqXHR.responseJSON) === 'object' && jqXHR.responseJSON.Message) {\r\n w.PubSub.publish('notification.error', jqXHR.responseJSON.Message);\r\n\r\n } else {\r\n w.PubSub.publish('notification.error', textStatus);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n function _setupEmailInUseNotification() {\r\n if (ctx.showEmailInUseNotification) {\r\n $mainPanel.find('.ContactPersonEmailInput,.InvoiceEmailInput').on('change',\r\n function() {\r\n $.noty.closeAll();\r\n const inputEmail = ($(this).val() || '').toLowerCase();\r\n if (inputEmail) {\r\n $.ajax({\r\n url: handlerUrl,\r\n method: 'GET',\r\n data: { action: 'exists', email: inputEmail }\r\n })\r\n .done(function(result) {\r\n const emailExists = result.exists;\r\n if (emailExists) {\r\n w.PubSub.publish('notification.warning',\r\n { text: ctx.messages.emailIsAlreadyInUse, timeout: 0, killer: true });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n };\r\n\r\n function _getSelectedRadioValue(radioButtons) {\r\n if (!radioButtons || radioButtons.length === 0) return false;\r\n let selectedValue = radioButtons.filter(':checked').val();\r\n return selectedValue;\r\n }\r\n\r\n function _selectRadioByValueMatch(radioButtons, value) {\r\n if (!radioButtons || radioButtons.length === 0) return false;\r\n\r\n radioButtons.each(function(index, radioButton) {\r\n if (radioButton.value === value.toString()) {\r\n radioButton.checked = true;\r\n return true;\r\n }\r\n });\r\n\r\n return false;\r\n }\r\n\r\n function _getNewsletterSubscirptionStatus($ui) {\r\n const { $checkbox, $radioButtons } = findNewsletterElements($ui);\r\n\r\n if($checkbox.length === 1) {\r\n return $checkbox.is(':checked')\r\n } else if ($radioButtons.length) {\r\n const $radioButtons = $ui.find('.js-receive-newsletter-radiobutton');\r\n return _getSelectedRadioValue($radioButtons);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function _setNewsletterSubscirptionStatus($ui, isSubscribed) {\r\n const subscribedValueToSet = (isSubscribed === true); \r\n const { $checkbox, $radioButtons } = findNewsletterElements($ui);\r\n\r\n if($checkbox.length === 1) {\r\n $checkbox.prop('checked', subscribedValueToSet);\r\n } else if ($radioButtons.length) {\r\n if (isSubscribed === null) return false;\r\n const $radioButtons = $ui.find('.js-receive-newsletter-radiobutton');\r\n return _selectRadioByValueMatch($radioButtons, subscribedValueToSet);\r\n } else {\r\n console.warn('No newsletter subscription elements found.');\r\n return false;\r\n }\r\n }\r\n\r\n // Utility function to find newsletter subscription elements\r\n function findNewsletterElements($ui) {\r\n return {\r\n $checkbox: $ui.find('.js-contact-receive-newsletter, .js-company-receive-newsletter'),\r\n $radioButtons: $ui.find('.js-receive-newsletter-radiobutton')\r\n };\r\n }\r\n\r\n function _setupNewCustomer() {\r\n if (_isNewCustomer) {\r\n $mainPanel.find('.ExistingCustomerOnly').hide();\r\n } else {\r\n $mainPanel.find('.NewCustomerOnly').hide();\r\n }\r\n }\r\n\r\n function _setupContactFormMode() {\r\n if (_contactFormModeIsEnabled) {\r\n $mainPanel.find('.ContactFormModeHiddenRow').hide();\r\n $mainPanel.find('.DeliveryAddressesSectionContainer').hide();\r\n }\r\n }\r\n\r\n function _clearErrorStates() {\r\n $mainPanel.find('.nav-tabs li').removeClass('has-required-fields');\r\n }\r\n\r\n $(function() {\r\n _setupShowNewsletterFlags();\r\n _setupDateOfBirthValidator();\r\n _setupRegistrationType();\r\n _setupCompanySection();\r\n\r\n _setupCustomerSection();\r\n _setupDeliveryAddressesSection();\r\n _setupRegisterButton();\r\n _setupSaveButton();\r\n\r\n _setupEmailInUseNotification();\r\n _setupNewCustomer();\r\n _setupContactFormMode();\r\n\r\n _setupContactAndDeliveryAddressTagify();\r\n _setupToolTip($mainPanel);\r\n });\r\n }\r\n})(window, jQuery);"],"names":["w","$","assetId","umwAssets","let","ctx","handlerUrl","R","$mainPanel","mainPanelID","regType","initialRegType","labels","_isNewCustomer","customer","IsNewCustomer","_enableFullNameMode","enableFullNameMode","$сontactSection","$newContactUI","$newDelivAddressSection","$newDelivAddressUI","company","_showDeliveryAddressSection","showDeliveryAddressSection","_contactFormModeIsEnabled","contactFormModeIsEnabled","_deliveryAddressUserId","UserID","_shouldShowContactTagify","thisUserId","compactFormModeIsEnabled","_shouldShowDeliveryAddressTagify","allowMultipleDelivAddresses","_useTabs","useTabs","contactPersonTagifyInput","deliveryAddressTagifyInput","validationFailsAddressIDs","_processClonedHtml","$clonedHtml","parentSelector","targetAttr","currentIndex","length","find","add","each","$this","this","i","currentAttr","currentAttrVal","attr","replace","_validateForm","successCallback","validator","isCompany","validate","ignore","index","el","parents","tabSelector","resetForm","form","apply","PubSub","publish","successList","messages","generalValidationError","errorList","_clearErrorStates","navTabs","tabID","element","theTabHyperlinkWithErrors","parent","addClass","tab","_showConfirmation","message","acceptCallback","cancelCallback","notyConfig","layout","animation","open","height","close","easing","speed","killer","modal","text","buttons","yes","onClick","noty","no","_displayProperRegTypeFields","instantly","els","contactPersonTabName","$companySection","slideDown","contactPersonInfoTitle","show","hide","_getTabsElements","liTabCompany","removeClass","removeAttr","tabCompany","liTabContact","tabContact","liTabDelivery","tabDelivery","data","hasClass","slideUp","profile","_detectAndHandleRedirect","response","redirectStringPrefix","indexOf","redirectUrl","slice","location","_setUpPostalAreaAutoCompletion","$region","relatedPostAreaInputDataKey","$postCodeInput","$postAreaInput","isKeyUpHandlerAlreadySetUp","keyup","postCodeVal","val","trim","globalSettings","CountryCode","getPostalCodeInfo","d","valid","result","_setupToolTip","$container","$toolTipControl","tooltip","_displayCustomer","$ui","$firstNameLabel","$lastNameRow","isLastNameShown","ECustomerID","FirstName","LastName","html","firstNameText","fullName","Gender","DateOfBirth","Phone","MobilePhone","InvoiceAddress","Address","Address2","PostCode","PostArea","Email","_setNewsletterSubscirptionStatus","IsNewsletterRecipient","_readCustomer","_getNewsletterSubscirptionStatus","_createCustomerUI","$tmp","clone","datepicker","onClose","blur","insertBefore","_onNewContactEditFinished","cancelled","remove","_updateContactTagifyWhitelist","_displayCompany","Name","CompanyNumber","ContactPersonName","ContactPersonEmail","_readCompany","_createDeliveryAddressUI","_displayDeliveryAddress","deliveryAddress","EMail","CompanyName","Description","_displayDeliveryAddressDefaultFlag","IsDefault","_displayNewDeliveryAddressDefaultFlag","newDefaultDeliveryAddressId","deliveryAddressSection","$addressUI","address","ID","isDefault","$btnIsDef","_displayDeliveryAddressDescriptionForPrivateUser","deliveryAddresses","defaultDeliveryAddresses","_","filter","$deliveryDescriptionInput","_readDeliveryAddress","$delivAddressUI","$custUI","_readDeliveryAddressForPrivateUser","Company","$deliveryDescriptionUI","_onNewDelivAddressEditFinished","_updateDeliveryAddressesTagifyWhitelist","_getDefaultOrFirstDeliveryAddressId","_redirectToReturnUrlIfPresent","isBeingRedirect","_getContactsFromContainers","$contactConts","contacts","contactCont","contact","push","preselectContactId","preselectContact","forEach","newContact","isNaN","settings","whitelist","removeAllTags","addTags","_setVisibleContactContainer","contactUserId","$selectContactCont","get","c","console","warn","_getDeliveryAddressSummary","name","elements","addr","post","join","_getDeliveryAddressesFromContainers","$addressConts","deliveryAddressCont","a","_setVisibleDeliveryAddressContainer","deliveryAddressId","$selectAddressCont","preselectDeliveryAddressId","preselectDeliveryAddress","addressValue","defaultDeliveryAddress","newDeliveryAddress","value","_setupDeliveryAddressesSection","click","evt","preventDefault","newAddress","closest","confirmDeleteDelivAddress","blockUI","ajax","url","method","action","DeliveryAddress","always","unblockUI","done","deletedSuccessfully","defaultAddressId","fail","jqXHR","textStatus","responseJSON","Message","firstTimeShowDeliveryAddresses","addresses","defaultOrFirstId","$checkbox","$radioButtons","findNewsletterElements","is","radioButtons","isSubscribed","subscribedValueToSet","prop","radioButton","toString","checked","_setupContactFormMode","onload","sessionStorage","getItem","removeItem","registrationSuccess","shouldShowNewsletterFlag","addMethod","inst","_getInst","dateFormat","_get","parseDate","_getFormatConfig","Date","e","dateOfBirthValidationError","_setupRegistrationType","$rbtns","change","confirmDeleteContact","cust","Users","confirmResetPassword","newPasswordEmailSent","DeliveryAddresses","not","$cont","$dateTimePicker","$customerUi","$contactUi","loggedInContact","comp","password","failCallback","regtype","timeout","returnURL","RegistrationStatus","setQueryStringParam","registrationRequestSent","setItem","reload","customers","$customerSections","isCustomerAdded","customerSection","$customerUI","CompanyUserID","$deliveryAddressSections","isAddressAdded","newDeliveryAddressId","newContactUserId","pop","savedSuccessfully","showEmailInUseNotification","on","closeAll","inputEmail","toLowerCase","email","exists","emailIsAlreadyInUse","$contactPersonInput","Tagify","mode","dropdown","maxItems","highlightFirst","searchKeys","templates","dropdownItem","tagData","detail","JSON","parse","$addressesInput","includes","subscribe","uniqueErrorAddressIDs","Set","error","firstErrorAddressID","Array","from","firstErrorAddress","window","jQuery"],"mappings":"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"}