/* Minification failed. Returning unminified contents.
(493,53-54): run-time error JS1195: Expected expression: .
(493,70-71): run-time error JS1003: Expected ':': ;
 */

function loadScript(x) {
    var p = $.Deferred();
    var el = document.createElement('script');
    el.onload = p.resolve
    el.onerror = p.reject
    el.type = 'text/javascript';
    el.async = 'async';
    el.defer = 'defer';
    for (key in x) {
        el[key] = x[key];
    }
    document.body.appendChild(el);
    return p.promise();
}
function loadStyle(x) {
    var p = $.Deferred();
    var el = document.createElement('link');
    el.onload = p.resolve
    el.onerror = p.reject
    el.type = 'text/css';
    el.rel = 'stylesheet';
    el.async = 'async';
    el.defer = 'defer';
    for (key in x) {
        el[key] = x[key];
    }
    document.head.appendChild(el);
    return p.promise();
}

function debounce(func, delay) {
    let timeout;
    return function (...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(this, args), delay);
    };
}

(function (exports) {
    var $messageHolder = {};
    var $popupHolder = {};
    var timeoutQueue = [];
    var currentPopup = {};

    var closeOriginalPopup = function (close) {
        if (timeoutQueue.length > 0) {
            if (currentPopup != {}) {
                if (close) {
                    currentPopup.bPopup().close();
                }
            }
            clearTimeout(timeoutQueue.pop());
        }
    }

    var displayTextMessage = function (msg, closeCallback) {
        var $message = $("<span>", { class: "message" }).text(msg);
        $messageHolder.empty().append($message);
        if (closeCallback && typeof closeCallback === 'function') {
            closeCallback();
        }
    };

    let onOpen = function (timeout, closeCallback) {
        if (timeout && timeout > 0) {
            var time = setTimeout(function () {
                $popupHolder.bPopup().close();
                if (closeCallback && typeof closeCallback === 'function') {
                    closeCallback();
                }
            }, timeout);
            currentPopup = $popupHolder;
            timeoutQueue.push(time);
        }
    }

    let onClose = function (closeCallback) {
        $popupHolder.empty();
        closeOriginalPopup(false);
        if (closeCallback && typeof closeCallback === 'function') {
            closeCallback();
        }
    }

    var displayPopupMessage = function (msg, timeout, closeCallback) {
        var $message = $("<span>", { class: "message" }).text(msg);
        closeOriginalPopup(true);
        $popupHolder.bPopup().close();
        $popupHolder.empty();
        $popupHolder.append($message).bPopup({
            onOpen: () => onOpen(timeout, closeCallback),
            onClose: () => onClose(closeCallback),
            position: ['auto', window.innerHeight * 0.2],
            positionStyle: "fixed"
            //modal: !timeout || timeout == 0
        });
    };

    //msg: string show in message area
    //option: 1 - show on page message only; 2 - show popup only; else - show both two ways of message
    //timeout: milliseconds before popup disappear. 0 or null means keep message in screen
    exports.display = function (msg, option, timeout, closeCallback) {
        if (option == 1) {
            displayTextMessage(msg, closeCallback);
        } else {
            displayPopupMessage(msg, timeout, closeCallback);
        }
    };

    //timeout: milliseconds before initial message popup disappear. 0 or null means keep message in screen
    exports.initiate = function (timeout) {
        $messageHolder = $(".ErrorText").first();
        if ($messageHolder.length == 0) {
            $messageHolder = $("div", { class: "ErrorText" });
            $("body").first().prepend($messageHolder);
        }
        $popupHolder = $(".ErrorHolder").first();
        if ($popupHolder.length == 0) {
            $popupHolder = $("div", { class: "ErrorHolder" });
            $("body").first().append($popupHolder);
        }
        var hasMessage = $popupHolder.data("has-message");
        if (hasMessage && hasMessage.toLowerCase() === "true") {
            //displayPopupMessage($popupHolder.text(), timeout);
            $popupHolder.bPopup({
                onOpen: () => onOpen(timeout),
                onClose: () => onClose(),
                position: [0, 0],
                positionStyle: "fixed"
                //modal: false
            });
        }
    };
})(this.Message = {});

(function (exports) {
    let reCaptchaProm = false;

    exports.Init = function () {
        if (!reCaptchaProm) {
            if (typeof grecaptcha === 'undefined') {
                grecaptcha = {
                    ready: function (cb) {
                        // window.__grecaptcha_cfg is a global variable that stores reCAPTCHA's
                        // configuration. By default, any functions listed in its 'fns' property
                        // are automatically executed when reCAPTCHA loads.
                        const c = '___grecaptcha_cfg';
                        window[c] = window[c] || {};
                        (window[c]['fns'] = window[c]['fns'] || []).push(cb);
                    }
                };
            }
            reCaptchaProm = loadScript({
                src: 'https://www.google.com/recaptcha/api.js?onload=initForms&render=explicit'
            }).then((res) => {
                return new Promise((res, rej) => { grecaptcha.ready(res); });
            });
        }
        return reCaptchaProm;
    }
})(this.BuildReCaptcha = {});

