/* global Project */
$(window).on("load", function () {
	matchHeights();
	$(window).on('resize', matchHeights);
	ensureClickToEnlargeImageExists();
	genericFormDocumentReady();
});
(function ($) {
	'use strict';
	(window.Project = {
		mainNav: function () {
			Project.setHeaderClass();
			$(function () {
				Project.setMenuStyle();
			});
			var resizeTimer;
			$(window).on('resize', function () {
				Project.setHeaderClass();
				clearTimeout(resizeTimer);
				resizeTimer = setTimeout(function () {
					// Window is "done" resizing.
					Project.setMenuStyle();
				}, 50);
			});
			if ($("#pl-header.mobile, #pl-header.tablet").length > 0) {
				var lastScrollTop = 0;
				var menuHeight = Math.floor($('#pl-fixed-top').height());
				$(window).on('scroll', function () {
					var upPixelThreshold = 12;
					var downPixelThreshold = 3;
					var timeThreshold = 200;
					setTimeout(function () {
						// Window is "done" scrolling now.
						$(window).on('scroll', function () {
							var scrollTop = $(this).scrollTop();
							var diff = Math.abs(lastScrollTop - scrollTop);
							if (scrollTop > lastScrollTop) {
								// downscroll code
								if (scrollTop > 150) {
									if (diff > downPixelThreshold && scrollTop > 10) {
										// scrolling down and more than 10 pixels from the top of the page
										$("#pl-fixed-top.mobile, #pl-fixed-top.tablet").css("top", -Math.abs(menuHeight));
									}
								}
							}
							else if (scrollTop < lastScrollTop) {
								// upscroll code
								if (diff > upPixelThreshold || scrollTop < 150) {
									// either scrolling up or within header height of the top of the page
									$("#pl-fixed-top.mobile, #pl-fixed-top.tablet").css("top", 0);
								}
							}
							lastScrollTop = scrollTop;
						});
					}, timeThreshold);
				});
			}
			$('.announcements-close').on('click', function () {
				$(this).closest('.pl-announcements').hide();
				var hash = $(this).closest('.pl-announcements').attr('data-hash');
				var date = new Date();
				date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000));
				document.cookie = encodeURIComponent('pl_info_' + hash) + "=" + 0 + "; expires=" + date.toGMTString() + "; path=/";
				Project.setMenuStyle();
			});
			$('.hamburger').on('click', function () {
				Project.openMobileDrawer('#pl-navigation');
			});
			$('.mobile-back').on('click', function () {
				//look for any open main menu drawers 
				var openDrawer = $('.mobile-main-menu.open');
				if (openDrawer.length != 0) {
					jQuery.each(openDrawer, function (i, val) {
						Project.closeMobileMainMenu('#' + val.id);
					});
				}
				else {
					Project.closeMobileDrawer('#pl-navigation');
					Project.closeAllMobileDrawers();
				}
			});
			$('.mobile-close').on('click', function () {
				//Closes the entire mobile menu
				Project.closeMobileDrawer('#pl-navigation');
				Project.closeAllMobileDrawers();
			});
			$('#navigation-overlay').on('click', function (e) {
				//User clicks outside of mobile menu, close the entire mobile menu
				if ($('.mobile-menu-active').length > 0) {
					var container = $('#pl-navigation');
					if (!container.is(e.target) && $(e.target).closest(container).length === 0) {
						//Closes the entire mobile menu
						Project.closeMobileDrawer('#pl-navigation');
						Project.closeAllMobileDrawers();
					}
				}
			});
			$('#pl-header .service-menu a.dropdown-toggle').on('click', function (e) {
				if (!$('#pl-header').hasClass('desktop')) {
					e.preventDefault();
					Project.openMobileMainMenu('#services-menu');
				}
			});
			$('#materials-menu-link').on('click', function (e) {
				if (!$('#pl-header').hasClass('desktop')) {
					e.preventDefault();
					Project.openMobileMainMenu('#materials-menu');
				}
			});
			$('#resources-menu-link').on('click', function (e) {
				if (!$('#pl-header').hasClass('desktop')) {
					e.preventDefault();
					Project.openMobileMainMenu('#resources-menu');
				}
			});
			$('#about-us-menu-link').on('click', function (e) {
				if (!$('#pl-header').hasClass('desktop')) {
					e.preventDefault();
					Project.openMobileMainMenu('#about-us-menu');
				}
			});
			$('.mobile-language').on('click', function () {
				var menuPosition = $(this).data('menu');
				if (menuPosition == 'closed') {
					$('#mobile-language-drop').slideDown();
					$(this).data('menu', 'open');
					$('.mobile-language i.down').hide();
					$('.mobile-language i.up').show();
				}
				else {
					Project.closeLanguage();
				}
			});
		},
		setHeaderClass: function () {
			if (window.innerWidth < 700) {
				$('#pl-fixed-top').removeClass('mobile tablet desktop').addClass('mobile');
				$('#pl-header').removeClass('mobile tablet desktop').addClass('mobile');
			}
			else if (window.innerWidth < 1200) {
				$('#pl-fixed-top').removeClass('mobile tablet desktop').addClass('tablet');
				$('#pl-header').removeClass('mobile tablet desktop').addClass('tablet');
			}
			else {
				$('#pl-fixed-top').removeClass('mobile tablet desktop').addClass('desktop');
				$('#pl-header').removeClass('mobile tablet desktop').addClass('desktop');
			}
		},
		setMenuStyle: function () {
			var isDesktop = true;
			if (window.innerWidth < 1200) {
				Project.changeToMobileMenu();
				isDesktop = false;
			}
			else {
				Project.changeToDesktopMenu();
			}
			$(function () {
				if ($('.pl-announcements').length > 0) {
					var menuHeight = Math.floor($('#pl-fixed-top').height());
					var bottomAnnouncementsHeight = Math.floor($('#bottom-announcements').height());
					$('#pl-sub-header .search-results-header').css('top', menuHeight + bottomAnnouncementsHeight);
					$('#pl-header.desktop .dropdown-menu.pl-mega-nav').css('top', menuHeight - 1);
					if (isDesktop) {
						$('#bottom-announcements').css('top', menuHeight);
						$('#bottom-announcements').css('margin-top', 0);
						$('#pl-sub-header').css('margin-top', menuHeight + bottomAnnouncementsHeight);
					}
					else {
						$('#bottom-announcements').css('top', 0);
						$('#bottom-announcements').css('margin-top', menuHeight);
						$('#pl-sub-header').css('top', 0);
						$('#pl-sub-header').css('margin-top', 0);
					}
				}
			});
		},
		changeToMobileMenu: function () {
			$('#main-navigation li a').removeAttr('data-toggle');
			$('html, body').removeClass('mobile-menu-active');
			Project.closeAllMobileDrawers();
			//Move desktop search results to mobile
			Project.moveSearchResults('#desktop-search-results', '#mobile-search-results');
		},
		changeToDesktopMenu: function () {
			$('.mobile-main-menu').css('overflow', '');
			$('.mobile-main-menu').css('left', '');
			$('#pl-header .service-menu .pl-mega-nav').removeAttr('style');
			$('#pl-header .service-menu .pl-mega-nav').removeClass('open');
			//Move mobile search results to desktop
			Project.moveSearchResults('#mobile-search-results', '#desktop-search-results');
		},
		closeLanguage: function () {
			$('#mobile-language-drop').slideUp();
			$('.mobile-language').data('menu', 'closed');
			$('.mobile-language i.up').hide();
			$('.mobile-language i.down').show();
		},
		closeAllMobileDrawers: function () {
			$('.mobile-main-menu').css('overflow', '');
			$('.mobile-main-menu').css('left', '');
			Project.closeMobileDrawer('#mobile-search-drawer');
			Project.removeMobileDrawerOverlay();
			Project.closeLanguage();
			$('#pl-header .service-menu .pl-mega-nav').removeClass('open');
		},
		openMobileDrawer: function (menuId) {
			if (menuId == '#pl-navigation') {
				$('#navigation-overlay').addClass('open');
			}
			$(menuId).animate({
				left: '0%'
			}, 500, function () {
				if (menuId == '#mobile-search-drawer') {
					var searchQuery = Project.getQueryParameterByName("addsearch");
					if (searchQuery != null && searchQuery != "") {
						$('.addsearch').val(searchQuery);
						$('.mobile-search-box i.close').show();
					}
				}
				if (menuId == '#pl-navigation') {
					$('html, body').addClass('mobile-menu-active');
				}
			});
		},
		closeMobileDrawer: function (menuId) {
			$(menuId).animate({
				left: '-100%'
			}, 500, function () {
				$(menuId).scrollTop(0);
				if (menuId == '#pl-navigation') {
					Project.removeMobileDrawerOverlay();
				}
			});
		},
		removeMobileDrawerOverlay: function () {
			$('#pl-navigation').css('left', '-100%');
			$('html, body').removeClass('mobile-menu-active');
			$('#navigation-overlay').removeClass('open');
		},
		openMobileMainMenu: function (menuId) {
			$(menuId).addClass('open');
			$('#pl-navigation').addClass('no-scroll');
			$(menuId).animate({
				left: '0%'
			}, 500, function () {
				$(menuId).css('overflow', 'auto');
			});
		},
		closeMobileMainMenu: function (menuId) {
			$(menuId).css('overflow', 'hidden');
			$(menuId).animate({
				left: '-100%'
			}, 500, function () {
				$(menuId).scrollTop(0);
				$(menuId).removeClass('open');
				$('#pl-navigation').removeClass('no-scroll');
			});
		},
		moveSearchResults: function (fromLocation, toLocation) {
			$(fromLocation + ' .results-search').detach().appendTo(toLocation);
		},
		searchToggle: function () {
			$(function () {
				//Search for new header
				if ($('#search-box').length > 0) {
					$('.search-icon').on('click', function () {
						$(this).parents('#pl-navigation').find('.search-box').show();
						$(this).parents('#pl-navigation').find('.search-box').animate({
							right: '0px'
						}, 500, function () {
							$(this).parents('#main-navigation').find('li:not(:last-child)').css('visibility', 'hidden');
						});
					});
					$('#search-box').on('keyup', function (e) {
						if (e.key === 'Enter') {
							$('.search-results-header').slideDown();
							$('.search-results-header').data('expanded', 'true');
							addsearch.submit();
						}
					});
					$('.search-box i.close').on('click', function () {
						$(this).parents('.search-box').animate({
							right: '-600px'
						}, 500, function () {
							$(this).parents('.search-box').hide();
						});
						$(this).parents('#main-navigation').find('li:not(:last-child)').css('visibility', 'visible');
						$('.search-results-header').slideUp();
						$('.search-results-header').data('expanded', 'false');
						$('#search-box').val("");
					});
					$('#mobile-search-box').on('keyup', function (e) {
						if (e.key === 'Enter') {
							addsearch.submit();
							$('.mobile-search-box i.close').show();
						}
					});
					$('.mobile-search-box i.close').on('click', function () {
						$('#mobile-search-box').val("");
						$('.mobile-search-box i.close').hide();
					});
					// User clicks anywhere outside of the search box while it is open
					$('body').on('click', function (e) {
						if ($('.search-results-header').data('expanded') == 'true') {
							var container = $('.search-results-header');
							if (!container.is(e.target) && container.has(e.target).length === 0) {
								$('.search-results-header').slideUp();
								$('.search-results-header').data('expanded', 'false');
								$('.search-box').animate({
									right: '-600px'
								}, 1000);
								$('.search-box').hide();
								$('.search-box').parents('#main-navigation').find('li:not(:last-child)').css('visibility', 'visible');
								$('#search-box').val("");
							}
						}
					});
				}
				$('.mobile-search').on('click', function () {
					Project.openMobileDrawer('#mobile-search-drawer');
				});
				$('.search-mobile-back').on('click', function () {
					Project.closeMobileDrawer('#mobile-search-drawer');
				});
				$('.search-mobile-close').on('click', function () {
					Project.closeMobileDrawer('#mobile-search-drawer');
				});
			});
		},
		slickCarousel: function () {
			var slickElement = $('.slick-carousel');
			slickElement.on('init reInit afterChange breakpoint', function (event, slick) {
				var totalSlides = slick.getDotCount() + 1;
				$(this).append($(this).find('.slick-nav-bar'));
				if (totalSlides > 1) {
					$(this).addClass('multiple-slides');
				} else {
					$(this).removeClass('multiple-slides');
				}
				if ($(this).find('.slick-active').find('.image-right').length) {
					$(this).addClass('slick-image-right');
				} else {
					$(this).removeClass('slick-image-right');
				}
				$(this).show();
			});
			slickElement.each(function (idx) {
				var carouselId = "carousel" + idx;
				this.id = carouselId;
				var durationSetting = $(this).data("slideduration");
				var autoplaySetting = durationSetting > 0 ? true : false;
				if ($(this).hasClass('slick-carousel-three-col')) {
					$(this).slick({
						prevArrow: '<a class="slick-prev" href="#" title="Previous"><i class="material-symbols-outlined">arrow_left_alt</i></a>',
						nextArrow: '<a class="slick-next" href="#" title="Next"><i class="material-symbols-outlined">arrow_right_alt</i></a>',
						appendArrows: "#" + carouselId + " .slick-nav",
						infinite: true,
						adaptiveHeight: false,
						slide: '.item',
						slidesToShow: 3,
						slidesToScroll: 1,
						responsive: [
							{
								breakpoint: 992,
								settings: {
									slidesToShow: 2,
									slidesToScroll: 1
								}
							},
							{
								breakpoint: 650,
								settings: {
									slidesToShow: 1,
									slidesToScroll: 1
								}
							}
						],
						autoplay: autoplaySetting,
						autoplaySpeed: durationSetting
					});
				} else if ($(this).hasClass('carousel-macro')) {
					var centerMode = false;
					if ($(this).find('.item').length <= 2) {
						centerMode = true;
					}
					$(this).slick({
						prevArrow: '<a class="slick-prev" href="#" title="Previous"><i class="material-symbols-outlined">arrow_left_alt</i></a>',
						nextArrow: '<a class="slick-next" href="#" title="Next"><i class="material-symbols-outlined">arrow_right_alt</i></a>',
						appendArrows: "#" + carouselId + " .slick-nav",
						infinite: false,
						centerMode: centerMode,
						adaptiveHeight: false,
						slide: '.item',
						slidesToShow: 3,
						slidesToScroll: 1,
						responsive: [
							{
								breakpoint: 992,
								settings: {
									slidesToShow: 2,
									slidesToScroll: 1
								}
							},
							{
								breakpoint: 650,
								settings: {
									slidesToShow: 1,
									slidesToScroll: 1
								}
							}
						],
						autoplay: autoplaySetting,
						autoplaySpeed: durationSetting
					});
				} else if ($(this).hasClass('slick-mobile-only')) {
					$(this).slick({
						prevArrow: '<a class="slick-prev" href="#" title="Previous"><i class="material-symbols-outlined">arrow_left_alt</i></a>',
						nextArrow: '<a class="slick-next" href="#" title="Next"><i class="material-symbols-outlined">arrow_right_alt</i></a>',
						appendArrows: "#" + carouselId + " .slick-nav",
						infinite: false,
						adaptiveHeight: true,
						slide: 'li',
						mobileFirst: true,
						responsive: [
							{
								breakpoint: 480,
								settings: "unslick"
							}
						]
					});
					$(window).on('resize', function () {
						$('.slick-mobile-only').slick('resize');
					});
					$(window).on('orientationchange', function () {
						$('.slick-mobile-only').slick('resize');
					});
				} else if ($(this).hasClass('testimonial-carousel')) {
					$(this).slick({
						prevArrow: '<a class="slick-prev" href="#" title="Previous"><i class="material-symbols-outlined">arrow_left_alt</i></a>',
						nextArrow: '<a class="slick-next" href="#" title="Next"><i class="material-symbols-outlined">arrow_right_alt</i></a>',
						appendArrows: "#" + carouselId + " .slick-nav",
						infinite: false,
						adaptiveHeight: true,
						slide: '.item'
					});
				} else {
					$(this).slick({
						arrows: false,
						appendDots: "#" + carouselId + " .slick-nav",
						infinite: true,
						adaptiveHeight: true,
						slide: '.item',
						dots: true,
						slidesToShow: 1,
						slidesToScroll: 1,
						autoplay: autoplaySetting,
						autoplaySpeed: durationSetting
					});
				}
			});
		},
		getQueryParameterByName: function (name) {
			// Return requested query string variable to configure page with given filter
			name = name.replace(/[\[\]]/g, "\\$&");
			var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
				results = regex.exec(window.location.href);
			if (!results) return null;
			if (!results[2]) return '';
			return decodeURIComponent(results[2].replace(/\+/g, " "));
		},
		addQueryParameterByName: function (name, value) {
			// Return page URL with specified query parameter
			// Remove query parameter if it already exists
			var url = Project.removeQueryParameterByName(name);
			var separator = (url.indexOf("?") === -1) ? "?" : "&";
			return url + separator + encodeURIComponent(name) + "=" + encodeURIComponent(value);
		},
		removeQueryParameterByName: function (name) {
			// Return page URL without specified query parameter
			var url = window.location.href;
			var urlparts = url.split('?');
			if (urlparts.length >= 2) {
				var prefix = encodeURIComponent(name) + '=';
				var pars = urlparts[1].split(/[&;]/g);
				//reverse iteration as may be destructive
				for (var i = pars.length; i-- > 0;) {
					//idiom for string.startsWith
					if (pars[i].lastIndexOf(prefix, 0) !== -1) {
						pars.splice(i, 1);
					}
				}
				url = urlparts[0];
				if (pars.length > 0) {
					url += '?' + pars.join('&');
				}
				return url;
			} else {
				return url;
			}
		},
		heroWithTabsDocumentReady: function () {
			if ($('.hero-with-tabs').length > 0) {
				var hero = $('.hero-with-tabs');
				//show first tab if on desktop
				if ($('#pl-fixed-top.desktop').length > 0) {
					$(hero).find(`[data-index='0']`).show();
				}
				$(hero).find('.hero-tabs div').on('click', function () {
					var currentHero = $(this).closest('.hero-with-tabs');
					if ($(this).hasClass('inactive')) {
						$(this).removeClass('inactive').addClass('active');
						$(this).siblings().removeClass('active').addClass('inactive');
						var tabIndex = $(this).attr('data-tabIndex');
						$(currentHero).find(`[data-index]`).addClass('hidden');
						$(currentHero).find('[data-index=' + tabIndex + ']').removeClass('hidden');
					}
				});
			}
		},
		backToTopDocumentReady: function () {
			var fixed = true;
			var relative = false;
			var hidden = true;
			var topwhenrelative = 0;
			$('.back-to-top-container').detach().prependTo('#footer');
			if ($('.icon-back-to-top').length > 0) {
				var scroller = $('.icon-back-to-top');
				var footer = $('#footer');
				$(window).on('scroll', function () {
					var top = $(window).scrollTop();
					var footer_top = footer.offset().top - 10;
					var scroll_bot = scroller.offset().top + 42;
					if (top == 0) {
						hidden = true;
					}
					else if (top > 450 && hidden) {
						$(".icon-back-to-top").fadeIn().css("display", "block");
						hidden = false;
					}
					else if (top <= 450 && !hidden) {
						$(".icon-back-to-top").fadeOut();
						hidden = true;
					}
					if (scroll_bot > footer_top && fixed == true) {
						relative = true;
						fixed = false;
						$('.back-to-top-container').addClass('absolute');
						topwhenrelative = $(window).scrollTop();
					}
					if (top < topwhenrelative && relative == true) {
						relative = false;
						fixed = true;
						$('.back-to-top-container').removeClass('absolute');
					}
				});
				$('.icon-back-to-top').on('click', function () {
					$(".icon-back-to-top").fadeOut("fast");
					$("html, body").animate({ scrollTop: 0 }, "slow");
				});
			}
		},
		textOverImageDocumentReady: function () {
			if ($('.text-over-image').length > 0 && $('.text-over-image.mobile').length == 0) {
				$('.text-over-image').on("mouseenter",
					function () {
						var height = $(this).find('.text-over-image-background').height() + 21;
						$(this).find('.text-over-image-background').css("top", "calc(100% - " + height + "px)");
					}).on("mouseleave",
						function () {
							$(this).find('.text-over-image-background').css("top", "calc(100% - 46px)");
						});
			}
			if ($('.text-over-image.mobile').length > 0) {
				var buttonClicked = false;
				$('.text-over-image.mobile').on('click', function (e) {
					$(this).find('.btn').on('click', function () {
						buttonClicked = true;
					});
					if (!buttonClicked) {
						e.preventDefault();
						if ($(this).hasClass('mobile')) {
							if ($(this).hasClass('closed')) {
								$(this).find('i').hide();
								var height = $(this).find('.text-over-image-background').height() + 21;
								$(this).find('.text-over-image-background').css("top", "calc(100% - " + height + "px)");
								$(this).removeClass('closed').addClass('open');
							}
							else if ($(this).hasClass('open')) {
								$(this).find('.text-over-image-background').css("top", "calc(100% - 44px)");
								$(this).removeClass('open').addClass('closed');
								$(this).find('i').show();
							}
						}
					}
					else {
						buttonClicked = false;
					}
				});
			}
		},
		accordionDocumentReady: function () {
			if ($('.accordion-heading').length > 0) {
				$('.accordion-heading').on('click', function () {
					if ($(this).find('i.up').is(":visible")) {
						$(this).find('i.up').hide();
						$(this).find('i.down').show();
						$(this).siblings('.accordion-content').slideUp();
						$(this).removeClass('open').addClass('closed');
					}
					else {
						$(this).find('i.down').hide();
						$(this).find('i.up').show();
						$(this).siblings('.accordion-content').slideDown();
						$(this).removeClass('closed').addClass('open');
					}
				});
			}
		},
		snippetDocumentReady: function () {
			if ($('.snippets').length > 0) {
				$('.snippets .snippet-menu:first-child').addClass('active');
				$('.snippets .snippet-content:first-child').addClass('active');
				$('.snippets .snippet-mobile-heading').on('click', function () {
					if ($(this).find('i.up').is(":visible")) {
						$(this).find('i.up').hide();
						$(this).find('i.down').show();
						var index = $(this).data("snippetmobilemenuitem");
						$(this).parents('.snippets').find('[data-snippetmobilecontentitem=' + index + ']').slideUp();
					}
					else {
						$(this).find('i.down').hide();
						$(this).find('i.up').show();
						var index = $(this).data("snippetmobilemenuitem");
						var desktopContent = $(this).parents('.snippets').find('#' + index + ' .snippet-piece').clone();
						var mobileContentElement = $(this).parents('.snippets').find('[data-snippetmobilecontentitem=' + index + ']');
						$(mobileContentElement).empty();
						$(desktopContent).prependTo(mobileContentElement);
						$(mobileContentElement).slideDown();
					}
				});
			}
		},
		callOutMacro: function () {
			if ($('.call-out').length > 0) {
				$('.call-out .toggle-details').on('click', function () {
					if ($(this).find('.call-out-show').is(":visible")) {
						$(this).find('.call-out-show').hide();
						$(this).find('.call-out-hide').show();
						$(this).parents('.contents').find('.call-out-details').slideDown();
					}
					else {
						$(this).find('.call-out-hide').hide();
						$(this).find('.call-out-show').show();
						$(this).parents('.contents').find('.call-out-details').slideUp();
					}
				});
			}
		},
		tabsMacro: function () {
			if ($('.tabs-container').length > 0) {
				$(window).on("load", function () {
					checkTabMenuWidths();
				});
				$(window).on('resize', function () {
					checkTabMenuWidths();
					changeToDesktopForCollapseOnMobile();
				});
				$('.tabs-container.collapse-on-mobile .tab-content .mobile-nav').on('click', function () {
					var tabId = $(this).find('a').attr("aria-controls");
					if ($(this).find('i.up').is(":visible")) {
						$(this).find('i.up').hide();
						$(this).find('i.down').show();
						$(this).siblings('#' + tabId).slideUp();
						$(this).removeClass('open').addClass('closed');
					}
					else {
						$(this).find('i.down').hide();
						$(this).find('i.up').show();
						$(this).siblings('#' + tabId).slideDown();
						$(this).removeClass('closed').addClass('open');
					}
				});
				$('.tabs-container .nav-tabs-container .nav-tabs').on('scroll', function () {
					checkTabScrollPosition($(this));
				});
				$('.tabs-container .nav-tabs-container').on('click', '.glyph.arrow-right', function () {
					scrollTabMenu($(this), 'right');
				});
				$('.tabs-container .nav-tabs-container').on('click', '.glyph.arrow-left', function () {
					scrollTabMenu($(this), 'left');
				});
				function scrollTabMenu(arrowClicked, direction) {
					$(this).siblings('.glyph').show();
					var widthOfMacro = arrowClicked.siblings('.nav-tabs').width();
					var navigation = arrowClicked.siblings('.nav-tabs');
					var pixelCountMoved = 200;
					var newScrollPosition = 0;
					if (direction == 'left') {
						newScrollPosition = navigation.scrollLeft() - pixelCountMoved;
						navigation.animate({ scrollLeft: '-=' + pixelCountMoved }, 300);
						if (calculateScrollPosition(newScrollPosition, navigation[0].scrollWidth, widthOfMacro) <= 0) {
							$(this).hide();
						}
					} else {
						newScrollPosition = navigation.scrollLeft() + pixelCountMoved;
						navigation.animate({ scrollLeft: '+=' + pixelCountMoved }, 300);
						if (calculateScrollPosition(newScrollPosition, navigation[0].scrollWidth, widthOfMacro) >= 100) {
							$(this).hide();
						}
					}
				}
				function calculateScrollPosition(newScrollPosition, scrollWidth, widthOfMacro) {
					return 100 * newScrollPosition / (scrollWidth - widthOfMacro);
				}
				function checkTabScrollPosition(tabMenuScrolled) {
					var scrollPercentage = calculateScrollPosition(tabMenuScrolled.scrollLeft(), tabMenuScrolled[0].scrollWidth, tabMenuScrolled.width());
					if (scrollPercentage >= 100) {
						tabMenuScrolled.siblings('.glyph.arrow-left').show();
						tabMenuScrolled.siblings('.glyph.arrow-right').hide();
					}
					else if (scrollPercentage <= 0) {
						tabMenuScrolled.siblings('.glyph.arrow-left').hide();
						tabMenuScrolled.siblings('.glyph.arrow-right').show();
					}
					else {
						tabMenuScrolled.siblings('.glyph.arrow-right').show();
						tabMenuScrolled.siblings('.glyph.arrow-left').show();
					}
				}
				function changeToDesktopForCollapseOnMobile() {
					$('.tabs-container.collapse-on-mobile').each(function () {
						$(this).find('.tab-content .mobile-nav').each(function () {
							$(this).find('i.up').hide();
							$(this).find('i.down').show();
						});
						$(this).find('.tab-content .tab-pane').each(function () {
							$(this).removeClass("active");
							$(this).css('display', '');
						});
						$(this).find('.nav-tabs li.active').each(function () {
							var activeTabId = $(this).find('a').attr("aria-controls");
							$('.tabs-container.collapse-on-mobile .tab-content').find('#' + activeTabId).addClass("active");
						});
					});
				}
				function checkTabMenuWidths() {
					$('.tabs-container ul.nav-tabs').each(function () {
						var widthOfMacro = $(this).width();
						var widthOfMenu = $(this)[0].scrollWidth;
						if (widthOfMenu > widthOfMacro) {
							$(this).removeClass('left').removeClass('center').removeClass('right').addClass('left');
							checkIfActiveTabIsInView($(this), widthOfMacro);
							checkTabScrollPosition($(this));
						}
						else {
							var alignment = $(this).attr('data-alignment');
							$(this).removeClass('left').removeClass('center').removeClass('right').addClass(alignment);
							$(this).siblings('.glyph').hide();
						}
					});
				}
				function checkIfActiveTabIsInView(tabMenu, widthOfMacro) {
					var activeTab = tabMenu.children('li.active')[0];
					var rightPositionOfActiveTab = activeTab.offsetLeft + activeTab.offsetWidth - 25;
					var leftPositionOfActiveTab = activeTab.offsetLeft - 25;
					if (rightPositionOfActiveTab > widthOfMacro) {
						tabMenu.animate({ scrollLeft: '+=' + leftPositionOfActiveTab }, 300);
					}
				}
			}
		},
		wisitaVideo: function () {
			if ($('.wistia_embed').length > 0) {
				window._wq = window._wq || [];
				_wq.push({
					id: "_all", onReady: function (video) {
						video.bind("popovershow", function () {
							$("html").css({ "overflow": "hidden" });
						});
						video.bind("popoverhide", function () {
							$("html").css({ "overflow": "auto" });
							$("body").css({ "height": "100vh" });
						});
					}
				});
			}
		},
		tableOfContents: function () {
			if ($('.table-of-contents').length > 0) {
				var lastScrollTop = 0;
				$(window).on("scroll", function () {
					var st = $(this).scrollTop();
					var isScrollDown = true;
					if (st < lastScrollTop) {
						isScrollDown = false;
					}
					lastScrollTop = st;
					checkAllAchors(isScrollDown);
				});
				$(function () {
					checkAllAchors(false);
				});
				function checkAllAchors(isScrollDown) {
					var anchors = $('.main-content a[id]');
					if (isScrollDown) {
						$(anchors).each(function () {
							checkIfAnchorIsInViewport($(this));
						});
					}
					else {
						$($(anchors).get().reverse()).each(function () {
							checkIfAnchorIsInViewport($(this));
						});
					}
				}
				function checkIfAnchorIsInViewport(anchor) {
					var anchorId = '#' + $(anchor).attr('id');
					if ($(anchor).isInViewport(175)) {
						var tableOfContentsItem = $(".table-of-contents a[data-anchor='" + anchorId + "']");
						$('.table-of-contents a').removeClass('in-viewport');
						$(tableOfContentsItem).addClass('in-viewport');
					}
				}
			}
		},
		bindEvents: function () {
			Project.mainNav();
			Project.searchToggle();
			Project.heroWithTabsDocumentReady();
			Project.backToTopDocumentReady();
			Project.textOverImageDocumentReady();
			Project.accordionDocumentReady();
			Project.snippetDocumentReady();
			Project.callOutMacro();
			Project.tabsMacro();
			Project.wisitaVideo();
			Project.tableOfContents();
		},
		loadPlugins: function () {
			Project.slickCarousel();
		},
		init: function () {
			Project.bindEvents();
			Project.loadPlugins();
		}
	});
	$(function () {
		Project.init();
	});
})(jQuery);
function clearFields(fields) {
	for (var f in fields) {
		$(fields[f]).val("");
	}
}
function genericFormDocumentReady() {
	window.clientID = "";
	window.trackID = "";
	window.gclid = getUrlParameter("gclid");
	window.utmCampaign = getUrlParameter("utm_campaign");
	window.utmContent = getUrlParameter("utm_content");
	window.utmMedium = getUrlParameter("utm_medium");
	window.utmSource = getUrlParameter("utm_source");
	window.utmTerm = getUrlParameter("utm_term");
	if (typeof gaGlobal === 'object') {
		window.clientID = gaGlobal.vid;
		window.trackID = 'G-ZV16XB8CX5';
	}
}
function stayConnectedDocumentReady(locale, plEvent, agreeLabel, restrictedCountryMessage) {
	$.validator.addMethod("validCountryPDF", function () {
		return $('.stay-connected form select[id="Country-StayConnected"] option:selected').data("region") !== "";
	},
		restrictedCountryMessage
	);
	$('.stay-connected form').validate({
		submitHandler: function (form) {
			plEvent = plEvent === "" ? "pl_event_missing-stay-connected" : plEvent;
			var pardotData = {
				'email': $('.stay-connected form input[id="Email-StayConnected"]').val(),
				'country': $('.stay-connected form select[id="Country-StayConnected"]').val(),
				'canadianOptIn': $('.stay-connected form input[id="CanadianOptIn-StayConnected"]').prop('checked') === true ? "true" : "false",
				'gdprOptIn': $('.stay-connected form input[id="GDPROptIn-StayConnected"]').is(':visible') ? ($('.stay-connected form input[id="GDPROptIn-StayConnected"]').prop('checked') === true ? agreeLabel : "Interest") : "",
				'locale': locale,
				'formUrl': window.location.href,
				'pardotFormUrl': $('.stay-connected form input[id="PardotFormHandlerUrl-StayConnected"]').val(),
				'gaClientID': window.clientID,
				'gaTrackingID': window.trackID,
				'utmCampaign': window.utmCampaign,
				'utmContent': window.utmContent,
				'utmMedium': window.utmMedium,
				'utmSource': window.utmSource,
				'utmTerm': window.utmTerm
			};
			var url = $('.stay-connected form').attr('data-posturl');
			$('.stay-connected .form-section').hide();
			$('.stay-connected .loading-spinner').show();
			$.ajax({
				type: "POST",
				url: url,
				data: pardotData,
				contentType: "application/x-www-form-urlencoded",
				success: function (msg) {
					// Google Analytics tracking
					var dataLayer = window.dataLayer = window.dataLayer || [];
					dataLayer.push({
						event: 'gtm.formSubmit',
						'form': 'Stay Connected',
						'country': $('.stay-connected form select[id="Country-StayConnected"]').val(),
						'region': $('.stay-connected form select[id="Country-StayConnected"] option:selected').data("region"),
						'plEvent': plEvent
					});
					$('.stay-connected .loading-spinner').hide();
					$('.stay-connected .thank-you-section').show();
					$('.stay-connected .form-section').hide();
					clearFields(['.stay-connected form input[id="Email-StayConnected"]']);
				},
				error: function (msg) {
					$('.stay-connected .loading-spinner').hide();
					$('.stay-connected .form-section').show();
				}
			});
			return false;
		},
		onfocusout: function (element) {
			this.element(element);
		},
		rules: {
			Country: {
				validCountryPDF: true
			}
		}
	});
	$('.stay-connected #Country-StayConnected').on('change', function () {
		if ($(this).val() == "CA") {
			$('.stay-connected #CanadianCheckbox-StayConnected').fadeIn();
		}
		else {
			$('.stay-connected #CanadianCheckbox-StayConnected').fadeOut();
		}
	});
}
function ensureClickToEnlargeImageExists() {
	var clickToEnlargeMacros = document.getElementsByClassName("example-image-link");
	if (clickToEnlargeMacros.length > 0) {
		for (var i = 0; i < clickToEnlargeMacros.length; i++) {
			var href = clickToEnlargeMacros[i].href;
			if (!imageExists(href)) {
				clickToEnlargeMacros[i].removeAttribute('data-lightbox');
				clickToEnlargeMacros[i].removeAttribute('href');
				var link = clickToEnlargeMacros[i].getElementsByClassName("link-text")[0];
				link.remove();
			}
		}
		var script = document.createElement("script");
		script.src = "/Scripts/vendor/lightbox.min.js";
		document.body.appendChild(script);
		var link = document.createElement("link");
		link.rel = "stylesheet";
		link.type = "text/css";
		link.href = "/css/lightbox/lightbox.min.css";
		document.head.appendChild(link);
	}
}
function imageExists(imageUrl) {
	var http = new XMLHttpRequest();
	http.open('HEAD', imageUrl, true);
	http.send();
	return http.status != 404;
}
function matchHeights() {
	// Classes follow naming convention match-height-card-title, match-height-card-image, etc.
	var matchHeightElements = $('[class*=match-height-]');
	var distinctMatchHeightClasses = [];
	matchHeightElements.each(function () {
		var matchHeightClassName = "";
		var matchHeightElement = $(this);
		var classList = matchHeightElement.attr('class').split(/\s+/);
		for (var j = 0; j < classList.length; j++) {
			if (classList[j].indexOf("match-height") !== -1) {
				matchHeightClassName = classList[j];
				break;
			}
		}
		if (distinctMatchHeightClasses[matchHeightClassName] === undefined) {
			distinctMatchHeightClasses[matchHeightClassName] = new Array();
		}
		distinctMatchHeightClasses[matchHeightClassName].push(matchHeightElement);
	});
	// Iterate over array
	for (var distinctClass in distinctMatchHeightClasses) {
		//remove existing height
		$("." + distinctClass).removeAttr("style");
		var tallestHeight = 0;
		var elements = distinctMatchHeightClasses[distinctClass];
		for (var item in elements) {
			var element = elements[item];
			var height = element.height();
			if (height > tallestHeight) {
				tallestHeight = height;
			}
		}
		//set all elements of the class to the tallestHeight
		$("." + distinctClass).height(tallestHeight);
	}
}
function getUrlParameter(name) {
	name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
	var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
	var results = regex.exec(location.search);
	return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
function unionArrays(x, y) {
	var obj = {};
	for (var i = x.length - 1; i >= 0; --i) {
		obj[x[i]] = x[i];
	}
	for (var i = y.length - 1; i >= 0; --i) {
		obj[y[i]] = y[i];
	}
	var res = []
	for (var k in obj) {
		if (obj.hasOwnProperty(k)) {
			res.push(obj[k]);
		}
	}
	return res;
}
function splitRawQuerystringFilters(filter) {
	if (filter !== "") {
		return filter.split(':');
	}
	else {
		return [];
	}
}
function getQuerystringValue(key) {
	var query = window.location.search.substring(1);
	var vars = query.split('&');
	for (var i = 0; i < vars.length; i++) {
		var pair = vars[i].split('=');
		if (decodeURIComponent(pair[0]) == key) {
			return decodeURIComponent(pair[1]);
		}
	}
	return "";
}
$.fn.isInViewport = function (shift) {
	var elementTop = $(this).offset().top + shift;
	var elementBottom = elementTop + $(this).outerHeight();
	var viewportTop = $(window).scrollTop();
	var viewportBottom = viewportTop + $(window).height();
	return elementBottom > viewportTop && elementTop < viewportBottom;
};
/* ========================================================================
 * Bootstrap: dropdown.js v3.3.7
 * http://getbootstrap.com/javascript/#dropdowns
 * ========================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */
+function ($) {
	'use strict';
	// DROPDOWN CLASS DEFINITION
	// =========================
	var backdrop = '.dropdown-backdrop'
	var toggle = '[data-toggle="dropdown"]'
	var Dropdown = function (element) {
		$(element).on('click.bs.dropdown', this.toggle)
	}
	Dropdown.VERSION = '3.3.7'
	function getParent($this) {
		var selector = $this.attr('data-target')
		if (!selector) {
			selector = $this.attr('href')
			selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
		}
		var $parent = selector && $(selector)
		return $parent && $parent.length ? $parent : $this.parent()
	}
	function clearMenus(e) {
		if (e && e.which === 3) return
		$(backdrop).remove()
		$(toggle).each(function () {
			var $this = $(this)
			var $parent = getParent($this)
			var relatedTarget = { relatedTarget: this }
			if (!$parent.hasClass('open')) return
			if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
			$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
			if (e.isDefaultPrevented()) return
			$this.attr('aria-expanded', 'false')
			$parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
		})
	}
	Dropdown.prototype.toggle = function (e) {
		var $this = $(this)
		if ($this.is('.disabled, :disabled')) return
		var $parent = getParent($this)
		var isActive = $parent.hasClass('open')
		clearMenus()
		if (!isActive) {
			if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
				// if mobile we use a backdrop because click events don't delegate
				$(document.createElement('div'))
				  .addClass('dropdown-backdrop')
				  .insertAfter($(this))
				  .on('click', clearMenus)
			}
			var relatedTarget = { relatedTarget: this }
			$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
			if (e.isDefaultPrevented()) return
			$this
			  .trigger('focus')
			  .attr('aria-expanded', 'true')
			$parent
			  .toggleClass('open')
			  .trigger($.Event('shown.bs.dropdown', relatedTarget))
		}
		return false
	}
	Dropdown.prototype.keydown = function (e) {
		if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
		var $this = $(this)
		e.preventDefault()
		e.stopPropagation()
		if ($this.is('.disabled, :disabled')) return
		var $parent = getParent($this)
		var isActive = $parent.hasClass('open')
		if (!isActive && e.which != 27 || isActive && e.which == 27) {
			if (e.which == 27) $parent.find(toggle).trigger('focus')
			return $this.trigger('click')
		}
		var desc = ' li:not(.disabled):visible a'
		var $items = $parent.find('.dropdown-menu' + desc)
		if (!$items.length) return
		var index = $items.index(e.target)
		if (e.which == 38 && index > 0) index--         // up
		if (e.which == 40 && index < $items.length - 1) index++         // down
		if (!~index) index = 0
		$items.eq(index).trigger('focus')
	}
	// DROPDOWN PLUGIN DEFINITION
	// ==========================
	function Plugin(option) {
		return this.each(function () {
			var $this = $(this)
			var data = $this.data('bs.dropdown')
			if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
			if (typeof option == 'string') data[option].call($this)
		})
	}
	var old = $.fn.dropdown
	$.fn.dropdown = Plugin
	$.fn.dropdown.Constructor = Dropdown
	// DROPDOWN NO CONFLICT
	// ====================
	$.fn.dropdown.noConflict = function () {
		$.fn.dropdown = old
		return this
	}
	// APPLY TO STANDARD DROPDOWN ELEMENTS
	// ===================================
	$(document)
	  .on('click.bs.dropdown.data-api', clearMenus)
	  .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
	  .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
	  .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
	  .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
}(jQuery);
/* ========================================================================
 * Bootstrap: transition.js v3.3.7
 * http://getbootstrap.com/javascript/#transitions
 * ========================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */
