{"version":3,"sources":["main.js"],"names":["Accordions","accordions","$","accordionTitle","length","init","openFirst","on","event","toggleAccordion","off","keycode","keyCode","which","accordion","currentTarget","closest","accordionContent","children","accordionArrow","openAccordions","siblings","hasClass","removeClass","slideUp","attr","addClass","blur","find","slideDown","responsiveTable","DataTable","responsive","paging","searching","ordering","info","autoWidth","window","outerWidth","headerHeight","outerHeight","animate","scrollTop","offset","top","firstAccordion","first","Alerts","alert","alertCloseBtn","preventDefault","closeAlert","checkStorage","each","id","alertSessionStorage","sessionStorage","getItem","hide","show","setItem","ComparisonCards","comparisonCards","editMode","self","slider","totalCards","initSlider","slick","slidesToShow","slidesToScroll","infinite","arrows","nextArrow","prevArrow","breakpoint","settings","FeaturedResources","resourceLinks","mouseenter","addHoverState","mouseleave","removeHoverState","FeaturedStats","stats","statHeaders","getTallestHeadline","resize","tallest","css","itemHeight","FeaturedRates","rates","rateHeaders","FloatingFormLabel","formFields","val","field","hasFocus","checkIfEmpty","target","Menu","body","mainMenu","siteHeader","toggleMobileMenuBtn","menuTier1LI","menuTier1Link","mobileMenuIcons","browserWidth","getBrowserWidth","bindMenu","unbindMobile","desktopHandlers","unbindDesktop","mobileHandlers","stop","focus","menuLI","parent","toggleClass","toggleMobileMenu","keypress","mobileSubMenu","e","openMobileMenu","closeMobileMenu","calculateMenuHeight","Login","closeLogin","HeaderSearch","closeSearch","html","clickedLI","slideToggle","headerH","alertH","totalH","alerts","innerWidth","loginWrapper","loginBtn","mobileLoginBtn","loginBox","mobileLoginBox","moveLoginIfMobileHeader","toggleLoginBox","document","openLogin","appendTo","searchWrapper","toggleSearchBtn","searchBox","moveSearchIfMobileHeader","toggleSearchBox","updateAriaLabel","openSearch","isOpen","ariaLabel","ImageLoader","options","queue","backgroundQueue","lazyImageObserver","lazyBgObserver","getImagesToLazyLoad","abort","onContentLoaded","setGenericPlaceholder","forEach","lazyImage","observe","lazyBg","querySelectorAll","genericImagePlaceholder","img","setAttribute","genericBgPlaceholder","bg","style","backgroundColor","IntersectionObserver","entries","observer","entry","isIntersecting","src","dataset","srcset","classList","remove","unobserve","i","getAttribute","IsElementInView","animatedModules","loopThruModules","index","myModule","isInViewport","elementTop","elementBottom","viewportTop","viewportBottom","height","MapMarker","model","map","bounds","onMarkerClick","allInfoWindows","marker","locations","greatestMarkerDistance","position","google","maps","LatLng","lat","long","icon","optimized","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","content","name","street","cityStateZip","address","push","close","open","closeWindow","openWindow","GoogleMap","container","mapBounds","markers","styling","searchedLocation","searchedMarker","querySelector","LatLngBounds","Map","disableDefaultUI","zoomControl","gestureHandling","styles","zoomListener","location","setupMarker","linkMarker","animation","Animation","DROP","locationId","Array","isArray","makeMarker","geocoder","Geocoder","geoModel","geocode","results","status","GeocoderStatus","OK","console","warn","geometry","lng","Locations","pinOptions","data","branchImage","MarkerImage","Size","Point","atmImage","liveTellerImage","blankImage","split","arrTitles","get","locOptions","toLowerCase","trim","indexOf","includes","toUpperCase","locationsMap","calculateItemPositions","itemTop","main","filterLocations","resetMap","updateFilterSelectboxText","clearFilters","toggleFilterSelectbox","code","selectbox","arrow","dropdown","placesAutocomplete","filterTypes","selectboxText","clearFiltersBtn","showLocation","reloadMap","hideLocation","item","reset","toFixed","showRadius","filterVal","sortLocations","sort","b","selectFirstOnEnter","input","_addEventListener","addEventListener","attachEvent","addEventListenerWrapper","type","orig_listener","suggestion_selected","simulated_downarrow","Event","apply","furthestWest","furthestEast","furthestSouth","furthestNorth","pinBuffer","pi","m","parseFloat","lon","b1","b2","lookupBounds","strictBounds","types","componentRestrictions","country","autocomplete","places","Autocomplete","getElementById","place","getPlace","undefined","prop","PolyfillHelpers","NodeList","prototype","Element","matches","msMatchesSelector","webkitMatchesSelector","s","el","call","parentElement","parentNode","nodeType","ResponsiveDatatables","tableWrapper","tableHeadline","toggleTable","initializeDatatables","table","toggleTableIcon","closestTable","ScrollToTop","scrollToTopButton","button","view","timeoutKey","fadeIn","fadeOut","clearTimeout","setTimeout","SliderCallout","sliderWrapper","totalItems","pausePlayBtn","dotsWrapper","dots","appendDots","lazyLoad","fade","autoplay","autoplaySpeed","pauseOnHover","pausePlay","SimpleForm","selectFields","submitBtn","addDisabledToSelects","thankYouMessage","form","setInterval","SocialShare","shareIcons","fb","lk","tw","url","encodeURIComponent","href","SolutionsLinks","solutionsSelect","selectTitle","selectDropdown","selectOptions","goBtn","toggleSolutionsDropdown","closeDropdown","optionSelected","openDropdown","aria","SpeedBump","speedbumpLink","acceptBtn","denyBtn","speedbumpModal","message","createSpeedBumpModal","bindButtons","returnToSite","allowLink","prepend","Testimonials","MainScripts","svg4everybody","imageLoader","initialize","displayLocations","FixYoutubeWatchLinks","iframes","getElementsByTagName","hasAttribute","sandboxval"],"mappings":"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","file":"main.js","sourcesContent":["class Accordions {\r\n\r\n\tconstructor() {\r\n // dom elements\r\n this.accordions = $('.accordion');\r\n\t\tthis.accordionTitle = $('.accordion-title');\r\n\t\t\r\n\t\tif (this.accordions.length) {\r\n\t\t\tthis.init();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tinit() {\r\n\r\n // on page load, open first accordion\r\n this.openFirst();\r\n\r\n // Handle toggling of accordion if clicked\r\n\t\tthis.accordionTitle.on('click', (event) => {\r\n\t\t\tthis.toggleAccordion(event);\r\n\t\t});\r\n\r\n\t\t// Handle toggling of accordion if enter key pressed\r\n\t\tthis.accordionTitle.off('keypress').on('keypress', (event) => {\r\n\t\t const keycode = (event.keyCode ? event.keyCode : event.which);\r\n\r\n\t\t if( keycode == '13' || keycode == '32') {\r\n\t\t this.toggleAccordion(event);\r\n\t\t }\r\n\t\t});\r\n\r\n\t}\r\n\r\n\ttoggleAccordion(event) {\r\n\t\tconst accordion = $(event.currentTarget).closest('.accordion'),\r\n\t\t\t accordionContent = accordion.children('.accordion-content'),\r\n\t\t\t accordionTitle = accordion.children('.accordion-title'),\r\n\t\t\t accordionArrow = $(event.currentTarget).children('.fas'),\r\n\t\t\t openAccordions = accordion.siblings('.accordion.open');\r\n\r\n // close accordion\r\n\t\tif (accordion.hasClass('open')) {\r\n\t\t\taccordion.removeClass('open');\r\n\t\t\taccordionContent.slideUp(300);\r\n\t\t\taccordionTitle.attr('aria-expanded', false);\r\n\t\t\taccordionArrow.removeClass('fa-chevron-down').addClass('fa-chevron-right');\r\n $(event.currentTarget).blur();\r\n\t\t}\r\n // open accordion and close all others\r\n\t\telse {\r\n\t\t\topenAccordions.removeClass('open').find('.accordion-content').slideUp(300);\r\n\t\t\topenAccordions.children('.accordion-title').attr('aria-expanded', false);\r\n\t\t\topenAccordions.find('.accordion-title .fas').removeClass('fa-chevron-down').addClass('fa-chevron-right');\r\n\r\n\t\t\taccordion.addClass('open');\r\n\t\t\taccordionContent.slideDown('300', () => {\r\n\t\t\t\taccordionArrow.removeClass('fa-chevron-right').addClass('fa-chevron-down');\r\n\t\t\t\taccordionTitle.attr('aria-expanded', true);\r\n\t\t\t\t\r\n\t\t\t\t// check if any tables exist and initilize if not already\r\n\t\t\t\tconst responsiveTable = accordionContent.find($('.responsive-table'));\r\n\t\t\t\tif (responsiveTable.length && !responsiveTable.hasClass('dataTable')) {\r\n\t\t\t\t\tresponsiveTable.DataTable( {\r\n\t\t\t\t\t responsive: true,\r\n\t\t\t\t\t paging: false,\r\n\t\t\t\t\t searching: false,\r\n\t\t\t\t ordering: false,\r\n\t\t\t\t info: false,\r\n\t\t\t\t autoWidth: false\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// tablet or down, scroll window to clicked accordion\r\n\t\t\t\tif (window.outerWidth < 991.98) {\r\n\t\t\t\t\tconst headerHeight = $('.mobile-header').outerHeight(true);\r\n\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: accordion.offset().top - headerHeight\r\n\t\t\t\t\t}, 1000);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n }\r\n }\r\n \r\n \r\n openFirst() {\r\n const firstAccordion = this.accordions.first(); \r\n \r\n\t\tfirstAccordion.addClass('open').find('.accordion-content').slideDown(300);\r\n\t\tfirstAccordion.children('.accordion-title').attr('aria-expanded', true);\r\n firstAccordion.find('.accordion-title .fas').removeClass('fa-chevron-right').addClass('fa-chevron-down');\r\n\r\n }\r\n}\n\nclass Alerts {\r\n\t\r\n\tconstructor() {\r\n\r\n\t\tthis.alert = $('.alert');\r\n\t\tthis.alertCloseBtn = $('.close-alert-btn');\r\n\r\n\t\tif (this.alert.length) {\r\n\t\t\tthis.init();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tinit() {\r\n\r\n\t\t// Handle Toggling Alert Click\r\n\t\tthis.alertCloseBtn.on('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.closeAlert(event);\r\n\t\t});\r\n\r\n\t\tthis.checkStorage();\r\n\t}\r\n\r\n\r\n\t// check if they closed alert already and storage session id was set. if so close id on page load`\r\n\tcheckStorage() {\r\n\t\t$('.alert').each(function() {\r\n\t\t\tlet id = $(this).attr('id');\r\n\t\t\tlet alertSessionStorage = sessionStorage.getItem(id);\r\n\t\t\t// console.log(`id: ${id}, sessionID: ${alertSessionStorage}`);\r\n\t\t\t\r\n\t\t\tif (alertSessionStorage != null) {\r\n\t\t\t\tif (alertSessionStorage == 'closed') {\r\n\t\t\t\t\t$('#'+id+'').hide();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$('#'+id+'').show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$('#'+id+'').show();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\t\r\n\t// close alert and add session storage id\r\n\tcloseAlert(event) {\r\n\t\tconst alert = $(event.currentTarget).closest('.alert');\r\n\t\tconst id = alert.attr('id');\r\n\r\n\t\talert.slideUp(300);\r\n\t\tsessionStorage.setItem(id, 'closed');\r\n\t}\r\n\r\n}\n\nclass ComparisonCards {\r\n\r\n constructor() {\r\n this.comparisonCards = $('.comparison-cards'); \r\n this.editMode = $('.sfPageEditor'); \r\n\r\n if (this.comparisonCards.length && !this.editMode.length) {\r\n this.init();\r\n }\r\n \r\n }\r\n \r\n init() {\r\n const self = this;\r\n \r\n // loop thru each slider and turn into slider if it doesn't have class .stack-cards\r\n this.comparisonCards.each(function() {\r\n \r\n if (!$(this).hasClass('stack-cards')) {\r\n let slider = $(this).find('.slick-slider');\r\n let totalCards = slider.find('.comparison-card-item').length;\r\n \r\n if (totalCards > 3) {\r\n self.initSlider(slider);\r\n }\r\n else {\r\n slider.closest('.cards').addClass('less-than-3');\r\n }\r\n }\r\n });\r\n \r\n }\r\n \r\n initSlider(slider) {\r\n\r\n slider.slick({\r\n slidesToShow: 3,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n arrows: true,\r\n nextArrow: '',\r\n prevArrow: '',\r\n responsive: [\r\n\r\n {\r\n breakpoint: 992,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 1\r\n }\r\n },\r\n {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n }\r\n }\r\n ]\r\n // adaptiveHeight: true\r\n });\r\n }\r\n}\n\nclass FeaturedResources {\r\n\r\n\tconstructor() {\r\n\t\t// dom elements\r\n\t\tthis.resourceLinks = $('.featured-resource-item a');\r\n\r\n\t\tif (this.resourceLinks.length) {\r\n\t\t\tthis.init();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tinit() {\r\n\r\n\t\t// Handle when hovering into any news image/title/btn\r\n\t\tthis.resourceLinks.on({\r\n\t\t mouseenter: (event) => {\r\n\t\t this.addHoverState(event);\r\n\t\t },\r\n\t\t mouseleave: (event) => {\r\n\t\t this.removeHoverState(event);\r\n\t\t }\r\n\t\t});\r\n\r\n\t\t// Handle when focused into any news image/title/btn\r\n\t\tthis.resourceLinks.on('focusin', (event) => {\r\n\t this.addHoverState(event);\r\n\t\t}).on('focusout', (event) => {\r\n\t this.removeHoverState(event);\r\n\t\t});\r\n\r\n\t}\r\n\r\n\taddHoverState(event) {\r\n\t\t$(event.currentTarget).closest('.featured-resource-item').addClass('hover');\r\n\t}\r\n\r\n\tremoveHoverState(event) {\r\n\t\t$(event.currentTarget).closest('.featured-resource-item').removeClass('hover');\r\n\t}\r\n\r\n}\n\nclass FeaturedStats {\r\n\r\n constructor() {\r\n this.stats = $('.featured-stat-item');\r\n this.statHeaders = $('.featured-stat-item .stat-header');\r\n\r\n if (this.stats.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n // on page load, calculate tallest headline and set each one equally\r\n this.getTallestHeadline();\r\n\r\n $(window).resize(()=> {\r\n this.getTallestHeadline();\r\n });\r\n \r\n }\r\n\r\n getTallestHeadline() {\r\n let tallest = 0;\r\n const stats = $('.featured-stat-item');\r\n \r\n this.statHeaders.css('height', 'auto'); // reset headers before calculating tallest\r\n stats.each( function() {\r\n let itemHeight = $(this).find('.stat-header').outerHeight(true);\r\n tallest = itemHeight > tallest ? itemHeight : tallest;\r\n // console.log(`itemHeight: ${itemHeight}, tallest: ${tallest}... tallest now is ${tallest}`);\r\n });\r\n\r\n // set all headlines to be equal heights\r\n this.statHeaders.css('height', tallest);\r\n }\r\n}\n\nclass FeaturedRates {\r\n\r\n constructor() {\r\n this.rates = $('.featured-rate-item');\r\n this.rateHeaders = $('.featured-rate-item .rate-header');\r\n\r\n if (this.rates.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n // on page load, calculate tallest headline and set each one equally\r\n this.getTallestHeadline();\r\n\r\n $(window).resize(()=> {\r\n this.getTallestHeadline();\r\n });\r\n \r\n }\r\n\r\n getTallestHeadline() {\r\n let tallest = 0;\r\n const rates = $('.featured-rate-item');\r\n \r\n this.rateHeaders.css('height', 'auto'); // reset headers before calculating tallest\r\n rates.each( function() {\r\n let itemHeight = $(this).find('.rate-header').outerHeight(true);\r\n tallest = itemHeight > tallest ? itemHeight : tallest;\r\n // console.log(`itemHeight: ${itemHeight}, tallest: ${tallest}... tallest now is ${tallest}`);\r\n });\r\n\r\n // set all headlines to be equal heights\r\n this.rateHeaders.css('height', tallest);\r\n }\r\n}\n\nclass FloatingFormLabel {\r\n\r\n constructor() {\r\n // dom elements\r\n this.formFields = $('.floating-form-label input, .floating-form-label select, .floating-form-label textarea');\r\n\r\n if (this.formFields.length) {\r\n this.init(); \r\n }\r\n }\r\n\r\n init() {\r\n\r\n // on page load check inputs for postbacks to style accordingly\r\n this.formFields.each(function() {\r\n $(this).val(''); \r\n let field = $(this).closest('.field');\r\n \r\n if ($(this).val()) {\r\n field.addClass(\"not-empty\");\r\n }\r\n else {\r\n field.removeClass(\"not-empty\");\r\n }\r\n });\r\n\r\n // Handle when input gets focus\r\n this.formFields.on('focus', (event) => {\r\n this.hasFocus(event); \r\n });\r\n\r\n // Handle when input loses focus\r\n this.formFields.on('blur', (event) => {\r\n this.checkIfEmpty(event);\r\n });\r\n }\r\n\r\n hasFocus(event) {\r\n const field = $(event.target).closest('.field'); \r\n field.addClass('active'); \r\n }\r\n\r\n checkIfEmpty(event) {\r\n const field = $(event.target).closest('.field');\r\n\r\n if ($(event.target).val()) {\r\n field.addClass(\"not-empty\");\r\n }\r\n else {\r\n field.removeClass(\"not-empty\");\r\n }\r\n\r\n field.removeClass('active'); \r\n }\r\n\r\n\r\n\t\r\n\r\n}\n\nclass Menu {\r\n\r\n\tconstructor() {\r\n\t\t// dom elements\r\n\t\tthis.body = $('body');\r\n\t\tthis.mainMenu = $('.main-menu');\r\n\t\tthis.siteHeader = $('header.site-header');\r\n\t\tthis.toggleMobileMenuBtn = $('.toggle-mobile-menu .menu-btn');\r\n\t\tthis.menuTier1LI = $('.main-menu li.tier1.has-children');\r\n\t\tthis.menuTier1Link = $('.main-menu li.tier1.has-children > a');\r\n\t\tthis.mobileMenuIcons = $('.main-menu li .icon');\r\n\r\n\t\t// variables/indicators\r\n\t\tthis.breakpoint = 1199.98; // bootstraps \"lg\"\r\n\t\tthis.browserWidth = this.getBrowserWidth();\r\n\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tinit() {\r\n\r\n\t\t// Handle rebinding elements if page resized\r\n\t\tthis.bindMenu();\r\n\r\n\t\t$(window).resize( () => {\r\n\t\t\tthis.bindMenu();\r\n\t\t});\r\n\t}\r\n\r\n\t// determines if desktop or mobile and binds appropriate menu elements\r\n\tbindMenu() {\r\n\t\tthis.browserWidth = this.getBrowserWidth();\r\n\r\n\t\tif (this.browserWidth >= this.breakpoint) {\r\n\t\t\tthis.unbindMobile();\r\n\t\t\tthis.desktopHandlers();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.unbindDesktop();\r\n\t\t\tthis.mobileHandlers();\r\n\t\t}\r\n\t}\r\n\r\n\tdesktopHandlers() {\r\n\r\n // Desktop Menu Hovered Over\r\n this.menuTier1LI.off('mouseenter mouseleave').on({\r\n mouseenter: (event) => {\r\n $(event.currentTarget).siblings('.hover').removeClass('hover').children('.mega-menu').stop().slideUp().removeClass('open');\r\n $(event.currentTarget).addClass('hover');\r\n $(event.currentTarget).children('.mega-menu').stop().addClass('open').slideDown(300);\r\n },\r\n mouseleave: (event) => {\r\n $(event.currentTarget).removeClass('hover');\r\n $(event.currentTarget).children('.mega-menu').stop().removeClass('open').slideUp(300);\r\n }\r\n });\r\n\r\n // Keyboard Used to focus\r\n this.menuTier1Link.on({\r\n focus: (event) => {\r\n const menuLI = $(event.currentTarget).parent('li.has-children');\r\n\r\n // close any open menus first\r\n menuLI.siblings('.has-children.hover').removeClass('hover').children('.mega-menu').stop().slideUp().removeClass('open');\r\n\r\n // now open focused menu item\r\n menuLI.addClass('hover').children('.mega-menu').stop().slideDown().addClass('open');\r\n }\r\n\t\t});\r\n\t\t\r\n\t\t// close menu if you focus anywhere besides menu\r\n\t\t$('a').on('focus', (event) => {\t\t\t\r\n\t\t\tif (!$(event.target).closest('.main-menu').length) {\r\n\t\t\t\tthis.menuTier1LI.removeClass('hover').children('.mega-menu').stop().slideUp().removeClass('open');\r\n\t\t\t}\r\n }); \r\n\t}\r\n\r\n\r\n\tmobileHandlers() {\r\n\t\t\r\n\t\t// Mobile Menu Btn clicked\r\n\t\tthis.toggleMobileMenuBtn.off('click').on('click', (event) => {\r\n\t\t\tconst keycode = (event.keyCode ? event.keyCode : event.which);\r\n\r\n\t\t\t$(event.currentTarget).find('.fas').toggleClass('fa-bars fa-times');\r\n\t\t\tthis.toggleMobileMenu();\r\n\t\t\t$(event.currentTarget).blur();\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\t// Mobile Menu Btn Enter Key Pressed\r\n\t\t$('.toggle-mobile-menu').off('keypress').keypress( (event) => {\r\n\t\t const keycode = (event.keyCode ? event.keyCode : event.which);\r\n\r\n\t\t if( keycode == '13' || keycode == '32') {\r\n\t\t this.toggleMobileMenuBtn.find('.fas').toggleClass('fa-bars fa-times');\r\n\t\t\t\tthis.toggleMobileMenu(); \r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Mobile Item's Icon clicked to toggle submenu\r\n\t\tthis.mobileMenuIcons.off('click').on('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tthis.mobileSubMenu(event);\r\n\t\t});\r\n\r\n\t\t// Mobile Item's Icon trigered with keyboard \r\n\t\tthis.mobileMenuIcons.off('keypress').keypress( (e) => {\r\n\t\t const keycode = (e.keyCode ? e.keyCode : e.which);\r\n\r\n\t\t if( keycode == '13' || keycode == '32') {\r\n\t\t this.mobileSubMenu(event);\r\n\t\t }\r\n\t\t});\r\n\t}\r\n\r\n\tunbindDesktop() {\r\n\t\t$('.main-menu li.tier1.has-children').off('mouseenter mouseleave');\r\n\t}\r\n\r\n\tunbindMobile() {\r\n\t\tthis.mobileMenuIcons.off('click');\r\n\t\tthis.mobileMenuIcons.off('keypress');\r\n\t}\r\n\r\n\ttoggleMobileMenu() {\r\n\r\n\t\tif (!$('body').hasClass('nav-open')) {\r\n\t\t\tthis.openMobileMenu();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tMenu.closeMobileMenu();\r\n\t\t}\r\n\r\n\t\tthis.calculateMenuHeight();\t\t\r\n\t}\r\n\r\n\r\n\r\n\topenMobileMenu() {\r\n\t\t// first close login and Search if they are open\r\n if ($('.toggle-mobile-login').hasClass('open')) {\r\n Login.closeLogin();\r\n }\r\n if ($('.site-search').hasClass('open')) {\r\n HeaderSearch.closeSearch();\r\n }\r\n\t\t\r\n\t\tthis.body.addClass('nav-open');\r\n\t\tthis.toggleMobileMenuBtn.addClass('open').attr('aria-expanded', true).children('.text').html('CLOSE');\r\n\t\tthis.mainMenu.slideDown();\r\n\t}\r\n\r\n\tstatic closeMobileMenu() {\r\n\t\t$('body').removeClass('nav-open');\r\n\t\t$('.main-menu').slideUp();\r\n\t\t$('.menu-btn').removeClass('open');\r\n\t\t$('.toggle-mobile-menu .menu-btn').removeClass('open').attr('aria-expanded', false).children('.text').html('MENU');\r\n\t\t// close all menu's\r\n\t\t$('.main-menu li.open').removeClass('open hover').find('.icon').removeClass('fa-minus').addClass('fa-plus');\r\n\t\t$('.main-menu .dropdown').slideUp();\r\n\t}\r\n\r\n\t// Handles toggling a mobile menu item\r\n\tmobileSubMenu(event) {\r\n\t\tconst clickedLI = $(event.target).closest('li');\r\n\t\t\r\n\t\t$(event.currentTarget).toggleClass('fa-plus fa-minus');\r\n\t\tclickedLI.toggleClass('open').children('.dropdown').slideToggle(300);\r\n\r\n\t\t// close open menu items\r\n\t\tclickedLI.siblings().removeClass('open').find('.dropdown').slideUp(300);\r\n\t\tclickedLI.siblings().find('.icon').removeClass('fa-minus').addClass('fa-plus');\r\n\t}\r\n\r\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\r\n\tcalculateMenuHeight() {\r\n\t\tconst headerH = this.siteHeader.find('.mobile-header').outerHeight(true);\r\n\t\tlet alertH = 0,\r\n\t\t\ttotalH = 0;\r\n\r\n\t\tconst alerts = $('.alert');\r\n\t\tif (alerts.length) {\r\n\t\t\talerts.each( function() {\r\n\t\t\t\talertH += $(this).outerHeight(true);\r\n\t\t\t});\r\n\t\t}\r\n\t\ttotalH = headerH;\r\n\r\n\t\tthis.siteHeader.css('max-height', 'calc(100vh - '+totalH+'px)');\r\n\t}\r\n\t\r\n\tresetMenu() {\r\n\t\tthis.siteHeader.css('height', 'auto');\r\n\t}\r\n\r\n\tgetBrowserWidth() {\r\n\t\treturn window.innerWidth;\r\n\t}\r\n\r\n}\n\nclass Login {\r\n\r\n constructor() {\r\n this.loginWrapper = $('header .login-wrapper');\r\n this.loginBtn = $('header .toggle-login-btn');\r\n this.mobileLoginBtn = $('header .toggle-mobile-login');\r\n this.loginBox = $('header .login-box');\r\n this.mobileLoginBox = $('header .mobile-login-box');\r\n this.breakpoint = 1199.98; // bootstraps \"lg\"\r\n\r\n if (this.loginWrapper.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n this.moveLoginIfMobileHeader();\r\n $(window).resize(() => {\r\n this.moveLoginIfMobileHeader();\r\n });\r\n\r\n if (this.loginBtn.attr('href') && this.loginBtn.attr('href') != null) {\r\n // Handler to Toggle Mobile Login Box\r\n $('header .toggle-mobile-login').attr('href', $('header .toggle-login-btn').attr('href'));\r\n $('header .toggle-mobile-login').attr('target', $('header .toggle-login-btn').attr('target'));\r\n $('header .toggle-mobile-login').attr('aria-label', $('header .toggle-login-btn').attr('aria-label'));\r\n } else {\r\n // Handler to Toggle Desktop Login Box\r\n this.loginBtn.off('click').on('click', (event) => {\r\n event.preventDefault();\r\n this.toggleLoginBox();\r\n $(event.currentTarget).blur();\r\n });\r\n\r\n // Handler to Toggle Mobile Login Box\r\n this.mobileLoginBtn.off('click').on('click', (event) => {\r\n event.preventDefault();\r\n $(event.currentTarget).toggleClass('open');\r\n this.toggleLoginBox();\r\n $(event.currentTarget).blur();\r\n });\r\n\r\n // handle if user clicks outside of search box\r\n $(document).on('click', (event) => {\r\n let browserWidth = $(window).outerWidth();\r\n \r\n // if on desktop, did they click outside of button or login box\r\n if (browserWidth > this.breakpoint) {\r\n if (!$(event.target).closest('header .login-wrapper').length) {\r\n Login.closeLogin();\r\n }\r\n }\r\n else {\r\n // if on mobile header, did they click outside of button or login box\r\n if ( (!$(event.target).closest('header .login-wrapper').length) && (!$(event.target).closest('header .toggle-mobile-login')) ) {\r\n Login.closeLogin();\r\n }\r\n }\r\n }); \r\n }\r\n\r\n \r\n \r\n }\r\n\r\n // Desktop Login\r\n toggleLoginBox() {\r\n this.loginWrapper = $('header .login-wrapper');\r\n\r\n if (!this.loginWrapper.hasClass('open')) {\r\n this.openLogin();\r\n }\r\n else {\r\n Login.closeLogin();\r\n }\r\n }\r\n\r\n\r\n\r\n openLogin() {\r\n this.loginWrapper = $('header .login-wrapper');\r\n this.loginBox = $('header .login-box'); \r\n\r\n // first close Search and menu if they are open\r\n if ($('.site-search').hasClass('open')) {\r\n HeaderSearch.closeSearch();\r\n }\r\n if ($('body').hasClass('nav-open')) {\r\n Menu.closeMobileMenu();\r\n } \r\n\r\n this.loginWrapper.addClass('open');\r\n this.loginBox.slideDown(300);\r\n $('header .login-box input').first().focus();\r\n }\r\n\r\n static closeLogin() {\r\n const loginWrapper = $('header .login-wrapper');\r\n const loginBox = $('header .login-box');\r\n const mobileLoginBtn = $('header .toggle-mobile-login');\r\n \r\n loginWrapper.removeClass('open');\r\n mobileLoginBtn.removeClass('open');\r\n loginBox.slideUp(300);\r\n }\r\n\r\n\r\n // if mobile header is showing, move login inside .mobile-header\r\n moveLoginIfMobileHeader() {\r\n let browserWidth = $(window).outerWidth();\r\n\r\n if (browserWidth < this.breakpoint) {\r\n if (!$('header .mobile-login-box .login-wrapper').length) {\r\n $('.utility-sub-menu .desktop-login .login-wrapper').appendTo('header .mobile-login-box');\r\n // console.log('moving login to mobile position'); \r\n }\r\n }\r\n else {\r\n if (!$('.utility-sub-menu .desktop-login .login-wrapper').length) {\r\n $('header .mobile-login-box .login-wrapper').appendTo('.utility-sub-menu .desktop-login');\r\n // console.log('moving login back to desktop position'); \r\n }\r\n \r\n }\r\n }\r\n}\n\nclass HeaderSearch {\r\n\r\n constructor() {\r\n this.searchWrapper = $('header .site-search');\r\n this.toggleSearchBtn = $('header .site-search .toggle-search');\r\n this.searchBox = $('header .site-search .search-box');\r\n this.breakpoint = 1199.98; // bootstraps \"lg\"\r\n\r\n if (this.searchWrapper.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n this.moveSearchIfMobileHeader();\r\n $(window).resize(() => {\r\n this.moveSearchIfMobileHeader();\r\n });\r\n\r\n // Handler to Toggle Search Box\r\n this.toggleSearchBtn.off('click').on('click', (event) => {\r\n event.preventDefault();\r\n this.toggleSearchBox();\r\n this.updateAriaLabel();\r\n });\r\n\r\n // handle if user clicks outside of search box\r\n $(document).off('click').on('click', (event) => { \r\n if (!$(event.target).closest('header .site-search').length) {\r\n HeaderSearch.closeSearch();\r\n }\r\n }); \r\n \r\n }\r\n\r\n toggleSearchBox() {\r\n if (!this.searchWrapper.hasClass('open')) {\r\n this.openSearch();\r\n }\r\n else {\r\n HeaderSearch.closeSearch();\r\n }\r\n }\r\n\r\n openSearch() {\r\n // first close login and menu if they are open\r\n if ($('.toggle-mobile-login').hasClass('open')) {\r\n Login.closeLogin();\r\n }\r\n if ($('body').hasClass('nav-open')) {\r\n Menu.closeMobileMenu();\r\n }\r\n \r\n this.searchWrapper.addClass('open');\r\n $('header .site-search .search-box input').focus();\r\n $('header').addClass('search-open');\r\n }\r\n\r\n updateAriaLabel() {\r\n const isOpen = this.searchWrapper.hasClass('open');\r\n const ariaLabel = isOpen ? 'click here to close site search' : 'click here to open site search';\r\n this.toggleSearchBtn.attr('aria-label', ariaLabel);\r\n }\r\n\r\n static closeSearch() {\r\n $('header .site-search').removeClass('open');\r\n $('header').removeClass('search-open');\r\n }\r\n\r\n moveSearchIfMobileHeader() {\r\n // if mobile header is showing, move search inside .mobile-header\r\n let browserWidth = $(window).outerWidth();\r\n // console.log(`browser: ${browserWidth}, breakpoint: ${this.breakpoint}`);\r\n\r\n if (browserWidth < this.breakpoint) {\r\n if (!$('.mobile-header .mobile-search .site-search').length) {\r\n $('header .site-search').appendTo('.mobile-header .mobile-search');\r\n // console.log('moving search to mobile position');\r\n }\r\n }\r\n else {\r\n if (!$('.utlity-nav .desktop-site-search .site-search').length) {\r\n $('.mobile-header .mobile-search .site-search').appendTo('.utility-nav .desktop-site-search');\r\n // console.log('moving search back to desktop position');\r\n }\r\n \r\n }\r\n }\r\n}\n\n/**\r\n * Lazy loads images that are set up properly.\r\n * For img tags: \r\n * \r\n \r\n For BG Images:
\r\n\r\n more info: https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video\r\n */\r\nclass ImageLoader {\r\n\r\n constructor(options = {}) {\r\n this.queue = [];\r\n this.backgroundQueue = [];\r\n this.lazyImageObserver = null;\r\n this.lazyBgObserver = null;\r\n this.options = options;\r\n }\r\n\r\n initialize() {\r\n this.getImagesToLazyLoad();\r\n\r\n if (!(\"IntersectionObserver\" in window)) {\r\n this.abort();\r\n return;\r\n }\r\n\r\n this.onContentLoaded();\r\n this.setGenericPlaceholder();\r\n\r\n this.queue.forEach((lazyImage) => {\r\n this.lazyImageObserver.observe(lazyImage);\r\n });\r\n\r\n this.backgroundQueue.forEach((lazyBg) => {\r\n this.lazyBgObserver.observe(lazyBg);\r\n });\r\n }\r\n\r\n getImagesToLazyLoad() {\r\n this.queue = document.querySelectorAll('.img-load-lazy');\r\n this.backgroundQueue = document.querySelectorAll('.lazy-load-bg');\r\n }\r\n\r\n setGenericPlaceholder() {\r\n if (this.options.genericImagePlaceholder) {\r\n this.queue.forEach((img) => {\r\n img.setAttribute('src', this.options.genericImagePlaceholder);\r\n });\r\n }\r\n\r\n if (this.options.genericBgPlaceholder) {\r\n this.backgroundQueue.forEach((bg) => {\r\n bg.style.backgroundColor = this.options.genericBgPlaceholder;\r\n });\r\n }\r\n }\r\n\r\n onContentLoaded() {\r\n this.lazyImageObserver = new IntersectionObserver((entries, observer) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n let lazyImage = entry.target;\r\n lazyImage.src = lazyImage.dataset.src;\r\n lazyImage.srcset = lazyImage.dataset.srcset;\r\n lazyImage.classList.remove('img-load-lazy');\r\n this.lazyImageObserver.unobserve(lazyImage);\r\n }\r\n });\r\n });\r\n\r\n this.lazyBgObserver = new IntersectionObserver((entries, observer) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n entry.target.classList.remove('lazy-load-bg');\r\n this.lazyBgObserver.unobserve(entry.target);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n for (let i = 0; i < this.queue.length; i++) {\r\n this.queue[i].setAttribute('src', this.queue[i].getAttribute('data-src'));\r\n this.queue[i].classList.remove('img-load-lazy');\r\n }\r\n\r\n for (let i = 0; i < this.backgroundQueue.length; i++) {\r\n this.backgroundQueue[i].classList.remove('lazy-load-bg');\r\n }\r\n }\r\n\r\n}\n\nclass IsElementInView {\r\n\r\n static main() { \r\n \r\n // add any modules to this list to add class .isVisible when they are in view for animations\r\n let animatedModules = [\r\n '.solutions-hero',\r\n '.featured-resources',\r\n '.section-title-with-pulse',\r\n '.comparison-cards',\r\n '.featured-video-item',\r\n '.simple-form-callout-item'\r\n ];\r\n\r\n // on page load check if modules in view\r\n loopThruModules();\r\n \r\n // on scroll check if modules in view\r\n $(window).on('resize scroll', function() {\r\n loopThruModules();\r\n });\r\n\r\n \r\n function loopThruModules() {\r\n // loop through array of module classes/id's, and if visible add class \"isVisible\"\r\n $.each( animatedModules, function( index, myModule ){\r\n if ($(myModule).length) {\r\n // console.log(myModule);\r\n if (isInViewport(myModule)) {\r\n // console.log(myModule+' - is now in view');\r\n $(myModule).addClass('isVisible');\r\n }\r\n }\r\n \r\n });\r\n }\r\n \r\n function isInViewport(myModule) {\r\n let elementTop = $(myModule).offset().top;\r\n let elementBottom = elementTop + $(myModule).outerHeight();\r\n\r\n let viewportTop = $(window).scrollTop();\r\n let viewportBottom = viewportTop + $(window).height();\r\n\r\n // returns true as soon as element starts to become in view\r\n return elementBottom > viewportTop && elementTop < viewportBottom;\r\n }\r\n\r\n\r\n }\r\n\r\n}\n\nfunction MapMarker(model, map, bounds, onMarkerClick, allInfoWindows) {\r\n let marker = null;\r\n let locations = $('.locations-listings article.enable-on-map');\r\n let greatestMarkerDistance = -1;\r\n\r\n const options = {};\r\n options.position = new google.maps.LatLng(model.lat, model.long);\r\n options.map = map;\r\n\r\n if (model.icon) {\r\n options.icon = model.icon;\r\n options.optimized = true;\r\n }\r\n\r\n marker = new google.maps.Marker(options);\r\n \r\n bounds.extend(marker.position);\r\n map.fitBounds(bounds);\r\n\r\n function toRad(value) {\r\n return value * Math.PI / 180;\r\n }\r\n \r\n function calcDistance(lat1, lng1, lat2, lng2) {\r\n var earth = 6371, //km\r\n dLat = toRad(lat2 - lat1),\r\n dLng = toRad(lng2 - lng1);\r\n\r\n lat1 = toRad(lat1);\r\n lat2 = toRad(lat2);\r\n\r\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);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n var distance = (earth * c) / 1.609; //convert from km to miles\r\n\r\n return distance;\r\n }\r\n\r\n if (locations.length < 6) {\r\n // check greatest distance between markers shown\r\n for (var i = 0; i < locations.length; i++) {\r\n for (var j = 1; j < locations.length; j++) {\r\n var lat1 = locations[i].getAttribute(\"data-lat\"),\r\n lng1 = locations[i].getAttribute(\"data-lng\"),\r\n lat2 = locations[j].getAttribute(\"data-lat\"),\r\n lng2 = locations[j].getAttribute(\"data-lng\"),\r\n distance;\r\n\r\n distance = calcDistance(lat1, lng1, lat2, lng2);\r\n\r\n if (distance > greatestMarkerDistance) {\r\n greatestMarkerDistance = distance;\r\n }\r\n }\r\n }\r\n\r\n // if the greatest distance is less than half a mile zoom out \r\n if (greatestMarkerDistance <= 0.5) {\r\n var listener = google.maps.event.addListener(map, \"idle\", function() { \r\n if (map.getZoom() > 15) map.setZoom(15); \r\n google.maps.event.removeListener(listener); \r\n });\r\n }\r\n }\r\n\r\n let link;\r\n if (model.link != null && model.link != \"\") {\r\n link = `More Info

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

${model.name}

\r\n
\r\n

${model.street}

\r\n

${model.cityStateZip}

\r\n
\r\n
\r\n Learn More \r\n Directions \r\n
\r\n
\r\n `\r\n });\r\n\r\n // need to save instance of each infoWindow so they can be closed\r\n allInfoWindows.push(infowindow);\r\n\r\n marker.addListener('click', () => {\r\n // close all infoWindows before opening new one\r\n for (let i = 0; i < allInfoWindows.length; i++) {\r\n allInfoWindows[i].close();\r\n }\r\n \r\n infowindow.open(map, marker);\r\n onMarkerClick(model.id, marker);\r\n });\r\n\r\n this.id = model.id;\r\n\r\n this.closeWindow = function () {\r\n $('#' + this.id).removeClass('active');\r\n infowindow.close();\r\n };\r\n\r\n this.openWindow = function () {\r\n infowindow.open(map, marker);\r\n };\r\n}\n\n/*\r\n :: Custom Google Map\r\n*/\r\n\r\nclass GoogleMap {\r\n\r\n constructor(options) {\r\n this.locations = options.locations || [/* {address: string || [lat,lon], name: string, link: string, icon: string(img src)}*/];\r\n this.container = options.container || '#not_available';\r\n this.map = null;\r\n this.mapBounds = null;\r\n this.markers = [];\r\n this.styling = options.styling || false;\r\n this.onMarkerClick = options.onMarkerClick || function () { };\r\n this.allInfoWindows = [];\r\n this.searchedLocation = options.searchedLocation;\r\n this.searchedMarker = null;\r\n this.icon = options.icon;\r\n }\r\n\r\n main() {\r\n this.container = document.querySelector(this.container);\r\n\r\n if (!this.container) {\r\n return;\r\n }\r\n\r\n this.mapBounds = new google.maps.LatLngBounds();\r\n\r\n // add pin for searched location to bounds\r\n if (this.searchedLocation.position) {\r\n this.mapBounds.extend(this.searchedLocation.position);\r\n }\r\n\r\n this.map = new google.maps.Map(this.container, {\r\n disableDefaultUI: true,\r\n zoomControl: true,\r\n gestureHandling: 'cooperative',\r\n styles: this.styling\r\n });\r\n\r\n this.map.fitBounds(this.mapBounds);\r\n\r\n // Initialize google maps bounding box.\r\n if (this.locations.length == 0 && this.searchedLocation.position) {\r\n var zoomListener = google.maps.event.addListener(this.map, \"idle\", () => { \r\n this.map.setZoom(13); \r\n google.maps.event.removeListener(zoomListener); \r\n });\r\n }\r\n else {\r\n let listener = google.maps.event.addListener(this.map, \"idle\", () => {\r\n this.map.fitBounds(this.mapBounds);\r\n google.maps.event.removeListener(listener);\r\n });\r\n }\r\n\r\n for (let location of this.locations) {\r\n this.setupMarker(location, this.allInfoWindows, location.id);\r\n this.linkMarker(location.id, this.markers);\r\n }\r\n\r\n // drop pin at searched location (if it exists)\r\n if (this.searchedLocation.position) {\r\n this.searchedMarker = new google.maps.Marker({\r\n position: this.searchedLocation.position,\r\n map: this.map,\r\n animation: google.maps.Animation.DROP\r\n });\r\n }\r\n }\r\n\r\n linkMarker(id, markers) {\r\n $('.location-item.enable-on-map').off('click');\r\n\r\n $('.location-item.enable-on-map').on('click', function () {\r\n let index = $('article.enable-on-map').index($(this));\r\n\r\n if ($(this).hasClass('active')) {\r\n $(this).removeClass('active');\r\n }\r\n\r\n else {\r\n $('.location-item.active').removeClass('active');\r\n $(this).addClass('active');\r\n }\r\n\r\n // close all open infowindows\r\n for (let marker of markers) {\r\n marker.closeWindow();\r\n }\r\n\r\n // open infowindow for this location\r\n $(this).addClass('active');\r\n markers[index].openWindow();\r\n });\r\n }\r\n\r\n // Convert address string to lat long object\r\n setupMarker(location, allInfoWindows, locationId) {\r\n // Lat and Long was provided for the location address\r\n if (Array.isArray(location.address)) {\r\n this.makeMarker(location, location.address[0], location.address[1], allInfoWindows, locationId);\r\n return;\r\n }\r\n\r\n // Address string was provided\r\n if (typeof location.address == \"string\") {\r\n const geocoder = new google.maps.Geocoder();\r\n const geoModel = {\r\n 'address': location.address\r\n };\r\n\r\n geocoder.geocode(geoModel, (results, status) => {\r\n if (status != google.maps.GeocoderStatus.OK) {\r\n console.warn(`Google maps Geocode: Can't convert ${location.address} to lat/lon: ${status}`);\r\n return;\r\n }\r\n\r\n this.makeMarker(location, results[0].geometry.location.lat(), results[0].geometry.location.lng(), allInfoWindows, locationId);\r\n });\r\n\r\n return;\r\n }\r\n\r\n // Error, or nothing was provided\r\n console.warn(`Map Marker address for ${location.name} is invalid or not set`);\r\n }\r\n\r\n makeMarker(location, lat, long, allInfoWindows, locationId, icon) {\r\n let marker = null;\r\n // let image = {\r\n // url: originURL + '/library/img/locationsIcons/mapIcons/blank.png'\r\n // };\r\n\r\n marker = new MapMarker({\r\n name: location.name,\r\n address: location.address,\r\n street: location.street,\r\n cityStateZip: location.cityStateZip,\r\n link: location.link,\r\n hoursets: location.hoursets,\r\n icon: location.icon,\r\n lat: lat,\r\n long: long,\r\n id: locationId\r\n }, this.map, this.mapBounds, this.onMarkerClick, allInfoWindows);\r\n\r\n this.markers.push(marker);\r\n }\r\n\r\n}\n\nclass Locations {\r\n\r\n static displayLocations() {\r\n const locations = $('.enable-on-map');\r\n const map = $('#map');\r\n //var autocomplete = new google.maps.places.Autocomplete(document.getElementById('locationInput'));\r\n\r\n let pinOptions = {},\r\n lat,\r\n lng;\r\n\r\n if (!map.length || !locations.length) {\r\n return;\r\n }\r\n\r\n let data = [],\r\n address,\r\n street,\r\n cityStateZip,\r\n icon;\r\n\r\n\t\tvar branchImage = new google.maps.MarkerImage(\r\n\t\t\t'/ResourcePackages/ST/library/img/icons/mapIcons/branches.png',\r\n\t\t\tnew google.maps.Size(37, 52),\r\n\t\t\tnew google.maps.Point(0, 0),\r\n\t\t\tnew google.maps.Point(17, 46)\r\n\t\t);\r\n\r\n var atmImage = new google.maps.MarkerImage(\r\n '/ResourcePackages/ST/library/img/icons/mapIcons/georgiaUnitedAtms.png',\r\n new google.maps.Size(38, 51),\r\n new google.maps.Point(0, 0),\r\n new google.maps.Point(17, 46)\r\n ); \r\n \r\n var liveTellerImage = new google.maps.MarkerImage(\r\n '/ResourcePackages/ST/library/img/icons/mapIcons/atmLiveTeller.png',\r\n new google.maps.Size(37, 53),\r\n new google.maps.Point(0, 0),\r\n new google.maps.Point(17, 46)\r\n\t\t);\r\n\t\t\r\n\t\tvar blankImage = new google.maps.MarkerImage(\r\n '/ResourcePackages/ST/library/img/icons/mapIcons/blank.png',\r\n new google.maps.Size(34, 46),\r\n new google.maps.Point(0, 0),\r\n new google.maps.Point(17, 46)\r\n );\r\n \r\n locations.each(function () {\r\n // set the initial order\r\n let index = this.id.split('-')[1];\r\n index = index - 1;\r\n $(this).css('order', index);\r\n\r\n \r\n var arrTitles = $(this)\r\n .find('.hours .label')\r\n .map(function() {\r\n return $(this).text();\r\n })\r\n .get();\r\n\r\n if(arrTitles[0] == \"Drive-Up Hours:\" && arrTitles.length > 1){\r\n $(this).find('.hours').addClass('reverse');\r\n }\r\n\r\n\r\n // If a lat and long was provided, use that.\r\n // If not, then use the address string\r\n if ($(this).attr('data-lat') && $(this).attr('data-lng')) {\r\n address = [$(this).attr('data-lat'), $(this).attr('data-lng')];\r\n } else {\r\n address = $(this).attr('data-address');\r\n } \r\n\r\n let locOptions = $(this).find('.options').text().toLowerCase().trim();\r\n if (locOptions.indexOf('branch') >= 0) {\r\n icon = branchImage;\r\n } else if (locOptions.includes('teller') >= 0 || locOptions.toUpperCase().includes(\"ATM+\") || locOptions.toUpperCase().includes(\"ATM PLUS\") || locOptions.toUpperCase().includes('UNITED') >= 0 ) {\r\n icon = liveTellerImage;\r\n } else {\r\n icon = blankImage;\r\n }\r\n\r\n street = $(this).attr('data-street');\r\n cityStateZip = $(this).attr('data-citystatezip');\r\n\r\n data.push({\r\n address: address,\r\n street: street,\r\n cityStateZip: cityStateZip,\r\n name: $(this).find('.location-title').text(),\r\n link: $(this).find('.location-title a').attr('href'),\r\n hoursets: $('.hourset', this),\r\n id: $(this).data('id'),\r\n icon: icon\r\n });\r\n });\r\n\r\n var locationsMap = new GoogleMap({\r\n locations: data,\r\n container: '#map',\r\n onMarkerClick: (id, marker) => {\r\n $('.location-item.active').removeClass('active');\r\n $('#location-' + id).addClass('active');\r\n\r\n if ( !$('.locations').hasClass('show-locations')) {\r\n $('.locations').addClass('show-locations');\r\n calculateItemPositions();\r\n }\r\n\r\n // animate locations to item selected\r\n let itemTop = $('#location-' + id).attr('data-top');\r\n $('.locations-pane').animate({\r\n scrollTop: itemTop - 30\r\n }, 400);\r\n },\r\n searchedLocation: pinOptions\r\n });\r\n\r\n locationsMap.main();\r\n filterLocations();\r\n\r\n $('#locationInput').on('change', event => {\r\n if (event.target.value === \"\") {\r\n //autocomplete.set('place', {});\r\n resetMap();\r\n }\r\n });\r\n \r\n $('#locationInput').keypress( (event) => {\r\n const keycode = (event.keyCode ? event.keyCode : event.which);\r\n \r\n if( keycode == '13') {\r\n event.preventDefault();\r\n if (event.target.value === \"\") {\r\n //autocomplete.set('place', {});\r\n resetMap();\r\n }\r\n } \r\n });\r\n \r\n // on filter type change, update locations\r\n $('.filter-by-types .js-filter-type-item input').on('change', function (e) {\r\n $(this).closest('.js-filter-type-item').toggleClass('checked');\r\n filterLocations($(this));\r\n updateFilterSelectboxText();\r\n });\r\n\r\n // clear filters clicked\r\n $('.js-clear-filters-btn').on('click', (e) => {\r\n clearFilters();\r\n $(e.currentTarget).hide();\r\n\r\n });\r\n\r\n // custom filter type selectbox\r\n $('.filter-by-types .js-custom-select-box').on('click', (e) => {\r\n toggleFilterSelectbox(e);\r\n });\r\n $('.filter-by-types .js-custom-select-box').on('keypress', (e) => {\r\n e.preventDefault();\r\n let keycode = e.code || e.which;\r\n \r\n if (keycode === 13 || keycode === \"Enter\" || keycode === 32 || keycode === \"Space\") {\r\n toggleFilterSelectbox(e);\r\n }\r\n });\r\n\r\n // close filter when clicked outside of dropdown\r\n $(document).on('click', function(e) {\r\n const selectbox = $('.filter-by-types .js-custom-select-box');\r\n const arrow = selectbox.find('.arrow .fas');\r\n const dropdown = selectbox.siblings('.dropdown');\r\n \r\n if (!$(e.target).closest('.filter-by-types').length) {\r\n selectbox.removeClass('open');\r\n arrow.removeClass('fa-chevron-up').addClass('fa-chevron-down');\r\n dropdown.slideUp(300);\r\n }\r\n });\r\n $('.locations-template a').on('focus', function(e) {\r\n const selectbox = $('.filter-by-types .js-custom-select-box');\r\n const arrow = selectbox.find('.arrow .fas');\r\n const dropdown = selectbox.siblings('.dropdown');\r\n \r\n if (!$(e.target).closest('.filter-by-types').length) {\r\n selectbox.removeClass('open');\r\n arrow.removeClass('fa-chevron-up').addClass('fa-chevron-down');\r\n dropdown.slideUp(300);\r\n } \r\n });\r\n \r\n // utilize Google Places API to filter locations within a radius\r\n if ($('#map').length != 0) {\r\n\r\n $('.apply-filters-btn').on('click', function (e) {\r\n e.preventDefault();\r\n filterLocations($(this));\r\n });\r\n\r\n placesAutocomplete();\r\n }\r\n\r\n // open/close custom filter selectbox\r\n function toggleFilterSelectbox(e) {\r\n const selectbox = $(e.currentTarget);\r\n const arrow = selectbox.find('.arrow .fas');\r\n const dropdown = selectbox.siblings('.dropdown');\r\n\r\n if (!selectbox.hasClass('open')) {\r\n selectbox.addClass('open');\r\n arrow.removeClass('fa-chevron-down').addClass('fa-chevron-up');\r\n dropdown.slideDown(300);\r\n }\r\n else {\r\n selectbox.removeClass('open');\r\n arrow.removeClass('fa-chevron-up').addClass('fa-chevron-down');\r\n dropdown.slideUp(300);\r\n } \r\n }\r\n\r\n // update custom filter selectbox text based off selections made\r\n function updateFilterSelectboxText() {\r\n const filterTypes = $('.filter-by-types .js-filter-type-item input:checked');\r\n const selectboxText = $('.filter-by-types .js-custom-select-box .filter-text');\r\n const clearFiltersBtn = $('.js-clear-filters-btn');\r\n \r\n if (!filterTypes.length) {\r\n selectboxText.html(\"Select Filter(s)\");\r\n clearFiltersBtn.hide();\r\n }\r\n else if (filterTypes.length == 1) {\r\n selectboxText.html(filterTypes.siblings('.custom-control-label').html());\r\n clearFiltersBtn.css('display', 'block');\r\n }\r\n else if (filterTypes.length > 1) {\r\n selectboxText.html('('+filterTypes.length+') Filters Selected');\r\n clearFiltersBtn.css('display', 'block');\r\n }\r\n }\r\n\r\n function resetMap() {\r\n // reset location data, show all locations\r\n pinOptions = {};\r\n lat = '';\r\n lat = '';\r\n document.querySelectorAll('.location-item').forEach(location => {\r\n // look at the call parameters before using the\r\n // showLocation() method\r\n showLocation($(location),'',true);\r\n });\r\n\r\n reloadMap();\r\n filterLocations();\r\n }\r\n\r\n function reloadMap() {\r\n if (!map.length || !locations.length) {\r\n return;\r\n }\r\n\r\n // reset shown locations based on filter\r\n data = [];\r\n let address,\r\n street,\r\n cityStateZip,\r\n icon;\r\n\r\n $('.enable-on-map').each(function () {\r\n // If a lat and long was provided, use that.\r\n // If not, then use the address string\r\n if ($(this).attr('data-lat') && $(this).attr('data-lng')) {\r\n address = [$(this).attr('data-lat'), $(this).attr('data-lng')];\r\n } else {\r\n address = $(this).attr('data-address');\r\n }\r\n\r\n let locOptions = $(this).find('.options').text().toLowerCase().trim();\r\n if (locOptions.indexOf('branch') >= 0) {\r\n\t\t\t\t\ticon = branchImage;\r\n\t\t\t\t}\r\n else if (locOptions.includes('teller') >= 0 || locOptions.toUpperCase().includes(\"ATM+\") || locOptions.toUpperCase().includes(\"ATM PLUS\") || locOptions.toUpperCase().includes('UNITED') >= 0 ) {\r\n\t\t\t\t\ticon = liveTellerImage;\r\n\t\t\t\t} \r\n else {\r\n\t\t\t\t\ticon = blankImage;\r\n\t\t\t\t}\r\n\r\n street = $(this).attr('data-street');\r\n cityStateZip = $(this).attr('data-citystatezip');\r\n\r\n data.push({\r\n address: address,\r\n street: street,\r\n cityStateZip: cityStateZip,\r\n name: $(this).find('.location-title').text(),\r\n link: $(this).find('.location-title a').attr('href'),\r\n hoursets: $('.hourset', this),\r\n id: $(this).data('id'),\r\n icon: icon\r\n });\r\n });\r\n\r\n locationsMap = new GoogleMap({\r\n locations: data,\r\n container: '#map',\r\n onMarkerClick: (id, marker) => {\r\n $('.location-item.active').removeClass('active');\r\n $('#location-' + id).addClass('active');\r\n \r\n if ( !$('.locations').hasClass('show-locations')) {\r\n $('.locations').addClass('show-locations');\r\n calculateItemPositions();\r\n } \r\n\r\n // animate locations to item selected\r\n let itemTop = $('#location-' + id).attr('data-top');\r\n $('.locations-pane').animate({\r\n scrollTop: itemTop - 30\r\n }, 400);\r\n },\r\n searchedLocation: pinOptions\r\n });\r\n\r\n locationsMap.main();\r\n }\r\n\r\n function hideLocation(item) {\r\n item.css('display', 'none');\r\n item.removeClass('enable-on-map');\r\n }\r\n\r\n /**\r\n * showLocation(item, distance, reset)\r\n * @param {Element} item \r\n * @param {~String} distance \r\n * @param {~Boolean} reset \r\n */\r\n function showLocation(item, distance, reset) {\r\n item.css('display', 'flex');\r\n item.addClass('enable-on-map');\r\n\r\n // if you're resetting the map, reset the distance\r\n // or it will mess with this filter implementation\r\n if (reset) {\r\n distance = null;\r\n item.find('.distance').html('');\r\n item.data(\"distance\", distance);\r\n }\r\n\r\n if (distance) {\r\n distance = distance.toFixed(2);\r\n item.find('.distance').show().html(distance + ' miles');\r\n item.data(\"distance\", distance);\r\n }\r\n }\r\n\r\n function filterLocations() {\r\n const filterTypes = $('.filter-by-types input:checked');\r\n const showRadius = $('#show-radius').length ? $('#show-radius').val() : 20;\r\n \r\n $(\".location-item\").each(function () {\r\n var options = $(this).find(\".bankInfo .options\").text().toLowerCase().trim(),\r\n lat2 = $(this).attr(\"data-lat\"),\r\n lng2 = $(this).attr(\"data-lng\"),\r\n show = false,\r\n distance = null;\r\n\r\n // check if location matches any filter type selected\r\n filterTypes.each(function() {\r\n let filterVal = $(this).val().toLowerCase();\r\n \r\n // console.log(`options: ${options}, filterVal: ${filterVal}`);\r\n if ( options.indexOf(filterVal) >= 0 ) {\r\n show = true;\r\n }\r\n });\r\n \r\n if (!filterTypes.length) {\r\n show = true;\r\n }\r\n\r\n if (lat && lng) {\r\n distance = calcDistance(lat, lng, lat2, lng2);\r\n\r\n // only show location if it is in the selected radius IF SEARCH TERM PRESENT\r\n if ($('#locationInput').val() !== '') {\r\n if (distance > showRadius) {\r\n show = false;\r\n }\r\n } else {\r\n show = true;\r\n }\r\n }\r\n\r\n if (show && distance) {\r\n showLocation($(this), distance);\r\n }\r\n else if (show && !distance) {\r\n showLocation($(this));\r\n }\r\n else {\r\n hideLocation($(this));\r\n }\r\n });\r\n\r\n if (locationsMap.searchedLocation) {\r\n // sort shown locations by distance\r\n sortLocations();\r\n }\r\n\r\n reloadMap();\r\n\r\n // don't show location items on page load\r\n // if (initialPageLoad != true) {\r\n // }\r\n // Check if any locations were found. If so, show items\r\n if ($('.locations-listings .location-item.enable-on-map').length > 0) {\r\n $('.locations').addClass('show-locations'); \r\n $('.locations .message-box').removeClass('show-no-locations');\r\n $('.clear-filters-btn').css('display', 'block');\r\n }\r\n else {\r\n $('.locations').removeClass('show-locations'); \r\n $('.locations .message-box').addClass('show-no-locations');\r\n $('.clear-filters-btn').hide();\r\n }\r\n\r\n\r\n calculateItemPositions();\r\n }\r\n\r\n function toRad(value) {\r\n return value * Math.PI / 180;\r\n }\r\n\r\n function calcDistance(lat1, lng1, lat2, lng2) {\r\n var earth = 6371, //km\r\n dLat = toRad(lat2 - lat1),\r\n dLng = toRad(lng2 - lng1);\r\n\r\n lat1 = toRad(lat1);\r\n lat2 = toRad(lat2);\r\n\r\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);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var distance = (earth * c) / 1.609; //convert from km to miles\r\n\r\n return distance;\r\n }\r\n\r\n function sortLocations() {\r\n var locations = [];\r\n\r\n // create array of shown articles so we can sort it\r\n $('article.enable-on-map').each(function () {\r\n locations.push($(this));\r\n });\r\n\r\n // sort locations by distance in ascending order\r\n locations.sort(function (a, b) {\r\n return a.data(\"distance\") - b.data(\"distance\");\r\n });\r\n\r\n // iterate through sorted locations and order them on the page\r\n for (let i = 0; i < locations.length; i++) {\r\n locations[i].css('order', i);\r\n }\r\n }\r\n\r\n function calculateItemPositions() {\r\n locations.each(function () {\r\n // save items position in list as an attribute to use for marker clicks\r\n $(this).attr('data-top', $(this).position().top);\r\n });\r\n }\r\n\r\n\r\n \r\n /* Select 1st google Autocomplete on Enter */ \r\n function selectFirstOnEnter(input) { // store the original event binding function\r\n\t\t\tvar _addEventListener = (input.addEventListener) ? input.addEventListener : input.attachEvent;\r\n\t\t\tfunction addEventListenerWrapper(type, listener) { // Simulate a 'down arrow' keypress on hitting 'return' when no pac suggestion is selected, and then trigger the original listener.\r\n\t\t\t\tif (type == \"keydown\") { \r\n\t\t\t\t\tvar orig_listener = listener;\r\n\t\t\t\t\tlistener = function(event) {\r\n\t\t\t\t\t\tvar suggestion_selected = $(\".pac-item-selected\").length > 0;\r\n\t\t\t\t\t\tif (event.which == 13 && !suggestion_selected) { \r\n\t\t\t\t\t\t\tvar simulated_downarrow = $.Event(\"keydown\", {keyCode: 40, which: 40}); \r\n\t\t\t\t\t\t\torig_listener.apply(input, [simulated_downarrow]); \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\torig_listener.apply(input, [event]);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t_addEventListener.apply(input, [type, listener]); // add the modified listener\r\n\t\t\t}\r\n\t\t\tif (input.addEventListener) { \r\n\t\t\t\tinput.addEventListener = addEventListenerWrapper; \r\n\t\t\t} else if (input.attachEvent) { \r\n\t\t\t\tinput.attachEvent = addEventListenerWrapper; \r\n\t\t\t}\r\n\t\t}\r\n \r\n \r\n\r\n function placesAutocomplete() {\r\n var furthestWest = 0,\r\n\t\t\t furthestEast = 0,\r\n\t\t\t furthestSouth = 0,\r\n\t\t\t furthestNorth = 0,\r\n pinBuffer = 48280.3, \r\n earth = 6378.137, //radius of the earth in kilometer\r\n pi = Math.PI,\r\n m = (1 / ((2 * pi / 360) * earth)) / 1000; //1 meter in degree\r\n\r\n // lat = north/south, lon =\r\n\r\n\t\t\t// Get bounding box values for autcomplete restriction\r\n\t\t\t$('.location-item').each(function() {\r\n\t\t\t\tif ($(this).attr('data-lat') && $(this).attr('data-lat')) {\r\n\t\t\t\t\tconst lat = parseFloat($(this).attr('data-lat'));\r\n\t\t\t\t\tconst lon = parseFloat($(this).attr('data-lng'));\r\n\t\r\n\t\t\t\t\tif (!furthestNorth || lat > furthestNorth) {\r\n\t\t\t\t\t\tfurthestNorth = lat + (pinBuffer * m); // add 30mile (48280.3m) buffer from point\r\n\t\t\t\t\t}\r\n \r\n\t\t\t\t\tif (!furthestSouth || lat < furthestSouth) {\r\n furthestSouth = lat - (pinBuffer * m); // add 30mile (48280.3m) buffer from point\r\n\t\t\t\t\t}\r\n \r\n\t\t\t\t\tif (!furthestWest || lon < furthestWest) {\r\n furthestWest = lon - (pinBuffer * m) / Math.cos(lat * (pi / 180));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!furthestEast || lon > furthestEast) {\r\n furthestEast = lon + (pinBuffer * m) / Math.cos(lat * (pi / 180));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n \r\n\t\t\tvar b1 = new google.maps.LatLng(furthestSouth, furthestWest );\r\n\t\t\tvar b2 = new google.maps.LatLng(furthestNorth, furthestEast );\r\n\t\t\tvar lookupBounds = new google.maps.LatLngBounds( b1, b2 );\r\n \r\n\t\t\tvar options = {\r\n\t\t\t\tbounds: lookupBounds,\r\n\t\t\t\tstrictBounds: true,\r\n types: [\"(regions)\"],\r\n componentRestrictions: {country: \"us\"}\r\n\t\t\t};\r\n \r\n var autocomplete = new google.maps.places.Autocomplete(document.getElementById('locationInput'), options);\r\n \r\n google.maps.event.addListener(autocomplete, 'place_changed', function () {\r\n let place = autocomplete.getPlace();\r\n\r\n if (place.geometry !== undefined) {\r\n lat = place.geometry.location.lat();\r\n lng = place.geometry.location.lng();\r\n\r\n pinOptions = {};\r\n pinOptions.position = new google.maps.LatLng(lat, lng);\r\n\r\n // filter through locations to only show those in selected filter\r\n filterLocations();\r\n\r\n $('.locations').addClass('show-locations');\r\n }\r\n $('.js-clear-filters-btn').css('display', 'block');\r\n\r\n });\r\n\r\n selectFirstOnEnter(document.getElementById('locationInput'));\r\n }\r\n\r\n function clearFilters() { \r\n $('.js-filter-type-item input').prop('checked', false);\r\n $('.filter-by-types .js-custom-select-box .filter-text').html('Select Filter(s)');\r\n $('.filter-by-types .js-custom-select-box').removeClass('open').find('.dropdown').slideUp(300);\r\n $('#show-radius:second').prop('selected',true);\r\n \r\n // clear autocomplete\r\n $('#locationInput').blur().val('');\r\n\r\n $('.clear-filters-btn').hide();\r\n placesAutocomplete();\r\n filterLocations();\r\n reloadMap();\r\n }\r\n }\r\n}\n\nclass PolyfillHelpers {\r\n\r\n static main() {\r\n \r\n // support for .forEach() in IE11\r\n if (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n } \r\n\r\n // support for .closest in IE11\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function(s) {\r\n var el = this;\r\n do {\r\n if (Element.prototype.matches.call(el, s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n }\r\n }\r\n}\n\nclass ResponsiveDatatables {\r\n\tconstructor() {\r\n this.responsiveTable = $('.responsive-table:visible');\r\n this.tableWrapper = $('.table-wrapper');\r\n this.tableHeadline = $('.table-wrapper .table-headline');\r\n this.editMode = $('.sfPageEditor');\r\n\r\n\t\tif (this.responsiveTable.length && !this.editMode.length) {\r\n this.init();\r\n }\r\n \r\n if (this.tableWrapper.length && !this.editMode.length) {\r\n this.toggleTable();\r\n }\r\n\t}\r\n \r\n\tinit() {\r\n \r\n this.initializeDatatables(this.responsiveTable); \r\n \r\n if (this.tableHeadline.length) {\r\n this.toggleTable();\r\n }\r\n\r\n $(window).resize(() => {\r\n if (this.tableHeadline.length) {\r\n this.toggleTable();\r\n }\r\n });\r\n }\r\n\r\n initializeDatatables(table) {\r\n // Initialize tables with dataTables plugin https://datatables.net/\r\n\t\ttable.DataTable( {\r\n responsive: true,\r\n\t\t paging: false,\r\n\t\t searching: false,\r\n\t ordering: false,\r\n\t info: false,\r\n\t autoWidth: false\r\n }); \r\n }\r\n \r\n // if on mobile, loop thru each table header and bind clicking to toggle tables\r\n toggleTable() {\r\n self = this;\r\n let browserWidth = $(window).outerWidth();\r\n\r\n if (browserWidth < 991.98) {\r\n this.tableHeadline.each(function() {\r\n let toggleTableIcon = $(this).children('.mobile-icon');\r\n $(this).closest('.table-wrapper').find('.table-container').hide(); // if a table header exists, close all tables on mobile\r\n\r\n $(this).off('click').on('click', function() {\r\n let closestTable = $(this).siblings('.table-container');\r\n\r\n closestTable.slideToggle(300, function() {\r\n self.initializeDatatables(closestTable.children('.responsive-table'));\r\n toggleTableIcon.toggleClass('fa-chevron-right fa-chevron-down');\r\n });\r\n });\r\n\r\n });\r\n }\r\n }\r\n\r\n}\n\nclass ScrollToTop {\r\n\r\n static main() {\r\n \r\n \t// Scroll To Top\r\n \t$('.scrollToTop').on('click', function(){\r\n \t $('html, body').stop().animate({scrollTop: 0}, 500, 'linear');\r\n \t return false;\r\n \t});\r\n\r\n scrollToTopButton();\r\n\r\n \t// Fade in/out Scroll To Top button after 500px\r\n \tfunction scrollToTopButton() {\r\n \t var button = $('.scrollToTop'), \r\n \t view = $(window),\r\n \t timeoutKey = -1;\r\n\r\n \t // page load\r\n \t if (view.scrollTop() > 500) {\r\n \t button.fadeIn();\r\n \t }\r\n \t else {\r\n \t button.fadeOut();\r\n \t }\r\n\r\n \t $(document).on('scroll', function() {\r\n \t if(timeoutKey) {\r\n \t window.clearTimeout(timeoutKey);\r\n \t }\r\n\r\n \t timeoutKey = window.setTimeout(function(){\r\n \t if (view.scrollTop() > 500) {\r\n \t button.fadeIn();\r\n \t }\r\n \t else {\r\n \t button.fadeOut();\r\n \t }\r\n \t }, 100);\r\n \t });\r\n \t}\r\n\t \r\n }\r\n\r\n}\n\nclass SliderCallout {\r\n\r\n constructor() {\r\n this.sliderWrapper = $('.slider-callout');\r\n this.editMode = $('.sfPageEditor');\r\n\r\n if (this.sliderWrapper.length && !this.editMode.length) {\r\n this.init();\r\n }\r\n }\r\n \r\n init() {\r\n let self = this;\r\n \r\n this.sliderWrapper.each(function() {\r\n let slider = $(this).find('.slider-callout-items');\r\n let totalItems = slider.find('.slider-callout-item').length;\r\n let pausePlayBtn = $(this).find('.pause-play');\r\n let dotsWrapper = $(this).find('.dots-wrapper');\r\n \r\n if (totalItems > 1) {\r\n // initialize slick slider\r\n slider.slick({\r\n dots: true,\r\n appendDots: dotsWrapper,\r\n arrows: false,\r\n lazyLoad: 'ondemand',\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n fade: true,\r\n autoplay: true,\r\n autoplaySpeed: 7000,\r\n pauseOnHover: false\r\n });\r\n \r\n // Handle if pause/play icon was clicked\r\n pausePlayBtn.on('click', (event) => {\r\n event.preventDefault();\r\n self.pausePlay(slider);\r\n });\r\n }\r\n else {\r\n $(this).find('.slider-controls').hide();\r\n $(this).find('.slider-callout-item').addClass('only-one-slide'); // helps get pulse animation to still load\r\n }\r\n }); \r\n\r\n }\r\n\r\n pausePlay(slider) {\r\n let pausePlayBtn = slider.siblings('.slider-controls').find('.pause-play');\r\n\r\n if (pausePlayBtn.hasClass('paused')) {\r\n slider.slick('slickPlay');\r\n }\r\n else {\r\n slider.slick('slickPause');\r\n }\r\n pausePlayBtn.toggleClass('paused').blur().find('.fas').toggleClass('fa-pause fa-play');\r\n }\r\n}\n\nclass SimpleForm {\r\n\r\n constructor() {\r\n this.selectFields = $('select[data-sf-role=\"dropdown-list-field-select\"]');\r\n this.submitBtn = $('.simple-form-callout .sf-SubmitButton');\r\n\r\n if (this.selectFields.length || this.submitBtn.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n \r\n // add disabled attribute to first item of any select\r\n if (this.selectFields.length) {\r\n this.addDisabledToSelects();\r\n }\r\n \r\n // Handle when submit is clicked\r\n this.submitBtn.on('click', (event) => {\r\n this.thankYouMessage(event);\r\n });\r\n }\r\n \r\n addDisabledToSelects() {\r\n this.selectFields.each(function() {\r\n $(this).find('option:eq(0)').prop('disabled', true);\r\n });\r\n \r\n }\r\n\r\n // after form is submitted, thank you message replaces form so scroll up so it's visible\r\n thankYouMessage(event) {\r\n const form = $(event.currentTarget).closest('.simple-form-callout');\r\n\r\n setInterval(function() {\r\n \r\n if (!form.hasClass('thank-you')) {\r\n $('html, body').animate({ scrollTop: form.offset().top}, 1000);\r\n form.addClass('thank-you');\r\n }\r\n }, 500);\r\n }\r\n}\n\nclass SocialShare {\r\n\r\n constructor() {\r\n this.shareIcons = $('.social-share');\r\n\r\n if (this.shareIcons.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n const fb = $('.share-facebook');\r\n const lk = $('.share-linkedin');\r\n const tw = $('.share-twitter');\r\n \r\n const url = encodeURIComponent(window.location.href);\r\n \r\n fb.attr('href', `https://www.facebook.com/sharer/sharer.php?u=${url}`);\r\n lk.attr('href', `https://www.linkedin.com/shareArticle?mini=true&url=${url}`);\r\n tw.attr('href', `https://twitter.com/intent/tweet?url=${url}`);\r\n\r\n // need to find instagram\r\n\r\n }\r\n\r\n}\n\nclass SolutionsLinks {\r\n\r\n constructor() {\r\n this.solutionsSelect = $('.solutions-select');\r\n this.selectTitle = $('.solutions-links .select-title');\r\n this.selectDropdown = $('.solutions-links .select-dropdown');\r\n this.selectOptions = $('.solutions-links .select-option');\r\n this.goBtn = $('.solutions-links .go-btn');\r\n\r\n if (this.solutionsSelect.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n // Handler to Toggle opening select box\r\n this.selectTitle.on('click', (event) => {\r\n event.preventDefault();\r\n this.toggleSolutionsDropdown();\r\n });\r\n\r\n // handle if user clicks outside of select box close it\r\n $(document).on('click', (event) => { \r\n if (!$(event.target).closest('.solutions-links').length) {\r\n this.closeDropdown();\r\n }\r\n }); \r\n\r\n // Handler when select option was chosen\r\n this.selectOptions.on('click', (event) => {\r\n event.preventDefault();\r\n this.optionSelected(event);\r\n });\r\n \r\n }\r\n\r\n toggleSolutionsDropdown() {\r\n if (!this.solutionsSelect.hasClass('open')) {\r\n this.openDropdown();\r\n }\r\n else {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n openDropdown() {\r\n this.solutionsSelect.addClass('open');\r\n this.selectDropdown.slideDown(300);\r\n this.selectTitle.find('.arrow').removeClass('fa-chevron-down').addClass('fa-chevron-up');\r\n }\r\n \r\n closeDropdown() {\r\n this.solutionsSelect.removeClass('open');\r\n this.selectDropdown.slideUp(300);\r\n this.selectTitle.find('.arrow').removeClass('fa-chevron-up').addClass('fa-chevron-down');\r\n }\r\n\r\n optionSelected(event) {\r\n const url = $(event.currentTarget).attr('href');\r\n const text = $(event.currentTarget).html();\r\n const aria = $(event.currentTarget).attr('aria-label');\r\n\r\n this.solutionsSelect.addClass('selected');\r\n this.selectTitle.attr('aria-label', aria).find('.select-title-text').html(text);\r\n this.goBtn.attr('href', url);\r\n this.closeDropdown();\r\n }\r\n\r\n \r\n}\n\nclass SpeedBump {\r\n\r\n constructor() {\r\n\r\n // dom elements\r\n this.speedbumpLink = $('.speedbump-link');\r\n this.acceptBtn = '';\r\n this.denyBtn = '';\r\n this.speedbumpModal = '';\r\n this.message = '';\r\n this.url = '';\r\n\r\n if (this.speedbumpLink.length) {\r\n this.init(); \r\n }\r\n\r\n }\r\n\r\n init() {\r\n\t \r\n // if \".speedbump-link\" is clicked, pull message from data attribute and display in a modal\r\n this.speedbumpLink.on('click', (event) => {\r\n event.preventDefault();\r\n \r\n this.message = $(event.currentTarget).attr('data-redirect-message'); \r\n this.url = $(event.currentTarget).attr('href');\r\n\t\t\t\r\n\t\t\t//Get default text if one is not provided\r\n\t\t\tif(!this.message) {\r\n\t\t\t\tthis.message = $('meta[name=speedbump-message]').attr('content');\r\n\t\t\t}\r\n\t\t\t\r\n // create modal with message\r\n this.createSpeedBumpModal();\r\n this.bindButtons();\r\n\r\n // Handle when Close is clicked\r\n this.denyBtn.on('click', (event) => {\r\n this.returnToSite(event);\r\n });\r\n\r\n // Handle when Accept is clicked\r\n this.acceptBtn.on('click', (event) => {\r\n this.allowLink(event);\r\n });\r\n \r\n });\r\n\r\n }\r\n\r\n bindButtons() {\r\n this.acceptBtn = $('.speedBumpModal .acceptBtn');\r\n this.denyBtn = $('.speedBumpModal .denyBtn');\r\n this.speedbumpModal = $('.speedBumpModal');\r\n }\r\n\r\n createSpeedBumpModal() {\r\n $('body').prepend('
External Link Disclaimer
\"Georgia
'+this.message+'
'); \r\n }\r\n\r\n\r\n returnToSite(event) { \r\n event.preventDefault();\r\n this.speedbumpModal.remove();\r\n }\r\n\r\n allowLink() {\r\n this.speedbumpModal.remove();\r\n }\r\n\r\n}\n\nclass Testimonials {\r\n\r\n constructor() {\r\n this.slider = $('.testimonials-slider .testimonials');\r\n this.editMode = $('.sfPageEditor');\r\n\r\n if (this.slider.length && !this.editMode.length) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n\r\n // initialize slick slider\r\n this.slider.slick({\r\n dots: false,\r\n arrows: true,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n autoplay: false,\r\n prevArrow: '',\r\n nextArrow: ''\r\n }); \r\n }\r\n}\n\n/* Site Specific Javascript Component Imports */\r\n\r\n\r\n\r\nconst MainScripts = (() => {\r\n\r\n\t// Shared\r\n\tif (typeof svg4everybody == 'function') { svg4everybody(); }\r\n\tPolyfillHelpers.main();\r\n\r\n\t/* Site Specific javascript modules */\r\n\tScrollToTop.main();\t\r\n\tconst imageLoader = new ImageLoader();\r\n\timageLoader.initialize(); // lazy load\r\n\r\n\tnew Accordions();\r\n\tnew Alerts();\r\n\tnew ComparisonCards();\r\n\tnew FeaturedResources();\r\n\tnew FeaturedRates();\r\n\tnew FeaturedStats();\r\n\tnew FloatingFormLabel();\r\n\tnew HeaderSearch();\r\n\tIsElementInView.main();\r\n\tnew Login();\r\n\tnew Menu();\r\n\tnew ResponsiveDatatables();\r\n\tnew SliderCallout();\r\n\tnew SimpleForm();\r\n\tnew SocialShare();\r\n\tnew SolutionsLinks();\r\n\tnew SpeedBump();\r\n\tnew Testimonials();\r\n\r\n\tif ( $('.location-search').length ) {\r\n\t\tLocations.displayLocations();\r\n\t}\r\n\r\n\t// check for thank you message\r\n\tif ( $('.form-submit-result').length ) {\r\n\t\t// scroll to message\r\n\t\t$('html, body').scrollTop($('.form-submit-result').offset().top);\r\n\t}\r\n\r\n\t// Update iframe attributes and reload iframe to fix blocked content\r\n\tdocument.addEventListener('DOMContentLoaded', (function FixYoutubeWatchLinks() {\r\n\t\tvar iframes = document.getElementsByTagName('iframe'); \r\n\t\tfor (var i = 0; i < iframes.length; i++) { \r\n\t\t\tif (iframes[i].hasAttribute('src') && iframes[i].src.includes('https://www.youtube.com')) {\r\n\t\t\t\tiframes[i].setAttribute('referrerpolicy', 'no-referrer');\r\n\t\t\t\tvar sandboxval = iframes[i].hasAttribute('sandbox') ? iframes[i].getAttribute('sandbox') : \"\" ; \r\n\t\t\t\tsandboxval += \" allow-scripts allow-same-origin allow-popups-to-escape-sandbox\"; \r\n\t\t\t\tiframes[i].setAttribute('sandbox', sandboxval);\r\n\t\t\t\tiframes[i].setAttribute('src', iframes[i].src);\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n})();\n"]}