$(document).ready(function () {
    Message.initiate(3000);
    setTimeout(() => {
        BuildReCaptcha.Init();
    }, 4000);
});
;
(function (exports) {
    const clickTrackingConfig = [
        {
            'class': 'CustomTracking',
        },
        {
            'class': 'TwitterTracking',
            'category': 'TwitterClickTracking',
            'label': 'ClickedTwitterLink',
        },
        {
            'class': 'InstagramTracking',
            'category': 'InstagramClickTracking',
            'label': 'ClickedInstagramLink',
        },
        {
            'class': 'AmazonTracking',
            'category': 'AmazonClickTracking',
            'label': 'ClickedAmazonLink',
        },
        {
            'class': 'DonateTracking',
            'category': 'donateLinkTracking',
            'label': 'ClickedDonateLink',
        },
        {
            'class': 'PayPalTracking',
            'category': 'PayPalTracking',
            'label': 'PayPalCheckout',
        },
        {
            'class': 'EmailContactTracking',
            'category': 'eMailLinkTracking',
            'label': 'ClickedEmail',
        },
        {
            'class': 'MapTracking',
            'category': 'MapTracking',
            'label': 'ClickedMapLink',
        },
        {
            'class': 'js-BannerClick',
            'action': 'Banner_Click_General',
            'category': 'BannerTracking',
        },
    ];
    const clickTrackingClasses = clickTrackingConfig.map(function (element) { return element.class; });
    const clickTrackingSelector = clickTrackingClasses.map(function (element) { return '.' + element; }).join();

    function initCallClickTracking() {
        var telLinks = document.querySelectorAll('a[href^="tel:"]');
        for (var i = 0; i < telLinks.length; i++) {
            telLinks[i].addEventListener('click', callClickTracking);
        }
    }

    function callClickTracking(event) {
        let phone = this.getAttribute('href');
        let isPhoneswap = false;
        this.classList.forEach(function (curVal) {
            isPhoneswap = isPhoneswap || curVal.includes("phoneswap");
        });
        if (phone && phone.startsWith('tel:') && !isPhoneswap) {
            gtag('event', 'ClickedCall', {
                'event_category': 'CallClickTracking',
                'event_label': phone
            });
        }
    }

    function initSchedulerClickTracking() {
        var scheduleLinks = document.querySelectorAll('a[href*="online.heartlandvision.com"]');
        for (var i = 0; i < scheduleLinks.length; i++) {
            scheduleLinks[i].addEventListener('click', exports.schedulerClickTracking);
        }
    }

    exports.schedulerClickTracking = function (event) {
        if (this.href != null && this.target != "_blank") { event.preventDefault(); }
        let url = window.location.pathname || '';
        let event_category = this.getAttribute('data-category') || 'Schedule Exam';
        let value = this.getAttribute('data-value') || '';
        if (url && event_category) {
            gtag('event', 'Book Now', {
                'event_category': event_category,
                'event_label': url,
                'value': value
            });
        }
        if (this.href != null && this.target != "_blank") { window.location.href = this.href; }
    }

    function initClickTracking() {
        // Google Analytics classes
        let Tracking = document.querySelectorAll(clickTrackingSelector);
        for (let i = 0; i < Tracking.length; i++) {
            Tracking[i].addEventListener('click', function (event) {
                // Custom Analytics reporting created from data attributes to populate the gtag()
                if (this.href != null) { event.preventDefault(); }
                let trackConfig = undefined;
                for (let i = 0; i < this.classList.length; i++) {
                    let currentClass = this.classList[i];
                    let index = clickTrackingClasses.indexOf(currentClass);
                    if (index >= 0) {
                        trackConfig = clickTrackingConfig[index];
                        break;
                    }
                }
                if (trackConfig) {
                    let action = this.getAttribute('data-action') || trackConfig.action || 'click';
                    let event_category = this.getAttribute('data-category') || trackConfig.category || '';
                    let event_label = this.getAttribute('data-label') || trackConfig.label || '';
                    let value = this.getAttribute('data-value') || trackConfig.value || '';
                    if (action && event_category) {
                        gtag('event', action, {
                            'event_category': event_category,
                            'event_label': event_label,
                            'value': value
                        });
                    }
                }
                if (this.href != null) { window.location.href = this.href; }
            });
        }
    }

    function initSearchTracking() {
        var forms = document.querySelectorAll('.js-SearchForm');
        for (var i = 0; i < forms.length; i++) {
            forms[i].addEventListener('submit', trackSearch);
        }
    }

    function trackSearch(event) {
        event.preventDefault();
        var searchField = this["searchTerm"];
        if (searchField) {
            gtag('event', 'search', {
                'search_term': searchField.value
            });
        }
        this.submit();
    }

    exports.init = function () {
        if (typeof existingInit === "function") {
            existingInit();
        }
        initClickTracking();
        initSearchTracking();
        initCallClickTracking();
        initSchedulerClickTracking();
    };
})(this.coreTracking = this.coreTracking || {});

