/* Minification failed. Returning unminified contents.
(3317,73-74): run-time error JS1195: Expected expression: .
(3326,42-43): run-time error JS1195: Expected expression: >
(3334,10-11): run-time error JS1195: Expected expression: )
(4719,13-14): run-time error JS1195: Expected expression: )
(4719,16-17): run-time error JS1195: Expected expression: >
(4723,1-2): run-time error JS1002: Syntax error: }
(4725,27-28): run-time error JS1004: Expected ';': {
(4802,34-35): run-time error JS1195: Expected expression: )
(4802,37-38): run-time error JS1195: Expected expression: >
(4829,1-2): run-time error JS1002: Syntax error: }
(4831,45-46): run-time error JS1004: Expected ';': {
(4949,23-24): run-time error JS1195: Expected expression: )
(4949,26-27): run-time error JS1195: Expected expression: >
(4953,1-2): run-time error JS1002: Syntax error: }
(4956,15-16): run-time error JS1195: Expected expression: )
(4956,18-19): run-time error JS1195: Expected expression: >
(4960,5-6): run-time error JS1002: Syntax error: }
(4962,46-60): run-time error JS1197: Too many errors. The file might not be a JavaScript file: genRandomValue
(4957,9,4959,26): run-time error JS1018: 'return' statement outside of function: return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1)
(4950,5,4952,22): run-time error JS1018: 'return' statement outside of function: return Math.floor((1 + Math.random()) * 0x10000)
        .toString(16)
        .substring(1)
 */
/*
     _ _      _       _
 ___| (_) ___| | __  (_)___
/ __| | |/ __| |/ /  | / __|
\__ \ | | (__|   < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
                   |__/

 Version: 1.8.0
  Author: Ken Wheeler
 Website: http://kenwheeler.github.io
    Docs: http://kenwheeler.github.io/slick
    Repo: http://github.com/kenwheeler/slick
  Issues: http://github.com/kenwheeler/slick/issues

 */