+function ($) {
	'use strict';
	// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
	// ============================================================
	function transitionEnd() {
		var el = document.createElement('bootstrap')
		var transEndEventNames = {
			WebkitTransition: 'webkitTransitionEnd',
			MozTransition: 'transitionend',
			OTransition: 'oTransitionEnd otransitionend',
			transition: 'transitionend'
		}
		for (var name in transEndEventNames) {
			if (el.style[name] !== undefined) {
				return { end: transEndEventNames[name] }
			}
		}
		return false // explicit for ie8 (  ._.)
	}
	// http://blog.alexmaccaw.com/css-transitions
	$.fn.emulateTransitionEnd = function (duration) {
		var called = false
		var $el = this
		$(this).one('bsTransitionEnd', function () { called = true })
		var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
		setTimeout(callback, duration)
		return this
	}
	$(function () {
		$.support.transition = transitionEnd()
		if (!$.support.transition) return
		$.event.special.bsTransitionEnd = {
			bindType: $.support.transition.end,
			delegateType: $.support.transition.end,
			handle: function (e) {
				if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
			}
		}
	})
}(jQuery);
/* ========================================================================
 * Bootstrap: collapse.js v3.3.7
 * http://getbootstrap.com/javascript/#collapse
 * ========================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */
/* jshint latedef: false */
+function ($) {
	'use strict';
	// COLLAPSE PUBLIC CLASS DEFINITION
	// ================================
	var Collapse = function (element, options) {
		this.$element = $(element)
		this.options = $.extend({}, Collapse.DEFAULTS, options)
		this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
							   '[data-toggle="collapse"][data-target="#' + element.id + '"]')
		this.transitioning = null
		if (this.options.parent) {
			this.$parent = this.getParent()
		} else {
			this.addAriaAndCollapsedClass(this.$element, this.$trigger)
		}
		if (this.options.toggle) this.toggle()
	}
	Collapse.VERSION = '3.3.7'
	Collapse.TRANSITION_DURATION = 350
	Collapse.DEFAULTS = {
		toggle: true
	}
	Collapse.prototype.dimension = function () {
		var hasWidth = this.$element.hasClass('width')
		return hasWidth ? 'width' : 'height'
	}
	Collapse.prototype.show = function () {
		if (this.transitioning || this.$element.hasClass('in')) return
		var activesData
		var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
		if (actives && actives.length) {
			activesData = actives.data('bs.collapse')
			if (activesData && activesData.transitioning) return
		}
		var startEvent = $.Event('show.bs.collapse')
		this.$element.trigger(startEvent)
		if (startEvent.isDefaultPrevented()) return
		if (actives && actives.length) {
			Plugin.call(actives, 'hide')
			activesData || actives.data('bs.collapse', null)
		}
		var dimension = this.dimension()
		this.$element
		  .removeClass('collapse')
		  .addClass('collapsing')[dimension](0)
		  .attr('aria-expanded', true)
		this.$trigger
		  .removeClass('collapsed')
		  .attr('aria-expanded', true)
		this.transitioning = 1
		var complete = function () {
			this.$element
			  .removeClass('collapsing')
			  .addClass('collapse in')[dimension]('')
			this.transitioning = 0
			this.$element
			  .trigger('shown.bs.collapse')
		}
		if (!$.support.transition) return complete.call(this)
		var scrollSize = $.camelCase(['scroll', dimension].join('-'))
		this.$element
		  .one('bsTransitionEnd', $.proxy(complete, this))
		  .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
	}
	Collapse.prototype.hide = function () {
		if (this.transitioning || !this.$element.hasClass('in')) return
		var startEvent = $.Event('hide.bs.collapse')
		this.$element.trigger(startEvent)
		if (startEvent.isDefaultPrevented()) return
		var dimension = this.dimension()
		this.$element[dimension](this.$element[dimension]())[0].offsetHeight
		this.$element
		  .addClass('collapsing')
		  .removeClass('collapse in')
		  .attr('aria-expanded', false)
		this.$trigger
		  .addClass('collapsed')
		  .attr('aria-expanded', false)
		this.transitioning = 1
		var complete = function () {
			this.transitioning = 0
			this.$element
			  .removeClass('collapsing')
			  .addClass('collapse')
			  .trigger('hidden.bs.collapse')
		}
		if (!$.support.transition) return complete.call(this)
		this.$element
		  [dimension](0)
		  .one('bsTransitionEnd', $.proxy(complete, this))
		  .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
	}
	Collapse.prototype.toggle = function () {
		this[this.$element.hasClass('in') ? 'hide' : 'show']()
	}
	Collapse.prototype.getParent = function () {
		return $(this.options.parent)
		  .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
		  .each($.proxy(function (i, element) {
		  	var $element = $(element)
		  	this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
		  }, this))
		  .end()
	}
	Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
		var isOpen = $element.hasClass('in')
		$element.attr('aria-expanded', isOpen)
		$trigger
		  .toggleClass('collapsed', !isOpen)
		  .attr('aria-expanded', isOpen)
	}
	function getTargetFromTrigger($trigger) {
		var href
		var target = $trigger.attr('data-target')
		  || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
		return $(target)
	}
	// COLLAPSE PLUGIN DEFINITION
	// ==========================
	function Plugin(option) {
		return this.each(function () {
			var $this = $(this)
			var data = $this.data('bs.collapse')
			var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
			if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
			if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
			if (typeof option == 'string') data[option]()
		})
	}
	var old = $.fn.collapse
	$.fn.collapse = Plugin
	$.fn.collapse.Constructor = Collapse
	// COLLAPSE NO CONFLICT
	// ====================
	$.fn.collapse.noConflict = function () {
		$.fn.collapse = old
		return this
	}
	// COLLAPSE DATA-API
	// =================
	$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
		var $this = $(this)
		if (!$this.attr('data-target')) e.preventDefault()
		var $target = getTargetFromTrigger($this)
		var data = $target.data('bs.collapse')
		var option = data ? 'toggle' : $this.data()
		Plugin.call($target, option)
	})
}(jQuery);
/* ========================================================================
 * Bootstrap: tab.js v3.3.7
 * http://getbootstrap.com/javascript/#tabs
 * ========================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */
+function ($) {
	'use strict';
	// TAB CLASS DEFINITION
	// ====================
	var Tab = function (element) {
		// jscs:disable requireDollarBeforejQueryAssignment
		this.element = $(element)
		// jscs:enable requireDollarBeforejQueryAssignment
	}
	Tab.VERSION = '3.3.7'
	Tab.TRANSITION_DURATION = 150
	Tab.prototype.show = function () {
		var $this = this.element
		var $ul = $this.closest('ul:not(.dropdown-menu)')
		var selector = $this.data('target')
		if (!selector) {
			selector = $this.attr('href')
			selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
		}
		if ($this.parent('li').hasClass('active')) return
		var $previous = $ul.find('.active:last a')
		var hideEvent = $.Event('hide.bs.tab', {
			relatedTarget: $this[0]
		})
		var showEvent = $.Event('show.bs.tab', {
			relatedTarget: $previous[0]
		})
		$previous.trigger(hideEvent)
		$this.trigger(showEvent)
		if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
		var $target = $(selector)
		this.activate($this.closest('li'), $ul)
		this.activate($target, $target.parent(), function () {
			$previous.trigger({
				type: 'hidden.bs.tab',
				relatedTarget: $this[0]
			})
			$this.trigger({
				type: 'shown.bs.tab',
				relatedTarget: $previous[0]
			})
		})
	}
	Tab.prototype.activate = function (element, container, callback) {
		var $active = container.find('> .active')
		var transition = callback
		  && $.support.transition
		  && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
		function next() {
			$active
			  .removeClass('active')
			  .find('> .dropdown-menu > .active')
				.removeClass('active')
			  .end()
			  .find('[data-toggle="tab"]')
				.attr('aria-expanded', false)
			element
			  .addClass('active')
			  .find('[data-toggle="tab"]')
				.attr('aria-expanded', true)
			if (transition) {
				element[0].offsetWidth // reflow for transition
				element.addClass('in')
			} else {
				element.removeClass('fade')
			}
			if (element.parent('.dropdown-menu').length) {
				element
				  .closest('li.dropdown')
					.addClass('active')
				  .end()
				  .find('[data-toggle="tab"]')
					.attr('aria-expanded', true)
			}
			callback && callback()
		}
		$active.length && transition ?
		  $active
			.one('bsTransitionEnd', next)
			.emulateTransitionEnd(Tab.TRANSITION_DURATION) :
		  next()
		$active.removeClass('in')
	}
	// TAB PLUGIN DEFINITION
	// =====================
	function Plugin(option) {
		return this.each(function () {
			var $this = $(this)
			var data = $this.data('bs.tab')
			if (!data) $this.data('bs.tab', (data = new Tab(this)))
			if (typeof option == 'string') data[option]()
		})
	}
	var old = $.fn.tab
	$.fn.tab = Plugin
	$.fn.tab.Constructor = Tab
	// TAB NO CONFLICT
	// ===============
	$.fn.tab.noConflict = function () {
		$.fn.tab = old
		return this
	}
	// TAB DATA-API
	// ============
	var clickHandler = function (e) {
		e.preventDefault()
		Plugin.call($(this), 'show')
	}
	$(document)
	  .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
	  .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
}(jQuery);;
!function (i) { "use strict"; "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery) }(function (i) { "use strict"; var e = window.Slick || {}; (e = function () { var e = 0; return function (t, o) { var s, n = this; n.defaults = { accessibility: !0, adaptiveHeight: !1, appendArrows: i(t), appendDots: i(t), arrows: !0, 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: !1, autoplaySpeed: 3e3, centerMode: !1, centerPadding: "50px", cssEase: "ease", customPaging: function (e, t) { return i('<button type="button" />').text(t + 1) }, dots: !1, dotsClass: "slick-dots", draggable: !0, easing: "linear", edgeFriction: .35, fade: !1, focusOnSelect: !1, focusOnChange: !1, infinite: !0, initialSlide: 0, lazyLoad: "ondemand", mobileFirst: !1, pauseOnHover: !0, pauseOnFocus: !0, pauseOnDotsHover: !1, respondTo: "window", responsive: null, rows: 1, rtl: !1, slide: "", slidesPerRow: 1, slidesToShow: 1, slidesToScroll: 1, speed: 500, swipe: !0, swipeToSlide: !1, touchMove: !0, touchThreshold: 5, useCSS: !0, useTransform: !0, variableWidth: !1, vertical: !1, verticalSwiping: !1, waitForAnimate: !0, zIndex: 1e3 }, n.initials = { animating: !1, dragging: !1, autoPlayTimer: null, currentDirection: 0, currentLeft: null, currentSlide: 0, direction: 1, $dots: null, listWidth: null, listHeight: null, loadIndex: 0, $nextArrow: null, $prevArrow: null, scrolling: !1, slideCount: null, slideWidth: null, $slideTrack: null, $slides: null, sliding: !1, slideOffset: 0, swipeLeft: null, swiping: !1, $list: null, touchObject: {}, transformsEnabled: !1, unslicked: !1 }, i.extend(n, n.initials), n.activeBreakpoint = null, n.animType = null, n.animProp = null, n.breakpoints = [], n.breakpointSettings = [], n.cssTransitions = !1, n.focussed = !1, n.interrupted = !1, n.hidden = "hidden", n.paused = !0, n.positionProp = null, n.respondTo = null, n.rowCount = 1, n.shouldClick = !0, n.$slider = i(t), n.$slidesCache = null, n.transformType = null, n.transitionType = null, n.visibilityChange = "visibilitychange", n.windowWidth = 0, n.windowTimer = null, s = i(t).data("slick") || {}, n.options = i.extend({}, n.defaults, o, s), n.currentSlide = n.options.initialSlide, n.originalSettings = n.options, void 0 !== document.mozHidden ? (n.hidden = "mozHidden", n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden", n.visibilityChange = "webkitvisibilitychange"), n.autoPlay = i.proxy(n.autoPlay, n), n.autoPlayClear = i.proxy(n.autoPlayClear, n), n.autoPlayIterator = i.proxy(n.autoPlayIterator, n), n.changeSlide = i.proxy(n.changeSlide, n), n.clickHandler = i.proxy(n.clickHandler, n), n.selectHandler = i.proxy(n.selectHandler, n), n.setPosition = i.proxy(n.setPosition, n), n.swipeHandler = i.proxy(n.swipeHandler, n), n.dragHandler = i.proxy(n.dragHandler, n), n.keyHandler = i.proxy(n.keyHandler, n), n.instanceUid = e++ , n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, n.registerBreakpoints(), n.init(!0) } }()).prototype.activateADA = function () { this.$slideTrack.find(".slick-active").attr({ "aria-hidden": "false" }).find("a, input, button, select").attr({ tabindex: "0" }) }, e.prototype.addSlide = e.prototype.slickAdd = function (e, t, o) { var s = this; if ("boolean" == typeof t) o = t, t = null; else if (t < 0 || t >= s.slideCount) return !1; s.unload(), "number" == typeof t ? 0 === t && 0 === s.$slides.length ? i(e).appendTo(s.$slideTrack) : o ? i(e).insertBefore(s.$slides.eq(t)) : i(e).insertAfter(s.$slides.eq(t)) : !0 === o ? i(e).prependTo(s.$slideTrack) : i(e).appendTo(s.$slideTrack), s.$slides = s.$slideTrack.children(this.options.slide), s.$slideTrack.children(this.options.slide).detach(), s.$slideTrack.append(s.$slides), s.$slides.each(function (e, t) { i(t).attr("data-slick-index", e) }), s.$slidesCache = s.$slides, s.reinit() }, e.prototype.animateHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.animate({ height: e }, i.options.speed) } }, e.prototype.animateSlide = function (e, t) { var o = {}, s = this; s.animateHeight(), !0 === s.options.rtl && !1 === s.options.vertical && (e = -e), !1 === s.transformsEnabled ? !1 === s.options.vertical ? s.$slideTrack.animate({ left: e }, s.options.speed, s.options.easing, t) : s.$slideTrack.animate({ top: e }, s.options.speed, s.options.easing, t) : !1 === s.cssTransitions ? (!0 === s.options.rtl && (s.currentLeft = -s.currentLeft), i({ animStart: s.currentLeft }).animate({ animStart: e }, { duration: s.options.speed, easing: s.options.easing, step: function (i) { i = Math.ceil(i), !1 === s.options.vertical ? (o[s.animType] = "translate(" + i + "px, 0px)", s.$slideTrack.css(o)) : (o[s.animType] = "translate(0px," + i + "px)", s.$slideTrack.css(o)) }, complete: function () { t && t.call() } })) : (s.applyTransition(), e = Math.ceil(e), !1 === s.options.vertical ? o[s.animType] = "translate3d(" + e + "px, 0px, 0px)" : o[s.animType] = "translate3d(0px," + e + "px, 0px)", s.$slideTrack.css(o), t && setTimeout(function () { s.disableTransition(), t.call() }, s.options.speed)) }, e.prototype.getNavTarget = function () { var e = this, t = e.options.asNavFor; return t && null !== t && (t = i(t).not(e.$slider)), t }, e.prototype.asNavFor = function (e) { var t = this.getNavTarget(); null !== t && "object" == typeof t && t.each(function () { var t = i(this).slick("getSlick"); t.unslicked || t.slideHandler(e, !0) }) }, e.prototype.applyTransition = function (i) { var e = this, t = {}; !1 === e.options.fade ? t[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : t[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase, !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.autoPlay = function () { var i = this; i.autoPlayClear(), i.slideCount > i.options.slidesToShow && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed)) }, e.prototype.autoPlayClear = function () { var i = this; i.autoPlayTimer && clearInterval(i.autoPlayTimer) }, e.prototype.autoPlayIterator = function () { var i = this, e = i.currentSlide + i.options.slidesToScroll; i.paused || i.interrupted || i.focussed || (!1 === i.options.infinite && (1 === i.direction && i.currentSlide + 1 === i.slideCount - 1 ? i.direction = 0 : 0 === i.direction && (e = i.currentSlide - i.options.slidesToScroll, i.currentSlide - 1 == 0 && (i.direction = 1))), i.slideHandler(e)) }, e.prototype.buildArrows = function () { var e = this; !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"), e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"), e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows), e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows), !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({ "aria-disabled": "true", tabindex: "-1" })) }, e.prototype.buildDots = function () { var e, t, o = this; if (!0 === o.options.dots) { for (o.$slider.addClass("slick-dotted"), t = i("<ul />").addClass(o.options.dotsClass), e = 0; e <= o.getDotCount(); e += 1)t.append(i("<li />").append(o.options.customPaging.call(this, o, e))); o.$dots = t.appendTo(o.options.appendDots), o.$dots.find("li").first().addClass("slick-active") } }, e.prototype.buildOut = function () { var e = this; e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), e.slideCount = e.$slides.length, e.$slides.each(function (e, t) { i(t).attr("data-slick-index", e).data("originalStyling", i(t).attr("style") || "") }), e.$slider.addClass("slick-slider"), e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(), e.$list = e.$slideTrack.wrap('<div class="slick-list"/>').parent(), e.$slideTrack.css("opacity", 0), !0 !== e.options.centerMode && !0 !== e.options.swipeToSlide || (e.options.slidesToScroll = 1), i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"), e.setupInfinite(), e.buildArrows(), e.buildDots(), e.updateDots(), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), !0 === e.options.draggable && e.$list.addClass("draggable") }, e.prototype.buildRows = function () { var i, e, t, o, s, n, r, l = this; if (o = document.createDocumentFragment(), n = l.$slider.children(), l.options.rows > 1) { for (r = l.options.slidesPerRow * l.options.rows, s = Math.ceil(n.length / r), i = 0; i < s; i++) { var d = document.createElement("div"); for (e = 0; e < l.options.rows; e++) { var a = document.createElement("div"); for (t = 0; t < l.options.slidesPerRow; t++) { var c = i * r + (e * l.options.slidesPerRow + t); n.get(c) && a.appendChild(n.get(c)) } d.appendChild(a) } o.appendChild(d) } l.$slider.empty().append(o), l.$slider.children().children().children().css({ width: 100 / l.options.slidesPerRow + "%", display: "inline-block" }) } }, e.prototype.checkResponsive = function (e, t) { var o, s, n, r = this, l = !1, d = r.$slider.width(), a = window.innerWidth || i(window).width(); if ("window" === r.respondTo ? n = a : "slider" === r.respondTo ? n = d : "min" === r.respondTo && (n = Math.min(a, d)), r.options.responsive && r.options.responsive.length && null !== r.options.responsive) { s = null; for (o in r.breakpoints) r.breakpoints.hasOwnProperty(o) && (!1 === r.originalSettings.mobileFirst ? n < r.breakpoints[o] && (s = r.breakpoints[o]) : n > r.breakpoints[o] && (s = r.breakpoints[o])); null !== s ? null !== r.activeBreakpoint ? (s !== r.activeBreakpoint || t) && (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : null !== r.activeBreakpoint && (r.activeBreakpoint = null, r.options = r.originalSettings, !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e), l = s), e || !1 === l || r.$slider.trigger("breakpoint", [r, l]) } }, e.prototype.changeSlide = function (e, t) { var o, s, n, r = this, l = i(e.currentTarget); switch (l.is("a") && e.preventDefault(), l.is("li") || (l = l.closest("li")), n = r.slideCount % r.options.slidesToScroll != 0, o = n ? 0 : (r.slideCount - r.currentSlide) % r.options.slidesToScroll, e.data.message) { case "previous": s = 0 === o ? r.options.slidesToScroll : r.options.slidesToShow - o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide - s, !1, t); break; case "next": s = 0 === o ? r.options.slidesToScroll : o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide + s, !1, t); break; case "index": var d = 0 === e.data.index ? 0 : e.data.index || l.index() * r.options.slidesToScroll; r.slideHandler(r.checkNavigable(d), !1, t), l.children().trigger("focus"); break; default: return } }, e.prototype.checkNavigable = function (i) { var e, t; if (e = this.getNavigableIndexes(), t = 0, i > e[e.length - 1]) i = e[e.length - 1]; else for (var o in e) { if (i < e[o]) { i = t; break } t = e[o] } return i }, e.prototype.cleanUpEvents = function () { var e = this; e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide).off("mouseenter.slick", i.proxy(e.interrupt, e, !0)).off("mouseleave.slick", i.proxy(e.interrupt, e, !1)), !0 === e.options.accessibility && e.$dots.off("keydown.slick", e.keyHandler)), e.$slider.off("focus.slick blur.slick"), !0 === e.options.arrows && e.slideCount > e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide), e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide), !0 === e.options.accessibility && (e.$prevArrow && e.$prevArrow.off("keydown.slick", e.keyHandler), e.$nextArrow && e.$nextArrow.off("keydown.slick", e.keyHandler))), e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler), e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler), e.$list.off("touchend.slick mouseup.slick", e.swipeHandler), e.$list.off("touchcancel.slick mouseleave.slick", e.swipeHandler), e.$list.off("click.slick", e.clickHandler), i(document).off(e.visibilityChange, e.visibility), e.cleanUpSlideEvents(), !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler), i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange), i(window).off("resize.slick.slick-" + e.instanceUid, e.resize), i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault), i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition) }, e.prototype.cleanUpSlideEvents = function () { var e = this; e.$list.off("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.off("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.cleanUpRows = function () { var i, e = this; e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"), e.$slider.empty().append(i)) }, e.prototype.clickHandler = function (i) { !1 === this.shouldClick && (i.stopImmediatePropagation(), i.stopPropagation(), i.preventDefault()) }, e.prototype.destroy = function (e) { var t = this; t.autoPlayClear(), t.touchObject = {}, t.cleanUpEvents(), i(".slick-cloned", t.$slider).detach(), t.$dots && t.$dots.remove(), t.$prevArrow && t.$prevArrow.length && (t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.prevArrow) && t.$prevArrow.remove()), t.$nextArrow && t.$nextArrow.length && (t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.nextArrow) && t.$nextArrow.remove()), t.$slides && (t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function () { i(this).attr("style", i(this).data("originalStyling")) }), t.$slideTrack.children(this.options.slide).detach(), t.$slideTrack.detach(), t.$list.detach(), t.$slider.append(t.$slides)), t.cleanUpRows(), t.$slider.removeClass("slick-slider"), t.$slider.removeClass("slick-initialized"), t.$slider.removeClass("slick-dotted"), t.unslicked = !0, e || t.$slider.trigger("destroy", [t]) }, e.prototype.disableTransition = function (i) { var e = this, t = {}; t[e.transitionType] = "", !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.fadeSlide = function (i, e) { var t = this; !1 === t.cssTransitions ? (t.$slides.eq(i).css({ zIndex: t.options.zIndex }), t.$slides.eq(i).animate({ opacity: 1 }, t.options.speed, t.options.easing, e)) : (t.applyTransition(i), t.$slides.eq(i).css({ opacity: 1, zIndex: t.options.zIndex }), e && setTimeout(function () { t.disableTransition(i), e.call() }, t.options.speed)) }, e.prototype.fadeSlideOut = function (i) { var e = this; !1 === e.cssTransitions ? e.$slides.eq(i).animate({ opacity: 0, zIndex: e.options.zIndex - 2 }, e.options.speed, e.options.easing) : (e.applyTransition(i), e.$slides.eq(i).css({ opacity: 0, zIndex: e.options.zIndex - 2 })) }, e.prototype.filterSlides = e.prototype.slickFilter = function (i) { var e = this; null !== i && (e.$slidesCache = e.$slides, e.unload(), e.$slideTrack.children(this.options.slide).detach(), e.$slidesCache.filter(i).appendTo(e.$slideTrack), e.reinit()) }, e.prototype.focusHandler = function () { var e = this; e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function (t) { t.stopImmediatePropagation(); var o = i(this); setTimeout(function () { e.options.pauseOnFocus && (e.focussed = o.is(":focus"), e.autoPlay()) }, 0) }) }, e.prototype.getCurrent = e.prototype.slickCurrentSlide = function () { return this.currentSlide }, e.prototype.getDotCount = function () { var i = this, e = 0, t = 0, o = 0; if (!0 === i.options.infinite) if (i.slideCount <= i.options.slidesToShow)++o; else for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else if (!0 === i.options.centerMode) o = i.slideCount; else if (i.options.asNavFor) for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else o = 1 + Math.ceil((i.slideCount - i.options.slidesToShow) / i.options.slidesToScroll); return o - 1 }, e.prototype.getLeft = function (i) { var e, t, o, s, n = this, r = 0; return n.slideOffset = 0, t = n.$slides.first().outerHeight(!0), !0 === n.options.infinite ? (n.slideCount > n.options.slidesToShow && (n.slideOffset = n.slideWidth * n.options.slidesToShow * -1, s = -1, !0 === n.options.vertical && !0 === n.options.centerMode && (2 === n.options.slidesToShow ? s = -1.5 : 1 === n.options.slidesToShow && (s = -2)), r = t * n.options.slidesToShow * s), n.slideCount % n.options.slidesToScroll != 0 && i + n.options.slidesToScroll > n.slideCount && n.slideCount > n.options.slidesToShow && (i > n.slideCount ? (n.slideOffset = (n.options.slidesToShow - (i - n.slideCount)) * n.slideWidth * -1, r = (n.options.slidesToShow - (i - n.slideCount)) * t * -1) : (n.slideOffset = n.slideCount % n.options.slidesToScroll * n.slideWidth * -1, r = n.slideCount % n.options.slidesToScroll * t * -1))) : i + n.options.slidesToShow > n.slideCount && (n.slideOffset = (i + n.options.slidesToShow - n.slideCount) * n.slideWidth, r = (i + n.options.slidesToShow - n.slideCount) * t), n.slideCount <= n.options.slidesToShow && (n.slideOffset = 0, r = 0), !0 === n.options.centerMode && n.slideCount <= n.options.slidesToShow ? n.slideOffset = n.slideWidth * Math.floor(n.options.slidesToShow) / 2 - n.slideWidth * n.slideCount / 2 : !0 === n.options.centerMode && !0 === n.options.infinite ? n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2) - n.slideWidth : !0 === n.options.centerMode && (n.slideOffset = 0, n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2)), e = !1 === n.options.vertical ? i * n.slideWidth * -1 + n.slideOffset : i * t * -1 + r, !0 === n.options.variableWidth && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, !0 === n.options.centerMode && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow + 1), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, e += (n.$list.width() - o.outerWidth()) / 2)), e }, e.prototype.getOption = e.prototype.slickGetOption = function (i) { return this.options[i] }, e.prototype.getNavigableIndexes = function () { var i, e = this, t = 0, o = 0, s = []; for (!1 === e.options.infinite ? i = e.slideCount : (t = -1 * e.options.slidesToScroll, o = -1 * e.options.slidesToScroll, i = 2 * e.slideCount); t < i;)s.push(t), t = o + e.options.slidesToScroll, o += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow; return s }, e.prototype.getSlick = function () { return this }, e.prototype.getSlideCount = function () { var e, t, o = this; return t = !0 === o.options.centerMode ? o.slideWidth * Math.floor(o.options.slidesToShow / 2) : 0, !0 === o.options.swipeToSlide ? (o.$slideTrack.find(".slick-slide").each(function (s, n) { if (n.offsetLeft - t + i(n).outerWidth() / 2 > -1 * o.swipeLeft) return e = n, !1 }), Math.abs(i(e).attr("data-slick-index") - o.currentSlide) || 1) : o.options.slidesToScroll }, e.prototype.goTo = e.prototype.slickGoTo = function (i, e) { this.changeSlide({ data: { message: "index", index: parseInt(i) } }, e) }, e.prototype.init = function (e) { var t = this; i(t.$slider).hasClass("slick-initialized") || (i(t.$slider).addClass("slick-initialized"), t.buildRows(), t.buildOut(), t.setProps(), t.startLoad(), t.loadSlider(), t.initializeEvents(), t.updateArrows(), t.updateDots(), t.checkResponsive(!0), t.focusHandler()), e && t.$slider.trigger("init", [t]), !0 === t.options.accessibility && t.initADA(), t.options.autoplay && (t.paused = !1, t.autoPlay()) }, e.prototype.initADA = function () { var e = this, t = Math.ceil(e.slideCount / e.options.slidesToShow), o = e.getNavigableIndexes().filter(function (i) { return i >= 0 && i < e.slideCount }); e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({ "aria-hidden": "true", tabindex: "-1" }).find("a, input, button, select").attr({ tabindex: "-1" }), null !== e.$dots && (e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function (t) { var s = o.indexOf(t); i(this).attr({ role: "tabpanel", id: "slick-slide" + e.instanceUid + t, tabindex: -1 }), -1 !== s && i(this).attr({ "aria-describedby": "slick-slide-control" + e.instanceUid + s }) }), e.$dots.attr("role", "tablist").find("li").each(function (s) { var n = o[s]; i(this).attr({ role: "presentation" }), i(this).find("button").first().attr({ role: "tab", id: "slick-slide-control" + e.instanceUid + s, "aria-controls": "slick-slide" + e.instanceUid + n, "aria-label": s + 1 + " of " + t, "aria-selected": null, tabindex: "-1" }) }).eq(e.currentSlide).find("button").attr({ "aria-selected": "true", tabindex: "0" }).end()); for (var s = e.currentSlide, n = s + e.options.slidesToShow; s < n; s++)e.$slides.eq(s).attr("tabindex", 0); e.activateADA() }, e.prototype.initArrowEvents = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.off("click.slick").on("click.slick", { message: "previous" }, i.changeSlide), i.$nextArrow.off("click.slick").on("click.slick", { message: "next" }, i.changeSlide), !0 === i.options.accessibility && (i.$prevArrow.on("keydown.slick", i.keyHandler), i.$nextArrow.on("keydown.slick", i.keyHandler))) }, e.prototype.initDotEvents = function () { var e = this; !0 === e.options.dots && (i("li", e.$dots).on("click.slick", { message: "index" }, e.changeSlide), !0 === e.options.accessibility && e.$dots.on("keydown.slick", e.keyHandler)), !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.interrupt, e, !0)).on("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.initSlideEvents = function () { var e = this; e.options.pauseOnHover && (e.$list.on("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.on("mouseleave.slick", i.proxy(e.interrupt, e, !1))) }, e.prototype.initializeEvents = function () { var e = this; e.initArrowEvents(), e.initDotEvents(), e.initSlideEvents(), e.$list.on("touchstart.slick mousedown.slick", { action: "start" }, e.swipeHandler), e.$list.on("touchmove.slick mousemove.slick", { action: "move" }, e.swipeHandler), e.$list.on("touchend.slick mouseup.slick", { action: "end" }, e.swipeHandler), e.$list.on("touchcancel.slick mouseleave.slick", { action: "end" }, e.swipeHandler), e.$list.on("click.slick", e.clickHandler), i(document).on(e.visibilityChange, i.proxy(e.visibility, e)), !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)), i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)), i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault), i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition), i(e.setPosition) }, e.prototype.initUI = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(), i.$nextArrow.show()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show() }, e.prototype.keyHandler = function (i) { var e = this; i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({ data: { message: !0 === e.options.rtl ? "next" : "previous" } }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({ data: { message: !0 === e.options.rtl ? "previous" : "next" } })) }, e.prototype.lazyLoad = function () { function e(e) { i("img[data-lazy]", e).each(function () { var e = i(this), t = i(this).attr("data-lazy"), o = i(this).attr("data-srcset"), s = i(this).attr("data-sizes") || n.$slider.attr("data-sizes"), r = document.createElement("img"); r.onload = function () { e.animate({ opacity: 0 }, 100, function () { o && (e.attr("srcset", o), s && e.attr("sizes", s)), e.attr("src", t).animate({ opacity: 1 }, 200, function () { e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading") }), n.$slider.trigger("lazyLoaded", [n, e, t]) }) }, r.onerror = function () { e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), n.$slider.trigger("lazyLoadError", [n, e, t]) }, r.src = t }) } var t, o, s, n = this; if (!0 === n.options.centerMode ? !0 === n.options.infinite ? s = (o = n.currentSlide + (n.options.slidesToShow / 2 + 1)) + n.options.slidesToShow + 2 : (o = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)), s = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (o = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide, s = Math.ceil(o + n.options.slidesToShow), !0 === n.options.fade && (o > 0 && o-- , s <= n.slideCount && s++)), t = n.$slider.find(".slick-slide").slice(o, s), "anticipated" === n.options.lazyLoad) for (var r = o - 1, l = s, d = n.$slider.find(".slick-slide"), a = 0; a < n.options.slidesToScroll; a++)r < 0 && (r = n.slideCount - 1), t = (t = t.add(d.eq(r))).add(d.eq(l)), r-- , l++; e(t), n.slideCount <= n.options.slidesToShow ? e(n.$slider.find(".slick-slide")) : n.currentSlide >= n.slideCount - n.options.slidesToShow ? e(n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow)) : 0 === n.currentSlide && e(n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow)) }, e.prototype.loadSlider = function () { var i = this; i.setPosition(), i.$slideTrack.css({ opacity: 1 }), i.$slider.removeClass("slick-loading"), i.initUI(), "progressive" === i.options.lazyLoad && i.progressiveLazyLoad() }, e.prototype.next = e.prototype.slickNext = function () { this.changeSlide({ data: { message: "next" } }) }, e.prototype.orientationChange = function () { var i = this; i.checkResponsive(), i.setPosition() }, e.prototype.pause = e.prototype.slickPause = function () { var i = this; i.autoPlayClear(), i.paused = !0 }, e.prototype.play = e.prototype.slickPlay = function () { var i = this; i.autoPlay(), i.options.autoplay = !0, i.paused = !1, i.focussed = !1, i.interrupted = !1 }, e.prototype.postSlide = function (e) { var t = this; t.unslicked || (t.$slider.trigger("afterChange", [t, e]), t.animating = !1, t.slideCount > t.options.slidesToShow && t.setPosition(), t.swipeLeft = null, t.options.autoplay && t.autoPlay(), !0 === t.options.accessibility && (t.initADA(), t.options.focusOnChange && i(t.$slides.get(t.currentSlide)).attr("tabindex", 0).focus())) }, e.prototype.prev = e.prototype.slickPrev = function () { this.changeSlide({ data: { message: "previous" } }) }, e.prototype.preventDefault = function (i) { i.preventDefault() }, e.prototype.progressiveLazyLoad = function (e) { e = e || 1; var t, o, s, n, r, l = this, d = i("img[data-lazy]", l.$slider); d.length ? (t = d.first(), o = t.attr("data-lazy"), s = t.attr("data-srcset"), n = t.attr("data-sizes") || l.$slider.attr("data-sizes"), (r = document.createElement("img")).onload = function () { s && (t.attr("srcset", s), n && t.attr("sizes", n)), t.attr("src", o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"), !0 === l.options.adaptiveHeight && l.setPosition(), l.$slider.trigger("lazyLoaded", [l, t, o]), l.progressiveLazyLoad() }, r.onerror = function () { e < 3 ? setTimeout(function () { l.progressiveLazyLoad(e + 1) }, 500) : (t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), l.$slider.trigger("lazyLoadError", [l, t, o]), l.progressiveLazyLoad()) }, r.src = o) : l.$slider.trigger("allImagesLoaded", [l]) }, e.prototype.refresh = function (e) { var t, o, s = this; o = s.slideCount - s.options.slidesToShow, !s.options.infinite && s.currentSlide > o && (s.currentSlide = o), s.slideCount <= s.options.slidesToShow && (s.currentSlide = 0), t = s.currentSlide, s.destroy(!0), i.extend(s, s.initials, { currentSlide: t }), s.init(), e || s.changeSlide({ data: { message: "index", index: t } }, !1) }, e.prototype.registerBreakpoints = function () { var e, t, o, s = this, n = s.options.responsive || null; if ("array" === i.type(n) && n.length) { s.respondTo = s.options.respondTo || "window"; for (e in n) if (o = s.breakpoints.length - 1, n.hasOwnProperty(e)) { for (t = n[e].breakpoint; o >= 0;)s.breakpoints[o] && s.breakpoints[o] === t && s.breakpoints.splice(o, 1), o--; s.breakpoints.push(t), s.breakpointSettings[t] = n[e].settings } s.breakpoints.sort(function (i, e) { return s.options.mobileFirst ? i - e : e - i }) } }, e.prototype.reinit = function () { var e = this; e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"), e.slideCount = e.$slides.length, e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll), e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0), e.registerBreakpoints(), e.setProps(), e.setupInfinite(), e.buildArrows(), e.updateArrows(), e.initArrowEvents(), e.buildDots(), e.updateDots(), e.initDotEvents(), e.cleanUpSlideEvents(), e.initSlideEvents(), e.checkResponsive(!1, !0), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), e.setPosition(), e.focusHandler(), e.paused = !e.options.autoplay, e.autoPlay(), e.$slider.trigger("reInit", [e]) }, e.prototype.resize = function () { var e = this; i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay), e.windowDelay = window.setTimeout(function () { e.windowWidth = i(window).width(), e.checkResponsive(), e.unslicked || e.setPosition() }, 50)) }, e.prototype.removeSlide = e.prototype.slickRemove = function (i, e, t) { var o = this; if (i = "boolean" == typeof i ? !0 === (e = i) ? 0 : o.slideCount - 1 : !0 === e ? --i : i, o.slideCount < 1 || i < 0 || i > o.slideCount - 1) return !1; o.unload(), !0 === t ? o.$slideTrack.children().remove() : o.$slideTrack.children(this.options.slide).eq(i).remove(), o.$slides = o.$slideTrack.children(this.options.slide), o.$slideTrack.children(this.options.slide).detach(), o.$slideTrack.append(o.$slides), o.$slidesCache = o.$slides, o.reinit() }, e.prototype.setCSS = function (i) { var e, t, o = this, s = {}; !0 === o.options.rtl && (i = -i), e = "left" == o.positionProp ? Math.ceil(i) + "px" : "0px", t = "top" == o.positionProp ? Math.ceil(i) + "px" : "0px", s[o.positionProp] = i, !1 === o.transformsEnabled ? o.$slideTrack.css(s) : (s = {}, !1 === o.cssTransitions ? (s[o.animType] = "translate(" + e + ", " + t + ")", o.$slideTrack.css(s)) : (s[o.animType] = "translate3d(" + e + ", " + t + ", 0px)", o.$slideTrack.css(s))) }, e.prototype.setDimensions = function () { var i = this; !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({ padding: "0px " + i.options.centerPadding }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow), !0 === i.options.centerMode && i.$list.css({ padding: i.options.centerPadding + " 0px" })), i.listWidth = i.$list.width(), i.listHeight = i.$list.height(), !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow), i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth), i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length))); var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width(); !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e) }, e.prototype.setFade = function () { var e, t = this; t.$slides.each(function (o, s) { e = t.slideWidth * o * -1, !0 === t.options.rtl ? i(s).css({ position: "relative", right: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) : i(s).css({ position: "relative", left: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) }), t.$slides.eq(t.currentSlide).css({ zIndex: t.options.zIndex - 1, opacity: 1 }) }, e.prototype.setHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.css("height", e) } }, e.prototype.setOption = e.prototype.slickSetOption = function () { var e, t, o, s, n, r = this, l = !1; if ("object" === i.type(arguments[0]) ? (o = arguments[0], l = arguments[1], n = "multiple") : "string" === i.type(arguments[0]) && (o = arguments[0], s = arguments[1], l = arguments[2], "responsive" === arguments[0] && "array" === i.type(arguments[1]) ? n = "responsive" : void 0 !== arguments[1] && (n = "single")), "single" === n) r.options[o] = s; else if ("multiple" === n) i.each(o, function (i, e) { r.options[i] = e }); else if ("responsive" === n) for (t in s) if ("array" !== i.type(r.options.responsive)) r.options.responsive = [s[t]]; else { for (e = r.options.responsive.length - 1; e >= 0;)r.options.responsive[e].breakpoint === s[t].breakpoint && r.options.responsive.splice(e, 1), e--; r.options.responsive.push(s[t]) } l && (r.unload(), r.reinit()) }, e.prototype.setPosition = function () { var i = this; i.setDimensions(), i.setHeight(), !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(), i.$slider.trigger("setPosition", [i]) }, e.prototype.setProps = function () { var i = this, e = document.body.style; i.positionProp = !0 === i.options.vertical ? "top" : "left", "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"), void 0 === e.WebkitTransition && void 0 === e.MozTransition && void 0 === e.msTransition || !0 === i.options.useCSS && (i.cssTransitions = !0), i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex < 3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex), void 0 !== e.OTransform && (i.animType = "OTransform", i.transformType = "-o-transform", i.transitionType = "OTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.MozTransform && (i.animType = "MozTransform", i.transformType = "-moz-transform", i.transitionType = "MozTransition", void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)), void 0 !== e.webkitTransform && (i.animType = "webkitTransform", i.transformType = "-webkit-transform", i.transitionType = "webkitTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.msTransform && (i.animType = "msTransform", i.transformType = "-ms-transform", i.transitionType = "msTransition", void 0 === e.msTransform && (i.animType = !1)), void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform", i.transformType = "transform", i.transitionType = "transition"), i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType }, e.prototype.setSlideClasses = function (i) { var e, t, o, s, n = this; if (t = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), n.$slides.eq(i).addClass("slick-current"), !0 === n.options.centerMode) { var r = n.options.slidesToShow % 2 == 0 ? 1 : 0; e = Math.floor(n.options.slidesToShow / 2), !0 === n.options.infinite && (i >= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e + r, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (o = n.options.slidesToShow + i, t.slice(o - e + 1 + r, o + e + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === i ? t.eq(t.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && t.eq(n.options.slidesToShow).addClass("slick-center")), n.$slides.eq(i).addClass("slick-center") } else i >= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : t.length <= n.options.slidesToShow ? t.addClass("slick-active").attr("aria-hidden", "false") : (s = n.slideCount % n.options.slidesToShow, o = !0 === n.options.infinite ? n.options.slidesToShow + i : i, n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i < n.options.slidesToShow ? t.slice(o - (n.options.slidesToShow - s), o + s).addClass("slick-active").attr("aria-hidden", "false") : t.slice(o, o + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false")); "ondemand" !== n.options.lazyLoad && "anticipated" !== n.options.lazyLoad || n.lazyLoad() }, e.prototype.setupInfinite = function () { var e, t, o, s = this; if (!0 === s.options.fade && (s.options.centerMode = !1), !0 === s.options.infinite && !1 === s.options.fade && (t = null, s.slideCount > s.options.slidesToShow)) { for (o = !0 === s.options.centerMode ? s.options.slidesToShow + 1 : s.options.slidesToShow, e = s.slideCount; e > s.slideCount - o; e -= 1)t = e - 1, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t - s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned"); for (e = 0; e < o + s.slideCount; e += 1)t = e, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t + s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned"); s.$slideTrack.find(".slick-cloned").find("[id]").each(function () { i(this).attr("id", "") }) } }, e.prototype.interrupt = function (i) { var e = this; i || e.autoPlay(), e.interrupted = i }, e.prototype.selectHandler = function (e) { var t = this, o = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide"), s = parseInt(o.attr("data-slick-index")); s || (s = 0), t.slideCount <= t.options.slidesToShow ? t.slideHandler(s, !1, !0) : t.slideHandler(s) }, e.prototype.slideHandler = function (i, e, t) { var o, s, n, r, l, d = null, a = this; if (e = e || !1, !(!0 === a.animating && !0 === a.options.waitForAnimate || !0 === a.options.fade && a.currentSlide === i)) if (!1 === e && a.asNavFor(i), o = i, d = a.getLeft(o), r = a.getLeft(a.currentSlide), a.currentLeft = null === a.swipeLeft ? r : a.swipeLeft, !1 === a.options.infinite && !1 === a.options.centerMode && (i < 0 || i > a.getDotCount() * a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else if (!1 === a.options.infinite && !0 === a.options.centerMode && (i < 0 || i > a.slideCount - a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else { if (a.options.autoplay && clearInterval(a.autoPlayTimer), s = o < 0 ? a.slideCount % a.options.slidesToScroll != 0 ? a.slideCount - a.slideCount % a.options.slidesToScroll : a.slideCount + o : o >= a.slideCount ? a.slideCount % a.options.slidesToScroll != 0 ? 0 : o - a.slideCount : o, a.animating = !0, a.$slider.trigger("beforeChange", [a, a.currentSlide, s]), n = a.currentSlide, a.currentSlide = s, a.setSlideClasses(a.currentSlide), a.options.asNavFor && (l = (l = a.getNavTarget()).slick("getSlick")).slideCount <= l.options.slidesToShow && l.setSlideClasses(a.currentSlide), a.updateDots(), a.updateArrows(), !0 === a.options.fade) return !0 !== t ? (a.fadeSlideOut(n), a.fadeSlide(s, function () { a.postSlide(s) })) : a.postSlide(s), void a.animateHeight(); !0 !== t ? a.animateSlide(d, function () { a.postSlide(s) }) : a.postSlide(s) } }, e.prototype.startLoad = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(), i.$nextArrow.hide()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(), i.$slider.addClass("slick-loading") }, e.prototype.swipeDirection = function () { var i, e, t, o, s = this; return i = s.touchObject.startX - s.touchObject.curX, e = s.touchObject.startY - s.touchObject.curY, t = Math.atan2(e, i), (o = Math.round(180 * t / Math.PI)) < 0 && (o = 360 - Math.abs(o)), o <= 45 && o >= 0 ? !1 === s.options.rtl ? "left" : "right" : o <= 360 && o >= 315 ? !1 === s.options.rtl ? "left" : "right" : o >= 135 && o <= 225 ? !1 === s.options.rtl ? "right" : "left" : !0 === s.options.verticalSwiping ? o >= 35 && o <= 135 ? "down" : "up" : "vertical" }, e.prototype.swipeEnd = function (i) { var e, t, o = this; if (o.dragging = !1, o.swiping = !1, o.scrolling) return o.scrolling = !1, !1; if (o.interrupted = !1, o.shouldClick = !(o.touchObject.swipeLength > 10), void 0 === o.touchObject.curX) return !1; if (!0 === o.touchObject.edgeHit && o.$slider.trigger("edge", [o, o.swipeDirection()]), o.touchObject.swipeLength >= o.touchObject.minSwipe) { switch (t = o.swipeDirection()) { case "left": case "down": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide + o.getSlideCount()) : o.currentSlide + o.getSlideCount(), o.currentDirection = 0; break; case "right": case "up": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide - o.getSlideCount()) : o.currentSlide - o.getSlideCount(), o.currentDirection = 1 }"vertical" != t && (o.slideHandler(e), o.touchObject = {}, o.$slider.trigger("swipe", [o, t])) } else o.touchObject.startX !== o.touchObject.curX && (o.slideHandler(o.currentSlide), o.touchObject = {}) }, e.prototype.swipeHandler = function (i) { var e = this; if (!(!1 === e.options.swipe || "ontouchend" in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse"))) switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1, e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold, !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold), i.data.action) { case "start": e.swipeStart(i); break; case "move": e.swipeMove(i); break; case "end": e.swipeEnd(i) } }, e.prototype.swipeMove = function (i) { var e, t, o, s, n, r, l = this; return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null, !(!l.dragging || l.scrolling || n && 1 !== n.length) && (e = l.getLeft(l.currentSlide), l.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX, l.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY, l.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(l.touchObject.curX - l.touchObject.startX, 2))), r = Math.round(Math.sqrt(Math.pow(l.touchObject.curY - l.touchObject.startY, 2))), !l.options.verticalSwiping && !l.swiping && r > 4 ? (l.scrolling = !0, !1) : (!0 === l.options.verticalSwiping && (l.touchObject.swipeLength = r), t = l.swipeDirection(), void 0 !== i.originalEvent && l.touchObject.swipeLength > 4 && (l.swiping = !0, i.preventDefault()), s = (!1 === l.options.rtl ? 1 : -1) * (l.touchObject.curX > l.touchObject.startX ? 1 : -1), !0 === l.options.verticalSwiping && (s = l.touchObject.curY > l.touchObject.startY ? 1 : -1), o = l.touchObject.swipeLength, l.touchObject.edgeHit = !1, !1 === l.options.infinite && (0 === l.currentSlide && "right" === t || l.currentSlide >= l.getDotCount() && "left" === t) && (o = l.touchObject.swipeLength * l.options.edgeFriction, l.touchObject.edgeHit = !0), !1 === l.options.vertical ? l.swipeLeft = e + o * s : l.swipeLeft = e + o * (l.$list.height() / l.listWidth) * s, !0 === l.options.verticalSwiping && (l.swipeLeft = e + o * s), !0 !== l.options.fade && !1 !== l.options.touchMove && (!0 === l.animating ? (l.swipeLeft = null, !1) : void l.setCSS(l.swipeLeft)))) }, e.prototype.swipeStart = function (i) { var e, t = this; if (t.interrupted = !0, 1 !== t.touchObject.fingerCount || t.slideCount <= t.options.slidesToShow) return t.touchObject = {}, !1; void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]), t.touchObject.startX = t.touchObject.curX = void 0 !== e ? e.pageX : i.clientX, t.touchObject.startY = t.touchObject.curY = void 0 !== e ? e.pageY : i.clientY, t.dragging = !0 }, e.prototype.unfilterSlides = e.prototype.slickUnfilter = function () { var i = this; null !== i.$slidesCache && (i.unload(), i.$slideTrack.children(this.options.slide).detach(), i.$slidesCache.appendTo(i.$slideTrack), i.reinit()) }, e.prototype.unload = function () { var e = this; i(".slick-cloned", e.$slider).remove(), e.$dots && e.$dots.remove(), e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(), e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(), e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "") }, e.prototype.unslick = function (i) { var e = this; e.$slider.trigger("unslick", [e, i]), e.destroy() }, e.prototype.updateArrows = function () { var i = this; Math.floor(i.options.slidesToShow / 2), !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"))) }, e.prototype.updateDots = function () { var i = this; null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").end(), i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active")) }, e.prototype.visibility = function () { var i = this; i.options.autoplay && (document[i.hidden] ? i.interrupted = !0 : i.interrupted = !1) }, i.fn.slick = function () { var i, t, o = this, s = arguments[0], n = Array.prototype.slice.call(arguments, 1), r = o.length; for (i = 0; i < r; i++)if ("object" == typeof s || void 0 === s ? o[i].slick = new e(o[i], s) : t = o[i].slick[s].apply(o[i].slick, n), void 0 !== t) return t; return o } });;
/* Light YouTube Embeds by labnol */
/* Web: http://labnol.org/?p=27941 */
window.addEventListener("load",
	function () {
		var div;
		var player = document.getElementsByClassName("youtube-player");
		for (var i = 0; i < player.length; i++) {
			div = document.createElement("div");
			div.setAttribute("data-id", player[i].dataset.id);
			div.innerHTML = labnolThumb(player[i].dataset.id);
			div.onclick = labnolIframe;
			player[i].appendChild(div);
		}
		var autoloader = document.getElementsByClassName("youtube-autoloader");
		for (var i = 0; i < autoloader.length; i++) {
			var iframe = document.createElement("iframe");
			var embed = "https://www.youtube.com/embed/ID";
			iframe.setAttribute("src", embed.replace("ID", autoloader[i].dataset.id));
			iframe.setAttribute("frameborder", "0");
			iframe.setAttribute("allowfullscreen", "1");
			autoloader[i].appendChild(iframe);
		}
		var wistiaVideos = document.querySelectorAll("[data-video-id]");
		if (wistiaVideos.length > 0) {
			if (!document.getElementById("wistia-video-script")) {
				var s1 = document.createElement("script");
				s1.src = "https://fast.wistia.com/assets/external/E-v1.js";
				document.body.appendChild(s1);
			}
			for (var i = 0; i < wistiaVideos.length; i++) {
				if (!document.getElementById("wistia-video-" + wistiaVideos[i].dataset.videoId)) {
					var videoId = wistiaVideos[i].dataset.videoId;
					var s2 = document.createElement("script");
					s2.src = "https://fast.wistia.com/embed/medias/" + videoId + ".jsonp";
					document.body.appendChild(s2);
				}
			}
		}
	});
function labnolThumb(id) {
	var thumb = '<img src="https://i.ytimg.com/vi/ID/sddefault.jpg">',
		play = '<div class="play"></div>';
	return thumb.replace("ID", id) + play;
}
function labnolIframe() {
	var iframe = document.createElement("iframe");
	var embed = "https://www.youtube.com/embed/ID";
	iframe.setAttribute("src", embed.replace("ID", this.dataset.id));
	iframe.setAttribute("frameborder", "0");
	iframe.setAttribute("allowfullscreen", "1");
	this.parentNode.replaceChild(iframe, this);
};