document.addEventListener('DOMContentLoaded', function () {
    coreTracking.init();
});
;
// Header height
//var prevScrollpos = window.pageYOffset;
//window.onscroll = function () {
//    var currentScrollPos = window.pageYOffset;
//    if ((currentScrollPos > 0)) {
//        $("header").addClass('scrolling');
//    } else if ((currentScrollPos < 200) && (prevScrollpos > currentScrollPos)) {
//        $("header").removeClass('scrolling');
//    }
//    prevScrollpos = currentScrollPos;
//}

// Custom code
//let headerHeight;

//$('a[href*="#"]:not([href="#"])').click(function () {
//    headerHeight = window.matchMedia("(max-width: 800px)").matches ? $('#headerBottom').outerHeight() : $('header').outerHeight();
//    const clrReg = /^\//;
//    if (location.hostname == this.hostname && (location.pathname + location.search).replace(clrReg, '') == (this.pathname + this.search).replace(clrReg, '')) {
//        var target = $(this.hash);
//        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
//        if (target.length) {
//            $('html,body').animate({
//                scrollTop: target.offset().top - headerHeight
//            }, 1000);
//            return false;
//        }
//    }
//});


// Covid Alert JS Code
//function closePopup() {
//    var popup = document.getElementById("popup-container");
//    var popupcontainer = document.getElementById("popup-content");
//    popup.style.display = "none";
//    popupcontainer.style.display = "none";
//    setCookie('PopupClosed', 'true', 1)
//}

//function setCookie(cname, cvalue, exdays) {
//    var expires = "";
//    if (cvalue) {
//        if (isNaN(exdays)) {
//            expires = "expires=";
//        } else {
//            var d = new Date();
//            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
//            expires = "expires=" + d.toUTCString();
//        }
//    } else {
//        cvalue = "";
//        expires = "expires=" + "Thu, 01 Jan 1970 00:00:00 GMT";
//    }
//    document.cookie = cname + "=" + cvalue + "; " + expires + "path=/";
//}
//End

// Search dropdown
$('.search-btn').click(function () {
    $("#headerSearch").toggleClass("display");
});

// Close dropdowns
$('input.drop-input').on('change', function () {
    $('input.drop-input').not(this).prop('checked', false);
});

//// header scroll
//let scrollTimer;
////let firstLoad = true;
//var prevScrollpos = window.pageYOffset;
//$(window).scroll(function () {
//    var currentScrollPos = window.pageYOffset;
//    if ((currentScrollPos > 0)) {
//        $("header").addClass('scrolling');
//    } else if ((currentScrollPos < 200) && (prevScrollpos > currentScrollPos)) {
//        $("header").removeClass('scrolling');
//    }
//    prevScrollpos = currentScrollPos;
//}).scroll();

//// Jump Link Slide
//$("a[href^='#']:not([href='#'])").click(function (e) {
//    e.preventDefault();

//    var position = $($(this).attr("href")).offset().top - 78;

//    $("body, html").animate({
//        scrollTop: position
//    });
//});

$(document).ready(function () {
    //Content Toggles
    $(".js-content").each(function () {
        if (!$(this).parents('.js-content-default-open').length) {
            $(this).hide();
        }
    });

    $(".js-heading").each(function () {
        if ($(this).parents('.js-content-default-open').length) {
            $(this).addClass('active');
        }
    });

    $(".js-heading").click(function () {
        $(this).toggleClass('active');
        $('~ .js-content', this).slideToggle(300);
    });

    $('.js-expandTarget').on('click', function () {
        var t = this.href.indexOf('#');
        if (t) {
            var $this = $(this.href.substr(t));
            if (!$this.find(".js-box").hasClass('active')) {
                $this.find(".js-box").toggleClass("active");
                $this.find(".js-content").toggle('slow');
            }
        }
    });

});

// Jump Link Slide
$("a[href^='#']").click(function (e) {
    /*let headerHeight = $('header').outerHeight();*/

    let href = $(this).attr("href");
    if (href && href.length > 1) {
        e.preventDefault();
        /* var position = $(href).offset().top - headerHeight;*/
        var position = $(href).offset().top;

        $("body, html").animate({
            scrollTop: position
        }, 1000);
    }
});