/* global window, document, define, jQuery, setInterval, clearInterval */
;(function(factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        define(['jquery'], factory);
    } else if (typeof exports !== 'undefined') {
        module.exports = factory(require('jquery'));
    } else {
        factory(jQuery);
    }

}(function($) {
    'use strict';
    var Slick = window.Slick || {};

    Slick = (function() {

        var instanceUid = 0;

        function Slick(element, settings) {

            var _ = this, dataSettings;

            _.defaults = {
                accessibility: true,
                adaptiveHeight: false,
                appendArrows: $(element),
                appendDots: $(element),
                arrows: true,
                asNavFor: null,
                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
                autoplay: false,
                autoplaySpeed: 3000,
                centerMode: false,
                centerPadding: '50px',
                cssEase: 'ease',
                customPaging: function(slider, i) {
                    return $('<button type="button" />').text(i + 1);
                },
                dots: false,
                dotsClass: 'slick-dots',
                draggable: true,
                easing: 'linear',
                edgeFriction: 0.35,
                fade: false,
                focusOnSelect: false,
                focusOnChange: false,
                infinite: true,
                initialSlide: 0,
                lazyLoad: 'ondemand',
                mobileFirst: false,
                pauseOnHover: true,
                pauseOnFocus: true,
                pauseOnDotsHover: false,
                respondTo: 'window',
                responsive: null,
                rows: 1,
                rtl: false,
                slide: '',
                slidesPerRow: 1,
                slidesToShow: 1,
                slidesToScroll: 1,
                speed: 500,
                swipe: true,
                swipeToSlide: false,
                touchMove: true,
                touchThreshold: 5,
                useCSS: true,
                useTransform: true,
                variableWidth: false,
                vertical: false,
                verticalSwiping: false,
                waitForAnimate: true,
                zIndex: 1000
            };

            _.initials = {
                animating: false,
                dragging: false,
                autoPlayTimer: null,
                currentDirection: 0,
                currentLeft: null,
                currentSlide: 0,
                direction: 1,
                $dots: null,
                listWidth: null,
                listHeight: null,
                loadIndex: 0,
                $nextArrow: null,
                $prevArrow: null,
                scrolling: false,
                slideCount: null,
                slideWidth: null,
                $slideTrack: null,
                $slides: null,
                sliding: false,
                slideOffset: 0,
                swipeLeft: null,
                swiping: false,
                $list: null,
                touchObject: {},
                transformsEnabled: false,
                unslicked: false
            };

            $.extend(_, _.initials);

            _.activeBreakpoint = null;
            _.animType = null;
            _.animProp = null;
            _.breakpoints = [];
            _.breakpointSettings = [];
            _.cssTransitions = false;
            _.focussed = false;
            _.interrupted = false;
            _.hidden = 'hidden';
            _.paused = true;
            _.positionProp = null;
            _.respondTo = null;
            _.rowCount = 1;
            _.shouldClick = true;
            _.$slider = $(element);
            _.$slidesCache = null;
            _.transformType = null;
            _.transitionType = null;
            _.visibilityChange = 'visibilitychange';
            _.windowWidth = 0;
            _.windowTimer = null;

            dataSettings = $(element).data('slick') || {};

            _.options = $.extend({}, _.defaults, settings, dataSettings);

            _.currentSlide = _.options.initialSlide;

            _.originalSettings = _.options;

            if (typeof document.mozHidden !== 'undefined') {
                _.hidden = 'mozHidden';
                _.visibilityChange = 'mozvisibilitychange';
            } else if (typeof document.webkitHidden !== 'undefined') {
                _.hidden = 'webkitHidden';
                _.visibilityChange = 'webkitvisibilitychange';
            }

            _.autoPlay = $.proxy(_.autoPlay, _);
            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
            _.changeSlide = $.proxy(_.changeSlide, _);
            _.clickHandler = $.proxy(_.clickHandler, _);
            _.selectHandler = $.proxy(_.selectHandler, _);
            _.setPosition = $.proxy(_.setPosition, _);
            _.swipeHandler = $.proxy(_.swipeHandler, _);
            _.dragHandler = $.proxy(_.dragHandler, _);
            _.keyHandler = $.proxy(_.keyHandler, _);

            _.instanceUid = instanceUid++;

            // A simple way to check for HTML strings
            // Strict HTML recognition (must start with <)
            // Extracted from jQuery v1.11 source
            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;


            _.registerBreakpoints();
            _.init(true);

        }

        return Slick;

    }());

    Slick.prototype.activateADA = function() {
        var _ = this;

        _.$slideTrack.find('.slick-active').attr({
            'aria-hidden': 'false'
        }).find('a, input, button, select').attr({
            'tabindex': '0'
        });

    };

    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {

        var _ = this;

        if (typeof(index) === 'boolean') {
            addBefore = index;
            index = null;
        } else if (index < 0 || (index >= _.slideCount)) {
            return false;
        }

        _.unload();

        if (typeof(index) === 'number') {
            if (index === 0 && _.$slides.length === 0) {
                $(markup).appendTo(_.$slideTrack);
            } else if (addBefore) {
                $(markup).insertBefore(_.$slides.eq(index));
            } else {
                $(markup).insertAfter(_.$slides.eq(index));
            }
        } else {
            if (addBefore === true) {
                $(markup).prependTo(_.$slideTrack);
            } else {
                $(markup).appendTo(_.$slideTrack);
            }
        }

        _.$slides = _.$slideTrack.children(this.options.slide);

        _.$slideTrack.children(this.options.slide).detach();

        _.$slideTrack.append(_.$slides);

        _.$slides.each(function(index, element) {
            $(element).attr('data-slick-index', index);
        });

        _.$slidesCache = _.$slides;

        _.reinit();

    };

    Slick.prototype.animateHeight = function() {
        var _ = this;
        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
            _.$list.animate({
                height: targetHeight
            }, _.options.speed);
        }
    };

    Slick.prototype.animateSlide = function(targetLeft, callback) {

        var animProps = {},
            _ = this;

        _.animateHeight();

        if (_.options.rtl === true && _.options.vertical === false) {
            targetLeft = -targetLeft;
        }
        if (_.transformsEnabled === false) {
            if (_.options.vertical === false) {
                _.$slideTrack.animate({
                    left: targetLeft
                }, _.options.speed, _.options.easing, callback);
            } else {
                _.$slideTrack.animate({
                    top: targetLeft
                }, _.options.speed, _.options.easing, callback);
            }

        } else {

            if (_.cssTransitions === false) {
                if (_.options.rtl === true) {
                    _.currentLeft = -(_.currentLeft);
                }
                $({
                    animStart: _.currentLeft
                }).animate({
                    animStart: targetLeft
                }, {
                    duration: _.options.speed,
                    easing: _.options.easing,
                    step: function(now) {
                        now = Math.ceil(now);
                        if (_.options.vertical === false) {
                            animProps[_.animType] = 'translate(' +
                                now + 'px, 0px)';
                            _.$slideTrack.css(animProps);
                        } else {
                            animProps[_.animType] = 'translate(0px,' +
                                now + 'px)';
                            _.$slideTrack.css(animProps);
                        }
                    },
                    complete: function() {
                        if (callback) {
                            callback.call();
                        }
                    }
                });

            } else {

                _.applyTransition();
                targetLeft = Math.ceil(targetLeft);

                if (_.options.vertical === false) {
                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
                } else {
                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
                }
                _.$slideTrack.css(animProps);

                if (callback) {
                    setTimeout(function() {

                        _.disableTransition();

                        callback.call();
                    }, _.options.speed);
                }

            }

        }

    };

    Slick.prototype.getNavTarget = function() {

        var _ = this,
            asNavFor = _.options.asNavFor;

        if ( asNavFor && asNavFor !== null ) {
            asNavFor = $(asNavFor).not(_.$slider);
        }

        return asNavFor;

    };

    Slick.prototype.asNavFor = function(index) {

        var _ = this,
            asNavFor = _.getNavTarget();

        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
            asNavFor.each(function() {
                var target = $(this).slick('getSlick');
                if(!target.unslicked) {
                    target.slideHandler(index, true);
                }
            });
        }

    };

    Slick.prototype.applyTransition = function(slide) {

        var _ = this,
            transition = {};

        if (_.options.fade === false) {
            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
        } else {
            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
        }

        if (_.options.fade === false) {
            _.$slideTrack.css(transition);
        } else {
            _.$slides.eq(slide).css(transition);
        }

    };

    Slick.prototype.autoPlay = function() {

        var _ = this;

        _.autoPlayClear();

        if ( _.slideCount > _.options.slidesToShow ) {
            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
        }

    };

    Slick.prototype.autoPlayClear = function() {

        var _ = this;

        if (_.autoPlayTimer) {
            clearInterval(_.autoPlayTimer);
        }

    };

    Slick.prototype.autoPlayIterator = function() {

        var _ = this,
            slideTo = _.currentSlide + _.options.slidesToScroll;

        if ( !_.paused && !_.interrupted && !_.focussed ) {

            if ( _.options.infinite === false ) {

                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
                    _.direction = 0;
                }

                else if ( _.direction === 0 ) {

                    slideTo = _.currentSlide - _.options.slidesToScroll;

                    if ( _.currentSlide - 1 === 0 ) {
                        _.direction = 1;
                    }

                }

            }

            _.slideHandler( slideTo );

        }

    };

    Slick.prototype.buildArrows = function() {

        var _ = this;

        if (_.options.arrows === true ) {

            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');

            if( _.slideCount > _.options.slidesToShow ) {

                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');

                if (_.htmlExpr.test(_.options.prevArrow)) {
                    _.$prevArrow.prependTo(_.options.appendArrows);
                }

                if (_.htmlExpr.test(_.options.nextArrow)) {
                    _.$nextArrow.appendTo(_.options.appendArrows);
                }

                if (_.options.infinite !== true) {
                    _.$prevArrow
                        .addClass('slick-disabled')
                        .attr('aria-disabled', 'true');
                }

            } else {

                _.$prevArrow.add( _.$nextArrow )

                    .addClass('slick-hidden')
                    .attr({
                        'aria-disabled': 'true',
                        'tabindex': '-1'
                    });

            }

        }

    };

    Slick.prototype.buildDots = function() {

        var _ = this,
            i, dot;

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$slider.addClass('slick-dotted');

            dot = $('<ul />').addClass(_.options.dotsClass);

            for (i = 0; i <= _.getDotCount(); i += 1) {
                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
            }

            _.$dots = dot.appendTo(_.options.appendDots);

            _.$dots.find('li').first().addClass('slick-active');

        }

    };

    Slick.prototype.buildOut = function() {

        var _ = this;

        _.$slides =
            _.$slider
                .children( _.options.slide + ':not(.slick-cloned)')
                .addClass('slick-slide');

        _.slideCount = _.$slides.length;

        _.$slides.each(function(index, element) {
            $(element)
                .attr('data-slick-index', index)
                .data('originalStyling', $(element).attr('style') || '');
        });

        _.$slider.addClass('slick-slider');

        _.$slideTrack = (_.slideCount === 0) ?
            $('<div class="slick-track"/>').appendTo(_.$slider) :
            _.$slides.wrapAll('<div class="slick-track"/>').parent();

        _.$list = _.$slideTrack.wrap(
            '<div class="slick-list"/>').parent();
        _.$slideTrack.css('opacity', 0);

        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
            _.options.slidesToScroll = 1;
        }

        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');

        _.setupInfinite();

        _.buildArrows();

        _.buildDots();

        _.updateDots();


        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);

        if (_.options.draggable === true) {
            _.$list.addClass('draggable');
        }

    };

    Slick.prototype.buildRows = function() {

        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;

        newSlides = document.createDocumentFragment();
        originalSlides = _.$slider.children();

        if(_.options.rows > 0) {

            slidesPerSection = _.options.slidesPerRow * _.options.rows;
            numOfSlides = Math.ceil(
                originalSlides.length / slidesPerSection
            );

            for(a = 0; a < numOfSlides; a++){
                var slide = document.createElement('div');
                for(b = 0; b < _.options.rows; b++) {
                    var row = document.createElement('div');
                    for(c = 0; c < _.options.slidesPerRow; c++) {
                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
                        if (originalSlides.get(target)) {
                            row.appendChild(originalSlides.get(target));
                        }
                    }
                    slide.appendChild(row);
                }
                newSlides.appendChild(slide);
            }

            _.$slider.empty().append(newSlides);
            _.$slider.children().children().children()
                .css({
                    'width':(100 / _.options.slidesPerRow) + '%',
                    'display': 'inline-block'
                });

        }

    };

    Slick.prototype.checkResponsive = function(initial, forceUpdate) {

        var _ = this,
            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
        var sliderWidth = _.$slider.width();
        var windowWidth = window.innerWidth || $(window).width();

        if (_.respondTo === 'window') {
            respondToWidth = windowWidth;
        } else if (_.respondTo === 'slider') {
            respondToWidth = sliderWidth;
        } else if (_.respondTo === 'min') {
            respondToWidth = Math.min(windowWidth, sliderWidth);
        }

        if ( _.options.responsive &&
            _.options.responsive.length &&
            _.options.responsive !== null) {

            targetBreakpoint = null;

            for (breakpoint in _.breakpoints) {
                if (_.breakpoints.hasOwnProperty(breakpoint)) {
                    if (_.originalSettings.mobileFirst === false) {
                        if (respondToWidth < _.breakpoints[breakpoint]) {
                            targetBreakpoint = _.breakpoints[breakpoint];
                        }
                    } else {
                        if (respondToWidth > _.breakpoints[breakpoint]) {
                            targetBreakpoint = _.breakpoints[breakpoint];
                        }
                    }
                }
            }

            if (targetBreakpoint !== null) {
                if (_.activeBreakpoint !== null) {
                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
                        _.activeBreakpoint =
                            targetBreakpoint;
                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
                            _.unslick(targetBreakpoint);
                        } else {
                            _.options = $.extend({}, _.originalSettings,
                                _.breakpointSettings[
                                    targetBreakpoint]);
                            if (initial === true) {
                                _.currentSlide = _.options.initialSlide;
                            }
                            _.refresh(initial);
                        }
                        triggerBreakpoint = targetBreakpoint;
                    }
                } else {
                    _.activeBreakpoint = targetBreakpoint;
                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
                        _.unslick(targetBreakpoint);
                    } else {
                        _.options = $.extend({}, _.originalSettings,
                            _.breakpointSettings[
                                targetBreakpoint]);
                        if (initial === true) {
                            _.currentSlide = _.options.initialSlide;
                        }
                        _.refresh(initial);
                    }
                    triggerBreakpoint = targetBreakpoint;
                }
            } else {
                if (_.activeBreakpoint !== null) {
                    _.activeBreakpoint = null;
                    _.options = _.originalSettings;
                    if (initial === true) {
                        _.currentSlide = _.options.initialSlide;
                    }
                    _.refresh(initial);
                    triggerBreakpoint = targetBreakpoint;
                }
            }

            // only trigger breakpoints during an actual break. not on initialize.
            if( !initial && triggerBreakpoint !== false ) {
                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
            }
        }

    };

    Slick.prototype.changeSlide = function(event, dontAnimate) {

        var _ = this,
            $target = $(event.currentTarget),
            indexOffset, slideOffset, unevenOffset;

        // If target is a link, prevent default action.
        if($target.is('a')) {
            event.preventDefault();
        }

        // If target is not the <li> element (ie: a child), find the <li>.
        if(!$target.is('li')) {
            $target = $target.closest('li');
        }

        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;

        switch (event.data.message) {

            case 'previous':
                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
                if (_.slideCount > _.options.slidesToShow) {
                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
                }
                break;

            case 'next':
                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
                if (_.slideCount > _.options.slidesToShow) {
                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
                }
                break;

            case 'index':
                var index = event.data.index === 0 ? 0 :
                    event.data.index || $target.index() * _.options.slidesToScroll;

                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
                $target.children().trigger('focus');
                break;

            default:
                return;
        }

    };

    Slick.prototype.checkNavigable = function(index) {

        var _ = this,
            navigables, prevNavigable;

        navigables = _.getNavigableIndexes();
        prevNavigable = 0;
        if (index > navigables[navigables.length - 1]) {
            index = navigables[navigables.length - 1];
        } else {
            for (var n in navigables) {
                if (index < navigables[n]) {
                    index = prevNavigable;
                    break;
                }
                prevNavigable = navigables[n];
            }
        }

        return index;
    };

    Slick.prototype.cleanUpEvents = function() {

        var _ = this;

        if (_.options.dots && _.$dots !== null) {

            $('li', _.$dots)
                .off('click.slick', _.changeSlide)
                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));

            if (_.options.accessibility === true) {
                _.$dots.off('keydown.slick', _.keyHandler);
            }
        }

        _.$slider.off('focus.slick blur.slick');

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);

            if (_.options.accessibility === true) {
                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
            }
        }

        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);

        _.$list.off('click.slick', _.clickHandler);

        $(document).off(_.visibilityChange, _.visibility);

        _.cleanUpSlideEvents();

        if (_.options.accessibility === true) {
            _.$list.off('keydown.slick', _.keyHandler);
        }

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
        }

        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);

        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);

        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);

        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);

    };

    Slick.prototype.cleanUpSlideEvents = function() {

        var _ = this;

        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));

    };

    Slick.prototype.cleanUpRows = function() {

        var _ = this, originalSlides;

        if(_.options.rows > 0) {
            originalSlides = _.$slides.children().children();
            originalSlides.removeAttr('style');
            _.$slider.empty().append(originalSlides);
        }

    };

    Slick.prototype.clickHandler = function(event) {

        var _ = this;

        if (_.shouldClick === false) {
            event.stopImmediatePropagation();
            event.stopPropagation();
            event.preventDefault();
        }

    };

    Slick.prototype.destroy = function(refresh) {

        var _ = this;

        _.autoPlayClear();

        _.touchObject = {};

        _.cleanUpEvents();

        $('.slick-cloned', _.$slider).detach();

        if (_.$dots) {
            _.$dots.remove();
        }

        if ( _.$prevArrow && _.$prevArrow.length ) {

            _.$prevArrow
                .removeClass('slick-disabled slick-arrow slick-hidden')
                .removeAttr('aria-hidden aria-disabled tabindex')
                .css('display','');

            if ( _.htmlExpr.test( _.options.prevArrow )) {
                _.$prevArrow.remove();
            }
        }

        if ( _.$nextArrow && _.$nextArrow.length ) {

            _.$nextArrow
                .removeClass('slick-disabled slick-arrow slick-hidden')
                .removeAttr('aria-hidden aria-disabled tabindex')
                .css('display','');

            if ( _.htmlExpr.test( _.options.nextArrow )) {
                _.$nextArrow.remove();
            }
        }


        if (_.$slides) {

            _.$slides
                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
                .removeAttr('aria-hidden')
                .removeAttr('data-slick-index')
                .each(function(){
                    $(this).attr('style', $(this).data('originalStyling'));
                });

            _.$slideTrack.children(this.options.slide).detach();

            _.$slideTrack.detach();

            _.$list.detach();

            _.$slider.append(_.$slides);
        }

        _.cleanUpRows();

        _.$slider.removeClass('slick-slider');
        _.$slider.removeClass('slick-initialized');
        _.$slider.removeClass('slick-dotted');

        _.unslicked = true;

        if(!refresh) {
            _.$slider.trigger('destroy', [_]);
        }

    };

    Slick.prototype.disableTransition = function(slide) {

        var _ = this,
            transition = {};

        transition[_.transitionType] = '';

        if (_.options.fade === false) {
            _.$slideTrack.css(transition);
        } else {
            _.$slides.eq(slide).css(transition);
        }

    };

    Slick.prototype.fadeSlide = function(slideIndex, callback) {

        var _ = this;

        if (_.cssTransitions === false) {

            _.$slides.eq(slideIndex).css({
                zIndex: _.options.zIndex
            });

            _.$slides.eq(slideIndex).animate({
                opacity: 1
            }, _.options.speed, _.options.easing, callback);

        } else {

            _.applyTransition(slideIndex);

            _.$slides.eq(slideIndex).css({
                opacity: 1,
                zIndex: _.options.zIndex
            });

            if (callback) {
                setTimeout(function() {

                    _.disableTransition(slideIndex);

                    callback.call();
                }, _.options.speed);
            }

        }

    };

    Slick.prototype.fadeSlideOut = function(slideIndex) {

        var _ = this;

        if (_.cssTransitions === false) {

            _.$slides.eq(slideIndex).animate({
                opacity: 0,
                zIndex: _.options.zIndex - 2
            }, _.options.speed, _.options.easing);

        } else {

            _.applyTransition(slideIndex);

            _.$slides.eq(slideIndex).css({
                opacity: 0,
                zIndex: _.options.zIndex - 2
            });

        }

    };

    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {

        var _ = this;

        if (filter !== null) {

            _.$slidesCache = _.$slides;

            _.unload();

            _.$slideTrack.children(this.options.slide).detach();

            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);

            _.reinit();

        }

    };

    Slick.prototype.focusHandler = function() {

        var _ = this;

        _.$slider
            .off('focus.slick blur.slick')
            .on('focus.slick blur.slick', '*', function(event) {

            event.stopImmediatePropagation();
            var $sf = $(this);

            setTimeout(function() {

                if( _.options.pauseOnFocus ) {
                    _.focussed = $sf.is(':focus');
                    _.autoPlay();
                }

            }, 0);

        });
    };

    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {

        var _ = this;
        return _.currentSlide;

    };

    Slick.prototype.getDotCount = function() {

        var _ = this;

        var breakPoint = 0;
        var counter = 0;
        var pagerQty = 0;

        if (_.options.infinite === true) {
            if (_.slideCount <= _.options.slidesToShow) {
                 ++pagerQty;
            } else {
                while (breakPoint < _.slideCount) {
                    ++pagerQty;
                    breakPoint = counter + _.options.slidesToScroll;
                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
                }
            }
        } else if (_.options.centerMode === true) {
            pagerQty = _.slideCount;
        } else if(!_.options.asNavFor) {
            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
        }else {
            while (breakPoint < _.slideCount) {
                ++pagerQty;
                breakPoint = counter + _.options.slidesToScroll;
                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
            }
        }

        return pagerQty - 1;

    };

    Slick.prototype.getLeft = function(slideIndex) {

        var _ = this,
            targetLeft,
            verticalHeight,
            verticalOffset = 0,
            targetSlide,
            coef;

        _.slideOffset = 0;
        verticalHeight = _.$slides.first().outerHeight(true);

        if (_.options.infinite === true) {
            if (_.slideCount > _.options.slidesToShow) {
                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
                coef = -1

                if (_.options.vertical === true && _.options.centerMode === true) {
                    if (_.options.slidesToShow === 2) {
                        coef = -1.5;
                    } else if (_.options.slidesToShow === 1) {
                        coef = -2
                    }
                }
                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
            }
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
                    if (slideIndex > _.slideCount) {
                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
                    } else {
                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
                    }
                }
            }
        } else {
            if (slideIndex + _.options.slidesToShow > _.slideCount) {
                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
            }
        }

        if (_.slideCount <= _.options.slidesToShow) {
            _.slideOffset = 0;
            verticalOffset = 0;
        }

        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
        } else if (_.options.centerMode === true && _.options.infinite === true) {
            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
        } else if (_.options.centerMode === true) {
            _.slideOffset = 0;
            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
        }

        if (_.options.vertical === false) {
            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
        } else {
            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
        }

        if (_.options.variableWidth === true) {

            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
            } else {
                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
            }

            if (_.options.rtl === true) {
                if (targetSlide[0]) {
                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
                } else {
                    targetLeft =  0;
                }
            } else {
                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
            }

            if (_.options.centerMode === true) {
                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
                } else {
                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
                }

                if (_.options.rtl === true) {
                    if (targetSlide[0]) {
                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
                    } else {
                        targetLeft =  0;
                    }
                } else {
                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
                }

                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
            }
        }

        return targetLeft;

    };

    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {

        var _ = this;

        return _.options[option];

    };

    Slick.prototype.getNavigableIndexes = function() {

        var _ = this,
            breakPoint = 0,
            counter = 0,
            indexes = [],
            max;

        if (_.options.infinite === false) {
            max = _.slideCount;
        } else {
            breakPoint = _.options.slidesToScroll * -1;
            counter = _.options.slidesToScroll * -1;
            max = _.slideCount * 2;
        }

        while (breakPoint < max) {
            indexes.push(breakPoint);
            breakPoint = counter + _.options.slidesToScroll;
            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
        }

        return indexes;

    };

    Slick.prototype.getSlick = function() {

        return this;

    };

    Slick.prototype.getSlideCount = function() {

        var _ = this,
            slidesTraversed, swipedSlide, centerOffset;

        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;

        if (_.options.swipeToSlide === true) {
            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
                    swipedSlide = slide;
                    return false;
                }
            });

            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;

            return slidesTraversed;

        } else {
            return _.options.slidesToScroll;
        }

    };

    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'index',
                index: parseInt(slide)
            }
        }, dontAnimate);

    };

    Slick.prototype.init = function(creation) {

        var _ = this;

        if (!$(_.$slider).hasClass('slick-initialized')) {

            $(_.$slider).addClass('slick-initialized');

            _.buildRows();
            _.buildOut();
            _.setProps();
            _.startLoad();
            _.loadSlider();
            _.initializeEvents();
            _.updateArrows();
            _.updateDots();
            _.checkResponsive(true);
            _.focusHandler();

        }

        if (creation) {
            _.$slider.trigger('init', [_]);
        }

        if (_.options.accessibility === true) {
            _.initADA();
        }

        if ( _.options.autoplay ) {

            _.paused = false;
            _.autoPlay();

        }

    };

    Slick.prototype.initADA = function() {
        var _ = this,
                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
                    return (val >= 0) && (val < _.slideCount);
                });

        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
            'aria-hidden': 'true',
            'tabindex': '-1'
        }).find('a, input, button, select').attr({
            'tabindex': '-1'
        });

        if (_.$dots !== null) {
            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
                var slideControlIndex = tabControlIndexes.indexOf(i);

                $(this).attr({
                    'role': 'tabpanel',
                    'id': 'slick-slide' + _.instanceUid + i,
                    'tabindex': -1
                });

                if (slideControlIndex !== -1) {
                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
                   if ($('#' + ariaButtonControl).length) {
                     $(this).attr({
                         'aria-describedby': ariaButtonControl
                     });
                   }
                }
            });

            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
                var mappedSlideIndex = tabControlIndexes[i];

                $(this).attr({
                    'role': 'presentation'
                });

                $(this).find('button').first().attr({
                    'role': 'tab',
                    'id': 'slick-slide-control' + _.instanceUid + i,
                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
                    'aria-label': (i + 1) + ' of ' + numDotGroups,
                    'title': 'Slide ' + (i + 1) + ' of ' + numDotGroups,
                    'aria-selected': null,
                    'tabindex': '-1'
                });

            }).eq(_.currentSlide).find('button').attr({
                'aria-selected': 'true',
                'tabindex': '0'
            }).end();
        }

        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
          if (_.options.focusOnChange) {
            _.$slides.eq(i).attr({'tabindex': '0'});
          } else {
            _.$slides.eq(i).removeAttr('tabindex');
          }
        }

        _.activateADA();

    };

    Slick.prototype.initArrowEvents = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
            _.$prevArrow
               .off('click.slick')
               .on('click.slick', {
                    message: 'previous'
               }, _.changeSlide);
            _.$nextArrow
               .off('click.slick')
               .on('click.slick', {
                    message: 'next'
               }, _.changeSlide);

            if (_.options.accessibility === true) {
                _.$prevArrow.on('keydown.slick', _.keyHandler);
                _.$nextArrow.on('keydown.slick', _.keyHandler);
            }
        }

    };

    Slick.prototype.initDotEvents = function() {

        var _ = this;

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
            $('li', _.$dots).on('click.slick', {
                message: 'index'
            }, _.changeSlide);

            if (_.options.accessibility === true) {
                _.$dots.on('keydown.slick', _.keyHandler);
            }
        }

        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {

            $('li', _.$dots)
                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));

        }

    };

    Slick.prototype.initSlideEvents = function() {

        var _ = this;

        if ( _.options.pauseOnHover ) {

            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));

        }

    };

    Slick.prototype.initializeEvents = function() {

        var _ = this;

        _.initArrowEvents();

        _.initDotEvents();
        _.initSlideEvents();

        _.$list.on('touchstart.slick mousedown.slick', {
            action: 'start'
        }, _.swipeHandler);
        _.$list.on('touchmove.slick mousemove.slick', {
            action: 'move'
        }, _.swipeHandler);
        _.$list.on('touchend.slick mouseup.slick', {
            action: 'end'
        }, _.swipeHandler);
        _.$list.on('touchcancel.slick mouseleave.slick', {
            action: 'end'
        }, _.swipeHandler);

        _.$list.on('click.slick', _.clickHandler);

        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));

        if (_.options.accessibility === true) {
            _.$list.on('keydown.slick', _.keyHandler);
        }

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
        }

        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));

        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));

        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);

        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
        $(_.setPosition);

    };

    Slick.prototype.initUI = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {

            _.$prevArrow.show();
            _.$nextArrow.show();

        }

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$dots.show();

        }

    };

    Slick.prototype.keyHandler = function(event) {

        var _ = this;
         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
            if (event.keyCode === 37 && _.options.accessibility === true) {
                _.changeSlide({
                    data: {
                        message: _.options.rtl === true ? 'next' :  'previous'
                    }
                });
            } else if (event.keyCode === 39 && _.options.accessibility === true) {
                _.changeSlide({
                    data: {
                        message: _.options.rtl === true ? 'previous' : 'next'
                    }
                });
            }
        }

    };

    Slick.prototype.lazyLoad = function() {

        var _ = this,
            loadRange, cloneRange, rangeStart, rangeEnd;

        function loadImages(imagesScope) {

            $('img[data-lazy]', imagesScope).each(function() {

                var image = $(this),
                    imageSource = $(this).attr('data-lazy'),
                    imageSrcSet = $(this).attr('data-srcset'),
                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
                    imageToLoad = document.createElement('img');

                imageToLoad.onload = function() {

                    image
                        .animate({ opacity: 0 }, 100, function() {

                            if (imageSrcSet) {
                                image
                                    .attr('srcset', imageSrcSet );

                                if (imageSizes) {
                                    image
                                        .attr('sizes', imageSizes );
                                }
                            }

                            image
                                .attr('src', imageSource)
                                .animate({ opacity: 1 }, 200, function() {
                                    image
                                        .removeAttr('data-lazy data-srcset data-sizes')
                                        .removeClass('slick-loading');
                                });
                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
                        });

                };

                imageToLoad.onerror = function() {

                    image
                        .removeAttr( 'data-lazy' )
                        .removeClass( 'slick-loading' )
                        .addClass( 'slick-lazyload-error' );

                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);

                };

                imageToLoad.src = imageSource;

            });

        }

        if (_.options.centerMode === true) {
            if (_.options.infinite === true) {
                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
                rangeEnd = rangeStart + _.options.slidesToShow + 2;
            } else {
                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
            }
        } else {
            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
            if (_.options.fade === true) {
                if (rangeStart > 0) rangeStart--;
                if (rangeEnd <= _.slideCount) rangeEnd++;
            }
        }

        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);

        if (_.options.lazyLoad === 'anticipated') {
            var prevSlide = rangeStart - 1,
                nextSlide = rangeEnd,
                $slides = _.$slider.find('.slick-slide');

            for (var i = 0; i < _.options.slidesToScroll; i++) {
                if (prevSlide < 0) prevSlide = _.slideCount - 1;
                loadRange = loadRange.add($slides.eq(prevSlide));
                loadRange = loadRange.add($slides.eq(nextSlide));
                prevSlide--;
                nextSlide++;
            }
        }

        loadImages(loadRange);

        if (_.slideCount <= _.options.slidesToShow) {
            cloneRange = _.$slider.find('.slick-slide');
            loadImages(cloneRange);
        } else
        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
            loadImages(cloneRange);
        } else if (_.currentSlide === 0) {
            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
            loadImages(cloneRange);
        }

    };

    Slick.prototype.loadSlider = function() {

        var _ = this;

        _.setPosition();

        _.$slideTrack.css({
            opacity: 1
        });

        _.$slider.removeClass('slick-loading');

        _.initUI();

        if (_.options.lazyLoad === 'progressive') {
            _.progressiveLazyLoad();
        }

    };

    Slick.prototype.next = Slick.prototype.slickNext = function() {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'next'
            }
        });

    };

    Slick.prototype.orientationChange = function() {

        var _ = this;

        _.checkResponsive();
        _.setPosition();

    };

    Slick.prototype.pause = Slick.prototype.slickPause = function() {

        var _ = this;

        _.autoPlayClear();
        _.paused = true;

    };

    Slick.prototype.play = Slick.prototype.slickPlay = function() {

        var _ = this;

        _.autoPlay();
        _.options.autoplay = true;
        _.paused = false;
        _.focussed = false;
        _.interrupted = false;

    };

    Slick.prototype.postSlide = function(index) {

        var _ = this;

        if( !_.unslicked ) {

            _.$slider.trigger('afterChange', [_, index]);

            _.animating = false;

            if (_.slideCount > _.options.slidesToShow) {
                _.setPosition();
            }

            _.swipeLeft = null;

            if ( _.options.autoplay ) {
                _.autoPlay();
            }

            if (_.options.accessibility === true) {
                _.initADA();

                if (_.options.focusOnChange) {
                    var $currentSlide = $(_.$slides.get(_.currentSlide));
                    $currentSlide.attr('tabindex', 0).focus();
                }
            }

        }

    };

    Slick.prototype.prev = Slick.prototype.slickPrev = function() {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'previous'
            }
        });

    };

    Slick.prototype.preventDefault = function(event) {

        event.preventDefault();

    };

    Slick.prototype.progressiveLazyLoad = function( tryCount ) {

        tryCount = tryCount || 1;

        var _ = this,
            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
            image,
            imageSource,
            imageSrcSet,
            imageSizes,
            imageToLoad;

        if ( $imgsToLoad.length ) {

            image = $imgsToLoad.first();
            imageSource = image.attr('data-lazy');
            imageSrcSet = image.attr('data-srcset');
            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
            imageToLoad = document.createElement('img');

            imageToLoad.onload = function() {

                if (imageSrcSet) {
                    image
                        .attr('srcset', imageSrcSet );

                    if (imageSizes) {
                        image
                            .attr('sizes', imageSizes );
                    }
                }

                image
                    .attr( 'src', imageSource )
                    .removeAttr('data-lazy data-srcset data-sizes')
                    .removeClass('slick-loading');

                if ( _.options.adaptiveHeight === true ) {
                    _.setPosition();
                }

                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
                _.progressiveLazyLoad();

            };

            imageToLoad.onerror = function() {

                if ( tryCount < 3 ) {

                    /**
                     * try to load the image 3 times,
                     * leave a slight delay so we don't get
                     * servers blocking the request.
                     */
                    setTimeout( function() {
                        _.progressiveLazyLoad( tryCount + 1 );
                    }, 500 );

                } else {

                    image
                        .removeAttr( 'data-lazy' )
                        .removeClass( 'slick-loading' )
                        .addClass( 'slick-lazyload-error' );

                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);

                    _.progressiveLazyLoad();

                }

            };

            imageToLoad.src = imageSource;

        } else {

            _.$slider.trigger('allImagesLoaded', [ _ ]);

        }

    };

    Slick.prototype.refresh = function( initializing ) {

        var _ = this, currentSlide, lastVisibleIndex;

        lastVisibleIndex = _.slideCount - _.options.slidesToShow;

        // in non-infinite sliders, we don't want to go past the
        // last visible index.
        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
            _.currentSlide = lastVisibleIndex;
        }

        // if less slides than to show, go to start.
        if ( _.slideCount <= _.options.slidesToShow ) {
            _.currentSlide = 0;

        }

        currentSlide = _.currentSlide;

        _.destroy(true);

        $.extend(_, _.initials, { currentSlide: currentSlide });

        _.init();

        if( !initializing ) {

            _.changeSlide({
                data: {
                    message: 'index',
                    index: currentSlide
                }
            }, false);

        }

    };

    Slick.prototype.registerBreakpoints = function() {

        var _ = this, breakpoint, currentBreakpoint, l,
            responsiveSettings = _.options.responsive || null;

        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {

            _.respondTo = _.options.respondTo || 'window';

            for ( breakpoint in responsiveSettings ) {

                l = _.breakpoints.length-1;

                if (responsiveSettings.hasOwnProperty(breakpoint)) {
                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;

                    // loop through the breakpoints and cut out any existing
                    // ones with the same breakpoint number, we don't want dupes.
                    while( l >= 0 ) {
                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
                            _.breakpoints.splice(l,1);
                        }
                        l--;
                    }

                    _.breakpoints.push(currentBreakpoint);
                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;

                }

            }

            _.breakpoints.sort(function(a, b) {
                return ( _.options.mobileFirst ) ? a-b : b-a;
            });

        }

    };

    Slick.prototype.reinit = function() {

        var _ = this;

        _.$slides =
            _.$slideTrack
                .children(_.options.slide)
                .addClass('slick-slide');

        _.slideCount = _.$slides.length;

        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
        }

        if (_.slideCount <= _.options.slidesToShow) {
            _.currentSlide = 0;
        }

        _.registerBreakpoints();

        _.setProps();
        _.setupInfinite();
        _.buildArrows();
        _.updateArrows();
        _.initArrowEvents();
        _.buildDots();
        _.updateDots();
        _.initDotEvents();
        _.cleanUpSlideEvents();
        _.initSlideEvents();

        _.checkResponsive(false, true);

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
        }

        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);

        _.setPosition();
        _.focusHandler();

        _.paused = !_.options.autoplay;
        _.autoPlay();

        _.$slider.trigger('reInit', [_]);

    };

    Slick.prototype.resize = function() {

        var _ = this;

        if ($(window).width() !== _.windowWidth) {
            clearTimeout(_.windowDelay);
            _.windowDelay = window.setTimeout(function() {
                _.windowWidth = $(window).width();
                _.checkResponsive();
                if( !_.unslicked ) { _.setPosition(); }
            }, 50);
        }
    };

    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {

        var _ = this;

        if (typeof(index) === 'boolean') {
            removeBefore = index;
            index = removeBefore === true ? 0 : _.slideCount - 1;
        } else {
            index = removeBefore === true ? --index : index;
        }

        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
            return false;
        }

        _.unload();

        if (removeAll === true) {
            _.$slideTrack.children().remove();
        } else {
            _.$slideTrack.children(this.options.slide).eq(index).remove();
        }

        _.$slides = _.$slideTrack.children(this.options.slide);

        _.$slideTrack.children(this.options.slide).detach();

        _.$slideTrack.append(_.$slides);

        _.$slidesCache = _.$slides;

        _.reinit();

    };

    Slick.prototype.setCSS = function(position) {

        var _ = this,
            positionProps = {},
            x, y;

        if (_.options.rtl === true) {
            position = -position;
        }
        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';

        positionProps[_.positionProp] = position;

        if (_.transformsEnabled === false) {
            _.$slideTrack.css(positionProps);
        } else {
            positionProps = {};
            if (_.cssTransitions === false) {
                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
                _.$slideTrack.css(positionProps);
            } else {
                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
                _.$slideTrack.css(positionProps);
            }
        }

    };

    Slick.prototype.setDimensions = function() {

        var _ = this;

        if (_.options.vertical === false) {
            if (_.options.centerMode === true) {
                _.$list.css({
                    padding: ('0px ' + _.options.centerPadding)
                });
            }
        } else {
            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
            if (_.options.centerMode === true) {
                _.$list.css({
                    padding: (_.options.centerPadding + ' 0px')
                });
            }
        }

        _.listWidth = _.$list.width();
        _.listHeight = _.$list.height();


        if (_.options.vertical === false && _.options.variableWidth === false) {
            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));

        } else if (_.options.variableWidth === true) {
            _.$slideTrack.width(5000 * _.slideCount);
        } else {
            _.slideWidth = Math.ceil(_.listWidth);
            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
        }

        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);

    };

    Slick.prototype.setFade = function() {

        var _ = this,
            targetLeft;

        _.$slides.each(function(index, element) {
            targetLeft = (_.slideWidth * index) * -1;
            if (_.options.rtl === true) {
                $(element).css({
                    position: 'relative',
                    right: targetLeft,
                    top: 0,
                    zIndex: _.options.zIndex - 2,
                    opacity: 0
                });
            } else {
                $(element).css({
                    position: 'relative',
                    left: targetLeft,
                    top: 0,
                    zIndex: _.options.zIndex - 2,
                    opacity: 0
                });
            }
        });

        _.$slides.eq(_.currentSlide).css({
            zIndex: _.options.zIndex - 1,
            opacity: 1
        });

    };

    Slick.prototype.setHeight = function() {

        var _ = this;

        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
            _.$list.css('height', targetHeight);
        }

    };

    Slick.prototype.setOption =
    Slick.prototype.slickSetOption = function() {

        /**
         * accepts arguments in format of:
         *
         *  - for changing a single option's value:
         *     .slick("setOption", option, value, refresh )
         *
         *  - for changing a set of responsive options:
         *     .slick("setOption", 'responsive', [{}, ...], refresh )
         *
         *  - for updating multiple values at once (not responsive)
         *     .slick("setOption", { 'option': value, ... }, refresh )
         */

        var _ = this, l, item, option, value, refresh = false, type;

        if( $.type( arguments[0] ) === 'object' ) {

            option =  arguments[0];
            refresh = arguments[1];
            type = 'multiple';

        } else if ( $.type( arguments[0] ) === 'string' ) {

            option =  arguments[0];
            value = arguments[1];
            refresh = arguments[2];

            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {

                type = 'responsive';

            } else if ( typeof arguments[1] !== 'undefined' ) {

                type = 'single';

            }

        }

        if ( type === 'single' ) {

            _.options[option] = value;


        } else if ( type === 'multiple' ) {

            $.each( option , function( opt, val ) {

                _.options[opt] = val;

            });


        } else if ( type === 'responsive' ) {

            for ( item in value ) {

                if( $.type( _.options.responsive ) !== 'array' ) {

                    _.options.responsive = [ value[item] ];

                } else {

                    l = _.options.responsive.length-1;

                    // loop through the responsive object and splice out duplicates.
                    while( l >= 0 ) {

                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {

                            _.options.responsive.splice(l,1);

                        }

                        l--;

                    }

                    _.options.responsive.push( value[item] );

                }

            }

        }

        if ( refresh ) {

            _.unload();
            _.reinit();

        }

    };

    Slick.prototype.setPosition = function() {

        var _ = this;

        _.setDimensions();

        _.setHeight();

        if (_.options.fade === false) {
            _.setCSS(_.getLeft(_.currentSlide));
        } else {
            _.setFade();
        }

        _.$slider.trigger('setPosition', [_]);

    };

    Slick.prototype.setProps = function() {

        var _ = this,
            bodyStyle = document.body.style;

        _.positionProp = _.options.vertical === true ? 'top' : 'left';

        if (_.positionProp === 'top') {
            _.$slider.addClass('slick-vertical');
        } else {
            _.$slider.removeClass('slick-vertical');
        }

        if (bodyStyle.WebkitTransition !== undefined ||
            bodyStyle.MozTransition !== undefined ||
            bodyStyle.msTransition !== undefined) {
            if (_.options.useCSS === true) {
                _.cssTransitions = true;
            }
        }

        if ( _.options.fade ) {
            if ( typeof _.options.zIndex === 'number' ) {
                if( _.options.zIndex < 3 ) {
                    _.options.zIndex = 3;
                }
            } else {
                _.options.zIndex = _.defaults.zIndex;
            }
        }

        if (bodyStyle.OTransform !== undefined) {
            _.animType = 'OTransform';
            _.transformType = '-o-transform';
            _.transitionType = 'OTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.MozTransform !== undefined) {
            _.animType = 'MozTransform';
            _.transformType = '-moz-transform';
            _.transitionType = 'MozTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.webkitTransform !== undefined) {
            _.animType = 'webkitTransform';
            _.transformType = '-webkit-transform';
            _.transitionType = 'webkitTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.msTransform !== undefined) {
            _.animType = 'msTransform';
            _.transformType = '-ms-transform';
            _.transitionType = 'msTransition';
            if (bodyStyle.msTransform === undefined) _.animType = false;
        }
        if (bodyStyle.transform !== undefined && _.animType !== false) {
            _.animType = 'transform';
            _.transformType = 'transform';
            _.transitionType = 'transition';
        }
        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
    };


    Slick.prototype.setSlideClasses = function(index) {

        var _ = this,
            centerOffset, allSlides, indexOffset, remainder;

        allSlides = _.$slider
            .find('.slick-slide')
            .removeClass('slick-active slick-center slick-current')
            .attr('aria-hidden', 'true');

        _.$slides
            .eq(index)
            .addClass('slick-current');

        if (_.options.centerMode === true) {

            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;

            centerOffset = Math.floor(_.options.slidesToShow / 2);

            if (_.options.infinite === true) {

                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
                    _.$slides
                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                } else {

                    indexOffset = _.options.slidesToShow + index;
                    allSlides
                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                }

                if (index === 0) {

                    allSlides
                        .eq(allSlides.length - 1 - _.options.slidesToShow)
                        .addClass('slick-center');

                } else if (index === _.slideCount - 1) {

                    allSlides
                        .eq(_.options.slidesToShow)
                        .addClass('slick-center');

                }

            }

            _.$slides
                .eq(index)
                .addClass('slick-center');

        } else {

            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {

                _.$slides
                    .slice(index, index + _.options.slidesToShow)
                    .addClass('slick-active')
                    .attr('aria-hidden', 'false');

            } else if (allSlides.length <= _.options.slidesToShow) {

                allSlides
                    .addClass('slick-active')
                    .attr('aria-hidden', 'false');

            } else {

                remainder = _.slideCount % _.options.slidesToShow;
                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;

                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {

                    allSlides
                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                } else {

                    allSlides
                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                }

            }

        }

        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
            _.lazyLoad();
        }
    };

    Slick.prototype.setupInfinite = function() {

        var _ = this,
            i, slideIndex, infiniteCount;

        if (_.options.fade === true) {
            _.options.centerMode = false;
        }

        if (_.options.infinite === true && _.options.fade === false) {

            slideIndex = null;

            if (_.slideCount > _.options.slidesToShow) {

                if (_.options.centerMode === true) {
                    infiniteCount = _.options.slidesToShow + 1;
                } else {
                    infiniteCount = _.options.slidesToShow;
                }

                for (i = _.slideCount; i > (_.slideCount -
                        infiniteCount); i -= 1) {
                    slideIndex = i - 1;
                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
                        .attr('data-slick-index', slideIndex - _.slideCount)
                        .prependTo(_.$slideTrack).addClass('slick-cloned');
                }
                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
                    slideIndex = i;
                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
                        .attr('data-slick-index', slideIndex + _.slideCount)
                        .appendTo(_.$slideTrack).addClass('slick-cloned');
                }
                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
                    $(this).attr('id', '');
                });

            }

        }

    };

    Slick.prototype.interrupt = function( toggle ) {

        var _ = this;

        if( !toggle ) {
            _.autoPlay();
        }
        _.interrupted = toggle;

    };

    Slick.prototype.selectHandler = function(event) {

        var _ = this;

        var targetElement =
            $(event.target).is('.slick-slide') ?
                $(event.target) :
                $(event.target).parents('.slick-slide');

        var index = parseInt(targetElement.attr('data-slick-index'));

        if (!index) index = 0;

        if (_.slideCount <= _.options.slidesToShow) {

            _.slideHandler(index, false, true);
            return;

        }

        _.slideHandler(index);

    };

    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {

        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
            _ = this, navTarget;

        sync = sync || false;

        if (_.animating === true && _.options.waitForAnimate === true) {
            return;
        }

        if (_.options.fade === true && _.currentSlide === index) {
            return;
        }

        if (sync === false) {
            _.asNavFor(index);
        }

        targetSlide = index;
        targetLeft = _.getLeft(targetSlide);
        slideLeft = _.getLeft(_.currentSlide);

        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;

        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
            if (_.options.fade === false) {
                targetSlide = _.currentSlide;
                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
                    _.animateSlide(slideLeft, function() {
                        _.postSlide(targetSlide);
                    });
                } else {
                    _.postSlide(targetSlide);
                }
            }
            return;
        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
            if (_.options.fade === false) {
                targetSlide = _.currentSlide;
                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
                    _.animateSlide(slideLeft, function() {
                        _.postSlide(targetSlide);
                    });
                } else {
                    _.postSlide(targetSlide);
                }
            }
            return;
        }

        if ( _.options.autoplay ) {
            clearInterval(_.autoPlayTimer);
        }

        if (targetSlide < 0) {
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
            } else {
                animSlide = _.slideCount + targetSlide;
            }
        } else if (targetSlide >= _.slideCount) {
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                animSlide = 0;
            } else {
                animSlide = targetSlide - _.slideCount;
            }
        } else {
            animSlide = targetSlide;
        }

        _.animating = true;

        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);

        oldSlide = _.currentSlide;
        _.currentSlide = animSlide;

        _.setSlideClasses(_.currentSlide);

        if ( _.options.asNavFor ) {

            navTarget = _.getNavTarget();
            navTarget = navTarget.slick('getSlick');

            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
                navTarget.setSlideClasses(_.currentSlide);
            }

        }

        _.updateDots();
        _.updateArrows();

        if (_.options.fade === true) {
            if (dontAnimate !== true) {

                _.fadeSlideOut(oldSlide);

                _.fadeSlide(animSlide, function() {
                    _.postSlide(animSlide);
                });

            } else {
                _.postSlide(animSlide);
            }
            _.animateHeight();
            return;
        }

        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
            _.animateSlide(targetLeft, function() {
                _.postSlide(animSlide);
            });
        } else {
            _.postSlide(animSlide);
        }

    };

    Slick.prototype.startLoad = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {

            _.$prevArrow.hide();
            _.$nextArrow.hide();

        }

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$dots.hide();

        }

        _.$slider.addClass('slick-loading');

    };

    Slick.prototype.swipeDirection = function() {

        var xDist, yDist, r, swipeAngle, _ = this;

        xDist = _.touchObject.startX - _.touchObject.curX;
        yDist = _.touchObject.startY - _.touchObject.curY;
        r = Math.atan2(yDist, xDist);

        swipeAngle = Math.round(r * 180 / Math.PI);
        if (swipeAngle < 0) {
            swipeAngle = 360 - Math.abs(swipeAngle);
        }

        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
            return (_.options.rtl === false ? 'left' : 'right');
        }
        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
            return (_.options.rtl === false ? 'left' : 'right');
        }
        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
            return (_.options.rtl === false ? 'right' : 'left');
        }
        if (_.options.verticalSwiping === true) {
            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
                return 'down';
            } else {
                return 'up';
            }
        }

        return 'vertical';

    };

    Slick.prototype.swipeEnd = function(event) {

        var _ = this,
            slideCount,
            direction;

        _.dragging = false;
        _.swiping = false;

        if (_.scrolling) {
            _.scrolling = false;
            return false;
        }

        _.interrupted = false;
        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;

        if ( _.touchObject.curX === undefined ) {
            return false;
        }

        if ( _.touchObject.edgeHit === true ) {
            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
        }

        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {

            direction = _.swipeDirection();

            switch ( direction ) {

                case 'left':
                case 'down':

                    slideCount =
                        _.options.swipeToSlide ?
                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
                            _.currentSlide + _.getSlideCount();

                    _.currentDirection = 0;

                    break;

                case 'right':
                case 'up':

                    slideCount =
                        _.options.swipeToSlide ?
                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
                            _.currentSlide - _.getSlideCount();

                    _.currentDirection = 1;

                    break;

                default:


            }

            if( direction != 'vertical' ) {

                _.slideHandler( slideCount );
                _.touchObject = {};
                _.$slider.trigger('swipe', [_, direction ]);

            }

        } else {

            if ( _.touchObject.startX !== _.touchObject.curX ) {

                _.slideHandler( _.currentSlide );
                _.touchObject = {};

            }

        }

    };

    Slick.prototype.swipeHandler = function(event) {

        var _ = this;

        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
            return;
        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
            return;
        }

        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
            event.originalEvent.touches.length : 1;

        _.touchObject.minSwipe = _.listWidth / _.options
            .touchThreshold;

        if (_.options.verticalSwiping === true) {
            _.touchObject.minSwipe = _.listHeight / _.options
                .touchThreshold;
        }

        switch (event.data.action) {

            case 'start':
                _.swipeStart(event);
                break;

            case 'move':
                _.swipeMove(event);
                break;

            case 'end':
                _.swipeEnd(event);
                break;

        }

    };

    Slick.prototype.swipeMove = function(event) {

        var _ = this,
            edgeWasHit = false,
            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;

        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;

        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
            return false;
        }

        curLeft = _.getLeft(_.currentSlide);

        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;

        _.touchObject.swipeLength = Math.round(Math.sqrt(
            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));

        verticalSwipeLength = Math.round(Math.sqrt(
            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));

        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
            _.scrolling = true;
            return false;
        }

        if (_.options.verticalSwiping === true) {
            _.touchObject.swipeLength = verticalSwipeLength;
        }

        swipeDirection = _.swipeDirection();

        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
            _.swiping = true;
            event.preventDefault();
        }

        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
        if (_.options.verticalSwiping === true) {
            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
        }


        swipeLength = _.touchObject.swipeLength;

        _.touchObject.edgeHit = false;

        if (_.options.infinite === false) {
            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
                _.touchObject.edgeHit = true;
            }
        }

        if (_.options.vertical === false) {
            _.swipeLeft = curLeft + swipeLength * positionOffset;
        } else {
            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
        }
        if (_.options.verticalSwiping === true) {
            _.swipeLeft = curLeft + swipeLength * positionOffset;
        }

        if (_.options.fade === true || _.options.touchMove === false) {
            return false;
        }

        if (_.animating === true) {
            _.swipeLeft = null;
            return false;
        }

        _.setCSS(_.swipeLeft);

    };

    Slick.prototype.swipeStart = function(event) {

        var _ = this,
            touches;

        _.interrupted = true;

        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
            _.touchObject = {};
            return false;
        }

        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
            touches = event.originalEvent.touches[0];
        }

        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;

        _.dragging = true;

    };

    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {

        var _ = this;

        if (_.$slidesCache !== null) {

            _.unload();

            _.$slideTrack.children(this.options.slide).detach();

            _.$slidesCache.appendTo(_.$slideTrack);

            _.reinit();

        }

    };

    Slick.prototype.unload = function() {

        var _ = this;

        $('.slick-cloned', _.$slider).remove();

        if (_.$dots) {
            _.$dots.remove();
        }

        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
            _.$prevArrow.remove();
        }

        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
            _.$nextArrow.remove();
        }

        _.$slides
            .removeClass('slick-slide slick-active slick-visible slick-current')
            .attr('aria-hidden', 'true')
            .css('width', '');

    };

    Slick.prototype.unslick = function(fromBreakpoint) {

        var _ = this;
        _.$slider.trigger('unslick', [_, fromBreakpoint]);
        _.destroy();

    };

    Slick.prototype.updateArrows = function() {

        var _ = this,
            centerOffset;

        centerOffset = Math.floor(_.options.slidesToShow / 2);

        if ( _.options.arrows === true &&
            _.slideCount > _.options.slidesToShow &&
            !_.options.infinite ) {

            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            if (_.currentSlide === 0) {

                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {

                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {

                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            }

        }

    };

    Slick.prototype.updateDots = function() {

        var _ = this;

        if (_.$dots !== null) {

            _.$dots
                .find('li')
                    .removeClass('slick-active')
                    .end();

            _.$dots
                .find('li')
                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
                .addClass('slick-active');

        }

    };

    Slick.prototype.visibility = function() {

        var _ = this;

        if ( _.options.autoplay ) {

            if ( document[_.hidden] ) {

                _.interrupted = true;

            } else {

                _.interrupted = false;

            }

        }

    };

    $.fn.slick = function() {
        var _ = this,
            opt = arguments[0],
            args = Array.prototype.slice.call(arguments, 1),
            l = _.length,
            i,
            ret;
        for (i = 0; i < l; i++) {
            if (typeof opt == 'object' || typeof opt == 'undefined')
                _[i].slick = new Slick(_[i], opt);
            else
                ret = _[i].slick[opt].apply(_[i].slick, args);
            if (typeof ret != 'undefined') return ret;
        }
        return _;
    };

}));
;
'use strict';
var page = {};

