{"version":3,"sources":["javascripts/vendor.bundles/globals.bundle/en-US.js","javascripts/vendor.bundles/globals.bundle/i18n-ts.js","javascripts/vendor.bundles/globals.bundle/jquery.extensions.js","javascripts/vendor.bundles/globals.bundle/utils-ts.js","javascripts/vendor.bundles/globals.bundle/flash-banner-ts.js","javascripts/vendor.bundles/globals.bundle/helpers-ts.js","javascripts/vendor.bundles/globals.bundle/jquery-helpers-ts.js","javascripts/vendor.bundles/globals.bundle/language-toggle-ts.js","javascripts/vendor.bundles/globals.bundle/profile_nav-ts.js","javascripts/vendor.bundles/globals.bundle/idle-timeout-ts.js","javascripts/vendor.bundles/globals.bundle/idle-modal-ts.js","javascripts/vendor.bundles/globals.bundle/screen-ts.js","javascripts/vendor.bundles/globals.bundle/content-articles-ts.js","javascripts/vendor.bundles/globals.bundle/content-promo-ts.js","javascripts/vendor.bundles/globals.bundle/system-alert-ts.js","javascripts/vendor.bundles/globals.bundle/password-togglefication.js","javascripts/vendor.bundles/globals.bundle/iris-sitetext.js","javascripts/vendor.bundles/globals.bundle/feature-detect-ts.js"],"names":["i18n","Password_InvalidFormat","Username_NoSpecialCharacters","SecurityQuestion_AuthInstructions","Field_Required","PasswordConfirmation_NoMatch","window","_","key","$","datepicker","setDefaults","dateFormat","beforeShowDay","date","day","getDay","formattedDate","Alkami","Utils","DateHelper","getIsoDate","isWeekend","inArray","BANK_HOLIDAYS","minDate","TODAY","showOtherMonths","selectOtherMonths","buttonImage","buttonText","buttonImageOnly","showOn","monthNames","Localization","SiteText","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","validator","addMethod","value","element","expression","this","optional","val","regexp","constructor","RegExp","global","lastIndex","test","match","params","parseDate","yesterday","addMilliseconds","today","el","closest","removeClass","addClass","jQuery","a","b","phone_number","replace","length","highlight","errorClass","addErrors","unhighlight","removeErrors","ignore","errorPlacement","showErrors","errorMap","errorList","$form","currentForm","id","displayErrorContainerForForm","errors","messages","each","i","n","indexOf","push","find","html","join","defaultShowErrors","onkeyup","focusInvalid","extend","clearErrors","isJSON","json","dateRangePresets","future","text","dateStart","dateEnd","past","x","setMonth","setDate","prompt","expr","pseudos","Contains","m","textContent","innerText","toUpperCase","fn","disableSubmit","disabledText","submit","data","attr","css","opacity","enableSubmit","removeAttr","showFlash","config","FlashBanner","flashBanner","swapStylesheet","url","ajaxFileUpload","opts","Object","assign","success","ajax","type","FormData","contentType","processData","status","xhr","multiFileUpload","rx","fileCount","$this","wrap","list","wrapper","prepend","filestyle","filestyleOpts","files","change","fileName","ext","substr","lastIndexOf","showError","fail","onUploadFail","uploadUrl","response","options","responseText","res","JSON","parse","upgrade","flash","result","fileSize","Math","round","$item","appendTo","on","e","preventDefault","remove","idx","splice","toRemove","last","prev","show","$clone","clone","hide","append","max","cursor","bindDateRangePicker","$field","presets","settings","datepickerOptions","doneButtonText","presetRanges","startField","endField","onChange","formatDate","trigger","off","startDate","endDate","matches","split","trim","dateArray","String","minDateObject","Date","maxDate","daterangepicker","calendars","className","cssClass","document","event","target","hasClass","hasErrors","serializeHash","p","serializeArray","name","instructify","$c","$contentElement","get","$parent","$currLink","$active","Helpers","createCloseDialog","title","cls","destroyOnClose","open","toolTip","useTitle","tipCss","autoCleanup","selector","mouseenterHandler","removeTooltipHtml","fadeOut","creationDebounce","tipPositionAt","keepState","container","autoRemovalTimeout","setTimeout","tooltip","$thisEl","tooltipText","$tipContainer","setTooltipText","fadeIn","content","position","my","at","collision","offset","of","related","relatedTarget","toElement","clearTimeout","removeData","contentSlider","slideTrigger","expandBtn","expandBtnTxt","collapseBtn","collapseBtnTxt","slideContent","collapsedByDefault","slideDown","slideUp","ajaxFilters","prepare","call","stopTransform","getUrlParam","t","transformSelect","update","serialize","replaceWith","reset","defaults","prototype","tpl","cb","confirmed","init","create","bind","self","markup","click","r","undefined","close","proxy","apply","arguments","isPropagationStopped","unbind","end","prependTo","pos","h","height","w","width","top","left","focus","postLink","PostLink","parts","plugin","parseQuery","stopPropagation","form","k","body","instance","q","URLSearchParams","forEach","param","o","checkboxesAsBools","rselectTextarea","rinput","map","elements","makeArray","filter","disabled","checked","nodeName","elem","isArray","format","StringHelper","hasOwnProperty","defineProperty","Patterns","POBox","HashTable","obj","items","clear","keys","hasItem","values","setItem","let","previous","removeItem","oldKey","getQueryStringFromUrl","$1","getQueryObjectFromUrl","queryStringList","tmp","decodeURI","getUrlParamFromUrl","results","exec","getQueryParams","returnObj","location","toString","hash","input","maskCard","cardNo","localCardNo","_str","p1","p2","p3","Array","concat","moneyRenderer","amount","allowZero","parseFloat","toLocaleString","moneyRendererAllowZero","v","localizeAmount","num","toFixed","unlocalizeAmount","formatNumber","unformatMoney","isNaN","formatMoney","formattedAmount","money","startsWith","bindDecimalFields","from","querySelectorAll","decimalFieldElement","addEventListener","stopEvent","noNegative","classList","contains","which","KEY_CODES","DELETE","BACKSPACE","PERIOD","keyCode","TAB","COMMA","NUMPAD_SUBTRACT","bindRequiredFields","labelElement","querySelector","add","async","URL","getAttribute","baseURI","origin","Error","contentElement","Dom","parseHTML","fetch","href","innerHTML","sideNavElement","parent","panelElement","hideElement","listItemElement","listItemEvent","currentActivePanelItem","newlyActivePanelItem","showElement","firstListItemElement","firstPanel","bindDatepicker","siblings","altField","altFormat","errorWrapper","speed","animate","scrollTop","previewIcon","resource","field","updateElementId","fieldElement","formElement","resolve","reject","defer","Promise","rej","fe","updatedElement","getElementById","error","onError","errorListElement","setAttribute","errorElement","parentElement","removeChild","lt","LanguageToggle","_localeStorageKey","_chosenLocaleIndex","_openDialog","locale","index","currentLocale","_dialog","GetLocales","getLocales","ResetLocales","resetLocales","SaveLocales","saveLocales","changeLocale","IsCurrent","_locales","post","localeId","Id","loc","WidgetNav","ResetWidgetNav","ResetWidgetTitleBars","locales","StorageHelper","hasLocalStorage","localStorage","stringify","then","dispatchEvent","documentElement","languageToggleElement","_languageItemTemplateElement","removeChildNodes","linkElement","cloneNode","Language","appendChild","__dialog","createDialog","buttons","handlerName","closePrompt","handlers","confirm","descriptionElement","descriptionChangingElement","button","chosenLocale","reload","onDocumentReady","refreshUI","updateHeaderProfileImage","cacheIdentifier","hasSessionStorage","cacheKey","sessionStorage","getItem","profileImage","src","search","set","dropdownOptionsElement","dropdownToggleElement","fadeToggle","toggle","isVisible","profileNavToggleElement","showProfileMenuElement","ribbonShowProfileMenuElement","ribbonProfileNavToggleElement","profileNavDropdownOptionsElement","profileNavDropdownToggleElement","chevronElement","style","display","headerProfile","headerProfileHeight","clientHeight","headerProfileImage","headerBottom","getBoundingClientRect","scrollY","parseInt","marginTop","profile","clientWidth","transition","pageScrolled","pageYOffset","cssText","profileLiteUserNameElement","string","substring","IdleTimeout","_options","delay","pollDelay","keepAliveEvents","_done","_resetPoll","_timer","timeLeft","duration","_pollHandler","_dispatchEvent","cancel","_eventHandler","resetTimer","_element","_initEventListeners","eventName","_destroyEventListeners","removeEventListener","CustomEvent","bubbles","cancelable","detail","_startTime","now","isDebug","debugMode","isPublic","Globals","isAuthenticated","isRegistration","pathname","includes","isAuthentication","pingUrl","logoutUrl","isMobileUrl","isNativeTablet","isNativeTabletApplication","isNative","isNativeApplication","setInterval","credentials","catch","localizedSessionDialog","sessionBodyMarkup","stillHereButtonText","logoutButtonText","modalTitleText","dataset","bodyContent","sessionModalTitle","sessionPrompt","logout","clearInterval","sessionDialogCountdown","idleTimeout","idleElement","idleLogoutMinutes","counter","sessionTimeoutCountdownElement","updateCountdown","delayWindowMS","currentIdleWindowMS","startTime","ceil","primaryWidgetOuterElement","widgetOverlayElement","createElement","loadingElement","script","getElementsByTagName","localeHasChanged","WidgetHeader","resetHeaderInfoStorage","overflowX","overlayElement","visibility","allInputElements","inputElement","breakElement","numberTextFieldElements","MINUS","DASH","postLinkHandler","passiveEventListener","Form","ui","progressbar","min","flashHolderElements","message","hasError","hasInfo","hasSecurity","showInfo","showMessage","infoPopupElement","contentSelector","popupContentSectionElement","firstChild","modal","Constructor","DEFAULTS","backdrop","clearableInputElements","BrowserSupportPromise","openBrowserSupport","oldHash","Cdn","scriptWithCacheExpiration","BrowserSupport","displaySupportInfo","wrapperElement","clearInputElement","parentNode","insertBefore","targetId","accessCodeElement","slideToggle","BrowserInfo","oldURL","ArticlesComponent","articles","loadingContentElement","noContentMessageElement","articlesElement","buttonElement","buttonTitle","article","displayName","excerpt","getEducationalArticles","currentWidget","currentWidgetName","dataType","ContentImpressions","DisplayName","Excerpt","getNewsArticles","Content","initArticlesComponent","getter","articlesComponent","getterPromise","Iris","PopoverComponent","refresh","initArticleAction","li","buttonOptions","oldButton","popover","buttonAttributes","data-popover","data-placement","data-static-placement","data-indicator","aria-label","actionItem","ActionButtonItem","relatedContentPromise","widgetHeaderInitPromise","header","relatedContent","actionBar","actions","educationLI","newsLI","helpLI","helpLink","containerId","iconName","initHelpArticlesAction","promoContainerElement","hasAttribute","contentUrl","contentId","promo","excerptData","contentName","refreshPromoUI","widgetsWithSystemAlerts","metaHeaderElement","systemAlertCapable","widgetName","alert","systemAlertElement","fakeButton","systemAlertTemplate","anchorElement","refreshSystemAlertUI","PasswordTogglefication","newOptions","tagName","defaultOptions","inputType","wrapperElementType","toggleButtonElement","wrapperClass","toggleButtonClass","togglePassword","passwordOnBlur","TYPES","PASSWORD","setType","startState","toggledType","VISIBLE","toggleCallback","isPassword","fromClass","typeVisibleClass","typePasswordClass","toClass","toggleButtonPasswordContent","toggleButtonVisibleContent","ko","bindingHandlers","passwordTogglefication","valueAccessor","unwrap","RegionSettings","iris","region","calendar.dayofweekabbr.sunday","calendar.dayofweekabbr.monday","calendar.dayofweekabbr.tuesday","calendar.dayofweekabbr.wednesday","calendar.dayofweekabbr.thursday","calendar.dayofweekabbr.friday","calendar.dayofweekabbr.saturday","calendar.month.january","calendar.month.february","calendar.month.march","calendar.month.april","calendar.month.may","calendar.month.june","calendar.month.july","calendar.month.august","calendar.month.september","calendar.month.october","calendar.month.november","calendar.month.december","calendar.monthabbr.january","calendar.monthabbr.february","calendar.monthabbr.march","calendar.monthabbr.april","calendar.monthabbr.may","calendar.monthabbr.june","calendar.monthabbr.july","calendar.monthabbr.august","calendar.monthabbr.september","calendar.monthabbr.october","calendar.monthabbr.november","calendar.monthabbr.december","contentheader.item.ascendinglabel","contentheader.item.descendinglabel","contentheader.item.neutrallabel","contentheader.item.ascendingdirections","contentheader.item.descendingdirections","dropdown.sr.focused","dropdown.sr.selected","dropdown.sr.unselected","dropdown.sr.active","dropdown.sr.disabled","dropdown.multiselect.selected","list.sr.active","list.sr.disabled","list.sr.selected","list.sr.unselected","tab.sr.selected","regions","defaultRegionId","FeatureDetection","features","detectFeatures","clearAttributes","tuple","removeAttribute","refreshAttributes","hasNativeMenu","hasNativePinSupport","isAndroidBrowser","isIOSBrowser","isIPadBrowser"],"mappings":"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","file":"globals.bundle.min.js","sourcesContent":["i18n = {\r\n \"Password_InvalidFormat\": \"The password must contain a minimum of one lowercase letter, one uppercase letter and one number.\",\r\n \"Username_NoSpecialCharacters\": \"Username can contain letters, numbers, periods and underscores.\",\r\n \"SecurityQuestion_AuthInstructions\": \"Please answer the following security questions to confirm your changes\",\r\n \"Field_Required\": \"This field is required.\",\r\n \"PasswordConfirmation_NoMatch\": \"Please make sure your password confirmation matches.\"\r\n};","\"use strict\";\n// INTERNATIONALIZATION\nwindow._ = (key) => {\n if (typeof (i18n) != 'undefined' && i18n[key]) {\n return i18n[key];\n }\n throw (key + \" is undefined!\");\n};\n\n\n","$.datepicker.setDefaults({\r\n dateFormat: 'mm/dd/yy',\r\n beforeShowDay: function(date) {\r\n var day = date.getDay(),\r\n formattedDate = Alkami.Utils.DateHelper.getIsoDate(date),\r\n isWeekend = $.inArray(day, [0, 6]) > -1,\r\n isHoliday = $.inArray(formattedDate, window.BANK_HOLIDAYS || []) > -1;\r\n\r\n if (isHoliday) {\r\n return [false, 'ui-holiday'];\r\n } else if (isWeekend) {\r\n return [false, ''];\r\n } else {\r\n return [true, ''];\r\n }\r\n },\r\n minDate: $.TODAY,\r\n showOtherMonths: true,\r\n selectOtherMonths: true,\r\n buttonImage: '/images/calendar.png',\r\n buttonText: 'Choose a date',\r\n buttonImageOnly: true,\r\n showOn: 'button',\r\n\r\n monthNames: [\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.January\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.February\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.March\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.April\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.May\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.June\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.July\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.August\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.September\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.October\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.November\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Full.December\"]\r\n ],\r\n monthNamesShort: [\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.January\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.February\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.March\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.April\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.May\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.June\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.July\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.August\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.September\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.October\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.November\"],\r\n Alkami.Localization.SiteText[\"jQuery.Month.Abbr.December\"]\r\n ],\r\n dayNames: [\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Sunday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Monday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Tuesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Wednesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Thursday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Friday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Full.Saturday\"]\r\n ],\r\n dayNamesShort: [\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Sunday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Monday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Tuesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Wednesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Thursday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Friday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.Abbr.Saturday\"]\r\n ],\r\n dayNamesMin: [\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Sunday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Monday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Tuesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Wednesday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Thursday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Friday\"],\r\n Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Saturday\"]\r\n ]\r\n});\r\n\r\n$.validator.addMethod(\"greaterThanOrEqualTo\", function(value, element, expression) {\r\n return (this.optional(element) && value == '') || ($(expression).val() >= value);\r\n}, \"Value must be greater than specified.\");\r\n\r\n$.validator.addMethod(\"regex\", function(value, element, regexp) {\r\n if (regexp.constructor != RegExp)\r\n regexp = new RegExp(regexp);\r\n else if (regexp.global)\r\n regexp.lastIndex = 0;\r\n return this.optional(element) || regexp.test(value);\r\n}, \"Please check your input.\");\r\n\r\n$.validator.addMethod(\"noSpecialChars\", function(value, element) {\r\n return this.optional(element) || value.match(/^[A-Za-z\\d\\s]+$/);\r\n}, \"Please remove any special characters.\");\r\n\r\n$.validator.addMethod(\"futureDate\", function(value, element, params) {\r\n const date = parseDate(value, 'mm/dd/yyyy');\r\n const yesterday = Alkami.Utils.DateHelper.addMilliseconds(Alkami.Utils.DateHelper.today(), -1);\r\n return this.optional(element) || date > yesterday;\r\n}, \"Date can't be in the past.\");\r\n\r\n$.validator.addMethod(\"notEqualTo\", function(value, element, params) {\r\n return this.optional(element) || ($(params).val() != value);\r\n}, \"cannot be equal\");\r\n\r\n// TODO : this rule has a very generic name and a very specific implementation,\r\n// either change the name or make it accept various types of requirements. -jw : 06-06-2012\r\n$.validator.addMethod(\"extComboRequired\", function(val, el) {\r\n if (val !== \"\") {\r\n $(el).closest(\".category\").removeClass(\"field_with_errors\");\r\n return true;\r\n } else {\r\n $(el).closest(\".category\").addClass(\"field_with_errors\");\r\n return false;\r\n }\r\n}, \"A category selection is required.\");\r\n\r\njQuery.validator.addMethod(\"number\", function(a, b) {\r\n return this.optional(b) || /^-?\\$?\\.?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(a);\r\n}, \"Please enter a valid number\");\r\n\r\njQuery.validator.addMethod(\"phoneUS\", function(phone_number, element) {\r\n phone_number = phone_number.replace(/\\s+/g, \"\");\r\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}$/);\r\n}, \"Please specify a valid phone number\");\r\n\r\n$.validator.setDefaults({\r\n highlight: function(element, errorClass) {\r\n $(element).closest('.field').addErrors();\r\n },\r\n unhighlight: function(element, errorClass) {\r\n $(element).closest('.field').removeErrors();\r\n },\r\n ignore: \".ignore\",\r\n errorPlacement: function() {}, // don't put error labels anywhere in the form.\r\n showErrors: function(errorMap, errorList) {\r\n var $form = $('#' + this.currentForm.id);\r\n if (errorList && errorList.length) {\r\n displayErrorContainerForForm($form);\r\n var errors = [],\r\n messages = [];\r\n // prevent dups.\r\n $.each(errorMap, function(i, n) {\r\n if (errors.indexOf(n) > -1) return true; // continue..\r\n errors.push(n);\r\n messages.push('
  • ' + n + '
  • ');\r\n });\r\n if (messages.length) {\r\n $form.find('.errors ul').html(messages.join(''));\r\n }\r\n }\r\n this.defaultShowErrors();\r\n },\r\n onkeyup: false,\r\n focusInvalid: false\r\n});\r\n\r\n\r\n$.extend({\r\n TODAY: Alkami.Utils.DateHelper.today(),\r\n clearErrors: function() {\r\n $('.field_with_errors').removeErrors();\r\n },\r\n isJSON: function(json) {\r\n json = json.replace(/\\\\[\"\\\\\\/bfnrtu]/g, '@');\r\n json = json.replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']');\r\n json = json.replace(/(?:^|:|,)(?:\\s*\\[)+/g, '');\r\n return (/^[\\],:{}\\s]*$/.test(json));\r\n },\r\n dateRangePresets: {\r\n future: [\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.Today\"], dateStart: 'today', dateEnd: 'today' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.NextThirty\"], dateStart: 'today', dateEnd: 'today+30days' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.NextSixty\"], dateStart: 'today', dateEnd: 'today+60days' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.NextNinety\"], dateStart: 'today', dateEnd: 'today+90days' }\r\n ],\r\n past: [\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.Today\"], dateStart: 'today', dateEnd: 'today' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.LastThirty\"], dateStart: 'today-30days', dateEnd: 'today' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.LastSixty\"], dateStart: 'today-60days', dateEnd: 'today' },\r\n { text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.LastNinety\"], dateStart: 'today-90days', dateEnd: 'today' },\r\n {\r\n text: Alkami.Localization.SiteText[\"jQuery.DateRangePicker.Options.YearToDate\"],\r\n dateStart: function() {\r\n var x = Alkami.Utils.DateHelper.today();\r\n x.setMonth(0);\r\n x.setDate(1);\r\n return x;\r\n },\r\n dateEnd: 'today'\r\n }\r\n ]\r\n }\r\n});\r\n\r\n(function($) {\r\n $.expr.pseudos.Contains = function(a, i, m) {\r\n return (a.textContent || a.innerText || \"\").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;\r\n };\r\n\r\n $.fn.extend({\r\n disableSubmit: function(disabledText) {\r\n return this.each(function() {\r\n var submit = $(':submit', this);\r\n if (!disabledText)\r\n disabledText = submit.val();\r\n\r\n submit.data('original-value', submit.val());\r\n submit.attr('disabled', 'disabled').val(disabledText).css({ opacity: .5 });\r\n });\r\n },\r\n enableSubmit: function() {\r\n return this.each(function() {\r\n var submit = $(':submit', this);\r\n submit.removeAttr('disabled', 'disabled').css({ opacity: 1 });\r\n if (submit.data('original-value'))\r\n submit.val(submit.data('original-value'));\r\n });\r\n },\r\n showFlash: function(config) {\r\n return this.each(function() {\r\n Alkami.FlashBanner.flashBanner($(this)[0], config);\r\n });\r\n },\r\n swapStylesheet: function(url) {\r\n var newcss;\r\n newcss = $(this).attr('href', url);\r\n return newcss;\r\n },\r\n ajaxFileUpload: function(opts) {\r\n var defaults = {\r\n url: \"/Image/PreviewImage\",\r\n success: function() { return; } // NOOP function\r\n };\r\n\r\n opts = Object.assign(defaults, opts);\r\n\r\n return this.each(function() {\r\n var $field = $(this),\r\n $form = $field.closest('form');\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: opts.url,\r\n data: new FormData($form[0]),\r\n contentType: false,\r\n processData: false,\r\n success: function(data, status, xhr) { return opts.success(xhr); }\r\n });\r\n });\r\n },\r\n multiFileUpload: function(opts) {\r\n var rx = /(ade|adp|app|bas|bat|chm|cmd|cpl|crt|csh|exe|fxp|hlp|hta|inf|ins|isp|js|jse|ksh|Lnk|mda|mdb|mde|mdt|mdt|mdw|mdz|msc|msi|msp|mst|ops|pcd|pif|prf|prg|pst|reg|scf|scr|sct|shb|shs|url|vb|vbe|vbs|wsc|wsf|wsh)/gi;\r\n var fileCount = 0;\r\n\r\n return this.each(function() {\r\n var $this = $(this);\r\n $this.wrap('
    ');\r\n var list = $('
    ');\r\n var wrapper = $('#' + this.id + '_wrap');\r\n wrapper.prepend(list);\r\n\r\n $this.filestyle(opts.filestyleOpts);\r\n\r\n var files = [];\r\n\r\n $this.data('wrapper', wrapper);\r\n\r\n $this.change(function() {\r\n var $this = $(this);\r\n console.log('file has been selected');\r\n var fileName = this.value.replace(\"C:\\\\fakepath\\\\\", \"\"),\r\n ext = fileName.substr(fileName.lastIndexOf('.'));\r\n\r\n // check extension\r\n if (rx.test(ext)) {\r\n // file type not allowed\r\n Alkami.FlashBanner.showError('Files of type ' + ext + ' are not allowed. Please try again.');\r\n return false;\r\n }\r\n\r\n if (files.length && (files.indexOf(fileName) > -1)) {\r\n Alkami.FlashBanner.showError('The selected file has already been attached. Please select a different file.');\r\n return false;\r\n }\r\n\r\n var fail = opts.onUploadFail || function() {};\r\n\r\n // do upload if OK\r\n $this.ajaxFileUpload({\r\n url: opts.uploadUrl,\r\n success: function(response, options) {\r\n var text = response.responseText;\r\n\r\n // why use a string and test it with a regex if something failed? #dailywtf\r\n // leaving this condition for reverse compat, the server should return an object with a \"success\" prop\r\n // - JR 09.12.12\r\n\r\n // text will be blank in the case of 500 error, otherwise if it contains the term \"Error\"\r\n if (!text.length || /Server Error/.test(text)) {\r\n fail(text);\r\n return false;\r\n }\r\n\r\n var res = JSON.parse(text);\r\n if (res.upgrade) { // modal result here, it would have skipped the obove error block\r\n if (!res.success) { // did it fail\r\n fail(res.flash, true);\r\n return false;\r\n } else {\r\n res = res.result;\r\n }\r\n }\r\n\r\n res.fileSize = Math.round(res.fileSize / 1000) + 'KB';\r\n res.contentType = res.contentType.substr(res.contentType.lastIndexOf(\"/\") + 1);\r\n\r\n var $item = $('
    ' +\r\n '' +\r\n '' + res.fileName + '' +\r\n '' + res.fileSize + '' +\r\n 'Delete' +\r\n '
    ');\r\n\r\n $item.appendTo(list).find('.remove').on('click', function(e) {\r\n e.preventDefault();\r\n // remove from list, remove from 'files', remove last input field.\r\n $item.remove();\r\n var idx = files.indexOf(res.fileName);\r\n if (idx != -1) { files.splice(idx, 1); }\r\n var toRemove = wrapper.find('input[type=file]').last().closest('div');\r\n toRemove.prev('input').remove();\r\n toRemove.remove();\r\n wrapper.find('input[type=file]').last().closest('div').show();\r\n fileCount--;\r\n });\r\n\r\n var $clone = $this.clone(true);\r\n $this.closest('div').hide();\r\n\r\n wrapper.append($clone);\r\n\r\n $clone.filestyle(opts.filestyleOpts);\r\n\r\n if (++fileCount == opts.max) {\r\n $clone.attr('disabled', 'disabled').css({ cursor: 'default' }).closest('div').addClass('disabled').css({ opacity: 0.5 });\r\n }\r\n\r\n files.push(res.fileName);\r\n\r\n\r\n }\r\n });\r\n });\r\n });\r\n },\r\n bindDateRangePicker: function(opts, future) {\r\n var $field = $(this);\r\n\r\n // Check to see if this control has already been bound.\r\n if (typeof $field.data(\"dateRangePicker\") !== 'undefined')\r\n return;\r\n\r\n $field.data(\"dateRangePicker\", true);\r\n\r\n // Just remove existing date range pickers, as they cannot be destroyed properly.\r\n $('.ui-daterangepicker').remove();\r\n\r\n var presets = $.dateRangePresets[future ? 'future' : 'past'];\r\n\r\n var settings = {\r\n datepickerOptions: {\r\n showOtherMonths: true,\r\n selectOtherMonths: true\r\n },\r\n doneButtonText: '' + Alkami.Localization.SiteText[\"jQuery.DatePicker.DoneButton\"] + '',\r\n presetRanges: presets\r\n };\r\n\r\n if (opts.startField && opts.endField) {\r\n settings.onChange = function() {\r\n opts.startField.val($.datepicker.formatDate('yy-mm-dd', $('.ui-daterangepicker').find('.range-start').datepicker('getDate')));\r\n opts.endField.val($.datepicker.formatDate('yy-mm-dd', $('.ui-daterangepicker').find('.range-end').datepicker('getDate')));\r\n opts.startField.trigger('change');\r\n opts.endField.trigger('change');\r\n };\r\n\r\n // when the user manually enters a date, make sure the attached hidden fields get updated as well.\r\n $field.off('blur.dateRangePicker').on('blur.dateRangePicker', function(e) {\r\n var dateRange = $(this).val(),\r\n matches = dateRange.split('-'),\r\n startDate,\r\n endDate;\r\n\r\n try {\r\n startDate = $.datepicker.parseDate('mm/dd/yy', $.trim(matches[0]));\r\n\r\n if (matches.length === 1) {\r\n // if only one date in the field (i.e. not a range), set it to both start and end\r\n endDate = $.datepicker.parseDate('mm/dd/yy', $.trim(matches[0]));\r\n } else {\r\n // otherwise set the end to the one in the range\r\n endDate = $.datepicker.parseDate('mm/dd/yy', $.trim(matches[1]));\r\n }\r\n if (startDate && endDate && !(endDate >= startDate)) {\r\n // invalidate();\r\n return;\r\n }\r\n opts.startField.val($.datepicker.formatDate('yy-mm-dd', startDate));\r\n opts.endField.val($.datepicker.formatDate('yy-mm-dd', endDate));\r\n } catch (e) {\r\n // invalidate();\r\n }\r\n });\r\n }\r\n\r\n $.extend(settings, opts);\r\n\r\n if (!future) {\r\n var dateArray = new String('2006-01-01').split('-');\r\n var minDateObject = new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);\r\n // Allows the user to provide a custom minDate, without it being overwritten by the minDateObject.\r\n settings.datepickerOptions.minDate = settings.datepickerOptions.minDate || minDateObject;\r\n // Allows the user to provide a custom maxDate, without it being overwritten by the $.TODAY.\r\n settings.datepickerOptions.maxDate = settings.datepickerOptions.maxDate || $.TODAY;\r\n }\r\n $field.daterangepicker(settings);\r\n },\r\n calendars: function(opts) {\r\n // Set default css class to look for list items in.\r\n var className = \"list-item\";\r\n\r\n if (opts && opts.cssClass) {\r\n className = opts.cssClass;\r\n }\r\n\r\n $(document).on('click', function(event) {\r\n // if they click on any exceptions, allow it to be selected.\r\n if ($(event.target).hasClass('list-item') || $(event.target).hasClass('event') || $(event.target).closest('.list-item').length || $(event.target).closest('.event').length)\r\n return;\r\n\r\n // otherwise they clicked somewhere else on the page, remove the selection.\r\n $('.day.event.selected-day').removeClass('selected-day');\r\n $('.' + className + '.selected').removeClass('selected');\r\n });\r\n\r\n // When a user clicks a day, select it and the item in the list\r\n $(document).on('click', '.day.event', function(e) {\r\n $('.list .' + className + '.selected').removeClass('selected');\r\n $('.day.event.selected-day').removeClass('selected-day');\r\n\r\n $(this).addClass('selected-day');\r\n $.each($(this).attr('class').split(\" \"), function(n, i) {\r\n $('.' + className + '' + '#' + i).addClass('selected');\r\n });\r\n\r\n return false;\r\n });\r\n\r\n // When a user clicks an item in the list, select it and select the days in the calendar\r\n $(document).on('click', '.list .' + className, function(e) {\r\n $('.list .' + className + '.selected').removeClass('selected');\r\n $('.day.event.selected-day').removeClass('selected-day');\r\n\r\n $(this).addClass('selected').removeAttr('style');\r\n $('#calendars .day.' + $(this).attr('id')).addClass('selected-day');\r\n\r\n return false;\r\n });\r\n },\r\n addErrors: function() {\r\n this.addClass('field_with_errors');\r\n },\r\n removeErrors: function() {\r\n this.removeClass('field_with_errors');\r\n },\r\n hasErrors: function() {\r\n return this.hasClass('field_with_errors');\r\n },\r\n serializeHash: function(opts) {\r\n var p = {},\r\n opts = opts || {};\r\n var a = this.serializeArray(opts);\r\n $.each(a, function(i, n) {\r\n p[n.name] = n.value;\r\n });\r\n return p;\r\n },\r\n\r\n instructify: function() {\r\n return this.each(function() {\r\n var promptComponent;\r\n var $c = $(this);\r\n\r\n $c.on('click', function(e) {\r\n e.preventDefault();\r\n\r\n var $contentElement = $('
    ').html('
    Loading...
    ');\r\n $.get($c.attr('href'), function(data) {\r\n\r\n $contentElement.html(data);\r\n if (!$('#modal_sidenav').length) {\r\n return this;\r\n }\r\n\r\n var $parent = $('.tab-panel-container');\r\n $parent.find('.panel').hide();\r\n\r\n $('#modal_sidenav .list-item').on('click', function() {\r\n if ($(this).hasClass('current')) {\r\n return false;\r\n } else {\r\n var $currLink = $(this);\r\n var $active = $parent.find('.panel.active');\r\n $('#modal_sidenav .list-item.current').removeClass('current');\r\n $currLink.addClass('current');\r\n\r\n if ($active.length) {\r\n $active.hide(0).removeClass('active');\r\n }\r\n $('.panel' + $currLink.attr('href')).show().addClass('active');\r\n\r\n return false;\r\n }\r\n });\r\n\r\n $('#modal_sidenav ul li:first-child a').trigger('click');\r\n });\r\n\r\n promptComponent = Alkami.Helpers.createCloseDialog($contentElement[0], { title: $c.text() || 'Help', cls: 'instructions', destroyOnClose: true });\r\n promptComponent.open = true;\r\n });\r\n });\r\n },\r\n toolTip: function(options) {\r\n // Default options.\r\n var defaults = {\r\n useTitle: false,\r\n tipCss: null,\r\n autoCleanup: true,\r\n selector: null\r\n };\r\n\r\n // Settings object we can extend if necessary.\r\n var settings = $.extend(defaults, options);\r\n if (!settings.selector && this.length === 0) { return; }\r\n\r\n // Set the tooltip text from the title attribute.\r\n function setTooltipText($thisEl) {\r\n var tooltipText;\r\n\r\n if (settings.useTitle) {\r\n // If the title attibute is empty (assuming we have grabbed it already).\r\n if ($thisEl.attr('title') !== '') {\r\n tooltipText = $thisEl.attr('title');\r\n\r\n $thisEl.data('title', tooltipText);\r\n $thisEl.attr('title', '');\r\n } else {\r\n tooltipText = $thisEl.data('title');\r\n }\r\n } else {\r\n var $tipContainer = $thisEl.find('.tip');\r\n\r\n if (!$tipContainer.length)\r\n $tipContainer = $('#' + $thisEl.attr('rel'));\r\n\r\n tooltipText = $tipContainer.html();\r\n }\r\n\r\n return tooltipText;\r\n }\r\n\r\n function removeTooltipHtml(wrapper) {\r\n wrapper.fadeOut(300, function() {\r\n wrapper.remove();\r\n });\r\n }\r\n\r\n function mouseenterHandler(event) {\r\n var $this = $(this);\r\n\r\n // Various tooltip settings. Always prioritize the data attributes over the setting object.\r\n var tipPositionAt = $this.data('tippositionat');\r\n var autoCleanup = typeof $this.data('auto-cleanup') !== 'undefined' ? $this.data('auto-cleanup') : settings.autoCleanup;\r\n var keepState = $this.data('keep-state');\r\n\r\n // Tooltip markup variables.\r\n var wrapper = null;\r\n var container = null;\r\n\r\n // Timeout instance ID's for cleanup purposes.\r\n var autoRemovalTimeout = null;\r\n var creationDebounce = null;\r\n\r\n // On a mouseenter event kick off the function to create the tooltip.\r\n // This is a setTimeout function so that you can't hover over multiple tooltips in short succession.\r\n creationDebounce = setTimeout(function() {\r\n var tooltip = setTooltipText($this);\r\n\r\n if ($this.data('tooltipElement')) {\r\n if (tooltip != '')\r\n $this.data('tooltipElement').find('.tooltip-content').html(tooltip);\r\n\r\n $this.data('tooltipElement').hide().fadeIn(300);\r\n } else {\r\n wrapper = $('
    ');\r\n container = $('
    ');\r\n var content = $('
    ');\r\n\r\n if ($this.data('tipclass'))\r\n content.addClass($this.data('tipclass'));\r\n\r\n if (settings.tipCss) {\r\n content.css(settings.tipCss);\r\n }\r\n\r\n wrapper.append(container.append(content));\r\n $('body').append(wrapper);\r\n\r\n content.append(tooltip);\r\n wrapper.hide().fadeIn(300);\r\n\r\n wrapper.position({\r\n my: 'center top',\r\n at: tipPositionAt || 'center bottom',\r\n collision: \"none none\",\r\n offset: '0 0',\r\n of: $this\r\n });\r\n\r\n $this.data('tooltipElement', wrapper);\r\n }\r\n }, 50);\r\n\r\n // Also create the mouseleave event on the same element we just entered.\r\n $this.on('mouseleave', function() {\r\n wrapper = $this.data('tooltipElement');\r\n related = event.relatedTarget || event.toElement;\r\n\r\n // If we are here make sure we don't need to clear a creation start event.\r\n if (typeof creationDebounce === 'number')\r\n window.clearTimeout(creationDebounce);\r\n\r\n if (wrapper) {\r\n if (keepState === false) {\r\n $this.removeData('tooltipElement');\r\n removeTooltipHtml(wrapper);\r\n\r\n } else if (related && related != wrapper[0]) {\r\n wrapper.fadeOut(300);\r\n }\r\n\r\n // Make sure we clear out the timeout if the mouseleave event is fired.\r\n if (typeof autoRemovalTimeout === 'number')\r\n window.clearTimeout(autoRemovalTimeout);\r\n\r\n // Now that we have cleaned up, dispose of the event handler.\r\n $this.off('mouseleave');\r\n }\r\n });\r\n\r\n // If this is active, we will automatically remove the tooltip after 4 seconds.\r\n if (autoCleanup) {\r\n // Set a variable to the returned timeout ID so we can clear it later if necessary.\r\n autoRemovalTimeout = setTimeout(function() {\r\n wrapper = $this.data('tooltipElement');\r\n related = event.relatedTarget || event.toElement;\r\n\r\n if (wrapper) {\r\n if (keepState === false) {\r\n $this.removeData('tooltipElement');\r\n removeTooltipHtml(wrapper);\r\n\r\n } else if (related && related != wrapper[0]) {\r\n wrapper.fadeOut(300);\r\n }\r\n }\r\n }, 4000);\r\n }\r\n }\r\n\r\n if (settings.selector) {\r\n $(document).on('mouseenter', settings.selector, mouseenterHandler);\r\n } else {\r\n this.on('mouseenter', mouseenterHandler);\r\n }\r\n\r\n console.warn('$.fn.toolTip is deprecated. Please use Iris Tooltips instead.');\r\n return this;\r\n },\r\n contentSlider: function(options) {\r\n var defaults = {\r\n slideTrigger: '.slide-trigger',\r\n expandBtn: '.expand',\r\n expandBtnTxt: 'Show Search',\r\n collapseBtn: '.collapse',\r\n collapseBtnTxt: 'Hide Search',\r\n slideContent: '.slide-content',\r\n collapsedByDefault: true\r\n };\r\n var settings = $.extend(defaults, options);\r\n\r\n if (this.length > 0) {\r\n console.warn('$.fn.contentSlider is deprecated. Please use Iris Collapsable instead.')\r\n }\r\n return this.each(function() {\r\n\r\n if (settings.collapsedByDefault === true) {\r\n $(settings.slideContent).hide();\r\n $(settings.slideTrigger).removeClass('collapse').addClass('expand').find('span').text(settings.expandBtnTxt);\r\n } else {\r\n $(settings.slideTrigger).removeClass('expand').addClass('collapse').find('span').text(settings.collapseBtnTxt);\r\n }\r\n\r\n $(settings.slideTrigger).on('click', function() {\r\n if ($(settings.slideTrigger).hasClass('expand')) {\r\n $(settings.slideContent).slideDown(function() { $(settings.slideTrigger).removeClass('expand').addClass('collapse').find('span').text(settings.collapseBtnTxt) });\r\n } else {\r\n $(settings.slideContent).slideUp(function() { $(settings.slideTrigger).removeClass('collapse').addClass('expand').find('span').text(settings.expandBtnTxt) });\r\n }\r\n return false;\r\n });\r\n });\r\n },\r\n ajaxFilters: function(options) {\r\n return this.each(function() {\r\n var $form = $(this);\r\n\r\n // do anything you need before the rest of the form is initialized.\r\n if (options.prepare) {\r\n options.prepare.call();\r\n }\r\n\r\n $form.data('selects', []);\r\n\r\n // DEV-3839 - stopTransform is a custom option that will prevent ExtJS from transforming the select fields in a given form.\r\n if (!options.stopTransform) {\r\n $form.find('select').each(function() {\r\n var value = getUrlParam(this.name);\r\n var t = transformSelect(this.id, { value: value });\r\n $form.data('selects').push(t);\r\n });\r\n }\r\n\r\n $form.submit(function(e) {\r\n e.preventDefault(); // don't submit the form by traditional means.\r\n\r\n if (options.submit) {\r\n options.submit.call(e, $form);\r\n }\r\n // update dom with simple 'get' request with form data, will do a simple replace on the element with id passed to options.update\r\n else if (options.update) {\r\n $.get($form.attr('action'), $form.serialize(), function(data) {\r\n $('#' + options.update).fadeOut('normal', function() {\r\n $('#' + options.update).replaceWith(data);\r\n });\r\n }, 'html');\r\n }\r\n });\r\n $form.find(':reset').on('click', function(e) {\r\n $.each($form.data('selects'), function(i, n) {\r\n n.reset();\r\n });\r\n if (options.reset) {\r\n options.reset.call();\r\n } else if (options.update) {\r\n $.get($form.attr('action'), null, function(data) {\r\n $('#' + options.update).fadeOut('normal', function() {\r\n $('#' + options.update).replaceWith(data);\r\n });\r\n }, 'html');\r\n }\r\n //Add preventDefault to prevent browser clear the default value of form fields\r\n e.preventDefault();\r\n });\r\n });\r\n }\r\n });\r\n\r\n $.fn.prompt = (function() {\r\n var prompt = function(el, opts) {\r\n this.el = $(el);\r\n this.opts = $.extend({}, this.defaults, opts);\r\n };\r\n\r\n prompt.prototype = {\r\n defaults: {\r\n tpl: '
    ',\r\n cb: function(confirmed, e) {}\r\n },\r\n init: function() {\r\n this.create();\r\n this.bind();\r\n this.position();\r\n },\r\n bind: function() {\r\n var self = this;\r\n this.markup.click(false) /*<- can someone tell me what this does?*/ .find('input[type=\"button\"]').on('click', function(e) {\r\n if (self.opts.cb) {\r\n var r = self.opts.cb.call(self, $(e.target).hasClass('yes'), e);\r\n if (r === true || r === undefined) self.close(e);\r\n } else self.close(e);\r\n });\r\n $(document).on('click.prompt', $.proxy(self.close, self));\r\n },\r\n close: function(e) {\r\n if (this.opts.close) {\r\n this.opts.close.apply(this, arguments);\r\n }\r\n if (!e.isPropagationStopped()) {\r\n $(document).unbind('click.prompt', this.close);\r\n this.markup.remove();\r\n }\r\n },\r\n create: function() {\r\n this.markup = $('
    ')\r\n .append(this.opts.tpl)\r\n .find('span.message')\r\n .html(this.opts.text)\r\n .end()\r\n .css('visibility', 'hidden')\r\n .prependTo('body');\r\n },\r\n position: function() {\r\n var pos = this.el.offset(),\r\n h = this.el.height(),\r\n w = this.markup.width() || 200;\r\n this.markup.css({ top: pos.top + h + 5, left: pos.left - w });\r\n },\r\n open: function() {\r\n this.markup.hide().css('visibility', 'visible');\r\n this.markup.fadeIn(100, function() {\r\n $(this).find('input[type=\"button\"]:first').focus();\r\n });\r\n }\r\n };\r\n\r\n return function(opts) {\r\n console.warn('$.fn.prompt is deprecated. Please use Alkami.Helpers.createConfirmationDialog instead.')\r\n opts = opts || {};\r\n return this.on('click', opts.selector, function(e) {\r\n var p = new prompt(e.target, opts);\r\n p.init();\r\n p.open();\r\n return false;\r\n });\r\n };\r\n })();\r\n /// Desc: jquery extension to make a link do a POST request instead of GET\r\n /// Usage: $('a.post-link).postLink()'\r\n $.fn.postLink = (function() {\r\n var PostLink = function(el, opts) {\r\n $.extend(this, opts);\r\n this.el = $(el);\r\n this.init();\r\n };\r\n\r\n PostLink.prototype = {\r\n init: function() {\r\n var url = this.el.attr('href');\r\n this.parts = url.split('?');\r\n this.url = this.parts[0];\r\n this.params = this.parts.length > 1 ? plugin.parseQuery(this.parts[1]) : {};\r\n\r\n // bind the click\r\n if (!this.el.on)\r\n this.el.on('click', $.proxy(this.click, this));\r\n },\r\n // generage a post action for this link\r\n click: function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var form = $('
    ')\r\n .attr('action', this.url)\r\n .attr('method', 'POST');\r\n\r\n // if there are query string params\r\n for (var k in this.params) {\r\n $('').attr('name', k)\r\n .attr('value', this.params[k]).appendTo(form);\r\n }\r\n // go! no cleanup required this redirects the page\r\n form.appendTo(document.body).submit();\r\n return false;\r\n }\r\n };\r\n\r\n var plugin = function(opts) {\r\n console.warn('$.fn.postLink is deprecated. Please use Alkami.Helpers.Form.postLink in a click handler.')\r\n if (opts.on) {\r\n var selector = opts.selector || 'a.post-link';\r\n $(document).on('click', selector, function(e) {\r\n var el = $(this);\r\n var instance = el.data('postLink');\r\n if (!instance) {\r\n instance = new PostLink(this, opts);\r\n }\r\n instance.on('click', e);\r\n return false;\r\n });\r\n return this;\r\n } else {\r\n return this.each(function() {\r\n if (!$(this).data('postLink'))\r\n $(this).data('postLink', new PostLink(this, opts));\r\n });\r\n }\r\n };\r\n\r\n // static function for sharing out the parse querystring\r\n // decode URL into object hash\r\n plugin.parseQuery = function(q) {\r\n console.warn('$.fn.postLink.parseQuery is deprecated. Please use URLSearchParms instead.');\r\n const params = new URLSearchParams(q);\r\n const result = {};\r\n\r\n params.forEach(function(value, key) {\r\n result[key] = value;\r\n });\r\n };\r\n\r\n return plugin;\r\n })();\r\n\r\n\r\n // https://gist.github.com/1572512\r\n // supports checkboxes with serialize jquery function\r\n $.fn.serialize = function(options) {\r\n return $.param(this.serializeArray(options));\r\n };\r\n\r\n $.fn.serializeArray = function(options) {\r\n var o = $.extend({\r\n checkboxesAsBools: false\r\n }, options || {});\r\n\r\n var rselectTextarea = /select|textarea/i;\r\n var rinput = /text|hidden|password|search/i;\r\n\r\n return this.map(function() {\r\n return this.elements ? $.makeArray(this.elements) : this;\r\n })\r\n .filter(function() {\r\n return this.name && !this.disabled &&\r\n (this.checked ||\r\n (o.checkboxesAsBools && this.type === 'checkbox') ||\r\n rselectTextarea.test(this.nodeName) ||\r\n rinput.test(this.type));\r\n }).map(function(i, elem) {\r\n var val = $(this).val();\r\n return val == null ?\r\n null :\r\n $.isArray(val) ?\r\n $.map(val, function(val, i) {\r\n return { name: elem.name, value: val };\r\n }) : {\r\n name: elem.name,\r\n value: (o.checkboxesAsBools && this.type === 'checkbox') ? //moar ternaries!\r\n (this.checked ? 'true' : 'false') : val\r\n };\r\n }).get();\r\n };\r\n\r\n})(jQuery);\r\n\r\n\r\n\r\n\r\n\r\n","\"use strict\";\nif (!String.format) {\n String.format = function () {\n console.warn('String.format is an unsafe extension to String. Please use Alkami.Utils.StringHelper.format instead.');\n return Alkami.Utils.StringHelper.format.apply(null, arguments);\n };\n}\nif (!window.hasOwnProperty('POBoxRegexPattern')) {\n Object.defineProperty(window, 'POBoxRegexPattern', {\n get() {\n console.warn('POBoxRegexPattern is deprecated. Please use Alkami.Patterns.POBox instead.');\n return Alkami.Patterns.POBox;\n }\n });\n}\nclass HashTable {\n constructor(obj) {\n this.length = 0;\n this.items = {};\n console.warn('HashTable is deprecated. Please use Javascript Object API instead.');\n for (const p in obj) {\n if (obj.hasOwnProperty(p)) {\n this.items[p] = obj[p];\n this.length++;\n }\n }\n }\n clear() {\n this.items = {};\n this.length = 0;\n }\n each(fn) {\n Object.keys(this.items).forEach((k) => fn(k, this.items[k]));\n }\n hasItem(key) {\n return this.items.hasOwnProperty(key);\n }\n keys() {\n return Object.keys(this.items);\n }\n values() {\n return Object.keys(this.items).map((key) => this.items[key]);\n }\n setItem(key, value) {\n let previous;\n if (this.hasItem(key)) {\n previous = this.items[key];\n }\n else {\n this.length++;\n }\n this.items[key] = value;\n return previous;\n }\n removeItem(key) {\n if (this.hasItem(key)) {\n const previous = this.items[key];\n this.length--;\n delete this.items[key];\n return previous;\n }\n return undefined;\n }\n}\n\n\n","\"use strict\";\nObject.keys(Alkami.FlashBanner).forEach((key) => {\n const oldKey = key.replace('show', 'showFlash').replace('hide', 'hideFlash');\n window[oldKey] = function () {\n console.warn(`${oldKey} is deprecated. Please use Alkami.FlashBanner.${key} instead.`);\n return Alkami.FlashBanner[key].apply(null, arguments);\n };\n});\n\n\n","\"use strict\";\n/// \n// ReSharper disable once InconsistentNaming\nAlkami = Alkami || {};\nAlkami.Helpers = Alkami.Helpers || {};\n/**\n * Returns a query string containing the parameters for the given url\n * @param {string} url - The url for which to return the parameters string\n */\nAlkami.Helpers.getQueryStringFromUrl = function (url) {\n url.match(/\\?(.+)$/);\n const params = RegExp.$1;\n return params;\n};\n/**\n * Returns an object containing key value pairs of the parameters for the given url\n * @param {string} url - The url for which to return the parameters object\n */\nAlkami.Helpers.getQueryObjectFromUrl = function (url) {\n let params = Alkami.Helpers.getQueryStringFromUrl(url);\n params = params.split('&');\n const queryStringList = {};\n for (let i = 0; i < params.length; i++) {\n const tmp = params[i].split('=');\n queryStringList[tmp[0]] = decodeURI(tmp[1]);\n }\n return queryStringList;\n};\n/**\n * Returns the value for a specific parameter in the given url\n * @param {string} url - The url for which to find the given parameter name\n * @param {name} name - The name of the parameter for which to get the value out of the url\n */\nAlkami.Helpers.getUrlParamFromUrl = function (url, name) {\n name = name.replace(/[\\[]/, '\\\\\\[').replace(/[\\]]/, '\\\\\\]');\n const regexS = '[\\\\?&]' + name + '=([^&#]*)';\n const regex = new RegExp(regexS);\n const results = regex.exec(url);\n return results == null ? '' : results[1];\n};\nAlkami.Helpers.getQueryParams = function (returnObj) {\n console.warn('Alkami.Helpers.getQueryParams is deprecated. Please use URLSearchParams documentation: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams');\n const url = window.location.toString();\n if (returnObj) {\n return Alkami.Helpers.getQueryObjectFromUrl(url);\n }\n return Alkami.Helpers.getQueryStringFromUrl(url);\n};\nconst getUrlParam = (name) => {\n console.warn('window.getUrlParam is deprecated. Please use URLSearchParams documentation: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams');\n return Alkami.Helpers.getUrlParamFromUrl(window.location.hash, name);\n};\nconst parseDate = (input, format) => {\n console.warn('window.parseDate is deprecated. Please use Alkami.Utils.DateHelper.parseDate');\n return Alkami.Utils.DateHelper.parseDate(input, format);\n};\nfunction maskCard(cardNo) {\n const localCardNo = cardNo || null;\n if (localCardNo === null) {\n return cardNo;\n }\n function variableLength(_str, p1, p2, p3) {\n const replace = Array(p2.length + 1).join('X');\n return p1.concat(replace, p3);\n }\n return localCardNo.replace(new RegExp('(\\\\d{6})(\\\\d{3,6})(\\\\d{4})', 'g'), variableLength);\n}\n/********************\n* MONEY HELPERS\n* TODO: consolidate these methods\n* TODO: define consistent money Patterns\n**********************/\n/**\n * Returns a formatted dollar amount, including cents, based on a value provided, which can be a string, integer or float.\n * @param {string|integer|float} value - The value to format.\n * @param {boolean} allowZero - Whether or not a value of 0 should return a formatted amount ($0.00) or an empty string.\n */\nconst moneyRenderer = (amount, allowZero) => {\n console.warn('moneyRenderer is deprecated. Please use Alkami.CurrencyHelper.formatCurrency instead.');\n if (typeof allowZero === 'undefined') {\n allowZero = false;\n }\n // ReSharper disable once CoercedEqualsUsing\n if (!allowZero && (amount == '' || amount == null)) {\n return '';\n } /* use coercion!!! to avoid returning $0.00 on blank $$ fields */\n if (amount === '' || amount === null) {\n return '';\n }\n if (typeof amount === 'string') {\n amount = parseFloat(amount.replace(/[A-Za-z\\,\\$]/g, ''));\n }\n return amount.toLocaleString('en-US');\n};\nconst moneyRendererAllowZero = (v) => moneyRenderer(v, true);\nfunction localizeAmount(num) {\n console.warn('localizeAmount is deprecated. Please use Alkami.CurrencyHelper.formatCurrency instead.');\n if (typeof num === 'number') {\n const localNum = num.toFixed(2);\n return localNum;\n }\n return null;\n}\nfunction unlocalizeAmount(val) {\n console.warn('unlocalizeAmount has been deprecated. Please use Alkami.Utils.CurrencyHelper.parseCurrency instead.');\n val = val.replace(/(\\$|,)/g, '');\n if (parseFloat(val)) {\n return val;\n }\n return null;\n}\nfunction formatNumber(value) {\n console.warn('formatNumber is deprecated. Please use Alkami.CurrencyHelper.formatCurrency instead.');\n // if it is null, return 0\n if (value == null) {\n return '0.00';\n }\n if (typeof value === 'string') {\n value = unformatMoney(value);\n }\n if (isNaN(value)) {\n return '0.00';\n }\n return value.toFixed(2).replace(/(\\d)(?=(\\d{3})+\\.)/g, '$1,');\n}\nfunction formatMoney(value) {\n console.warn('formatMoney is deprecated. Please use Alkami.CurrencyHelper.formatCurrency instead.');\n const formattedAmount = formatNumber(value);\n if (value < 0) {\n return '($' + formattedAmount.replace('-', '') + ')';\n }\n return '$' + formattedAmount;\n}\nfunction unformatMoney(value) {\n console.warn('unformatMoney has been deprecated. Please use Alkami.Utils.CurrencyHelper.parseCurrency instead.');\n if (value === undefined || value === null) {\n return value;\n }\n let money = parseFloat(value.replace(/[^0-9.]/g, ''));\n if (value.startsWith('(')) {\n money = -money;\n }\n return money;\n}\n/********************************\n UI Helpers\n********************************/\nfunction bindDecimalFields() {\n const decimalFieldElements = Array.from(document.querySelectorAll('input[type=text].decimal'));\n decimalFieldElements.forEach(function (decimalFieldElement) {\n decimalFieldElement.addEventListener('keypress', function (e) {\n function stopEvent() {\n e.stopPropagation();\n e.preventDefault();\n }\n const noNegative = this.classList.contains('no-negative');\n // TODO (e as KeyboardEvent).which is deprecated, should use e.key or e.code\n if (e.which === 0 || e.which === Alkami.Helpers.KEY_CODES.DELETE || e.which === Alkami.Helpers.KEY_CODES.BACKSPACE || e.which === Alkami.Helpers.KEY_CODES.PERIOD || e.keyCode === Alkami.Helpers.KEY_CODES.TAB || e.which === Alkami.Helpers.KEY_CODES.COMMA) {\n return true;\n }\n if ((e.which === Alkami.Helpers.KEY_CODES.NUMPAD_SUBTRACT || e.which === 45) && noNegative) {\n stopEvent();\n return false;\n }\n if ((e.which === Alkami.Helpers.KEY_CODES.NUMPAD_SUBTRACT || e.which === 45) && /\\-/.test(this.value)) {\n stopEvent();\n return false;\n } // minus key and already has minus\n if (e.which >= 44 && e.which <= 57) {\n return true;\n }\n stopEvent();\n return false;\n });\n decimalFieldElement.addEventListener('blur', function () {\n this.value = unlocalizeAmount(this.value);\n });\n const p = decimalFieldElement.value.match(/(\\d)(?=(\\d{3})+(?!\\d))/);\n if (!p) {\n return true; // continue\n }\n // format number with commas.\n decimalFieldElement.value = decimalFieldElement.value.replace(/(\\d)(?=(\\d{3})+(?!\\d))/, '$1,');\n return true;\n });\n}\nfunction bindRequiredFields() {\n Array.from(document.querySelectorAll('[required]')).forEach(function (n) {\n const labelElement = document.querySelector(`label[for=${n.id}]`);\n if (labelElement) {\n labelElement.classList.add('required');\n }\n });\n}\nasync function instructify(element) {\n element.addEventListener('click', async (event) => {\n event.preventDefault();\n const url = new URL(element.getAttribute('href'), document.baseURI);\n if (new URL(document.baseURI).origin !== url.origin) {\n throw new Error('not a local url. may be unsafe.');\n }\n const contentElement = Alkami.Dom.parseHTML('
    Loading...
    ');\n const promptComponent = Alkami.Helpers.createCloseDialog(contentElement, { title: element.innerText || 'Help', cls: 'instructions', destroyOnClose: true });\n promptComponent.open = true;\n const response = await fetch(url.href);\n const data = await response.text();\n contentElement.innerHTML = data;\n const sideNavElement = contentElement.querySelector('#modal_sidenav');\n if (!sideNavElement) {\n return;\n }\n const parent = contentElement.querySelector('.tab-panel-container');\n parent.querySelectorAll('.panel').forEach((panelElement) => Alkami.Dom.hideElement(panelElement));\n const listItemElements = sideNavElement.querySelectorAll('.list-item');\n listItemElements.forEach((listItemElement) => {\n listItemElement.addEventListener('click', (listItemEvent) => {\n listItemEvent.preventDefault();\n listItemEvent.stopPropagation();\n if (listItemElement.classList.contains('current')) {\n return;\n }\n const currentActivePanelItem = parent.querySelector('.panel.active');\n currentActivePanelItem.classList.remove('active');\n Alkami.Dom.hideElement(currentActivePanelItem);\n const newlyActivePanelItem = contentElement.querySelector(`.panel${listItemElement.getAttribute('href')}`);\n newlyActivePanelItem.classList.add('active');\n Alkami.Dom.showElement(newlyActivePanelItem);\n });\n });\n const firstListItemElement = sideNavElement.querySelector('ul li:first-child a');\n firstListItemElement.classList.add('current');\n const firstPanel = contentElement.querySelector(`.panel${firstListItemElement.getAttribute('href')}`);\n firstPanel.classList.add('active');\n Alkami.Dom.showElement(firstPanel);\n });\n}\n\n\n","\"use strict\";\nfunction bindDatepicker(opts) {\n $(\".field.date input[type=text]\").each(function (i, n) {\n var defaults = {};\n if ($(this).siblings('input[type=\"hidden\"]').length) {\n defaults.altField = '#' + $(this).siblings('input[type=\"hidden\"]')[0].id;\n defaults.altFormat = 'yy-mm-dd';\n }\n $(this).datepicker($.extend(defaults, opts));\n });\n}\nfunction displayErrorContainerForForm($form) {\n var errors = $form.parent().find('.errors');\n if (!errors.length) {\n errors = $('
    ' +\n '' +\n Alkami.Localization.SiteText['GeneralErrorMessage']\n + '' +\n '
    ' +\n '
      ' +\n '
      ');\n // The errorWrapper class allows placement of errors in a form
      \n // If this class doesn't exist, prepend errors to the top of the form by default\n var errorWrapper = $form.find('.error-wrapper');\n if (errorWrapper.length) {\n errorWrapper.prepend(errors);\n }\n else {\n $form.prepend(errors);\n }\n }\n else {\n errors.removeClass('one');\n }\n var scrollToError = function (el, ms) {\n var speed = (ms) ? ms : 400;\n $('html, body').animate({\n scrollTop: $(el).offset().top - 60\n }, speed);\n };\n if ($('div.errors').length !== 0) {\n scrollToError('div.errors', 400);\n }\n return errors;\n}\nfunction previewIcon(resource, field, opts) {\n const updateElementId = (opts && opts.updateElementId) ? opts.updateElementId : 'preview_image';\n const fieldElement = (typeof field === 'string' ? document.querySelector(field) : field);\n const formElement = fieldElement.form || fieldElement.closest('form');\n let resolve;\n let reject;\n const defer = new Promise(function (res, rej) { resolve = res; reject = rej; });\n const options = Object.assign({\n success: function (response) {\n const text = response.responseText;\n const fe = fieldElement.closest('.field');\n const updatedElement = document.getElementById(updateElementId);\n if (!text.length || /Error/.test(text)) { // text will be blank in the case of 500 error, otherwise if it contains the term \"Error\"\n const error = text.length ? text.replace(\"Error: \", \"\") : \"We were unable to process your upload. Please ensure your file is less than 5 MB and is of type JPG, GIF or PNG.\";\n if (opts && opts.onError) {\n opts.onError.call(response, error);\n return reject(error);\n }\n displayErrorContainerForForm($(formElement)); // TODO: refactor this guy to not require jQuery\n if (fe) {\n fe.classList.add('field_with_errors');\n }\n Array.from(formElement.querySelectorAll('.errors ul')).forEach(function (errorListElement) {\n errorListElement.innerHTML = `
    • ${error}
    • `;\n });\n updatedElement.setAttribute('src', '/Image/PreviewImage?resource=&Height=50&Width=50'); // show \"no image\".\n fieldElement.value = ''; // reset the field.\n return reject(error);\n }\n Array.from(formElement.querySelectorAll('.errors')).forEach(function (errorElement) {\n errorElement.parentElement.removeChild(errorElement);\n });\n if (fe) {\n fe.classList.remove('field_with_errors');\n }\n updatedElement.setAttribute('src', `/Image/PreviewImage?resource=${response.responseText}&Height=50&Width=50`);\n return resolve(response.responseText);\n }\n }, opts);\n $(field).ajaxFileUpload(options);\n return defer;\n}\n\n\n","\"use strict\";\n/// \nvar Alkami = Alkami || {};\n(function () {\n class LanguageToggle {\n constructor() {\n this._localeStorageKey = \"alkami.locales\";\n this._chosenLocaleIndex = -1;\n this._openDialog = (locale, index) => {\n if (locale === this.currentLocale) {\n return;\n }\n this._chosenLocaleIndex = index;\n this._dialog.open = true;\n };\n this.GetLocales = this.getLocales;\n this.ResetLocales = this.resetLocales;\n this.SaveLocales = this.saveLocales;\n }\n changeLocale(locale) {\n return new Promise((resolve) => {\n if (locale.IsCurrent) {\n return resolve(this._locales);\n }\n $.post('/API/Locales/SetLocale', { localeId: locale.Id }, () => {\n this._locales.forEach(loc => loc.IsCurrent = loc.Id === locale.Id);\n this.saveLocales(this._locales);\n if (Alkami.WidgetNav) {\n Alkami.WidgetNav.ResetWidgetNav();\n Alkami.WidgetNav.ResetWidgetTitleBars();\n }\n return resolve(this._locales);\n });\n });\n }\n saveLocales(locales) {\n if (!(Alkami.Utils.StorageHelper.hasLocalStorage() && locales && locales.length)) {\n return;\n }\n localStorage[this._localeStorageKey] = JSON.stringify(locales);\n }\n getLocales(cb) {\n return new Promise((resolve) => {\n if (Alkami.Utils.StorageHelper.hasLocalStorage() && localStorage[this._localeStorageKey]) {\n const locales = JSON.parse(localStorage[this._localeStorageKey]);\n return resolve(locales);\n }\n $.get('/API/Locales', (data) => {\n const locales = data;\n Alkami.LanguageToggle.SaveLocales(locales);\n resolve(locales);\n }, 'json');\n }).then((locales) => {\n this._locales = locales;\n if (cb) {\n cb(locales);\n }\n Alkami.Dom.dispatchEvent(document.documentElement, 'localesLoaded');\n return locales;\n });\n }\n resetLocales() {\n if (!(Alkami.Utils.StorageHelper.hasLocalStorage() && localStorage[this._localeStorageKey])) {\n return;\n }\n localStorage.removeItem(this._localeStorageKey);\n }\n async refreshUI() {\n const languageToggleElement = document.getElementById('language_toggle');\n if (!languageToggleElement) {\n return;\n }\n if (!this._languageItemTemplateElement) {\n this._languageItemTemplateElement = document.getElementById('language_item_template');\n }\n Alkami.Dom.removeChildNodes(languageToggleElement);\n languageToggleElement.innerHTML = '';\n const locales = await this.getLocales();\n languageToggleElement.setAttribute('data-locale-count', locales.length.toString(10));\n if (locales.length > 1) {\n Alkami.Dom.showElement(languageToggleElement);\n }\n else {\n Alkami.Dom.hideElement(languageToggleElement);\n }\n locales.forEach((locale, index) => {\n const linkElement = this._languageItemTemplateElement.cloneNode(true);\n linkElement.id = 'language_toggle_link' + index;\n linkElement.href = '#';\n linkElement.classList.add(locale.IsCurrent ? 'current' : 'not-active');\n linkElement.innerHTML = linkElement.innerHTML.replace('$language_item_name$', locale.Language);\n linkElement.addEventListener('click', (event) => {\n event.preventDefault();\n this._openDialog(locale, index);\n });\n linkElement.addEventListener('keydown', (event) => {\n if (event.keyCode === 13 || event.keyCode === 32) {\n event.preventDefault();\n this._openDialog(locale, index);\n }\n });\n languageToggleElement.appendChild(linkElement);\n });\n }\n get locales() {\n return this._locales;\n }\n get currentLocale() {\n return this._locales.find((locale) => locale.IsCurrent);\n }\n get chosenLocale() {\n return this._locales[this._chosenLocaleIndex] || null;\n }\n get _dialog() {\n if (this.__dialog) {\n return this.__dialog;\n }\n this.__dialog = Alkami.Helpers.createDialog({\n buttons: [{\n text: Alkami.Localization.SiteText['Desktop.Menu.LocaleConfirmation.CancelButton'],\n type: 'secondary',\n handlerName: 'cancel',\n closePrompt: true\n }, {\n text: Alkami.Localization.SiteText['Desktop.Menu.LocaleConfirmation.ConfirmButton'],\n handlerName: 'confirm',\n closePrompt: false\n }],\n cls: 'language-toggle-modal',\n content: `
      \r\n\t\t\t\t\t\t

      ${Alkami.Localization.SiteText['Desktop.Menu.LocaleConfirmation.Description']}

      \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t

      ${Alkami.Localization.SiteText['Desktop.Menu.LocaleConfirmation.LoaderDescription']}

      \r\n\t\t\t\t\t
      `,\n handlers: {\n confirm: () => {\n const descriptionElement = document.getElementById('language_toggle_modal_description');\n const descriptionChangingElement = document.getElementById('language_toggle_modal_changing_description');\n Alkami.Dom.hideElement(descriptionElement);\n Alkami.Dom.showElement(descriptionChangingElement);\n Array.from(this.__dialog.element.querySelectorAll('button')).forEach((button) => {\n button.disabled = true;\n });\n this.changeLocale(this.chosenLocale).then(() => {\n location.reload();\n //this.__dialog.open = false;\n });\n }\n },\n id: 'language_toggle_modal',\n title: Alkami.Localization.SiteText['Desktop.Menu.LocaleConfirmation.Title']\n });\n this.__dialog.element.addEventListener('iris.prompt.opening', () => {\n const descriptionElement = document.getElementById('language_toggle_modal_description');\n const descriptionChangingElement = document.getElementById('language_toggle_modal_changing_description');\n Alkami.Dom.hideElement(descriptionChangingElement);\n Alkami.Dom.showElement(descriptionElement);\n Array.from(this.__dialog.element.querySelectorAll('button')).forEach((button) => {\n button.disabled = false;\n });\n });\n return this.__dialog;\n }\n ;\n }\n const lt = (Alkami.LanguageToggle || new LanguageToggle());\n Alkami.LanguageToggle = lt;\n Alkami.Dom.onDocumentReady(() => {\n const languageToggleElement = document.getElementById('language_toggle');\n if (!languageToggleElement) {\n return;\n }\n languageToggleElement.setAttribute('data-locale-count', '0');\n Alkami.Dom.hideElement(languageToggleElement);\n lt.refreshUI();\n });\n})();\n\n\n","\"use strict\";\n/// \nfunction updateHeaderProfileImage(cacheIdentifier = null) {\n if (!Alkami.Utils.StorageHelper.hasSessionStorage()) {\n // if we can't access session storage due to being in private mode\n return;\n }\n const cacheKey = 'USER_PORTRAIT_CACHE_IDENTIFIER';\n if (cacheIdentifier === null) {\n cacheIdentifier = window.sessionStorage.getItem(cacheKey);\n if (!cacheIdentifier) {\n // updated cacheidentifier does not exist.\n // there is no need to update header profile image.\n return;\n }\n }\n else {\n window.sessionStorage.setItem(cacheKey, cacheIdentifier);\n }\n // Find our Profile Image\n const profileImage = document.querySelector('#profile_pop .iris-avatar__image');\n if (profileImage === null) {\n // The image element doesn't exist. We are probably on the Authentication page\n return;\n }\n const url = new URL(profileImage.src);\n const params = new URLSearchParams(url.search);\n params.set('CacheIdentifier', cacheIdentifier);\n url.search = params.toString();\n profileImage.src = url.toString();\n}\n//\n// Needs to run on load every time to get past the caching of the header profile image.\n// Outside of Alkami.Dom.onDocumentReady() to prevent a brief (~250ms) flash of original profile image.\n//\nupdateHeaderProfileImage();\nAlkami.Dom.onDocumentReady(() => {\n // Functionality for the profile_nav dropdown \n // =============================================================================\n const profileNavElement = document.getElementById('profile_nav');\n if (profileNavElement) {\n const dropdownOptionsElement = document.querySelector('#profile_nav .dropdown-options');\n const dropdownToggleElement = document.querySelector('#profile_nav .dropdown-toggle');\n // Hide the dropdown on first load\n if (dropdownOptionsElement) {\n Alkami.Dom.hideElement(dropdownOptionsElement);\n }\n // Set up the click handlers for the toggle element\n if (dropdownToggleElement) {\n dropdownToggleElement.addEventListener('click', (event) => {\n event.stopPropagation();\n Alkami.Dom.fadeToggle(dropdownOptionsElement, 200, () => {\n if (dropdownToggleElement.getAttribute('aria-expanded') === 'false') {\n dropdownToggleElement.setAttribute('aria-expanded', 'true');\n dropdownOptionsElement.setAttribute('aria-hidden', 'false');\n }\n else {\n dropdownToggleElement.setAttribute('aria-expanded', 'false');\n dropdownOptionsElement.setAttribute('aria-hidden', 'true');\n }\n });\n dropdownToggleElement.classList.toggle('active');\n });\n }\n // If the document is clicked outside of the profile, close it\n document.addEventListener('click', (event) => {\n if (Alkami.Dom.isVisible(dropdownOptionsElement)) {\n Alkami.Dom.fadeOut(dropdownOptionsElement, 200, () => {\n dropdownToggleElement.setAttribute('aria-expanded', 'false');\n dropdownOptionsElement.setAttribute('aria-hidden', 'true');\n });\n dropdownToggleElement.classList.remove('active');\n }\n });\n }\n // Functionality for the profile_nav_toggle dropdown \n // =============================================================================\n const profileNavToggleElement = document.getElementById('profile_nav_toggle');\n if (profileNavToggleElement) {\n const showProfileMenuElement = document.getElementById('show_profile_menu');\n profileNavToggleElement.addEventListener('click', (event) => {\n event.stopPropagation();\n if (showProfileMenuElement) {\n Alkami.Dom.fadeToggle(showProfileMenuElement, 100, () => {\n if (profileNavToggleElement.getAttribute('aria-expanded') === 'false') {\n profileNavToggleElement.setAttribute('aria-expanded', 'true');\n showProfileMenuElement.setAttribute('aria-hidden', 'false');\n }\n else {\n profileNavToggleElement.setAttribute('aria-expanded', 'false');\n showProfileMenuElement.setAttribute('aria-hidden', 'true');\n }\n });\n }\n });\n document.body.addEventListener('click', (event) => {\n if (event.target.id != 'profile_nav_toggle') {\n profileNavToggleElement.setAttribute('aria-expanded', 'false');\n if (showProfileMenuElement) {\n showProfileMenuElement.setAttribute('aria-hidden', 'true');\n Alkami.Dom.fadeOut(showProfileMenuElement, 100);\n }\n }\n }, false);\n }\n // Functionality for the ribbon_profile_nav \n // =============================================================================\n const ribbonProfileNav = document.getElementById('ribbon_profile_nav');\n if (ribbonProfileNav) {\n const ribbonShowProfileMenuElement = document.getElementById('ribbon_show_profile_menu');\n const ribbonProfileNavToggleElement = document.getElementById('ribbon_profile_nav_toggle');\n const profileNavDropdownOptionsElement = document.querySelector('#profile_nav .dropdown-options');\n const profileNavDropdownToggleElement = document.querySelector('#profile_nav .dropdown-toggle');\n const chevronElement = document.querySelector('#ribbon_profile_nav .iris-chevron');\n // Hide the options element on page load.\n if (ribbonShowProfileMenuElement) {\n Alkami.Dom.hideElement(ribbonShowProfileMenuElement);\n }\n if (ribbonProfileNavToggleElement) {\n ribbonProfileNavToggleElement.addEventListener('click', (event) => {\n event.stopPropagation();\n Alkami.Dom.fadeToggle(ribbonShowProfileMenuElement, 200, () => {\n if (ribbonProfileNavToggleElement.getAttribute('aria-expanded') === 'false') {\n ribbonProfileNavToggleElement.setAttribute('aria-expanded', 'true');\n ribbonShowProfileMenuElement.setAttribute('aria-hidden', 'false');\n }\n else {\n ribbonProfileNavToggleElement.setAttribute('aria-expanded', 'false');\n ribbonShowProfileMenuElement.setAttribute('aria-hidden', 'true');\n }\n });\n ribbonProfileNavToggleElement.classList.toggle('active');\n chevronElement.classList.toggle('iris-chevron--up');\n });\n document.addEventListener('click', (event) => {\n if (event.target.id !== 'ribbon_profile_nav_toggle') {\n Alkami.Dom.fadeOut(ribbonShowProfileMenuElement, 100, () => {\n ribbonShowProfileMenuElement.setAttribute('aria-hidden', 'true');\n ribbonProfileNavToggleElement.setAttribute('aria-expanded', 'false');\n });\n ribbonProfileNavToggleElement.classList.remove('active');\n chevronElement.classList.remove('iris-chevron--up');\n }\n }, false);\n }\n // Finding Height of Header to set scroll to produce actions\n if (document.querySelector('.ribbon-user')) {\n const container = document.querySelector('.container-right');\n container.style.display = 'flex';\n const headerProfile = document.getElementById('profile_nav');\n const headerProfileHeight = headerProfile.clientHeight;\n const headerProfileImage = headerProfile.querySelector('img').src;\n const ribbonProfileImage = document.getElementById('ribbon_profile_image');\n ribbonProfileImage.src = headerProfileImage;\n const header = document.getElementById('header');\n // If a user is already scrolled down on the page and reloads, bounding rect will return a negative number.\n // Add the scrollY to account for this use case.\n const headerTop = header.getBoundingClientRect().top + window.scrollY;\n const headerBottom = headerTop + headerProfileHeight - parseInt(headerProfile.style.marginTop || '0');\n // Grabbing the individual divs that we want to move to get translation\n const profile = document.querySelector('.ribbon-user');\n profile.style.opacity = '0';\n container.setAttribute('style', 'transform: translateX(' + (profile.clientWidth + 10) + 'px); display: flex;');\n setTimeout(function () {\n container.style.transition = '0.75s';\n container.style.opacity = '1';\n }, 750);\n const pageScrolled = function () {\n const ribbonShowProfileMenuElement = document.getElementById('ribbon_show_profile_menu');\n container.style.transition = '0.75s';\n // various scrolltops because browsers like to be different\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n if (scrollTop >= headerBottom) {\n container.style.cssText = 'display: flex; transition: 0.75s; opacity: 1;';\n profile.style.opacity = '1';\n // If the standard profile dropdown is visible, make sure to close it when we scroll down.\n if (Alkami.Dom.isVisible(profileNavDropdownOptionsElement)) {\n // Need to make sure that if the profile dropdown is open we close it on scroll\n Alkami.Dom.fadeOut(profileNavDropdownOptionsElement, 200, () => {\n // Make sure we change the aria labels back\n profileNavDropdownToggleElement.setAttribute('aria-expanded', 'false');\n profileNavDropdownOptionsElement.setAttribute('aria-hidden', 'true');\n });\n profileNavDropdownToggleElement.classList.remove('active');\n }\n }\n else {\n container.style.cssText = `transform: translateX(${profile.clientWidth + 10}px); display: flex; transition: 0.75s; opacity: 1;`;\n profile.style.opacity = '0';\n if (Alkami.Dom.isVisible(ribbonShowProfileMenuElement)) {\n Alkami.Dom.fadeOut(ribbonShowProfileMenuElement, 100, () => {\n ribbonProfileNavToggleElement.setAttribute('aria-expanded', 'false');\n ribbonShowProfileMenuElement.setAttribute('aria-hidden', 'true');\n });\n ribbonProfileNavToggleElement.classList.remove('active');\n chevronElement.classList.remove('iris-chevron--up');\n }\n }\n };\n window.addEventListener('scroll', pageScrolled);\n // When the page loads if the window is already scrolled call the scroll handler\n if (window.scrollY > 0) {\n pageScrolled();\n }\n }\n ;\n }\n // Functionality for the profile_lite element\n // =============================================================================\n const profileLiteUserNameElement = document.querySelector('#profile_lite .user');\n if (profileLiteUserNameElement) {\n const string = profileLiteUserNameElement.innerText;\n if (string.length > 10) {\n const substring = string.substring(10, string.length);\n profileLiteUserNameElement.innerText = string.replace(substring, '...');\n }\n }\n // End document ready\n});\n\n\n","\"use strict\";\nclass IdleTimeout {\n constructor(element, options) {\n this._options = {\n delay: 1000 * 60 * 10,\n pollDelay: 1000 * 60,\n keepAliveEvents: ['keydown', 'mousedown', 'mousemove', 'touchstart', 'touchend', 'wheel']\n };\n this._done = true;\n this._resetPoll = () => {\n clearTimeout(this._timer);\n const timeLeft = this.delay - this.duration;\n const pollDelay = this.pollDelay > timeLeft ? timeLeft : this.pollDelay;\n this._timer = window.setTimeout(this._pollHandler, pollDelay);\n };\n this._pollHandler = () => {\n this._dispatchEvent('idletimeout-poll');\n if (this.duration < this.delay) {\n this._resetPoll();\n return;\n }\n this._dispatchEvent('idletimeout-expire');\n this.cancel();\n };\n this._eventHandler = (event) => {\n if (this._done) {\n return;\n }\n if (event.type === 'message' && event.data !== 'idletimeout-reset') {\n return;\n }\n this.resetTimer();\n };\n this._element = element;\n this._options = Object.assign({}, this._options, options);\n this.resetTimer();\n }\n _initEventListeners() {\n this._options.keepAliveEvents.forEach((eventName) => {\n this._element.addEventListener(eventName, this._eventHandler);\n });\n window.addEventListener('message', this._eventHandler);\n }\n _destroyEventListeners() {\n this._options.keepAliveEvents.forEach((eventName) => {\n this._element.removeEventListener(eventName, this._eventHandler);\n });\n window.removeEventListener('message', this._eventHandler);\n }\n _dispatchEvent(eventName) {\n const event = new CustomEvent(eventName, { bubbles: true, cancelable: true, detail: this });\n this._element.dispatchEvent(event);\n }\n resetTimer() {\n if (this._done) {\n this._done = false;\n this._initEventListeners();\n }\n this._dispatchEvent('idletimeout-start');\n this._startTime = Date.now();\n this._resetPoll();\n }\n cancel() {\n this._done = true;\n clearTimeout(this._timer);\n this._destroyEventListeners();\n }\n get element() {\n return this._element;\n }\n get duration() {\n return Date.now() - this._startTime;\n }\n get delay() {\n return this._options.delay;\n }\n get pollDelay() {\n return this._options.pollDelay;\n }\n get startTime() {\n return this._startTime;\n }\n}\n\n\n","\"use strict\";\n/// \n/// \n// TODO: Componentize this guy.\nAlkami.Dom.onDocumentReady(() => {\n let sessionDialogCountdown;\n const isDebug = !!window.debugMode;\n const isPublic = !Alkami.Globals.isAuthenticated;\n const isRegistration = window.location.pathname.includes('/Registration');\n const isAuthentication = window.location.pathname.includes('/Authentication');\n const pingUrl = isDebug || isPublic ? '/Client/Ping' : '/Client/CheckSessionAlive';\n const logoutUrl = Alkami.Helpers.isMobileUrl() ? '/Mobile/Logout' : '/Logout';\n const isNativeTablet = Alkami.Helpers.isNativeTabletApplication();\n const isNative = Alkami.Helpers.isNativeApplication();\n //Native doesn't need to ping on public pages\n if ((isPublic || isDebug) && (isNative || isNativeTablet)) {\n return;\n }\n // Heartbeat for session keep alive.\n setInterval(function () {\n fetch(pingUrl, { credentials: 'same-origin' })\n .then((response) => response.text())\n .then((text) => {\n if (text === 'OK') {\n return Promise.resolve(text);\n }\n return Promise.reject(text);\n }).catch((e) => {\n if (isAuthentication) {\n return;\n } // If services go down, we don't want a recursive refresh\n window.location.href = logoutUrl + '?idle=true';\n });\n }, 1000 * 60);\n // Don't do idle timeout in debug/public mode except for registration\n if (isDebug || (isPublic && !isRegistration)) {\n return;\n }\n // Don't do idle timeout if on a native application. They have their own mechanism\n if (isNativeTablet || isNative) {\n return;\n }\n // Build the Modal\n const localizedSessionDialog = document.querySelector('.localization.sessionDialog');\n let sessionBodyMarkup = '

      You have been inactive for a while. You will be logged out in seconds.

      ';\n let stillHereButtonText = 'I\\'m still here!';\n let logoutButtonText = 'Logout';\n let modalTitleText = 'Are you still there?';\n if (localizedSessionDialog) {\n const dataset = localizedSessionDialog.dataset;\n sessionBodyMarkup = dataset.bodyContent || sessionBodyMarkup;\n stillHereButtonText = dataset.stillHereButtonText || stillHereButtonText;\n logoutButtonText = dataset.logoutButtonText || logoutButtonText;\n modalTitleText = dataset.sessionModalTitle || modalTitleText;\n }\n const sessionPrompt = Alkami.Helpers.createDialog({\n id: 'session-dialog',\n title: modalTitleText,\n content: sessionBodyMarkup,\n handlers: {\n 'logout': function (e) {\n e.target.innerHTML = 'Please wait...';\n window.location.href = logoutUrl;\n },\n 'cancel': function (e) {\n window.clearInterval(window.sessionDialogCountdown);\n idleTimeout.resetTimer();\n }\n },\n buttons: [{\n text: logoutButtonText,\n type: 'secondary',\n handlerName: 'logout',\n closePrompt: false\n }, {\n text: stillHereButtonText,\n handlerName: 'cancel',\n closePrompt: true\n }]\n });\n // Idle timer initialize\n const idleElement = document.documentElement;\n const idleTimeout = new IdleTimeout(idleElement, {\n delay: window.idleLogoutMinutes * 1000 * 60,\n keepAliveEvents: ['keydown', 'mousedown'],\n pollDelay: 1000 * 60 // every minute in milliseconds\n });\n const expireHandler = () => {\n let counter = 30;\n const sessionTimeoutCountdownElement = document.getElementById('session-timeout-countdown');\n const updateCountdown = () => {\n if (sessionTimeoutCountdownElement) {\n sessionTimeoutCountdownElement.innerHTML = counter.toString();\n }\n };\n updateCountdown();\n sessionPrompt.open = true;\n // start countdown in dialog\n window.sessionDialogCountdown = window.setInterval(function () {\n let delayWindowMS = idleTimeout.delay + 30 * 1000; //Adding 30 seconds to the delay window for countdown\n let currentIdleWindowMS = Date.now() - idleTimeout.startTime;\n counter = Math.ceil((delayWindowMS - currentIdleWindowMS) / 1000);\n updateCountdown();\n if (counter <= 0) {\n window.clearInterval(window.sessionDialogCountdown);\n window.location.href = logoutUrl + '?idle=true';\n }\n }, 1000);\n };\n idleElement.addEventListener('idletimeout-expire', expireHandler);\n});\n\n\n","\"use strict\";\n/// \nconst isDebug = !!window.debugMode;\nconst isPublic = document.body.classList.contains('public');\nconst primaryWidgetOuterElement = document.getElementById('primary_widget_outer');\nif (!isPublic && primaryWidgetOuterElement) {\n // Create the widget overlay element\n const widgetOverlayElement = document.createElement('div');\n widgetOverlayElement.id = 'widget_overlay';\n // Create the loader element and style it appropriately.\n const loadingElement = document.createElement('div');\n loadingElement.classList.add('loading');\n loadingElement.innerText = 'Please wait while we load your info.';\n // Append the elements to the DOM.\n widgetOverlayElement.appendChild(loadingElement);\n primaryWidgetOuterElement.appendChild(widgetOverlayElement);\n}\n// Load Ad Blocker Detection Script\nif (!isPublic && Alkami.Utils.StorageHelper.hasLocalStorage() && !localStorage.getItem('adBlockerPromptSeen')) {\n let script = document.createElement('script');\n script.type = 'text/javascript';\n script.defer = true;\n script.src = '../javascripts/shared.scripts/ad-blocker-detection-ts.min.js';\n document.getElementsByTagName('head')[0].appendChild(script);\n}\nif (Alkami.Globals.localeHasChanged) {\n if (Alkami.WidgetNav) {\n Alkami.WidgetNav.ResetWidgetNav();\n }\n if (Alkami.WidgetHeader) {\n Alkami.WidgetHeader.resetHeaderInfoStorage();\n }\n if (Alkami.LanguageToggle) {\n Alkami.LanguageToggle.ResetLocales();\n }\n}\nAlkami.Dom.onDocumentReady(() => {\n // If we are in debug mode, overlay something in the layout to expose that we are in debug.\n if (isDebug) {\n document.body.classList.add('debug');\n document.body.style.overflowX = 'hidden';\n }\n // Now that the document has loaded, remove the widget loading overlay.\n const overlayElement = document.getElementById('widget_overlay');\n if (overlayElement) {\n overlayElement.remove();\n }\n document.getElementById('primary_widget_content').style.visibility = 'visible';\n // If this view has a sidebar, add a class to the widget outer wrapper.\n const sidebarElement = document.getElementById('sidebar');\n if (sidebarElement && primaryWidgetOuterElement) {\n primaryWidgetOuterElement.classList.add('has_sidebar');\n }\n // Add a class on all input fields that cooresponds to its type\n const allInputElements = document.querySelectorAll('input');\n Array.from(allInputElements)\n .forEach((inputElement) => {\n inputElement.classList.add(inputElement.type);\n });\n // Insert a
      tag at the end of all elements with a clearfix class\n Array.from(document.querySelectorAll('.clearfix'))\n .forEach((element) => {\n const breakElement = document.createElement('br');\n breakElement.classList.add('clear');\n element.appendChild(breakElement);\n });\n // Bind behavior on input fields.\n bindDecimalFields();\n bindRequiredFields();\n const numberTextFieldElements = document.querySelectorAll('input[type=\"text\"].number');\n if (numberTextFieldElements.length > 0) {\n Array.from(numberTextFieldElements)\n .forEach((inputElement) => {\n inputElement.addEventListener('keypress', (event) => {\n const noNegative = inputElement.classList.contains('no-negative');\n if (event.which == 0 || event.which == Alkami.Helpers.KEY_CODES.DELETE || event.which == Alkami.Helpers.KEY_CODES.BACKSPACE || event.which == Alkami.Helpers.KEY_CODES.PERIOD || event.keyCode == Alkami.Helpers.KEY_CODES.TAB || event.which == Alkami.Helpers.KEY_CODES.COMMA)\n return true;\n if ((event.which == Alkami.Helpers.KEY_CODES.MINUS || Alkami.Helpers.KEY_CODES.DASH) && noNegative)\n return false;\n if ((event.which == Alkami.Helpers.KEY_CODES.MINUS || Alkami.Helpers.KEY_CODES.DASH) && /\\-/.test(this.value))\n return false; // minus key and already has minus\n if (event.which >= 44 && event.which <= 57)\n return true;\n return false;\n });\n });\n }\n // Make all `post-link` anchor elements POSTable\n const postLinkHandler = Alkami.Dom.passiveEventListener('a.post-link', (event) => {\n if (!this.href) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n Alkami.Helpers.Form.postLink(this.href);\n });\n document.addEventListener('click', postLinkHandler);\n // jQuery plugin initialization\n // TODO: See if any of these can be converted to a pure JS implementation.\n $('.filter-slide').contentSlider();\n $('.filter-slide-open').contentSlider({ collapsedByDefault: false });\n $('.title-tooltip').toolTip({ useTitle: true, selector: '.title-tooltip' });\n $('.tooltip').toolTip({ selector: '.tooltip' });\n // Modifying the prototype to change how the progressbar displays on screen.\n $.ui.progressbar.prototype.min = -1;\n // Show flash notitfications if there are any flash-holder elements on the page.\n const flashHolderElements = document.querySelectorAll('.flash-holder');\n if (flashHolderElements.length > 0) {\n Array.from(flashHolderElements)\n .forEach((element) => {\n const message = element.innerText;\n if (message) {\n const hasError = element.classList.contains('error');\n const hasInfo = element.classList.contains('info');\n const hasSecurity = element.classList.contains('__security__');\n // Once we've pulled the message from the div, remove it from the DOM.\n element.remove();\n // Based on the message type, call the appropriate function to show the message in a notification.\n if (!hasSecurity && (message !== \"System.Object\")) {\n if (hasError) {\n Alkami.FlashBanner.showError(message);\n }\n else if (hasInfo) {\n Alkami.FlashBanner.showInfo(message);\n }\n else {\n Alkami.FlashBanner.showMessage(message);\n }\n }\n }\n });\n }\n // Simple Informational Dialog/Modal\n // TODO: Currently this is only used in budgets.\n const infoPopupElement = document.querySelector('.info-popup');\n if (infoPopupElement) {\n infoPopupElement.addEventListener('click', (event) => {\n // NOTE: The href on the element is in the form of '#some_div_id' which we then use as a selector to pull the html from.\n // TODO: Convert this away from using an ext modal in favor of an iris prompt.\n const contentSelector = infoPopupElement.hash.replace('#', '');\n const popupContentSectionElement = Alkami.Dom.parseHTML(document.getElementById(contentSelector).innerHTML).firstChild;\n Alkami.Helpers.createCloseDialog(popupContentSectionElement, { title: infoPopupElement.title });\n });\n }\n // Sets bootstrap modal default settings\n if ($.fn.modal && $.fn.modal.Constructor) {\n $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';\n }\n // Wrap all clearable input fields in a wrapper.\n const clearableInputElements = document.querySelectorAll('input.clearable');\n if (clearableInputElements) {\n Array.from(clearableInputElements)\n .forEach((inputElement) => {\n const wrapperElement = document.createElement('div');\n wrapperElement.classList.add('search-wrapper');\n const clearInputElement = document.createElement('span');\n clearInputElement.classList.add('clear-input', 'font-icon-canceled');\n clearInputElement.setAttribute('aria-role', 'button');\n clearInputElement.setAttribute('aria-label', 'Clear input field.');\n inputElement.parentNode.insertBefore(wrapperElement, inputElement);\n wrapperElement.appendChild(inputElement);\n wrapperElement.appendChild(clearInputElement);\n // Attach event listeners\n // If there is a value that is not an empty string, add the \"input-filled\" class\n inputElement.addEventListener('input', (event) => {\n inputElement.classList.toggle('input-filled', !!inputElement.value);\n });\n // When the clear icon is clicked, clear out the input's value\n clearInputElement.addEventListener('click', (event) => {\n inputElement.classList.remove('input-filled');\n inputElement.value = '';\n inputElement.focus();\n });\n });\n }\n // PDF confirmation listeners\n // HACK: This is really terrible. Why do we have custom logic for specific disclosures in the primary JS file for the application.\n // TODO: Come back and refactor to move these to the disclosure views individually.\n document.addEventListener('change', (event) => {\n const targetId = event.target.id;\n if (!targetId) {\n return;\n }\n // Essentially a list of all the disclosure section checkbox element ids.\n // When a change event happens we search the array for an id that matches the event target's id.\n // If a match is found, open the access code section for the user.\n const disclosureCheckboxIds = [\n 'DisclosureAccepted',\n 'agree_to_terms',\n 'ReceivesFIStatementAlerts_IsChecked'\n ];\n if (disclosureCheckboxIds.indexOf(targetId) > -1) {\n const accessCodeElement = document.getElementById('pdf_access');\n if (accessCodeElement) {\n Alkami.Dom.slideToggle(accessCodeElement, 400);\n }\n }\n });\n // Browser Support Link\n let BrowserSupportPromise;\n async function openBrowserSupport(oldHash = '') {\n if (!BrowserSupportPromise) {\n BrowserSupportPromise = Alkami.Cdn.scriptWithCacheExpiration('/javascripts/shared.scripts/browser-support-ts.js');\n }\n await BrowserSupportPromise;\n const prompt = Alkami.BrowserSupport.displaySupportInfo();\n prompt.element.addEventListener('iris.prompt.closed', () => {\n location.hash = oldHash;\n });\n }\n //Check if the old Browser Support page exists on the page.\n if (!window.BrowserInfo) {\n // preload browserSupport page\n if (!Alkami.BrowserSupport) {\n BrowserSupportPromise = Alkami.Cdn.scriptWithCacheExpiration('/javascripts/shared.scripts/browser-support-ts.js');\n }\n window.addEventListener('hashchange', function (event) {\n const { oldURL } = event;\n const oldHash = oldURL.split('#')[1] || '';\n if (location.hash === '#/browser-support') {\n openBrowserSupport(oldHash);\n }\n });\n if (location.hash === '#/browser-support') {\n openBrowserSupport();\n }\n }\n});\n\n\n","\"use strict\";\n/// \n(function () {\n class ArticlesComponent {\n constructor(element) {\n this.articles = null;\n this.element = element;\n this.element.classList.add('articles-component');\n }\n refreshUI() {\n const loadingContentElement = this.element.querySelector('.loading-content');\n const noContentMessageElement = this.element.querySelector('.no-content-message');\n const articlesElement = this.element.querySelector('.articles');\n const buttonElement = this.element.querySelector('.articles-component__button');\n const buttonTitle = buttonElement.getAttribute('title') || '';\n if (this.articles === null) {\n Alkami.Dom.showElement(loadingContentElement);\n Alkami.Dom.hideElement(noContentMessageElement);\n Alkami.Dom.hideElement(articlesElement);\n return;\n }\n else if (this.articles.length === 0) {\n Alkami.Dom.hideElement(loadingContentElement);\n Alkami.Dom.showElement(noContentMessageElement);\n Alkami.Dom.hideElement(articlesElement);\n return;\n }\n Alkami.Dom.hideElement(loadingContentElement);\n Alkami.Dom.hideElement(noContentMessageElement);\n Alkami.Dom.showElement(articlesElement);\n articlesElement.innerHTML = this.articles.map((article) => {\n return ``;\n }).join('');\n buttonElement.setAttribute('aria-label', `${buttonTitle} ${this.articles.length.toString(10)}`);\n }\n }\n function getEducationalArticles() {\n return new Promise((resolve) => {\n $.ajax({\n url: '/Api/Content/GetEducationalContentImpressions',\n data: { currentWidget: window.currentWidgetName },\n dataType: 'json',\n type: 'GET',\n success: function (data) {\n const content = JSON.parse(data.ContentImpressions || \"[]\"); //YUCK: Why do we store the array object as a string? O.o\n const articles = content.map((article) => {\n return {\n id: article.Id,\n date: article.Date,\n displayName: article.DisplayName,\n excerpt: article.Excerpt,\n url: `/Content/${article.Id}`\n };\n });\n return resolve(articles);\n },\n error: function () {\n // Hopefully we never get here.\n return resolve([]);\n }\n });\n });\n }\n function getNewsArticles() {\n return new Promise((resolve) => {\n $.ajax({\n url: \"/Api/Content/GetCurrentNews\",\n data: { currentWidget: window.currentWidgetName },\n dataType: 'json',\n type: 'GET',\n success: function (data) {\n const content = JSON.parse(data.Content || \"[]\"); //YUCK: Why do we store the array object as a string? O.o\n const articles = content.map((article) => {\n return {\n id: article.Id,\n date: article.Date,\n displayName: article.DisplayName,\n excerpt: article.Excerpt,\n url: `/Content/${article.Id}`\n };\n });\n return resolve(articles);\n },\n error: function () {\n // Hopefully we never get here.\n return resolve([]);\n }\n });\n });\n }\n function initArticlesComponent(element, getter) {\n const articlesComponent = new ArticlesComponent(element);\n let getterPromise = null;\n articlesComponent.refreshUI();\n element.addEventListener('expandend', () => {\n if (getterPromise) {\n return;\n }\n getterPromise = getter().then((articles) => {\n articlesComponent.articles = articles;\n articlesComponent.refreshUI();\n return articles;\n });\n });\n Alkami.Iris.PopoverComponent.refresh(element.querySelectorAll('[data-popover]'));\n }\n function initArticleAction(li, buttonOptions) {\n const oldButton = li.querySelector('button');\n const popover = li.querySelector('.iris-popover');\n const buttonAttributes = {\n 'data-popover': '',\n 'data-placement': 'bottom',\n 'data-static-placement': '',\n 'data-indicator': 'end',\n 'title': oldButton.title,\n 'aria-label': oldButton.title\n };\n const actionItem = new Alkami.WidgetHeader.ActionButtonItem(Object.assign({ buttonAttributes }, buttonOptions));\n actionItem.element.appendChild(popover);\n actionItem.element.classList.add('legacy-action-item');\n return actionItem;\n }\n function initHelpArticlesAction(li) {\n const oldButton = li.querySelector('a.help');\n const actionItem = new Alkami.WidgetHeader.ActionButtonItem({\n containerId: 'help_articles',\n iconName: 'help',\n text: oldButton.innerText,\n href: oldButton.href,\n buttonAttributes: {\n 'title': oldButton.title,\n 'aria-label': oldButton.title\n }\n });\n actionItem.buttonElement.classList.add('help-link');\n actionItem.element.classList.add('legacy-action-item');\n return actionItem;\n }\n async function init() {\n const relatedContentPromise = new Promise((resolve) => {\n document.body.addEventListener('irisinitstart', () => {\n const element = document.getElementById('related_content');\n if (!element) {\n resolve(null);\n return;\n }\n element.remove();\n // element.style.display = 'none';\n resolve(element);\n });\n });\n const widgetHeaderInitPromise = new Promise((resolve) => {\n document.body.addEventListener('widgetHeaderInitBefore', ((event) => resolve(event.detail.header)));\n });\n try {\n const relatedContent = await relatedContentPromise;\n if (!relatedContent) {\n return;\n }\n const header = await widgetHeaderInitPromise;\n const actionBar = header.actions;\n const educationLI = relatedContent.querySelector('#educational_articles');\n const newsLI = relatedContent.querySelector('#news_articles');\n const helpLI = relatedContent.querySelector('#help_articles');\n const helpLink = relatedContent.querySelector('#help_articles a.help');\n if (educationLI && window.currentWidgetName) {\n const actionItem = initArticleAction(educationLI, {\n containerId: 'educational_articles',\n iconName: 'education'\n });\n actionBar.append(actionItem);\n initArticlesComponent(actionItem.element, getEducationalArticles);\n }\n if (newsLI) {\n const actionItem = initArticleAction(newsLI, {\n containerId: 'news_articles',\n iconName: 'newspaper'\n });\n actionBar.append(actionItem);\n initArticlesComponent(actionItem.element, getNewsArticles);\n }\n if (helpLI && helpLink) {\n const actionItem = initHelpArticlesAction(helpLI);\n actionBar.append(actionItem);\n $('#help_articles .help-link').instructify();\n }\n }\n catch (e) {\n console.warn(e);\n }\n }\n init();\n})();\n\n\n","\"use strict\";\n/// \n(function () {\n function loadPromo() {\n return new Promise((resolve) => {\n $.get('/API/Content/GetCurrentPromotion', function (data) {\n data.contentUrl = '/Content/' + data.contentId;\n resolve(data);\n }, 'json');\n });\n }\n function refreshPromoUI(promo) {\n const promoContainerElement = document.getElementById('promo');\n if (!promoContainerElement || promoContainerElement.hasAttribute('data-custom-promo')) {\n return;\n }\n Alkami.Dom.hideElement(promoContainerElement);\n promoContainerElement.innerHTML = '';\n if (promo.excerptData) {\n Alkami.Dom.showElement(promoContainerElement);\n promoContainerElement.innerHTML = `${promo.excerptData}`;\n }\n }\n Alkami.Dom.onDocumentReady(() => {\n const promoContainerElement = document.getElementById('promo');\n if (!promoContainerElement || promoContainerElement.hasAttribute('data-custom-promo') || RegExp('logout', 'i').test(document.URL)) {\n return;\n }\n Alkami.Dom.hideElement(promoContainerElement);\n loadPromo().then((promo) => {\n refreshPromoUI(promo);\n return promo;\n });\n });\n})();\n\n\n","\"use strict\";\n/// \n(function () {\n const widgetsWithSystemAlerts = ['Dashboard', 'DashboardV2'];\n function fetchSystemAlert() {\n return new Promise((resolve, reject) => {\n $.get('/API/Content/GetSystemAlert', function (data) {\n if (!data) {\n return resolve(null);\n }\n ;\n resolve({\n excerptData: data.excerptData,\n contentId: data.contentId,\n contentUrl: data.contentId ? `/Content/${data.contentId}` : null\n });\n }, \"json\");\n });\n }\n function refreshSystemAlertUI(alert) {\n const systemAlertElement = document.getElementById('system_alert');\n const fakeButton = alert.contentUrl ? `
      \r\n\t\t\t\t \r\n\t\t\t
      ` : '';\n const systemAlertTemplate = `
      \r\n\t\t\t
      \r\n\t\t\t
      ${alert.excerptData}
      \r\n\t\t\t ${fakeButton}\r\n\t\t\t
      \r\n\t\t\t
      `;\n if (alert.contentUrl) {\n const anchorElement = document.createElement('A');\n anchorElement.setAttribute('href', alert.contentUrl);\n anchorElement.innerHTML = systemAlertTemplate;\n systemAlertElement.appendChild(anchorElement);\n }\n else {\n systemAlertElement.innerHTML = systemAlertTemplate;\n }\n Alkami.Dom.fadeIn(systemAlertElement);\n }\n Alkami.Dom.onDocumentReady(() => {\n const metaHeaderElement = document.getElementById('meta_header');\n const systemAlertCapable = widgetsWithSystemAlerts.find(widgetName => widgetName === window.currentWidgetName);\n if (!metaHeaderElement || !systemAlertCapable) {\n return;\n }\n fetchSystemAlert().then((alert) => {\n if (!alert) {\n return null;\n }\n refreshSystemAlertUI(alert);\n return alert;\n });\n });\n})();\n\n\n","(function(global) {\r\n\tvar PasswordTogglefication = function PasswordTogglefication(inputElement, newOptions) {\r\n\t\tif (inputElement.tagName !== 'INPUT') {\r\n\t\t\tconsole.warn('inputElement is not of type Input. Ignored.');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this === global) {\r\n\t\t\tthrow new Error('This should be used as a constructor. Try \"new PasswordTogglefication(element)\"')\r\n\t\t}\r\n\r\n\t\tvar self = this;\r\n\t\tvar assign = Object.assign || (jQuery && jQuery.extend);\r\n\r\n\t\tself.options = assign({}, PasswordTogglefication.defaultOptions, newOptions);\r\n\t\tself.element = inputElement;\r\n\t\tself.parentElement = inputElement.parentNode;\r\n\t\tself.inputType = self.element.getAttribute('type') || 'text';\r\n\r\n\t\tself.wrapperElement = document.createElement(self.options.wrapperElementType);\r\n\t\tself.toggleButtonElement = document.createElement('button');\r\n\t\tself.toggleButtonElement.setAttribute('type', 'button');\r\n\r\n\t\tself.options.wrapperClass.split(' ').forEach(function(className) {\r\n\t\t\tself.wrapperElement.classList.add(className);\r\n\t\t});\r\n\r\n\t\tself.options.toggleButtonClass.split(' ').forEach(function(className) {\r\n\t\t\tself.toggleButtonElement.classList.add(className);\r\n\t\t});\r\n\r\n\t\tself.toggleButtonElement.addEventListener('click', function(e) {\r\n\t\t\tself.togglePassword();\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\r\n\t\tself.element.addEventListener('blur', function() {\r\n\t\t\tif (!self.options.passwordOnBlur || !self.element.value) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tself.togglePassword(PasswordTogglefication.TYPES.PASSWORD);\r\n\t\t});\r\n\r\n\t\tself.parentElement.insertBefore(self.wrapperElement, self.element);\r\n\t\tself.wrapperElement.appendChild(self.element);\r\n\t\tself.wrapperElement.appendChild(self.toggleButtonElement);\r\n\t\tself.setType(self.options.startState);\r\n\r\n\t\tif (self.inputType === 'password') {\r\n\t\t\tself.inputType = 'text';\r\n\t\t}\r\n\t}\r\n\r\n\tPasswordTogglefication.prototype.togglePassword = function(setType) {\r\n\t\tvar type = this.element.getAttribute('type');\r\n\t\tvar toggledType = setType || (type === this.inputType ? PasswordTogglefication.TYPES.PASSWORD : PasswordTogglefication.TYPES.VISIBLE);\r\n\t\tthis.setType(toggledType);\r\n\t\tthis.options.toggleCallback(toggledType, this);\r\n\t};\r\n\r\n\tPasswordTogglefication.prototype.setType = function(type) {\r\n\t\tvar isPassword = type === PasswordTogglefication.TYPES.PASSWORD;\r\n\t\tvar fromClass = isPassword ? this.options.typeVisibleClass : this.options.typePasswordClass;\r\n\t\tvar toClass = isPassword ? this.options.typePasswordClass : this.options.typeVisibleClass;\r\n\t\tvar inputType = isPassword ? 'password' : this.inputType;\r\n\r\n\t\tthis.element.setAttribute('type', inputType);\r\n\t\tthis.toggleButtonElement.innerHTML = isPassword ? this.options.toggleButtonPasswordContent : this.options.toggleButtonVisibleContent;\r\n\t\tthis.wrapperElement.classList.remove(fromClass);\r\n\t\tthis.wrapperElement.classList.add(toClass);\r\n\t};\r\n\r\n\tPasswordTogglefication.TYPES = {\r\n\t\tPASSWORD: 'password',\r\n\t\tVISIBLE: 'visible'\r\n\t}\r\n\r\n\tPasswordTogglefication.defaultOptions = {\r\n\t\twrapperElementType: 'div',\r\n\t\twrapperClass: 'password-togglefication',\r\n\t\ttypePasswordClass: 'password-togglefication-type-password',\r\n\t\ttypeVisibleClass: 'password-togglefication-type-visible',\r\n\t\ttoggleButtonClass: 'password-togglefication-button',\r\n\t\ttoggleButtonPasswordContent: Alkami.Localization.SiteText['PasswordTogglefication.Show'],\r\n\t\ttoggleButtonVisibleContent: Alkami.Localization.SiteText['PasswordTogglefication.Hide'],\r\n\t\tpasswordOnBlur: true,\r\n\t\tstartState: PasswordTogglefication.TYPES.PASSWORD,\r\n\t\ttoggleCallback: function() {} //noop\r\n\t};\r\n\r\n\tglobal.PasswordTogglefication = PasswordTogglefication;\r\n\r\n\tif (global.ko) {\r\n\t global.ko.bindingHandlers.passwordTogglefication = {\r\n\t init: function (element, valueAccessor) {\r\n\t var value = valueAccessor();\r\n\t new PasswordTogglefication(element, ko.unwrap(value));\r\n\t }\r\n\t }\r\n\t}\r\n})(window);\r\n","window.addEventListener(\"iris.init.start\", function(event) {\r\n const iris = event.detail.iris;\r\n const RegionSettings = iris.RegionSettings;\r\n const regionId = \"sitetext\";\r\n\r\n const region = new RegionSettings({\r\n \"calendar.dayofweekabbr.sunday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Sunday\"],\r\n \"calendar.dayofweekabbr.monday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Monday\"],\r\n \"calendar.dayofweekabbr.tuesday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Tuesday\"],\r\n \"calendar.dayofweekabbr.wednesday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Wednesday\"],\r\n \"calendar.dayofweekabbr.thursday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Thursday\"],\r\n \"calendar.dayofweekabbr.friday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Friday\"],\r\n \"calendar.dayofweekabbr.saturday\": Alkami.Localization.SiteText[\"jQuery.Day.TwoLetter.Saturday\"],\r\n \"calendar.month.january\": Alkami.Localization.SiteText[\"jQuery.Month.Full.January\"],\r\n \"calendar.month.february\": Alkami.Localization.SiteText[\"jQuery.Month.Full.February\"],\r\n \"calendar.month.march\": Alkami.Localization.SiteText[\"jQuery.Month.Full.March\"],\r\n \"calendar.month.april\": Alkami.Localization.SiteText[\"jQuery.Month.Full.April\"],\r\n \"calendar.month.may\": Alkami.Localization.SiteText[\"jQuery.Month.Full.May\"],\r\n \"calendar.month.june\": Alkami.Localization.SiteText[\"jQuery.Month.Full.June\"],\r\n \"calendar.month.july\": Alkami.Localization.SiteText[\"jQuery.Month.Full.July\"],\r\n \"calendar.month.august\": Alkami.Localization.SiteText[\"jQuery.Month.Full.August\"],\r\n \"calendar.month.september\": Alkami.Localization.SiteText[\"jQuery.Month.Full.September\"],\r\n \"calendar.month.october\": Alkami.Localization.SiteText[\"jQuery.Month.Full.October\"],\r\n \"calendar.month.november\": Alkami.Localization.SiteText[\"jQuery.Month.Full.November\"],\r\n \"calendar.month.december\": Alkami.Localization.SiteText[\"jQuery.Month.Full.December\"],\r\n \"calendar.monthabbr.january\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.January\"],\r\n \"calendar.monthabbr.february\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.February\"],\r\n \"calendar.monthabbr.march\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.March\"],\r\n \"calendar.monthabbr.april\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.April\"],\r\n \"calendar.monthabbr.may\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.May\"],\r\n \"calendar.monthabbr.june\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.June\"],\r\n \"calendar.monthabbr.july\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.July\"],\r\n \"calendar.monthabbr.august\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.August\"],\r\n \"calendar.monthabbr.september\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.September\"],\r\n \"calendar.monthabbr.october\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.October\"],\r\n \"calendar.monthabbr.november\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.November\"],\r\n \"calendar.monthabbr.december\": Alkami.Localization.SiteText[\"jQuery.Month.Abbr.December\"],\r\n \"contentheader.item.ascendinglabel\": Alkami.Localization.SiteText[\"Iris.ContentHeader.Item.AscendingLabel\"],\r\n \"contentheader.item.descendinglabel\": Alkami.Localization.SiteText[\"Iris.ContentHeader.Item.DescendingLabel\"],\r\n \"contentheader.item.neutrallabel\": Alkami.Localization.SiteText[\"Iris.ContentHeader.Item.NeutralLabel\"],\r\n \"contentheader.item.ascendingdirections\": Alkami.Localization.SiteText[\"Iris.ContentHeader.Item.AscendingDirections\"],\r\n \"contentheader.item.descendingdirections\": Alkami.Localization.SiteText[\"Iris.ContentHeader.Item.DescendingDirections\"],\r\n \"dropdown.sr.focused\": Alkami.Localization.SiteText[\"Iris.Dropdown.ScreenReader.Focused\"],\r\n \"dropdown.sr.selected\": Alkami.Localization.SiteText[\"Iris.Dropdown.ScreenReader.Selected\"],\r\n \"dropdown.sr.unselected\": Alkami.Localization.SiteText[\"Iris.Dropdown.ScreenReader.Unselected\"],\r\n \"dropdown.sr.active\": Alkami.Localization.SiteText[\"Iris.Dropdown.ScreenReader.Active\"],\r\n \"dropdown.sr.disabled\": Alkami.Localization.SiteText[\"Iris.Dropdown.ScreenReader.Disabled\"],\r\n \"dropdown.multiselect.selected\": Alkami.Localization.SiteText[\"Iris.Dropdown.Multiselect.Selected\"],\r\n \"list.sr.active\": Alkami.Localization.SiteText[\"Iris.List.ScreenReader.Active\"],\r\n \"list.sr.disabled\": Alkami.Localization.SiteText[\"Iris.List.ScreenReader.Disabled\"],\r\n \"list.sr.selected\": Alkami.Localization.SiteText[\"Iris.List.ScreenReader.Selected\"],\r\n \"list.sr.unselected\": Alkami.Localization.SiteText[\"Iris.List.ScreenReader.Unselected\"],\r\n \"tab.sr.selected\": Alkami.Localization.SiteText[\"Iris.Tab.ScreenReader.Unselected\"]\r\n });\r\n\r\n RegionSettings.regions[regionId] = region;\r\n RegionSettings.defaultRegionId = regionId;\r\n});\r\n","\"use strict\";\n((global) => {\n global.Alkami = global.Alkami || {};\n global.Alkami.Globals = global.Alkami.Globals || {};\n class FeatureDetection {\n constructor(features = FeatureDetection.features, element = document.documentElement) {\n this.features = features;\n this.element = element;\n }\n detectFeatures() {\n this.features.forEach(([name, fn]) => {\n let value = fn();\n if (typeof value === \"boolean\") {\n value = value ? \"\" : null;\n }\n if (value !== null) {\n this.element.setAttribute(name, value);\n }\n });\n }\n clearAttributes() {\n this.features.forEach((tuple) => {\n const name = tuple[0];\n this.element.removeAttribute(name);\n });\n }\n refreshAttributes() {\n this.clearAttributes();\n this.detectFeatures();\n }\n }\n FeatureDetection.features = [\n ['data-native-application', Alkami.Helpers.isNativeApplication],\n ['data-native-tablet-application', Alkami.Helpers.isNativeTabletApplication],\n ['data-native-menu', Alkami.Helpers.hasNativeMenu],\n ['data-native-pin-support', Alkami.Helpers.hasNativePinSupport],\n ['data-android', Alkami.Helpers.isAndroidBrowser],\n ['data-ios', Alkami.Helpers.isIOSBrowser],\n ['data-ipad', Alkami.Helpers.isIPadBrowser],\n ['data-mobile-page', Alkami.Helpers.isMobileUrl],\n ['data-authenticated', () => !!Alkami.Globals.isAuthenticated],\n ];\n const instance = new FeatureDetection();\n instance.detectFeatures();\n global.Alkami.FeatureDetection = instance;\n})(window);\n\n\n"]}