// Sticky Nav bar (NEW)
const isReload = (
    (window.performance.navigation && window.performance.navigation.type === 1) ||
    window.performance
        .getEntriesByType('navigation')
        .map((nav) => nav.type)
        .includes('reload')
);
let prevScrollPos = isReload ? window.pageYOffset : 0;
let ticking = false;

const headerNav = document.querySelector(".js-site-header");
const locationSidebar = document.querySelector(".js-storehub-sidebar .sidebar-sticky");

// Cache height outside scroll handler

(function (exports) {
    let headerNavHeight;

    exports.getHeaderHeight = () => {
        if (headerNavHeight === undefined) {
            headerNavHeight = headerNav ? headerNav?.offsetHeight : 0;
            window.addEventListener("resize", () => {
                // Recalculate on resize if header height might change
                headerNavHeight = headerNav ? headerNav.offsetHeight : 0;
            });
        }
        return headerNavHeight;
    }
})(this.HeightController = {});

let debouncedSticky = debounce(() => {
    if (!ticking) {
        ticking = true;

        window.requestAnimationFrame(() => {
            let currentScrollPos = window.pageYOffset;
            console.log({ prevScrollPos, currentScrollPos });
            if (headerNav) {
                const isScrollingUp = prevScrollPos > currentScrollPos;
                let navHeight = HeightController.getHeaderHeight();
                // Only update styles if they actually change to avoid layout thrashing
                const newHeaderTop = isScrollingUp ? "0" : `-${navHeight}px`;
                if (headerNav.style.top !== newHeaderTop) {
                    headerNav.style.top = newHeaderTop;
                }

                if (locationSidebar) {
                    const newSidebarTop = isScrollingUp ? `${navHeight}px` : "0";
                    if (locationSidebar.style.top !== newSidebarTop) {
                        locationSidebar.style.top = newSidebarTop;
                    }
                }
            }

            prevScrollPos = currentScrollPos;
            ticking = false;
        });
    }
}, 50);

window.addEventListener("scroll", debouncedSticky);

if (isReload) { debouncedSticky(); }

(() => {
    /**
        * Prevent page scrolling. E.g. Dialogs, when mobile nav is expanded, etc.
    */
    function disablePageScroll() {
        document.documentElement.style.setProperty('--window-position', `${window.scrollY}`);
        document.documentElement.classList.add('scroll-lock');
    };

    /**
     * Re-enable page scrolling
     */
    function enablePageScroll() {
        const prevPosition = document.documentElement.style.getPropertyValue('--window-position');
        document.documentElement.classList.remove('scroll-lock');
        window.scrollTo({ top: parseInt(prevPosition), behavior: 'instant' });
    };

    /**
     * Mobile nav - scroll lock / blur
     */
    const mainNavCheckbox = document.getElementById('hamburger');
    if (mainNavCheckbox) {
        mainNavCheckbox.checked = false; // Uncheck on initial page load

        const mainNavBlur = document.querySelector('.js-mobile-nav-blur');

        mainNavCheckbox.addEventListener('change', function (event) {
            event.target.checked ? disablePageScroll() : enablePageScroll();
            mainNavBlur.classList.toggle('active', event.target.checked);
        });

        /**
         * Uncheck nav toggle if window resizes from mobile to desktop
         */
        const MQ_TOP_NAV = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--MQ_TOP_NAV')); // top nav switches to mobile layout
        let resizeTimer;

        window.addEventListener('resize', () => {
            clearTimeout(resizeTimer);
            resizeTimer = setTimeout(() => {
                if (mainNavCheckbox.checked && window.innerWidth > MQ_TOP_NAV) {
                    mainNavCheckbox.checked = false;
                    mainNavCheckbox.dispatchEvent(new Event('change'));
                }
            }, 200);
        });
    }

    /**
     * Close *other* sub nav mobile dropdowns
     */
    const subNavToggles = document.querySelectorAll('.js-sub-nav-toggle');

    subNavToggles.forEach(input => {
        // Add event listeners to sub nav inputs
        input.addEventListener('change', event => {
            // Filter out clicked target and uncheck other sub nav inputs
            let othersubNavToggles = [...subNavToggles].filter(input => input !== event.target);
            othersubNavToggles.forEach(input => input.checked = false);
        });
    });

    /**
     * Active header and footer nav links state
     */
    const activeLinks = document.querySelectorAll('.js-active-links a');
    activeLinks.forEach(link => {
        if (link.href && new URL(link.href).pathname === window.location.pathname) link.classList.add('active');
    });

    $('.js-faq-question').click(function (e) {
        $(this).toggleClass('active');
        $('~ .js-faq-answer', this).slideToggle(300);
    });
})();


;