function initPage() {
    page.window = $(window);
    page.document = $(document);
    page.body = $('body');
    page.head = $('head');
}

//TODO: nav toggle
var becu = {
    responsiveState: 'mobile',
    responsiveStateNum: 1,
    defaultImgSrc: '/images/clear.gif',
    warnOffsiteLinks: true,
    loggedInStatus: false,
    loginSubmitOpenaccount: '',
    loginSubmitOpenaccountURL: '',
    loginSubmitApply: '',
    loginSubmitApplyURL: '',
    isMember: function () {
        if (becu.cookie.read("is_becu_member")) {
            return becu.cookie.read("is_becu_member");
        }
        else {
            return false;
        }
    },
    windowResize: function () {
        try {
            var previousState = becu.responsiveState;
            becu.responsiveState = page.head.css('font-family').replace('"', '').replace('"', '');
            becu.responsiveStateNum = becu.responsiveStateToNum(becu.responsiveState);
            findLocationResize();
            if (previousState !== becu.responsiveState) {
                becu.responsiveStateChange(previousState, becu.responsiveState);
            }
        }
        catch (err) { }
    },
    windowScroll: function () {
        //make basic page connect links sticky on mobile
        if (page.body.hasClass('pagetype-basic') && becu.responsiveStateNum < 2) {
            var fixedParent = $('.fixedparent');
            if (isInView('.scrollmarker')) {
                fixedParent.removeClass('active');
            } else {
                if (fixedParent.height() < page.window.height() - 339) {
                    fixedParent.addClass('active');
                }
            }
        }
    },
    responsiveStateToNum: function (state) {
        var stateNum = 1;
        if (state === 'mobile') {
            stateNum = 1;
        }
        if (state === 'tablet') {
            stateNum = 2;
        }
        if (state === 'desktop') {
            stateNum = 3;
        }
        if (state === 'widescreen') {
            stateNum = 4;
        }
        return stateNum;
    },
    responsiveNumToState: function (num) {
        var state = 'mobile';
        if (num === 1) {
            state = 'mobile';
        }
        if (num === 2) {
            state = 'tablet';
        }
        if (num === 3) {
            state = 'desktop';
        }
        if (num === 4) {
            state = 'widescreen';
        }
        return state;
    },
    responsiveStateChange: function (fromState, toState) {
        $('nav .navbar-toggler').not('.collapsed').trigger('click');
        $('.component-filter-subnav.open .clickable').trigger('click');

        if (toState === 'mobile') {
            componentTableMobile();
            componentCaseStudy();
            adjustSubnavOffset();
        }
        if (toState === 'tablet') {
            componentCaseStudy();
            adjustSubnavOffset();
        }
        if (toState === 'desktop' || toState === 'widescreen') {
            addBackgroundVideo();
        }
        //##ImgApproach2
        becu.imgUpdate();
    },
    imgUpdate: function () {
        $('img').each(function () {
            var img = $(this);

            // By definition, our responsive images have no SRC attribute in the original markup
            // We must assure that all those images have at least a data-img-mobile attribute
            if (!img.is('[src]') && !img.is('[data-img-mobile]')) {
                img.attr('data-img-mobile', becu.defaultImgSrc);
            }

            var largestAllowedSrc;
            // Repeat for every breakpoint smaller than or equal to the current one
            for (var i = 1; i <= becu.responsiveStateNum; i++) {
                var attr = 'data-img-' + becu.responsiveNumToState(i);
                if (img.is('[' + attr + ']')) largestAllowedSrc = img.attr(attr);
            }

            img.attr('src', largestAllowedSrc);
        });
    },
    navShow: function () {
        becu.subnavHide();
        window.scrollTo(0, 0);
        $('.modal-backdrop.in').show();
        $('.modal-backdrop.in').on('click', function () {
            $('nav .navbar-toggler').trigger('click');
            $('.modal-backdrop.in').off('click');
        });
    },
    navHide: function () {
        $('.modal-backdrop.in').hide();
        $('.modal-backdrop.in').off('click');
    },
    subnavShow: function () {
        window.scrollTo(0, 0);
        $('nav .component-filter-subnav').addClass('open');
        $('.modal-backdrop.in').show();
    },
    subnavHide: function () {
        $('nav .component-filter-subnav.open').removeClass('open');
        $('.col-lg-4 .component-filter-subnav').show();
        $('.modal-backdrop.in').hide();
    },
    subnavDropDownShow: function () {
        window.scrollTo(0, 0);
        $('nav .component-filter-subnav').addClass('open');
        $('#componentDropDownFilterWrapper').hide();
        $('.modal-backdrop.in').show();
    },
    subnavDropDownHide: function () {
        $('nav .component-filter-subnav.open').removeClass('open');
        $('#componentDropDownFilterWrapper').show();
        $('.modal-backdrop.in').hide();
    },
    iframeResize: function (target, size) {
        //if there is at least one iframe present
        if ($('iframe').length) {
            //resize the height of specified iframe, according to size variable
            $(target).height(size);
        }
    },
    findIframe: function (source) {
        var iframes = document.getElementsByTagName('iframe');
        for (var i in iframes) {
            if (iframes[i].contentWindow === source && $(iframes[i]).hasClass('thirdparty-iframe')) {
                return iframes[i];
            }
        }
        return null;
    },
    setIframe: function (event) {
        var iFrame = becu.findIframe(event.source);
        if (iFrame === null) { return }
        var message = JSON.parse(event.data);
        if (message.height === null) { return }
        var desiredHeight = message.height;
        iFrame.height = desiredHeight + 1;
    },
    pageLoadFns: [],
    onPageLoad: function (fn) {
        becu.pageLoadFns.push(fn);
    },
    initJS: function () {
        var total = becu.pageLoadFns.length;
        for (var i = 0; i < total; i++) {
            becu.pageLoadFns.pop()();
        }
    },
    cookie: {
        write: function (name, value, days) {
            var expires = '';
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                var expires = '; expires=' + date.toGMTString();
            }
            document.cookie = name + '=' + value + expires + '; path=/';
        },
        read: function (name) {
            var nameEQ = name + '=';
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i].trim();
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
            }
            return null;
        },
        clear: function (name) {
            becu.cookie.write(name, '', -1);
        }
    }
};

