{"version":3,"sources":["src/javascripts/registration/registration.js"],"names":["$","fn","wizard","Wizard","el","config","this","extend","submitSelector","stepSelector","movePrevious","exitSelector","currentStep","currentStepIsOptional","loader","exitMessage","Alkami","Localization","SiteText","steps","optionalSteps","name","request","submitAction","stepIndex","callback","window","location","href","onExit","keepQuiet","navigator","userAgent","includes","off","bind","init","maskedCardNames","prototype","shouldMaskCard","self","on","e","item","parents","submit","exit","prevIndex","_movePrev","load","i","length","optional","html","trim","afterStep","call","confirm","Ext","YesNoDialog","id","ajaxOptions","yes","no","target","focus","listeners","afterrender","$modal","attr","tabindex","role","aria-labelledby","header","aria-describedby","body","aria-modal","setTimeout","find","focusableEls","firstFocusableEl","lastFocusableEl","key","close","shiftKey","document","activeElement","preventDefault","stepLocator","params","step","_getStep","url","obj","str","p","hasOwnProperty","push","encodeURIComponent","join","serialize","_handleLoadError","apply","arguments","toggleLoader","scrollTo","onLoad","progressBar","form","is","data","serializeArray","found","each","index","value","toggleErrorDiv","valid","formData","indexOf","splice","maskCard","paramData","jQuery","param","post","action","done","res","clearErrors","handleFormResponse","Array","errors","els","forEach","err","offset","top","reduce","prev","curr","fail","responseJSON","error_messages","responseText","submitFn","exception","showFlash","FlashBanner","showError","RegistrationShowFlashErrorOops","error","success","result","next","_moveNext","show","buttons","cancel","filter","disableSubmit","RegistrationLoadSubmitPleaseWait","hide","enableSubmit","isPlainObject","test","maxLength","resText","textStatus","validator","addMethod","postalcode","element","match","RegistrationValidationEnterValidZipcode","taxid","numDigits","val","expression","RegExp","RegistrationValidationEnterValidSSN","RegistrationValidationEnterValidEIN","phone_number","replace","RegistrationValidationEnterValidNumber","toString","Object","hasOwnProp","isObject","RegistrationOnlineBankingRegister","after","checkedInput","event","trigger","type","isValid","allowAlternateEmail","isBusiness","wizardData"],"mappings":"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","file":"registration.min.js","sourcesContent":["$.fn.wizard = (function () {\n var Wizard = function (el, config) {\n this.el = $(el);\n $.extend(this, { // these defaults are overrideable\n // step selectors\n submitSelector: '.submit',\n stepSelector: '.step',\n movePrevious: '.previous',\n exitSelector: '.cancel',\n\n currentStep: 0,\n currentStepIsOptional: false,\n\n // messages\n loader: '\"Loading\"',\n exitMessage: Alkami.Localization.SiteText['Registration.Wizard.Quit.AreYouSure'],\n // steps\n steps: [],\n optionalSteps: [{\n name: 'error',\n request: '/Registration/Error'\n }, {\n name: 'resendPassword',\n request: '/Registration/CreateLogin?view=ResendPassword',\n submitAction: 'ajax',\n stepIndex: 0,\n callback: function () {\n window.location.href = '/Authentication/Password';\n } \n }],\n\n onExit: function () {\n this.keepQuiet();\n if (navigator.userAgent.includes('NATIVEAPP')) {\n location.href = '/Mobile/Authentication';\n } else {\n location.href = '/';\n }\n },\n keepQuiet: function () {\n $(window).off('beforeunload.wizard');\n }\n }, config);\n\n\n this.config = config;\n this.bind();\n this.init();\n };\n\n var maskedCardNames = ['CreditCardNumber', 'DebitCardNumber'];\n\n var maskFormCards = function (formData) {\n\n $.each(formData, function(index, data) {\n\n if (maskedCardNames.indexOf(data.name) !== -1) {\n formData.splice(index, 1, { name: data.name, value: maskCard(data.value) });\n }\n });\n\n return formData;\n };\n\n Wizard.prototype = {\n shouldMaskCard: false,\n bind: function () {\n var self = this;\n this.el.on('click', this.submitSelector, function (e) {\n var item = $(this).parents(self.stepSelector);\n return self.submit(item, e);\n });\n\n this.el.on('click', this.exitSelector, function (e) {\n self.exit(e);\n return false;\n });\n this.el.on('click', this.movePrevious, function (e) {\n var prevIndex = self._movePrev();\n self.load(prevIndex);\n return false;\n });\n\n if (self.exitMessage !== false)\n $(window).on('beforeunload.wizard', function () {\n return self.exitMessage;\n });\n },\n init: function () {\n // flag optional as optional\n for (var i = 0; i < this.optionalSteps.length; i++) {\n this.optionalSteps[i].optional = true;\n }\n\n if (this.el.html().trim() === '' || this.currentStep != 0) {\n this.load(this.currentStep);\n }\n else {\n this.afterStep.call(this);\n }\n },\n exit: function (e) {\n var self = this;\n\n if (self.exitMessage === false) {\n self.onExit.call(self);\n return;\n }\n\n var confirm = new Ext.Alkami.YesNoDialog({\n html: self.exitMessage,\n id: 'no-conflict',\n ajaxOptions: {\n 'yes': function () {\n self.onExit.call(self);\n },\n 'no': function () {\n // return focus back to previously focused button\n e.target.focus();\n }\n },\n listeners: {\n 'afterrender': function () {\n var $modal = $('#no-conflict');\n\n $modal.attr({ \n tabindex: -1,\n role: 'dialog',\n 'aria-labelledby': this.header.id,\n 'aria-describedby': this.body.id,\n 'aria-modal': true \n });\n\n setTimeout(function() {\n // set initial focus to the yes button \n $modal.find('.x-toolbar-cell:eq(1) button').focus();\n }, 100);\n }\n }\n });\n\n var $modal = $('#no-conflict');\n var focusableEls = $modal.find('button:not([disabled])');\n var firstFocusableEl = focusableEls[0];\n var lastFocusableEl = focusableEls[focusableEls.length - 1];\n\n $modal.on('keydown', function(e) {\n // Close modal\n if (e.key === 'Escape') {\n confirm.close();\n confirm.ajaxOptions.no.call()\n return;\n }\n\n // trap focus in modal\n if (e.key !== 'Tab') { \n return; \n }\n\n if (e.shiftKey) { // shift + tab\n if (document.activeElement === firstFocusableEl) {\n e.preventDefault();\n lastFocusableEl.focus();\n }\n } else { // tab\n if (document.activeElement === lastFocusableEl) {\n e.preventDefault();\n firstFocusableEl.focus();\n }\n }\n });\n },\n load: function (stepLocator, params) {\n var step = this._getStep(stepLocator), self = this;\n\n var serialize = function (obj) {\n var str = [];\n for (var p in obj)\n if (obj.hasOwnProperty(p)) {\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]));\n }\n return str.join(\"&\");\n };\n\n var url = step.request;\n if (params)\n url += \"?\" + serialize(params);\n\n this.el.load(url, function () {\n if (self._handleLoadError.apply(self, arguments)) return;\n self.toggleLoader(false);\n self.afterStep.call(self);\n\n window.scrollTo(0, 0);\n\n if (step.onLoad)\n step.onLoad.call(self, step);\n \n // last step remove unload\n if (self.currentStep === (self.steps.length - 1))\n $(window).off('beforeunload.wizard');\n });\n\n if (self.progressBar) {\n self.progressBar.call(self);\n }\n },\n submit: function (item, e) {\n var form = item.is('form') ? item : item.find('form'),\n data = form.serializeArray(), //.serializeHash({ checkboxesAsBools: true }),\n self = this;\n\n // default the step\n var step = this.steps[this.currentStep];\n\n // if it is optional, find the matching optional step by the first matching stepIndex\n if (this.currentStepIsOptional) {\n var found = false;\n $.each(this.optionalSteps, function (index, value) {\n if (self.currentStep == value.stepIndex && !found) {\n step = value;\n found = true;\n }\n });\n }\n\n // Remove the error div on initial submit //\n this.toggleErrorDiv(false);\n\n // (re)validate form\n if (form.data('validator') && !form.valid()) { this.toggleErrorDiv(true); return; }\n\n this.toggleLoader(true);\n\n if (this.shouldMaskCard) {\n data = maskFormCards(data);\n }\n\n if (step.submitAction === 'ajax') {\n\n var paramData = jQuery.param(data);\n\n $.post(form[0].action, paramData)\n .done(function (res) {\n $.clearErrors(); // Remove error field class\n Ext.Alkami.handleFormResponse(res, { form: form }, self);\n\n // Places focus on the top most error so that the user doesn't have to shift tab back up the list. \n if (self.steps instanceof Array && self.steps.length > 0 && self.steps[self.steps.length -1].request.includes('Mobile/ForgotUsername') &&\r\n res.errors && res.errors instanceof Array) {\r\n var els = [];\r\n res.errors.forEach((err) => {\r\n var el;\r\n switch(err){\r\n case 'DateOfBirth':\r\n el = $('#DateOfBirthDate');\r\n break;\r\n case '':\r\n return;\r\n default:\r\n el = $('#' + err);\r\n break;\r\n }\r\n els.push({\r\n el: el,\r\n offset: el.offset().top\r\n })\r\n });\r\n\r\n if (els.length == 0) return;\r\n\r\n var topEl = els.reduce((prev, curr) => {\r\n if(prev.offset < curr.offset)\r\n return prev;\r\n return curr;\r\n });\r\n topEl.el.focus();\r\n }\n }).fail(function (res) {\n $.clearErrors(); // Remove error field class\n\n //Cloudflare may return a 429 for rate limiting. Pick up that return response, check for a valid SiteText key, then display the appropriate error\n if (res && res.responseJSON && res.responseJSON.errors instanceof Array && res.responseJSON.errors.length > 0 && Alkami.Localization.SiteText[res.responseJSON.errors[0]] != null) {\n res.responseJSON.error_messages = [Alkami.Localization.SiteText[res.responseJSON.errors[0]]];\n res.responseJSON.errors = [''];\n Ext.Alkami.handleFormResponse(res.responseJSON, { form: form }, self);\n }\n else {\n Ext.Alkami.handleFormResponse(res.responseText, { form: form }, self);\n }\n });\n return false;\n } else if (step.submitAction === 'form') {\n form.submit();\n return true;\n } else {\n return step.submitFn && step.submitFn.call(this, form, step);\n }\n },\n exception: function (res, showFlash) {\n if (showFlash !== false)\n Alkami.FlashBanner.showError(Alkami.Localization.SiteText.RegistrationShowFlashErrorOops);\n this.toggleLoader(false);\n this.toggleErrorDiv(false);\n },\n error: function (res) {\n this.toggleLoader(false);\n this.toggleErrorDiv(true);\n return true;\n },\n success: function (result) {\n if (result === true) { // pass back true to keep going\n\n // default the step\n var step = this.steps[this.currentStep];\n var self = this;\n\n // if it is optional, find the matching optional step by the first matching stepIndex\n if (this.currentStepIsOptional) {\n var found = false;\n $.each(this.optionalSteps, function (index, value) {\n if (self.currentStep == value.stepIndex && !found) {\n step = value;\n found = true;\n }\n });\n }\n\n if (step.hasOwnProperty('callback')) {\n step.callback.call(null);\n } else {\n var next = this._moveNext();\n this.load(next);\n }\n }\n else if (result === false) { // uh oh, error out\n this.load('error');\n }\n },\n toggleLoader: function (show, e) {\n var buttons = this.el.find('.buttons input'),\n form = this.el.find('form'),\n save = buttons.filter(this.submitSelector),\n cancel = buttons.filter('.cancel');\n if (show) {\n form.disableSubmit(Alkami.Localization.SiteText.RegistrationLoadSubmitPleaseWait);\n cancel.hide();\n }\n else {\n cancel.show();\n form.enableSubmit();\n }\n },\n toggleErrorDiv: function (show, e) {\n if (show) {\n this.el.find('div.errors.icon').show();\n }\n else {\n this.el.find('div.errors.icon').hide();\n }\n },\n _getStep: function (stepLocator) {\n var step, index = 0;\n // get step by object\n if ($.isPlainObject(stepLocator)) { // object e.g. { stepIndex: \\d, optional: false }\n step = stepLocator.optional\n ? this.optionalSteps[stepLocator.stepIndex]\n : this.steps[stepLocator.stepIndex];\n index = stepLocator.stepIndex;\n }\n // get step by number (always this.step)\n else if (/^[0-9]+?$/.test(stepLocator)) { // numeric \n index = stepLocator * 1;\n step = this.steps[index];\n }\n else { // string\n // get step by name\n var maxLength = this.steps.length > this.optionalSteps.length\n ? this.steps.length\n : this.optionalSteps.length;\n\n for (var i = 0; i < maxLength; i++) {\n if (this.steps[i] && (this.steps[i].name === stepLocator)) {\n step = this.steps[i];\n index = i;\n break;\n }\n if (this.optionalSteps[i] && (this.optionalSteps[i].name === stepLocator)) {\n step = this.optionalSteps[i];\n index = i;\n break;\n }\n }\n }\n\n // update wizard index\n this.currentStep = step.optional ? step.stepIndex : index;\n this.currentStepIsOptional = step.optional;\n\n return step;\n },\n _handleLoadError: function (resText, textStatus) {\n if (textStatus === 'error') {\n // this._movePrev(); // we didnt really move forward because the view could not load\n this.load('error');\n this.exception(resText);\n return true;\n }\n },\n // helpers\n _movePrev: function () {\n return --this.currentStep;\n },\n _moveNext: function () {\n return ++this.currentStep;\n }\n };\n\n return function (config) {\n return this.each(function () {\n $(this).data('wizard', new Wizard(this, config));\n });\n };\n})();\n\njQuery.validator.addMethod(\"zipcode\", function (postalcode, element) {\n return this.optional(element) || postalcode.match(/(^\\d{5}(-\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXYabceghjklmnpstvxy]{1}\\d{1}[A-Za-z]{1} ?\\d{1}[A-Za-z]{1}\\d{1})$/);\n}, Alkami.Localization.SiteText.RegistrationValidationEnterValidZipcode);\n\njQuery.validator.addMethod(\"taxid\", function (taxid, element) {\n var numDigits = $(\"#num_digits\").val();\n var minNumDigits = $('#min_num_digits').val();\n //var expression = \"^\\\\d{\" + numDigits + \"}$\"; \n //^[0-9]{4,9}$\n var expression = \"^[0-9]{\" + minNumDigits + \",\" + numDigits + \"}$\";\n // This expression ensures the entry is a number with length between the minNumDigits and numDigits\n return this.optional(element) || taxid.match(new RegExp(expression));\n\n}, Alkami.Localization.SiteText.RegistrationValidationEnterValidSSN);\n\njQuery.validator.addMethod(\"ein\", function (taxid, element) {\n var numDigits = $(\"#num_digits\").val();\n var minNumDigits = $('#min_num_digits').val();\n //var expression = \"^\\\\d{\" + numDigits + \"}$\"; \n //^[0-9]{4,9}$\n var expression = \"^[0-9]{\" + minNumDigits + \",\" + numDigits + \"}$\";\n // This expression ensures the entry is a number with length between the minNumDigits and numDigits\n return this.optional(element) || taxid.match(new RegExp(expression));\n\n}, Alkami.Localization.SiteText.RegistrationValidationEnterValidEIN);\n\njQuery.validator.addMethod(\"homephone\", function (phone_number, element) {\n phone_number = phone_number.replace(/\\s+/g, \"\");\n return this.optional(element) || phone_number.length > 9 && phone_number.match(/^([\\(]{1}[0-9]{3}[\\)]{1}[\\.| |\\-]{0,1}|^[0-9]{3}[\\.|\\-| ]?)?[0-9]{3}(\\.|\\-| )?[0-9]{4}$/);\n}, Alkami.Localization.SiteText.RegistrationValidationEnterValidNumber);\n\n(function (jQuery) {\n\n var toString = Object.prototype.toString,\n hasOwnProp = Object.prototype.hasOwnProperty;\n\n jQuery.isObject = function (obj) {\n if (toString.call(obj) !== \"[object Object]\")\n return false;\n\n //own properties are iterated firstly,\n //so to speed up, we can test last one if it is not own\n\n var key;\n for (key in obj) {\n }\n\n return !key || hasOwnProp.call(obj, key);\n };\n\n $('#primary_widget_title').html('

' + Alkami.Localization.SiteText.RegistrationOnlineBankingRegister + '

');\n $('#primary_widget_title h2').after('
');\n\n $(document).on('change', 'input.iris-radio__input', function () {\n var checkedInput = $('input[name=\"ContactId\"]:checked').val();\n\n if (checkedInput == \"another-contact-card\") {\n $('div.dontwantcontact').show();\n }\n else {\n $('div.dontwantcontact').hide();\n }\n\n if (checkedInput == \"-1\") {\n $('div.otherEmail').show();\n }\n else {\n $('div.otherEmail').hide();\n }\n\n $.event.trigger(\n {\n type: 'ValidationConditionChanged',\n isValid: (checkedInput != 'another-contact-card' || allowAlternateEmail)\n });\n });\n\n $(document).on('click', '#registerAsBusiness', function (e) {\n //load next step with isBusiness flag\n $('.wizard').data('wizard').load(1, { isBusiness: 1 });\n e.preventDefault();\n });\n $(document).on('click', '#registerAsIndividual', function (e) {\n var wizardData = $('.wizard').data('wizard');\n if (wizardData.steps[3].request == '/Registration/BusinessDetails') { // For FIs that gather Business Details, the retail path must skip this step. This only applies to FIs with CoreSupportsBusinessData = false, like ICCU\n wizardData.steps[2].callback = function () {\n wizardData.load(4);\n };\n }\n wizardData.load(1);\n //DEV-3921 Prevent IE10 from firing beforeunload event.\n //http://stackoverflow.com/questions/26405439/why-ie10-fires-beforeunload-event-when-clicking-on-anchor-element-with-javascrip\n e.preventDefault();\n });\n\n})(jQuery);"]}