{"version":3,"sources":["_config.js","_plugins.js","pcb-main.js","carousels.js","locationSearch.js","calculators.js","careerFilter.js","loginScript.js","tour.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC58BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACz5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3rBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"scripts.js","sourcesContent":["var tablet_break = 980;\r\nvar max_wrap = 1200;\r\nvar bank_name = \"PCB Bank\";\r\n","/********************************************************\r\n** INITIALIZATION CODE\r\n********************************************************/\r\n/*\r\n Any code which should run before everything else\r\n*/\r\n\r\n// Normalize console\r\n(function () {\r\n var method;\r\n var noop = function () { };\r\n var methods = [\r\n 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',\r\n 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',\r\n 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',\r\n 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn'\r\n ];\r\n var length = methods.length;\r\n var console = (window.console = window.console || {});\r\n while (length--) {\r\n method = methods[length];\r\n // Only stub undefined methods.\r\n if (!console[method]) {\r\n console[method] = noop;\r\n }\r\n }\r\n}());\r\n\r\n/*\r\n Set this as the master scroll event to keep a lot of code from firing on scroll.\r\n When you want to execute based on scroll behavior, use:\r\n setInterval(function() {\r\n if(scrolling) {\r\n scrolling = false;\r\n CODE();\r\n }\r\n }, 250);\r\n*/\r\nvar scrolling = false;\r\nwindow.addEventListener('scroll', function () {\r\n scrolling = true;\r\n});\r\n\r\n\r\n/*************************************************\r\n * Hover Intent\r\n * *********************************************/\r\n\r\n// load namespace\r\nSV = window.SV || {};\r\n\r\nSV.HoverIntent = (function () {\r\n\r\n // constructor\r\n return function (elements, userConfig) {\r\n\r\n // private members\r\n\r\n const defaultOptions = {\r\n exitDelay: 400,\r\n interval: 100,\r\n sensitivity: 7,\r\n };\r\n let config = {};\r\n\r\n let currX, currY, prevX, prevY;\r\n let allElems, pollTimer, exitTimer;\r\n\r\n // private methods\r\n\r\n // override default options with user config\r\n const extend = function (defaults, userArgs) {\r\n for (let i in userArgs) {\r\n defaults[i] = userArgs[i];\r\n }\r\n\r\n return defaults;\r\n };\r\n\r\n // update mouse position\r\n const mouseTrack = function (ev) {\r\n currX = ev.pageX;\r\n currY = ev.pageY;\r\n };\r\n\r\n // check if mouse movement has slowed enough to trigger active state\r\n const mouseCompare = function (targetElem) {\r\n const distX = prevX - currX, distY = prevY - currY;\r\n const distance = Math.sqrt(distX * distX + distY * distY);\r\n\r\n if (distance < config.sensitivity) {\r\n // if we re-entered an element, cancel delayed exit and clear any active elements immediately\r\n clearTimeout(exitTimer);\r\n for (let elem of allElems) {\r\n if (elem.isActive) {\r\n config.onExit(elem);\r\n elem.isActive = false;\r\n }\r\n }\r\n\r\n // trigger hover\r\n config.onEnter(targetElem);\r\n targetElem.isActive = true;\r\n } else {\r\n // update previous coordinates and try again later\r\n prevX = currX;\r\n prevY = currY;\r\n pollTimer = setTimeout(function () {\r\n mouseCompare(targetElem);\r\n }, config.interval);\r\n }\r\n };\r\n\r\n const init = function (elements, userConfig) {\r\n if (!userConfig || !userConfig.onEnter || !userConfig.onExit) {\r\n throw 'onEnter and onExit callbacks must be provided';\r\n }\r\n config = extend(defaultOptions, userConfig);\r\n allElems = elements;\r\n\r\n for (let elem of allElems) {\r\n // holds current element state\r\n elem.isActive = false;\r\n // keeps track of mouse position\r\n elem.addEventListener('mousemove', mouseTrack);\r\n\r\n elem.addEventListener('mouseenter', function (ev) {\r\n // set initial entry position\r\n prevX = ev.pageX;\r\n prevY = ev.pageY;\r\n // if this element is already active, cancel exit\r\n if (elem.isActive) {\r\n clearTimeout(exitTimer);\r\n return;\r\n }\r\n\r\n // while mouse is over this element, check distance every 100ms\r\n pollTimer = setTimeout(function () {\r\n mouseCompare(elem);\r\n }, config.interval);\r\n });\r\n elem.addEventListener('mouseleave', function (ev) {\r\n clearTimeout(pollTimer);\r\n if (!elem.isActive)\r\n return;\r\n\r\n exitTimer = setTimeout(function () {\r\n config.onExit(elem);\r\n elem.isActive = false;\r\n }, config.exitDelay);\r\n });\r\n }\r\n };\r\n\r\n init(elements, userConfig);\r\n };\r\n\r\n})();\r\n\r\n\r\n/********************************************************\r\n** HELPER FUNCTIONS\r\n********************************************************/\r\n/*\r\n Any functions that have a jQuery equivalent I have tried to prefix with 'v' for vanilla.\r\n*/\r\n\r\n// Takes array 'a' and array 'b'\r\n// Iterates through 'b' and either replaces missing values from 'a' to 'b' or replaces default values in 'a' with the value provided in 'b'\r\n// This function is intedned to mimic the jQuery funtion \"extend\"\r\nfunction vExtend(a, b) {\r\n for (var key in b) {\r\n if (b.hasOwnProperty(key)) {\r\n a[key] = b[key];\r\n }\r\n }\r\n return a;\r\n}\r\n\r\n// Takes a function 'fn'\r\n// Executes 'fn' once the DOM has loaded (but before all assets finish loading)\r\nfunction documentReady(fn) {\r\n if (document.readyState != 'loading') {\r\n fn();\r\n } else if (document.addEventListener) {\r\n document.addEventListener('DOMContentLoaded', fn);\r\n } else {\r\n document.attachEvent('onreadystatechange', function () {\r\n if (document.readyState != 'loading') {\r\n fn();\r\n }\r\n });\r\n }\r\n}\r\n\r\n// Takes an element 'el'\r\n// Return true if an element is visisble and false if it is not\r\nfunction isVisible(el) {\r\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\r\n}\r\n\r\n// Takes an element 'el' and an optional selector 'parentSelector'\r\n// Returns an array of parent elements of 'el', up to either document root or 'parentSelector' if it is provided\r\nfunction getParents(el, parentSelector) {\r\n if (parentSelector === undefined) {\r\n parentSelector = document;\r\n }\r\n var parents = [];\r\n var p = el.parentNode;\r\n while (p !== parentSelector && p !== null) {\r\n var o = p;\r\n parents.push(o);\r\n p = o.parentNode;\r\n }\r\n parents.push(parentSelector);\r\n return parents;\r\n}\r\n\r\n// Takes an element 'el' and string 'tag'\r\n// Returns an element that is a parent of 'el' and has the tagName property matching 'tag' or null if no such parent is found\r\n// Please be aware that in javascript, the tagname property is often formatted as all uppercase, so matching div means tag should = DIV\r\nfunction getParentElementWithTag(el, tag) {\r\n if (el.parentElement !== null) {\r\n var currentElement = el;\r\n while (currentElement.tagName !== tag.toUpperCase() && currentElement.parentElement !== null) {\r\n var objectPlaceholder = currentElement;\r\n currentElement = objectPlaceholder.parentElement;\r\n }\r\n if (currentElement.tagName !== tag.toUpperCase()) {\r\n currentElement = null;\r\n }\r\n return parent;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n// Takes an element 'el'\r\n// Returns an element that is either 'el' or a parent of 'el' and has the passed class, or null if nothing is found\r\nfunction getParentElementWithClass(el, className) {\r\n if (el !== null) {\r\n var currentElement = el;\r\n while (!currentElement.classList.contains(className) && currentElement.parentElement !== null) {\r\n var objectPlaceholder = currentElement;\r\n currentElement = objectPlaceholder.parentElement;\r\n }\r\n if (!currentElement.classList.contains(className)) {\r\n currentElement = null;\r\n }\r\n return currentElement;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n// Takes an element 'el'\r\n// Returns an true if one of the parents of 'el' has the class tablock or false if not\r\nfunction isTablockChild(el) {\r\n if (el.parentElement !== null) {\r\n var parent = el.parentElement;\r\n while (!parent.classList.contains(\"tablock\") && parent.parentElement !== null) {\r\n var parentObject = parent;\r\n parent = parentObject.parentElement;\r\n }\r\n if (!parent.classList.contains(\"linkbox\")) {\r\n parent = true;\r\n } else {\r\n parent = false;\r\n }\r\n return parent;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n// Takes an element 'el'\r\n// Returns true or false based on the presence of # in the href attribute of 'el'\r\nfunction isAnchorLink(el) {\r\n isAnchor = false;\r\n if (el.tagName === \"A\" && el.hasAttribute(\"href\") && el.getAttribute(\"href\").indexOf(\"#\") > -1) {\r\n isAnchor = true;\r\n }\r\n return isAnchor;\r\n}\r\n\r\n// Takes target element 'to', number 'duration', and optional function 'callbackFunction'\r\n// Animates the windows to scroll down to 'to' at speed of 'duration'\r\n// If 'callbackFunction' is defined, executes this function when the animation is complete\r\nfunction vScrollTo(to, duration, callbackFunction) {\r\n var element = document.scrollingElement || document.documentElement,\r\n start = element.scrollTop,\r\n change = to - start,\r\n startTs = performance.now();\r\n // t = current time\r\n // b = start value\r\n // c = change in value\r\n // d = duration\r\n function easeInOutQuad(t, b, c, d) {\r\n t /= d / 2;\r\n if (t < 1) return c / 2 * t * t + b;\r\n t--;\r\n return -c / 2 * (t * (t - 2) - 1) + b;\r\n }\r\n function animateScroll(ts) {\r\n var currentTime = ts - startTs;\r\n element.scrollTop = parseInt(easeInOutQuad(currentTime, start, change, duration));\r\n if (currentTime < duration) {\r\n requestAnimationFrame(animateScroll);\r\n } else {\r\n element.scrollTop = to;\r\n if (callbackFunction !== undefined) {\r\n callbackFunction();\r\n }\r\n }\r\n }\r\n requestAnimationFrame(animateScroll);\r\n};\r\n\r\n// Takes element 'el' and returns the height, inlcluding padding and margins, or 'el'\r\nfunction vOuterHeight(el) {\r\n var height = el.offsetHeight;\r\n var style = el.currentStyle || getComputedStyle(el);\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n return height;\r\n}\r\n\r\n// Takes element 'el', optional number 'duration', and optional function 'callbackFunction'\r\n// Slides 'el' open at the speed of 'duration'\r\n// If 'duration' is not provided, uses 500 as the default speed\r\n// If 'callbackFunction' is defined, executes this function when the slide animation is complete\r\nfunction vSlideUp(target, duration, callbackFunction) {\r\n if (duration === undefined) {\r\n duration = 500;\r\n }\r\n target.style.transitionProperty = 'height, margin, padding';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.boxSizing = 'border-box';\r\n target.style.height = target.offsetHeight + 'px';\r\n target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0;\r\n target.style.paddingTop = 0;\r\n target.style.paddingBottom = 0;\r\n target.style.marginTop = 0;\r\n target.style.marginBottom = 0;\r\n window.setTimeout(function () {\r\n target.style.display = 'none';\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n if (callbackFunction !== undefined) {\r\n callbackFunction();\r\n }\r\n }, duration);\r\n}\r\n\r\n// Takes element 'el', number 'duration', optional string 'display', and optional function 'callbackFunction'\r\n// Slides 'el' open at the speed of 'duration' if 'el' display is set to \"none\"\r\n// If 'duration' is not provided, uses 500 as the default speed\r\n// Will set the CSS property \"display\" of 'el' to 'display' or to \"block\" if 'display' is not set\r\n// If 'callbackFunction' is defined, executes this function when the slide animation is complete\r\nfunction vSlideDown(target, duration, display, callbackFunction) {\r\n if (duration === undefined) {\r\n duration = 500;\r\n }\r\n target.style.removeProperty('display');\r\n var displayValue = window.getComputedStyle(target).display;\r\n if (displayValue === 'none' && display === undefined) {\r\n displayValue = 'block';\r\n } else if (displayValue === 'none') {\r\n displayValue = display;\r\n }\r\n target.style.display = displayValue;\r\n var height = target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0;\r\n target.style.paddingTop = 0;\r\n target.style.paddingBottom = 0;\r\n target.style.marginTop = 0;\r\n target.style.marginBottom = 0;\r\n target.offsetHeight;\r\n target.style.boxSizing = 'border-box';\r\n target.style.transitionProperty = \"height, margin, padding\";\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.height = height + 'px';\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n window.setTimeout(function () {\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n if (callbackFunction !== undefined) {\r\n callbackFunction();\r\n }\r\n }, duration);\r\n}\r\n\r\n// Takes an element 'el' a number 'duration' and a string 'display'\r\n// Slides 'el' open at the speed of 'duration' if 'el' display is set to none\r\n// Slides 'el' closed at the speed of 'duration' if 'el' display is set to anything other than none\r\n// Optional attribute 'display' can be used to set what the CSS display property of 'el' is set to when the slideDOwn animation is complete\r\nfunction vSlideToggle(target, duration, display) {\r\n if (duration === undefined) {\r\n duration = 500;\r\n }\r\n if (window.getComputedStyle(target).display === 'none') {\r\n if (display === undefined) {\r\n return vSlideDown(target, duration);\r\n } else {\r\n return vSlideDown(target, duration, display);\r\n }\r\n } else {\r\n return vSlideUp(target, duration);\r\n }\r\n}\r\n\r\n// Takes an element 'el' and fades 'el' out, and then sets the display CSS property of 'el' to 'none' once the fade animaton is complete\r\nfunction vFadeOut(target) {\r\n target.style.opacity = 1;\r\n (function fade() {\r\n if ((target.style.opacity -= .1) < 0) {\r\n target.style.display = \"none\";\r\n } else {\r\n requestAnimationFrame(fade);\r\n }\r\n })();\r\n};\r\n\r\n// Takes an element 'el' and an optional string 'display' and fades 'el' in, and then sets the display CSS property of 'el' to 'display' once the fade animaton is complete\r\n// Will set CSS display proerty to 'block' as a fallback if none is provided\r\nfunction vFadeIn(el, display) {\r\n el.style.opacity = 0;\r\n el.style.display = display || \"block\";\r\n (function fade() {\r\n var val = parseFloat(el.style.opacity);\r\n if (!((val += .1) > 1)) {\r\n el.style.opacity = val;\r\n requestAnimationFrame(fade);\r\n }\r\n })();\r\n};\r\n\r\n// Takes an element 'el' and an optional string 'display' and sets the display CSS property of 'el' to 'display'\r\n// Will set CSS display proerty to 'block' as a fallback if none is provided\r\nfunction vShow(el, display) {\r\n el.style.display = display || \"block\";\r\n}\r\n\r\n// Takes an element 'el' and sets the display CSS property of 'el' to 'none'\r\nfunction vHide(el) {\r\n el.style.display = \"none\";\r\n}\r\n\r\n// Takes an element 'el' and focuses the first selectable element within it\r\n// Return null if no selectable element is found\r\nfunction focusFirst(el) {\r\n if (el !== null) {\r\n var selectableElements = el.querySelectorAll(\"a, input, textarea, button\");\r\n var selected = false;\r\n for (var i = 0; i < selectableElements.length; i++) {\r\n if (selectableElements[i].style.display !== \"none\" && selected === false) {\r\n selectableElements[i].focus();\r\n selected = true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n// Takes an element 'el' and focuses the last selectable element within it\r\n// Return null if no selectable element is found\r\nfunction focusLast(el) {\r\n if (el !== null) {\r\n var selectableElements = el.querySelectorAll(\"a, input, textarea, button\");\r\n var selected = false;\r\n for (var i = (selectableElements.length - 1); i > -1; i--) {\r\n if (selectableElements[i].style.display !== \"none\" && selected === false) {\r\n selectableElements[i].focus();\r\n selected = true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n// Takes an element 'el' and returns the first selectable and visible element within 'el' or null if none is found\r\nfunction getFirstSelectableElement(el) {\r\n var selectableElements = el.querySelectorAll(\"button, a, input, select, textarea\");\r\n var firstElement = null;\r\n if (selectableElements !== null && selectableElements.length) {\r\n for (i = 0; i < selectableElements.length; i++) {\r\n if (selectableElements[i].tabIndex === 0 && selectableElements[i].style.display !== \"none\" && !selectableElements[i].classList.contains(\"visuallyhidden\") && isVisible(selectableElements[i]) && firstElement === null) {\r\n firstElement = selectableElements[i];\r\n }\r\n }\r\n }\r\n return firstElement;\r\n}\r\n\r\n// Takes an element as 'el' returns the last selectable and visible element within 'el' or null if none is found\r\nfunction getLastSelectableElement(el) {\r\n var selectableElements = el.querySelectorAll(\"button, a, input, select, textarea\");\r\n var lastElement = null;\r\n if (selectableElements !== null && selectableElements.length) {\r\n for (i = (selectableElements.length - 1); i > -1; i--) {\r\n if (selectableElements[i].tabIndex === 0 && selectableElements[i].style.display !== \"none\" && !selectableElements[i].classList.contains(\"visuallyhidden\") && isVisible(selectableElements[i]) && lastElement === null) {\r\n lastElement = selectableElements[i];\r\n }\r\n }\r\n }\r\n return lastElement;\r\n}\r\n\r\n\r\n\r\n/********************************************************\r\n** JUMPNAV CONDITIONAL HIGHLIGHTING\r\n********************************************************/\r\n/*\r\n Used to detect when the target of a jumplink scrolls into view so we can format those items as the currently displayed area\r\n*/\r\nsetInterval(function () {\r\n if (scrolling) {\r\n scrolling = false;\r\n var jumpNavAnchors = document.querySelectorAll(\".jump-nav a\");\r\n var jumpNavAnchorParents = document.querySelectorAll(\".jump-nav li\");\r\n if (jumpNavAnchors !== null && jumpNavAnchors.length && jumpNavAnchorParents !== null && jumpNavAnchorParents.length) {\r\n for (i = 0; i < jumpNavAnchors.length; i++) {\r\n var sp = jumpNavAnchors[i].getAttribute(\"href\").split(\"#\");\r\n if (document.querySelector(\"[data-jn='\" + sp[1] + \"']\").length && document.querySelector(\"[data-jn='\" + sp[1] + \"']\").getBoundingClientRect().top - 100 < window.pageYOffset) {\r\n for (j = 0; j < jumpNavAnchorParents.length; j++) {\r\n jumpNavAnchorParents[i].classList.remove(\"current\");\r\n }\r\n jumpNavAnchors[i].parentElement.classList.add(\"current\");\r\n }\r\n }\r\n }\r\n }\r\n}, 250);\r\n\r\n\r\n/********************************************************\r\n** SPEEDBUMP\r\n********************************************************/\r\n/*\r\n Displays a dialog when users click on certain links that have the speedbump class and that will navigate them away from the current site\r\n*/\r\nfunction speedbump(options) {\r\n // Options\r\n var settings = vExtend({\r\n // These are the defaults\r\n\r\n // Speedbump box title text\r\n header: \"You are now leaving PCB Bank.\",\r\n\r\n // Speedbump box message text\r\n message: `The information, products, and services on the website you are about to enter are managed by a third-party.\r\nPCB Bank is not responsible for the content of linked third-party sites or third-party advertisements and does not make any representations regarding their content or accuracy.\r\nWhile we offer these links for your convenience, please be aware that these sites do not share our stated Privacy Policy. You will be subject to the destination site's Privacy Policy when you follow the link. `,\r\n\r\n\r\n\r\n // Speedbump box cancel button text\r\n button_cancel: \"Return to \" + bank_name,\r\n\r\n // Speedbump box OK button text\r\n button_ok: \"OK\",\r\n\r\n // Speedbump box element ID\r\n id: \"default\",\r\n\r\n // Optional: speedbump box function code to execute when the OK button is clicked\r\n // Will not execute if target=\"_self\"\r\n confirm_function: null,\r\n\r\n // Optional: speedbump box function code to execute when the cancel button is clicked. Also executed on ESC\r\n cancel_function: null,\r\n\r\n // Speedbump box URL for the OK button. If left blank, automatically pulled from clicked element\r\n ok_link: \"\",\r\n\r\n // Spedbump box target (_self, _blank) for the OK button\r\n window_target: \"_self\"\r\n\r\n // 'clickedElement' is also passed, but isn't overwritten because it should never be provided as a default\r\n }, options);\r\n\r\n // If no link is provided to override, source it from the clicked element\r\n if (settings.ok_link === \"\") {\r\n settings.ok_link = settings.clickedElement.getAttribute(\"href\");\r\n }\r\n\r\n // If the clicked element has no target, set as self, otherwise, set as the clicked element's target\r\n if (settings.clickedElement.hasAttribute(\"target\") && settings.clickedElement.getAttribute(\"target\") !== \"\") {\r\n settings.window_target = settings.clickedElement.getAttribute(\"target\");\r\n }\r\n\r\n // If an ID exists, assign it\r\n if (settings.id != \"\") {\r\n settings.id = \"_\" + settings.id;\r\n }\r\n\r\n // Check to see if the markup for this speedbump has already been appended and if not append it\r\n if (\r\n document.querySelectorAll(\".js-speedbump_pop\" + settings.id).length ===\r\n 0\r\n ) {\r\n const speedbumpCode = document.createElement(\"section\");\r\n speedbumpCode.classList.add(\"js-speedbump_pop\" + settings.id);\r\n speedbumpCode.classList.add(\"speedbump_back\");\r\n speedbumpCode.setAttribute(\"aria-label\", \"Speedbump - Please review\");\r\n speedbumpCode.style.display = \"none\";\r\n speedbumpCode.innerHTML =\r\n \"
\";\r\n body.appendChild(speedbumpCode);\r\n }\r\n\r\n // Assign a variable to refer to the speedbump we just added to the DOM\r\n var currentSpeedbump = document.querySelector(\".js-speedbump_pop\" + settings.id);\r\n\r\n // Build the speedbump inner HTML based on the values passed to settings and then set it\r\n var valid = true;\r\n var spb = \"\";\r\n if (settings.header != \"\") {\r\n spb += \"
\" + settings.header + \"
\";\r\n }\r\n spb += \"
\" + settings.message + \"
\" +\r\n \"
\" +\r\n \"\" +\r\n \"\" + settings.button_ok + \"\" + \r\n \"
\";\r\n currentSpeedbump.querySelector(\".speedbump_pop_content\").innerHTML = spb;\r\n\r\n // Now that the markup is complete, set reference variables to the current speedbump for the rest of the code\r\n var currentSpeedbumpInner = currentSpeedbump.querySelector(\".speedbump_pop_inner\");\r\n var currentOKButton = currentSpeedbump.querySelector(\".js-speedbump_btn_ok\" + settings.id);\r\n var currentCancelbutton = currentSpeedbump.querySelector(\".js-speedbump_btn_cancel\" + settings.id);\r\n\r\n // ESC key behavior\r\n if (!currentSpeedbump.classList.contains(\"esc-bound\")) {\r\n currentSpeedbump.addEventListener(\"keyup\", function (event) {\r\n if (event.key === \"Esc\" && currentSpeedbump.style.display !== \"none\") {\r\n vHide(currentSpeedbump);\r\n currentSpeedbump.classList.remove(\"sb-active\");\r\n currentSpeedbump.removeAttribute(\"role\");\r\n valid = false;\r\n if (settings.cancel_function !== null) {\r\n settings.cancel_function();\r\n }\r\n settings.clickedElement.focus();\r\n return false;\r\n }\r\n });\r\n currentSpeedbump.classList.add(\"esc-bound\");\r\n }\r\n\r\n // OK button click event\r\n if (!currentOKButton.classList.contains(\"bound\")) {\r\n currentOKButton.addEventListener(\"click\", function (event) {\r\n vHide(currentSpeedbump);\r\n currentSpeedbump.classList.remove(\"sb-active\");\r\n currentSpeedbump.removeAttribute(\"role\");\r\n if (settings.confirm_function !== null) {\r\n settings.confirm_function();\r\n }\r\n });\r\n currentOKButton.classList.add(\"bound\");\r\n }\r\n\r\n // Cancel button click event\r\n if (!currentCancelbutton.classList.contains(\"bound\")) {\r\n currentCancelbutton.addEventListener(\"click\", function (event) {\r\n vHide(currentSpeedbump);\r\n currentSpeedbump.classList.remove(\"sb-active\");\r\n currentSpeedbump.removeAttribute(\"role\");\r\n valid = false;\r\n if (settings.cancel_function !== null) {\r\n settings.cancel_function();\r\n }\r\n settings.clickedElement.focus();\r\n return false;\r\n });\r\n currentCancelbutton.classList.add(\"bound\");\r\n }\r\n\r\n //Move any tracking from link to confirm ok button\r\n currentOKButton.removeAttribute(\"data-track\");\r\n currentOKButton.removeAttribute(\"data-event\");\r\n currentOKButton.removeAttribute(\"data-track-category\");\r\n currentOKButton.removeAttribute(\"data-track-action\");\r\n currentOKButton.removeAttribute(\"data-track-value\");\r\n\r\n if (settings.clickedElement.hasAttribute(\"data-track\") && settings.clickedElement.getAttribute(\"data-track\") !== \"\") {\r\n currentOKButton.setAttribute(\"data-track\", settings.clickedElement.getAttribute(\"data-track\"));\r\n }\r\n if (settings.clickedElement.hasAttribute(\"data-event\") && settings.clickedElement.getAttribute(\"data-event\") !== \"\") {\r\n currentOKButton.setAttribute(\"data-event\", settings.clickedElement.getAttribute(\"data-event\"));\r\n }\r\n if (settings.clickedElement.hasAttribute(\"data-track-category\") && settings.clickedElement.getAttribute(\"data-track-category\") !== \"\") {\r\n currentOKButton.setAttribute(\"data-track-category\", settings.clickedElement.getAttribute(\"data-track-category\"));\r\n }\r\n if (settings.clickedElement.hasAttribute(\"data-track-action\") && settings.clickedElement.getAttribute(\"data-track-action\") !== \"\") {\r\n currentOKButton.setAttribute(\"data-track-action\", settings.clickedElement.getAttribute(\"data-track-action\"));\r\n }\r\n if (settings.clickedElement.hasAttribute(\"data-track-value\") && settings.clickedElement.getAttribute(\"data-track-value\") !== \"\") {\r\n currentOKButton.setAttribute(\"data-track-value\", settings.clickedElement.getAttribute(\"data-track-value\"));\r\n }\r\n\r\n // The code to display the speedbump\r\n //vShow(currentSpeedbump);\r\n currentSpeedbump.style.display = \"flex\";\r\n currentSpeedbump.setAttribute(\"role\", \"alert\");\r\n setTimeout(function () {\r\n currentOKButton.focus();\r\n }, \"600\");\r\n var windowHeight = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n if (windowHeight < vOuterHeight(currentSpeedbumpInner)) {\r\n currentSpeedbumpInner.style.top = windowHeight;\r\n //currentSpeedbump.style.position = \"absolute\";\r\n currentSpeedbump.classList.remove(\"fixed\");\r\n currentSpeedbump.style.height = vOuterHeight(document.getElementsByTagName(\"html\")[0]);\r\n } else {\r\n currentSpeedbump.style.position = \"fixed\";\r\n currentSpeedbump.classList.add(\"fixed\");\r\n }\r\n currentSpeedbump.classList.add(\"sb-active\");\r\n currentSpeedbump.setAttribute(\"data-url\", settings.ok_link);\r\n\r\n return false;\r\n}\r\n\r\n// Helper to determine if a string which would be a URL references the domain of the current site or a different one\r\nfunction isCurrentDomain(a) { var b, c = \"\"; a.indexOf(\"://\") > -1 ? (b = a.split(\"/\")[2], c = a.split(\"/\")[0]) : b = a.split(\"/\")[0]; var e, f, d = window.location.href; return a.indexOf(\"://\") > -1 ? (e = d.split(\"/\")[2], f = d.split(\"/\")[0]) : e = d.split(\"/\")[0], e = e.split(\":\")[0], \"\" == c || c == f && b == e }\r\n\r\n// Normal link speedbumps\r\ndocument.addEventListener(\"click\", function (event) {\r\n\r\n if (event.target.matches(\"a\")) {\r\n if (!document.documentElement.classList.contains('hydrated') && !(event.target.classList.contains(\"speedbump_pop_btn_ok\")) &&\r\n (event.target.classList.contains(\"speedbump\") || event.target.getAttribute(\"data-speedbump\") == \"speedbump\" || \r\n (!isCurrentDomain(event.target.getAttribute(\"href\")) && event.target.getAttribute(\"target\") == \"_blank\"))) {\r\n\r\n if (!event.target.hasAttribute(\"data-no-speedbump\") && !event.target.classList.contains(\"no-sb\")) {\r\n\r\n event.preventDefault();\r\n speedbump({\r\n id: \"default_link\",\r\n clickedElement: event.target,\r\n button_cancel: \"Stay Here\",\r\n button_ok: \"Continue\"\r\n });\r\n }\r\n\r\n }\r\n else if (!document.documentElement.classList.contains('hydrated') && event.target.getAttribute(\"href\").indexOf(\"mailto\") != -1 && !(event.target.classList.contains(\"speedbump_pop_btn_ok\"))) {\r\n event.preventDefault();\r\n speedbump({\r\n id: 'default_email',\r\n header: 'Email Disclaimer',\r\n message: 'Email is not a secure transmission route. Thus we ask that you never send sensitive personal information like Social Security numbers, Account numbers, Credit Card numbers or any type of password via email to ' + bank_name + ' or anyone else. Please call us when submitting this information. Please click Send an Email to continue.',\r\n button_cancel: 'Stay Here',\r\n button_ok: 'Send an Email',\r\n clickedElement: event.target\r\n });\r\n }\r\n }\r\n});\r\n\r\n/* Email link Speedbumps\r\ndocument.addEventListener(\"click\", function (event) {\r\n var emailbumpElement = getParentElementWithClass(event.target, \"email_bump\");\r\n if (!document.documentElement.classList.contains('hydrated') && emailbumpElement !== null && !emailbumpElement.hasAttribute(\"data-no-speedbump\") && emailbumpElement.hasAttribute(\"href\") && emailbumpElement.getAttribute(\"href\") !== \"\") {\r\n event.preventDefault();\r\n speedbump({\r\n id: 'default_email',\r\n header: 'Email Disclaimer',\r\n message: 'Email is not a secure transmission route. Thus we ask that you never send sensitive personal information like Social Security numbers, Account numbers, Credit Card numbers or any type of password via email to ' + bank_name + ' or anyone else. Please call us when submitting this information. Please click Send an Email to continue ...',\r\n button_cancel: 'Return to ' + bank_name,\r\n button_ok: 'Send an Email',\r\n clickedElement: speedbumpElement\r\n });\r\n }\r\n});\r\n*/\r\n\r\n/********************************************************\r\n** LINKBOX\r\n********************************************************/\r\n/*\r\n Makes an element's entire area a clickable link. Uses the href of the first link in the element as the link address\r\n*/\r\n// Event handler for linkbox links, including dynamic elements: Part 1, Click Events (with line to Disable in Kentico Admin)\r\nif (!document.documentElement.classList.contains('hydrated')) {\r\n document.addEventListener(\"click\", function (event) {\r\n \r\n var linkboxElement = getParentElementWithClass(event.target, \"linkbox\");\r\n if (linkboxElement !== null && !document.documentElement.classList.contains('hydrated')) {\r\n event.preventDefault();\r\n var theLinkElement = linkboxElement.querySelector(\"a\");\r\n var theLinkURL = theLinkElement.getAttribute(\"href\");\r\n if ((theLinkElement.classList.contains(\"speedbump\") || theLinkElement.getAttribute(\"data-speedbump\") == \"speedbump\") && !document.documentElement.classList.contains('hydrated')) {\r\n event.preventDefault();\r\n speedbump({\r\n id: \"default_link\",\r\n clickedElement: theLinkElement,\r\n button_cancel: \"Stay Here\",\r\n button_ok: \"Continue\"\r\n });\r\n } else {\r\n if (theLinkElement.hasAttribute(\"target\") && theLinkElement.getAttribute(\"target\") === \"_blank\") {\r\n window.open(theLinkURL);\r\n } else {\r\n window.location.href = theLinkURL;\r\n }\r\n }\r\n }\r\n });\r\n // Part 2, Hover Events\r\n document.onmouseover = function (event) {\r\n var linkboxElement = getParentElementWithClass(event.target, \"linkbox\");\r\n if (linkboxElement !== null) {\r\n var la = linkboxElement.querySelector(\"a\");\r\n if (la != null) {\r\n la.classList.add(\"hovered\");\r\n }\r\n }\r\n }\r\n document.onmouseout = function (event) {\r\n var linkboxElement = getParentElementWithClass(event.target, \"linkbox\");\r\n if (linkboxElement !== null) {\r\n var la = linkboxElement.querySelector(\"a\");\r\n if (la != null) {\r\n la.classList.remove(\"hovered\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/********************************************************\r\n** SKIP LINK\r\n********************************************************/\r\n/*\r\n Behavior for when users on a screen reader click on the \"skip to main content\" link\r\n*/\r\ndocument.addEventListener(\"click\", function (event) {\r\n if (event.target.classList.contains(\"js-skip-link\")) {\r\n if (event.target.hasAttribute(\"href\") && document.querySelector(\"main\" + event.target.getAttribute(\"href\")) !== null) {\r\n vScrollTo(document.querySelector(\"main\" + event.target.getAttribute(\"href\")), 1000, function () {\r\n document.querySelector(\"main a\").focus();\r\n });\r\n }\r\n }\r\n});\r\n\r\n\r\n/********************************************************\r\n** TABLOCK\r\n********************************************************/\r\n/*\r\n Prevents users from tabbing out of an area, such as a modal. Automatic based on the deepest container with class \"tablock.\"\r\n*/\r\ndocument.addEventListener(\"keydown\", function (event) {\r\n var activeElement = document.activeElement;\r\n if (event.key === \"Tab\" && isTablockChild(activeElement)) {\r\n var shift = event.shiftKey;\r\n tablockContainer = getParentElementWithClass(activeElement, \"tablock\");\r\n // Check to see if the container index has changed, which means the element is inside of a tablock.\r\n if (tablockContainer !== null) {\r\n var firstContainerElement = getFirstSelectableElement(tablockContainer);\r\n var lastContainerElement = getLastSelectableElement(tablockContainer);\r\n if (firstContainerElement !== null && lastContainerElement !== null) {\r\n if (firstContainerElement === activeElement && shift === true) {\r\n event.preventDefault();\r\n lastContainerElement.focus();\r\n return false;\r\n } else if (lastContainerElement === activeElement && shift === false) {\r\n event.preventDefault();\r\n firstContainerElement.focus();\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n/*****************************************************\r\n * ACCORDIONS\r\n * **************************************************/\r\ndocument.addEventListener(\"click\", function (e) {\r\n if (e.target.matches(\".js-accordion-button\") && !e.target.parentNode.classList.contains('js-card-accordion')) {\r\n var pnt = getParentElementWithClass(e.target, \"js-accordion\");\r\n var cnt = pnt.querySelector(\".js-accordion-content\");\r\n\r\n if ((cnt.style.display == \"none\") || (cnt.style.display == '')) {\r\n vSlideDown(cnt);\r\n pnt.classList.add(\"active\");\r\n e.target.setAttribute(\"aria-expanded\", true);\r\n }\r\n else {\r\n vSlideUp(cnt);\r\n pnt.classList.remove(\"active\");\r\n e.target.setAttribute(\"aria-expanded\", true);\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction r(n, t) { for (var i = 0; i < t.length; i++) { var r = t[i]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(n, r.key, r) } } function Jt(n, t, i) { t && r(n.prototype, t), i && r(n, i), Object.defineProperty(n, \"prototype\", { writable: !1 }) }\r\n/*!\r\n * Splide.js\r\n * Version : 4.1.2\r\n * License : MIT\r\n * Copyright: 2022 Naotoshi Fujita\r\n */\r\nvar n, t; n = this, t = function () { \"use strict\"; var v = \"(prefers-reduced-motion: reduce)\", G = 4, rn = 5, r = { CREATED: 1, MOUNTED: 2, IDLE: 3, MOVING: G, SCROLLING: rn, DRAGGING: 6, DESTROYED: 7 }; function D(n) { n.length = 0 } function o(n, t, i) { return Array.prototype.slice.call(n, t, i) } function R(n) { return n.bind.apply(n, [null].concat(o(arguments, 1))) } function on() { } var p = setTimeout; function h(n) { return requestAnimationFrame(n) } function u(n, t) { return typeof t === n } function un(n) { return !c(n) && u(\"object\", n) } var e = Array.isArray, x = R(u, \"function\"), C = R(u, \"string\"), en = R(u, \"undefined\"); function c(n) { return null === n } function m(n) { try { return n instanceof (n.ownerDocument.defaultView || window).HTMLElement } catch (n) { return !1 } } function y(n) { return e(n) ? n : [n] } function g(n, t) { y(n).forEach(t) } function b(n, t) { return -1 < n.indexOf(t) } function k(n, t) { return n.push.apply(n, y(t)), n } function A(t, n, i) { t && g(n, function (n) { n && t.classList[i ? \"add\" : \"remove\"](n) }) } function M(n, t) { A(n, C(t) ? t.split(\" \") : t, !0) } function L(n, t) { g(t, n.appendChild.bind(n)) } function O(n, i) { g(n, function (n) { var t = (i || n).parentNode; t && t.insertBefore(n, i) }) } function cn(n, t) { return m(n) && (n.msMatchesSelector || n.matches).call(n, t) } function S(n, t) { n = n ? o(n.children) : []; return t ? n.filter(function (n) { return cn(n, t) }) : n } function fn(n, t) { return t ? S(n, t)[0] : n.firstElementChild } var E = Object.keys; function w(t, i, n) { t && (n ? E(t).reverse() : E(t)).forEach(function (n) { \"__proto__\" !== n && i(t[n], n) }) } function an(r) { return o(arguments, 1).forEach(function (i) { w(i, function (n, t) { r[t] = i[t] }) }), r } function d(i) { return o(arguments, 1).forEach(function (n) { w(n, function (n, t) { e(n) ? i[t] = n.slice() : un(n) ? i[t] = d({}, un(i[t]) ? i[t] : {}, n) : i[t] = n }) }), i } function sn(t, n) { g(n || E(t), function (n) { delete t[n] }) } function P(n, i) { g(n, function (t) { g(i, function (n) { t && t.removeAttribute(n) }) }) } function I(i, t, r) { un(t) ? w(t, function (n, t) { I(i, t, n) }) : g(i, function (n) { c(r) || \"\" === r ? P(n, t) : n.setAttribute(t, String(r)) }) } function j(n, t, i) { n = document.createElement(n); return t && (C(t) ? M : I)(n, t), i && L(i, n), n } function _(n, t, i) { if (en(i)) return getComputedStyle(n)[t]; c(i) || (n.style[t] = \"\" + i) } function ln(n, t) { _(n, \"display\", t) } function dn(n) { n.setActive && n.setActive() || n.focus({ preventScroll: !0 }) } function z(n, t) { return n.getAttribute(t) } function vn(n, t) { return n && n.classList.contains(t) } function N(n) { return n.getBoundingClientRect() } function T(n) { g(n, function (n) { n && n.parentNode && n.parentNode.removeChild(n) }) } function hn(n) { return fn((new DOMParser).parseFromString(n, \"text/html\").body) } function F(n, t) { n.preventDefault(), t && (n.stopPropagation(), n.stopImmediatePropagation()) } function pn(n, t) { return n && n.querySelector(t) } function gn(n, t) { return t ? o(n.querySelectorAll(t)) : [] } function X(n, t) { A(n, t, !1) } function mn(n) { return n.timeStamp } function W(n) { return C(n) ? n : n ? n + \"px\" : \"\" } var yn = \"splide\", f = \"data-\" + yn; function bn(n, t) { if (!n) throw new Error(\"[\" + yn + \"] \" + (t || \"\")) } var Y = Math.min, wn = Math.max, xn = Math.floor, kn = Math.ceil, U = Math.abs; function Sn(n, t, i) { return U(n - t) < i } function En(n, t, i, r) { var o = Y(t, i), t = wn(t, i); return r ? o < n && n < t : o <= n && n <= t } function q(n, t, i) { var r = Y(t, i), t = wn(t, i); return Y(wn(r, n), t) } function Ln(n) { return (0 < n) - (n < 0) } function On(t, n) { return g(n, function (n) { t = t.replace(\"%s\", \"\" + n) }), t } function An(n) { return n < 10 ? \"0\" + n : \"\" + n } var _n = {}; function zn() { var c = []; function i(n, i, r) { g(n, function (t) { t && g(i, function (n) { n.split(\" \").forEach(function (n) { n = n.split(\".\"); r(t, n[0], n[1]) }) }) }) } return { bind: function (n, t, u, e) { i(n, t, function (n, t, i) { var r = \"addEventListener\" in n, o = r ? n.removeEventListener.bind(n, t, u, e) : n.removeListener.bind(n, u); r ? n.addEventListener(t, u, e) : n.addListener(u), c.push([n, t, i, u, o]) }) }, unbind: function (n, t, o) { i(n, t, function (t, i, r) { c = c.filter(function (n) { return !!(n[0] !== t || n[1] !== i || n[2] !== r || o && n[3] !== o) || (n[4](), !1) }) }) }, dispatch: function (n, t, i) { var r; return \"function\" == typeof CustomEvent ? r = new CustomEvent(t, { bubbles: !0, detail: i }) : (r = document.createEvent(\"CustomEvent\")).initCustomEvent(t, !0, !1, i), n.dispatchEvent(r), r }, destroy: function () { c.forEach(function (n) { n[4]() }), D(c) } } } var B = \"mounted\", H = \"move\", Dn = \"moved\", Mn = \"click\", Pn = \"active\", In = \"inactive\", Rn = \"visible\", Cn = \"hidden\", J = \"refresh\", K = \"updated\", jn = \"resize\", Nn = \"resized\", Tn = \"scroll\", V = \"scrolled\", a = \"destroy\", Gn = \"navigation:mounted\", Fn = \"autoplay:play\", Xn = \"autoplay:pause\", Wn = \"lazyload:loaded\", Yn = \"sk\", Un = \"sh\"; function Q(n) { var i = n ? n.event.bus : document.createDocumentFragment(), r = zn(); return n && n.event.on(a, r.destroy), an(r, { bus: i, on: function (n, t) { r.bind(i, y(n).join(\" \"), function (n) { t.apply(t, e(n.detail) ? n.detail : []) }) }, off: R(r.unbind, i), emit: function (n) { r.dispatch(i, n, o(arguments, 1)) } }) } function qn(t, n, i, r) { var o, u, e = Date.now, c = 0, f = !0, a = 0; function s() { if (!f) { if (c = t ? Y((e() - o) / t, 1) : 1, i && i(c), 1 <= c && (n(), o = e(), r && ++a >= r)) return l(); u = h(s) } } function l() { f = !0 } function d() { u && cancelAnimationFrame(u), f = !(u = c = 0) } return { start: function (n) { n || d(), o = e() - (n ? c * t : 0), f = !1, u = h(s) }, rewind: function () { o = e(), c = 0, i && i(c) }, pause: l, cancel: d, set: function (n) { t = n }, isPaused: function () { return f } } } function s(n) { var t = n; return { set: function (n) { t = n }, is: function (n) { return b(y(n), t) } } } var n = \"Arrow\", Bn = n + \"Left\", Hn = n + \"Right\", t = n + \"Up\", n = n + \"Down\", Jn = \"ttb\", l = { width: [\"height\"], left: [\"top\", \"right\"], right: [\"bottom\", \"left\"], x: [\"y\"], X: [\"Y\"], Y: [\"X\"], ArrowLeft: [t, Hn], ArrowRight: [n, Bn] }; var Z = \"role\", $ = \"tabindex\", i = \"aria-\", Kn = i + \"controls\", Vn = i + \"current\", Qn = i + \"selected\", nn = i + \"label\", Zn = i + \"labelledby\", $n = i + \"hidden\", nt = i + \"orientation\", tt = i + \"roledescription\", it = i + \"live\", rt = i + \"busy\", ot = i + \"atomic\", ut = [Z, $, \"disabled\", Kn, Vn, nn, Zn, $n, nt, tt], i = yn + \"__\", et = yn, ct = i + \"track\", ft = i + \"list\", at = i + \"slide\", st = at + \"--clone\", lt = at + \"__container\", dt = i + \"arrows\", vt = i + \"arrow\", ht = vt + \"--prev\", pt = vt + \"--next\", gt = i + \"pagination\", mt = gt + \"__page\", yt = i + \"progress\" + \"__bar\", bt = i + \"toggle\", wt = i + \"sr\", tn = \"is-active\", xt = \"is-prev\", kt = \"is-next\", St = \"is-visible\", Et = \"is-loading\", Lt = \"is-focus-in\", Ot = \"is-overflow\", At = [tn, St, xt, kt, Et, Lt, Ot]; var _t = \"touchstart mousedown\", zt = \"touchmove mousemove\", Dt = \"touchend touchcancel mouseup click\"; var Mt = \"slide\", Pt = \"loop\", It = \"fade\"; function Rt(o, r, t, u) { var e, n = Q(o), i = n.on, c = n.emit, f = n.bind, a = o.Components, s = o.root, l = o.options, d = l.isNavigation, v = l.updateOnMove, h = l.i18n, p = l.pagination, g = l.slideFocus, m = a.Direction.resolve, y = z(u, \"style\"), b = z(u, nn), w = -1 < t, x = fn(u, \".\" + lt); function k() { var n = o.splides.map(function (n) { n = n.splide.Components.Slides.getAt(r); return n ? n.slide.id : \"\" }).join(\" \"); I(u, nn, On(h.slideX, (w ? t : r) + 1)), I(u, Kn, n), I(u, Z, g ? \"button\" : \"\"), g && P(u, tt) } function S() { e || E() } function E() { var n, t, i; e || (n = o.index, (i = L()) !== vn(u, tn) && (A(u, tn, i), I(u, Vn, d && i || \"\"), c(i ? Pn : In, O)), i = function () { if (o.is(It)) return L(); var n = N(a.Elements.track), t = N(u), i = m(\"left\", !0), r = m(\"right\", !0); return xn(n[i]) <= kn(t[i]) && xn(t[r]) <= kn(n[r]) }(), t = !i && (!L() || w), o.state.is([G, rn]) || I(u, $n, t || \"\"), I(gn(u, l.focusableNodes || \"\"), $, t ? -1 : \"\"), g && I(u, $, t ? -1 : 0), i !== vn(u, St) && (A(u, St, i), c(i ? Rn : Cn, O)), i || document.activeElement !== u || (t = a.Slides.getAt(o.index)) && dn(t.slide), A(u, xt, r === n - 1), A(u, kt, r === n + 1)) } function L() { var n = o.index; return n === r || l.cloneStatus && n === t } var O = { index: r, slideIndex: t, slide: u, container: x, isClone: w, mount: function () { w || (u.id = s.id + \"-slide\" + An(r + 1), I(u, Z, p ? \"tabpanel\" : \"group\"), I(u, tt, h.slide), I(u, nn, b || On(h.slideLabel, [r + 1, o.length]))), f(u, \"click\", R(c, Mn, O)), f(u, \"keydown\", R(c, Yn, O)), i([Dn, Un, V], E), i(Gn, k), v && i(H, S) }, destroy: function () { e = !0, n.destroy(), X(u, At), P(u, ut), I(u, \"style\", y), I(u, nn, b || \"\") }, update: E, style: function (n, t, i) { _(i && x || u, n, t) }, isWithin: function (n, t) { return n = U(n - r), (n = w || !l.rewind && !o.is(Pt) ? n : Y(n, o.length - n)) <= t } }; return O } var Ct = f + \"-interval\"; var jt = { passive: !1, capture: !0 }; var Nt = { Spacebar: \" \", Right: Hn, Left: Bn, Up: t, Down: n }; function Tt(n) { return n = C(n) ? n : n.key, Nt[n] || n } var Gt = \"keydown\"; var Ft = f + \"-lazy\", Xt = Ft + \"-srcset\", Wt = \"[\" + Ft + \"], [\" + Xt + \"]\"; var Yt = [\" \", \"Enter\"]; var Ut = Object.freeze({ __proto__: null, Media: function (r, n, o) { var u = r.state, t = o.breakpoints || {}, e = o.reducedMotion || {}, i = zn(), c = []; function f(n) { n && i.destroy() } function a(n, t) { t = matchMedia(t); i.bind(t, \"change\", s), c.push([n, t]) } function s() { var n = u.is(7), t = o.direction, i = c.reduce(function (n, t) { return d(n, t[1].matches ? t[0] : {}) }, {}); sn(o), l(i), o.destroy ? r.destroy(\"completely\" === o.destroy) : n ? (f(!0), r.mount()) : t !== o.direction && r.refresh() } function l(n, t, i) { d(o, n), t && d(Object.getPrototypeOf(o), n), !i && u.is(1) || r.emit(K, o) } return { setup: function () { var i = \"min\" === o.mediaQuery; E(t).sort(function (n, t) { return i ? +n - +t : +t - +n }).forEach(function (n) { a(t[n], \"(\" + (i ? \"min\" : \"max\") + \"-width:\" + n + \"px)\") }), a(e, v), s() }, destroy: f, reduce: function (n) { matchMedia(v).matches && (n ? d(o, e) : sn(o, E(e))) }, set: l } }, Direction: function (n, t, o) { return { resolve: function (n, t, i) { var r = \"rtl\" !== (i = i || o.direction) || t ? i === Jn ? 0 : -1 : 1; return l[n] && l[n][r] || n.replace(/width|left|right/i, function (n, t) { n = l[n.toLowerCase()][r] || n; return 0 < t ? n.charAt(0).toUpperCase() + n.slice(1) : n }) }, orient: function (n) { return n * (\"rtl\" === o.direction ? 1 : -1) } } }, Elements: function (n, t, i) { var r, o, u, e = Q(n), c = e.on, f = e.bind, a = n.root, s = i.i18n, l = {}, d = [], v = [], h = []; function p() { r = y(\".\" + ct), o = fn(r, \".\" + ft), bn(r && o, \"A track/list element is missing.\"), k(d, S(o, \".\" + at + \":not(.\" + st + \")\")), w({ arrows: dt, pagination: gt, prev: ht, next: pt, bar: yt, toggle: bt }, function (n, t) { l[t] = y(\".\" + n) }), an(l, { root: a, track: r, list: o, slides: d }); var n = a.id || function (n) { return \"\" + n + An(_n[n] = (_n[n] || 0) + 1) }(yn), t = i.role; a.id = n, r.id = r.id || n + \"-track\", o.id = o.id || n + \"-list\", !z(a, Z) && \"SECTION\" !== a.tagName && t && I(a, Z, t), I(a, tt, s.carousel), I(o, Z, \"presentation\"), m() } function g(n) { var t = ut.concat(\"style\"); D(d), X(a, v), X(r, h), P([r, o], t), P(a, n ? t : [\"style\", tt]) } function m() { X(a, v), X(r, h), v = b(et), h = b(ct), M(a, v), M(r, h), I(a, nn, i.label), I(a, Zn, i.labelledby) } function y(n) { n = pn(a, n); return n && function (n, t) { if (x(n.closest)) return n.closest(t); for (var i = n; i && 1 === i.nodeType && !cn(i, t);)i = i.parentElement; return i }(n, \".\" + et) === a ? n : void 0 } function b(n) { return [n + \"--\" + i.type, n + \"--\" + i.direction, i.drag && n + \"--draggable\", i.isNavigation && n + \"--nav\", n === et && tn] } return an(l, { setup: p, mount: function () { c(J, g), c(J, p), c(K, m), f(document, _t + \" keydown\", function (n) { u = \"keydown\" === n.type }, { capture: !0 }), f(a, \"focusin\", function () { A(a, Lt, !!u) }) }, destroy: g }) }, Slides: function (r, o, u) { var n = Q(r), t = n.on, e = n.emit, c = n.bind, f = (n = o.Elements).slides, a = n.list, s = []; function i() { f.forEach(function (n, t) { d(n, t, -1) }) } function l() { h(function (n) { n.destroy() }), D(s) } function d(n, t, i) { t = Rt(r, t, i, n); t.mount(), s.push(t), s.sort(function (n, t) { return n.index - t.index }) } function v(n) { return n ? p(function (n) { return !n.isClone }) : s } function h(n, t) { v(t).forEach(n) } function p(t) { return s.filter(x(t) ? t : function (n) { return C(t) ? cn(n.slide, t) : b(y(t), n.index) }) } return { mount: function () { i(), t(J, l), t(J, i) }, destroy: l, update: function () { h(function (n) { n.update() }) }, register: d, get: v, getIn: function (n) { var t = o.Controller, i = t.toIndex(n), r = t.hasFocus() ? 1 : u.perPage; return p(function (n) { return En(n.index, i, i + r - 1) }) }, getAt: function (n) { return p(n)[0] }, add: function (n, o) { g(n, function (n) { var t, i, r; m(n = C(n) ? hn(n) : n) && ((t = f[o]) ? O(n, t) : L(a, n), M(n, u.classes.slide), t = n, i = R(e, jn), t = gn(t, \"img\"), (r = t.length) ? t.forEach(function (n) { c(n, \"load error\", function () { --r || i() }) }) : i()) }), e(J) }, remove: function (n) { T(p(n).map(function (n) { return n.slide })), e(J) }, forEach: h, filter: p, style: function (t, i, r) { h(function (n) { n.style(t, i, r) }) }, getLength: function (n) { return (n ? f : s).length }, isEnough: function () { return s.length > u.perPage } } }, Layout: function (t, n, i) { var r, o, u, e = (a = Q(t)).on, c = a.bind, f = a.emit, a = n.Slides, s = n.Direction.resolve, l = (n = n.Elements).root, d = n.track, v = n.list, h = a.getAt, p = a.style; function g() { r = i.direction === Jn, _(l, \"maxWidth\", W(i.width)), _(d, s(\"paddingLeft\"), y(!1)), _(d, s(\"paddingRight\"), y(!0)), m(!0) } function m(n) { var t = N(l); !n && o.width === t.width && o.height === t.height || (_(d, \"height\", function () { var n = \"\"; r && (bn(n = b(), \"height or heightRatio is missing.\"), n = \"calc(\" + n + \" - \" + y(!1) + \" - \" + y(!0) + \")\"); return n }()), p(s(\"marginRight\"), W(i.gap)), p(\"width\", i.autoWidth ? null : W(i.fixedWidth) || (r ? \"\" : w())), p(\"height\", W(i.fixedHeight) || (r ? i.autoHeight ? null : w() : b()), !0), o = t, f(Nn), u !== (u = O()) && (A(l, Ot, u), f(\"overflow\", u))) } function y(n) { var t = i.padding, n = s(n ? \"right\" : \"left\"); return t && W(t[n] || (un(t) ? 0 : t)) || \"0px\" } function b() { return W(i.height || N(v).width * i.heightRatio) } function w() { var n = W(i.gap); return \"calc((100%\" + (n && \" + \" + n) + \")/\" + (i.perPage || 1) + (n && \" - \" + n) + \")\" } function x() { return N(v)[s(\"width\")] } function k(n, t) { n = h(n || 0); return n ? N(n.slide)[s(\"width\")] + (t ? 0 : L()) : 0 } function S(n, t) { var i, n = h(n); return n ? (n = N(n.slide)[s(\"right\")], i = N(v)[s(\"left\")], U(n - i) + (t ? 0 : L())) : 0 } function E(n) { return S(t.length - 1) - S(0) + k(0, n) } function L() { var n = h(0); return n && parseFloat(_(n.slide, s(\"marginRight\"))) || 0 } function O() { return t.is(It) || E(!0) > x() } return { mount: function () { var n, t, i; g(), c(window, \"resize load\", (n = R(f, jn), i = qn(t || 0, n, null, 1), function () { i.isPaused() && i.start() })), e([K, J], g), e(jn, m) }, resize: m, listSize: x, slideSize: k, sliderSize: E, totalSize: S, getPadding: function (n) { return parseFloat(_(d, s(\"padding\" + (n ? \"Right\" : \"Left\")))) || 0 }, isOverflow: O } }, Clones: function (c, i, f) { var t, r = Q(c), n = r.on, a = i.Elements, s = i.Slides, o = i.Direction.resolve, l = []; function u() { if (n(J, d), n([K, jn], v), t = h()) { var o = t, u = s.get().slice(), e = u.length; if (e) { for (; u.length < o;)k(u, u); k(u.slice(-o), u.slice(0, o)).forEach(function (n, t) { var i = t < o, r = function (n, t) { n = n.cloneNode(!0); return M(n, f.classes.clone), n.id = c.root.id + \"-clone\" + An(t + 1), n }(n.slide, t); i ? O(r, u[0].slide) : L(a.list, r), k(l, r), s.register(r, t - o + (i ? 0 : e), n.index) }) } i.Layout.resize(!0) } } function d() { e(), u() } function e() { T(l), D(l), r.destroy() } function v() { var n = h(); t !== n && (t < n || !n) && r.emit(J) } function h() { var n, t = f.clones; return c.is(Pt) ? en(t) && (t = (n = f[o(\"fixedWidth\")] && i.Layout.slideSize(0)) && kn(N(a.track)[o(\"width\")] / n) || f[o(\"autoWidth\")] && c.length || 2 * f.perPage) : t = 0, t } return { mount: u, destroy: e } }, Move: function (r, c, o) { var e, n = Q(r), t = n.on, f = n.emit, a = r.state.set, u = (n = c.Layout).slideSize, i = n.getPadding, s = n.totalSize, l = n.listSize, d = n.sliderSize, v = (n = c.Direction).resolve, h = n.orient, p = (n = c.Elements).list, g = n.track; function m() { c.Controller.isBusy() || (c.Scroll.cancel(), y(r.index), c.Slides.update()) } function y(n) { b(S(n, !0)) } function b(n, t) { r.is(It) || (t = t ? n : function (n) { { var t, i; r.is(Pt) && (t = k(n), i = t > c.Controller.getEnd(), (t < 0 || i) && (n = w(n, i))) } return n }(n), _(p, \"transform\", \"translate\" + v(\"X\") + \"(\" + t + \"px)\"), n !== t && f(Un)) } function w(n, t) { var i = n - L(t), r = d(); return n -= h(r * (kn(U(i) / r) || 1)) * (t ? 1 : -1) } function x() { b(E(), !0), e.cancel() } function k(n) { for (var t = c.Slides.get(), i = 0, r = 1 / 0, o = 0; o < t.length; o++) { var u = t[o].index, e = U(S(u, !0) - n); if (!(e <= r)) break; r = e, i = u } return i } function S(n, t) { var i = h(s(n - 1) - (n = n, \"center\" === (i = o.focus) ? (l() - u(n, !0)) / 2 : +i * u(n) || 0)); return t ? (n = i, n = o.trimSpace && r.is(Mt) ? q(n, 0, h(d(!0) - l())) : n) : i } function E() { var n = v(\"left\"); return N(p)[n] - N(g)[n] + h(i(!1)) } function L(n) { return S(n ? c.Controller.getEnd() : 0, !!o.trimSpace) } return { mount: function () { e = c.Transition, t([B, Nn, K, J], m) }, move: function (n, t, i, r) { var o, u; n !== t && (o = i < n, u = h(w(E(), o)), o ? 0 <= u : u <= p[v(\"scrollWidth\")] - N(g)[v(\"width\")]) && (x(), b(w(E(), i < n), !0)), a(G), f(H, t, i, n), e.start(t, function () { a(3), f(Dn, t, i, n), r && r() }) }, jump: y, translate: b, shift: w, cancel: x, toIndex: k, toPosition: S, getPosition: E, getLimit: L, exceededLimit: function (n, t) { t = en(t) ? E() : t; var i = !0 !== n && h(t) < h(L(!1)), n = !1 !== n && h(t) > h(L(!0)); return i || n }, reposition: m } }, Controller: function (o, u, e) { var c, f, a, s, n = Q(o), t = n.on, i = n.emit, l = u.Move, d = l.getPosition, r = l.getLimit, v = l.toPosition, h = (n = u.Slides).isEnough, p = n.getLength, g = e.omitEnd, m = o.is(Pt), y = o.is(Mt), b = R(L, !1), w = R(L, !0), x = e.start || 0, k = x; function S() { f = p(!0), a = e.perMove, s = e.perPage, c = _(); var n = q(x, 0, g ? c : f - 1); n !== x && (x = n, l.reposition()) } function E() { c !== _() && i(\"ei\") } function L(n, t) { var i = a || (P() ? 1 : s), i = O(x + i * (n ? -1 : 1), x, !(a || P())); return -1 === i && y && !Sn(d(), r(!n), 1) ? n ? 0 : c : t ? i : A(i) } function O(n, t, i) { var r; return h() || P() ? ((r = function (n) { if (y && \"move\" === e.trimSpace && n !== x) for (var t = d(); t === v(n, !0) && En(n, 0, o.length - 1, !e.rewind);)n < x ? --n : ++n; return n }(n)) !== n && (t = n, n = r, i = !1), n < 0 || c < n ? n = a || !En(0, n, t, !0) && !En(c, t, n, !0) ? m ? i ? n < 0 ? -(f % s || s) : f : n : e.rewind ? n < 0 ? c : 0 : -1 : z(D(n)) : i && n !== t && (n = z(D(t) + (n < t ? -1 : 1)))) : n = -1, n } function A(n) { return m ? (n + f) % f || 0 : n } function _() { for (var n = f - (P() || m && a ? 1 : s); g && 0 < n--;)if (v(f - 1, !0) !== v(n, !0)) { n++; break } return q(n, 0, f - 1) } function z(n) { return q(P() ? n : s * n, 0, c) } function D(n) { return P() ? Y(n, c) : xn((c <= n ? f - 1 : n) / s) } function M(n) { n !== x && (k = x, x = n) } function P() { return !en(e.focus) || e.isNavigation } function I() { return o.state.is([G, rn]) && !!e.waitForTransition } return { mount: function () { S(), t([K, J, \"ei\"], S), t(Nn, E) }, go: function (n, t, i) { var r; I() || -1 < (r = A(n = function (n) { var t = x; { var i, r; C(n) ? (r = n.match(/([+\\-<>])(\\d+)?/) || [], i = r[1], r = r[2], \"+\" === i || \"-\" === i ? t = O(x + +(\"\" + i + (+r || 1)), x) : \">\" === i ? t = r ? z(+r) : b(!0) : \"<\" === i && (t = w(!0))) : t = m ? n : q(n, 0, c) } return t }(n))) && (t || r !== x) && (M(r), l.move(n, r, k, i)) }, scroll: function (n, t, i, r) { u.Scroll.scroll(n, t, i, function () { var n = A(l.toIndex(d())); M(g ? Y(n, c) : n), r && r() }) }, getNext: b, getPrev: w, getAdjacent: L, getEnd: _, setIndex: M, getIndex: function (n) { return n ? k : x }, toIndex: z, toPage: D, toDest: function (n) { return n = l.toIndex(n), y ? q(n, 0, c) : n }, hasFocus: P, isBusy: I } }, Arrows: function (o, n, t) { var i, r, u = Q(o), e = u.on, c = u.bind, f = u.emit, a = t.classes, s = t.i18n, l = n.Elements, d = n.Controller, v = l.arrows, h = l.track, p = v, g = l.prev, m = l.next, y = {}; function b() { var n = t.arrows; !n || g && m || (p = v || j(\"div\", a.arrows), g = S(!0), m = S(!1), i = !0, L(p, [g, m]), v || O(p, h)), g && m && (an(y, { prev: g, next: m }), ln(p, n ? \"\" : \"none\"), M(p, r = dt + \"--\" + t.direction), n && (e([B, Dn, J, V, \"ei\"], E), c(m, \"click\", R(k, \">\")), c(g, \"click\", R(k, \"<\")), E(), I([g, m], Kn, h.id), f(\"arrows:mounted\", g, m))), e(K, w) } function w() { x(), b() } function x() { u.destroy(), X(p, r), i ? (T(v ? [g, m] : p), g = m = null) : P([g, m], ut) } function k(n) { d.go(n, !0) } function S(n) { return hn('\";\r\n\t\t\t\tif (e.target.getAttribute(\"data-video\").indexOf(\"vimeo\") != -1) {\r\n\t\t\t\t\tvar vid = e.target.getAttribute(\"data-video\").replace(\"https://vimeo.com/\", \"\");\r\n\t\t\t\t\tif (vid.indexOf(\"/\") != -1) {\r\n\t\t\t\t\t\tvid = vid.substring(0, vid.indexOf(\"/\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"
\";\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"

This video uses Vimeo's native closed captioning features to provide a transcript. If closed captioning is unavailable for this video, please contact us and we can provide you with one.

\";\r\n\t\t\t\t} else if (e.target.getAttribute(\"data-video\").indexOf(\"youtube\") != -1) {\r\n\t\t\t\t\tvar vid = e.target\r\n\t\t\t\t\t\t.getAttribute(\"data-video\")\r\n\t\t\t\t\t\t.replace(\"https://www.youtube.com/watch?v=\", \"\");\r\n\t\t\t\t\tif (vid.indexOf(\"/\") != -1) {\r\n\t\t\t\t\t\tvid = vid.substring(0, vid.indexOf(\"/\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"
\";\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"

This video uses YouTube's native closed captioning features to provide a transcript. If closed captioning is unavailable for this video, please contact us and we can provide you with one.

\";\r\n\t\t\t\t} else if (e.target.getAttribute(\"data-video\").indexOf(\".mp4\")) {\r\n\t\t\t\t\tvideoGUID = e.target.getAttribute(\"data-video\").split(\"/\")[2];\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"\";\r\n\t\t\t\t\t// Since the transcript is queried async, make a holder for it and we'll append the content after the async completes\r\n\t\t\t\t\tvidBuild +=\r\n\t\t\t\t\t\t\"

For a transcript of this video, please contact us.

\";\r\n\t\t\t\t}\r\n\t\t\t\tvidBuild += \"\";\r\n\r\n\t\t\t\tvar vidModal = document.querySelector(\".video-modal\");\r\n\t\t\t\tif (vidModal !== null) {\r\n\t\t\t\t\tvidModal.parentNode.removeChild(vidModal);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar div = document.createElement(\"div\");\r\n\t\t\t\tdiv.classList.add(\"video-modal\");\r\n\t\t\t\tdiv.innerHTML = vidBuild;\r\n\r\n\t\t\t\tdocument.body.appendChild(div);\r\n\r\n\t\t\t\tif (videoGUID != \"\" && document.getElementById(\"transcript-\" + videoGUID) != undefined) {\r\n\t\t\t\t\t// If it's embedded, get the transcript\r\n\t\t\t\t\tlet xhr = new XMLHttpRequest();\r\n\t\t\t\t\txhr.open(\"GET\", \"/transcript/\" + videoGUID);\r\n\t\t\t\t\txhr.send();\r\n\t\t\t\t\txhr.onload = function () {\r\n\t\t\t\t\t\tif (xhr.status === 200 && xhr.responseText.replace(/\\\"/gm, \"\") != \"\") {\r\n\t\t\t\t\t\t\t// console.log(\"Transcrpt Retrieval Succeeded, Status: \" + xhr.status + \".\");\r\n\t\t\t\t\t\t\tdocument.getElementById(\"transcript-\" + videoGUID).innerHTML =\r\n\t\t\t\t\t\t\t\t\"

\" +\r\n\t\t\t\t\t\t\t\txhr.responseText.replace(/\\\"/gm, \"\").replace(/\\\\r\\\\n/gm, \"
\") +\r\n\t\t\t\t\t\t\t\t\"

\";\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// console.log(\"Transcrpt Retrieval Failed, Status: \" + xhr.status + \".\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t\txhr.onerror = function () {\r\n\t\t\t\t\t\t// console.log(\"Transcript Retrieval Error: \" + xhr.status + \".\");\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (e.target.matches(\".video-modal\")) {\r\n\t\t\te.target.parentNode.removeChild(e.target);\r\n\t\t} else if (e.target.matches(\".video-modal-content\")) {\r\n\t\t\te.stopPropagation();\r\n\t\t} else if (e.target.matches(\".video-modal-close\")) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar vidModal = document.querySelector(\".video-modal\");\r\n\t\t\tif (vidModal !== null) {\r\n\t\t\t\tvidModal.parentNode.removeChild(vidModal);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//Footer Nav\r\n\t\telse if (e.target.matches(\".footer-nav > ul > li > a\")) {\r\n\t\t\tif (window.innerWidth < tablet_break) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tvar btn = e.target.parentNode.querySelector(\"ul\");\r\n\t\t\t\tif (btn.style.display != \"block\") {\r\n\t\t\t\t\tvSlideDown(btn); //.style.display = \"block\";\r\n\t\t\t\t\te.target.parentNode.classList.add(\"active\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvSlideUp(btn); //btn.style.display = \"none\";\r\n\t\t\t\t\te.target.parentNode.classList.remove(\"active\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (e.target.matches(\".js-accordion-header\")) {\r\n\t\t\tvar cnt = e.target.parentNode.parentNode.parentNode.querySelector(\".js-accordion-content\");\r\n\t\t\te.target.parentNode.parentNode.parentNode.classList.add(\"open\");\r\n\t\t\tvSlideDown(cnt);\r\n\t\t} else if (e.target.matches(\".js-accordion-close\")) {\r\n\t\t\tvar cnt = e.target.parentNode.parentNode.parentNode.querySelector(\".js-accordion-content\");\r\n\t\t\te.target.parentNode.parentNode.parentNode.classList.remove(\"open\");\r\n\t\t\tvSlideUp(cnt);\r\n\t\t} else if (e.target.matches(\".js-branch-selector\")) {\r\n\t\t\tcloseAllMenus(\"branch\");\r\n\r\n\t\t\tdocument.body.classList.add(\"branch-open\");\r\n\t\t} else if (e.target.matches(\".js-branch-modal-close\")) {\r\n\t\t\tdocument.body.classList.remove(\"branch-open\");\r\n\t\t} else if (e.target.matches(\".js-branch-modal\")) {\r\n\t\t\t//Hide Locations Modal\r\n\t\t\tif (e.target.id == \"locationsModal\") {\r\n\t\t\t\tdocument.body.classList.remove(\"branch-open\");\r\n\t\t\t}\r\n\t\t} else if (e.target.matches(\".js-subscribe\")) {\r\n\t\t\t//Hide Locations Modal\r\n\t\t\tif (e.target.parentNode.classList.contains(\"open\")) {\r\n\t\t\t\te.target.parentNode.classList.remove(\"open\");\r\n\t\t\t\te.target.innerText = e.target.getAttribute(\"data-text\");\r\n\t\t\t} else {\r\n\t\t\t\te.target.parentNode.classList.add(\"open\");\r\n\t\t\t\te.target.setAttribute(\"data-text\", e.target.innerText);\r\n\t\t\t\te.target.innerText = \"Close\";\r\n\t\t\t}\r\n\t\t} else if (e.target.matches(\".js-alert-bell\")) {\r\n\t\t\tvar alerts = document.querySelectorAll(\".hidden-alert\");\r\n\t\t\tdocument.cookie = \"alerts=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\r\n\t\t\talerts.forEach(function (alert) {\r\n\t\t\t\tvSlideDown(alert);\r\n\t\t\t\tif (alert.classList.contains(\"ab-popup\")) {\r\n\t\t\t\t\talert.style.display = \"flex\";\r\n\t\t\t\t\tbody.classList.add(\"popup-open\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\te.target.disabled = true;\r\n\t\t\te.target.style.opacity = 0;\r\n\t\t} else if (e.target.matches(\".js-bc-video\")) {\r\n\t\t\t//document.querySelector(\".js-bc-video\").parentNode.parentNode.parentNode.querySelector(\"img\").click();\r\n\t\t\te.target.parentNode.parentNode.parentNode.querySelector(\".photo img\").click();\r\n\t\t} else if (e.target.matches(\".jump-lnk\")) {\r\n\t\t\tconst lnkText = e.target.innerText.replace(/ /g, \"_\");\r\n\t\t\te.target.parentNode.parentNode.classList.remove(\"open\");\r\n\t\t\tconst btn = document.querySelectorAll(\"[data-jumplink='\" + lnkText + \"']\");\r\n\t\t\tif (btn.length > 0) {\r\n\t\t\t\tbtn[0].scrollIntoView({ behavior: \"smooth\" });\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Comparison Chart Mobile Previous\r\n\t\telse if (e.target.matches(\".js-table-prev\")) {\r\n\t\t\tvar base = e.target.parentNode.parentNode.parentNode.querySelector('.compare-table'); //$(this).parent().parent();\r\n\t\t\tconst nextBtn = base.parentNode.querySelectorAll('.js-table-next');\r\n\t\t\tconst prevBtn = base.parentNode.querySelectorAll('.js-table-prev');\r\n\t\t\t\r\n\t\t\tnextBtn.forEach(el => { el.classList.remove(\"grayed\"); }) \r\n\t\t\tbase.setAttribute(\"data-col\", Number(base.getAttribute(\"data-col\")) - 1);\r\n\t\t\tif (base.getAttribute(\"data-col\") == 1) {\r\n\t\t\t\tprevBtn.forEach(el => { el.classList.add(\"grayed\"); })\r\n\t\t\t}\r\n\t\t\tvar spot = base.querySelector(\"table tr\");\r\n\t\t\tvar ths = spot.querySelectorAll(\"th\");\r\n\t\t\tbase.querySelector(\".js-rate-head\").innerHTML = eq.call(\r\n\t\t\t\tths,\r\n\t\t\t\tbase.getAttribute(\"data-col\")\r\n\t\t\t).innerHTML;\r\n\t\t\tmobileButtonDisplay(base.dataset.col);\r\n\t\t\tupdateDots(base);\r\n\t\t}\r\n\t\t// Comparison Chart Mobile Next\r\n\t\telse if (e.target.matches(\".js-table-next\")) {\r\n\t\t\tvar base = e.target.parentNode.parentNode.parentNode.querySelector('.compare-table'); //$(this).parent().parent();\r\n\t\t\tconst nextBtn = base.parentNode.querySelectorAll('.js-table-next');\r\n\t\t\tconst prevBtn = base.parentNode.querySelectorAll('.js-table-prev');\r\n\r\n\t\t\tprevBtn.forEach(el => {el.classList.remove(\"grayed\"); })\r\n\t\t\tbase.setAttribute(\"data-col\", Number(base.getAttribute(\"data-col\")) + 1);\r\n\t\t\tvar spot = base.querySelector(\"table tr\");\r\n\t\t\tvar ths = spot.querySelectorAll(\"th\");\r\n\r\n\t\t\tif (base.getAttribute(\"data-col\") == ths.length - 1) {\r\n\t\t\t\tnextBtn.forEach(el => {el.classList.add(\"grayed\"); }) \r\n\t\t\t}\r\n\r\n\t\t\tbase.querySelector(\".js-rate-head\").innerHTML = eq.call(\r\n\t\t\t\tths,\r\n\t\t\t\tbase.getAttribute(\"data-col\")\r\n\t\t\t).innerHTML;\r\n\t\t\tmobileButtonDisplay(base.dataset.col);\r\n\t\t\tupdateDots(base);\r\n\t\t} else if (e.target.matches(\".js-accordion .js-close-btn\")) {\r\n\t\t\tconst parent = getParentElementWithClass(e.target, \"js-accordion\");\r\n\t\t\tparent.querySelector(\".js-accordion-button\").click();\r\n\t\t} else if (e.target.matches(\".js-tab-header\")) {\r\n\t\t\t//change tab\r\n\r\n\t\t\tvar tabs = e.target.parentNode.parentNode.parentNode.querySelectorAll(\".js-tab\");\r\n\t\t\te.target.parentNode.parentNode.querySelector(\".js-tab-slidetrack\").classList.remove(\"visible\");\r\n\t\t\ttabs.forEach(function (tab) {\r\n\t\t\t\tif (tab.getAttribute(\"data-tab\") == e.target.getAttribute(\"data-tab\")) {\r\n\t\t\t\t\tif (tab.classList.contains('active')) {\r\n\t\t\t\t\t\ttab.classList.remove('active')\r\n\t\t\t\t\t\tgetParentElementWithClass(tab, 'tabs').classList.remove('tab-open')\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttab.classList.add('active')\r\n\t\t\t\t\t\ttab.querySelector('.tab-content .content').style.opacity = 1;\r\n\t\t\t\t\t\tgetParentElementWithClass(tab, 'tabs').classList.add('tab-open');\r\n\t\t\t\t\t}\r\n/*\t\t\t\t\ttab.classList.toggle(\"active\");*/\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttab.querySelector('.tab-content .content').style.opacity = 0;\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\ttab.classList.remove(\"active\");\r\n\t\t\t\t\t},200)\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tif (tab.classList.contains(\"active\")) {\r\n\t\t\t\t\ttab.parentNode.querySelector(\".js-tab-slidetrack\").classList.add(\"visible\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tvar headers = e.target.parentNode.parentNode.parentNode.querySelectorAll(\".js-tab-header\");\r\n\t\t\theaders.forEach(function (tab) {\r\n\t\t\t\tif (tab.getAttribute(\"data-tab\") == e.target.getAttribute(\"data-tab\")) {\r\n\t\t\t\t\ttab.classList.toggle(\"active\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttab.classList.remove(\"active\");\r\n\t\t\t\t}\r\n\t\t\t\tif (tab.classList.contains(\"active\")) {\r\n\t\t\t\t\tconst width = tab.offsetWidth / 2;\r\n\t\t\t\t\ttab.parentElement.parentElement.setAttribute(\r\n\t\t\t\t\t\t\"style\",\r\n\t\t\t\t\t\t`--trackLeft: ${tab.offsetLeft + width - 15}px`\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (e.target.matches(\".tab-name\")) {\r\n\t\t\t//change tab\r\n\t\t\te.target.classList.toggle(\"open\");\r\n\t\t\tvar tab = e.target.parentNode.querySelector(\".tab-content\");\r\n\r\n\t\t\tif (tab.classList.contains(\"tab-open\")) {\r\n\t\t\t\tvSlideUp(tab);\r\n\t\t\t\ttab.classList.remove(\"tab-open\");\r\n\t\t\t\t\r\n\t\t\t} else {\r\n\t\t\t\tvSlideDown(tab);\r\n\t\t\t\ttab.classList.add(\"tab-open\");\r\n\t\t\t}\r\n\t\t} else if (e.target.matches(\".jump-header\")) {\r\n\t\t\t//change tab\r\n\t\t\te.target.parentNode.classList.toggle(\"open\");\r\n\t\t} else if (body.classList.contains('login-open') && e.target.matches(\"body\")) {\r\n\t\t\tcloseLogin();\r\n\r\n\t\t} else if (body.classList.contains('search-open') && e.target.matches(\"body\")) {\r\n\t\t\tcloseSearch();\r\n\r\n\t\t}else if (e.target.matches(\".pagination-dots .dot\")) {\r\n\t\t\tconst compareTable = e.target.parentNode.parentNode.querySelector(\".compare-table\");\r\n\t\t\tvar spot = compareTable.querySelector(\"table tr\");\r\n\t\t\tvar ths = spot.querySelectorAll(\"th\");\r\n\t\t\tcompareTable.dataset.col = e.target.dataset.col;\r\n\t\t\tupdateDots(compareTable);\r\n\t\t\tcompareTable.querySelector(\".js-table-prev\").classList.remove(\"grayed\");\r\n\t\t\tcompareTable.querySelector(\".js-table-next\").classList.remove(\"grayed\");\r\n\t\t\tif (compareTable.dataset.col == 1) {\r\n\t\t\t\tcompareTable.querySelector(\".js-table-prev\").classList.add(\"grayed\");\r\n\t\t\t}\r\n\t\t\tif (compareTable.dataset.col == ths.length - 1) {\r\n\t\t\t\tcompareTable.querySelector(\".js-table-next\").classList.add(\"grayed\");\r\n\t\t\t}\r\n\r\n\t\t\tcompareTable.querySelector(\".js-rate-head\").innerHTML = eq.call(\r\n\t\t\t\tths,\r\n\t\t\t\tcompareTable.getAttribute(\"data-col\")\r\n\t\t\t).innerHTML;\r\n\t\t\tmobileButtonDisplay(compareTable.dataset.col);\r\n\t\t}\r\n\t},\r\n\tfalse\r\n);\r\n\r\n/** Tabs **/\r\nvar ptabs = document.querySelectorAll(\".tabs\");\r\n\r\nptabs.forEach(function (tab) {\r\n\tvar tabs = tab.querySelectorAll(\".js-tab\");\r\n\t//Create Tab Nav\r\n\tvar tabHeader = document.createElement(\"div\");\r\n\ttabHeader.classList.add(\"tabs-nav\");\r\n\tvar cnt = document.createElement(\"div\");\r\n\tcnt.classList.add(\"content\");\r\n\ttabs.forEach(function (tab, index) {\r\n\t\tvar rand = Math.floor(Math.random() * 10000000000000);\r\n\t\tvar btn = document.createElement(\"button\");\r\n\t\tbtn.classList.add(\"js-tab-header\");\r\n\t\tbtn.setAttribute(\"data-tab\", rand);\r\n\t\ttab.setAttribute(\"data-tab\", rand);\r\n\t\tbtn.innerHTML = tab.querySelector(\".tab-name\").innerHTML;\r\n\t\ttab.querySelector(\".tab-name\").style.display = \"none\";\r\n\t\tcnt.appendChild(btn);\r\n\t\tif (index < tabs.length - 1) {\r\n\t\t\tconst divider = document.createElement(\"div\");\r\n\t\t\tdivider.classList.add(\"divider\");\r\n\t\t\tcnt.appendChild(divider);\r\n\t\t}\r\n\t});\r\n\ttabHeader.appendChild(cnt);\r\n\tconst slideTrack = document.createElement(\"div\");\r\n\tslideTrack.classList.add(\"js-tab-slidetrack\");\r\n\ttabHeader.appendChild(slideTrack);\r\n\r\n\tif (tabs.length > 0) {\r\n\t\ttabs[0].parentNode.insertBefore(tabHeader, tabs[0]);\r\n\t}\r\n\r\n\t//Set first as active\r\n\t// var tabBtns = tab.querySelectorAll(\".js-tab-header\");\r\n\t// if (tabBtns.length > 0 && !tabs[0].classList.contains(\"no-auto-open\")) {\r\n\t// \ttabBtns[0].classList.add(\"active\");\r\n\t// \ttabs[0].classList.add(\"active\");\r\n\t// }\r\n});\r\n\r\n//Allow setting of tab via location hash\r\n//if (window.location.hash) {\r\n//\tvar hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character\r\n//\tvar tabBtns = tab.querySelectorAll(\".js-tab-header\");\r\n\r\n//\ttabBtns.forEach(function (topic) {\r\n//\t\tif (\r\n//\t\t\ttopic.innerText.toLowerCase().replace(/[^a-zA-Z0-9]+/g, \"\") ==\r\n//\t\t\thash.toLowerCase().replace(/[^a-zA-Z0-9]+/g, \"\")\r\n//\t\t) {\r\n//\t\t\ttopic.click();\r\n//\t\t}\r\n//\t});\r\n//}\r\n\r\n/* Anchor Links Chrome Fix */\r\n(function (document, history, location) {\r\n\tvar HISTORY_SUPPORT = !!(history && history.pushState);\r\n\r\n\tvar anchorScrolls = {\r\n\t\tANCHOR_REGEX: /^#[^ ]+$/,\r\n\t\tOFFSET_HEIGHT_PX: (window.outerWidth > 900) ? 150 : 90,\r\n\r\n\t\t/**\r\n\t\t * Establish events, and fix initial scroll position if a hash is provided.\r\n\t\t */\r\n\t\tinit: function () {\r\n\t\t\tthis.scrollToCurrent();\r\n\t\t\twindow.addEventListener(\"hashchange\", this.scrollToCurrent.bind(this));\r\n\t\t\tdocument.body.addEventListener(\"click\", this.delegateAnchors.bind(this));\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Return the offset amount to deduct from the normal scroll position.\r\n\t\t * Modify as appropriate to allow for dynamic calculations\r\n\t\t */\r\n\t\tgetFixedOffset: function () {\r\n\t\t\treturn this.OFFSET_HEIGHT_PX;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * If the provided href is an anchor which resolves to an element on the\r\n\t\t * page, scroll to it.\r\n\t\t * @param {String} href\r\n\t\t * @return {Boolean} - Was the href an anchor.\r\n\t\t */\r\n\t\tscrollIfAnchor: function (href, pushToHistory) {\r\n\t\t\tvar match, rect, anchorOffset;\r\n\r\n\t\t\tif (!this.ANCHOR_REGEX.test(href)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tmatch = document.getElementById(href.slice(1));\r\n\r\n\t\t\tif (match) {\r\n\t\t\t\trect = match.getBoundingClientRect();\r\n\t\t\t\tanchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: anchorOffset,\r\n\t\t\t\t\tleft: window.pageXOffset,\r\n\t\t\t\t\tbehavior: \"smooth\",\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Add the state to history as-per normal anchor links\r\n\t\t\t\tif (HISTORY_SUPPORT && pushToHistory) {\r\n\t\t\t\t\thistory.pushState({}, document.title, location.pathname + href);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn !!match;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Attempt to scroll to the current location's hash.\r\n\t\t */\r\n\t\tscrollToCurrent: function () {\r\n\t\t\tthis.scrollIfAnchor(window.location.hash);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * If the click event's target was an anchor, fix the scroll position.\r\n\t\t */\r\n\t\tdelegateAnchors: function (e) {\r\n\t\t\tvar elem = e.target;\r\n\r\n\t\t\tif (elem.nodeName === \"A\" && this.scrollIfAnchor(elem.getAttribute(\"href\"), true)) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\twindow.addEventListener(\"DOMContentLoaded\", anchorScrolls.init.bind(anchorScrolls));\r\n})(window.document, window.history, window.location);\r\n\r\n//Compare Chart Highlight\r\nvar cmp = document.querySelectorAll(\".compare-table\");\r\n\r\nif (cmp.length > 0) {\r\n\tvar pageTitle = document.querySelector(\"h1\");\r\n\tif (pageTitle != null) {\r\n\t\tcmp.forEach(function (table) {\r\n\t\t\tvar ths = table.querySelectorAll(\"th\");\r\n\t\t\tths.forEach(function (th) {\r\n\t\t\t\tif (th.innerText == pageTitle.innerText) {\r\n\t\t\t\t\tvar cellIndex = th.cellIndex;\r\n\r\n\t\t\t\t\tvar tds = table.querySelectorAll(\"th,td\");\r\n\t\t\t\t\ttds.forEach(function (td) {\r\n\t\t\t\t\t\tif (td.cellIndex == cellIndex) {\r\n\t\t\t\t\t\t\ttd.classList.add(\"active\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n}\r\n\r\n/**\r\n * ADA - Remove id=pasted\r\n */\r\nvar ids = document.querySelectorAll(\"#isPasted\");\r\nids.forEach(function (item) {\r\n\titem.removeAttribute(\"id\");\r\n});\r\n\r\n/** Comparison Charts\r\n * Add controls on mobile **/\r\nfunction eq(index) {\r\n\tif (index >= 0 && index < this.length) return this[index];\r\n\telse return -1;\r\n}\r\n\r\n/******* COUNTER ON SCROLL **********/\r\n// How long you want the animation to take, in ms\r\nconst animationDuration = 2000;\r\n// Calculate how long each �frame� should last if we want to update the animation 60 times per second\r\nconst frameDuration = 1000 / 60;\r\n// Use that to calculate how many frames we need to complete the animation\r\nconst totalFrames = Math.round(animationDuration / frameDuration);\r\n// An ease-out function that slows the count as it progresses\r\nconst easeOutQuad = (t) => t * (2 - t);\r\n\r\n// The animation function, which takes an Element\r\nconst animateCountUp = (el) => {\r\n\tlet frame = 0;\r\n\tlet money = \"\";\r\n\tif (el.innerHTML.indexOf(\"$\") != -1) {\r\n\t\tmoney = \"$\";\r\n\t}\r\n\tconsole.log(\"Count to: \" + el.innerHTML.replace(/\\D/g, \"\"));\r\n\tconst countTo = parseInt(el.innerHTML.replace(/\\D/g, \"\"), 10);\r\n\t// Start the animation running 60 times per second\r\n\tconst counter = setInterval(() => {\r\n\t\tframe++;\r\n\t\t// Calculate our progress as a value between 0 and 1\r\n\t\t// Pass that value to our easing function to get our\r\n\t\t// progress on a curve\r\n\t\tconst progress = easeOutQuad(frame / totalFrames);\r\n\t\t// Use the progress value to calculate the current count\r\n\t\tconst currentCount = Math.round(countTo * progress);\r\n\r\n\t\t// If the current count has changed, update the element\r\n\t\tif (parseInt(el.innerHTML.replace(\",\", \"\"), 10) !== currentCount) {\r\n\t\t\tel.innerHTML = money + currentCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n\t\t}\r\n\r\n\t\t// If we�ve reached our last frame, stop the animation\r\n\t\tif (frame === totalFrames) {\r\n\t\t\tclearInterval(counter);\r\n\t\t}\r\n\t}, frameDuration);\r\n};\r\n\r\n/** JUMP NAVS ***/\r\nvar jumpObserver = new IntersectionObserver(\r\n\tfunction (entries) {\r\n\t\tentries.forEach(function (entry) {\r\n\t\t\tif (entry.target.matches(\"[data-jumplink]\")) {\r\n\t\t\t\tif (entry.isIntersecting) {\r\n\t\t\t\t\tvar jumps = document.querySelectorAll(\".js-links .jump-lnk\");\r\n\t\t\t\t\tjumps.forEach(function (jp) {\r\n\t\t\t\t\t\tif (jp.innerText == entry.target.getAttribute(\"data-jumplink\").replace(/_/g, \" \")) {\r\n\t\t\t\t\t\t\tjp.classList.add(\"active\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tjp.classList.remove(\"active\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\t{ rootMargin: \"-50px 0px 0px 0px\", threshold: [0.00001] }\r\n);\r\n// The element to observe\r\nlet jumps = document.querySelectorAll(\"[data-jumplink]\");\r\n// Attach it to the observer\r\njumps.forEach(function (item) {\r\n\tjumpObserver.observe(item);\r\n});\r\n\r\nif (document.querySelectorAll(\".js-calc\").length > 0) {\r\n\tdocument.addEventListener(\r\n\t\t\"click\",\r\n\t\tfunction (e) {\r\n\t\t\tif (e.target.matches(\".js-calc\")) {\r\n\t\t\t\tvar sc = document.createElement(\"script\");\r\n\t\t\t\tsc.src =\r\n\t\t\t\t\t\"https://www.calcxml.com/scripts/loadCalc.js?calcTarget=\" +\r\n\t\t\t\t\te.target.getAttribute(\"data-calcid\") +\r\n\t\t\t\t\t\"&skn=736&embed=2&tabs=1&secure=1\";\r\n\t\t\t\tdocument.body.appendChild(sc);\r\n\r\n\t\t\t\tdocument.querySelectorAll(\".js-calc.active\").forEach(function (item) {\r\n\t\t\t\t\titem.classList.remove(\"active\");\r\n\t\t\t\t});\r\n\t\t\t\te.target.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t},\r\n\t\tfalse\r\n\t);\r\n\r\n\tdocument.querySelector(\".js-calc\").click();\r\n}\r\n\r\n//Horizontal filter scrolling\r\nif (document.querySelector(\".js-horizontalScroll\") != null) {\r\n\tfor (el of document.querySelectorAll(\".js-horizontalScroll\")) {\r\n\t\tif (!el.getAttribute(\"style\")) {\r\n\t\t\tel.setAttribute(\"style\", \"--beforeElementOpacity: 0; --afterElementOpacity: 1\");\r\n\t\t}\r\n\t\tel.addEventListener(\"scroll\", (e) => {\r\n\t\t\tif (e.target.scrollLeft == 0) {\r\n\t\t\t\te.target.setAttribute(\"style\", \"--beforeElementOpacity: 0; --afterElementOpacity: 1\");\r\n\t\t\t\t//document.documentElement.style.setProperty('--beforeElementOpacity', '1');\r\n\t\t\t} else if (e.target.scrollLeft + e.target.offsetWidth == e.target.scrollWidth) {\r\n\t\t\t\te.target.setAttribute(\"style\", \"--afterElementOpacity: 0; --beforeElementOpacity: 1;\");\r\n\t\t\t\t//document.documentElement.style.setProperty('--afterElementOpacity', '0');\r\n\t\t\t} else {\r\n\t\t\t\te.target.setAttribute(\"style\", \"--afterElementOpacity: 1; --beforeElementOpacity: 1;\");\r\n\t\t\t\t//document.documentElement.style.setProperty('--afterElementOpacity', '1');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\n// //Scrolling Nav logic\r\n\r\n// var lastScrollTop = 100;\r\n\r\n// window.addEventListener(\r\n// \t\"scroll\",\r\n// \tfunction () {\r\n// \t\t// or window.addEventListener(\"scroll\"....\r\n// \t\tif (!document.querySelector(\"hydrated\")) {\r\n// \t\t\tvar st = window.pageYOffset || document.documentElement.scrollTop; //\r\n// \t\t\tconst headerDiv = document.querySelector(\".headers\");\r\n// \t\t\tif (st > lastScrollTop) {\r\n// \t\t\t\theaderDiv.classList.add(\"scrolling\");\r\n// \t\t\t\theaderDiv.classList.remove(\"isSticky\");\r\n// \t\t\t} else if (st < lastScrollTop) {\r\n// \t\t\t\theaderDiv.classList.add(\"isSticky\");\r\n// \t\t\t} // else was horizontal scroll\r\n// \t\t\tlastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling\r\n// \t\t}\r\n// \t},\r\n// \tfalse\r\n// );\r\n\r\nvar linkHolder = document.querySelector(\".jump-nav.js-links\");\r\n\r\nif (linkHolder) {\r\n\tdocument.addEventListener(\r\n\t\t\"DOMContentLoaded\",\r\n\t\tfunction () {\r\n\t\t\tvar jumpLinks = document.querySelectorAll(\"[data-jumplink]\");\r\n\t\t\tvar linkHolder = document.querySelector(\".jump-nav.js-links\");\r\n\r\n\t\t\tjumpLinks.forEach(function (lnk) {\r\n\t\t\t\tvar btn = document.createElement(\"button\");\r\n\t\t\t\tbtn.innerText = lnk.getAttribute(\"data-jumplink\").replace(/_/g, \" \");\r\n\r\n\t\t\t\tbtn.classList.add(\"jump-lnk\");\r\n\t\t\t\tlinkHolder.append(btn);\r\n\t\t\t});\r\n\t\t},\r\n\t\tfalse\r\n\t);\r\n}\r\n\r\nvar charts = document.querySelectorAll(\".compare-block\");\r\n\r\ncharts.forEach(function (chart) {\r\n\tvar tab = chart.querySelector(\"table\");\r\n\r\n\tvar holder = chart.querySelector(\".compare-table\");\r\n\tvar ths = tab.querySelector(\"tr\").querySelectorAll(\"th\");\r\n\tif (ths.length > 1) {\r\n\t\tholder.setAttribute(\"data-col\", \"1\");\r\n\t\tvar controls = document.createElement(\"div\");\r\n\t\tcontrols.classList.add(\"table-controls\");\r\n\t\tcontrols.innerHTML =\r\n\t\t\t\"\" +\r\n\t\t\teq.call(ths, 1).innerHTML +\r\n\t\t\t\"\";\r\n\r\n\t\tholder.insertBefore(controls, holder.firstChild);\r\n\r\n\t\tif (ths.length == 2) {\r\n\t\t\tholder.querySelector('.table-controls').style.display = 'none';\r\n\t\t\tholder.querySelector('.pagination-dots').style.display = 'none';\r\n\t\t}\r\n\t}\r\n});\r\n\r\n//Compare Table CTA logic\r\n\r\nfunction mobileButtonDisplay(activeColumn) {\r\n\tconst compareTable = document.querySelector(\".compare-table\");\r\n\r\n\tif (compareTable) {\r\n\t\tconst buttonToMove = compareTable.querySelector(\r\n\t\t\t`.table > table > tbody > tr:last-of-type td:nth-child(${Number(activeColumn) + 1})`\r\n\t\t);\r\n\t\tif (buttonToMove.innerHTML.includes('')) {\r\n\t\t\tconst MBD = compareTable.querySelector(\".mobileButtonDisplay\");\r\n\t\t\tMBD.innerHTML = buttonToMove.innerHTML;\r\n\t\t} else {\r\n\t\t\tconst MBD = compareTable.querySelector(\".mobileButtonDisplay\");\r\n\t\t\tMBD.innerHTML = \"\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n\tmobileButtonDisplay(1);\r\n});\r\n\r\nconst lnkTop = document.querySelector(\".js-lnk-top\");\r\n\r\nif (lnkTop) {\r\n\tlnkTop.addEventListener(\"click\", () => {\r\n\t\twindow.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: 0,\r\n\t\t\tbehavior: \"smooth\",\r\n\t\t});\r\n\t});\r\n}\r\n\r\n//Comparison Table Pagination Dots Extravaganza\r\n// --Now in Smell-o-vision!\r\n\r\nfunction updateDots(base) {\r\n\tconst dots = base.parentNode.querySelectorAll(\".pagination-dots .dot\");\r\n\tdots.forEach((dot) => {\r\n\t\tif (dot.dataset.col == base.dataset.col) {\r\n\t\t\tdot.classList.add(\"active\");\r\n\t\t} else {\r\n\t\t\tdot.classList.remove(\"active\");\r\n\t\t}\r\n\t});\r\n}\r\n\r\nif (charts) {\r\n\tcharts.forEach((chart) => {\r\n\t\tconst paginationDots = chart.querySelector(\".pagination-dots\");\r\n\t\tif (paginationDots) {\r\n\r\n\t\t\tconst prevArrow = document.createElement('button');\r\n\t\t\tprevArrow.classList.add('js-table-prev');\r\n\t\t\tprevArrow.classList.add('grayed');\r\n\r\n\t\t\tpaginationDots.appendChild(prevArrow);\r\n\t\t\tconst numCols = chart.querySelector(\"tr\").children.length - 1;\r\n\r\n\t\t\tif (numCols > 1) {\r\n\t\t\t\tfor (let index = 0; index < numCols; index++) {\r\n\t\t\t\t\tconst dot = document.createElement(\"button\");\r\n\t\t\t\t\tdot.classList.add(\"dot\");\r\n\t\t\t\t\tdot.dataset.col = index + 1;\r\n\r\n\t\t\t\t\tpaginationDots.append(dot);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst nextArrow = document.createElement('button');\r\n\t\t\tnextArrow.classList.add('js-table-next');\r\n\r\n\t\t\tpaginationDots.appendChild(nextArrow);\r\n\r\n\t\t\tupdateDots(paginationDots.parentNode.parentNode.querySelector(\".compare-table\"));\r\n\t\t}\r\n\t});\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n\tmobileButtonDisplay(1);\r\n});\r\n\r\n//Location Search Logic\r\n\r\n//const LocationSearchForm = document.getElementById(\"find-branch-form\");\r\n//if (LocationSearchForm) {\r\n//\tconst searchResultsDiv = document.querySelector(\".search-results\");\r\n\r\n//\tLocationSearchForm.addEventListener(\"submit\", (e) => {\r\n//\t\te.preventDefault();\r\n//\t\tconst userInput =\r\n//\t\t\tLocationSearchForm.querySelector(\"#addressInput\").value;\r\n//\t\tlocalStorage.setItem(\"userInput\", userInput);\r\n//\t\tvSlideDown(searchResultsDiv);\r\n//\t});\r\n//}\r\n\r\nconst closeMobileNav = () => {\r\n\tif (window.innerWidth > 900) {\r\n\t\tif (document.body.classList.contains(\"mobile-nav-open\")) {\r\n\t\t\tcloseMenu();\r\n\t\t}\r\n\t}\r\n};\r\nwindow.addEventListener(\"resize\", closeMobileNav);\r\n\r\n\r\n//MLO Form logic - make the form contain the users email address when the button is clicked\r\n\r\nconst mloButton = document.querySelectorAll('.js-mlo-form-btn');\r\n\r\nmloButton.forEach(btn => {\r\n\tbtn.addEventListener('click', (el) => {\r\n\t\tel.preventDefault();\r\n\t\tconst email = btn.dataset.email;\r\n\t\tconst form = document.querySelector('.mlo-form');\r\n\r\n\t\tif (form && email) {\r\n\t\t\tform.querySelector('#field155009900').value = email;\r\n\t\t\tform.querySelector(\"#field155063665_1\").checked = true;\r\n\t\t}\r\n\t\tform.scrollIntoView();\r\n\t})\r\n})","//Feature Icon Block Logic\r\nconst iconBlockSplide = document.querySelectorAll(\".icon-block-splide\");\r\nif (iconBlockSplide) {\r\n\ticonBlockSplide.forEach(el => {\r\n\t\tnew Splide(el, {\r\n\t\t\tmediaQuery: \"min\",\r\n\t\t\ttype: \"loop\",\r\n\t\t\tperPage: 1,\r\n\t\t\tgap: \"5em\",\r\n\t\t\t/*\t\tpadding: {left: \"150px\"},*/\r\n\t\t\tautoWidth: false,\r\n\t\t\ttrimSpace: true,\r\n\t\t\tperMove: 1,\r\n\t\t\tfocus: \"center\",\r\n\t\t\tbreakpoints: {\r\n\t\t\t\t980: {\r\n\t\t\t\t\tdestroy: true,\r\n\t\t\t\t\tpadding: 0,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t}).mount();\r\n\t})\r\n\t\r\n}\r\n\r\n//Community Involvement - Build by Hand\r\n\r\n//placeholder json object\r\n\r\nconst photoCarousel = document.querySelectorAll(\".photo-carousel\");\r\n\r\nconst initPagination = (numArticles, container) => {\r\n\tconst dotContainer = container.querySelector(\".pagination-dots\");\r\n\tfor (let x = 0; x < numArticles; x++) {\r\n\t\tconst dotEl = document.createElement(\"button\");\r\n\t\tdotEl.classList.add(\"dot\");\r\n\t\tdotEl.setAttribute(\"alt\", \"pagination-dot\");\r\n\t\tdotEl.setAttribute(\"aria-label\", \"go to next slide\");\r\n\t\tdotEl.dataset.slide = x;\r\n\t\tdotContainer.appendChild(dotEl);\r\n\t}\r\n\tdotContainer.firstChild.classList.add(\"active\");\r\n\tcontainer.dataset.index = 0;\r\n};\r\nconst setButtons = (articles, container) => {\r\n\t// const activeButton = container.querySelector(\".pagination .dot.active\");\r\n\t// const prev = container.querySelector(\".pagination .prev-arrow\");\r\n\t// const next = container.querySelector(\".pagination .next-arrow\");\r\n\t//if (activeButton.dataset.slide == 0) {\r\n\t//\tprev.disabled = true;\r\n\t//\tprev.classList.add(\"faded\");\r\n\t//\tnext.disabled = false;\r\n\t//\tnext.classList.remove(\"faded\");\r\n\t//} else if (activeButton.dataset.slide == articles.length - 1) {\r\n\t//\tnext.disabled = true;\r\n\t//\tnext.classList.add(\"faded\");\r\n\t//\tprev.disabled = false;\r\n\t//\tprev.classList.remove(\"faded\");\r\n\t//} else {\r\n\t//\tprev.disabled = false;\r\n\t//\tnext.disabled = false;\r\n\t//\tprev.classList.remove(\"faded\");\r\n\t//\tnext.classList.remove(\"faded\");\r\n\t//}\r\n};\r\nconst setSlide = (index, container, slides) => {\r\n\tconst photo = container.querySelector(\".photo\");\r\n\tconst caption = container.querySelector(\".caption\");\r\n\tconst dots = container.querySelectorAll(\".pagination-dots .dot\");\r\n\r\n\tphoto.style.opacity = 0;\r\n\r\n\tsetTimeout(() => {\r\n\t\tphoto.style.backgroundImage = `url(${slides[index].imageURL})`;\r\n\t\tphoto.style.opacity = 1;\r\n\t}, 200);\r\n\r\n\tif (slides[index].title != \"\") {\r\n\t\tcaption.style.display = \"block\";\r\n\t\tcaption.innerHTML = slides[index].title;\r\n\t} else {\r\n\t\tcaption.style.display = \"none\";\r\n\t}\r\n\r\n\tdots.forEach((dot) => {\r\n\t\tif (dot.dataset.slide == index) {\r\n\t\t\tdot.classList.add(\"active\");\r\n\t\t} else {\r\n\t\t\tdot.classList.remove(\"active\");\r\n\t\t}\r\n\t});\r\n\r\n\tcontainer.dataset.index = index;\r\n};\r\n\r\nphotoCarousel.forEach(async (carousel) => {\r\n\tdocument.addEventListener(\"DOMContentLoaded\", async () => {\r\n\t\tlet images = await JSON.parse(carousel.dataset.images);\r\n\t\tlet titles = \"\";\r\n\t\tif (carousel.dataset.titles != \"\") {\r\n\t\t\ttitles = await JSON.parse(carousel.dataset.titles);\r\n\t\t}\r\n\r\n\t\tconst slides = [];\r\n\t\tfor (let x = 0; x < images.length; x++) {\r\n\t\t\tslides.push({\r\n\t\t\t\ttitle: (titles[x]) ? titles[x] : \"\",\r\n\t\t\t\timageURL: images[x],\r\n\t\t\t});\r\n\t\t}\r\n\t\tconsole.log(slides);\r\n\r\n\t\tinitPagination(slides.length, carousel);\r\n\t\tsetButtons(slides.length, carousel);\r\n\t\tsetSlide(0, carousel, slides);\r\n\r\n\t\tcarousel.querySelector(\".pagination .next-arrow\").addEventListener(\"click\", () => {\r\n\t\t\tlet currentSlide = Number(carousel.dataset.index) % slides.length;\r\n\t\t\tif (slides[currentSlide + 1]) {\r\n\t\t\t\tcurrentSlide++;\r\n\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t} else {\r\n\t\t\t\tcurrentSlide = 0;\r\n\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t}\r\n\t\t\tsetButtons(slides);\r\n\t\t});\r\n\t\tcarousel.querySelector(\".pagination .prev-arrow\").addEventListener(\"click\", () => {\r\n\t\t\tlet currentSlide = Number(carousel.dataset.index) % slides.length;\r\n\t\t\tif (slides[currentSlide - 1]) {\r\n\t\t\t\tcurrentSlide--;\r\n\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t} else {\r\n\t\t\t\tcurrentSlide = slides.length - 1;\r\n\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t}\r\n\t\t\tsetButtons(slides);\r\n\t\t});\r\n\t\tcarousel.querySelectorAll(\".pagination .dot\").forEach((dot) => {\r\n\t\t\tdot.addEventListener(\"click\", (e) => {\r\n\t\t\t\tconst index = Number(e.target.dataset.slide);\r\n\t\t\t\tconsole.log(index + 1);\r\n\t\t\t\tsetSlide(index, carousel, slides);\r\n\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n});\r\n\r\n//Card Carousel\r\n\r\nconst cardCarousels = document.querySelectorAll(\".card-carousel\");\r\n\r\nif (cardCarousels.length > 0) {\r\n\tcardCarousels.forEach(async (carousel) => {\r\n\t\tdocument.addEventListener(\"DOMContentLoaded\", async () => {\r\n\t\t\tlet cards = carousel.querySelectorAll(\".card\");\r\n\r\n\t\t\tconst slides = [];\r\n\t\t\tfor (let x = 0; x < cards.length; x++) {\r\n\t\t\t\tslides.push({\r\n\t\t\t\t\ttitle: cards[x].querySelector(\".info\").innerHTML,\r\n\t\t\t\t\timageURL: cards[x]\r\n\t\t\t\t\t\t.querySelector(\".image\")\r\n\t\t\t\t\t\t.style.backgroundImage.match(/url\\([\"']?([^\"']*)[\"']?\\)/)[1],\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconsole.log(slides);\r\n\r\n\t\t\tinitPagination(slides.length, carousel);\r\n\t\t\tsetButtons(slides.length, carousel);\r\n\t\t\tsetSlide(0, carousel, slides);\r\n\r\n\t\t\tcarousel.querySelector(\".pagination .next-arrow\").addEventListener(\"click\", () => {\r\n\t\t\t\tlet currentSlide = Number(carousel.dataset.index) % slides.length;\r\n\t\t\t\tif (slides[currentSlide + 1]) {\r\n\t\t\t\t\tcurrentSlide++;\r\n\t\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentSlide = 0;\r\n\t\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t\t}\r\n\t\t\t\tsetButtons(slides);\r\n\t\t\t});\r\n\t\t\tcarousel.querySelector(\".pagination .prev-arrow\").addEventListener(\"click\", () => {\r\n\t\t\t\tlet currentSlide = Number(carousel.dataset.index) % slides.length;\r\n\t\t\t\tif (slides[currentSlide - 1]) {\r\n\t\t\t\t\tcurrentSlide--;\r\n\t\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentSlide = slides.length - 1;\r\n\t\t\t\t\tsetSlide(currentSlide, carousel, slides);\r\n\t\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t\t}\r\n\t\t\t\tsetButtons(slides);\r\n\t\t\t});\r\n\t\t\tcarousel.querySelectorAll(\".pagination .dot\").forEach((dot) => {\r\n\t\t\t\tdot.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\tconst index = Number(e.target.dataset.slide);\r\n\t\t\t\t\tconsole.log(index + 1);\r\n\t\t\t\t\tsetSlide(index, carousel, slides);\r\n\t\t\t\t\tsetButtons(slides, carousel);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tif (slides.length < 2) {\r\n\t\t\t\tcarousel.querySelector('.pagination').style.display = \"none\";\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n","const locationsSearch = document.querySelector(\".locationsSearch\");\r\nvar searchType = \"branch\";\r\nvar ATMLocations;\r\n\r\nif (locationsSearch) {\r\n\tvar coords;\r\n\r\n\tvar script = document.createElement(\"script\");\r\n\tscript.type = \"text/javascript\";\r\n\tscript.src =\r\n\t\t\"https://maps.googleapis.com/maps/api/js?key=AIzaSyDRUMoCe883TGSZ2Vrllk3zRlus65ft_3s&libraries=geometry,places&callback=initialize\";\r\n\tdocument.body.appendChild(script);\r\n\r\n\tfunction initialize() {\r\n\t\t/* var myLatlng = new google.maps.LatLng(-34.397, 150.644);*/\r\n\t\tvar myOptions = {\r\n\t\t\tzoom: 12,\r\n\t\t\tmapTypeId: \"terrain\",\r\n\t\t};\r\n\t\tvar map = new google.maps.Map(document.getElementById(\"map_canvas\"), myOptions);\r\n\t\tconst searchButton = document.querySelector(\".js-location-search-button\");\r\n\t\tconst resultsPage = document.querySelector(\"#locationSearchResults\");\r\n\t\tconst searchBox = document.querySelector(\"#locationSearchInput\");\r\n\t\tconst input = document.querySelector(\".js-location-search\");\r\n\t\tconst sortButton = document.querySelectorAll(\".sortButton\");\r\n\t\tconst newSearch = document.querySelector(\".js-new-search\");\r\n\r\n\t\t//Branch\r\n\t\tsortButton.forEach((btn) => {\r\n\t\t\tbtn.addEventListener(\"click\", (e) => {\r\n\t\t\t\tsortButton.forEach((el) => {\r\n\t\t\t\t\tif (el.isEqualNode(e.target)) {\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t\tsearchType = el.dataset.id;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tel.classList.remove(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tfetchAndSortDistances(searchType);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tinput.addEventListener(\"click\", () => {\r\n\t\t\tif (input.value.toLowerCase() == \"address not found\") {\r\n\t\t\t\tinput.value = \"\";\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tnewSearch.addEventListener(\"click\", () => {\r\n\t\t\tinput.value = \"\";\r\n\t\t\tresultsPage.style.display = \"none\";\r\n\t\t\tsearchType = \"branch\";\r\n\t\t\tvSlideDown(searchBox);\r\n\t\t\tinput.focus();\r\n\t\t\tsortButton.forEach((el, index) => {\r\n\t\t\t\tif (index == 0) {\r\n\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.classList.remove(\"active\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tsearchButton.addEventListener(\"click\", (e) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tif (input.value == \"\") {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tloadBranchAddress(encodeLocationHTML(input.value));\r\n\r\n\t\t\t/* } */\r\n\t\t});\r\n\r\n\t\tfunction encodeLocationHTML(s) {\r\n\t\t\treturn s.replace(/&/g, \"&\").replace(/ {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tloc.getAttribute(\"data-latlon\") != null &&\r\n\t\t\t\t\t\tloc.getAttribute(\"data-latlon\").indexOf(\",\") != -1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tvar sp = loc.getAttribute(\"data-latlon\").split(\",\");\r\n\t\t\t\t\t\tlat = Number(sp[0].trim());\r\n\t\t\t\t\t\tlon = Number(sp[1].trim());\r\n\r\n\t\t\t\t\t\tvar gMarker = new google.maps.Marker({\r\n\t\t\t\t\t\t\tmap,\r\n\t\t\t\t\t\t\tposition: { lat: Number(lat), lng: Number(lon) },\r\n\t\t\t\t\t\t\ttitle: loc.children[0].innerText,\r\n\t\t\t\t\t\t\t// icon: \"\",\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tlocations.forEach((loc) => {\r\n\t\t\t\t\tconsole.log(loc.querySelector('attribute[key=\"Latitude\"]').innerHTML);\r\n\t\t\t\t\tconsole.log(loc.querySelector('attribute[key=\"Longitude\"]').innerHTML);\r\n\r\n\t\t\t\t\tnew google.maps.Marker({\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\tlat: Number(loc.querySelector('attribute[key=\"Latitude\"]').innerHTML),\r\n\t\t\t\t\t\t\tlng: Number(loc.querySelector('attribute[key=\"Longitude\"]').innerHTML),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmap,\r\n\t\t\t\t\t\ttitle: loc.querySelector('attribute[key=\"LocationName\"]').innerHTML,\r\n\t\t\t\t\t\ticon: \"/Content/Images/Pin.svg\",\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction fetchAndSortDistances(type = \"branch\") {\r\n\t\t\tlet locations = [];\r\n\t\t\tswitch (type) {\r\n\t\t\t\tcase \"atm\":\r\n\t\t\t\t\tgetATMLocations();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"loan\":\r\n\t\t\t\t\tlocations = document.querySelectorAll(\".js-location.loan-center[data-distance]\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tlocations = document.querySelectorAll(\".js-location.branch[data-distance]\");\r\n\t\t\t}\r\n\r\n\t\t\tconst branchArray = [...locations];\r\n\r\n\t\t\tbranchArray.sort(function (a, b) {\r\n\t\t\t\treturn a.dataset.distance - b.dataset.distance;\r\n\t\t\t});\r\n\r\n\t\t\tcreateMarkers(branchArray);\r\n\t\t\tconst resultsDiv = document.querySelector(\".resultsContainer .locations\");\r\n\t\t\tresultsDiv.innerHTML = \"\";\r\n\r\n\t\t\tif (branchArray.length > 0) {\r\n\t\t\t\tbranchArray.forEach((branch, index) => {\r\n\t\t\t\t\tlet formattedDistance = Math.floor(Number(branch.dataset.distance) * 100) / 100;\r\n\t\t\t\t\tlet fAddress = branch.querySelector(\".address\").innerHTML.replace(\"/
/g\", \", \");\r\n\r\n\t\t\t\t\tlet branchResult = document.createElement(\"div\");\r\n\t\t\t\t\tbranchResult.classList.add(\"location\");\r\n\t\t\t\t\tbranchResult.innerHTML = \"\";\r\n\r\n\t\t\t\t\tbranchResult.innerHTML += `\r\n
\r\n
\r\n
\r\n

${branch.children[0].innerText}

\r\n

${formattedDistance} miles away

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

${fAddress}

\r\n
\r\n
\r\n\t\t\t\t\t\tGet Details and Hours\r\n\t\t\t\t\t
`;\r\n\r\n\t\t\t\t\tresultsDiv.appendChild(branchResult);\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\tresultsDiv.innerHTML = '

No Results Found

';\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tasync function getATMLocations() {\r\n\t\t\tvar xhr = new XMLHttpRequest();\r\n\t\t\txhr.open(\"POST\", \"https://mobileapi.locatorsearch.com/LocatorSearchAPI.asmx/FindLocations\", true);\r\n\t\t\txhr.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\r\n\t\t\txhr.onreadystatechange = function () {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 200) {\r\n\t\t\t\t\tvar xmlDocument = xhr.responseXML;\r\n\r\n\t\t\t\t\tconst locations = xmlDocument.querySelectorAll(\"location\");\r\n\t\t\t\t\tATMLocations = locations;\r\n\r\n\t\t\t\t\tcreateMarkers(locations);\r\n\t\t\t\t\tconst resultsDiv = document.querySelector(\".resultsContainer .locations\");\r\n\t\t\t\t\tresultsDiv.innerHTML = \"\";\r\n\r\n\t\t\t\t\tconsole.log(locations[0].querySelector('attribute[key=\"AddressLine\"]'));\r\n\r\n\t\t\t\t\tlocations.forEach((branch, index) => {\r\n\t\t\t\t\t\t/* let formattedDistance = Math.floor(Number(branch.dataset.distance) * 100) / 100;*/\r\n\t\t\t\t\t\tlet fAddress = `${branch.querySelector('attribute[key=\"AddressLine\"]').innerHTML}, ${\r\n\t\t\t\t\t\t\tbranch.querySelector('attribute[key=\"CityName\"]').innerHTML\r\n\t\t\t\t\t\t}, ${branch.querySelector('attribute[key=\"StateCode\"]').innerHTML} ${\r\n\t\t\t\t\t\t\tbranch.querySelector('attribute[key=\"PostalCode\"]').innerHTML\r\n\t\t\t\t\t\t}`;\r\n\r\n\t\t\t\t\t\tlet branchResult = document.createElement(\"div\");\r\n\t\t\t\t\t\tbranchResult.classList.add(\"location\");\r\n\t\t\t\t\t\tbranchResult.innerHTML = \"\";\r\n\r\n\t\t\t\t\t\tbranchResult.innerHTML += `\r\n
\r\n
\r\n
\r\n

${\r\n\t\t\t\t\t\t\t\tbranch.querySelector('attribute[key=\"LocationName\"]').innerHTML\r\n\t\t\t\t\t\t\t}

\r\n

${\r\n\t\t\t\t\t\t\t\tbranch.querySelector('attribute[key=\"Distance\"]').innerHTML\r\n\t\t\t\t\t\t\t} miles away

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

${fAddress}

\r\n
\r\n
\r\n\t\t\t\t\t\t Get Directions\r\n\t\t\t\t\t
`;\r\n\r\n\t\t\t\t\t\tresultsDiv.appendChild(branchResult);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\txhr.send(\r\n\t\t\t\t`UserName=80E99DFA&Password=80E99DFA-231A-485C-91D0-8341BCDA8ED3&AddressLine=&City=&State=&PostalCode=&Country=&Latitude=${coords.lat()}&Longitude=${coords.lng()}&Type=ATMSF&Offset=25`\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction distance(lat1, lon1, lat2, lon2) {\r\n\tif (lat1 == lat2 && lon1 == lon2) {\r\n\t\treturn 0;\r\n\t} else {\r\n\t\tvar radlat1 = (Math.PI * lat1) / 180;\r\n\t\tvar radlat2 = (Math.PI * lat2) / 180;\r\n\t\tvar theta = lon1 - lon2;\r\n\t\tvar radtheta = (Math.PI * theta) / 180;\r\n\t\tvar dist =\r\n\t\t\tMath.sin(radlat1) * Math.sin(radlat2) +\r\n\t\t\tMath.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\r\n\t\tif (dist > 1) {\r\n\t\t\tdist = 1;\r\n\t\t}\r\n\t\tdist = Math.acos(dist);\r\n\t\tdist = (dist * 180) / Math.PI;\r\n\t\tdist = dist * 60 * 1.1515;\r\n\t\treturn dist;\r\n\t}\r\n}\r\n","//Mortgage Calculator\r\nconst mortgageCalculator = document.querySelector(\".mortgage-calculator\");\r\nconst autoCalculator = document.querySelector(\".autoCalculator\");\r\nconst earlyPayoff = document.querySelector(\".early-payoff\");\r\nconst refinanceCalculator = document.querySelector(\".refinance-calculator\");\r\n\r\nfunction inputLogic(e) {\r\n\tconst val = Number(e.target.value.replace(/[^0-9.]/g, \"\"));\r\n\te.target.nextElementSibling.value = val;\r\n\tif (val >= e.target.nextElementSibling.min && val < e.target.nextElementSibling.max) {\r\n\t\te.target.value = Number(val).toLocaleString();\r\n\t\te.target.classList.remove(\"invalid\");\r\n\t\tconst event = new Event(\"change\");\r\n\t\te.target.nextElementSibling.dispatchEvent(event);\r\n\t} else if (val == \"\") {\r\n\t\te.target.value = 0;\r\n\t\te.target.nextElementSibling.value = 0;\r\n\t} else {\r\n\t\te.target.classList.add(\"invalid\");\r\n\t}\r\n}\r\n\r\nif (mortgageCalculator) {\r\n\tmortgageCalc();\r\n\tbuildTabs(mortgageCalculator.parentNode.parentNode);\r\n}\r\n\r\nif (autoCalculator) {\r\n\tautoCalc();\r\n\tbuildTabs(autoCalculator.parentNode.parentNode);\r\n}\r\n\r\nif (earlyPayoff) {\r\n\tearlyPayoffCalc();\r\n}\r\n\r\nif (refinanceCalculator) {\r\n\trefiCalc();\r\n}\r\n\r\nfunction buildTabs(calculator) {\r\n\tconst tabs = calculator.querySelectorAll(\".tabName\");\r\n\tconst calcContainer = calculator.querySelectorAll(\"div[data-calcname]\");\r\n\r\n\tif (tabs.length > 0 && calcContainer.length > 0) {\r\n\t\ttabs[0].classList.add(\"active\");\r\n\t\tcalcContainer[0].classList.add(\"active\");\r\n\t}\r\n\r\n\ttabs.forEach((tab) => {\r\n\t\ttab.addEventListener(\"click\", (e) => {\r\n\t\t\ttabs.forEach((el) => {\r\n\t\t\t\tel.classList.remove(\"active\");\r\n\t\t\t});\r\n\t\t\te.target.classList.add(\"active\");\r\n\t\t\tcalcContainer.forEach((el) => {\r\n\t\t\t\tel.classList.remove(\"active\");\r\n\t\t\t\tif (el.dataset.calcname == e.target.dataset.calcname) {\r\n\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n}\r\n\r\n//Mortgage Calculator Logic\r\nfunction mortgageCalc() {\r\n\tlet homePriceInput = mortgageCalculator.querySelector(\"#MChome-price\");\r\n\tlet downPaymentInput = mortgageCalculator.querySelector(\"#MCdown-payment\");\r\n\tlet interestRateInput = mortgageCalculator.querySelector(\"#MCinterest-rate\");\r\n\tlet loanTermInput = mortgageCalculator.querySelector(\"#MCloan-term\");\r\n\tlet calculateBtn = mortgageCalculator.querySelector(\".js-calculate\");\r\n\tlet refreshBtn = mortgageCalculator.querySelector(\".js-refresh\");\r\n\tlet calcResult = mortgageCalculator.querySelector(\".calcResult\");\r\n\tlet termResult = mortgageCalculator.querySelector(\".termResult\");\r\n\tlet interestRateText = mortgageCalculator.querySelector(\"#interest-rate-input\");\r\n\t/*\tlet pIResult = mortgageCalculator.querySelector(\".principal-interest-result\");*/\r\n\r\n\tlet homePrice, downPayment, interestRate, loanTerm;\r\n\r\n\tconst rateFormat = new Intl.NumberFormat(\"en-US\", {\r\n\t\tminimumFractionDigits: 3,\r\n\t\tmaximumFractionDigits: 3,\r\n\t});\r\n\r\n\r\n\thomePriceInput.addEventListener(\"keyup\", (e) => {\r\n\t\tvar temp = Number(homePriceInput.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t\thomePriceInput.value = temp;\r\n\t});\r\n\r\n\thomePriceInput.addEventListener(\"change\", (e) => {\r\n\t\thomePrice = Number(e.target.value.replace(/[^0-9]/g, \"\"));\r\n\t\tif (downPaymentInput.value = \"\") {\r\n\t\t\tdownPayment = Math.round(homePrice * 0.2);\r\n\t\t\tdownPaymentInput.value = downPayment.toLocaleString();\r\n\t\t}\r\n\t});\r\n\r\n\tdownPaymentInput.addEventListener('keyup', () => {\r\n\t\tvar temp = Number(downPaymentInput.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t\tdownPaymentInput.value = temp;\r\n\t})\r\n\thomePriceInput.addEventListener(\"change\", (e) => {\r\n\t\thomePrice = Number(e.target.value.replace(/[^0-9]/g, \"\"));\r\n\t\tdownPayment = Math.round(homePrice * 0.2);\r\n\t\tdownPaymentInput.value = downPayment.toLocaleString();\r\n\t});\r\n\r\n\tdownPaymentInput.addEventListener(\"change\", (e) => {\r\n\t\tdownpayment = Number(e.target.value.replace(/[^0-9]/g, \"\"));\r\n\t});\r\n\r\n\tinterestRateInput.addEventListener(\"change\", (e) => {\r\n\t\tif (e.target.value < 0 || e.target.value > 25) {\r\n\t\t\te.target.value = \"\";\r\n\t\t\te.target.placeholder = \"Please enter a number between 0 and 25\";\r\n\t\t}\r\n\t});\r\n\r\n\tinterestRateText.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\tinterestRateInput.addEventListener(\"input\", (e) => {\r\n\t\tinterestRateText.value = rateFormat.format(e.target.value);\r\n\t});\r\n\r\n\tcalculateBtn.addEventListener(\"click\", () => {\r\n\t\tdownPayment = Number(downPaymentInput.value.replace(/[^0-9]/g, \"\"));\r\n\t\tif (homePrice != \"\" && homePrice != undefined && downPayment != \"\" && downPayment != undefined && interestRateInput.value != \"\") {\r\n\t\t\tlet principal = homePrice - downPayment;\r\n\t\t\tlet rate = (Number(interestRateInput.value) / 100.0 / 12.0);\r\n\t\t\tlet term = loanTermInput.value * 12.0;\r\n\r\n\t\t\tlet payment = (principal * rate * Math.pow(1.0 + rate, term)) / (Math.pow(1 + rate, term) - 1.0);\r\n\r\n\t\t\tcalcResult.innerText = \"$\" + (Math.round(payment * 100) / 100).toLocaleString();\r\n\t\t\t/*\t\t\tpIResult.innerText = \"$\" + (Math.round(payment * 100) / 100).toLocaleString();*/\r\n\t\t\ttermResult.innerText = loanTermInput.value + \" Year Loan\";\r\n\t\t\tmortgageCalculator.querySelector(\".results\").classList.add(\"show-results\");\r\n\t\t} else {\r\n\t\t\tmortgageCalculator.querySelector(\".results\").classList.add(\"show-results\");\r\n\t\t\tcalcResult.innerText = \"Insufficient Data\";\r\n\t\t}\r\n\t});\r\n\trefreshBtn.addEventListener(\"click\", () => {\r\n\t\thomePriceInput.value = \"\";\r\n\t\tdownPaymentInput.value = \"\";\r\n\t\tinterestRateInput.value = \"\";\r\n\t\tloanTermInput.value = \"1\";\r\n\t\tmortgageCalculator.querySelector(\".results\").classList.remove(\"show-results\");\r\n\t});\r\n}\r\n\r\n//Early Payoff Calculator\r\n\r\nfunction earlyPayoffCalc() {\r\n\tconst mortgageAmount = earlyPayoff.querySelector(\"#EPmortgage-amt\");\r\n\tconst stillOwe = earlyPayoff.querySelector(\"#EPstill-owe\");\r\n\tconst loanTerm = earlyPayoff.querySelector(\"#EPloan-term\");\r\n\tconst refreshBtn = earlyPayoff.querySelector(\".js-refresh\");\r\n\tlet interestRateInput = earlyPayoff.querySelector(\"#EPinterest-rate\");\r\n\tlet interestRateText = earlyPayoff.querySelector(\"#EPinterest-rate-input\");\r\n\r\n\tconst rateFormat = new Intl.NumberFormat(\"en-US\", {\r\n\t\tminimumFractionDigits: 3,\r\n\t\tmaximumFractionDigits: 3,\r\n\t});\r\n\r\n\tmortgageAmount.addEventListener(\"keyup\", (e) => {\r\n\t\tvar temp = Number(mortgageAmount.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t\tmortgageAmount.value = temp;\r\n\t});\r\n\r\n\tstillOwe.addEventListener(\"keyup\", (e) => {\r\n\t\tvar temp = Number(stillOwe.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t\tstillOwe.value = temp;\r\n\t});\r\n\r\n\tinterestRateText.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\tinterestRateInput.addEventListener(\"input\", (e) => {\r\n\t\tinterestRateText.value = rateFormat.format(e.target.value);\r\n\t});\r\n\r\n\tearlyPayoff.querySelector(\".js-calculate\").addEventListener(\"click\", () => {\r\n\t\tvar mamount = mortgageAmount.value.replace(/[^0-9]/g, \"\");\r\n\t\tvar sowe = stillOwe.value.replace(/[^0-9]/g, \"\");\r\n\t\tvar ltyears = loanTerm.value;\r\n\t\tvar ltmonths = ltyears * 12;\r\n\t\tvar epirate = earlyPayoff.querySelector(\"#EPinterest-rate\").value;\r\n\t\tvar epiratemonth = parseFloat(epirate) / 100 / 12;\r\n\t\tvar epyears = document.getElementById(\"EPyears-left\").value;\r\n\t\tvar epypayoff = document.getElementById(\"EPyears-payoff\").value;\r\n\t\tvar termleftmonths = epypayoff * 12;\r\n\t\tvar i = Math.pow(1 + epiratemonth, termleftmonths);\r\n\t\tvar j = Math.pow(1 + epiratemonth, ltmonths);\r\n\t\tvar newmonthly = (Number(sowe) * Number(epiratemonth)) / (i - 1) + Number(sowe) * Number(epiratemonth);\r\n\t\tvar originalmonthly = (Number(mamount) * Number(epiratemonth)) / (j - 1) + Number(mamount) * Number(epiratemonth);\r\n\t\tvar principal = newmonthly - originalmonthly;\r\n\r\n\t\tnewmonthly = parseFloat(Math.round(newmonthly * 100) / 100).toLocaleString(\"en-US\", {\r\n\t\t\tminimumFractionDigits: 2,\r\n\t\t\tmaximumFractionDigits: 2,\r\n\t\t});\r\n\t\toriginalmonthly = parseFloat(Math.round(originalmonthly * 100) / 100).toLocaleString(\"en-US\", {\r\n\t\t\tminimumFractionDigits: 2,\r\n\t\t\tmaximumFractionDigits: 2,\r\n\t\t});\r\n\t\tprincipal = parseFloat(Math.round(principal * 100) / 100).toLocaleString(\"en-US\", {\r\n\t\t\tminimumFractionDigits: 2,\r\n\t\t\tmaximumFractionDigits: 2,\r\n\t\t});\r\n\r\n\t\tearlyPayoff.querySelector(\".new-principal-interest-result\").innerText = \"$ \" + newmonthly;\r\n\t\tearlyPayoff.querySelector(\".principal-interest-result\").innerText = \"$ \" + originalmonthly;\r\n\t\tearlyPayoff.querySelector(\".principal-result\").innerText = \"$ \" + principal;\r\n\t\tearlyPayoff.querySelector(\".results\").classList.add(\"show-results\");\r\n\t});\r\n\trefreshBtn.addEventListener(\"click\", () => {\r\n\t\tmortgageAmount.value = \"\";\r\n\t\tstillOwe.value = \"\";\r\n\t\tloanTerm.value = \"\";\r\n\t\tearlyPayoff.querySelector(\"#EPinterest-rate\").value = \"\";\r\n\t\tearlyPayoff.querySelector(\"#EPyears-left\").value = \"\";\r\n\t\tearlyPayoff.querySelector(\"#EPyears-payoff\").value = \"\";\r\n\t\tearlyPayoff.querySelector(\".results\").classList.remove(\"show-results\");\r\n\t});\r\n}\r\n\r\n//Refinance Calculator\r\n\r\nfunction refiCalc() {\r\n\tconst newLoanAmount = refinanceCalculator.querySelector(\".RNew-loan-amount\");\r\n\tconst currentLoan = refinanceCalculator.querySelector(\"#RCurrent-balance\");\r\n\tconst homeValue = refinanceCalculator.querySelector(\"#RHome-value\");\r\n\tconst currentPayment = refinanceCalculator.querySelector(\"#Rmonthly-payment\");\r\n\tconst propTaxes = refinanceCalculator.querySelector(\"#RProperty-taxes\");\r\n/*\tconst interestRate = refinanceCalculator.querySelector(\"#RInterest-rate\");*/\r\n\tconst loanTerm = refinanceCalculator.querySelector(\"#RLoan-term\");\r\n\tconst calcResult = refinanceCalculator.querySelector(\".calcResult\");\r\n\tconst newPaymentResult = refinanceCalculator.querySelector(\".newPaymentResult\");\r\n\tconst refreshBtn = refinanceCalculator.querySelector(\".js-refresh\");\r\n\r\n\tlet interestRateInput = refinanceCalculator.querySelector(\"#Rinterest-rate\");\r\n\tlet interestRateText = refinanceCalculator.querySelector(\"#Rinterest-rate-input\");\r\n\r\n\tconst rateFormat = new Intl.NumberFormat(\"en-US\", {\r\n\t\tminimumFractionDigits: 3,\r\n\t\tmaximumFractionDigits: 3,\r\n\t});\r\n\r\n\tinterestRateText.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\tinterestRateInput.addEventListener(\"input\", (e) => {\r\n\t\tinterestRateText.value = rateFormat.format(e.target.value);\r\n\t});\r\n\r\n\thomeValue.addEventListener(\"keyup\", (e) => {\r\n\t\te.target.value = Number(e.target.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t});\r\n\r\n\tcurrentLoan.addEventListener(\"keyup\", (e) => {\r\n\t\tnewLoanAmount.innerText = \"$ \" + Number(currentLoan.value.replace(/,/g, \"\")).toLocaleString();\r\n\t\te.target.value = Number(e.target.value.replace(/[^0-9]/g, \"\")).toLocaleString();\r\n\t});\r\n\r\n\trefinanceCalculator.querySelector(\".js-calculate\").addEventListener(\"click\", (e) => {\r\n\t\tif (newLoanAmount.innerText != \"\" && loanTerm != \"\" && interestRateInput.value != \"\") {\r\n\t\t\tlet principal = parseFloat(newLoanAmount.innerText.replace(/[^0-9]/g, \"\"));\r\n\t\t\tlet rate = Number(interestRateInput.value / 100 / 12);\r\n\t\t\tlet term = loanTerm.value * 12;\r\n\r\n\t\t\tlet payment = (principal * rate * Math.pow(1 + rate, term)) / (Math.pow(1 + rate, term) - 1);\r\n\r\n\t\t\tcalcResult.innerText = parseFloat(currentPayment.value, {\r\n\t\t\t\tminimumFractionDigits: 2,\r\n\t\t\t\tmaximumFractionDigits: 2,\r\n\t\t\t});\r\n\r\n\t\t\tnewPaymentResult.innerText = (\r\n\t\t\t\tMath.round((payment + Number(propTaxes.value / 12)) * 100) / 100\r\n\t\t\t).toLocaleString();\r\n\r\n\t\t\trefinanceCalculator.querySelector(\".int-rate\").innerText = interestRateInput.value;\r\n\t\t\trefinanceCalculator.querySelector(\".ln-trm\").innerText = loanTerm.value;\r\n\r\n\t\t\tconst savingsAmt =\r\n\t\t\t\tparseFloat(calcResult.innerText.replace(/[^0-9.]/g, \"\")) -\r\n\t\t\t\tparseFloat(newPaymentResult.innerText.replace(/[^0-9.]/g, \"\"));\r\n\t\t\tif (savingsAmt > 0) {\r\n\t\t\t\trefinanceCalculator.querySelector(\".est-payment-savings\").innerText =\r\n\t\t\t\t\t\"$ \" + Math.round((savingsAmt * 100) / 100);\r\n\t\t\t} else {\r\n\t\t\t\trefinanceCalculator.querySelector(\".est-payment-savings\").parentElement.style.display =\r\n\t\t\t\t\t\"none\";\r\n\t\t\t}\r\n\t\t}\r\n\t\trefinanceCalculator.querySelector(\".results\").classList.add(\"show-results\");\r\n\t});\r\n\trefreshBtn.addEventListener(\"click\", () => {\r\n\t\trefinanceCalculator.querySelector(\".results\").classList.remove(\"show-results\");\r\n\t\trefinanceCalculator.querySelectorAll(\"input, select\").forEach((el) => {\r\n\t\t\tel.value = \"\";\r\n\t\t});\r\n\t});\r\n}\r\n\r\nfunction autoCalc() {\r\n\t//Auto Loan Calculator\r\n\t//Variables\r\n\tconst amountInput = autoCalculator.querySelector(\"#loan-amount-input\");\r\n\tconst amountSlider = autoCalculator.querySelector(\"#loan-amount-slider\");\r\n\tconst termInput = autoCalculator.querySelector(\"#loan-term-input\");\r\n\tconst termSlider = autoCalculator.querySelector(\"#loan-term-slider\");\r\n\tconst rateInput = autoCalculator.querySelector(\"#loan-rate-input\");\r\n\tconst rateSlider = autoCalculator.querySelector(\"#loan-rate-slider\");\r\n\tconst paymentInput = autoCalculator.querySelector(\"#loan-payment-input\");\r\n\tconst paymentSlider = autoCalculator.querySelector(\"#loan-payment-slider\");\r\n\tconst additionalInput = autoCalculator.querySelector(\"#additional-payment-input\");\r\n\tconst additionalSlider = autoCalculator.querySelector(\"#additional-payment-slider\");\r\n\tconst refreshBtn = autoCalculator.querySelector(\".js-refresh\");\r\n\tconst resultText = autoCalculator.querySelectorAll(\".resultText\");\r\n\r\n\tconst allSliders = autoCalculator.querySelectorAll('input[type=\"range\"]');\r\n\r\n\tconst variableChooser = autoCalculator.querySelector(\"#variable-select\");\r\n\r\n\tconst rateFormat = new Intl.NumberFormat(\"en-US\", {\r\n\t\tminimumFractionDigits: 3,\r\n\t\tmaximumFractionDigits: 3,\r\n\t});\r\n\tconst numFormat = new Intl.NumberFormat(\"en-US\", {\r\n\t\tminimumFractionDigits: 2,\r\n\t\tmaximumFractionDigits: 2,\r\n\t\tcurrency: \"USD\",\r\n\t\tstyle: \"currency\",\r\n\t});\r\n\r\n\trefreshBtn.addEventListener(\"click\", () => {\r\n\t\tamountSlider.value = \"20000\";\r\n\t\ttermSlider.value = \"4\";\r\n\t\trateSlider.value = \"4\";\r\n\t\tpaymentSlider.value = \"704\";\r\n\t\tadditionalSlider.value = \"0\";\r\n\t\tresultText.style.display = \"none\";\r\n\t\tallSliders.forEach((el) => {\r\n\t\t\tel.dispatchEvent(new Event(\"input\"));\r\n\t\t});\r\n\t\tcalculateResult();\r\n\t});\r\n\r\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\r\n\t\tcalculateResult();\r\n\t});\r\n\r\n\t//Event Listeners\r\n\tamountInput.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\tamountSlider.addEventListener(\"input\", (e) => {\r\n\t\tamountInput.value = \"$ \" + Number(e.target.value).toLocaleString();\r\n\t\tamountInput.classList.remove(\"invalid\");\r\n\t});\r\n\r\n\ttermInput.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\ttermSlider.addEventListener(\"input\", (e) => {\r\n\t\ttermInput.value = e.target.value;\r\n\t});\r\n\r\n\trateInput.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t});\r\n\trateSlider.addEventListener(\"input\", (e) => {\r\n\t\trateInput.value = rateFormat.format(e.target.value);\r\n\t});\r\n\tpaymentInput.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t\te.target.value = numFormat.format(Number(e.target.value.replace(/[^0-9.]/g, \"\")));\r\n\t});\r\n\tpaymentSlider.addEventListener(\"input\", (e) => {\r\n\t\tpaymentInput.value = numFormat.format(e.target.value);\r\n\t});\r\n\tadditionalInput.addEventListener(\"change\", (e) => {\r\n\t\tinputLogic(e);\r\n\t\te.target.value = numFormat.format(Number(e.target.value.replace(/[^0-9.]/g, \"\")));\r\n\t});\r\n\tadditionalSlider.addEventListener(\"input\", (e) => {\r\n\t\tadditionalInput.value = numFormat.format(e.target.value);\r\n\t});\r\n\r\n\tallSliders.forEach((el) => {\r\n\t\tel.addEventListener(\"change\", () => {\r\n\t\t\tcalculateResult();\r\n\t\t});\r\n\t});\r\n\r\n\t//functions\r\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\r\n\t\tpaymentInput.parentElement.style.display = \"none\";\r\n\t});\r\n\r\n\t//dropdown logic\r\n\tvariableChooser.addEventListener(\"change\", (e) => {\r\n\t\tif (e.target.value == \"monthly-payment\") {\r\n\t\t\tamountInput.parentElement.style.display = \"grid\";\r\n\t\t\ttermInput.parentElement.style.display = \"grid\";\r\n\t\t\trateInput.parentElement.style.display = \"grid\";\r\n\t\t\tpaymentInput.parentElement.style.display = \"none\";\r\n\t\t\tadditionalInput.parentElement.style.display = \"none\";\r\n\t\t} else if (e.target.value == \"loan-amount\") {\r\n\t\t\tamountInput.parentElement.style.display = \"none\";\r\n\t\t\ttermInput.parentElement.style.display = \"grid\";\r\n\t\t\trateInput.parentElement.style.display = \"grid\";\r\n\t\t\tpaymentInput.parentElement.style.display = \"grid\";\r\n\t\t\tadditionalInput.parentElement.style.display = \"none\";\r\n\t\t} else if (e.target.value == \"interest-rate\") {\r\n\t\t\tamountInput.parentElement.style.display = \"grid\";\r\n\t\t\ttermInput.parentElement.style.display = \"grid\";\r\n\t\t\trateInput.parentElement.style.display = \"none\";\r\n\t\t\tpaymentInput.parentElement.style.display = \"grid\";\r\n\t\t\tadditionalInput.parentElement.style.display = \"none\";\r\n\t\t} else if (e.target.value == \"loan-term\") {\r\n\t\t\tamountInput.parentElement.style.display = \"grid\";\r\n\t\t\ttermInput.parentElement.style.display = \"none\";\r\n\t\t\trateInput.parentElement.style.display = \"grid\";\r\n\t\t\tpaymentInput.parentElement.style.display = \"grid\";\r\n\t\t\tadditionalInput.parentElement.style.display = \"grid\";\r\n\t\t}\r\n\t\t// resultText.style.display = \"none\";\r\n\t\tcalculateResult();\r\n\t});\r\n\r\n\tfunction calculateResult() {\r\n\t\tlet p = Number(amountSlider.value);\r\n\t\tlet i = Number(rateSlider.value / 1200);\r\n\t\tlet t = Number(termSlider.value * 12);\r\n\t\tlet mp = Number(paymentSlider.value);\r\n\t\tlet extra = Number(additionalSlider.value);\r\n\t\tlet totalInt = 0;\r\n\t\tconst resultsDiv = document.querySelector(\".results\");\r\n\t\tresultsDiv.querySelectorAll(\"div\").forEach((el) => {\r\n\t\t\tel.style.display = \"none\";\r\n\t\t});\r\n\t\tlet labelArray = [];\r\n\t\tlet paymentArray = [];\r\n\t\tlet extraArray = [];\r\n\t\tlet interestArray = [];\r\n\r\n\t\tif (variableChooser.value == \"monthly-payment\") {\r\n\t\t\tconst payment = ((i + i / (Math.pow(1 + i, t) - 1)) * p).toFixed(2);\r\n\t\t\ttotalInt = 0;\r\n\t\t\tlet count = 0;\r\n\r\n\t\t\tclearTable();\r\n\r\n\t\t\twhile (p > 0) {\r\n\t\t\t\tconst interest = p * i;\r\n\t\t\t\tp += interest;\r\n\t\t\t\tp -= payment;\r\n\t\t\t\ttotalInt += interest;\r\n\r\n\t\t\t\tlabelArray.push(\"Payment: \" + count);\r\n\t\t\t\tinterestArray.push(Number(interest).toFixed(2));\r\n\t\t\t\tpaymentArray.push(Number(payment).toFixed(2));\r\n\t\t\t\textraArray.push(Number(extra).toFixed(2));\r\n\r\n\t\t\t\tcount++;\r\n\t\t\t\toutputTable(count, interest, payment, p);\r\n\t\t\t}\r\n\r\n\t\t\tbuildChart(labelArray, interestArray, paymentArray, extraArray);\r\n\t\t\tresultText.forEach((el) => {\r\n\t\t\t\tel.style.display = \"block\";\r\n\t\t\t\tel.innerHTML = `The monthly payment amount is ${numFormat.format(\r\n\t\t\t\t\tpayment\r\n\t\t\t\t)} and the total interest you will pay is ${numFormat.format(totalInt)}`;\r\n\t\t\t});\r\n\t\t} else if (variableChooser.value == \"loan-term\") {\r\n\t\t\tlet payment = mp;\r\n\t\t\ttotalInt = 0;\r\n\t\t\tlet totalPayments = 0;\r\n\t\t\tlet count = 0;\r\n\r\n\t\t\tclearTable();\r\n\t\t\twhile (p > 0) {\r\n\t\t\t\tconst interest = p * i;\r\n\t\t\t\tp += interest;\r\n\t\t\t\tp -= payment;\r\n\t\t\t\tp -= extra;\r\n\t\t\t\ttotalInt += interest;\r\n\t\t\t\ttotalPayments++;\r\n\t\t\t\tcount++;\r\n\t\t\t\tlabelArray.push(\"Payment: \" + count);\r\n\t\t\t\tinterestArray.push(Number(interest).toFixed(2));\r\n\t\t\t\tpaymentArray.push(Number(payment).toFixed(2));\r\n\t\t\t\textraArray.push((Number(payment) + Number(extra)).toFixed(2));\r\n\r\n\t\t\t\toutputTable(count, interest, payment, p, extra);\r\n\t\t\t}\r\n\r\n\t\t\tbuildChart(labelArray, interestArray, paymentArray, extraArray);\r\n\t\t\tresultText.forEach((el) => {\r\n\t\t\t\tel.style.display = \"block\";\r\n\t\t\t\tel.innerHTML = `Your Loan will be fully paid off in ${Number(\r\n\t\t\t\t\ttotalPayments / 12\r\n\t\t\t\t).toFixed(2)} years. The total monthly payment amount is ${numFormat.format(\r\n\t\t\t\t\tpayment + extra\r\n\t\t\t\t)} and the total interest you will pay is ${numFormat.format(totalInt)}`;\r\n\t\t\t});\r\n\t\t} else if (variableChooser.value == \"interest-rate\") {\r\n\t\t\tlet payment = mp;\r\n\t\t\ttotalInt = 0;\r\n\t\t\tlet intRate = comp_ahl_loanrate();\r\n\r\n\t\t\ttotalInt = payment * t - p;\r\n\t\t\tconsole.log(\"TotalInt = \" + totalInt);\r\n\t\t\tconsole.log(\"Rate - \" + intRate);\r\n\t\t\tresultText.forEach((el) => {\r\n\t\t\t\tel.style.display = \"block\";\r\n\t\t\t\tif (intRate >= 1) {\r\n\t\t\t\t\tel.innerHTML = `Invalid Input, Interest Rate is over 100%`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.innerHTML = `The Total Interest you will pay is ${numFormat.format(\r\n\t\t\t\t\t\ttotalInt\r\n\t\t\t\t\t)} and the rate you will pay is %${(intRate * 100).toFixed(2)}`;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (variableChooser.value == \"loan-amount\") {\r\n\t\t\tlet payment = mp;\r\n\t\t\tlet loanAmount = comp_ahl_loanamt();\r\n\r\n\t\t\tconsole.log(\"Loan Amount = \" + loanAmount);\r\n\t\t\tresultText.forEach((el) => {\r\n\t\t\t\tel.style.display = \"block\";\r\n\t\t\t\tel.innerHTML = `The Loan Amount will be ${numFormat.format(loanAmount)}`;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction comp_ahl_loanrate() {\r\n\t\t\tvar y = 3;\r\n\t\t\tvar ax = Number(amountSlider.value);\r\n\t\t\tvar aB = 0;\r\n\t\t\tvar aH = 0;\r\n\t\t\tvar e = Number(rateSlider.max) / 100 / 2;\r\n\t\t\tif (ax > 0) {\r\n\t\t\t\tvar aG = mp;\r\n\t\t\t\tvar aD = e / 12;\r\n\t\t\t\tvar aC = t;\r\n\t\t\t\tvar aE = 0;\r\n\t\t\t\tfor (var aA = 0; aA < y; aA++) {\r\n\t\t\t\t\taB = aD;\r\n\t\t\t\t\tvar aF = aB;\r\n\t\t\t\t\tvar ay = 0;\r\n\t\t\t\t\tdo {\r\n\t\t\t\t\t\tvar az = pvp(aB, aG, aC);\r\n\t\t\t\t\t\taE = az - ax;\r\n\t\t\t\t\t\taF /= 2;\r\n\t\t\t\t\t\tif (aE > 0) {\r\n\t\t\t\t\t\t\taB += aF;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (aE < 0) {\r\n\t\t\t\t\t\t\t\taB -= aF;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\taA = 3;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tay++;\r\n\t\t\t\t\t} while (ay < 25 && Math.abs(aE) > 0.5);\r\n\t\t\t\t\taH = ay === 25 ? 1 : 0;\r\n\t\t\t\t\taD *= 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\taB *= 12;\r\n\t\t\treturn roundit(aB, 0.00001);\r\n\t\t}\r\n\t\tfunction comp_ahl_loanamt() {\r\n\t\t\tvar ay = i;\r\n\t\t\tvar aA = t;\r\n\t\t\tvar aB = mp;\r\n\t\t\tvar aD = pvp(ay, aB, aA);\r\n\t\t\tvar aC = 0;\r\n\t\t\tdo {\r\n\t\t\t\tvar ax = aB;\r\n\t\t\t\taC = aD;\r\n\t\t\t\taD = pvp(ay, ax, aA);\r\n\t\t\t} while (Math.abs(aC - aD) > 0.01);\r\n\t\t\treturn aD;\r\n\t\t}\r\n\r\n\t\tfunction clearTable() {\r\n\t\t\tconst table = autoCalculator.querySelector(\".amortTable table\");\r\n\t\t\ttable.innerHTML = `\r\n\t\t\t\t\t\t\t\t\t\tPayment\r\n\t\t\t\t\t\t\t\t\t\tInterest\r\n\t\t\t\t\t\t\t\t\t\tPrincipal\r\n\t\t\t\t\t\t\t\t\t\tExtra Pmt\r\n\t\t\t\t\t\t\t\t\t\tBalance\r\n\t\t\t\t\t\t\t\t\t`;\r\n\t\t}\r\n\t\tfunction outputTable(count, interest, payment, balance, extraPmt = 0) {\r\n\t\t\tconst table = autoCalculator.querySelector(\".amortTable table\");\r\n\t\t\tif (balance < 0) {\r\n\t\t\t\tbalance = 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst el = document.createElement(\"tr\");\r\n\t\t\tel.innerHTML = `${count}\r\n\t\t\t\t\t\t\t$${interest.toFixed(2)}\r\n\t\t\t\t\t\t\t$${(payment - interest).toFixed(2)}\r\n\t\t\t\t\t\t\t$${extraPmt}\r\n\t\t\t\t\t\t\t$${balance.toFixed(2)}`;\r\n\t\t\ttable.appendChild(el);\r\n\t\t}\r\n\t\tfunction buildChart(labelArray, interestArray, paymentArray, extraArray) {\r\n\t\t\tlet isChartAlive = Chart.getChart(\"autoChart\");\r\n\t\t\tif (isChartAlive != undefined) {\r\n\t\t\t\tisChartAlive.destroy();\r\n\t\t\t}\r\n\t\t\tlet autoChart = new Chart(autoCalculator.querySelector(\"#autoChart\"), {\r\n\t\t\t\ttype: \"line\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tlabels: labelArray,\r\n\t\t\t\t\tdatasets: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdata: interestArray,\r\n\t\t\t\t\t\t\tfill: true,\r\n\t\t\t\t\t\t\tbackgroundColor: \"rgb(32, 62, 128)\",\r\n\t\t\t\t\t\t\tlabel: \"Interest\",\r\n\t\t\t\t\t\t\tpointRadius: \"0\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdata: paymentArray,\r\n\t\t\t\t\t\t\tlabel: \"Principal\",\r\n\t\t\t\t\t\t\tbackgroundColor: \"#00B7FF\",\r\n\t\t\t\t\t\t\tfill: true,\r\n\t\t\t\t\t\t\tpointRadius: \"0\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdata: extraArray,\r\n\t\t\t\t\t\t\tfill: true,\r\n\t\t\t\t\t\t\tbackgroundColor: \"#F46F64\",\r\n\t\t\t\t\t\t\tlabel: \"Extra Payment\",\r\n\t\t\t\t\t\t\tpointRadius: \"0\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\toptions: {\r\n\t\t\t\t\tmaintainAspectRatio: false,\r\n\t\t\t\t\tresponsive: true,\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tscales: {\r\n\t\t\t\t\t\tx: {\r\n\t\t\t\t\t\t\tgrid: {\r\n\t\t\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ty: {\r\n\t\t\t\t\t\t\tgrid: {\r\n\t\t\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\tplugins: {\r\n\t\t\t\t\t\tlegend: {\r\n\t\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction pvp(b, g, e) {\r\n\t\tvar d = b * 1;\r\n\t\tvar f = e * 1;\r\n\t\tvar c = g * 1;\r\n\t\tif (f <= 0) {\r\n\t\t\treturn c;\r\n\t\t}\r\n\t\tif (d <= 0) {\r\n\t\t\treturn c * f;\r\n\t\t}\r\n\t\treturn ((1 - Math.pow(1 + d, -f)) * c) / d;\r\n\t}\r\n\r\n\tfunction roundit(c, b) {\r\n\t\tvar d = c / b;\r\n\t\tvar a = Math.round(d) * b;\r\n\t\treturn a;\r\n\t}\r\n}\r\n","const careerFilter = document.querySelector('#careerFilter');\r\n\r\nif (careerFilter) {\r\n const careerWidget = document.querySelector('.career-widget');\r\n const stateList = careerWidget.querySelectorAll(\".state[data-state]\");\r\n const allCareers = careerWidget.querySelectorAll('.product-section.career');\r\n const careerSelect = careerWidget.querySelector('#careerFilter');\r\n const categorySelect = careerWidget.querySelector('#categoryFilter');\r\n\r\n careerSelect.addEventListener('change', (e) => {\r\n const categoryValue = String(categorySelect.value);\r\n if (categoryValue == \"\" || categoryValue.includes('all')) {\r\n const cat = categorySelect.value;\r\n stateList.forEach(el => {\r\n if (e.target.value === \"all\") {\r\n el.style.display = \"block\";\r\n\r\n } else {\r\n if (e.target.value === el.dataset.state) {\r\n el.style.display = \"block\";\r\n } else {\r\n if (el.style.display = \"block\") {\r\n el.style.display = \"none\";\r\n }\r\n }\r\n }\r\n })\r\n allCareers.forEach(el => {\r\n if (categoryValue == 'all' || el.dataset.category == categoryValue) {\r\n el.style.display = 'block';\r\n } else {\r\n el.style.display = \"none\";\r\n }\r\n })\r\n } else {\r\n stateList.forEach(el => {\r\n if (e.target.value === \"all\") {\r\n el.style.display = \"block\";\r\n } else {\r\n if (e.target.value === el.dataset.state) {\r\n el.style.display = \"block\";\r\n } else {\r\n if (el.style.display == \"block\") {\r\n el.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n })\r\n }\r\n/* checkStates();*/\r\n })\r\n\r\n categorySelect.addEventListener('change', (e) => {\r\n //const careerValue = String(careerSelect.value);\r\n //if (careerValue == \"\" || careerValue.includes('all')) {\r\n // stateList.forEach(el => {\r\n // el.style.display = \"block\";\r\n // })\r\n //} else {\r\n // const state = careerSelect.value;\r\n // careerList.forEach(el => {\r\n // if (e.target.value === \"all\") {\r\n // if (el.dataset.state == state) {\r\n // el.style.display = \"block\";\r\n // } else {\r\n // el.style.display = \"none\";\r\n // }\r\n\r\n // } else {\r\n // if (e.target.value === el.dataset.category && state == el.dataset.state) {\r\n // el.style.display = \"block\";\r\n // } else {\r\n // if (el.style.display = \"block\") {\r\n // el.style.display = \"none\";\r\n // }\r\n // }\r\n // }\r\n\r\n // })\r\n //}\r\n allCareers.forEach(el => {\r\n if (e.target.value == \"all\" || e.target.value == el.dataset.category) {\r\n el.style.display = \"block\"\r\n } else {\r\n el.style.display = \"none\";\r\n }\r\n })\r\n checkStates();\r\n })\r\n function checkStates() {\r\n const stateList = document.querySelectorAll(\".state[data-state]\");\r\n\r\n stateList.forEach(el => {\r\n const careers = el.querySelectorAll('.career');\r\n let hasVisibleElements = false;\r\n careers.forEach(car => {\r\n if (car.style.display == \"block\") {\r\n hasVisibleElements = true;\r\n }\r\n })\r\n if (hasVisibleElements) {\r\n el.style.display = \"block\"\r\n } else {\r\n el.style.display = \"none\"\r\n }\r\n })\r\n }\r\n}","function RedirectWithPostingParams(params, url) {\r\n var form = '
';\r\n for (var i = 0; i < params.length; i++) {\r\n form = form + '';\r\n }\r\n form = form + '
';\r\n var postingform = $(form);\r\n $('body').append(postingform);\r\n postingform.submit();\r\n}\r\n\r\n$(\"button#btnOnlineBankingLogin\").click(function (e) {\r\n e.preventDefault();\r\n\r\n var targetURL = \"https://online.mypcbbank.com/auth-olb/live/v1/remote-login\";\r\n var targetWindow = \"\";\r\n //if (loginType == \"onlinebanking\") {\r\n // //window.location.href = targetURL;\r\n\r\n //if ($(\"#remember_me\").is(':checked')) {\r\n // localStorage[\"onlinebanking_login\"] = $('input#username', $('#frmLoginOnlneBanking')).val();\r\n //}\r\n //else {\r\n // localStorage.removeItem(\"onlinebanking_login\");\r\n //}\r\n var formparam = [{\r\n id: \"userid\", name: \"userid\", value: $('input#username', $('#frmLoginOnlneBanking')).val()\r\n }, {\r\n id: \"password\", name: \"password\", value: $('input#password', $('#frmLoginOnlneBanking')).val()\r\n }, {\r\n id: \"testcookie\", name: \"testcookie\", value: false\r\n }, {\r\n id: \"testjs\", name: \"testjs\", value: false\r\n }, {\r\n id: \"dscheck\", name: \"dscheck\", value: 0\r\n }];\r\n RedirectWithPostingParams(formparam, 'https://online.mypcbbank.com/auth-olb/live/v1/remote-login');\r\n\r\n //$('input#password', $('#frmLoginOnlneBanking')).val('');\r\n //if (!$(\"#remember_me\").is(':checked')) {\r\n // $('input#username', $('#frmLoginOnlneBanking')).val('');\r\n //}\r\n\r\n/* } else if (loginType == \"cm\") {*/\r\n\r\n // if ($(\"#remember_me\").is(':checked')) {\r\n // localStorage[\"cm_login\"] = $('input#userID', $('#frmLoginOnlneBanking')).val();\r\n // }\r\n // else {\r\n // localStorage.removeItem(\"cm_login\");\r\n // }\r\n // window.location.href = \"https://pacificcitybiz.cbzsecure.com/ \";\r\n // RedirectWithPostingParams(formparam, 'https://pacificcitybiz.cbzsecure.com/ ');\r\n //}\r\n});","const tour = document.querySelector('.tour')\r\n\r\nif (tour) {\r\n\r\n document.querySelector(\"body\").addEventListener('click', (e) => {\r\n if (document.querySelector('body').classList.contains('tour-active') && !e.classList.contains('pop-window')) {\r\n document.querySelector('body').classList.remove('tour-active');\r\n $(\".showOnTour\").removeClass(\"showOnTour\");\r\n }\r\n })\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n function getCookie(name) {\r\n let value = `; ${document.cookie}`;\r\n let parts = value.split(`; ${name}=`);\r\n if (parts.length === 2) {\r\n return parts.pop().split(';').shift();\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n let cook = getCookie(\"tourDismissed\");\r\n\r\n if ($(window).width() > 900) {\r\n document.querySelector('body').classList.add('showTour');\r\n if (!cook) {\r\n $(\".tour\").show();\r\n $(\".slide-start\").addClass(\"active\");\r\n document.cookie = \"tourDismissed=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; SameSite=None; Secure\";\r\n }\r\n\r\n }\r\n\r\n var currentSlide = 0;\r\n function loadTourSlide(spot) {\r\n $(\".tour-slide[data-slide='\" + currentSlide + \"']\").fadeOut(\"fast\", function () {\r\n document.querySelectorAll(\".showOnTour\").forEach((e) => {\r\n e.classList.remove(\"showOnTour\");\r\n }\r\n )\r\n $(this).removeClass(\"active\");\r\n currentSlide = Number(spot);\r\n setPosition(currentSlide);\r\n $(\".tour-slide[data-slide='\" + currentSlide + \"']\").fadeIn(\"fast\", function () {\r\n $(this).addClass(\"active\");\r\n $(\"body\").addClass(\"tour-active\").attr(\"data-slide\", currentSlide);\r\n });\r\n });\r\n }\r\n\r\n function setPosition(spot) {\r\n console.log(spot);\r\n document.querySelector('.headers').classList.remove('showOnTour');\r\n document.querySelector('.headers').classList.remove('highlightNav');\r\n tour.classList.remove('noBG');\r\n body.classList.remove('nav-open');\r\n document.querySelector('.headers .main-nav a[href=\"/personal\"').parentNode.classList.remove('tour-open');\r\n switch (Number(spot)) {\r\n case 1:\r\n window.scrollTo({ top: 0 });\r\n document.querySelector(\".headers\").classList.add('showOnTour');\r\n document.querySelector(\".headers\").classList.add('highlightNav');\r\n var posX = $(\".headers .main-header\").offset().left + $(window)['scrollLeft']();\r\n var posY = $('.headers .main-header').offset().top - $(window)['scrollTop']();\r\n $(\".slide-navigation\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 2:\r\n window.scrollTo({ top: 0});\r\n/* document.querySelector('.headers .loginBtn').classList.add('showOnTour');*/\r\n var posX = $(\".headers .loginBtn\").offset().left + $(window)['scrollLeft']();\r\n var posY = $('.headers .loginBtn').offset().top - $(window)['scrollTop']();\r\n $(\".slide-quick-access\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 3:\r\n //banking center slide\r\n window.scrollTo({ top: 0});\r\n var posX = $(\".headers .nav-search\").offset().left + $(window)['scrollLeft']();\r\n var posY = $('.headers .nav-search').offset().top - $(window)['scrollTop']();\r\n $(\".slide-search\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 4:\r\n //connect slide\r\n window.scrollTo({ top: 0});\r\n var posX = $(\".headers .secondary-nav a[href$='contact']\").offset().left + $(window)['scrollLeft']();\r\n var posY = $(\".headers .secondary-nav a[href$='contact']\").offset().top - $(window)['scrollTop']();\r\n $(\".slide-find-us\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 5:\r\n //resources slide\r\n window.scrollTo({ top: 0});\r\n document.querySelector(\".headers\").classList.add('showOnTour');\r\n document.querySelector('.headers .main-nav ul').setAttribute('style', '--numColumns: 4');\r\n document.querySelector('.headers .main-nav a[href=\"/personal\"').parentNode.classList.add('tour-open');\r\n body.classList.add('nav-open');\r\n tour.classList.add('noBG');\r\n var posX = $(\".headers .main-nav a[href='/loans/loan-resources']\").offset().left + $(window)['scrollLeft']();\r\n var posY = $(\".headers .main-nav a[href='/loans/loan-resources']\").offset().top - $(window)['scrollTop']();\r\n $(\".slide-resources\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 6:\r\n const resourcesSection = document.querySelector('.resources-section');\r\n /* resourcesSection && resourcesSection.parentNode.parentNode.parentNode.classList.remove(\"scroll\");*/\r\n resourcesSection && resourcesSection.scrollIntoView()\r\n resourcesSection.classList.add(\"showOnTour\");\r\n tour.classList.add('noBG')\r\n /* document.querySelector('.resource-banner').classList.add('showOnTour')*/\r\n var posX = $('.resources-section a[href=\"/resources/security\"]').offset().left + $(window)['scrollLeft']();\r\n var posY = $('.resources-section a[href=\"/resources/security\"]').offset().top - $(window)['scrollTop']();\r\n $(\".slide-security\").css(\"top\", posY + \"px\").css(\"left\", posX + \"px\");\r\n break;\r\n case 7:\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n }\r\n }\r\n\r\n $(window).on(\"scroll\", function () {\r\n if (document.querySelector('body').classList.contains('tour-active')) {\r\n setPosition(currentSlide);\r\n }\r\n\r\n });\r\n $(window).on(\"resize\", function () {\r\n if (document.querySelector('body').classList.contains('tour-active')) {\r\n setPosition(currentSlide);\r\n }\r\n });\r\n\r\n\r\n $(\".dn-dot\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n loadTourSlide($(this).attr(\"data-slide\"));\r\n });\r\n\r\n $(\".dn-left\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n loadTourSlide(currentSlide - 1);\r\n });\r\n $(\".dn-right\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n loadTourSlide(currentSlide + 1);\r\n });\r\n\r\n\r\n\r\n $(\".js-start-tour,.js-restart-tour\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n loadTourSlide(1);\r\n });\r\n $(\".js-close-tour,.js-skip-tour\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\".tour\").hide();\r\n $(\"body\").removeClass(\"tour-active\").removeClass('nav-open').removeAttr(\"data-slide\", currentSlide);\r\n });\r\n $(\".tour\").on(\"click\", function (e) {\r\n $(this).hide();\r\n document.querySelector('.headers').classList.remove('showOnTour');\r\n document.querySelector('.headers').classList.remove('highlightNav');\r\n $(\"body\").removeClass(\"tour-active\").removeClass('nav-open').removeAttr(\"data-slide\", currentSlide);\r\n });\r\n\r\n $(\".tour-slide\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n });\r\n })\r\n\r\n}"]}