function componentSectionFilters() {
    if ($('.component-filtered-section').length) {
        $('.filtered-section-filters ul').each(function () {
            var list = $(this).addClass('expanded');
            var items = list.find('li');

            list.on('click', function () {
                if (list.is('.expanded')) {
                    list.removeClass('expanded');
                } else {
                    list.addClass('expanded');
                }
            });

            items.find('a').on('click', function (e) {
                if (list.is('.expanded') || becu.responsiveState !== 'mobile') {
                    e.stopPropagation();
                    var $this = $(this);

                    list.removeClass('expanded');
                    items.removeClass('active');
                    $this.parent().addClass('active');

                    var id = $this.attr('href').substr(1);
                    var container = $this.parents('.component-filtered-section');
                    if (id === 'all') {
                        // Show all containers
                        container.find('[data-filter-ids]').show();
                    } else {
                        // Hide all containers and show only selected
                        container.find('[data-filter-ids]').hide();
                        container.find('[data-filter-ids~="' + id + '"]').show();
                    }
                }
            });

            // Default selected filter is the first one, unless the location hash specifies otherwise
            var autoFilter = items.first().find('a');
            if (location.hash) {
                var hash = location.hash.substr(1);
                var existingFilter = items.find('a[href="#' + hash + '"]');
                if (existingFilter.length > 0) {
                    autoFilter = existingFilter;
                }
            }
            autoFilter.trigger('click');
        });
    }
}

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

