{"version":3,"sources":["main.js"],"names":["Login","window","$","jQuery","loginBox","loginBtn","loginDropdown","init","closedEyeToggle","document","querySelector","openedEyeToggle","style","display","password","getElementById","addEventListener","type","getAttribute","setAttribute","focus","mClosedEyeToggle","mOpenedEyeToggle","mPassword","on","event","preventDefault","toggleLogin","click","is","target","has","length","closeLogin","hasClass","openLogin","blur","addClass","slideDown","children","removeClass","find","slideUp","Menu","body","content","mainMenu","menuRow","siteHeader","toggleMobileMenuBtn","menuTier2LI","menuTier2Link","mobileMenuIcons","breakpoint","browserWidth","getBrowserWidth","isNavOpen","bindMenu","resize","unbindMobile","desktopHandlers","unbindDesktop","mobileHandlers","off","mouseenter","currentTarget","siblings","stop","mouseleave","menuLI","parent","toggleClass","toggleMobileMenu","keypress","keycode","keyCode","which","mobileSubMenu","e","closeMobileMenu","openMobileMenu","calculateMenuHeight","expandedMenu","classList","contains","clickedLI","closest","slideToggle","headerH","outerHeight","alertH","totalH","alerts","each","css","innerWidth","ScrollToTop","scrollTopBtn","view","timeoutKey","vBreakpoint","fadeInOut","checkScroll","animate","scrollTop","clearTimeout","setTimeout","fadeIn","fadeOut","ImageLoader","options","queue","backgroundQueue","lazyImageObserver","lazyBgObserver","getImagesToLazyLoad","abort","onContentLoaded","setGenericPlaceholder","forEach","lazyImage","observe","lazyBg","querySelectorAll","genericImagePlaceholder","img","genericBgPlaceholder","bg","backgroundColor","IntersectionObserver","entries","observer","entry","isIntersecting","src","dataset","srcset","remove","unobserve","i","MapMarker","model","map","bounds","onMarkerClick","allInfoWindows","marker","locations","greatestMarkerDistance","position","google","maps","LatLng","lat","long","icon","Marker","extend","fitBounds","toRad","value","Math","PI","calcDistance","lat1","lng1","lat2","lng2","earth","dLat","dLng","a","sin","cos","c","atan2","sqrt","distance","j","listener","addListener","getZoom","setZoom","removeListener","link","hoursets","title","text","hours","startDay","endDay","openTime","closeTime","infowindow","InfoWindow","name","street","cityStateZip","address","phone","push","close","open","id","closeWindow","openWindow","GoogleMap","container","mapBounds","markers","styling","searchedLocation","searchedMarker","LatLngBounds","Map","disableDefaultUI","zoomControl","gestureHandling","styles","zoomListener","location","setupMarker","linkMarker","animation","Animation","DROP","unbind","bind","index","locationID","Array","isArray","makeMarker","geocoder","Geocoder","geoModel","geocode","results","status","GeocoderStatus","OK","console","warn","geometry","lng","lon","iconResource","nearestMarker","Locations","setPageHeight","autocomplete","places","Autocomplete","pinOptions","data","attr","top","locationsMap","itemTop","html","main","set","resetMap","change","filterLocations","next","placesAutocomplete","showLocation","reloadMap","streetAddress","hideLocation","item","reset","toFixed","selectedOption","optionSelected","locationFilter","val","replace","allLocations","types","show","includes","sortLocations","hide","sort","b","place","getPlace","locationsH","locationDetails","locationSearch","locationItems","viewDetailsBtn","detailsBox","closeDetailsBtn","href","jsonFile","toggleLocationDetails","closeDetailBox","OpenDetailsOnPageLoad","clickedBranch","openedBranches","pullData","activeBranch","locationDetailPage","getJSON","done","jsonData","undefined","JSON","parse","photo","googleMapsLink","callBtn","locationType","lobbyHours","driveThruHours","availableServices","communityInfo","cleanPhoneNum","city","state","zip","branchServices","fail","jqxhr","textStatus","error","err","log","url","detailBtn","indexOf","Alerts","alert","alertToggleBtn","toggleAlert","openAlert","closeAlert","AnchorJump","anchorBtns","getID","scrollToAnchor","anchor","offset","Accordions","accordionTitle","toggleAccordion","accordion","accordionContent","accordionArrow","openAccordions","responsiveTable","DataTable","responsive","paging","searching","ordering","info","autoWidth","ComparisonCards","compCards","slick_slider","settings","slidesToShow","slidesToScroll","infinite","arrows","nextArrow","prevArrow","slick","width","FormLabelAnimation","formFields","field","hasFocus","checkIfEmpty","NewsEventsItem","newsLinks","addHoverState","removeHoverState","ResponsiveTables","SpeedBump","speedbumpLink","acceptBtn","denyBtn","speedbumpModal","str","createSpeedBumpModal","bindButtons","returnToSite","closeBtn","allowLink","prepend","AndroidAppBanner","deviceIsAndroid","bannerIsNotDismissed","localStorage","setItem","Date","now","userAgent","navigator","vendor","opera","test","expiration","getItem","parseInt","MainScripts","svg4everybody","imageLoader","initialize","ready","displayLocations","documentElement"],"mappings":"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","file":"main.js","sourcesContent":["class Login {\n\n\tconstructor() {\n\t\tif (!window.$) { window.$ = jQuery; }\n\n\t\t// dom elements\n\t\tthis.loginBox = $('header .login');\n\t\tthis.loginBtn = $('header .login-btn');\n\t\tthis.loginDropdown = $('header .login .dropdown');\n\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\t// event listener toggle login password (desktop)\n\t\tconst closedEyeToggle = document.querySelector(\".desktopClosedEyeToggle\");\n\t\tconst openedEyeToggle = document.querySelector(\".desktopOpenedEyeToggle\");\n\t\topenedEyeToggle.style.display = \"none\";\n\t\tconst password = document.getElementById(\"desktopPassField\");\n\n\t\tclosedEyeToggle.addEventListener(\"click\", function () {\n\t\t\tconst type = password.getAttribute(\"type\") === \"password\" ? \"text\" : \"password\";\n\t\t\tpassword.setAttribute(\"type\", type);\n\t\t\tclosedEyeToggle.style.display = \"none\";\n\t\t\topenedEyeToggle.style.display = \"block\";\n\t\t\tpassword.focus();\n\t\t});\n\n\t\topenedEyeToggle.addEventListener(\"click\", function () {\n\t\t\tconst type = password.getAttribute(\"type\") === \"password\" ? \"text\" : \"password\";\n\t\t\tpassword.setAttribute(\"type\", type);\n\t\t\tclosedEyeToggle.style.display = \"block\";\n\t\t\topenedEyeToggle.style.display = \"none\";\n\t\t\tpassword.focus();\n\t\t});\n\n\t\t// event listener toggle login password (mobile)\n\t\tconst mClosedEyeToggle = document.querySelector(\".mobileClosedEyeToggle\");\n\t\tconst mOpenedEyeToggle = document.querySelector(\".mobileOpenedEyeToggle\");\n\t\tmOpenedEyeToggle.style.display = \"none\";\n\t\tconst mPassword = document.getElementById(\"mobilePassField\");\n\n\t\tmClosedEyeToggle.addEventListener(\"click\", function () {\n\t\t\tconst type = mPassword.getAttribute(\"type\") === \"password\" ? \"text\" : \"password\";\n\t\t\tmPassword.setAttribute(\"type\", type);\n\t\t\tmClosedEyeToggle.style.display = \"none\";\n\t\t\tmOpenedEyeToggle.style.display = \"block\";\n\t\t\tmPassword.focus();\n\t\t});\n\n\t\tmOpenedEyeToggle.addEventListener(\"click\", function () {\n\t\t\tconst type = mPassword.getAttribute(\"type\") === \"password\" ? \"text\" : \"password\";\n\t\t\tmPassword.setAttribute(\"type\", type);\n\t\t\tmClosedEyeToggle.style.display = \"block\";\n\t\t\tmOpenedEyeToggle.style.display = \"none\";\n\t\t\tmPassword.focus();\n\t\t});\n\n\t\t// enable login submit input for desktop\n\t\t// const desktopLoginField = document.getElementById(\"desktopLoginField\");\n\t\t// const desktopPassField = document.getElementById(\"desktopPassField\");\n\t\t// [desktopLoginField, desktopPassField].forEach(function(element) {\n\t\t// \telement.addEventListener(\"keyup\", function () {\n\t\t// \t\tconst formElements = document.forms.desktopLogin.elements;\n\t\t// \t\tlet submitActive = true;\n\t\n\t\t// \t\tfor (let i = 0; i < formElements.length; i++) {\n\t\t// \t\t\tif (formElements[i].value.length == 0) submitActive = false;\n\t\t// \t\t}\n\t\n\t\t// \t\tif (submitActive) {\n\t\t// \t\t\tdocument.getElementById(\"desktopSubmit\").disabled = false;\n\t\t// \t\t} else {\n\t\t// \t\t\tdocument.getElementById(\"desktopSubmit\").disabled = \"disabled\";\n\t\t// \t\t}\n\t\t// \t});\n\t\t// });\n\n\t\t// enable login submit input for mobile\n\t\t// const mobileLoginField = document.getElementById(\"mobileLoginField\");\n\t\t// const mobilePassField = document.getElementById(\"mobilePassField\");\n\t\t// [mobileLoginField, mobilePassField].forEach(function(element) {\n\t\t// \telement.addEventListener(\"keyup\", function () {\n\t\t// \t\tconst formElements = document.forms.mobileLogin.elements;\n\t\t// \t\tlet submitActive = true;\n\n\t\t// \t\tfor (let i = 0; i < formElements.length; i++) {\n\t\t// \t\t\tif (formElements[i].value.length == 0) submitActive = false;\n\t\t// \t\t}\n\n\t\t// \t\tif (submitActive) {\n\t\t// \t\t\tdocument.getElementById(\"mobileSubmit\").disabled = false;\n\t\t// \t\t} else {\n\t\t// \t\t\tdocument.getElementById(\"mobileSubmit\").disabled = \"disabled\";\n\t\t// \t\t}\n\t\t// \t});\n\t\t// });\n\n\t\t// Handle if login btn was clicked\n\t\tthis.loginBtn.on('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggleLogin($(this));\n\t\t});\n\n\t\t// Handle if clicked outside of login dropdown, close it\n\t\t$(document).click( (event) => {\n\n\t\t if (!this.loginBox.is(event.target) && this.loginBox.has(event.target).length === 0) \n\t\t {\n\t\t this.closeLogin();\n\t\t }\n\t\t});\n\t}\n\n\ttoggleLogin(event) {\n\t\tif (!this.loginBox.hasClass('open')) {\n\t\t\tthis.openLogin();\n\t\t}\n\t\telse {\n\t\t\tthis.closeLogin();\n\t\t}\n\t\t\n\t\t$(event.target).blur();\n\t}\n\n\topenLogin() {\n\t\tthis.loginBox.addClass('open');\n\t\tthis.loginDropdown.slideDown(300, () => {\n\t\t\tthis.loginBtn.children('.fas').removeClass('fa-chevron-down').addClass('fa-chevron-up');\n\t\t\tthis.loginDropdown.find('input[id^=\"kdloginfield\"]').focus();\t\t\t\t\t\n\t\t});\n\t}\n\n\tcloseLogin() {\n\t\tthis.loginBox.removeClass('open');\n\t\tthis.loginDropdown.slideUp(300, () => {\n\t\t\tthis.loginBtn.children('.fas').removeClass('fa-chevron-up').addClass('fa-chevron-down');\t\t\t\t\t\n\t\t});\n\t}\n}\n\nclass Menu {\n\n\tconstructor() {\n\t\t// dom elements\n\t\tthis.body = $('body');\n\t\tthis.content = $('#content');\n\t\tthis.mainMenu = $('.main-menu');\n\t\tthis.menuRow = $('header.site-header .menu-row');\n\t\tthis.siteHeader = $('header.site-header');\n\t\tthis.toggleMobileMenuBtn = $('.toggle-mobile-menu');\n\t\tthis.menuTier2LI = $('.main-menu li.tier2.has-children');\n\t\tthis.menuTier2Link = $('.main-menu li.tier2.has-children > a');\n\t\tthis.mobileMenuIcons = $('.main-menu li .icon');\n\n\t\t// variables/indicators\n\t\tthis.breakpoint = 992;\n\t\tthis.browserWidth = this.getBrowserWidth();\n\t\tthis.isNavOpen = false;\n\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\t// Handle rebinding elements if page resized\n\t\tthis.bindMenu();\n\n\t\t$(window).resize( () => {\n\t\t\tthis.bindMenu();\n\t\t});\n\t}\n\n\t// determines if desktop or mobile and binds appropriate menu elements\n\tbindMenu() {\n\t\tthis.browserWidth = this.getBrowserWidth();\n\n\t\tif (this.browserWidth >= this.breakpoint) {\n\t\t\tthis.unbindMobile();\n\t\t\tthis.desktopHandlers();\n\t\t}\n\t\telse {\n\t\t\tthis.unbindDesktop();\n\t\t\tthis.mobileHandlers();\n\t\t}\n\t}\n\n\tdesktopHandlers() {\n\n // Desktop Menu Hovered Over\n this.menuTier2LI.off('mouseenter mouseleave').on({\n mouseenter: (event) => {\n $(event.currentTarget).siblings('.hover').removeClass('hover').children('.dropdown').stop().slideUp().removeClass('open');\n $(event.currentTarget).addClass('hover');\n $(event.currentTarget).children('.dropdown').stop().slideDown().addClass('open');\n },\n mouseleave: (event) => {\n $(event.currentTarget).removeClass('hover');\n $(event.currentTarget).children('.dropdown').stop().slideUp().removeClass('open');\n }\n });\n\n // Keyboard Used to focus\n this.menuTier2Link.on({\n focus: (event) => {\n const menuLI = $(event.currentTarget).parent('li.has-children');\n\n // close any open menus first\n menuLI.siblings('.has-children.hover').removeClass('hover').children('.dropdown').stop().slideUp().removeClass('open');\n\n // now open focused menu item\n menuLI.addClass('hover').children('.dropdown').stop().slideDown().addClass('open');\n }\n });\n\t}\n\n\n\tmobileHandlers() {\n\t\t\n\t\t// Mobile Menu Btn clicked\n\t\tthis.toggleMobileMenuBtn.off('click').on('click', (event) => {\n\t\t\t$(event.currentTarget).find('.fas').toggleClass('fa-bars fa-times');\n\t\t\tthis.toggleMobileMenu();\n\t\t});\n\n\t\t// Mobile Menu Btn Enter Key Pressed\n\t\t$('.toggle-mobile-menu').off('keypress').keypress( (event) => {\n\t\t const keycode = (event.keyCode ? event.keyCode : event.which);\n\n\t\t if( keycode == '13' || keycode == '32') {\n\t\t this.toggleMobileMenuBtn.find('.fas').toggleClass('fa-bars fa-times');\n\t\t this.toggleMobileMenu(); \n\t\t }\n\t\t});\n\n\t\t// Mobile Item's Icon clicked to toggle submenu\n\t\tthis.mobileMenuIcons.off('click').on('click', (event) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.mobileSubMenu(event);\n\t\t});\n\n\t\t// Mobile Item's Icon trigered with keyboard \n\t\tthis.mobileMenuIcons.off('keypress').keypress( (e) => {\n\t\t const keycode = (e.keyCode ? e.keyCode : e.which);\n\n\t\t if( keycode == '13' || keycode == '32') {\n\t\t this.mobileSubMenu(event);\n\t\t }\n\t\t});\n\n\t\t// Close mobile menu when clicking outside of the menu\n\t\tthis.content.on('click', (event) => {\n\t\t\tif ($('.toggle-mobile-menu').find('.fas').hasClass('fa-times')) {\n\t\t\t\t$('.toggle-mobile-menu').find('.fas').toggleClass('fa-times fa-bars');\n\t\t\t\tthis.closeMobileMenu();\n\t\t\t}\n\t\t});\n\t}\n\n\tunbindDesktop() {\n\t\t$('.main-menu li.tier2.has-children').off('mouseenter mouseleave');\n\t}\n\n\tunbindMobile() {\n\t\tthis.mobileMenuIcons.off('click');\n\t\tthis.mobileMenuIcons.off('keypress');\n\t}\n\n\ttoggleMobileMenu() {\n\n\t\tif (!this.isNavOpen) {\n\t\t\tthis.openMobileMenu();\n\t\t}\n\t\telse {\n\t\t\tthis.closeMobileMenu();\n\t\t}\n\n\t\tthis.calculateMenuHeight();\t\t\n\t}\n\n\topenMobileMenu() {\n\t\tthis.body.addClass('nav-open');\n\t\tthis.mainMenu.slideDown();\n\t\t// mobile menu, expand by default\n\t\t//if (this.mainMenu.find('li.tier1.ExpandByDefault').length != 0) {\n\t\tconst expandedMenu = this.mainMenu.find('li.tier1.ExpandByDefault');\n\t\tif (expandedMenu.length != 0) {\n\t\t\tif (!expandedMenu[0].classList.contains('open')) { // note we will only expand the first one we find. mobile only allows 1 open at a time.\n\t\t\t\tthis.mainMenu.find('li.tier1.ExpandByDefault > a > .icon').click();\n\t\t\t}\n\t\t}\n\t\t/* else falls back to auto-expanding the first entry. don't need this anymore since we can specify\n\t\telse {\n\t\t\tif (this.mainMenu.find('li.tier1.open').length === 0) {\n\t\t\t\tthis.mobileMenuIcons[0].click();\n\t\t\t}\n\t\t}\n\t\t*/\n\t\tthis.isNavOpen = true;\n\t}\n\n\tcloseMobileMenu() {\n\t\tthis.body.removeClass('nav-open');\n\t\tthis.mainMenu.slideUp();\n\t\tthis.isNavOpen = false;\n\t}\n\n\t// Handles toggling a mobile menu item\n\tmobileSubMenu(event) {\n\t\tconst clickedLI = $(event.target).closest('li');\n\t\t\n\t\t$(event.currentTarget).children('.fas').toggleClass('fa-plus fa-minus');\n\t\tclickedLI.toggleClass('open').children('.dropdown').slideToggle(300);\n\n\t\t// close open menu items\n\t\tclickedLI.siblings().removeClass('open').find('.dropdown').slideUp(300);\n\t\tclickedLI.siblings().find('.icon').children('.fas').removeClass('fa-minus').addClass('fa-plus');\n\t}\n\n\t// when mobile menu is open, calculate height of any alerts and header and set CSS so only menu is scrollable. rest of site is unscrollable during menu open\n\tcalculateMenuHeight() {\n\t\tconst headerH = this.siteHeader.find('> .container > .flex-container').outerHeight(true);\n\t\tlet alertH = 0,\n\t\t\ttotalH = 0;\n\n\t\tconst alerts = $('.alert');\n\t\tif (alerts.length) {\n\t\t\talerts.each( function() {\n\t\t\t\talertH += $(this).outerHeight(true);\n\t\t\t});\n\t\t}\n\t\ttotalH = headerH + alertH;\n\n\t\tthis.menuRow.css('max-height', 'calc(100vh - '+totalH+'px)');\n\t}\n\n\tresetMenu() {\n\t\tthis.menuRow.css('height', 'auto');\n\t}\n\n\tgetBrowserWidth() {\n\t\treturn window.innerWidth;\n\t}\n\n}\n\nclass ScrollToTop {\n\n constructor() {\n // dom elements & variables/indicators\n this.scrollTopBtn = $('.scrollToTop');\n this.view = $(window);\n this.timeoutKey = -1;\n this.vBreakpoint = 500;\n\n this.init();\n }\n\n init() {\n\n this.fadeInOut();\n\t this.checkScroll();\n\n // Handle when Scroll Btn clicked\n \tthis.scrollTopBtn.on('click', () => {\n \t $('html, body').stop().animate({scrollTop: 0}, 500, 'linear');\n \t return false;\n \t});\n\n }\n\n // if you scroll 500px down on page, show scrollToTop btn, else hide it\n fadeInOut() {\n\n\t $(document).on('scroll', () => {\n\t if(this.timeoutKey) {\n\t window.clearTimeout(this.timeoutKey);\n\t }\n\n\t this.timeoutKey = window.setTimeout( () => {\n\t this.checkScroll();\n\t }, 100);\n\t });\n\n }\n\n checkScroll() {\n if (this.view.scrollTop() > this.vBreakpoint) {\n this.scrollTopBtn.fadeIn();\n }\n else {\n this.scrollTopBtn.fadeOut();\n }\n }\n\n\n}\n\n/**\n * Lazy loads images that are set up properly.\n * For img tags: \n * \n \n For BG Images:
\n\n more info: https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video\n */\nclass ImageLoader {\n\n constructor(options = {}) {\n this.queue = [];\n this.backgroundQueue = [];\n this.lazyImageObserver = null;\n this.lazyBgObserver = null;\n this.options = options;\n }\n\n initialize() {\n this.getImagesToLazyLoad();\n\n if (!(\"IntersectionObserver\" in window)) {\n this.abort();\n return;\n }\n\n this.onContentLoaded();\n this.setGenericPlaceholder();\n\n this.queue.forEach((lazyImage) => {\n this.lazyImageObserver.observe(lazyImage);\n });\n\n this.backgroundQueue.forEach((lazyBg) => {\n this.lazyBgObserver.observe(lazyBg);\n });\n }\n\n getImagesToLazyLoad() {\n this.queue = document.querySelectorAll('.img-load-lazy');\n this.backgroundQueue = document.querySelectorAll('.lazy-load-bg');\n }\n\n setGenericPlaceholder() {\n if (this.options.genericImagePlaceholder) {\n this.queue.forEach((img) => {\n img.setAttribute('src', this.options.genericImagePlaceholder);\n });\n }\n\n if (this.options.genericBgPlaceholder) {\n this.backgroundQueue.forEach((bg) => {\n bg.style.backgroundColor = this.options.genericBgPlaceholder;\n });\n }\n }\n\n onContentLoaded() {\n this.lazyImageObserver = new IntersectionObserver((entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n let lazyImage = entry.target;\n lazyImage.src = lazyImage.dataset.src;\n lazyImage.srcset = lazyImage.dataset.srcset;\n lazyImage.classList.remove('img-load-lazy');\n this.lazyImageObserver.unobserve(lazyImage);\n }\n });\n });\n\n this.lazyBgObserver = new IntersectionObserver((entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n entry.target.classList.remove('lazy-load-bg');\n this.lazyBgObserver.unobserve(entry.target);\n }\n });\n });\n }\n\n abort() {\n for (let i = 0; i < this.queue.length; i++) {\n this.queue[i].setAttribute('src', this.queue[i].getAttribute('data-src'));\n this.queue[i].classList.remove('img-load-lazy');\n }\n\n for (let i = 0; i < this.backgroundQueue.length; i++) {\n this.backgroundQueue[i].classList.remove('lazy-load-bg');\n }\n }\n\n}\n\nfunction MapMarker(model, map, bounds, onMarkerClick, allInfoWindows) {\n let marker = null;\n let locations = $('.locations-listings article.enable-on-map');\n let greatestMarkerDistance = -1;\n\n const options = {};\n options.position = new google.maps.LatLng(model.lat, model.long);\n options.map = map;\n\n if (model.icon) {\n options.icon = model.icon;\n }\n\n marker = new google.maps.Marker(options);\n \n bounds.extend(marker.position);\n map.fitBounds(bounds);\n\n function toRad(value) {\n return value * Math.PI / 180;\n }\n \n function calcDistance(lat1, lng1, lat2, lng2) {\n var earth = 6371, //km\n dLat = toRad(lat2 - lat1),\n dLng = toRad(lng2 - lng1);\n\n lat1 = toRad(lat1);\n lat2 = toRad(lat2);\n\n var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLng/2) * Math.sin(dLng/2) * Math.cos(lat1) * Math.cos(lat2);\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n var distance = (earth * c) / 1.609; //convert from km to miles\n\n return distance;\n }\n\n if (locations.length < 6) {\n // check greatest distance between markers shown\n for (var i = 0; i < locations.length; i++) {\n for (var j = 1; j < locations.length; j++) {\n var lat1 = locations[i].getAttribute(\"data-lat\"),\n lng1 = locations[i].getAttribute(\"data-lng\"),\n lat2 = locations[j].getAttribute(\"data-lat\"),\n lng2 = locations[j].getAttribute(\"data-lng\"),\n distance;\n\n distance = calcDistance(lat1, lng1, lat2, lng2);\n\n if (distance > greatestMarkerDistance) {\n greatestMarkerDistance = distance;\n }\n }\n }\n\n // if the greatest distance is less than half a mile zoom out \n if (greatestMarkerDistance <= 0.5) {\n var listener = google.maps.event.addListener(map, \"idle\", function() { \n if (map.getZoom() > 15) map.setZoom(15); \n google.maps.event.removeListener(listener); \n });\n }\n }\n\n let link;\n if (model.link != null && model.link != \"\") {\n link = `Get Directions

`;\n } else {\n link = \"\";\n }\n\n this.link = link;\n if (model.hoursets) {\n model.hoursets.each(function () {\n var title = $(this).find('.hourset-title').text();\n var hours = $('.hour', this);\n\n if (hours) {\n hours.each(function () {\n var startDay = $(this).find('.start-day').text();\n var endDay = $(this).find('.end-day').text();\n var openTime = $(this).find('.open-time').text();\n var closeTime = $(this).find('.close-time').text();\n });\n }\n });\n }\n let infowindow = new google.maps.InfoWindow({\n content: `\n
\n

${model.name}

\n
\n
${model.street}
\n
${model.cityStateZip}
\n
\n \n `\n });\n\n this.infowindow = infowindow;\n\n // need to save instance of each infoWindow so they can be closed\n allInfoWindows.push(infowindow);\n\n marker.addListener('click', () => {\n // close all infoWindows before opening new one\n for (let i = 0; i < allInfoWindows.length; i++) {\n allInfoWindows[i].close();\n }\n \n infowindow.open(map, marker);\n onMarkerClick(model.id, marker);\n });\n\n this.id = model.id;\n\n this.closeWindow = function () {\n $('#' + this.id).removeClass('active');\n infowindow.close();\n };\n\n this.openWindow = function () {\n infowindow.open(map, marker);\n };\n}\n\n/*\n :: Custom Google Map\n*/\n\nclass GoogleMap {\n\n constructor(options) {\n this.locations = options.locations || [/* {address: string || [lat,lon], name: string, link: string, icon: string(img src)}*/];\n this.container = options.container || '#not_available';\n this.map = null;\n this.mapBounds = null;\n this.markers = [];\n this.styling = options.styling || false;\n this.onMarkerClick = options.onMarkerClick || function () { };\n this.allInfoWindows = [];\n this.searchedLocation = options.searchedLocation;\n this.searchedMarker = null;\n }\n\n main() {\n this.container = document.querySelector(this.container);\n\n if (!this.container) {\n return;\n }\n\n this.mapBounds = new google.maps.LatLngBounds();\n\n // add pin for searched location to bounds\n if (this.searchedLocation.position) {\n this.mapBounds.extend(this.searchedLocation.position);\n }\n\n\n this.map = new google.maps.Map(this.container, {\n disableDefaultUI: true,\n zoomControl: true,\n gestureHandling: 'cooperative',\n styles: this.styling\n });\n\n this.map.fitBounds(this.mapBounds);\n\n // Initialize google maps bounding box.\n if (this.locations.length == 0) {\n var zoomListener = google.maps.event.addListener(this.map, \"idle\", () => {\n this.map.setZoom(13);\n google.maps.event.removeListener(zoomListener);\n });\n }\n else {\n let listener = google.maps.event.addListener(this.map, \"idle\", () => {\n this.map.fitBounds(this.mapBounds);\n google.maps.event.removeListener(listener);\n });\n }\n\n for (let location of this.locations) {\n this.setupMarker(location, this.allInfoWindows, location.id);\n this.linkMarker(location.id, this.markers);\n }\n\n // drop pin at searched location (if it exists)\n // searched location marker\n if (this.searchedLocation.position) {\n this.searchedMarker = new google.maps.Marker({\n position: this.searchedLocation.position,\n map: this.map,\n animation: google.maps.Animation.DROP,\n // icon: 'ResourcePackages/ST/library/img/CUSTOM_MARKER_FILE.PNG', // change this resource to the custom marker\n });\n }\n }\n\n linkMarker(id, markers) {\n $('.location-item.enable-on-map').unbind('click');\n\n $('.location-item.enable-on-map').bind('click', function () {\n let index = $('.location-item.enable-on-map').index($(this));\n\n if ($(this).hasClass('active')) {\n $(this).removeClass('active');\n }\n\n else {\n $('.location-item.active').removeClass('active');\n $(this).addClass('active');\n }\n\n // close all open infowindows\n for (let marker of markers) {\n marker.closeWindow();\n }\n\n // open infowindow for this location\n $(this).addClass('active');\n markers[index].openWindow();\n });\n }\n\n // Convert address string to lat long object\n setupMarker(location, allInfoWindows, locationID) {\n\n // Lat and Long was provided for the location address\n if (Array.isArray(location.address)) {\n this.makeMarker(location, location.address[0], location.address[1], allInfoWindows, locationID);\n return;\n }\n\n // Address string was provided\n if (typeof location.address == \"string\") {\n const geocoder = new google.maps.Geocoder();\n const geoModel = {\n 'address': location.address\n };\n\n geocoder.geocode(geoModel, (results, status) => {\n if (status != google.maps.GeocoderStatus.OK) {\n console.warn(`Google maps Geocode: Can't convert ${location.address} to lat/lon: ${status}`);\n return;\n }\n\n this.makeMarker(location, results[0].geometry.location.lat(), results[0].geometry.location.lng(), allInfoWindows);\n });\n\n return;\n }\n\n // Error, or nothing was provided\n console.warn(`Map Marker address for ${location.name} is invalid or not set`);\n }\n\n // bank location markers\n makeMarker(location, lat, lon, allInfoWindows) {\n let marker = null;\n let iconResource = '/public/library/img/location-marker.png';\n\n if(location.nearestMarker) {\n iconResource = '/public/library/img/location-marker.png';\n }\n\n marker = new MapMarker({\n name: location.name,\n address: location.address,\n street: location.street,\n cityStateZip: location.cityStateZip,\n phone: location.phone,\n link: location.link,\n icon: iconResource, // change this resource to the custom marker\n lat: lat,\n long: lon,\n id: location.id\n }, this.map, this.mapBounds, this.onMarkerClick, allInfoWindows);\n\n this.markers.push(marker);\n }\n\n}\n\nclass Locations {\n\n\n\tstatic displayLocations() {\n\t\t\n\t\t// for locations pages, adjust page-wrapper to match locations height to avoid gaps on high res monitors\n\t\tsetPageHeight();\n\t\t\n\t\tconst locations = $('.enable-on-map');\n\t\tconst map = $('#map');\n\t\tvar autocomplete = new google.maps.places.Autocomplete(document.getElementById('locationInput'));\n\n\t\tlet pinOptions = {},\n\t\t\tlat,\n\t\t\tlng;\n\n\t\tif (!map.length || !locations.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet data = [];\n\t\tlet address;\n\t\tlocations.each(function () {\n\t\t\t// If a lat and long was provided, use that.\n\t\t\t// If not, then use the address string\n\t\t\tif ($(this).attr('data-lat') && $(this).attr('data-lng')) {\n\t\t\t\taddress = [$(this).attr('data-lat'), $(this).attr('data-lng')];\n\t\t\t} else {\n\t\t\t\taddress = $(this).attr('data-address');\n\t\t\t}\n\n\t\t\t// save items position in list as an attribute to use for marker clicks\n\t\t\t$(this).attr('data-top', $(this).position().top);\n\n\t\t\tdata.push({\n\t\t\t\taddress: address,\n\t\t\t\tstreet: $(this).find('.street').text(),\n\t\t\t\tcityStateZip: $(this).find('.cityStateZip').text(),\n\t\t\t\tname: $(this).find('.location-title').text(),\n\t\t\t\tlink: $(this).attr('data-url'),\n\t\t\t\tphone: $(this).find('.phone a').text(),\n\t\t\t\t// hoursets: $('.hourset', this),\n\t\t\t\tid: $(this).attr('id')\n\t\t\t});\n\t\t});\n\n\t\tvar locationsMap = new GoogleMap({\n\t\t\tlocations: data,\n\t\t\tcontainer: '#map',\n\t\t\tonMarkerClick: (id, marker) => {\n\t\t\t\t$('.location-item.active').removeClass('active');\n\t\t\t\t$('#' + id).addClass('active');\n\n\t\t\t\t// animate locations to item selected\n\t\t\t\tlet itemTop = $('#' + id).attr('data-top');\n\t\t\t\t$('.locations-pane').animate({\n\t\t\t scrollTop: itemTop - 30\n\t\t\t }, 400);\n\n\t\t\t\t// close detail boxes\n\t\t\t\t$('.location-search .location-details').slideUp(300);\n\t\t\t\t$('.location-item.details-open').removeClass('details-open').find('.view-details-btn').removeClass('open').children('.detailBtnText').html('VIEW BRANCH DETAILS').siblings('.icon').removeClass('fa-times').addClass('fa-chevron-right');\n\t\t\t\t$('.location-item.details-open .view-details-btn').removeClass('open').children('.detailBtnText').html('VIEW BRANCH DETAILS').siblings('.icon').removeClass('fa-times').addClass('fa-chevron-right');\n\n\t\t\t},\n\t\t\tsearchedLocation: pinOptions\n\t\t});\n\n\t\tlocationsMap.main();\n\n\t\t$('#locationInput').on('change', event => {\n\t\t\tif (event.target.value === \"\") {\n\t\t\t\tautocomplete.set('place', {});\n\t\t\t\tresetMap();\n\t\t\t}\n\t\t});\n\t\t\n\t\t// utilize Google Places API to filter locations within a radius\n\t\tif($('#map').length != 0){\n\n $('select.location-type').change(function () {\n\t\t\t\tfilterLocations($(this));\n\t\t\t\t$(this).blur().next().focus();\n\t\t\t});\n\n placesAutocomplete();\n\t\t}\n\n\t\tfunction resetMap() {\n\t\t\t// reset location data, show all locations\n\t\t\tpinOptions = {};\n\t\t\tlat = '';\n\t\t\tlat = '';\n\t\t\tdocument.querySelectorAll('.location-item').forEach(location => {\n\t\t\t\t// look at the call parameters before using the\n\t\t\t\t// showLocation() method\n\t\t\t\tshowLocation($(location),'',true);\n\t\t\t});\n\n\t\t\treloadMap();\n\t\t\tfilterLocations();\n\t\t}\n\t\t\n\t\tfunction reloadMap() {\n\t\t\tif (!map.length || !locations.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// reset shown locations based on filter\n\t\t\tdata = [];\n\t\t\tlet address, streetAddress;\n\n\t\t\t$('.enable-on-map').each(function () {\n\t\t\t\t// If a lat and long was provided, use that.\n\t\t\t\t// If not, then use the address string\n\t\t\t\tif ($(this).attr('data-lat') && $(this).attr('data-lng')) {\n\t\t\t\t\taddress = [$(this).attr('data-lat'), $(this).attr('data-lng')];\n\t\t\t\t} else {\n\t\t\t\t\taddress = $(this).attr('data-address');\n\t\t\t\t}\n\t\t\t\tstreetAddress = $(this).attr('data-address') ? $(this).attr('data-address') : '';\n\n\t\t\t\t// save items position in list as an attribute to use for marker clicks\n\t\t\t\t$(this).attr('data-top', $(this).position().top);\n\n\t\t\t\tdata.push({\n\t\t\t\t\taddress: address,\n\t\t\t\t\tstreet: $(this).find('.street').text(),\n\t\t\t\t\tcityStateZip: $(this).find('.cityStateZip').text(),\n\t\t\t\t\tname: $(this).find('.location-title').text(),\n\t\t\t\t\tlink: $(this).attr('data-url'),\n\t\t\t\t\t// hoursets: $('.hourset', this),\n\t\t\t\t\tid: $(this).attr('id')\n\t\t\t\t});\n\t\t\t});\n\t\n\t\t\tlocationsMap = new GoogleMap({\n\t\t\t\tlocations: data,\n\t\t\t\tcontainer: '#map',\n\t\t\t\tonMarkerClick: (id, marker) => {\n\t\t\t\t\t$('.location-item.active').removeClass('active');\n\t\t\t\t\t$('#' + id).addClass('active');\n\n\t\t\t\t\t// animate locations to item selected\n\t\t\t\t\tlet itemTop = $('#' + id).attr('data-top');\n\t\t\t\t\t$('.locations-pane').animate({\n\t\t\t\t scrollTop: itemTop - 30\n\t\t\t\t }, 400);\n\n\t\t\t\t\t// close detail boxes\n\t\t\t\t\t$('.location-search .location-details').slideUp(300);\n\t\t\t\t\t$('.location-item.details-open').removeClass('details-open').find('.view-details-btn').removeClass('open');\n\t\t\t\t\t$('.location-item.details-open').find('.detailBtnText').html('VIEW BRANCH DETAILS').siblings('.icon').removeClass('fa-times').addClass('fa-chevron-right');\n\t\t\t\t},\n\t\t\t\tsearchedLocation: pinOptions\n\t\t\t});\n\t\n\t\t\tlocationsMap.main();\n\t\t}\n \n function hideLocation(item) {\n item.css('display', 'none');\n item.removeClass('enable-on-map');\n }\n\n function showLocation(item, distance, reset) {\n item.css('display', 'flex');\n\t\t\titem.addClass('enable-on-map');\n\n\t\t\t// if you're resetting the map, reset the distance\n\t\t\t// or it will mess with this filter implementation\n\t\t\tif (reset) {\n\t\t\t\tdistance = null;\n\t\t\t\titem.find('.distance').html('');\n\t\t\t\titem.data(\"distance\", distance);\n\t\t\t}\n\n\t\t\tif (distance) {\n\t\t\t\tdistance = distance.toFixed(2);\n\t\t\t\titem.find('.distance').html(distance + ' miles');\n\t\t\t\titem.data(\"distance\", distance);\n\t\t\t}\n\t\t}\n\t\t\n function filterLocations(selectedOption) {\n\t\t\tvar optionSelected;\n\t\t\t// var serviceSelected = $('.select-box select.service-type').val().replace(/\\s/g, '');\n\t\t\tlet locationFilter = $('select.location-type').val().replace(/\\s/g, '');\n\t\t\t// let serviceFilter = $('.select-box select.service-type').val().replace(/\\s/g, '');\n\t\t\tlet allLocations = $('select.location-type option:first-child').val().replace(/\\s/g, '');\n\t\t\t// let allServices = $('.select-box select.service-type option:first-child').val().replace(/\\s/g, '');\n\n\t\t\tif (selectedOption) {\n\t\t\t\toptionSelected = $('select.location-type').val().replace(/\\s/g, '');\n\t\t\t\t// serviceSelected = $('.select-box select.service-type').val().replace(/\\s/g, '');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// optionSelected = $('.location-dropdown li.selectedOption').text();\n\t\t\t\toptionSelected = $('select.location-type').val().replace(/\\s/g, '');\n\t\t\t\t// serviceSelected = $('.select-box select.service-type').val().replace(/\\s/g, '');\n\t\t\t}\n\n\t\t\t$(\".location-item\").each(function () {\n\t\t\t\t// var options = $(\".bankInfo\", this).children(\".options\").text(),\n\t\t\t\tlet\ttypes = $(this).attr(\"data-types\"),\n\t\t\t\t\t// services = $(this).attr(\"data-services\"),\n\t\t\t\t\tlat2 = $(this).attr(\"data-lat\"),\n\t\t\t\t\tlng2 = $(this).attr(\"data-lng\"),\n\t\t\t\t\tshow = false,\n\t\t\t\t\tdistance = null;\n\n\t\t\t\t// check if location fits in filter\n\t\t\t\tif (types.includes(locationFilter) == locationFilter) {\n\t\t\t\t\tshow = true;\n\t\t\t\t}\n\t\t\t\tif (locationFilter == allLocations) {\n\t\t\t\t\tshow = true;\n\t\t\t\t}\n\n\t\t\t\tif (locationFilter != allLocations ) {\n\t\t\t\t\t$('.location-item').each(function () {\n\t\t\t\t\t\tif (types.includes(locationFilter)) {\n\t\t\t\t\t\t\tshow = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// if (optionSelected == allLocations) {\n\t\t\t\t// \t$('.location-item').each(function () {\n\t\t\t\t// \t\tif (serviceFilter == allServices) {\n\t\t\t\t// \t\t\tshow = true;\n\t\t\t\t// \t\t}\n\t\t\t\t// \t\telse if (services.includes(serviceFilter)) {\n\t\t\t\t// \t\t\tshow = true;\n\t\t\t\t// \t\t}\n\t\t\t\t// \t});\n\t\t\t\t// }\n\n\t\t\t\tif (lat && lng) {\n\t\t\t\t\tdistance = calcDistance(lat, lng, lat2, lng2);\n\n\t\t\t\t\t// only show location if it is in a 20 miles radius IF SEARCH TERM PRESENT\n\t\t\t\t\tif ($('#locationInput').val() !== '') {\n\t\t\t\t\t\tif (distance > 30) {\n\t\t\t\t\t\t\tshow = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshow = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (show && distance) {\n\t\t\t\t\tshowLocation($(this), distance);\n\t\t\t\t}\n\t\t\t\telse if (show && !distance) {\n\t\t\t\t\tshowLocation($(this));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thideLocation($(this));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (locationsMap.searchedLocation) {\n\t\t\t\t// sort shown locations by distance\n\t\t\t\tsortLocations();\n\t\t\t}\n\n\t\t\treloadMap();\n\n\t\t\t// check if any locations are displayed\n\t\t\tif ($('.locations-listings article.enable-on-map').length > 0) {\n\t\t\t\t$('.noLocationsMessage').hide();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$('.noLocationsMessage').show();\n\t\t\t}\n\t\t}\n\n\t\tfunction toRad(value) {\n\t\t\treturn value * Math.PI / 180;\n\t\t}\n\t\t\n\t\tfunction calcDistance(lat1, lng1, lat2, lng2) {\n\t\t\tvar earth = 6371, //km\n\t\t\t\tdLat = toRad(lat2 - lat1),\n\t\t\t\tdLng = toRad(lng2 - lng1);\n\n\t\t\tlat1 = toRad(lat1);\n\t\t\tlat2 = toRad(lat2);\n\n\t\t\tvar a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLng/2) * Math.sin(dLng/2) * Math.cos(lat1) * Math.cos(lat2);\n\t\t\tvar c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n\t\t\tvar distance = (earth * c) / 1.609; //convert from km to miles\n\n\t\t\treturn distance;\n\t\t}\n\n\t\tfunction sortLocations() {\n\t\t\tvar locations = [];\n\n\t\t\t// create array of shown articles so we can sort it\n\t\t\t$('article.enable-on-map').each(function() {\n\t\t\t\tlocations.push($(this));\n\t\t\t});\n\n\t\t\t// sort locations by distance in ascending order\n\t\t\tlocations.sort(function(a, b) {\n\t\t\t\treturn a.data(\"distance\") - b.data(\"distance\");\n\t\t\t});\n\n\t\t\t// iterate through sorted locations and order them on the page\n\t\t\tfor (let i = 0; i < locations.length; i++) {\n\t\t\t\tlocations[i].css('order', i);\n\t\t\t}\n\t\t}\n\n function placesAutocomplete() {\n\t\t\tvar autocomplete = new google.maps.places.Autocomplete(document.getElementById('locationInput'));\n\t\t\n google.maps.event.addListener(autocomplete, 'place_changed', function() {\n\t\t\t\tlet place = autocomplete.getPlace();\n\n\t\t\t\tlat = place.geometry.location.lat();\n\t\t\t\tlng = place.geometry.location.lng();\n\n\t\t\t\tpinOptions = {};\n\t\t\t\tpinOptions.position = new google.maps.LatLng(lat, lng);\n\n\t\t\t\t// filter through locations to only show those in selected filter\n\t\t\t\tfilterLocations();\n });\n }\n\n function setPageHeight() {\n \tconst locations = $('.location-search');\n \tconst locationsH = locations.outerHeight();\n \t\t$('.page-wrapper').css('min-height', locationsH);\n }\n\t}\n}\n\nclass locationDetails {\n\n\tconstructor() {\n\t\t// dom elements\n\t\tthis.locationSearch = $('.location-search');\n\t\tthis.locationItems = $('.location-item');\n\t\tthis.viewDetailsBtn = $('.location-item .view-details-btn');\n\t\tthis.detailsBox = $('.location-search .location-details');\n\t\tthis.closeDetailsBtn = $('.location-details .close-details-btn');\n\t\t// indicators/variables\n\t\tthis.href = window.location.href;\n\t\tthis.jsonFile = '';\n\t\tthis.breakpoint = 992;\n\n\t\tif (this.locationItems.length){\n\t\t\tthis.init();\t\t\t\n\t\t}\n\t}\n\n\tinit() {\n\n\t\t// Handle Showing Branch Details on click\n\t\tthis.viewDetailsBtn.on('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggleLocationDetails(event);\n\t\t});\n\n\t\t// Handle Closing Details\n\t\tthis.closeDetailsBtn.on('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeDetailBox();\n\t\t});\n\n\t\t// On page load, check if url matches any locations item and load that items details pane\n\t\tthis.OpenDetailsOnPageLoad();\n\n\t}\n\n\t// This grabs the url to json/api that has the details content. \n\ttoggleLocationDetails(event) {\n\t\tthis.jsonFile = $(event.currentTarget).attr('href');\n\t\tconst clickedBranch = $(event.target).closest('.location-item'),\n\t\t\t openedBranches = clickedBranch.siblings('.location-item.details-open');\n\n\n\t\t// open clicked details pane\n\t\tif (!clickedBranch.hasClass('details-open')) {\n\n\t\t\t// first close all other open details\n\t\t\tthis.detailsBox.slideUp(300, () => {\n\t\t\t\topenedBranches.removeClass('details-open').find('.view-details-btn').removeClass('open');\n\t\t\t\topenedBranches.find('.detailBtnText').html('VIEW BRANCH DETAILS').siblings('.icon').removeClass('fa-times').addClass('fa-chevron-right');\n\n\t\t\t\tthis.detailsBox.slideDown(300);\n\t\t\t\t$(event.currentTarget).addClass('open').find('.detailBtnText').text('CLOSE BRANCH DETAILS');\n\t\t\t\t$(event.currentTarget).find('.icon').removeClass('fa-chevron-right').addClass('fa-times');\n\t\t\t\t\n\t\t\t\t// grab data from json\n\t\t\t\tthis.pullData();\n\t\t\t\tclickedBranch.addClass('details-open');\n\t\t\t\tthis.locationSearch.addClass('showing-detail-pane');\t\n\n\t\t\t});\t\t\t\n\t\t}\n\t\telse {\n\t\t\t// close detail pane\n\t\t\tthis.closeDetailBox();\n\t\t}\n\n\t}\n\n\n\tcloseDetailBox() {\n\t\tconst activeBranch = $('.location-item.details-open'),\n\t\t\t locationDetailPage = $('.location-details-page');\n\n\t\tthis.detailsBox.slideUp(300, () => {\n\n\t\t\tthis.locationSearch.removeClass('showing-detail-pane');\n\t\t\tactiveBranch.removeClass('details-open').find('.view-details-btn').removeClass('open');\n\t\t\tactiveBranch.find('.detailBtnText').html('VIEW BRANCH DETAILS').siblings('.icon').removeClass('fa-times').addClass('fa-chevron-right');\n\n\t\t\tif (locationDetailPage.length) {\n\t\t\t\tlocationDetailPage.find('.locations-pane').show();\n\t\t\t}\n\t\t});\n\t}\n\n\n\t// pulls all location details from json/api and loads detail pane with data\n\tpullData() {\n\n\t\t$.getJSON(this.jsonFile)\n\t\t \t.done(function( data ) {\n\t\t\t\t\n\t\t\t\tvar jsonData = data.name === undefined ? JSON.parse(data) : data;\n\t\t\t\t\n\t\t \t\t// output dom elements for details section\n\t\t \t\tconst name = $('.location-details .location-title');\n\t\t \t\tconst photo = $('.location-details .photo');\n\t\t \t\tconst googleMapsLink = $('.location-details .directions-btn');\n\t\t \t\tconst callBtn = $('.location-details .call-btn');\n\t\t \t\tconst locationType = $('.location-details .bank-types');\n\t\t \t\tconst address = $('.location-details .bank-address .add');\n\t\t \t\tconst cityStateZip = $('.location-details .bank-address .cityStateZip');\n\t\t \t\tconst phone = $('.location-details .phone a');\n\t\t \t\tconst lobbyHours = $('.location-details .lobby-hours');\n\t\t \t\tconst driveThruHours = $('.location-details .drive-thru-hours');\n\t\t\t\tconst availableServices = $('.location-details .available-services');\n\t\t \t\tconst communityInfo = $('.location-details .community-info');\n\n\t\t \t\t// load json jsonData into details pane\n\t\t \tname.html(jsonData.name);\n\t\t \tphoto.css('background-image', 'url(' + jsonData.photo + ')');\n\t\t \tgoogleMapsLink.attr('href', ''+jsonData.googleMapsLink+'');\n\n\t\t \tconst cleanPhoneNum = jsonData.phone.replace(/\\D/g,'');\n\t\t \tcallBtn.attr('href', 'tel:+1'+cleanPhoneNum+'');\n\n\t\t \tlocationType.html(jsonData.locationType);\n\t\t \taddress.html(jsonData.address);\n\t\t \tcityStateZip.html(jsonData.city+', '+jsonData.state+' '+jsonData.zip);\n\t\t \tphone.attr('href', 'tel:+1'+cleanPhoneNum+'');\n\t\t \tphone.html(jsonData.phone);\n\t\t \tlobbyHours.html(jsonData.lobbyHours);\n\t\t \tdriveThruHours.html(jsonData.driveThruHours);\n\t\t\t\tavailableServices.html(jsonData.branchServices);\n\t\t\t\t\n\t\t\t\tif(jsonData.lobbyHours) {\n\t\t\t\t\tlobbyHours.html(jsonData.lobbyHours);\n\t\t\t\t\tlobbyHours.closest('.accordion').show();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlobbyHours.html('');\n\t\t\t\t\tlobbyHours.closest('.accordion').hide();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(jsonData.driveThruHours) {\n\t\t\t\t\tdriveThruHours.html(jsonData.driveThruHours);\n\t\t\t\t\tdriveThruHours.closest('.accordion').show();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdriveThruHours.html('');\n\t\t\t\t\tdriveThruHours.closest('.accordion').hide();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(jsonData.branchServices) {\n\t\t\t\t\tavailableServices.html(jsonData.branchServices);\n\t\t\t\t\tavailableServices.closest('.accordion').show();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tavailableServices.html('');\n\t\t\t\t\tavailableServices.closest('.accordion').hide();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(jsonData.communityInfo) {\n\t\t\t\t\tcommunityInfo.html(jsonData.communityInfo);\n\t\t\t\t\tcommunityInfo.closest('.generic-block').show();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcommunityInfo.html('');\n\t\t\t\t\tcommunityInfo.closest('.generic-block').hide();\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tif(jsonData.photo) {\n\t\t\t\t\t$('.photo').css('padding-top', '0px');\n\t\t\t\t\t$('.photo').css('height', '209px');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$('.photo').css('padding-top', '40px');\n\t\t\t\t\t$('.photo').css('height', '0px');\n\t\t\t\t}\n\t\t \t})\n\t\t \t.fail(function( jqxhr, textStatus, error ) {\n\t\t \tconst err = textStatus + \", \" + error;\n\t\t \tconsole.log( \"Request Failed: \" + err );\n\t\t});\n\t}\n\t\n\n\t// On page load, check if url matches any locations data-detail-page... if so load detail pane for that location\n\tOpenDetailsOnPageLoad() {\n\n\n\t\t// loop thru all locations \n\t\t//for (const item of this.locationItems) {\n\t\t\t\n\t\tfor(var i = 0; i < this.locationItems.length; i++)\n\t\t{\n\t\t\tvar item = this.locationItems[i];\n\n\t\t\tlet url = $(item).attr('data-detail-page'),\n\t\t\t detailBtn = $(item).find('.view-details-btn');\n\t\t\tthis.jsonFile = $(item).attr('data-json-file');\n\n\t\t // does the url match a location item\n\t\t\tif (this.href.indexOf(url) > -1) {\n\n\t\t\t\t// add class for mobile styling if on a detail page\n\t\t\t\tthis.locationSearch.addClass('showing-detail-pane');\n\n\t\t\t this.detailsBox.slideDown(300);\n\t\t\t detailBtn.addClass('open').find('.detailBtnText').text('CLOSE BRANCH DETAILS');\n\t\t\t detailBtn.find('.icon').removeClass('fa-chevron-right').addClass('fa-times');\n\t\t\t \n\t\t\t // grab data from json\n\t\t\t this.pullData();\n\t\t\t $(item).addClass('details-open');\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nclass Alerts {\n\t\n\tconstructor() {\n\n\t\tthis.alert = $('.alert');\n\t\tthis.alertToggleBtn = $('.toggle-alert-btn');\n\n\t\tif (this.alert.length) {\n\t\t\tthis.init();\t\t\t\n\t\t}\n\t}\n\n\tinit() {\n\n\t\t// Handle Toggling Alert Click\n\t\tthis.alertToggleBtn.on('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggleAlert(event);\n\t\t});\n\t}\n\n\ttoggleAlert(event) {\n\t\tthis.alert = $(event.currentTarget).closest('.alert');\n\n\t\tif (this.alert.hasClass('closed')) {\n\t\t\tthis.openAlert();\n\t\t}\n\t\telse {\n\t\t\tthis.closeAlert();\n\t\t}\n\t}\n\n\topenAlert() {\n\t\tthis.alert.removeClass('closed').find('.alert-desc').slideDown(100, () => {\n\t\t\tthis.alert.find('.toggle-alert-btn .fas').removeClass('fa-chevron-down').addClass('fa-chevron-up');\n\t\t\tthis.alert.removeClass('closed');\t\t\t\n\t\t});\n\t}\n\n\tcloseAlert() {\n\t\tthis.alert.addClass('closed').find('.alert-desc').slideUp(100, () => {\n\t\t\tthis.alert.find('.toggle-alert-btn .fas').removeClass('fa-chevron-up').addClass('fa-chevron-down');\t\t\t\n\t\t});\n\t}\n}\n\nclass AnchorJump {\n\n\tconstructor() {\n\t\t// dom elements\t\t\n\t\tthis.anchorBtns = $('.anchor-jump-btn');\n\n\t\tthis.init();\t\n\t}\n\n\tinit() {\n\n\t\t// Handle jumping down to anchor ID when btn clicked\n\t\tthis.anchorBtns.on('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tconst id = this.getID(event.target);\n\n\t\t\tif (id.length) {\n\t\t\t\tthis.scrollToAnchor(id);\t\t\t\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log('missing href in button');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tgetID(target) {\n\t\treturn $(target).attr('href');\n\t}\n\n\tscrollToAnchor(id) {\n\n\t\tconst anchor = $(id);\n\n\t\tif (anchor.length) {\n\t\t\t$('html, body').animate({ scrollTop: $(anchor).offset().top}, 1200);\n\t\t}\n\t\telse {\n\t\t\tconsole.log('no element with that ID exists');\n\t\t}\n\n\t}\n}\n\nclass Accordions {\n\n\tconstructor() {\n\t\t// dom elements\n\t\tthis.accordionTitle = $('.accordion-title');\n\t\t\n\t\tif (this.accordionTitle.length) {\n\t\t\tthis.init();\t\t\t\n\t\t}\n\t}\n\n\tinit() {\n\n\t\t// Handle toggling of accordion if clicked\n\t\tthis.accordionTitle.on('click', (event) => {\n\t\t\tthis.toggleAccordion(event);\n\t\t});\n\n\t\t// Handle toggling of accordion if center key pressed\n\t\tthis.accordionTitle.off('keypress').on('keypress', (event) => {\n\t\t const keycode = (event.keyCode ? event.keyCode : event.which);\n\n\t\t if( keycode == '13' || keycode == '32') {\n\t\t this.toggleAccordion(event);\n\t\t }\n\t\t});\n\n\t}\n\n\ttoggleAccordion(event) {\n\t\tconst accordion = $(event.currentTarget).closest('.accordion'),\n\t\t\t accordionContent = accordion.children('.accordion-content'),\n\t\t\t accordionArrow = $(event.target).children('.fas'),\n\t\t\t openAccordions = accordion.siblings('.accordion.open');\n\n\t\tif (accordion.hasClass('open')) {\n\t\t\t// close accordion\n\t\t\taccordion.removeClass('open');\n\t\t\taccordionContent.slideUp(300);\n\t\t\taccordionArrow.removeClass('fa-chevron-up').addClass('fa-chevron-down');\n\t\t}\n\t\telse {\n\t\t\t// open accordion and close all others\n\t\t\topenAccordions.removeClass('open').find('.accordion-content').slideUp(300);\n\t\t\topenAccordions.find('.accordion-title .fas').removeClass('fa-chevron-up').addClass('fa-chevron-down');\n\n\t\t\taccordion.addClass('open');\n\t\t\taccordionContent.slideDown('300', () => {\n\t\t\t\taccordionArrow.removeClass('fa-chevron-down').addClass('fa-chevron-up');\n\n\t\t\t\t// check if any tables exist and initilize if not already\n\t\t\t\tconst responsiveTable = accordionContent.find($('.responsiveTable'));\n\t\t\t\tif (responsiveTable.length && !responsiveTable.hasClass('dataTable')) {\n\t\t\t\t\tresponsiveTable.DataTable( {\n\t\t\t\t\t responsive: true,\n\t\t\t\t\t paging: false,\n\t\t\t\t\t searching: false,\n\t\t\t\t ordering: false,\n\t\t\t\t info: false,\n\t\t\t\t autoWidth: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nclass ComparisonCards {\n\n constructor() {\n\n this.compCards = $('.comparison-cards .slick-slider');\n\n this.init();\n }\n\n init() {\n if (this.compCards.length) {\n\n var slick_slider = $('.comparison-cards .slick-slider');\n\n var settings = {\n slidesToShow: 3,\n slidesToScroll: 1,\n infinite: false,\n arrows: true,\n nextArrow: '',\n prevArrow: '',\n responsive: [\n {\n breakpoint: 9999,\n settings: \"unslick\"\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 1\n }\n },\n {\n breakpoint: 580,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1\n }\n }\n ]\n };\n\n slick_slider.slick(settings);\n\n $(window).on('resize', function() {\n if ($(window).width() > 768) {\n if (slick_slider.hasClass('slick-initialized')) {\n slick_slider.slick('unslick');\n }\n return;\n }\n\n if (!slick_slider.hasClass('slick-initialized')) {\n return slick_slider.slick(settings);\n }\n });\n\n }\n }\n \n}\n\nclass FormLabelAnimation {\n\n constructor() {\n // dom elements\n this.formFields = $('.form-label-animation input, .form-label-animation select, .form-label-animation textarea');\n\n if (this.formFields.length) {\n this.init(); \n }\n }\n\n init() {\n\n // on page load check inputs for postbacks to style accordingly\n this.formFields.each( (event) => {\n let field = $(event.target).closest('.field');\n\n if ($(event.target).val() !== \"\" && $(event.target).val() !== undefined) {\n field.addClass(\"not-empty\");\n }\n else {\n field.removeClass(\"not-empty\");\n }\n });\n\n // Handle when input gets focus\n this.formFields.on('focus', (event) => {\n this.hasFocus(event); \n });\n\n // Handle when input loses focus\n this.formFields.on('blur', (event) => {\n this.checkIfEmpty(event);\n });\n }\n\n hasFocus(event) {\n const field = $(event.target).closest('.field'); \n field.addClass('active'); \n }\n\n checkIfEmpty(event) {\n const field = $(event.target).closest('.field');\n\n if ($(event.target).val()) {\n field.addClass(\"not-empty\");\n }\n else {\n field.removeClass(\"not-empty\");\n }\n\n field.removeClass('active'); \n }\n\n\n\t\n\n}\n\nclass NewsEventsItem {\n\n\tconstructor() {\n\t\t// dom elements\n\t\tthis.newsLinks = $('.news-event-item a');\n\n\t\tif (this.newsLinks.length) {\n\t\t\tthis.init();\t\t\t\n\t\t}\n\t}\n\n\tinit() {\n\n\t\t// Handle when hovering into any news image/title/btn\n\t\tthis.newsLinks.on({\n\t\t mouseenter: (event) => {\n\t\t this.addHoverState(event);\n\t\t },\n\t\t mouseleave: (event) => {\n\t\t this.removeHoverState(event);\n\t\t }\n\t\t});\n\n\t\t// Handle when focused into any news image/title/btn\n\t\tthis.newsLinks.on('focusin', (event) => {\n\t this.addHoverState(event);\n\t\t}).on('focusout', (event) => {\n\t this.removeHoverState(event);\n\t\t});\n\n\t}\n\n\taddHoverState(event) {\n\t\t$(event.currentTarget).closest('.news-event-item').addClass('hover');\n\t}\n\n\tremoveHoverState(event) {\n\t\t$(event.currentTarget).closest('.news-event-item').removeClass('hover');\n\t}\n\n}\n\nclass ResponsiveTables {\n\tconstructor() {\n\t\tthis.responsiveTable = $('.responsiveTable:visible');\n\n\t\tif (this.responsiveTable.length) {\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\tinit() {\n\n\t\t// Initialize tables with dataTables plugin https://datatables.net/\n\t\tthis.responsiveTable.DataTable( {\n\t\t responsive: true,\n\t\t paging: false,\n\t\t searching: false,\n\t ordering: false,\n\t info: false,\n\t autoWidth: false\n\t\t});\n\n\t}\n\n}\n\nclass SpeedBump {\n\n constructor() {\n\n // dom elements\n this.speedbumpLink = $('.speedbump-link');\n this.acceptBtn = '';\n this.denyBtn = '';\n this.speedbumpModal = '';\n this.str = '';\n this.url = '';\n\n if (this.speedbumpLink.length) {\n this.init(); \n }\n\n }\n\n init() {\n\t \n // if \".speedbump-link\" is clicked, pull message from data attribute and display in a modal\n this.speedbumpLink.on('click', (event) => {\n event.preventDefault();\n this.str = $(event.currentTarget).attr('data-redirect-message');\n this.url = $(event.currentTarget).attr('href');\n\t\t\t\n\t\t\t//Get default text if one is not provided\n\t\t\tif(!this.str) {\n\t\t\t\tthis.str = $('#speedbump-default-message').attr('data-speedbump-message');\n\t\t\t}\n\t\t\t\n // create modal with message\n this.createSpeedBumpModal();\n this.bindButtons();\n\n // Handle when Close is clicked\n this.denyBtn.on('click', (event) => {\n this.returnToSite(event);\n });\n\n this.closeBtn.on('click', (event) => {\n this.returnToSite(event);\n });\n\n // Handle when Accept is clicked\n this.acceptBtn.on('click', (event) => {\n this.allowLink(event);\n });\n \n });\n\n }\n\n bindButtons() {\n this.acceptBtn = $('.speedBumpModal .acceptBtn');\n this.denyBtn = $('.speedBumpModal .denyBtn');\n this.closeBtn = $('.speedBumpModal .closeBtn');\n this.speedbumpModal = $('.speedBumpModal');\n }\n\n createSpeedBumpModal() {\n if (document.getElementById(\"wealthHeaderLogo\")) {\n $('body').prepend('
External Link Disclaimer
\"Kinecta
' + this.str + '
');\n } else {\n $('body').prepend('
External Link Disclaimer
\"Kinecta
' + this.str + '
');\n } \n }\n\n\n returnToSite(event) { \n event.preventDefault();\n this.speedbumpModal.remove();\n }\n\n allowLink() {\n this.speedbumpModal.remove();\n }\n\n}\n\nclass AndroidAppBanner {\n\n constructor() {\n\n if ($('.android-app-banner').length) {\n\n this.init();\n }\n }\n\n /**\n * Scans user agent string for the word \"android\" to determine if the device is an android.\n * @returns returns true if the user agent is most likely Android\n */\n static deviceIsAndroid() {\n\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\n return /android/i.test(userAgent);\n }\n\n /**\n * Determines if banner should be displayed based on the expiration date in localStorage\n * @returns true if banner should be displayed based on if there's a localStorage dismiss, and if that item's date has expired\n */\n static bannerIsNotDismissed() {\n\n const expiration = localStorage.getItem('kinectaAndroidDismissed');\n\n return expiration ? Date.now() >= parseInt(expiration) : true;\n }\n\n init() {\n\n if (AndroidAppBanner.deviceIsAndroid() && AndroidAppBanner.bannerIsNotDismissed()) {\n\n $('.android-app-banner-close').on('click', function() {\n\n // Set local storage dismissal time to 15 days\n localStorage.setItem('kinectaAndroidDismissed', Date.now() + (15 * 24 * 60 * 60 * 1000));\n\n $('body').removeClass('android-banner-visible');\n });\n\n $('.android-app-banner-cta').on('click', function() {\n\n // Set local storage dismissal time to 90 days \n localStorage.setItem('kinectaAndroidDismissed', Date.now() + (90 * 24 * 60 * 60 * 1000));\n });\n\n $('body').addClass('android-banner-visible');\n }\n }\n}\n\n/* Site Specific Javascript Component Imports */\n\nconst MainScripts = (() => {\n\n\t/* Global javascript modules */\n\tif (typeof svg4everybody == 'function') { svg4everybody(); }\t\n\tconst imageLoader = new ImageLoader(); // lazyload\n\n\tnew Login();\n\tnew Menu();\n\tnew ScrollToTop();\n\tnew SpeedBump();\n\tnew AndroidAppBanner();\n\timageLoader.initialize();\n\n\n\t/* Module-specific javascript modules */\n\t/* ======================================================== */\n\t/* Only loaded if a page is using one of the modules below. */\n\tnew Alerts();\n\tnew Accordions();\n\t\n\t$(document).ready(function () {\n\t\tnew AnchorJump();\n\t});\n\t\n\tnew ComparisonCards();\n\tnew FormLabelAnimation();\n\tnew locationDetails();\n\tnew NewsEventsItem();\n\tnew ResponsiveTables();\n\t\n\tif ( $('.location-search').length ) {\n\t\tLocations.displayLocations();\n\t}\n\t\n\t$(document).ready(function () {\n\t\t$('a[data-fancybox].btn-primary').css('color', 'white');\n\t\t\n\t\t$('a[data-fancybox].btn-primary').mouseenter(function () {\n\t\t\t$(this).css('color', '#5d0a8b');\n\t\t}).mouseleave(function () {\n\t\t\t$(this).css('color', 'white');\n\t\t});\n\t\t\n\t\t$('a[data-fancybox].btn-secondary').css('color', '#5d0a8b');\n\t\t\n\t\t$('a[data-fancybox].btn-secondary').mouseenter(function () {\n\t\t\t$(this).css('color', 'white');\n\t\t}).mouseleave(function () {\n\t\t\t$(this).css('color', '#5d0a8b');\n\t\t});\n\t});\n\t\n\t$(document).ready(function () {\n\t\tvar id = $(location).attr('hash');\n\t\tif (id && $(id).length) {\n\n\t\t\tvar accordion = $(id).closest('.accordion');\n\n\t\t\taccordion.attr('class', 'accordion open');\n\t\t\taccordion.find('.accordion-content').css('display', 'block');\n\t\t\taccordion.find('i').attr('class', 'fas fa-chevron-up');\n\t\t\t\n\t\t\tvar accordionContent = accordion.children('.accordion-content');\n\t\t\t\n\t\t\tconst responsiveTable = accordionContent.find($('.responsiveTable'));\n\t\t\t\tif (responsiveTable.length && !responsiveTable.hasClass('dataTable')) {\n\t\t\t\t\tresponsiveTable.DataTable( {\n\t\t\t\t\t responsive: true,\n\t\t\t\t\t paging: false,\n\t\t\t\t\t searching: false,\n\t\t\t\t ordering: false,\n\t\t\t\t info: false,\n\t\t\t\t autoWidth: false\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t$([document.documentElement, document.body]).animate({\n\t\t\t\tscrollTop: ($(id).offset().top - 20)\n\t\t\t}, 800); \n\t\t\t\n\t\t}\n\t});\n})();\n"]}