function updateUrlParameter(uri, key, value) {
    // remove the hash part before operating on the uri
    var i = uri.indexOf('#');
    var hash = i === -1 ? '' : uri.substr(i);
    uri = i === -1 ? uri : uri.substr(0, i);

    var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
    var separator = uri.indexOf('?') !== -1 ? "&" : "?";
    if (uri.match(re)) {
        uri = uri.replace(re, '$1' + key + "=" + value + '$2');
    } else {
        uri = uri + separator + key + "=" + value;
    }
    return uri + hash;  // finally append the hash as well
}

function UpdateLogoImgUrlInSEOSchema() {

    // Get the logo image src from the DOM
    const logoImg = document.querySelector('.logo-becu img');
    const logoSrc = logoImg ? logoImg.getAttribute('src') : null;
    const fullLogoUrl = logoSrc ? new URL(logoSrc, window.location.origin).href : null;


    // Get the og:image content
    const ogImage = document.querySelector('meta[property="og:image"]')?.getAttribute('content');
    const fullOgImageUrl = ogImage ? new URL(ogImage, window.location.origin).href : null;


    // Update JSON-LD script   
    const jsonLdScript = document.querySelector('script[type="application/ld+json"]');
    if (jsonLdScript) {
        const jsonData = JSON.parse(jsonLdScript.textContent);

        jsonData['@graph'].forEach(item => {
            if (item.logo && fullLogoUrl) {
                item.logo.url = fullLogoUrl;
            }

            if (item.image && fullOgImageUrl) {
                item.image.url = fullOgImageUrl;
            }
        });

        // Replace the script content with updated JSON
        jsonLdScript.textContent = JSON.stringify(jsonData, null, 2);
    }
}

function initArticlesFilter(colClass) {
    function normalizeCategory(category) {
        if (category == null) {
            return '';
        }

        return category.toLowerCase().trim().replace(/\W/g, '-');
    }

    var headers = $(colClass + ' .component-heading').sort(function alphaSort(a, b) {
        return $(a).text().trim() > $(b).text().trim() ? 1 : -1;
    });

    function categorySelected(category) {

        var selectedCategory = normalizeCategory(category);

        if (selectedCategory == 'all') {
            $(colClass + ' > h2, ' + colClass + ' > div')
                .filter(function categoryFilter() {
                    return $(this).data('category');
                })
                .show();
        } else {
            $(colClass + ' > h2, ' + colClass + ' > div')
                .filter(function categoryFilter() {
                    return $(this).data('category');
                })
                .each(function eachElement(index, el) {
                    var $el = $(el);
                    if ($el.data('category') == selectedCategory) {
                        $el.show();
                    } else {
                        $el.hide();
                    }
                });
        }
    };

    var select = $('<select class="article-filter"/>');
    select.css('margin-bottom', '20px');
    select.css('padding', '5px');

    select.append('<option value="all">All Categories</option>');

    for (var i = 0; i < headers.length; i++) {
        var currentHeader = $(headers[i]);
        var headerName = currentHeader.text().trim(),
            normalizedHeaderName = normalizeCategory(headerName);

        currentHeader.data('category', normalizedHeaderName);

        select.append('<option value="' + normalizedHeaderName + '">' + headerName + '</option>');

        var nextElement = $(currentHeader).next();
        while (nextElement.length && !nextElement.hasClass('component-heading')) {
            nextElement.data('category', normalizedHeaderName);

            nextElement = nextElement.next();
        }
    }

    function updateQueryStringAndSelectedCategory(category) {
        window.history.replaceState({}, document.title, updateUrlParameter(window.location.href, 'cat', category));
        categorySelected(category);
    }

    $(colClass).on('change', 'select.article-filter', function () { updateQueryStringAndSelectedCategory(this.value) });

    $(colClass).prepend(select);

    function updateFromQueryString() {
        var category = normalizeCategory(getParameterByName('cat'));

        var options = select.find('option');

        for (var i = 0; i < options.length; i++) {
            if (options[i].value === category) {
                select[0].value = category;
                categorySelected(category)
                options[i].selected = 'selected';
                break;
            }
        }
    }

    updateFromQueryString();
}

function replaceImageWithSvg() {

    var each = function (i, elem) {
        var $img = jQuery(this);
        var imgID = $img.attr('id');
        var imgClass = $img.attr('class');
        var imgURL = $img.attr('src');

        jQuery.get(imgURL, function (data) {
            var $svg = jQuery(data).find('svg');

            if ($svg.find('image').length > 0) {
                return;
            }

            // Remove pre-populated title from SVG. If a title is needed, put it on the container for the SVG.
            $svg.find('title').remove();

            // Add replaced image's ID to the new SVG
            if (typeof imgID !== 'undefined') {
                $svg = $svg.attr('id', imgID);
            }
            // Add replaced image's classes to the new SVG
            if (typeof imgClass !== 'undefined') {
                $svg = $svg.attr('class', imgClass + ' replaced-svg');
            }

            // Add focusable="false" for ie double tab focus story
            $svg = $svg.attr('focusable', false);

            // Remove any invalid XML tags as per http://validator.w3.org
            $svg = $svg.removeAttr('xmlns:a');

            $img.replaceWith($svg);
        }, 'xml');
    }

    $('.benefit-tile.hover-effect a img.svg').each(each);
    $('.footer-social img').each(each);
    $('.becu-alert-info img').each(each);
    $('.alert img').each(each);
    $('.component-social img').each(each);
    //$('img[src*=".svg"]').each(each);
}

function hideTitlesInMeganav() {
    $(".megamenu")
        .on('mouseenter',
            '.mega-dropdown-menu a',
            function saveTitle() {
                var $this = $(this);
                $this.attr("data-title", $this.attr("title"));
                $this.removeAttr("title");
            });
    $('.megamenu')
        .on('mouseleave',
            '.mega-dropdown-menu a',
            function restoreTitle() {
                var $this = $(this);
                $this.attr("title", $this.attr("data-title"));
                $this.removeAttr("data-title");
            });
}

function componentDropdownFilters() {
    if ($('.component-dropdown-section').length) {
        $('.filtered-section-filters select').change(function () {
            //TODO: look into .filter() as an alternative.
            var id = $('.filter_menu option:selected').attr('value');
            //var construction = $('#construction_specialists');

            var container = $(this).parents('.component-dropdown-section');
            if (id === 'all') {
                // Show all advisors
                //if (construction.prop('checked')) {
                //    $('.construction').show();
                //} else {
                container.find('[data-filter-ids]').show();
                // Enable contruction specialist checkbox
                construction.prop("disabled", false);
                //}
            } else {
                // Hide all containers and show only selected
                container.find('[data-filter-ids]').hide();

                //if (construction.prop('checked')) {
                //    $('.construction').each(function () {
                //        var $this = $(this);
                //        if ($this.attr('data-filter-ids') == id) {
                //            $this.show();
                //        }
                //    });
                //} else {
                container.find('[data-filter-ids~="' + id + '"]').show();
                // Disable contruction specialist checkbox
                //construction.prop("disabled", true);

                // Enable contruction specialist checkbox if there is one in the select location
                //container.find('[data-filter-ids~="' + id + '"]').each(function () {
                //    if ($(this).hasClass("construction")) {
                //        construction.prop("disabled", false);
                //        return false;
                //    }
                //});
                //}
            }
        });

        //$('#construction_specialists').change(function () {
        //    var id = $('.filter_menu option:selected').attr('value');

        //    var container = $(this).parents('.component-dropdown-section');

        //    if ($(this).prop('checked')) {
        //        // Hide all advisors
        //        container.find('[data-filter-ids]').hide();

        //        // Disable all drop down menu items
        //        $('.filter_menu option:not(:first)').prop("disabled", true);

        //        if (id === 'all') {
        //            // Show all construction advisors
        //            $('.construction').show();

        //            // Enable drop down menu items that have construction specialists
        //            $('.construction').each(function () {
        //                var filterid = $(this).attr('data-filter-ids');
        //                $('.filter_menu option[value="' + filterid + '"]').prop("disabled", false);
        //            });
        //        } else {
        //            // Show only construction advisors that match drop down
        //            $('.construction').each(function () {
        //                var $this = $(this);
        //                if ($this.attr('data-filter-ids') == id) {
        //                    $this.show();
        //                }
        //                // Enable drop down menu items that have construction specialists
        //                var filterid = $(this).attr('data-filter-ids');
        //                $('.filter_menu option[value="' + filterid + '"]').prop("disabled", false);
        //            });
        //            // always keep "all cities" enabled
        //            $('.filter_menu option[value="all"]').prop("disabled", false);
        //        }
        //    } else {
        //        if (id === 'all') {
        //            // Show all advisors
        //            container.find('[data-filter-ids]').show();
        //        } else {
        //            // Show only advisors that match drop down
        //            container.find('[data-filter-ids~="' + id + '"]').show();
        //        }
        //        // Enable all drop down menu items
        //        $('.filter_menu option').prop("disabled", false);
        //    }
        //});
    }
}

function componentTableMobile() {
    //set up mobile tables only if viewport is mobile, table component exists on page, and they haven't already been set up
    if (becu.responsiveStateNum < 2 && $('.component-table').length && !($('.component-table .table-mobile').length)) {
        //Duplicate table markup for single-column mobile view
        $('.component-table').each(function () {
            var container = $(this);
            var table = container.find('table').clone();
            var hasColHeaders = table.find('thead th').length > 0 ? true : false;
            var hasRowHeaders = table.find('tbody th').length > 0 ? true : false;
            var mobileTable = $('<table/>').addClass('table-mobile');

            //Scrape headers
            var colHeaders = [];
            if (hasColHeaders) {
                table.find('thead tr th').each(function () {
                    colHeaders.push($(this));
                });
            }

            //Append caption
            mobileTable.append(table.find('caption'));

            //Append rows
            var rowTemplate = $('<tr/>');
            table.find('tbody tr').each(function () {
                var row = $(this);
                if (hasRowHeaders) {
                    mobileTable.append(rowTemplate.clone().append(row.find('th')));
                }
                row.find('td').each(function (i) {
                    var rowClone = rowTemplate.clone();
                    var td = $(this);
                    var content = td.html().trim();

                    if (hasColHeaders && content.length > 0) {
                        var th = colHeaders[i].clone();
                        mobileTable.append(rowTemplate.clone().append(th));
                    }

                    if (td.is(':last-child')) { rowClone.addClass('last-child'); }
                    if (td.is(':first-child')) { rowClone.addClass('first-child'); }
                    if (content.length === 0) { rowClone.addClass('empty'); }
                    mobileTable.append(rowClone.append(td));
                });
            });

            container.append(mobileTable);
        });
    }
}

function componentCaseStudy() {
    //set up mobile case study play button only if viewport is tablet or lower, case study component exists on page, and they haven't already been set up
    if (becu.responsiveStateNum < 3 && $('.component-casestudy').length && !($('.component-casestudy .promo-details .promo-hero .promo-play').length)) {
        /* get all of the case study components */
        $('.promo-callout a.promo-play').each(function () {
            var buttoncta = $(this);
            /* clone the play buttons */
            var playbtn = buttoncta.clone();
            /* insert cloned elements into carousel element */
            $(this).parents().siblings('.promo-hero').append(playbtn);
        });
    }
}

function socialSharing() {
    var footerTwitter = $('.component-social .twitter');
    //var footerTwitterHref = footerTwitter.attr('href');
    //footerTwitterHref += '?text=' + escape(footerTwitter.attr('data-share-text'));
    //footerTwitterHref += '&url=' + escape(location.href);
    //footerTwitter.attr('href', footerTwitterHref);

    $('.component-social .facebook').on('click', function (e) {
        e.preventDefault();
        var features = 'width=640,height=480';
        var url = $(this).attr('href');
        url += '?u=' + escape(location.href);
        window.open(url, 'facebook_share', features);
    });

    $('.component-social .mail').attr('href', 'mailto:?subject=' + escape($('#hdnDataShareText').val()) + '&body=' + escape(location.href));
}

function isInView(elem) {
    if ($(elem).length) {
        var docViewTop = page.window.scrollTop();
        var docViewBottom = docViewTop + page.window.height();
        var elemTop = $(elem).offset().top;
        var elemBottom = elemTop + $(elem).height();
        return (elemBottom >= docViewTop); //returns FALSE if user has scrolled completely past given element
        //return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); //top visible
        //return ((docViewTop < elemTop) && (docViewBottom > elemBottom)); //fully visible
    } else {
        return false;
    }
}

function componentFilterSubnav() {
    var $componentFilterSubnav = $('.component-filter-subnav');
    if ($componentFilterSubnav.length) {
        if (becu.responsiveStateNum < 3) {
            adjustSubnavOffset();
        }
        $componentFilterSubnav.clone(true).appendTo('nav');
        $componentFilterSubnav = $('.component-filter-subnav');
        $componentFilterSubnav.find('.clickable').on('click', function () {
            var $componentRoot = $('nav .component-filter-subnav');
            if ($componentRoot.hasClass('open')) {
                becu.subnavHide();
            } else {
                becu.subnavShow();
            }
        });
        $componentFilterSubnav.find('.active a').on('click', function (e) {
            e.preventDefault();
        });

        $componentFilterSubnav.find('.search-field .icon').on('click', function () {
            var e = $.Event('keyup');
            e.keyCode = 13; // enter
            $('input').trigger(e);
        });
    }
}

function componentFilterSubnavDropDown() {
    if ($('.component-filter-subnav').length) {
        if (becu.responsiveStateNum < 3) {
            adjustSubnavOffset();
        }
        $('#componentDropDownFilter').clone(true).appendTo('nav');
        $('.component-filter-subnav .clickable').on('click', function () {
            var $componentRoot = $('nav .component-filter-subnav');
            if ($componentRoot.hasClass('open')) {
                becu.subnavDropDownHide();
            } else {
                becu.subnavDropDownShow();
            }
        });
    }
}

function adjustSubnavOffset() {
    if ($('.component-filter-subnav').length) {
        var displacement = ($('.col-lg-4 .component-filter-subnav').offset().top * -1) + 75;
        if (becu.responsiveStateNum === 1) {
            displacement = displacement - 25;
        }
        //console.log('subnav displacement ' + displacement);
        $('.col-lg-4 .component-filter-subnav').attr('data-offset', displacement + 'px');
    }
}

function fixIframeSrcs() {
    $('iframe[data-src]').each(function () {
        var $iframe = $(this);

        var closestAccordionBody = $iframe.closest('.accordion-body.show-on-click');

        var setSrc = function setSrc(iframe, src) {
            if (!iframe.attr('src')) {
                iframe.attr('src', src);
            }
        }

        if (closestAccordionBody.length === 0) {
            setSrc($iframe, $iframe.attr('data-src'));
        } else {
            var closestAccordion = closestAccordionBody.closest('.accordion-item');

            if (closestAccordion.length === 0) {
                setSrc($iframe, $iframe.attr('data-src'));
            } else {
                closestAccordion.on('click', function accordionClicked() {
                    setSrc($iframe, $iframe.attr('data-src'));
                });
            }
        }
    });
}

function ensureMeganavFocusVisibility() {
    $('.megamenu').on('blur', '.mega-dropdown-menu a', function megaMenuFocusOut() {
        var $lastFocusedElement = $(this);
        var $lastNav = $lastFocusedElement.closest('.mega-dropdown-menu');

        $('body a').off('focus.meganavFocus');
        $('body a').on('focus.meganavFocus', function meganavFocushandler() {
            var $currentFocusedElement = $(this);
            var $currentNav = $currentFocusedElement.closest('.mega-dropdown-menu');


            if (!($lastNav[0].isSameNode($currentNav[0]))) {
                $lastNav.closest('.megamenu').removeClass('open');
                $('body a').off('focus.meganavFocus');
            }

            console.info('previous: ' + $lastFocusedElement.text() + ', ' + 'current: ' + $currentFocusedElement.text());
        });
    });

    $('.megamenu .dropdown-toggle').on('blur', function megaMenuDropdownFocusOut() {
        var $lastFocusedElement = $(this);
        var $lastNav = $lastFocusedElement.closest('.mega-dropdown-menu');

        $('body a').off('focus.megaMenuDropdownFocus');
        $('body a').on('focus.megaMenuDropdownFocus', function meganavFocushandler() {
            var $currentFocusedElement = $(this);
            var $lastFocusedMegamenu = $lastFocusedElement.closest('.megamenu');

            if (!$lastFocusedMegamenu.has($currentFocusedElement).length) {
                $lastFocusedMegamenu.removeClass('open');
                $('body a').off('focus.megaMenuDropdownFocus');
            }
            console.info('previous: ' + $lastFocusedElement.text() + ', ' + 'current: ' + $currentFocusedElement.text());
        });
    });
}

function componentLoadMore() {
    if ($('.component-load-more').length > 0) {
        $('.component-load-more .promo-btn.load-more').on('click', function (e) {
            e.preventDefault();
            $(this).parents('.component-button').hide().parents('.component-load-more').next('.component-load-more').slideDown();
        });
    }
}

function addBackgroundVideo() {
    //if the page hero is supposed to have a video background and the current view is desktop or widescreen
    if ($('.component-hero-image.video .videoplaceholder').length && becu.responsiveStateNum > 2) {
        var $vidElement = $('.component-hero-image.video .videoplaceholder');

        var sources = '<video autoplay loop muted';
        if ($vidElement.attr('data-vid-poster')) {
            sources += ' poster="' + $vidElement.attr('data-vid-poster') + '">';
        } else {
            sources += '>';
        }
        if ($vidElement.attr('data-vid-mpfour')) {
            sources += '<source src="' + window.location.protocol + '//' + window.location.host + $vidElement.attr('data-vid-mpfour').trim() + '" type="video/mp4">';
        }
        if ($vidElement.attr('data-vid-webm')) {
            sources += '<source src="' + window.location.protocol + '//' + window.location.host + $vidElement.attr('data-vid-webm').trim() + '" type="video/webm">';
        }
        if ($vidElement.attr('data-vid-ogv')) {
            sources += '<source src="' + window.location.protocol + '//' + window.location.host + $vidElement.attr('data-vid-ogv').trim() + '" type="video/ogg">';
        }
        sources += '</video>';

        //place video HTML into the hero
        $vidElement.html(sources);

        //mute the video for browsers (IE) that don't support the "muted" attribute
        $vidElement.find('video')[0].muted = true;
        $vidElement.find('video')[0].volume = 0.0;

    }
}

function initializeRealEstateRewardCalculator() {
    function setValues() {
        var a = $(".component-real-estate-reward-calculator .purchase-price").val();
        var b = $(".component-real-estate-reward-calculator .sellingPrice").val();
        if (isNaN(a) || a == null || a == "") {
            $(".component-real-estate-reward-calculator .purchase-price").val('500000');
        }
        if (isNaN(b) || b == null || b == "") {
            $(".component-real-estate-reward-calculator .sellingPrice").val('500000');
        }
    }

    //Calculate the reward and set the label
    function calculate() {
        var reward = .006;
        var purchasePrice = $('.component-real-estate-reward-calculator .purchase-price').val();
        var sellingPrice = $('.component-real-estate-reward-calculator .sellingPrice').val();
        var totalReward;

        switch ($("input[name=wantTo]:checked").val()) {
            case 'buy':
                totalReward = purchasePrice * reward;
                $('.component-real-estate-reward-calculator .purchase').show();
                $('.component-real-estate-reward-calculator .sell').hide();
                break;
            case 'sell':
                totalReward = sellingPrice * reward;
                $('.component-real-estate-reward-calculator .purchase').hide();
                $('.component-real-estate-reward-calculator .sell').show();
                break;
            case 'both':
                totalReward = (purchasePrice * reward) + (sellingPrice * reward);
                $('.component-real-estate-reward-calculator .purchase').show();
                $('.component-real-estate-reward-calculator .sell').show();
                break;
        }
        $(".component-real-estate-reward-calculator .lblReward").text('$' + totalReward.toFixed(2));
    }

    //Initialize form
    setValues();
    calculate();

    //Refresh on change
    $(".component-real-estate-reward-calculator input").change(function () {
        setValues();
        calculate();
    });
}

function findLocationResize() {
    try {
        if (page.body.hasClass('find-locations') && becu.responsiveState === 'mobile') {
            $('body.find-locations > .container').css('min-height', page.window.height() - 50);
        }
    } catch (err) { }
}

function InitMultiRegionRateUI($mrr) {
    var fallbackRateZip = $mrr.find('.settings .fallback-zip').text();

    var inputWrapper = $mrr.find('.input-wrapper');
    var input = $mrr.find('input.zip');

    const button = $mrr.find('.info-button');
    const tooltip = $mrr.find('.info-tooltip');


    navigator.geolocation.getCurrentPosition(function gotPosition(position) {
        var geoCoder = new google.maps.Geocoder();
        var mylat = position.coords.latitude;
        var mylng = position.coords.longitude;
        var latlng = new google.maps.LatLng(mylat, mylng);
        geoCoder.geocode({ 'latLng': latlng }, function (results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
                for (var i = 0; i < results[0].address_components.length; i++) {
                    var addressComponent = results[0].address_components[i];

                    if (addressComponent.types.includes('postal_code')) {
                        var zip = addressComponent.short_name;
                        $mrr.find('input.autoZip').val(zip);
                        SetRateForZip();
                        break;
                    }
                }
            }
        });
    }, function didntGetPosition() {
        displayInputHideZip();
    });

    $('input.autoZip').on('change', function inputChanged() {
        $(this).removeClass('autoZip');
        $(this).off('change');
    });

    $('.changeZip').on('click', function zipForRatesClicked() {
        $mrr.find('.rates').addClass('d-none');
        $mrr.find('.setZipWrapper').removeClass('d-none');

        return false;
    });

    function SetRateForZip() {
        var mrrIds = $mrr.find('.mrrids').val().split('|');

        var zip = $mrr.find('input.zip').val();

        $.ajax({
            url: '/api/RegionalRates',
            data: { rrids: mrrIds, zip: zip, fallbackZip: fallbackRateZip },
            success: function gotRateData(data) {
                if (data.Success) {
                    updateSubhead(data);
                    showRates();
                    updateRates(data.Rates);
                    displayZipHideInput(data.State);
                } else {
                    hideRates();
                    displayInputHideZip();
                    addErrors(data.UserFriendlyError);
                }
            },
            error: function error() {
                displayInputHideZip();
                addErrors('Unable to get rates for your zip');
            }
        });
    }

    /*
     * We need to use something other than 'display:none' and 'visibility:'hidden' to hide and show things so that screen readers
     * can pick up changes as they happen.
     */
    function clearErrors() {
        $mrr.find('.setZipWrapper .alert').removeClass('d-sm-flex').addClass('d-none');
        $mrr.find('label').css('color', '#4d5f69');
        input.css('border-color', '#d5d7d9');

        $mrr.find('.input-error').addClass('d-none');
    }

    function addErrors(errors) {
        $mrr.find('.setZipWrapper .alert').removeClass('d-none').addClass('d-sm-flex');
        var contentDiv = $mrr.find('.setZipWrapper .alert .alert-content');

        contentDiv.html('<p>' + errors + '</p>');

        $mrr.find('label').css('color', '#ab111a');
        input.css('border-color', '#ab111a');

        $mrr.find('.input-error').removeClass('d-none');
    }

    function updateSubhead(data) {
        $mrr.find('.ratesubhead.effective .rateType').text(data.RateType);
        $mrr.find('.ratesubhead.effective .effectiveDate').text(data.EffectiveDate);
    }

    function showRates() {
        $mrr.find('.rates').removeClass('d-none');
    }

    function hideRates() {
        $mrr.find('.rates').addClass('d-none');
    }

    function updateRates(rates) {
        for (var i = 0; i < rates.length; i++) {
            var rate = rates[i];
            var rateElem = $mrr.find('.rate-div[data-mrrid="' + rate.RegionalRateId + '"]');

            rateElem.find('.rate-percentage').text(rate.Percentage);
            rateElem.find('.rate-type').text(rate.Type);
            rateElem.find('.rate-name').text(rate.Name);
            rateElem.find('.rate-description').text(rate.Description);
        }
    }

    function displayZipHideInput(state) {
        $mrr.find('.setZipWrapper').addClass('d-none');
        $mrr.find('.displayZip .zip').text('Rates for ' + input.val());
        $mrr.find('.displayZip').removeClass('d-none');
    }

    function displayInputHideZip() {
        $mrr.find('.setZipWrapper').removeClass('d-none');
        $mrr.find('.displayZip').addClass('d-none');
    }


    $('.ratesForZip').on('click', function zipForRatesClicked() {
        clearErrors();

        var zip = input.val().trim();

        if (zip.length !== 5) {
            addErrors('Input Error: Zip code must be 5 numbers.');
            return false;
        }

        SetRateForZip();

        return false;
    });
}

//listen for third party iframe resize events
if (window.attachEvent) {
    window.attachEvent('onmessage', becu.setIframe);
} else {
    window.addEventListener('message', becu.setIframe, false);
}
function AssociateOverlays(e) {
    var $this = $(this);
    var targeturl = $this.attr('href');
    var classes = $this.attr('class').split(' ');
    var overlayid = '';
    //if overlay link is not disabled
    if ($this.hasClass('disabled')) {
        return;
    }

    //iterate through classes
    for (var i = 0; i < classes.length; i++) {
        //isolate overlay- class and extract the name of the overlay to open
        if (classes[i].indexOf('overlay-') > -1) {
            overlayid = classes[i].replace('overlay-', '').trim();
        }
    }

    if (overlayid.length) {
        e.preventDefault();
        e.stopPropagation();
        $.ajax({
            url: '/api/Overlay',
            data: {
                overlayId: overlayid
            },
            success: function (result) {
                var modal = $('.modal-' + overlayid);
                if (modal.length === 0) {
                    $('main').after($(result));
                    modal = $('.modal-' + overlayid);
                }

                //if there's a valid overlay name and a valid overlay to open
                if (modal.length) {
                    //specific exception for leavingsite overlay
                    if (modal.hasClass('lb-leavingsite')) {
                        //if the warnOffsiteLinks flag is set, open lightbox, otherwise let user browse to offsite link without warning
                        if (becu.warnOffsiteLinks) {
                            e.preventDefault();
                            modal.find('.promo-btn.secondary').attr('href', targeturl);
                            var leavingSiteModal = new bootstrap.Modal('.modal-' + overlayid);
                            leavingSiteModal.show();
                        }
                    } else if (overlayid.indexOf('video') === 0) {
                        //if no iframe exists, create one
                        if (!$('.modal-' + overlayid + ' iframe').length) {
                            $('.modal-' + overlayid + ' .modal-body').append(
                                '<div class="component-inline-video"><iframe width="560" height="315" src="" frameborder="0" allowfullscreen title="Video component"></iframe></div>');
                        }
                        //modify iframe src url
                        $('.modal-' + overlayid + ' iframe').attr('src', targeturl);
                        //set close button to remove src
                        $('.modal-' + overlayid).on('hidden.bs.modal',
                            function () {
                                $('.modal-' + overlayid + ' iframe').removeAttr('src');
                            });
                        e.preventDefault();

                        var videoModal = new bootstrap.Modal('.modal-' + overlayid);
                        videoModal.show();
                    } else if (overlayid === 'apply' || overlayid === 'applyv1') {
                        //if user is not logged in, show apply login box, otherwise let them click link
                        if (!becu.loggedInStatus) {
                            e.preventDefault();
                            //check for where they came from, append that value to the post for the form submit
                            var formActionUrl = $('#applyNowForm').attr('action');
                            if (targeturl === becu.loginSubmitOpenaccountURL) {
                                $('#applyNowForm').attr('action',
                                    formActionUrl + '?ReturnUrl=' + becu.loginSubmitOpenaccount);
                            }
                            if (targeturl === becu.loginSubmitApplyURL) {
                                $('#applyNowForm').attr('action',
                                    formActionUrl + '?ReturnUrl=' + becu.loginSubmitApply);
                            }

                            var applyModal = new bootstrap.Modal('.modal-' + overlayid);
                            applyModal.show();
                        }
                    } else if (overlayid === 'olbmaintenance') {
                        e.preventDefault();
                        if ($('.component-header-alert.olb-is-down .alert-content').length) {
                            $('.modal-olbmaintenance .modal-body')
                                .html($('.component-header-alert.olb-is-down .alert-content').html());
                        }

                        var olbMaintenanceModal = new bootstrap.Modal('.modal-' + overlayid);
                        olbMaintenanceModal.show();
                    } else {
                        //open the corresponding overlay
                        e.preventDefault();

                        var otherModal = new bootstrap.Modal('.modal-' + overlayid);
                        otherModal.show();
                    }
                }
            }
        });
    }
}

function skipToVideoBanking(e) {
    e.preventDefault();

    // focus on chat textarea outside of iframe if it exists
    if (parent.document.getElementsByClassName('sm-chat-message').length) {
        parent.document.getElementsByClassName('sm-chat-message')[0].focus();
        return;
    }

    // focus on video banking alert if it exists
    var $alertdialog = $('div.sm-inner[role="alertdialog"]');
    if ($alertdialog.length) {
        $alertdialog.focus();
        return;
    }

    // default to focusing on button to launch video banking
    $('a[href="#salemove"]').focus();
}

$(document).ready(function () {
    initPage();

    page.window.on('resize', becu.windowResize);
    page.window.on('scroll', becu.windowScroll);

    hideTitlesInMeganav();
    fixIframeSrcs();
    ensureMeganavFocusVisibility();

    becu.windowResize();
    becu.windowScroll();

    //##ImgApproach2
    becu.imgUpdate();

    if (page.body.hasClass('financial-guidance')) {
        initArticlesFilter('.col-lg-8');
    }

    if (page.body.hasClass('investment-articles')) {
        initArticlesFilter('.col-lg-10');
    }

    if (page.body.hasClass('pagetype-home')) {
        UpdateLogoImgUrlInSEOSchema();
    }

    //Hamburger menulinks ADA fix in desktop when resizing window more than 150%
    $('#nav-main-dropdown a.support').keydown(function (e) {
        var keyEntered = e.keyCode || e.which;

        if (e.shiftKey && keyEntered == 9) {
            return;
        }
        if (keyEntered == 9) {
            $('.navbar-collapse').removeClass('show');
            $('.modal-backdrop').css('display', 'none');
            $('.navbar-toggler').focus();
        }
    });


    componentSectionFilters();
    componentDropdownFilters();
    componentTableMobile();
    componentCaseStudy();
    replaceImageWithSvg();
    if ($('#componentDropDownFilterWrapper').length) {
        componentFilterSubnavDropDown();
    } else {
        componentFilterSubnav();
    }
    componentLoadMore();
    addBackgroundVideo();
    findLocationResize();

    $('.multi-region-rates').each(function () {
        InitMultiRegionRateUI($(this));
    });

    //initialize Real Estate Reward Calculator
    if ($('.component-real-estate-reward-calculator').length) {
        initializeRealEstateRewardCalculator();
    }

    //don't close dropdown when they're clicking inside it
    $('.mega-dropdown-menu').on('click', function dropdownClicked(e) {
        e.stopPropagation();
    });

    //click for search button
    $('.component-searchbox.search .searchbtn').click(function () {
        var form = $('.component-searchbox').get(0);
        form.submit();
    });

    //fallback for browsers without autofocus support - search page
    if (page.body.hasClass('pagetype-utility')) {
        if (!('autofocus' in document.createElement('input'))) {
            $('#search-site').focus();
        }
    } else {
        $('.component-user-login .login-field .user').focus();
    }

    var $promoCarousel = $('.promo-carousel');
    $promoCarousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
        $promoCarousel.find('.slick-active').fadeTo("slow", 0.15);
    });
    $promoCarousel.on('init', function (event, slick) {
        $promoCarousel.find('.slick-slide').fadeTo(0, 0.15);
    });
s
    //commenting the below functionality to fix overlay issue-needs additional check to fix thia - Goverdhan
    //document.getElementById("copymeBtn").addEventListener("click", copyToClipboard);

    function copyToClipboard() {
        var copyText = document.getElementById("copymeText");
        var textArea = document.createElement("textarea");
        textArea.value = copyText.textContent;
        document.body.appendChild(textArea);
        textArea.select();
        document.execCommand("Copy");
        textArea.remove();
        $('.copyalert').fadeIn('fast');

        var buttonposition = $(this).offset();
        var buttonwidth = $(this).outerWidth();
        var alertHeight = $('.copyalert').outerHeight();
        var alertTop = buttonposition.top - 40;
        var alertLeft = buttonposition.left + (buttonwidth / 2) - ($('.copyalert').outerWidth() / 2);
        $('.copyalert').css({
            'top': alertTop,
            'left': alertLeft,
            'width': 'max-content',
            'padding': '5px'
        });
        setTimeout(function () {
            $('.copyalert').fadeOut('fast');
        }, 1000);
        

    }

    function isPageEditor() {
        return (!!((typeof Sitecore !== "undefined") && (typeof Sitecore.PageModes !== "undefined") && (typeof Sitecore.PageModes.PageEditor !== "undefined")));
    };

    //setup functions for carousels
    if ($promoCarousel.length) {
        // main carousel
        $promoCarousel.slick({
            centerMode: true,
            speed: 600,
            easing: 'swing',
            centerPadding: '0px',
            slidesToShow: 3,
            variableWidth: true,
            //onBeforeChange: function (index) {
            //    $promoCarousel.find('.slick-active').fadeTo("slow", 0.15);
            //},
            //onInit: function (index) {
            //    $promoCarousel.find('.slick-slide').fadeTo(0, 0.15);
            //},
            prevArrow: '<span class="screenreaderOnly">Previous slide</span><button data-role="none" class="slicks-prev" aria-label="Previous slide"></button>',
            nextArrow: '<span class="screenreaderOnly">Next slide</span><button data-role="none" class="slicks-next" aria-label="Next slide"></button>',
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        arrows: false,
                        centerMode: true,
                        slidesToShow: 3
                    }
                },
                {
                    breakpoint: 0,
                    settings: {
                        arrows: false,
                        centerMode: true,
                        slidesToShow: 1
                    }
                }
            ]
        });
    }

    var $relatedCarousel = $('.related-carousel');
    if ($relatedCarousel.length) {
        // related editorials carousel
        $relatedCarousel.slick({
            dots: false,
            speed: 600,
            variableWidth: true,
            prevArrow: '<span class="screenreaderOnly">Previous slide</span><button data-role="none" class="slicks-prev" aria-label="Previous slide"></button>',
            nextArrow: '<span class="screenreaderOnly">Next slide</span><button data-role="none" class="slicks-next" aria-label="Next slide"></button>',
            appendArrows: '.component-related-editorials .container',
            centerMode: false,
            slidesToShow: 2,
            slidesToScroll: 2,
            infinite: true,
            responsive: [
                {
                    breakpoint: 992,
                    settings: {
                        onBeforeChange: function (index) {
                            $relatedCarousel.find('.slick-active').fadeTo("fast", 0);
                        },
                        onInit: function (index) {
                            $relatedCarousel.find('.slick-slide').fadeTo(0, 0);
                        },
                        arrows: true,
                        centerMode: true,
                        slidesToShow: 1,
                        slidesToScroll: 1
                    }
                },
                {
                    breakpoint: 768,
                    settings: {
                        centerMode: true,
                        arrows: false,
                        slidesToShow: 1,
                        slidesToScroll: 1
                    }
                }
            ]
        });

        // Before slide change, add animating class to carousel
        $relatedCarousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
            $relatedCarousel.addClass('animating');
        });
        // After slide change, remove animating class from carousel
        $relatedCarousel.on('afterChange', function (event, slick, currentSlide, nextSlide) {
            $relatedCarousel.removeClass('animating');
        });
        $relatedCarousel.find('.promo a').on('click', function (e) {
            var $this = $(this);
            if ($this.closest('.slick-slide').hasClass('slick-active') && !$this.closest('.related-carousel').hasClass('animating')) {
                //allow click if the slide isn't greyed out and the carousel isn't moving
            } else {
                //otherwise prevent click
                e.preventDefault();
            }
        });
    }

    if ($('.field-panel.upload').length) {
        $('a.file-upload').on('click', function () {
            $('input.file').trigger('click');
        });
        $('input.file').on('change', function () {
            $('.filename').html($(this).val());
        });
    }

    var $rewardsCarousel = $('.rewards-carousel');
    if ($rewardsCarousel.length) {
        // rewards carousel
        $rewardsCarousel.slick({
            dots: false,
            speed: 600,
            variableWidth: true,
            prevArrow: '<span class="screenreaderOnly">Previous image</span><button data-role="none" class="slicks-prev" aria-label="Previous slide"></button>',
            nextArrow: '<span class="screenreaderOnly">Next image</span><button data-role="none" class="slicks-next" aria-label="Next slide"></button>',
            centerMode: false,
            arrows: true,
            infinite: true,
            slidesToShow: 3,
            slidesToScroll: 1,
            responsive: [
                {
                    breakpoint: 1700,
                    settings: {
                        appendArrows: '.component-rewards',
                    }
                },
                {
                    breakpoint: 768,
                    settings: {
                        onBeforeChange: function (index) {
                            $rewardsCarousel.find('.slick-active').fadeTo("fast", 0.15);
                        },
                        onInit: function (index) {
                            $rewardsCarousel.find('.slick-slide').fadeTo(0, 0.15);
                        },
                        arrows: false,
                        slidesToShow: 1,
                        slidesToScroll: 1
                    }
                }
            ]
        });
    }

    if ($('[data-bs-toggle="popover"]').length) {
        var popover = new bootstrap.Popover('[data-bs-toggle="popover"]', { trigger: 'focus' });
    }

    //add click handlers for overlay links
    $('[class*="overlay-"]').on('click', AssociateOverlays);
    $('div.mega-dropdown-menu').on('click', '[class*="overlay-"]', AssociateOverlays);
    $('div.hero-container-area').on('click', '[class*="overlay-"]', AssociateOverlays);

    //if header alert component exists on page, set up click handlers
    //hide if it has already been hidden in the last 24 hours
    $('.component-header-alert').each(function () {
        var alertId = this.id.trim() || 'default';
        $('button.btn-close', this).click(function (event) {
            event.preventDefault();
            $(this).parents('.component-header-alert').slideUp(200, function () {
                becu.cookie.write('component-header-alert-' + alertId, 'userhidden', 999);
            });
        });
    });

    //if employee bio component exists on page, set up click handlers
    $('.component-employee-bio .readmore').on('click', function (e) {
        var $this = $(this);
        e.preventDefault();
        var $context = $this.parents('.component-employee-bio');
        $context.find('.more').slideDown('fast');
        $this.hide();
        $context.find('.readless').show();
    });
    $('.component-employee-bio .readless').on('click', function (e) {
        var $this = $(this);
        e.preventDefault();
        var $context = $this.parents('.component-employee-bio');
        $context.find('.more').slideUp('fast');
        $this.hide();
        $context.find('.readmore').show();
    });

    //if show-more component exists on page, set up click handlers
    $('.component-show-more .trigger').on('click', function (e) {
        e.preventDefault();
        var $context = $(this);
        $context.siblings('.additional').slideToggle();
        $context.children('.alt').toggle();
        $context.children('.original').toggle();
    });

    //set up nav events
    $('#nav-main-dropdown').on('show.bs.collapse', function () {
        becu.navShow();
    });
    $('#nav-main-dropdown').on('hide.bs.collapse', function () {
        becu.navHide();
    });

    socialSharing();
    becu.iframeResize();

    $(".component-filter-subnav.tabs-dropdown li a").on("click", function () {
        becu.cookie.write("tabs-dropdown-click", 1, 1);
    });

    $(".container-tabs-nexttab a").on("click", function () {
        becu.cookie.write("tabs-dropdown-click", 1, 1);
    });

    $(".component-filter-subnav.categories li a").on("click", function () {
        becu.cookie.write("categories-dropdown-click", 1, 1);
    });

    //toggle myprofile on click
    $('.loprofile').click(function (e) {
        e.preventDefault();
        $('.profileDropdown').toggleClass('open');
        var expanded = $('.profileDropdown').hasClass("open");
        $(this).attr("aria-expanded", expanded);
    });

    //scrolldown on news&discount pages to skip tabs
    if ($('.component-filter-subnav.categories').length > 0 & becu.cookie.read("categories-dropdown-click") == 1 && $('.component-tabs').length > 0) {
        if (becu.responsiveStateNum < 3) {
            var displacement = $('.col-lg-4 .component-filter-subnav.categories').offset().top - 90;
            if (becu.responsiveStateNum === 1) {
                //mobile nav bar is shorter than "90px" tablet nav, so requires less adjustment from default
                displacement = displacement + 30;
            }
            //console.log('displacement: '+displacement);
            var temptimer = setTimeout(function () { $(document).scrollTop(displacement) }, 10);

            becu.cookie.clear("categories-dropdown-click");
        }
    }

    // mobile tab dropdown - scroll to top if the user selected an item from it (check cookie, then clear).
    if ($('.component-filter-subnav.tabs-dropdown').length > 0 & becu.cookie.read("tabs-dropdown-click") == 1) {
        if (becu.responsiveStateNum == 1) {
            //var displacement = $('.component-filter-subnav.tabs-dropdown').attr("data-offset");

            //console.log('displacement: '+displacement);
            var temptimer = setTimeout(function () { $(document).scrollTop(440); }, 10);

            becu.cookie.clear("tabs-dropdown-click");
        }
    }

    //Determine if user is in the Spokane area
    if (page.body.hasClass("promptForLocation") && document.cookie.indexOf("is_spokane_user") < 0) {
        navigator.geolocation.getCurrentPosition(function (position) {
            var date = new Date();
            date.setFullYear(date.getFullYear() + 1);

            //Haversine Formula
            function toRad(x) {
                return x * Math.PI / 180;
            }

            var lon1 = position.coords.longitude;
            var lat1 = position.coords.latitude;

            var lon2 = -117.4260;
            var lat2 = 47.6588;

            var R = 6371; // km

            var x1 = lat2 - lat1;
            var dLat = toRad(x1);
            var x2 = lon2 - lon1;
            var dLon = toRad(x2);
            var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
                Math.sin(dLon / 2) * Math.sin(dLon / 2);
            var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
            var d = R * c;

            if (d < 60) {
                $.ajax({ url: "/olb/spokane-user" });
            } else {
                document.cookie = "is_spokane_user=false; expires=" + date + "; path=/";
            }
        });
    }


    // Keyboard focus on slick arrows
    handleFocusForSlickArrows();
    handleFocusForScreenReaderOnly();

    $('.hide-until-page-loads').removeClass('d-none');

    //this should always be the last function to run
    becu.initJS();
});

// Tab index for Slick arrow navigation
function handleFocusForSlickArrows() {
    var slickArrows = $('.slick-arrow');

    for (var i = 0; i < slickArrows.length; i++) {
        slickArrows[i].setAttribute('tabindex', '0');
    }
}


// Tab index for Screenreader only
function handleFocusForScreenReaderOnly() {
    var slickArrows = $('.screenreaderOnly.slick-arrow');

    for (var i = 0; i < slickArrows.length; i++) {
        slickArrows[i].setAttribute('tabindex', '-1');
    }
}


//IE8 helpers
if (!window.getComputedStyle) {
    window.getComputedStyle = function (el, pseudo) {
        this.el = el;
        this.getPropertyValue = function (prop) {
            var re = /(\-([a-z]){1})/g;
            if (prop == 'float') prop = 'styleFloat';
            if (re.test(prop)) {
                prop = prop.replace(re, function () {
                    return arguments[2].toUpperCase();
                });
            }
            return el.currentStyle[prop] ? el.currentStyle[prop] : null;
        };
        return this;
    };
}
if (typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    }
}

//function setFocusToLink() {
//    $("#linkleave").focus();
//}

function addcoveoid() {
    var currentpage = $(location).attr('href');
    var insearch = currentpage.includes("search-results");
    if (insearch) {
        $('.CoveoSearchButton').attr('id', 'searchSubmitSearchPage');
    }
    else {
        $('.CoveoSearchButton').attr('id', 'searchSubmitHead');
    }
}

if ($('.video-consent:checked').length > 0) {
    $('.video-submit').prop('disabled', false);
} else {
    $('.video-submit').prop('disabled', true);
}
$('.video-consent').change(function () {
    if ($('.video-consent:checked').length > 0) {
        $('.video-submit').prop('disabled', false);
    } else {
        $('.video-submit').prop('disabled', true);
    }
});


function appendcol() {
    var childcount = $('.searchForm .magic-box-suggestions').children().length;
    var colcontent = $('#coveo-suggestion-static-content').html();
    colcontent = colcontent.replace("id=\"coveoid\"", "id=\"coveoidmagicbox\"");
    if (childcount == 1) {
        $('.magic-box-suggestions').append(colcontent);
    }
}
var keyuptimeout = 0;
function addviewallbtn() {
    clearTimeout(keyuptimeout);
    keyuptimeout = setTimeout(function () {
        var childcount = $('.coveo-magicbox-suggestions').children().length;
        var value = $('.searchForm .magic-box-input input').val();
        if (childcount >= 1) {
            $('.coveo-magicbox-suggestions').append('<div class="btn viewallbtn"><a tabindex="0" href="search-results#q=' + value + '&t=coveo4A2453FD" aria-label="view all results">View all results</a></div>');
        }
    }, 500);

}
function copytoclip() {
    var hinput = $('#coveoidmagicbox');
    hinput.select();
    document.execCommand("copy");
}

$(window).bind('load', function () {
    addcoveoid();
    setTimeout(appendcol, 1000);
    $('.searchForm .magic-box-input input').on('input', addviewallbtn);
    $('.searchForm .magic-box-input input').on('focus', addviewallbtn);
    $('.plink').attr('onclick', 'copytoclip()');
});

setTimeout(() => {
    if ($('form.video-banking-form').length > 0) {
        gliaformsubmit();
    }
}, 3000);

function gliaformsubmit() {
    var listvals = [];
    var key = [];
    var values = [];
    var keypair = {};

    $('form.video-banking-form').submit(function () {
        $('form.video-banking-form').each(function () {
            listvals = $(this).find(':input[data-sc-field-name]');
        });
        $(listvals).each(function (i) {
            var gliafields = $(this).find(':input[data-sc-field-name]');
            key.push(this.dataset.scFieldName);
            values.push(this.value);
        });
        for (i = 0; i < key.length; i++) {
            var checkkey_ass_gila = key[i].split('-');
            if (checkkey_ass_gila[0] == 'glia') {
                keypair[checkkey_ass_gila[1]] = values[i];
            }
        }
        PostToGlia(keypair);

    });
}

function PostToGlia(keypair) {

    for (var key of Object.keys(keypair)) {
        console.log(key + ":" + keypair[key]);
    }
    sm.getApi({ version: 'v1' }).then(function (glia) {
        glia.updateInformation({
            "name": keypair["name"],
            "email": keypair["email"]
        }).then(function () {
            console.log("Successfully updated visitor attributes");
        }).catch(function (error) {
            console.log("Failed to set attributes for visitor");
        });
    }).catch(function (error) {
        console.log("Failed");
    });
}

//$(document).ready(function () {
//    if ($('.coveo-results-column').length > 0) {
//    setTimeout(function () {
//        //console.log('After 4 seconds');        
//            $('.coveo-pager-list li').each(function (index) {
//                $(this).removeAttr('role');
//                $(this).removeAttr('aria-pressed');
//            });
//            $('.coveo-list-layout.CoveoResult #CoveoResultsSearch').each(function (index) {
//                var indexvalue = index + 1;
//                $(this).attr('id', 'CoveoResultsSearch' + indexvalue);
//            });
//            $('.coveo-result-row #CoveoNewsList').each(function (index) {
//                var indexvalue = index + 1;
//                $(this).attr('id', 'CoveoNewsList' + indexvalue);
//            });
//            $('.CoveoResult #ProductList').each(function (index) {
//                var indexvalue = index + 1;
//                $(this).attr('id', 'ProductList' + indexvalue);
//            });
//            $('.CoveoResult #CoveoResultReport').each(function (index) {
//                var indexvalue = index + 1;
//                $(this).attr('id', 'CoveoResultReport' + indexvalue);
//            });
//            $('.CoveoResult svg clipPath').each(function () {
//                $(this).removeAttr('id');
//            });
//        }
//        , 4000);
//    }
//});

window.addEventListener("load", () => {
    if (window.location.href.endsWith('/support/video-banking-appointment')) {
        videoBankingApptSubmitButtonValidate();
        $('form.video-banking-form input[type=checkbox]').on('change', function () {
            videoBankingApptSubmitButtonValidate();
        });

        $('form.video-banking-form input[type=text]').on('change', function () {
            videoBankingApptSubmitButtonValidate();
        });

        $('form.video-banking-form input[type=email]').on('change', function () {
            videoBankingApptSubmitButtonValidate();
        });

    }

    if (window.location.href.endsWith('/support/video-banking')) {
        videoBankingSubmitButtonValidate();
        $('form.video-banking-form input[type=checkbox]').on('change', function () {
            videoBankingSubmitButtonValidate();
        });


    }


});

function videoBankingSubmitButtonValidate() {
    if (window.location.href.endsWith('/support/video-banking')) {
        if ($('form.video-banking-form input[type=checkbox]').is(':checked')) {
            $('form.video-banking-form input[type=submit]').removeClass('btn-disabled');
            $('form.video-banking-form input[type=submit]').removeAttr('disabled');

        }
        else {

            $('form.video-banking-form input[type=submit]').attr('disabled', 'true');
            $('form.video-banking-form input[type=submit]').addClass('btn-disabled');

        }
    }

}

function videoBankingApptSubmitButtonValidate() {

    if (window.location.href.endsWith('/support/video-banking-appointment')) {
        var listvals = [];
        var key = [];
        var values = [];
        var keypair = {};

        $('form.video-banking-form').each(function () {
            listvals = $(this).find(':input[data-sc-field-name]');
        });
        $(listvals).each(function (i) {
            var gliafields = $(this).find(':input[data-sc-field-name]');
            key.push(this.dataset.scFieldName);
            values.push(this.value);
        });
        var i = 0;
        for (i = 0; i < key.length; i++) {
            var checkkey_ass_gila = key[i].split('-');
            if (checkkey_ass_gila[0] == 'glia') {
                keypair[checkkey_ass_gila[1]] = values[i];
            }
        }

        var name = keypair["name"];
        var email = keypair["email"];
        var nameValid = false;
        var emailValid = IsEmail(email);

        if (name === undefined) {
            nameValid = false;
        }
        else if (name.length > 0) {
            nameValid = true;
        }



        if ($('form.video-banking-form input[type=checkbox]').is(':checked') && nameValid == true && emailValid == true) {

            $('form.video-banking-form input[type=submit]').removeClass('btn-disabled');
            $('form.video-banking-form input[type=submit]').removeAttr('disabled');

        }
        else {

            $('form.video-banking-form input[type=submit]').attr('disabled', 'true');
            $('form.video-banking-form input[type=submit]').addClass('btn-disabled');

        }
    }

}

function IsEmail(email) {
    var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!regex.test(email)) {
        return false;
    } else {
        return true;
    }
}

function trapFocus(modalElement) {
  const focusableSelectors = [
    'a[href]',
    'area[href]',
    'input:not([disabled])',
    'select:not([disabled])',
    'textarea:not([disabled])',
    'button:not([disabled])',
    'iframe',
    'object',
    'embed',
    '[tabindex]:not([tabindex="-1"])',
    '[contenteditable]'
  ];

  const focusableElements = modalElement.querySelectorAll(focusableSelectors.join(','));
  const firstElement = focusableElements[0];
  const lastElement = focusableElements[focusableElements.length - 1];

  modalElement.addEventListener('keydown', function (e) {
    if (e.key === 'Tab') {
      if (e.shiftKey) {
        // Shift + Tab
        if (document.activeElement === firstElement) {
          e.preventDefault();
          lastElement.focus();
        }
      } else {
        // Tab
        if (document.activeElement === lastElement) {
          e.preventDefault();
          firstElement.focus();
        }
      }
    }
  });
};
var UtmCookie; UtmCookie = function () { function UtmCookie(options) { null == options && (options = {}), this._cookieNamePrefix = "_uc_", this._domain = options.domain, this._sessionLength = options.sessionLength || 1, this._cookieExpiryDays = options.cookieExpiryDays || 365, this._additionalParams = options.additionalParams || [], this._utmParams = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"], this.writeInitialReferrer(), this.writeLastReferrer(), this.writeInitialLandingPageUrl(), this.setCurrentSession(), this.additionalParamsPresentInUrl() && this.writeAdditionalParams(), this.utmPresentInUrl() && this.writeUtmCookieFromParams() } return UtmCookie.prototype.createCookie = function (name, value, days, path, domain, secure) { var cookieDomain, cookieExpire, cookiePath, cookieSecure, date, expireDate; expireDate = null, days && (date = new Date, date.setTime(date.getTime() + 24 * days * 60 * 60 * 1e3), expireDate = date), cookieExpire = null != expireDate ? "; expires=" + expireDate.toGMTString() : "", cookiePath = null != path ? "; path=" + path : "; path=/", cookieDomain = null != domain ? "; domain=" + domain : "", cookieSecure = null != secure ? "; secure" : "", document.cookie = this._cookieNamePrefix + name + "=" + escape(value) + cookieExpire + cookiePath + cookieDomain + cookieSecure }, UtmCookie.prototype.readCookie = function (name) { var c, ca, i, nameEQ; for (nameEQ = this._cookieNamePrefix + name + "=", ca = document.cookie.split(";"), i = 0; i < ca.length;) { for (c = ca[i]; " " === c.charAt(0) ;) c = c.substring(1, c.length); if (0 === c.indexOf(nameEQ)) return c.substring(nameEQ.length, c.length); i++ } return null }, UtmCookie.prototype.eraseCookie = function (name) { this.createCookie(name, "", -1, null, this._domain) }, UtmCookie.prototype.getParameterByName = function (name) { var regex, regexS, results; return name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"), regexS = "[\\?&]" + name + "=([^&#]*)", regex = new RegExp(regexS), results = regex.exec(window.location.search), results ? decodeURIComponent(results[1].replace(/\+/g, " ")) : "" }, UtmCookie.prototype.additionalParamsPresentInUrl = function () { var j, len, param, ref; for (ref = this._additionalParams, j = 0, len = ref.length; len > j; j++) if (param = ref[j], this.getParameterByName(param)) return !0; return !1 }, UtmCookie.prototype.utmPresentInUrl = function () { var j, len, param, ref; for (ref = this._utmParams, j = 0, len = ref.length; len > j; j++) if (param = ref[j], this.getParameterByName(param)) return !0; return !1 }, UtmCookie.prototype.writeCookie = function (name, value) { this.createCookie(name, value, this._cookieExpiryDays, null, this._domain) }, UtmCookie.prototype.writeAdditionalParams = function () { var j, len, param, ref, value; for (ref = this._additionalParams, j = 0, len = ref.length; len > j; j++) param = ref[j], value = this.getParameterByName(param), this.writeCookie(param, value) }, UtmCookie.prototype.writeUtmCookieFromParams = function () { var j, len, param, ref, value; for (ref = this._utmParams, j = 0, len = ref.length; len > j; j++) param = ref[j], value = this.getParameterByName(param), this.writeCookie(param, value) }, UtmCookie.prototype.writeCookieOnce = function (name, value) { var existingValue; existingValue = this.readCookie(name), existingValue || this.writeCookie(name, value) }, UtmCookie.prototype._sameDomainReferrer = function (referrer) { var hostname; return hostname = document.location.hostname, referrer.indexOf(this._domain) > -1 || referrer.indexOf(hostname) > -1 }, UtmCookie.prototype._isInvalidReferrer = function (referrer) { return "" === referrer || void 0 === referrer }, UtmCookie.prototype.writeInitialReferrer = function () { var value; value = document.referrer, this._isInvalidReferrer(value) && (value = "direct"), this.writeCookieOnce("referrer", value) }, UtmCookie.prototype.writeLastReferrer = function () { var value; value = document.referrer, this._sameDomainReferrer(value) || (this._isInvalidReferrer(value) && (value = "direct"), this.writeCookie("last_referrer", value)) }, UtmCookie.prototype.writeInitialLandingPageUrl = function () { var value; value = this.cleanUrl(), value && this.writeCookieOnce("initial_landing_page", value) }, UtmCookie.prototype.initialReferrer = function () { return this.readCookie("referrer") }, UtmCookie.prototype.lastReferrer = function () { return this.readCookie("last_referrer") }, UtmCookie.prototype.initialLandingPageUrl = function () { return this.readCookie("initial_landing_page") }, UtmCookie.prototype.incrementVisitCount = function () { var cookieName, existingValue, newValue; cookieName = "visits", existingValue = parseInt(this.readCookie(cookieName), 10), newValue = 1, newValue = isNaN(existingValue) ? 1 : existingValue + 1, this.writeCookie(cookieName, newValue) }, UtmCookie.prototype.visits = function () { return this.readCookie("visits") }, UtmCookie.prototype.setCurrentSession = function () { var cookieName, existingValue; cookieName = "current_session", existingValue = this.readCookie(cookieName), existingValue || (this.createCookie(cookieName, "true", this._sessionLength / 24, null, this._domain), this.incrementVisitCount()) }, UtmCookie.prototype.cleanUrl = function () { var cleanSearch; return cleanSearch = window.location.search.replace(/utm_[^&]+&?/g, "").replace(/&$/, "").replace(/^\?$/, ""), window.location.origin + window.location.pathname + cleanSearch + window.location.hash }, UtmCookie }(); var UtmForm, _uf; UtmForm = function () { function UtmForm(options) { null == options && (options = {}), this._utmParamsMap = {}, this._utmParamsMap.utm_source = options.utm_source_field || "USOURCE", this._utmParamsMap.utm_medium = options.utm_medium_field || "UMEDIUM", this._utmParamsMap.utm_campaign = options.utm_campaign_field || "UCAMPAIGN", this._utmParamsMap.utm_content = options.utm_content_field || "UCONTENT", this._utmParamsMap.utm_term = options.utm_term_field || "UTERM", this._additionalParamsMap = options.additional_params_map || {}, this._initialReferrerField = options.initial_referrer_field || "IREFERRER", this._lastReferrerField = options.last_referrer_field || "LREFERRER", this._initialLandingPageField = options.initial_landing_page_field || "ILANDPAGE", this._visitsField = options.visits_field || "VISITS", this._addToForm = options.add_to_form || "all", this._formQuerySelector = options.form_query_selector || "form", this.utmCookie = new UtmCookie({ domain: options.domain, sessionLength: options.sessionLength, cookieExpiryDays: options.cookieExpiryDays, additionalParams: Object.getOwnPropertyNames(this._additionalParamsMap) }), "none" !== this._addToForm && this.addAllFields() } return UtmForm.prototype.addAllFields = function () { var fieldName, param, ref, ref1; ref = this._utmParamsMap; for (param in ref) fieldName = ref[param], this.addFormElem(fieldName, this.utmCookie.readCookie(param)); ref1 = this._additionalParamsMap; for (param in ref1) fieldName = ref1[param], this.addFormElem(fieldName, this.utmCookie.readCookie(param)); this.addFormElem(this._initialReferrerField, this.utmCookie.initialReferrer()), this.addFormElem(this._lastReferrerField, this.utmCookie.lastReferrer()), this.addFormElem(this._initialLandingPageField, this.utmCookie.initialLandingPageUrl()), this.addFormElem(this._visitsField, this.utmCookie.visits()) }, UtmForm.prototype.addFormElem = function (fieldName, fieldValue) { var allForms, firstForm, form, i, len; if (fieldValue && (allForms = document.querySelectorAll(this._formQuerySelector), allForms.length > 0)) if ("first" === this._addToForm) firstForm = allForms[0], this.insertAfter(this.getFieldEl(fieldName, fieldValue), firstForm.lastChild); else for (i = 0, len = allForms.length; len > i; i++) form = allForms[i], this.insertAfter(this.getFieldEl(fieldName, fieldValue), form.lastChild) }, UtmForm.prototype.getFieldEl = function (fieldName, fieldValue) { var fieldEl; return fieldEl = document.createElement("input"), fieldEl.type = "hidden", fieldEl.name = fieldName, fieldEl.value = fieldValue, fieldEl }, UtmForm.prototype.insertAfter = function (newNode, referenceNode) { return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling) }, UtmForm }(), _uf = window._uf || {}, window.UtmForm = new UtmForm(_uf);;
let genRandomValue = () => {
    return Math.floor((1 + Math.random()) * 0x10000)
        .toString(16)
        .substring(1);
}

let guid = () => {
    let s4 = () => {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
    }
    
    return "becuautogen-"+genRandomValue() + genRandomValue() + '-' + genRandomValue() + '-' + genRandomValue() + '-' + genRandomValue() + '-' + genRandomValue() + genRandomValue() + genRandomValue();
}

window.addEventListener("load", () => {

    $("svg,g").each(function () {
        var svgIdVal = $(this).attr("id")

        
        if (svgIdVal == null) {           
            return;
        }
        if (svgIdVal.startsWith("becuautogen-") && svgIdVal.length>=48)
            return;
        
            $(this).attr("id", guid());
          
           
        
        
    });  

    if (window.location.href.indexOf('/support/forms')) {

        $("span[id='RegulationDExplanation'],span[id='AccountBeneficiaryClaimRequest'],span[id='OutgoingWiringInstructions'],span[id='ServiceMemberCivilReliefAct'],span[id='IncomingWiringInstructions']").each(function () {

            var idVal = $(this).attr("id")            

            if (idVal.startsWith("becuautogen-") && idVal.length >= 48) {
                return;
            }

            $(this).attr("id", guid());
        })
    }

    if (window.location.href.indexOf('/about-membership/Membership')) {

        $("div[class='richtext'] a[id='apply-form']").each(function () {

            var idVal = $(this).attr("id")
            

            if (idVal.startsWith("becuautogen-") && idVal.length >= 48) {
                return;
            }

            $(this).attr("id", guid());

        })
           
      
    }

    if (window.location.href.indexOf('/articles/your-top-rv-questions-answered')) {

        $("div[id='_com_1'],p[id='_com_1'],h4[id='_com_1']").each(function () {

            var idVal = $(this).attr("id")


            if (idVal.startsWith("becuautogen-") && idVal.length >= 48) {
                return;
            }

            $(this).attr("id", guid());
        })

    }

    
    if (window.location.href.indexOf('/seminars')) {

        $("div[id='The-Fragile-Decade-Transition-to-Retirement'],div[id='Estate-Planning-Basics-for-the-LGBTQ-Community']").each(function () {

            var idVal = $(this).attr("id")           

            if (idVal.startsWith("becuautogen-") && idVal.length >= 48) {
                return;
            }

            $(this).attr("id", guid());
        })

    }

    $("div[id='componentDropDownFilter']").each(function () {

        var idVal = $(this).attr("id")

        if (idVal.startsWith("componentDropDownFilter-becuautogen-") && idVal.length >= 48) {
            return;
        }

        $(this).attr("id", "componentDropDownFilter-"+guid());


    })

});;
