").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() - 1) * 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(5000 * 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; }; }); })(); for (d = 0; d < this.data.dimensions.length; d++) { if (this.data.dimensions[d].usable) { this.data.dimensions[d].matchMedia = window.matchMedia(this.data.dimensions[d].media); this.data.dimensions[d].matchMedia.d = d; if (this.data.dimensions[d].matchMedia.matches) { this.initializeCarousel(this.data.dimensions[d]); } else { initializeOnBreakpoint(this.data.dimensions[d]); } } }}function Carousel_initializeCarousel(e) { const self = this; log("function initializeCarousel executed!"); if (!e.matchMedia.matches) { return; } var dim = e.matchMedia.d, $c = $("#" + self.instance.tagId + " .slick-carousel-dimension" + dim); $c.append(self.buildSlides(dim)); $c.on("init", function (e) { var $c = $(e.currentTarget), $d = $c.find(".slick-dots"), pp, variance = 5; $c.find("img").each(function (i, o) { var w; function setupImage(o) { var w = o.width(); if (1 < w) { o.css({"max-width": w, "width": "100%", "margin": "auto"}); } else { setTimeout(setupImage, 100, o); } } o = $(o); setupImage(o); }); if (!self.data.hideDots) { $d.prepend("
"); $pp = $c.find(".carousel-play-pause"); if (self.data.autoPlay) { $pp.addClass("carousel-pause").html("pause"); } else { $pp.addClass("carousel-play").html("pause"); } function pause(e) { var $pp = $(e.currentTarget), $c = $pp.closest(".slick-carousel"); $pp.html("play"); $c.slick("slickPause"); $pp.removeClass("carousel-pause"); $pp.addClass("carousel-play"); } $c.on("click", ".carousel-play", function (e) { var $pp = $(e.currentTarget), $c = $pp.closest(".slick-carousel"); $pp.html("pause"); $c.slick("slickPlay"); $pp.removeClass("carousel-play"); $pp.addClass("carousel-pause"); }); $c.on("click", ".carousel-pause", function (e) { pause(e); }); $c.on("click", ".slick-arrow, .slick-dots button", function (e) { var $d = $(e.currentTarget); e.currentTarget = $d.closest(".slick-carousel").find(".carousel-play-pause"); pause(e); }); setTimeout(function () { $d.width($d.width() + variance).css({right: 0, left: 0}); }, 1000); } }); log("self.config:", self.config); $c.slick({dots: self.config.slick.dots, autoplay: self.data.autoPlay, autoplaySpeed: self.data.delayTime, pauseOnHover: self.config.slick.pauseOnHover, slidesToShow: e.slidesToShow, slidesToScroll: e.slidesToScroll, infinite: self.data.infinite});}function Carousel_convertToLinkObj(s) { const self = this; if (!s.hasOwnProperty("link")) { s.link = {}; if (s.hasOwnProperty("linkURL")) { s.link.url = s.linkURL; } if (s.hasOwnProperty("linkText")) { s.link.text = s.linkText; } }}function Carousel_buildSlides(d) { const self = this; var str = ""; for (i = 0; i < self.data.slides.length; i++) { self.convertToLinkObj(self.data.slides[i]); if (self.data.slides[i].imageURL.length > d && "" !== self.data.slides[i].imageURL[d]) { str += "
"; str += "
"; str += "
"; str += "
"; } } return str;}function isNull(v) { return N === v;}function isUndefined(v) { return U === typeof v;}function isBoolean(v) { return B === typeof v;}function isFunction(v) { return F === typeof v;}function isNumber(v) { return "number" === typeof v;}function isString(v) { return S === typeof v;}function isStringEmpty(v) { return E === v;}function isArray(v) { return Array.isArray(v);}function isArrayEmpty(v) { return v.length ? false : true;}function isObject(v) { return O === typeof v;}function isObjectEmpty(v) { var i, c = true; for (i in v) { c = false; break; } return c;}function isObjectNotEmpty(v) { return !isObjectEmpty(v);}function isObjectAndEmpty(v) { return isObject(v) && isObjectEmpty(v);}function isObjectAndNotEmpty(v) { return isObject(v) && isObjectNotEmpty(v);}function isBaseObject(v) { return O === typeof v && N !== v && "Object" === v.constructor.name;}function isBaseObjectAndEmpty(v) { return isBaseObject(v) && isObjectEmpty(v);}function isBaseObjectAndNotEmpty(v) { return isBaseObject() && isObjectNotEmpty(v);}function isEmpty(v) { var i, c; return isNull(v) || isUndefined(v) || isStringEmpty(v) || (isObject(v) && isObjectEmpty(v)) || (isArray(v) && isArrayEmpty(v));}function toBoolean(v, d) { var r = d; if (isUndefined(d) || !isBoolean(d)) { d = false; } if (isNaN(v)) { r = String(!d).toUpperCase() === v.toUpperCase() ? !d : d; } else { r = Number(!d) === v ? !d : d; } return r;}function getUrlParm(url, name) { var str = url, s = str.indexOf(name + "="), e, p, value = ""; if (-1 !== s) { e = str.indexOf("&", s); if (-1 === e) { e = str.length; } p = str.substring(s, e).split("="); if (1 < p.length) { value = p[1]; } } return value;}function addUrlParms(url, parms) { const q = "?", a = "&"; var sep = q, pos = -1, p; if (!url) { url = ""; } pos = url.lastIndexOf(q); if (-1 !== pos) { if (url.length - 1 === pos) { sep = E; } else { sep = a; } } for (p in parms) { if (U !== typeof parms[p] && E !== parms[p]) { url += sep + p + "=" + parms[p]; sep = a; } } return url;}function objPropDef(o, pn, dv, vt, iv, npn) { var i = 1; function isMatch(c, cw, isTyped) { var ret = false, i; if (isFunction(cw)) { ret = cw(c); } else { if (isTyped) { c = typeof c; } if (Array.isArray(cw)) { for (i = 0; i < cw.length; i++) { if (c === cw[i]) { ret = true; break; } } } } return ret; } function isDefault(o, p) { var ret = false; if (o.hasOwnProperty(p) && o[p] !== dv) { if (!isMatch(o[p], vt, true) || isMatch(o[p], iv, false)) { ret = true; } } else { ret = true; } return ret; } if (isString(npn)) { if (isDefault(o, npn)) { if (isDefault(o, pn)) { o[npn] = dv; } else { o[npn] = o[pn]; } } delete o[pn]; } else { if (isDefault(o, pn)) { o[pn] = dv; } }}function jsonClone(json) { const FS = "\u0192s", functions = []; var clone; function replacer(n, v) { var nv = {}; if (isFunction(v)) { nv[FS] = functions.push(v) - 1; v = nv; } return v; } function reviver(n, v) { if (isBaseObject(v) && v.hasOwnProperty(FS)) { v = functions[v[FS]]; } return v; } if (json) { clone = JSON.parse(JSON.stringify(json, replacer), reviver); } return clone;}function jsonCompare(a, b) { return (JSON.stringify(a) === JSON.stringify(b));}function performJsonAjaxRequests(requests, success, failure, requestsData, simulateSendFunc, simTime) { const MIME_TYPE = "application/json"; var reqs = jsonClone(requests), name, ready, rn, co, results = {}, pubsub = {}, isSim = isFunction(simulateSendFunc), allDone = false; requestsData = jsonClone(isBaseObject(requestsData) ? requestsData : {}); if (!isNumber(simTime)) { simTime = 0; } function defaultSimulateSendFunc(request, data, handle) { handle({type: "load", currentTarget: {responseText: JSON.stringify(data)}}); } if (!isSim) { simulateSendFunc = defaultSimulateSendFunc; } function sub(name, func, data) { if (!pubsub[name]) { pubsub[name] = []; } pubsub[name].push({func: func, data: data}); } function pub(name, data) { var subs = pubsub[name], i, s; if (subs) { for (i = 0; i < subs.length; i++) { s = subs[i]; setTimeout(function (s) { s.func(name, data, s.data); }, 0, s); } } } function can(name, func) { var subs = pubsub[name], i, s; if (subs) { for (i = 0; i < subs.length; i++) { s = subs[i]; if (func === s.func) { subs.splice(i, 1); break; } } } } function isRequestReady(ready) { var ret = true, i; function isReadyAnds(ready) { var ret = true, r; if (Object.keys(ready).length) { for (r in ready) { if (results[r]) { if (ready[r] !== results[r].success) { ret = -1; break; } } else { ret = false; break; } } } return ret; } function isReadyOrs(ready) { var ret = true; if (ready.length) { for (i = 0; i < ready.length; i++) { ret = isReadyAnds(ready[i]); if (-1 < ret) { if (ret) { break; } } else { ready.splice(i--, 1); } } if (0 > ret) { if (0 < i) { ret = false; } else { ret = -1; } } } else { ret = -1; } return ret; } if (!isUndefined(ready) && !isNull(ready)) { if (isArray(ready)) { ret = isReadyOrs(ready); } else { if (isObject(ready)) { ret = isReadyAnds(ready); } else { if (isFunction(ready)) { ret = ready(jsonClone(results)); } else { if (isBoolean(ready)) { ret = ready ? true : -1; } } } } } return ret; } function mapData(request, resultsData) { var map = request.map, requestData = requestsData[request.name], pName, resName, resResults; if (map && isFunction(map)) { if (!requestData) { requestData = requestsData[request.name] = {}; } map(requestData, jsonClone(resultsData)); } else { if (isObjectAndNotEmpty(request.subscribes) && isObjectNotEmpty(resultsData) && isObject(requestData)) { for (pName in requestData) { if (isUndefined(requestData[pName])) { for (resName in resultsData) { resResults = resultsData[resName].out; if (resResults.hasOwnProperty(pName) && !isUndefined(resResults[pName])) { requestData[pName] = resResults[pName]; } } } } } } } function isRetry(retry, status, type) { var ret = false, wt; function isCount(retry) { var ret = false; if (isNumber(retry.max)) { if (0 < retry.max) { if (!retry.count) { retry.count = 0; } if (retry.count < retry.max) { ret = true; } } } else { ret = true; } return ret; } function isStatus(s, status) { var ret = false; if (isNumber(s)) { if (status === s) { ret = true; } } else { if (isArray(s)) { if (-1 !== s.indexOf(status)) { ret = true; } } } return ret; } if (retry) { if (isCount(retry)) { if (isObject(retry.when)) { if (retry.when.status) { ret = isStatus(retry.when.status, status); } if (!ret && (wt = retry.when[type])) { if (wt) { if (isBoolean(wt)) { ret = wt; } else { ret = isStatus(retry.when[type], status); } } } } else { ret = true; } } } return ret; } function makeRequest(request, data) { const MG = "GET", MP = "POST", cache = jsonAjaxResponseCache, pending = jsonAjaxInProgressRequests; var n, req = new XMLHttpRequest(), rname = request.name; function sets(target, method, sets) { var name; if (sets) { for (name in sets) { target[method](name, sets[name]); } } } function handle(e, fromCache) { var result, target = e.currentTarget || e.target || e.srcElement, responseText = target.responseText, reqStatus = isSim ? e.status : req.status; function isSuccess(e, r) { var ret = true; if (isFunction(request.isSuccess)) { ret = request.isSuccess(e, r); } return ret; } if (isRetry(request.retry, reqStatus, e.type)) { setTimeout(makeRequest, 0, request, data); } else { if (pending.hasOwnProperty(request.url) && pending[request.url].request === request) { delete pending[request.url]; } result = results[rname] = {}; result.fromCache = (!!fromCache); if (requestsData[rname]) { result.in = requestsData[rname]; } if ("load" === e.type) { try { result.out = JSON.parse(responseText); if (isSuccess(e, result.out)) { if (!fromCache) { saveResponse(request, data, e); } result.success = true; if (isFunction(request.success)) { setTimeout(request.success, 0, results); } } else { result.success = false; result[e.type] = req.status; result.event = e; } } catch (e) { result.success = false; result.required = request.required; result.parse = "Invalid Json Body!"; result.event = e; if (isFunction(request.failure)) { setTimeout(request.failure, 0, results); } } } else { result.success = false; result.required = request.required; result[e.type] = req.status; result.event = e; if (isFunction(request.failure)) { setTimeout(request.failure, 0, results); } } pub(rname, request); } } function buildCacheKey(request, data) { return request.url + (data ? JSON.stringify(data) : E); } function saveResponse(request, data, e) { if (request.cache && request.url && "" !== request.url) { log("storing response to cache:", request, e); cache[buildCacheKey(request, data)] = {e: e, data: data, time: new Date().getTime()}; } } function isCached(request, data) { const time = new Date().getTime(), cacheKey = buildCacheKey(request, data); var ret = false, cacheValue; if (request.cache && cache.hasOwnProperty(cacheKey)) { cacheValue = cache[cacheKey]; log("request.cache:", request.cache, "cacheValue.time:", cacheValue.time, "+=", cacheValue.time + request.cache, "time:", time); if (0 > request.cache || cacheValue.time + request.cache > time) { log("response cache used, request:", request, "response:", jsonClone(cacheValue.e)); handle(cacheValue.e, true); ret = true; } else { log("deleting cache for request:", request, jsonClone(cache[request._url])); delete cache[cacheKey]; } } return ret; } function addHandlers(req) { req.addEventListener("load", handle); req.addEventListener("error", handle); req.addEventListener("abort", handle); req.addEventListener("timeout", handle); } if (request.url && "" !== request.url) { if (pending.hasOwnProperty(request.url) && jsonCompare(pending[request.url].data, data)) { log("batch pending: found match!", request.url, "hold!"); addHandlers(pending[request.url].req); request.held = true; } else { if (!request.method) { request.method = MG; } if (MG === request.method) { request._url = addUrlParms(request.url, data); } else { request._url = request.url; } if (!isCached(request, data)) { if (isSim) { setTimeout(simulateSendFunc, 0, request, data, handle); } else { req.overrideMimeType("application/json"); addHandlers(req); sets(req, "addEventListener", request.handlers); req.open(request.method, request._url); sets(req, "setRequestHeader", request.headers); if (0 < request.timeout) { req.timeout = request.timeout; } if (MG === request.method) { try { req.send(); pending[request.url] = {request: request, data: data, req: req}; } catch (e) { log("req.send() Exception:", e); } } else { if (MP === request.method) { req.setRequestHeader("Content-Type", "application/json"); try { req.send(JSON.stringify(data)); pending[request.url] = {request: request, data: data, req: req}; } catch (e) { log("req.send() Exception:", e); } } else { log("Invalid request method.", "request:", request); } } } } } } else { setTimeout(defaultSimulateSendFunc, 0, request, data, handle); } } function performRequest(request, requestsData) { var isReady = false; isReady = isRequestReady(request._ready); if (-1 === isReady) { results[request.name] = {success: false, ready: request._ready}; if (isFunction(request.failure)) { setTimeout(request.failure, 0, results); } pub(request.name, request); } else { if (isReady) { mapData(request, results); makeRequest(request, requestsData[request.name]); } } } function startBatch(requests, requestsData) { var name, i, keys, request; function extractSubscribes(ready) { var subs = {}, i; function add(obj) { var keys = obj, i; if (!isArray(obj)) { keys = Object.keys(obj); } for (i = 0; i < keys.length; i++) { subs[keys[i]] = true; } } if (ready) { if (isArray(ready)) { for (i = 0; i < ready.length; i++) { add(ready[i]); } } else { if (isObject(ready)) { add(ready); } else { if (isFunction(ready)) { if (ready.subs) { add(ready.subs); } else { add(requests); } } } } } return subs; } function publish(name, pubData, subData) { can(name, publish); performRequest(subData, requestsData); } function checkDone(name, pubData, subData) { var isDone = true, isSuccess = true; if (allDone) { return; } for (name in requests) { if (!results[name]) { isDone = false; break; } } if (isDone) { allDone = true; pubsub = {}; for (name in requests) { if (requests[name].required && !results[name].success) { isSuccess = false; break; } } if (isSuccess) { success(results, requests); } else { failure(results, requests); } } } for (name in requests) { request = requests[name]; request.name = name; if (!isNumber(request.cache)) { request.cache = 0; } objPropDef(request, "required", true, ["boolean"]); if (request.hasOwnProperty("ready")) { request._ready = jsonClone(request.ready); } request.subscribes = extractSubscribes(request._ready); keys = Object.keys(request.subscribes); for (i = 0; i < keys.length; i++) { sub(keys[i], publish, request); } sub(name, checkDone, requests[name]); } for (name in requests) { performRequest(requests[name], requestsData); } } startBatch(reqs, requestsData);}function pad(val, count, str) { var i; val = "" + val || ""; count = count || 0; str = "" + str || ""; if (0 > count) { count = -count; for (i = val.length; i < count; i++) { val = val + str; } } else { for (i = val.length; i < count; i++) { val = str + val; } } return val;}function createId(type) { var c = config.ids, pre = c.prefix, sep = c.separator, td = c.type, sd = c.system, system, date = new Date(), id; type = onEtoVal(type, td); type = pad(type, -3, c.pad).substr(-0, 3).toUpperCase(); system = pad(sd, -3, c.pad).substr(-0, 3).toUpperCase(); id = pre + sep + type + sep + system + pad(date.getTime(), 16, "0") + pad(nextId++, 16, "0"); return id;}function onNtoE(v) { return N === v ? E : v;}function onEtoVal(v, val) { return E === v ? val : v;}function log() { var d, s, i; if (!DEBUG) { return; } d = "componentManager:"; s = "console.log(d"; for (i = 0; i < arguments.length; i++) { s += ",arguments[" + i + "]"; } s += ");"; eval(s);}function newInstance(cName, cData, cConfig) { var instance = null, template = {}; if (U === typeof cConfig) { cConfig = {}; } if (cNames.hasOwnProperty(cName)) { instance = {}; template = cNames[cName]; copyObject(instance, template); instance.data = mergeObjects(instance.default.data, cData); instance.config = mergeObjects(instance.default.config, cConfig); if (!template.hasOwnProperty("class")) { template["class"] = {}; } instance["class"] = template["class"]; } else { log("ERROR:", "Definition for component", cName, "NOT found!"); } return instance;}function buildStyle(style, parents) { const E = "", S = " "; var a, p, str = "", sep = "", pre = style.pre, sel = style.sel, post = style.post, attr = style.attr; function buildAttrString(attr) { var a, str = ""; for (a in attr) { str += a + ":" + attr[a] + ";"; } return str; } if (isEmpty(attr) || !isObject(attr) && !isArray(attr)) { return E; } if (isEmpty(parents)) { parents = E; } if (isEmpty(pre)) { pre = E; } if (isEmpty(sel)) { sel = E; } if (isEmpty(post)) { post = E; } if (isString(sel)) { str += parents + S + pre + (isStringEmpty(pre) ? E : S) + sel + (isStringEmpty(sel) ? E : S) + post; } else { if (isArray(sel)) { for (p = 0; p < sel.length; p++) { str += sep + parents + S + pre + (isStringEmpty(pre) ? E : S) + sel[p] + (isStringEmpty(sel[p]) ? E : S) + post; sep = ","; } } } if (isStringEmpty(str)) { return E; } str += "{"; if (isArray(attr)) { for (p = 0; p < attr.length; p++) { str += buildAttrString(attr[p]); } } else { str += buildAttrString(attr); } str += "}"; return str;}function buildTagString(tag) { var tstr = "", astr = "", cstr = "", a, p; if (tag.hasOwnProperty("content") && isString(tag.content)) { cstr += tag.content; } else { if (isArray(tag.content)) { } } if (tag.hasOwnProperty("name") && isString(tag.name) && !isStringEmpty(tag.name)) { if (tag.hasOwnProperty("attr") && isObject(tag.attr)) { for (a in tag.attr) { astr += " " + a + "=\"" + tag.attr[a] + "\""; } } if (tag.hasOwnProperty("prop") && isObject(tag.prop)) { for (p in tag.prop) { if (tag.prop[p]) { astr += " " + p; } } } tstr += "<" + tag.name + astr + ">" + cstr + "" + tag.name + ">"; } return tstr;}function buildComponentTag(contentFunc) { const _self = this; var tagId, html = ""; if (!_self.instance || !_self.instance.tagId) { tagId = createId("COM"); _self.instance = {tagId: tagId}; } else { tagId = _self.instance.tagId; } html += "
"; if (contentFunc) { html += contentFunc.call(_self); } html += "
"; return html;}function copyObjectNameMapDefault(sourceName, sourceValue) { return sourceName;}function copyObject(d, s, nameMap) { var j, k, js, stack = []; if ("function" !== typeof nameMap) { nameMap = copyObjectNameMapDefault; } stack.push({s: s, d: d}); while (0 < stack.length) { p = stack.pop(); s = p.s; d = p.d; for (j in s) { js = nameMap(j, s[j]); if ("string" === typeof s[j]) { d[js] = s[j]; } else { if ("object" === typeof s[j]) { if (Array.isArray(s[j])) { if (U === typeof d[js]) { d[js] = []; } for (k = 0; k < s[j].length; k++) { if ("string" === typeof s[j][k]) { d[js][k] = s[j][k]; } else { if ("object" === typeof s[j][k]) { if (U === typeof d[js][k]) { if (Array.isArray(s[j][k])) { d[js][k] = []; } else { d[js][k] = {}; } } } } stack.push({s: s[j][k], d: d[js][k]}); } } else { if (U === typeof d[j]) { d[js] = {}; } stack.push({s: s[j], d: d[js]}); } } else { d[js] = s[j]; } } } }}function mergeObjects() { var i = 0, n, r = {}, p; for (i = 0; i < arguments.length; i++) { n = arguments[i]; copyObject(r, n); } return r;}function persist() { var _self = this; if (!coms.hasOwnProperty(_self.instance.tagId)) { coms[_self.instance.tagId] = _self; }}function Bopis_html() { const _self = this; var f, str = ""; f = _self.config.feature; if (_self.config.features.hasOwnProperty(f)) { _self.feature = _self.config.features[f]; if (_self.hasOwnProperty(f) && _self.isFunction(_self[f])) { str += _self[f](); } } return str;}function Bopis_getDeliveryConfigBatch(callback) { const _self = this; const SP = "sitePreferences", DC = "deliveryConfig"; const AS = [S], AB = [B]; const batch = {}; batch[SP] = {"url": _self.baseAjaxUrl + "SitePreferences-GetPreferencesJSON?prefcontext=deliveryOptions", "cache": 60000}; batch[DC] = {"url": _self.baseAjaxUrl + "Stores-DeliveryConfig", "cache": 1800000, success: function (results) { if (results.deliveryConfig.success && results.deliveryConfig.out.sddZipCode) { if (window.libs && window.libs.notify) { window.libs.notify.api.fire("dc-done", {sddZip: results.deliveryConfig.out.sddZipCode}); } } }}; _self.performJsonAjaxRequests(batch, function (r, rq) { var d, n, data = {}; function merge(d, s) { var n; for (n in s) { d[n] = s[n]; } } merge(data, r[SP].out); merge(data, r[DC].out); _self.objPropDef(data, "storeId", E, AS); _self.objPropDef(data, "zipCode", E, AS); _self.objPropDef(data, "sddZipCode", E, AS); _self.objPropDef(data, "StoreInventoryService", "dom", AS, null, "storeInvService"); _self.objPropDef(data, "FIND_IN_STORE_ENABLE", _self.default.data.fisEnabled, AB, null, "fisEnabled"); _self.objPropDef(data, "enableStorePickUp", _self.default.data.bopisEnabled, AB, null, "bopisEnabled"); _self.objPropDef(data, "enableSameDayDeliveryPDP", _self.default.data.sddEnabled, AB, null, "sddEnabled"); _self.objPropDef(data, "useSFCCforStoreInv", false, AB, null, "storeInvSfccOnly"); objPropDef(data, "BOPISPickupReadyHours", 4, ["number"], null, "readyHours"); if (_self.isFunction(callback)) { try { callback(data); } catch (e) { log("Exception:", e); } } }, function (r) { log("getDeliveryConfigBatch failure: results:", r); });}function Bopis_getStoresByZipPidBatch(pid, orin, zip, sddZip, sddStoreId, callback) { const _self = this; const prod = "www.belk.com", dev = "www.belkdev.com"; var host = prod; if (prod !== window.location.host) { host = dev; } const batch = {deliveryConfig: {url: _self.baseAjaxUrl + "Stores-DeliveryConfig", "cache": 1800000, required: false, success: function (results) { if (results.deliveryConfig.success && results.deliveryConfig.out.sddZipCode) { if (window.libs && window.libs.notify) { window.libs.notify.api.fire("dc-done", {sddZip: results.deliveryConfig.out.sddZipCode}); } } }}, storesCall: {url: _self.baseAjaxUrl + "Stores-GetStoresByZip", "cache": 60000, required: false}, inventoryCall: {url: "https://" + host + "/inventory/" + _self.data.storeInvService, method: "POST", required: false, "cache": 60000, timeout: 3000, ready: {storesCall: true}, map: function (dest, results) { const source = results.storesCall.out; var i; dest.stores = []; for (i = 0; i < source.length; i++) { dest.stores[i] = source[i].storeId; } }, isSuccess: function (e, r) { var ret = true; if (r.statusCode) { log("statusCode in inventory response:", r); ret = false; } if (!r.hasOwnProperty(pid)) { log("missing pid", pid, " in inventory response:", r); ret = false; } return ret; }}, backupCall: {url: _self.baseAjaxUrl + "StoreInventory-RedesignInventory", "cache": 60000, required: false, ready: [{storesCall: false}, {inventoryCall: false}]}, successNode: {ready: [{storesCall: true, inventoryCall: true}, {backupCall: true}], required: true, map: function (dest, r) { var id, n, o; if (r.deliveryConfig.success) { for (n in r.deliveryConfig.out) { dest[n] = r.deliveryConfig.out[n]; } objPropDef(dest, "BOPISPickupReadyHours", 4, ["number"], null, "readyHours"); } if (r.storesCall.success && r.inventoryCall.success) { dest.stores = r.storesCall.out; for (n = 0; n < dest.stores.length; n++) { dest.stores[n].id = dest.stores[n].storeId; delete dest.stores[n].storeId; } if (r.inventoryCall.out[pid]) { o = r.inventoryCall.out[pid]; for (n = 0; n < dest.stores.length; n++) { id = dest.stores[n].id; if (o.hasOwnProperty(id)) { dest.stores[n].quantity = o[id]; if (0 < o[id]) { dest.success = true; } } else { dest.stores[n].quantity = 0; } } } else { for (n = 0; n < dest.stores.length; n++) { dest.stores[n].quantity = 0; } } _self.fixStoreData(dest); if (E !== sddStoreId) { for (n = 0; n < dest.stores.length; n++) { if (sddStoreId === dest.stores[n].id) { dest.sddStore = dest.stores[n]; break; } } } } else { if (r.backupCall.success) { for (n in r.backupCall.out) { dest[n] = r.backupCall.out[n]; } } else { log("getStoresByZipPidBatch successNode reach with invalid data."); } } }}}, data = {storesCall: {zipCode: zip, sddZipCode: sddZip, sddStore: sddStoreId}, inventoryCall: {items: [{pid: pid, orin: orin}]}, backupCall: {pid: pid, zipCode: zip, sddZip: sddZip, sddStoreId: sddStoreId}}; function suc(r, rq) { var data = r.successNode.out, parms = {pid: pid, orin: orin, zip: zip, sddZip: sddZip, sddStoreId: sddStoreId}; if (_self.isFunction(callback)) { try { callback(parms, data); } catch (e) { log("Exception:", e); } } } function fai(r) { log("batch failure: results:", r); } if (_self.data.storeInvSfccOnly) { batch.storesCall.ready = false; batch.inventoryCall.ready = false; } _self.performJsonAjaxRequests(batch, suc, fai, data);}function Bopis_validateData(cData) { const _self = this; var valid = {productOnlineOnly: false, bopisEnabled: false, findInStoreEnabled: false, curbSidePickupEnabled: false, bopisProduct: false, bopisSku: false, zip: false, storeId: false, skuId: false, productInStock: false, skuStockLevel: false, surchargeAmount: false, isPreOrderEnabled: false, showPreOrder: false, isQuickView: false, releaseDate: false, preOrderPromoId: false, preOrderPromoDetails: false, storeSearchDistance: false}, allValid = false; if (!_self.isBoolean(cData.productOnlineOnly)) { cData.bopisEnabled = _self.toBoolean(cData.bopisEnabled, _self.default.data.productOnlineOnly); } if (_self.isBoolean(cData.productOnlineOnly)) { valid.productOnlineOnly = true; } if (!_self.isBoolean(cData.bopisEnabled)) { cData.bopisEnabled = _self.toBoolean(cData.bopisEnabled, _self.default.data.bopisEnabled); } if (_self.isBoolean(cData.bopisEnabled)) { valid.bopisEnabled = true; } if (!_self.isBoolean(cData.findInStoreEnabled)) { cData.findInStoreEnabled = _self.toBoolean(cData.findInStoreEnabled, _self.default.data.findInStoreEnabled); } if (_self.isBoolean(cData.findInStoreEnabled)) { valid.findInStoreEnabled = true; } if (_self.isBoolean(cData.curbSidePickupEnabled)) { valid.curbSidePickupEnabled = true; } if (!_self.isBoolean(cData.bopisProduct)) { cData.bopisProduct = _self.toBoolean(cData.bopisProduct, _self.default.data.bopisProduct); } if (_self.isBoolean(cData.bopisProduct)) { valid.bopisProduct = true; } if (!_self.isBoolean(cData.bopisSku)) { cData.bopisSku = _self.toBoolean(cData.bopisSku, _self.default.data.bopisSku); } if (_self.isBoolean(cData.bopisSku)) { valid.bopisSku = true; } if (!_self.isString(cData.zip)) { cData.zip = new String(cData.zip); } if (5 !== cData.zip.length) { cData.zip = cData.zip.substring(0, 5); } if (_self.isStringEmpty(cData.zip) || !isNaN(cData.zip) && (5 === cData.zip.length)) { valid.zip = true; } if (_self.isNumber(cData.storeId)) { cData.storeId = new String(cData.storeId); } if (!_self.isString(cData.storeId) || isNaN(cData.storeId)) { cData.storeId = _self.default.data.storeId; } if (_self.isString(cData.storeId) && !isNaN(cData.storeId)) { valid.storeId = true; } if (_self.isNumber(cData.skuId)) { cData.skuId = new String(cData.skuId); } if (!_self.isString(cData.skuId)) { cData.skuId = _self.default.data.skuId; } if (_self.isString(cData.skuId)) { valid.skuId = true; } if (!_self.isBoolean(cData.productInStock)) { cData.productInStock = _self.toBoolean(cData.productInStock, _self.default.data.productInStock); } if (_self.isBoolean(cData.productInStock)) { valid.productInStock = true; } if (!_self.isNumber(cData.skuStockLevel) && !isNaN(cData.skuStockLevel)) { cData.skuStockLevel = Number(cData.skuStockLevel); } if (_self.isNumber(cData.skuStockLevel)) { valid.skuStockLevel = true; } if (_self.isNumber(cData.surchargeAmount)) { valid.surchargeAmount = true; } if (_self.isBoolean(cData.isPreOrderEnabled)) { valid.isPreOrderEnabled = true; } if (_self.isBoolean(cData.showPreOrder)) { valid.showPreOrder = true; } if (_self.isBoolean(cData.isQuickView)) { valid.isQuickView = true; } if (_self.isString(cData.releaseDate)) { valid.releaseDate = true; } if (_self.isString(cData.preOrderPromoId)) { valid.preOrderPromoId = true; } if (_self.isString(cData.preOrderPromoDetails)) { valid.preOrderPromoDetails = true; } if (_self.isNumber(cData.storeSearchDistance)) { valid.storeSearchDistance = true; } else { cData.storeSearchDistance = _self.default.data.storeSearchDistance; } for (i in valid) { if (valid[i]) { allValid = true; } else { allValid = false; break; } } return allValid ? true : valid;}function Bopis_reset() { const _self = this; _self.error = false; _self.searchResults = {}; _self.copyObject(_self.searchResults, _self.default.config.init.searchResults); _self.stores = []; _self.hasPreOrderResponse = false; _self.shipPromoMsg = ""; _self.isShipPromoMsg = false; _self.selectedStoreIds = [];}function Bopis_plp() { const _self = this; var str = "", storeName = _self.config.messaging.selectStore, ids = "", i, urlStoreId = "", mm = window.matchMedia("(max-width:767px)"); if (isUndefined(_self.config.messaging.bopis) || !isString(_self.config.messaging.bopis) || isStringEmpty(_self.config.messaging.bopis)) { _self.config.messaging.bopis = _self.default.config.messaging.bopis; } _self.checked = false; if (-1 !== window.location.href.indexOf("searchType=FreePickup")) { _self.checked = true; } function buildBopisPromoMsg() { return "" + _self.promoMsg + ""; } function build() { var str = "", isStore = !_self.isObjectEmpty(_self.data.store), bopisPromoAssetID = window.SitePreferences.BOPIS_CLEARANCE_COUPON_ENABLED ? "bopis-clearance-promo" : "bopis-promo-messaging"; str += "" + _self.config.messaging.bopis + _self.pickupTodayOrTomorrow(); if (1 < _self.selectedStoreIds.length) { storeName = _self.config.messaging.atStoresX.replace("X", _self.selectedStoreIds.length); } else { if (isStore) { storeName = _self.data.store.name; } } str += " " + _self.buildStoreSelectionToggle(storeName); str += ""; str += "
"; str += ""; if (!_self.isStringEmpty(_self.promoMsg)) { str += buildBopisPromoMsg(); } else { _self.getBopisPromoMessaging(bopisPromoAssetID, function (data) { if (data.hasOwnProperty("isOnline") && data.isOnline && data.hasOwnProperty("assetContent") && !_self.isStringEmpty(data.assetContent)) { _self.promoMsg = data.assetContent; $("#" + _self.instance.tagId + " .promo").html(buildBopisPromoMsg()); } }); } str += ""; const newMoveSel = "#bopis-pickup"; const oldMoveSel = "#secondary"; var moveToSel = newMoveSel; if (!window.facetNav || !window.facetNav.nav) { moveToSel = oldMoveSel; } var moveTryCount = 0; var toi = null; function startMoveTo(obj, toSel) { if (toi) { clearTimeout(toi); toi = null; } moveTo(obj, toSel); } function moveTo(obj, toSel) { var to = document.querySelector(toSel), plp; if (!_self.isNull(to)) { to.prepend(obj); _self.addStoreSelectionHandlers(); switch (toSel) { case oldMoveSel: case newMoveSel: $("#results-products").css({width: "auto"}); $(".bopis-filter-options").css({display: "none"}); plp = comp.querySelector(".plp"); plp.classList.add("facet"); if (oldMoveSel === moveToSel) { plp.classList.add("wrap"); } break; default: $("#results-products").css({width: ""}); $(".bopis-filter-options").css({display: ""}); plp = comp.querySelector(".plp"); plp.classList.remove("facet"); if (oldMoveSel === moveToSel) { plp.classList.remove("wrap"); } } } else { if (newMoveSel === moveToSel) { moveTryCount++; if (moveTryCount > 20) { moveToSel = oldMoveSel; toSel = moveToSel; } } toi = setTimeout(moveTo, 50, obj, toSel); } } var noMove = true; var comp = document.querySelector("#" + _self.instance.tagId); if (_self.feature.moveToLeftOnDesktop) { mm.addListener(function bpchange(e) { var comp = document.querySelector("#" + _self.instance.tagId); if (!comp) { mm.removeListener(bpchange); if (toi) { clearTimeout(toi); toi = null; } return; } if (noMove !== e.matches) { noMove = e.matches; if (noMove) { startMoveTo(comp, ".bopis-filter-options"); } else { startMoveTo(comp, moveToSel); } } }); noMove = mm.matches; } if (!_self.isNull(comp)) { $(comp).find(".plp .center-vert").html(str); _self.addStoreSelectionHandlers(); if (!noMove) { startMoveTo(comp, moveToSel); } } } function getStores(zip) { var found = {}; if (!_self.isStringEmpty(zip)) { _self.getStoresByZip(zip, function (zip, data) { var i; _self.log("getStoresByZip with zip:", zip, " returned data:", data); if (_self.isObject(data) && data.hasOwnProperty("success") && data.success) { _self.data.zip = zip; _self.stores = data.stores; if (data.hasOwnProperty("readyHours") && _self.isNumber(data.readyHours)) { _self.readyHours = data.readyHours; } if (data.hasOwnProperty("pickupToday") && _self.isBoolean(data.pickupToday)) { _self.pickupToday = data.pickupToday; } if (data.hasOwnProperty("pickupDay") && _self.isString(data.pickupDay)) { _self.data.pickupDay = data.pickupDay; } if (0 === _self.selectedStoreIds.length) { if (!_self.isArrayEmpty(_self.stores)) { found = _self.findFirstBopisStore(); } if (!_self.isUndefined(found.store)) { _self.data.store = found.store; _self.selectedStoreIds.push(found.store.id); } else { _self.data.store = {}; } } else { if (!_self.isArrayEmpty(_self.stores)) { for (i = 0; i < _self.selectedStoreIds.length; i++) { found = _self.findStore(_self.selectedStoreIds[i]); if (!found.hasOwnProperty("store") || !found.store.hasOwnProperty("bopis") || !found.store.bopis) { _self.selectedStoreIds.splice(i--, 1); } } found = {}; if (0 !== _self.selectedStoreIds.length) { found = _self.findStore(_self.selectedStoreIds[0]); } } if (found.hasOwnProperty("store") && found.store.hasOwnProperty("bopis") && found.store.bopis) { _self.data.store = found.store; } else { _self.data.store = {}; } } } build(); }); } else { _self.data.zip = zip; build(); } } urlStoreId = _self.getUrlParm(window.location.href, "storeId"); if (!_self.isStringEmpty(urlStoreId)) { ids = decodeURIComponent(urlStoreId); } else { if (window.hasOwnProperty("User") && window.User.hasOwnProperty("storeId") && !_self.isNull(window.User.storeId)) { ids = window.User.storeId; } } if (!_self.isStringEmpty(ids)) { ids = ids.split("|"); for (i = 0; i < ids.length; i++) { _self.selectedStoreIds.push(ids[i]); } } function closePopper(e) { var $t = $(e.target), $p; if (_self["class"].ignoreNextClosePopperSelf === _self) { _self["class"].ignoreNextClosePopperSelf = null; return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .as-link").length) { return; } if ("filterByStorePickup" === $t.attr("for")) { return; } $p = $t.closest("#" + _self.instance.tagId + " .popper"); if (0 === $p.length) { if (_self.isPopperOpen) { _self.hidePopper(); } } } window.libs.notify.api.request(["jquery-ready"], function () { const ENS = "click." + _self.component.class + ".popper"; var zip, $B = $("body"); $B.off(ENS); $B.on(ENS, closePopper); if (_self.isStringEmpty(_self.data.zip)) { _self.getDeliveryConfigBatch(function (data) { if (!_self.isObjectEmpty(data)) { _self.data.bopisEnabled = data.bopisEnabled; _self.data.findInStoreEnabled = data.fisEnabled; _self.data.storeId = data.storeId; if ("" !== data.zipCode) { zip = data.zipCode; getStores(zip); } else { getStores(_self.data.zip); } } else { build(); } }); } else { getStores(_self.data.zip); } }); document.addEventListener("brdata_ready", function (e) { const checked = (-1 !== window.location.href.indexOf("searchType=FreePickup")); _self.update({checked: checked}); }); str += "
"; return str;}function Bopis_pdp() { const _self = this; const zipClass = "select-zip"; var valid, str = "", e, pid = "", zip = ""; valid = _self.validateData(_self.data); log("data valid:", valid); if (isUndefined(_self.config.messaging.bopis) || !isString(_self.config.messaging.bopis) || isStringEmpty(_self.config.messaging.bopis)) { _self.config.messaging.bopis = _self.default.config.messaging.bopis; } pid = _self.data.skuId; _self.objPropDef(_self.data, "skuOrin", "", ["string"]); orin = _self.data.skuOrin; zip = _self.data.zip; function closePopper(e) { if (_self.ignoreNextClosePopper) { _self.ignoreNextClosePopper = false; return; } var $t = $(e.target), $p = $t.closest("#" + _self.instance.tagId + " .popper"); if (0 !== $t.filter("#" + _self.instance.tagId + " .as-link").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .rradio").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .rcheckbox").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .vlabel").length) { return; } if ($t.hasClass("rradio")) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " #receive-option-pickup").length) { return; } if (0 === $p.length) { if (_self.isPopperOpen) { _self.hidePopper(); } } } function build() { var $C = $("#" + _self.instance.tagId); $C.find(".pdp").html(_self.buildPDP()); $C.find(".reserve-space").removeClass("reserve-space"); _self.addOutlineHandlers(); _self.addStoreSelectionHandlers(); _self.addPDPZipSelectionHandlers(); _self.addConnsZipSelectionHandler(); } function getStores(pid, orin, zip, sddZip, sddStoreId) { var found = {}; if (_self.isUndefined(pid)) { pid = ""; } if (_self.isUndefined(orin)) { orin = ""; } if (_self.isUndefined(zip)) { zip = ""; } if (_self.isUndefined(sddZip)) { sddZip = ""; } if (_self.isUndefined(sddStoreId)) { sddStoreId = ""; } if (!_self.isStringEmpty(pid) && (_self.data.findInStoreEnabled && !_self.isStringEmpty(zip) || !_self.isStringEmpty(sddZip) && !_self.isStringEmpty(sddStoreId))) { if (_self.isStringEmpty(sddStoreId)) { sddZip = ""; } else { if (_self.isStringEmpty(sddZip)) { sddStoreId = ""; } } _self.getStoresByZipPidBatch(pid, orin, zip, sddZip, sddStoreId, function (parms, data) { if (_self.isObject(data) && data.hasOwnProperty("success") && data.success) { _self.data.skuId = parms.pid; _self.data.zip = parms.zip; if (data.hasOwnProperty("stores")) { _self.stores = data.stores; } if (data.hasOwnProperty("readyHours")) { _self.readyHours = data.readyHours; } if (data.hasOwnProperty("pickupToday")) { _self.pickupToday = data.pickupToday; } if (data.hasOwnProperty("pickupDay") && _self.isString(data.pickupDay)) { _self.data.pickupDay = data.pickupDay; } if (data.hasOwnProperty("sddStore")) { _self.data.sddStore = data.sddStore; _self.data.sddStoreId = _self.data.sddStore.id; } if (data.hasOwnProperty("sameDay")) { _self.data.sddSameDay = data.sameDay; } if (!_self.isArrayEmpty(_self.stores)) { if (!_self.isNull(_self.data.preferredStoreId)) { found = _self.findStore(_self.data.preferredStoreId); } else { if (!_self.isObjectEmpty(_self.data.store)) { found = _self.findStore(_self.data.store.id); } } } if (!_self.isUndefined(found.store)) { _self.data.store = found.store; _self.data.storeId = _self.data.store.id; } else { if (0 < _self.stores.length) { _self.data.store = _self.stores[0]; _self.data.storeId = _self.data.store.id; } } if (_self.isObjectEmpty(_self.data.store) || !_self.data.store.bopis || 0 === _self.data.store.quantity) { _self.searchResults = _self.searchStores(_self.stores); if (_self.searchResults.bopis) { _self.data.store = _self.searchResults.store; _self.data.storeId = _self.data.store.id; } } } build(); }); } else { _self.data.zip = zip; build(); } } window.libs.notify.api.request(["jquery-ready"], function () { const ENS = "click." + _self.component.class + ".popper"; var $B = $("body"); $B.off(ENS); $B.on(ENS, closePopper); if (_self.isStringEmpty(_self.data.zip)) { _self.getDeliveryConfigBatch(function (data) { if (!_self.isObjectEmpty(data)) { _self.data.bopisEnabled = data.bopisEnabled; _self.data.findInStoreEnabled = data.fisEnabled; _self.data.storeId = data.storeId; _self.data.preferredStoreId = _self.data.storeId; _self.data.zip = data.zipCode; _self.data.sddEnabled = data.sddEnabled; _self.data.sddZip = data.sddZipCode; _self.data.storeInvService = data.storeInvService; _self.data.storeInvSfccOnly = data.storeInvSfccOnly; if (_self.data.sddEnabled && E !== _self.data.sddZip) { _self.getSddStore(function (data) { if (!_self.isObjectEmpty(data) && data.hasOwnProperty("store") && !_self.isStringEmpty(data.store)) { _self.data.sddStoreId = data.store; } if (_self.isStoresDataNeeded()) { getStores(pid, _self.data.skuOrin, _self.data.zip, _self.data.sddZip, _self.data.sddStoreId); } else { build(); } }); } else { if (_self.isStoresDataNeeded()) { getStores(pid, _self.data.skuOrin, _self.data.zip); } else { build(); } } } else { build(); } }); } else { if (_self.isStoresDataNeeded()) { getStores(pid, _self.data.skuOrin, _self.data.zip, _self.data.sddZip, _self.data.sddStoreId); } else { build(); } } }); _self.persist(); str += "
"; return str;}function Bopis_bag() { const _self = this; var valid, str = ""; if (!_self.class.hasOwnProperty("isClosePoppers")) { _self.class.isClosePoppers = false; } if (!_self.class.hasOwnProperty("ignoreNextClosePopperSelf")) { _self.class.ignoreNextClosePopperSelf = null; } _self.readyHours = 4; _self.pickupToday = false; if (!_self.isUndefined(_self.data.readyHours) && _self.isNumber(_self.data.readyHours)) { _self.readyHours = _self.data.readyHours; } if (!_self.isUndefined(_self.data.pickupToday) && _self.isBoolean(_self.data.pickupToday)) { _self.pickupToday = _self.data.pickupToday; } if (!_self.isString(_self.data.pickupDay)) { _self.data.pickupDay = ""; } if (isUndefined(_self.config.messaging.bopis) || !isString(_self.config.messaging.bopis) || isStringEmpty(_self.config.messaging.bopis)) { _self.config.messaging.bopis = _self.default.config.messaging.bopis; } if (!_self.data.hasOwnProperty("sessionZip")) { _self.data.sessionZip = ""; } function closePoppers(e) { var $t = $(e.target), ignoreSelf = null, pid = ""; if (0 !== $t.closest(".receive-option-pickup").length) { pid = $t.closest("." + _self.component.class).attr("id"); if ("" !== pid && coms.hasOwnProperty(pid)) { ignoreSelf = coms[pid]; } } if (!isNull(_self.class.ignoreNextClosePopperSelf)) { ignoreSelf = _self.class.ignoreNextClosePopperSelf; _self.class.ignoreNextClosePopperSelf = null; } _self.hidePoppers(ignoreSelf); } function build() { const ENS = "click." + _self.component.class + ".popper"; var $B = $("body"); var $C = $("#" + _self.instance.tagId); $C.find(".bag").html(_self.buildPDP()); $C.find(".reserve-space").removeClass("reserve-space"); _self.addStoreSelectionHandlers(); _self.addConnsZipSelectionHandler(); if (!_self.class.isClosePoppers) { $B.off(ENS); $B.on(ENS, closePoppers); _self.class.isClosePoppers = true; } } if (_self.data.productInStock) { _self.getDeliveryConfigBatch(function (data) { _self.data.storeInvService = data.storeInvService; _self.data.storeInvSfccOnly = data.storeInvSfccOnly; window.libs.notify.api.request(["jquery-ready"], function () { build(); }); }); _self.persist(); str += "
"; } return str;}function Bopis_bagSddBanner() { const _self = this; const zipClass = "select-zip", sddM = _self.config.messaging.sdd; var str = ""; function formatPrice(p) { const regEx = /(\d(?=(\d{3})+\.))/g; return "$" + Number(p).toFixed(2).replace(regEx, "$1,"); } if (isNumber(_self.data.sddFee) || isString(_self.data.sddFee) && !isStringEmpty(_self.data.sddFee)) { _self.data.formattedSddFee = formatPrice(_self.data.sddFee); } else { _self.data.formattedSddFee = ""; } function closePopper(e) { if (_self.ignoreNextClosePopper) { _self.ignoreNextClosePopper = false; return; } var $t = $(e.target), $p = $t.closest("#" + _self.instance.tagId + " .popper"); if (0 !== $t.filter("#" + _self.instance.tagId + " .as-link").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .rradio").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .rcheckbox").length) { return; } if (0 !== $t.filter("#" + _self.instance.tagId + " .vlabel").length) { return; } if ($t.hasClass("rradio")) { return; } if (0 === $p.length) { if (_self.isPopperOpen) { _self.hidePopper(); } } } function buildSddMessage() { var msg = "", fee = _self.isStringEmpty(_self.data.formattedSddFee) ? "" : "(" + _self.data.formattedSddFee + ") "; function day(sameDay) { var msg = ""; if (sameDay) { msg = "today"; } else { msg = "tomorrow"; } return msg; } function fill(msg) { var rX = /{{X}}/, rS = /{{S}}/, rC = /{{C}}/, rE = /{{E}}/; msg = msg.replace(rX, _self.data.sddItemCount); msg = msg.replace(rS, 1 < _self.data.sddItemCount ? "s" : ""); msg = msg.replace(rC, _self.data.sddCutoffTime + " ET"); msg = msg.replace(rE, _self.data.sddEndTime.replace(" ", "")); if (!_self.data.hasReducedEliteFee && 0 !== _self.data.sddFee) { return fee + msg; } else { return msg; } } if (_self.data.hasSdd) { if (_self.data.sddZip) { if (_self.data.sddStoreId) { if (0 < _self.data.sddItemCount) { if (_self.data.sddSelected) { if (_self.data.sddSameDay) { msg = fill(sddM.eligibleActive); } else { msg = fill(sddM.eligibleActiveCutoff); } } else { if (_self.data.hasPresale) { if (_self.data.sddSameDay) { msg = fill(sddM.eligiblePresale); } else { msg = fill(sddM.eligiblePresaleCutoff); } } else { if (_self.data.sddSameDay) { msg = fill(sddM.eligible); } else { msg = fill(sddM.eligibleCutoff); } } } } else { msg = _self.data.sddFee === 0 ? "(" + sddM.Free + ")" + " " + sddM.noSddInZip : fee + sddM.noSddInZip; } } else { msg = _self.data.sddFee === 0 ? "(" + sddM.Free + ")" + " " + sddM.zipNotEligible : fee + sddM.zipNotEligible; } } else { msg = _self.data.sddFee === 0 ? "(" + sddM.Free + ")" + " " + sddM.noZip : fee + sddM.noZip; } } else { } return msg; } function addSelectionHandlers() { var $C = $("#" + _self.instance.tagId); var $zObj = $C.find("." + zipClass), $in, len; $zObj.on("click", function (e) { if ($zObj.prop("checked")) { _self.showPopper(zipClass); $in = $C.find(".popper .search-by-zip .zip-code"); $in.focus(); len = $in.val().length; $in[0].setSelectionRange(len, len); } else { _self.hidePopper(); } e.stopPropagation(); }); var $cbObj = $C.find("#selectSdd"); $cbObj.on("click", function (e) { if ($cbObj.prop("checked")) { $("#sddSelected").val(true); } else { $("#sddSelected").val(false); } if (window.progress) { window.progress.show(); } $("input[type=\"hidden\"][name$=\"_updateCart\"]").remove(); $("input[type=\"hidden\"][name$=\"_updateGiftBox\"]").remove(); $("input[type=\"hidden\"][name$=\"_updateSSDZipCode\"]").remove(); $("#update-sddOption").click(); }); } function build() { var str = "", zipLabel = "", isTo = false, isDisabled = false, fee = _self.isStringEmpty(_self.data.formattedSddFee) ? "" : _self.data.formattedSddFee; if (_self.isStringEmpty(_self.data.sddZip)) { zipLabel = "Check My Area"; } else { zipLabel = _self.data.sddZip, isTo = true; } if (!_self.data.sddZip || !_self.data.sddStoreId || !_self.data.sddItemCount) { isDisabled = true; } str += "
"; str += "
"; str += "
"; str += ""; str += "
"; str += "" + (isDisabled ? "" : (_self.data.sddSameDay ? sddM.sameDayPre : sddM.nextDayPre)); str += isDisabled ? "" : _self.data.isEliteCustomer ? (0 === _self.data.sddFee ? sddM.elitesPre : _self.data.hasReducedEliteFee ? fee : "") : 0 === _self.data.sddFee ? sddM.Free : ""; str += " " + sddM.title + (isDisabled ? "" : (_self.data.hasReducedEliteFee && _self.data.isEliteCustomer && 0 !== _self.data.sddFee ? " " + sddM.forElites + " " : " ")) + _self.buildToolTip(_self.data.sddToolTip) + (isTo ? " to " : "") + ""; str += " " + _self.buildSelectionToggle(zipClass, zipLabel); str += ""; str += "
"; str += ""; str += buildSddMessage(); str += "
"; str += "
"; str += "
"; return str; } if (_self.data.hasSdd) { window.libs.notify.api.request(["jquery-ready"], function () { const ENS = "click." + _self.instance.tagId + ".popper"; var $B = $("body"); $B.off(ENS); $B.on(ENS, closePopper); addSelectionHandlers(); }); str = "
"; str += "
"; str += build(); str += "
"; str += "
"; } return str;}function Bopis_isPickupDisabled() { const _self = this; const NITP = true; var isDisabled = true; if (!_self.data.mirakl && !_self.error && !_self.data.productOnlineOnly && !_self.data.skuOnlineOnly && _self.data.bopisEnabled && _self.data.findInStoreEnabled && _self.data.bopisProduct && !_self.isStringEmpty(_self.data.skuId) && _self.data.bopisSku && !(_self.data.isConnsItem || (window.pageData && window.pageData.isConnsProduct)) && (NITP || !_self.isStringEmpty(_self.data.zip)) && ((NITP && _self.isStringEmpty(_self.data.zip)) || !_self.isObjectEmpty(_self.data.store) && _self.data.store.bopis && 0 < _self.data.store.quantity || _self.searchResults.bopis)) { isDisabled = false; } return isDisabled;}function Bopis_isStoresDataNeeded(data) { const _self = this; if (!data) { data = _self.data; } return data.bopisEnabled && data.findInStoreEnabled && data.bopisProduct && !data.mirakl && !data.productOnlineOnly && !data.skuOnlineOnly && !(data.isConnsItem || (window.pageData && window.pageData.isConnsProduct));}function Bopis_buildInputRC(config) { const _self = this; var c = config, str = "", checked = c.isChecked ? "checked" : ""; function pc(c) { return _self.isUndefined(c) || !_self.isString(c) || _self.isStringEmpty(c) ? "" : " " === c[0] ? c : " " + c; } if (!c.isDisabled) { if (c.isMultiSelect) { str += ""; } else { str += ""; } } else { str += "
"; } str += ""; return str;}function Bopis_buildPDP() { const _self = this; const regD = /{{D}}/; var M = _self.config.messaging, str = "", name = "receive-option", quantity = 0, labelText = "", skuSelected = false, pid = "", preOrderPromoDetails = "", preOrderPromoId = "", isConnsItem = _self.config.feature === "bag" ? _self.data.isConnsItem : (window.pageData && window.pageData.isConnsProduct); if (_self.config.feature !== "bag" && (isConnsItem && !_self.isObjectEmpty(_self.data.connsSKUData) && !_self.isObjectEmpty(_self.data.connsInvData) && !_self.data.connsInvData.conns)) { return; } if (!_self.isStringEmpty(_self.data.skuId)) { skuSelected = true; } if (_self.isObject(_self.data.store) && _self.data.store.hasOwnProperty("quantity") && _self.isNumber(_self.data.store.quantity)) { quantity = _self.data.store.quantity; } if ("pdp" === _self.config.feature && skuSelected && !_self.data.skuShipEligible && 0 >= quantity && !_self.data.connsSKUData) { str += "
"; str += ""; str += M.bopisOnly; str += ""; str += ""; str += M.productOutNear.replace(/{{Z}}/, _self.data.zip).replace(regD, _self.data.storeSearchDistance); str += "
"; } else { if (_self.data.productInStock) { if (!skuSelected) { str += "
"; str += ""; if (_self.data.skuShipEligible) { str += ""; if (!_self.isStringEmpty(_self.shipPromoMsg)) { str += _self.shipPromoMsg; } str += ""; str += ""; str += M.selectSizeForOpt; } else { str += "" + M.bopisOnly + ""; str += ""; str += M.selectSizeBopisOnly; } str += "
"; } else { if (0 < _self.data.skuStockLevel) { if (_self.data.sddEnabled && _self.data.skuSddEligible) { str += _self.buildSddEligibleBanner(); } str += "
"; str += "
" + M.receiveOptionsHeader + "
"; if (!_self.isObjectEmpty(_self.data.connsSKUData) && !_self.isObjectEmpty(_self.data.connsInvData) && isConnsItem) { str += _self.buildConnsOption(); } else { str += "
"; labelText = _self.buildProductShipStatus(_self.data.skuStockLevel, _self.data.productInStock && !skuSelected, _self.data.surchargeAmount); str += _self.buildInputRC({isDisabled: !_self.data.skuShipEligible, isMultiSelect: false, id: name + "-ship", value: "ship", name: name, content: labelText, isChecked: "bag" === _self.config.feature && !_self.isObjectEmpty(_self.data.store) && _self.data.bopisSelected ? false : true, isMessage: false}); str += "
"; } str += "
"; if (_self.data.isPreOrderEnabled && _self.data.showPreOrder && ("bag" === _self.config.feature || _self.hasPreOrderResponse)) { str += _self.buildPreSaleOption(); } str += "
"; str += _self.buildPickupOption(); str += "
"; str += _self.buildStoreId(); if (isConnsItem && "bag" !== _self.config.feature) { str += "
"; if (!_self.isObjectEmpty(_self.data.connsSKUData)) { str += _self.buildConnsFields(); } else { $("#add-to-cart").addClass("disabled add-to-cart-disabled").prop("disabled", true).attr("type", "button"); } str += "
"; } } else { if (isConnsItem) { if (!_self.isObjectEmpty(_self.data.connsSKUData) && !_self.isObjectEmpty(_self.data.connsInvData)) { str += "
"; str += "
" + M.receiveOptionsHeader + "
"; str += _self.buildConnsOption(); str += "
"; } if ("bag" !== _self.config.feature) { str += "
"; if (!_self.isObjectEmpty(_self.data.connsSKUData)) { str += _self.buildConnsFields(); } else { $("#add-to-cart").addClass("disabled add-to-cart-disabled").prop("disabled", true).attr("type", "button"); } str += "
"; } } else { str += "
"; str += M.skuOut; str += "
"; } } } } else { str += "
"; str += M.productOut; str += "
"; } } function updatePreOrderRadio(invStatus) { var $C = $("#" + _self.instance.tagId); if (invStatus) { var preOrderContent = ""; preOrderContent += _self.buildPreSaleOption(); $C.find(".preorder-container").html(preOrderContent).show(); } else { $C.find(".preorder-container").hide(); } } if ("pdp" === _self.config.feature && _self.data.isPreOrderEnabled && _self.data.showPreOrder) { pid = _self.data.skuId; if (_self.isStringEmpty(pid)) { pid = _self.data.productId; } preOrderPromoDetails = _self.data.preOrderPromoDetails; preOrderPromoId = _self.data.preOrderPromoId; _self.getPreOrderFCInventory(pid, preOrderPromoDetails, function (pid, preOrderPromoDetails, data) { _self.hasPreOrderResponse = true; if (data.hasOwnProperty("preOrderInStock") && data.preOrderInStock && data.hasOwnProperty("preOrderATSCount") && data.preOrderATSCount > 0) { _self.data.hasPreOrderInventory = true; updatePreOrderRadio(true); _self.addStoreSelectionHandlers(); updatePDPPreOrderIndicators(); } else { _self.data.hasPreOrderInventory = false; updatePreOrderRadio(false); updatePDPPreOrderIndicators(); } }); } else { if (_self.data.isQuickView && !_self.data.showPreOrder && _self.data.skuId !== "") { _self.data.hasPreOrderInventory = false; _self.hasPreOrderResponse = true; updatePreOrderRadio(false); updatePDPPreOrderIndicators(); } } function updateShipPromoMsg() { var $C; if (_self.isString(_self.shipPromoMsg) && !_self.isStringEmpty(_self.shipPromoMsg)) { $C = $("#" + _self.instance.tagId); $C.find(".ship-message .ship-promo").html((_self.isStringEmpty(_self.data.skuId) ? "" : " - ") + _self.shipPromoMsg); } } if ("pdp" === _self.config.feature && _self.data.skuShipEligible && (!_self.isShipPromoMsg || _self.lastSkuId !== _self.data.skuId)) { _self.isShipPromoMsg = true; pid = _self.data.skuId; if (_self.isStringEmpty(pid)) { pid = _self.data.productId; } _self.getShippingPromoMessage(pid, function (pid, data) { _self.lastSkuId = _self.data.skuId; if (data.hasOwnProperty("shippingMsg")) { if (_self.isString(data.shippingMsg) && !_self.isStringEmpty(data.shippingMsg)) { _self.shipPromoMsg = data.shippingMsg; updateShipPromoMsg(); } else { if (_self.isObject(data.shippingMsg) && !_self.isObjectEmpty(data.shippingMsg)) { if (_self.isStringEmpty(_self.data.skuId) && data.shippingMsg.long) { _self.shipPromoMsg = data.shippingMsg.long; } else { if (data.shippingMsg.short) { _self.shipPromoMsg = data.shippingMsg.short; } } updateShipPromoMsg(); } } } }); } function updatePDPPreOrderIndicators() { var $poGiftBadge = $(".preorder-gift-badge"), $pdTop = $(".product-detail.top"), badgeHtml = "
", $promoContainer = $(".promotion"), $promoCallOutMessage = $(".promotion .callout-message"), $poPromoMessage = $(".callout-message-row.preorder-promo-message"), $regularPromoMessage = $(".callout-message-row:not(.preorder-promo-message)"); if (_self.data.hasPreOrderInventory) { if ($poGiftBadge.length === 0 && $pdTop.length > 0) { $pdTop.prepend(badgeHtml); } else { $poGiftBadge.show(); } } else { if ($poGiftBadge.length !== 0) { $poGiftBadge.hide(); } if ($poPromoMessage.length !== 0 && $regularPromoMessage.length === 0) { $promoContainer.hide(); $poPromoMessage.hide(); } else { if ($poPromoMessage.length !== 0) { $poPromoMessage.hide(); } } } } if (_self.isStringEmpty(_self.promoMsg) || _self.data.bopisPromoAssetID !== _self.promoMsgAssetID) { _self.promoMsgAssetID = _self.data.bopisPromoAssetID; _self.getBopisPromoMessaging(_self.data.bopisPromoAssetID, function (data) { if (data.hasOwnProperty("isOnline") && data.isOnline && data.hasOwnProperty("assetContent") && !_self.isStringEmpty(data.assetContent)) { _self.promoMsg = data.assetContent; $("#" + _self.instance.tagId + " .promo-msg").html(_self.promoMsg); } }); } return str;}function Bopis_fixStoreData(data) { const _self = this; var i; if (data.stores) { for (i = 0; i < data.stores.length; i++) { data.stores[i].distance = data.stores[i].distance.replace(/[^.0-9]/g, ""); data.stores[i].name = data.stores[i].name.replace(/Belk /gi, ""); } }}function Bopis_getBopisPromoMessaging(bopisPromoAssetID, callback) { const _self = this; var CAN = bopisPromoAssetID !== "" ? bopisPromoAssetID : "bopis-promo-messaging"; var url = _self.baseAjaxUrl; url += "COContent-GetContentAsset?assetName="; url += CAN; $.ajax(url, {success: function (data, textStatus, jqXHR) { log("getBopisPromoMessaging ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isFunction(callback)) { try { callback(data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("getBopisPromoMessaging ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); }, complete: function (jqXHR, textStatus) { log("getBopisPromoMessaging ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_getShippingPromoMessage(pid, callback) { const _self = this; var url = _self.baseAjaxUrl; url += "Product-GetShippingPromoMsg?pid="; url += pid; $.ajax(url, {success: function (data, textStatus, jqXHR) { log("getShippingPromoMessage ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isUndefined(data)) { data = {}; } if (_self.isFunction(callback)) { try { callback(pid, data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("getShippingPromoMessage ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); if (_self.isFunction(callback)) { try { callback(pid, {}); } catch (e) { log("Exception:", e); } } }, complete: function (jqXHR, textStatus) { log("getShippingPromoMessage ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_getStoresByZip(zip, callback) { const _self = this; var url = _self.baseAjaxUrl; _self.error = false; if (_self.isStringEmpty(zip)) { return; } url += "Stores-GetBopisStoresByZip?zipCode=" + zip; callback = callback || function (zip, data) { log("No callback given for getStoresByZip call by zip:", zip, "returned data:", data); }; $.ajax(url, {success: function (data, textStatus, jqXHR) { log("getStoresByZip ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isObject(data) && data.hasOwnProperty("success") && data.success) { _self.fixStoreData(data); } if (!data.success) { _self.error = true; } if (_self.isFunction(callback)) { try { callback(zip, data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("getStoresByZip ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); }, complete: function (jqXHR, textStatus) { log("getStoresByZip ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_getSddStore(callback) { const _self = this; var url = _self.baseAjaxUrl, cachedData; log("_self.sddZipToStoreCache:", _self.sddZipToStoreCache); if (_self.sddZipToStoreCache.hasOwnProperty(_self.data.sddZip)) { cachedData = _self.sddZipToStoreCache[_self.data.sddZip]; if (!_self.isUndefined(cachedData) && !_self.isObjectEmpty(cachedData) && _self.isFunction(callback)) { try { callback(cachedData); } catch (e) { log("Exception:", e); } return; } } url += "COSameDayDelivery-GetDeliveryAssuranceStore?zipCode=" + _self.data.sddZip; $.ajax(url, {success: function (data, textStatus, jqXHR) { log("getSddStore ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isObject(data) && !_self.isObjectEmpty(data) && data.hasOwnProperty("zipCode") && _self.isString(data.zipCode) && !_self.isStringEmpty(data.zipCode)) { _self.sddZipToStoreCache[data.zipCode] = data; } else { data = {}; } if (_self.isFunction(callback)) { try { callback(data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("getSddStore ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); if (_self.isFunction(callback)) { try { callback({}); } catch (e) { log("Exception:", e); } } }, complete: function (jqXHR, textStatus) { log("getSddStore ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_setSessionStore(storeId, callback) { const _self = this; var url = _self.baseAjaxUrl; url += "StoreInventory-SetPreferredStore?storeId=" + storeId; $.ajax(url, {success: function (data, textStatus, jqXHR) { log("setSessionStore ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isFunction(callback)) { try { callback(data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("setSessionStore ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); }, complete: function (jqXHR, textStatus) { log("setSessionStore ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_getPreOrderFCInventory(pid, preOrderPromoDetails, callback) { log("getPreOrderFCInventory called with pid:", pid, "preOrderPromoDetails:", preOrderPromoDetails, "callback", callback); const _self = this; var url = _self.baseAjaxUrl + "COPreOrder-GetPreOrderFCInventory"; if (_self.isStringEmpty(preOrderPromoDetails)) { return; } callback = callback || function (preOrderPromoDetails, data) { log("No callback given for getPreOrderFCInventory call by preOrderPromoDetails:", preOrderPromoDetails, "returned data:", data); }; preOrderPromoDetails = JSON.parse(preOrderPromoDetails); preOrderPromoDetails.pid = pid; $.ajax({method: "POST", dataType: "json", contentType: "application/json", url: url, data: JSON.stringify(preOrderPromoDetails), success: function (data, textStatus, jqXHR) { log("getPreOrderFCInventory ajax success: data:", data, "textStatus:", textStatus, "jqXHR:", jqXHR); if (_self.isFunction(callback)) { try { callback(pid, preOrderPromoDetails, data); } catch (e) { log("Exception:", e); } } }, error: function (jqXHR, textStatus, errorThrown) { log("getPreOrderFCInventory ajax error: jqXHR:", jqXHR, "textStatus:", textStatus, "errorThrown:", errorThrown); }, complete: function (jqXHR, textStatus) { log("getPreOrderFCInventory ajax complete: jqXHR:", jqXHR, "textStatus:", textStatus); }});}function Bopis_availabilityMessage(quantity, forceInStock, isPunc, forPopper) { const _self = this; const p = ".", e = "!", n = ""; var M = _self.config.messaging, str = " quantity) { str += " less\">" + M.stock["less"]; if (5 > quantity) { str += " (" + M.stock.lowX.replace("X", quantity) + ")"; } } else { if (forceInStock || 5 < quantity) { str += " in\">" + M.stock["in"] + (!forPopper && isPunc ? p : ""); } else { if (0 === quantity) { str += " out\">" + M.stock.out; } else { if (5 === quantity) { str += " low\">" + M.stock.low; } else { if (5 > quantity) { str += " low\">" + M.stock.lowX.replace("X", quantity) + (isPunc ? e : ""); } } } } } str += ""; return str;}function Bopis_buildSelectionToggle(theClass, text) { const _self = this; var str = ""; str += ""; str += ""; str += "
"; return str;}function Bopis_buildStoreSelectionToggle(text) { const _self = this; var str = ""; str += ""; str += ""; str += "
"; return str;}function Bopis_searchStores(stores) { const _self = this; var i, store, ret = {}; _self.copyObject(ret, _self.default.config.init.searchResults); if (0 < stores.length) { for (i = 0; i < stores.length; i++) { store = stores[i]; if (0 < store.quantity) { ret.inStore = true; if (store.bopis) { ret.bopis = true; ret.store = store; break; } } } ret.isSearch = true; } return ret;}function Bopis_updateInStockOnly() { const _self = this; var $C = $("#" + _self.instance.tagId), $d = $C.find(".popper.bopis .stores li .filter-instockonly").closest("li"), $inp = $C.find(".popper.bopis .filters input[name=\"in-stock-only\"]"); if ($inp.length) { if ($inp.prop("checked")) { _self.inStockOnly = true; $d.hide(); } else { _self.inStockOnly = false; $d.show(); } _self.updatePopperScrollbar(); }}function Bopis_searchResponse(pid, zip, data) { const _self = this; var $C = $("#" + _self.instance.tagId); if (_self.isObject(data) && data.hasOwnProperty("success") && data.success) { _self.data.skuId = pid; _self.data.zip = zip; if (data.hasOwnProperty("stores") && _self.isArray(data.stores) && 0 < data.stores.length) { _self.data.store = data.stores[0]; _self.stores = data.stores; } else { _self.data.store = {}; _self.stores = []; } if (data.hasOwnProperty("readyHours") && _self.isNumber(data.readyHours)) { _self.readyHours = data.readyHours; } if (data.hasOwnProperty("pickupToday") && _self.isBoolean(data.pickupToday)) { _self.pickupToday = data.pickupToday; } if (data.hasOwnProperty("pickupDay") && _self.isString(data.pickupDay)) { _self.data.pickupDay = data.pickupDay; } _self.searchResults = _self.searchStores(_self.stores); if (_self.searchResults.bopis) { if (_self.feature.myStore) { $C.find(".my-store").replaceWith(buildMyStoreHtml(_self.stores[0], 0)); } $C.find(".popper.bopis .stores").empty(); $C.find(".popper.bopis .stores").append(_self.buildStoresHtml()); $C.find(".popper.bopis .zip-link").hide().html(_self.data.zip); $C.find(".popper.bopis .show-on-results").show(); $C.find(".popper.bopis .no-stores-msg").remove(); $C.find(".popper.bopis .zip-link").show(); $C.find(".popper.bopis .search-by-zip").hide(); _self.updateInStockOnly(); _self.updatePopperScrollbar(); _self.addStoreItemHandlers(); } else { $C.find(".popper.bopis .show-on-results").hide(); $C.find(".popper.bopis .search-by-zip").show(); $C.find(".popper.bopis .no-stores-msg").remove(); $C.find(".popper.bopis").append("
" + _self.config.messaging.notInStockX.replace("X", "" + zip + "") + " " + _self.config.messaging.tryArea + "
"); } } else { log("stopped here?"); $C.find(".popper.bopis .show-on-results").hide(); $C.find(".popper.bopis .search-by-zip").show(); $C.find(".popper.bopis .no-stores-msg").remove(); $C.find(".popper.bopis").append("
" + _self.config.messaging.notInStockX.replace("X", "" + zip + "") + " " + _self.config.messaging.tryArea + "
"); } if (window.progress) { window.progress.hide(); }}function Bopis_pickupTodayOrTomorrow() { const _self = this; var ret = " Today"; if (!_self.pickupToday) { if ("" === _self.data.pickupDay) { ret = " Tomorrow"; } else { ret = " " + _self.data.pickupDay; } } return ret;}function Bopis_buildPickupOption() { const _self = this; var str = "", name = "receive-option", labelText = "", isDisabled = true, skuSelected = false, hideRadio = false, M = _self.config.messaging, isChecked = false; skuSelected = !_self.isStringEmpty(_self.data.skuId); if (skuSelected && !_self.isArrayEmpty(_self.stores) && (!_self.data.bopisSku || _self.isObjectEmpty(_self.data.store) || !_self.data.store.bopis || 0 === _self.data.store.quantity)) { _self.searchResults = _self.searchStores(_self.stores); } str += "
"; isDisabled = _self.isPickupDisabled(); hideRadio = (!skuSelected || 0 === _self.data.skuStockLevel); if (hideRadio) { labelText += ""; if (skuSelected) { labelText += _self.config.messaging.skuOut; } else { labelText += _self.config.messaging.selectSize; } labelText += ""; } else { labelText = _self.buildProductPickupStatus(); } if ("bag" === _self.config.feature && !_self.isObjectEmpty(_self.data.store) && _self.data.bopisSelected) { isChecked = true; } else { if (!_self.data.skuShipEligible) { isChecked = true; } } str += _self.buildInputRC({isDisabled: isDisabled, isMultiSelect: false, id: name + "-pickup", value: "pickup", name: name, content: labelText, isChecked: isChecked, isMessage: hideRadio}); str += "
"; return str;}function Bopis_buildPreSaleOption() { const _self = this; var str = "", name = "receive-option", labelText = "", M = _self.config.messaging; if (!_self.data.hasPreOrderInventory) { return str; } str += "
"; labelText += "" + M.preSaleHeader + " - " + M.preSaleShipMessage + " " + _self.data.releaseDate + "
" + M.preSaleCouponExclusionMessage + ""; if ("bag" === _self.config.feature && _self.data.preOrderSelected) { _self.fromPreOrder = true; } str += _self.buildInputRC({isMultiSelect: false, id: name + "-presale", value: "presale", name: name, content: labelText, isChecked: "bag" === _self.config.feature && _self.data.preOrderSelected ? true : false}); str += ""; str += "
"; return str;}function Bopis_buildProductShipStatus(skuStockLevel, forceInStock, surchargeAmount) { const _self = this; var str = "", M = _self.config.messaging; function fill(msg) { var rE = /{{E}}/, rT = /{{T}}/; msg = msg.replace(rE, _self.data.sddEndTime.replace(" ", "")); msg = msg.replace(rT, _self.data.sddSameDay ? "today" : "tomorrow"); return msg; } str += ""; if (_self.data.skuShipEligible) { str += ("bag" === _self.config.feature && !isStringEmpty(_self.data.sddStoreId)) ? M.sdd.title : M.shipFree; if ("bag" === _self.config.feature && !isStringEmpty(_self.data.sddStoreId)) { str += ""; str += " - " + fill(M.sdd.delivers); str += ""; } else { if ("bag" === _self.config.feature && !_self.isStringEmpty(_self.data.estimatedShippingMessage)) { str += ""; str += " - " + _self.config.messaging.estimatedDelivery + _self.data.estimatedShippingMessage; str += ""; } else { str += ""; if (!_self.isStringEmpty(_self.shipPromoMsg)) { str += " - " + _self.shipPromoMsg; } str += ""; } } str += " "; function storeMsg(store) { var sto = {msg: M.atNearStore, name: M.selectStore}; if (!_self.isObjectEmpty(store)) { if (store.closed) { sto.msg = M.storeClosed; } else { sto.msg = M.atMyStore; } sto.name = store.name; } return sto; } function ofZip(msg) { var str = br + ssm + msg; if (!_self.isStringEmpty(_self.data.zip)) { str += " of " + _self.data.zip; } str += tc; return str; } function inStoreScenarios() { if (_self.searchResults.isSearch && _self.searchResults.inStore) { if (0 < _self.data.store.quantity) { msg = bh + M.notBopis + tc; if (_self.data.store.closed) { msg += br + ssm + M.storeClosed + tc; } else { msg += br + ssm + M.atMyStore + tc; } msg += _self.buildStoreSelectionToggle(_self.data.store.name); msg += br + _self.availabilityMessage(_self.data.store.quantity, false, true, false); } else { if (!_self.data.skuOnlineOnly) { msg = bh + M.noBopisNearby + tc; } else { msg = bh + M.notBopis + tc; } msg += br + ssm + M.atNearStore + tc; msg += " " + _self.buildStoreSelectionToggle(M.selectStore); } } else { if (_self.data.skuOnlineOnly) { msg = bh + M.notBopis + tc; msg += br + ssm + _self.config.messaging.skuOnlineOnly + tc; } else { if (_self.data.bopisSku) { msg = bh + M.noBopisNearby + tc; msg += ofZip(M.notNearby.replace(regD, _self.data.storeSearchDistance)); msg += br + _self.buildStoreSelectionToggle(M.selectZip); } else { msg = bh + M.notBopis + tc; if (_self.data.store.closed) { msg += br + ssm + M.storeClosed + tc; } else { msg += br + ssm + M.atNearStore + tc; msg += " " + _self.buildStoreSelectionToggle(M.selectStore); } } } } } if (_self.data.mirakl) { msg = bh + M.notBopis + tc; } else { if (_self.data.productOnlineOnly) { msg = bh + M.notBopis + tc; if ("pdp" === _self.config.feature) { msg += br + _self.config.messaging.productOnlineOnly; } } else { if (_self.data.skuOnlineOnly) { msg = bh + M.notBopis + tc; if ("pdp" === _self.config.feature) { msg += br + ssm + M.skuOnlineOnly + tc; } } else { if (!_self.data.productInStock) { log("(!_self.data.productInStock) Scenario Should NOT have occured"); } else { if (_self.data.bopisEnabled && _self.data.findInStoreEnabled) { if (_self.error) { if (_self.data.skuOnlineOnly) { msg = bh + M.notBopis + tc; if ("pdp" === _self.config.feature) { msg += br + ssm + _self.config.messaging.skuOnlineOnly + tc; } } else { if (_self.data.bopisSku) { msg = bh + M.noBopisNearby + tc; } else { msg = bh + M.notBopis + tc; } msg += ofZip(M.notNearby.replace(regD, _self.data.storeSearchDistance)); msg += br + _self.buildStoreSelectionToggle(M.selectZip); } } else { if (_self.data.bopisProduct) { if (!_self.isStringEmpty(_self.data.skuId)) { if (_self.data.bopisSku) { if (!_self.isStringEmpty(_self.data.zip)) { if (!_self.isObjectEmpty(_self.data.store)) { if (_self.data.store.bopis && 0 < _self.data.store.quantity) { msg = bh + M.bopis + _self.pickupTodayOrTomorrow() + tc; msg += br + _self.availabilityMessage(_self.data.store.quantity, false, false, false); msg += " at "; msg += _self.buildStoreSelectionToggle(_self.data.store.name); msg += br + pro; if (_self.isStringEmpty(_self.promoMsg)) { msg += M.readyTimeX.replace("X", _self.readyHours); } else { msg += _self.promoMsg; } msg += tc; } else { if (_self.searchResults.bopis) { msg = bh + M.bopis + _self.pickupTodayOrTomorrow() + tc; msg += br + M.nearby + " " + _self.buildStoreSelectionToggle(M.selectStore); msg += br + pro; if (_self.isStringEmpty(_self.promoMsg)) { msg += M.readyTimeX.replace("X", _self.readyHours); } else { msg += _self.promoMsg; } msg += tc; } else { if ("bag" === _self.config.feature) { msg = bh + M.notBopis + tc; } else { inStoreScenarios(); } } } } else { if (0 === _self.stores.length) { msg = bh + M.notBopis + tc; msg += ofZip(M.noStoresNearby.replace(regD, _self.data.storeSearchDistance)); msg += br + _self.buildStoreSelectionToggle(M.selectZip); } else { msg = bh + M.noBopisNearby + _self.pickupTodayOrTomorrow() + tc; msg += " " + _self.buildStoreSelectionToggle(M.selectStore); } } } else { msg = bh + M.bopis + _self.pickupTodayOrTomorrow() + tc; msg += " " + _self.buildStoreSelectionToggle(M.selectStore); } } else { if ("bag" === _self.config.feature) { msg = bh + M.notBopis + tc; } else { inStoreScenarios(); } } } else { log("(_self.isStringEmpty(data.prdoductId)) Scenario Should NOT have occured"); } } else { if (!_self.isStringEmpty(data.prdoductId)) { if (_self.data.bopisSku) { } else { } } else { msg = bh + M.notBopis + tc; msg += br + M.selectSize; } } } } else { if ("bag" === _self.config.feature) { msg = bh + M.notBopis + tc; } else { msg = bh + M.bopisDisabled + tc; if (_self.data.findInStoreEnabled) { sto = storeMsg(_self.data.store); msg += br + ssm + sto.msg + tc + " " + _self.buildStoreSelectionToggle(sto.name); } } } } } } } str += msg; str += " "; str += " "; str += " My store near " + _self.data.zip + " "; str += _self.buildStoreHtml(store, offset); str += " Always included in filter results "; str += " "; str += " ", he = " "; str += " "; str += " " + "" + message + " " + _self.buildToolTip(_self.data.sddToolTip) + (isTo ? " to " : " ") + toggle + " "; str += " "; str += " "; str += " "; if (!isSdd && !isConns) { str += " " + msg + " " + zip + " "; } str += " "; if (VC.showFilters && !VC.myStore) { str += ""; } str += " "; if (!isSdd && !isConns) { if (VC.myStore && 0 < _self.stores.length) { str += buildMyStoreHtml(_self.stores[0], 0); } if (!_self.searchResults.isSearch || _self.searchResults.bopis || _self.searchResults.inStore) { str += " "; } else { str += " "; zipStr = "" + zip + ""; if (0 < _self.stores.length) { noStoresMsg = _self.config.messaging.notInStockX.replace("X", zipStr); } else { noStoresMsg = _self.config.messaging.notInStockX.replace("X", zipStr); } str += " " + noStoresMsg + " " + _self.config.messaging.tryArea + " "; } if (VC.isMultiSelect) { str += " "; } } str += " " + _self.config.messaging.notInStockX.replace("X", "" + zip + "") + " " + _self.config.messaging.tryArea + " " + _self.config.messaging.notInStockX.replace("X", "" + _self.data.zip + "") + " " + _self.config.messaging.tryArea + " "; labelText = _self.buildConnsDeliveryStatus(); labelText += "
"; str += _self.availabilityMessage(skuStockLevel, forceInStock, true, false); if (_self.isNumber(surchargeAmount) && 0 !== surchargeAmount) { str += "$" + surchargeAmount + " " + M.surchargeAmountApplies + ""; } } else { str += _self.config.messaging.noShip; str += "
"; str += "" + _self.config.messaging.bopisOnly + ""; } str += ""; return str;}function Bopis_buildProductPickupStatus() { const _self = this; const regD = /{{D}}/; var str = "", msg = "", br = "
", bh = "", tc = "", ssm = "", pro = "", M = _self.config.messaging, sto = {}; str += "
" + store.distance + " mi"; if (store.bopis) { if (VC.showStock) { str += _self.availabilityMessage(store.quantity, false, true, true); } } else { str += "Temporarily Unavailable"; } str += ""; return str;}function Bopis_buildMyStoreHtml(store, offset) { const _self = this; var str = ""; str += ""; str += _self.buildStoresHtml(); str += "
"; return str;}function Bopis_buildConnsZipSelectionToggle(theClass, text) { const _self = this; var str = ""; str += ""; str += ""; str += "
"; return str;}function Bopis_addConnsZipSelectionHandler() { const _self = this, zipClass = "select-zip-conns", ENS = "click." + _self.component.class + "." + zipClass + ".popper"; var $in, len; var $C = $("#" + _self.instance.tagId); var $zObj = $C.find("." + zipClass); $zObj.off(ENS); $zObj.on(ENS, function (e) { $(".toggle-carrot.select-store").prop("checked", false); $(".toggle-carrot.select-store + .vlabel + .popper-location .popper").hide(); _self.isPopperOpen = false; if ($(e.currentTarget).prop("checked")) { _self.showPopper(zipClass); $in = $C.find(".popper .search-by-zip .zip-code.conns"); $in.focus(); len = $in.val().length; $in[0].setSelectionRange(len, len); } else { _self.hidePopper(); } e.stopPropagation(); });}function Bopis_buildConnsDeliveryStatus() { const _self = this, zipClass = "select-zip-conns", M = _self.config.messaging, toDeliver = M.connsToDeliver, inStock = _self.data.connsInvData.inStock && (_self.config.feature === "pdp" ? _self.data.connsInvData.hasOwnProperty("conns") && _self.data.connsInvData.conns.location != "" : true), isDeliveryItem = _self.data.connsSKUData.hasOwnProperty("delivery") && _self.data.connsSKUData.delivery, deliveryOptionTitle = isDeliveryItem ? M.connsTruckDelivery : M.ship, errorDeliveryElement = document.querySelector("#js-error-delivery"); var str = "", deliveryMessage = "", zipLabel = "Choose Your Area", availability = inStock ? "Available" : "Unable", isConnsZipAvailable = !_self.isStringEmpty(_self.data.connsZip); str += "
",MARKO='\x3c!-- dwMarker="content" dwContentID="',MARKC='" --\x3e';HIDED="hide-desktop",HIDEM="hide-mobile",SE="<\/script>",SIB='
FAQs
Are midi dresses flattering? ›
Midi dresses are perfect for evening attire. They provide a flattering silhouette while still allowing you to show off your figure - depending on the style you choose!
What is midi vs mini vs maxi dress? ›There are mini dresses, which tend to end above the knee, midi dresses, which end around mid-calf, and maxi dresses , which go all the way down to the floor.
What is longer than midi dress? ›Maxi dresses are dresses that extend past your ankle. It is often confused with floor length dresses.
What dress length is most flattering? ›The Basics
No matter your body type, the general idea is to have your dress end at a relatively small part of your leg. For example, at or just below the knee tends to be the most universally flattering skirt length, whereas anything hitting the widest part of your calves can create the illusion of a shorter leg.
The thing with the midi length is that it can come across as frumpy if you don't have the right silhouette. You want to have a cinched in waist to give the look some shape, otherwise just having a long dress or skirt end halfway down your leg does not make for the most flattering look.
What should a 60 year old woman wear? ›- Big patterns, bold colors. ...
- Breathable Fabrics Reign Supreme. ...
- Embrace the unexpected. ...
- Balance timeless with trends. ...
- Mix textures and metals. ...
- Eye-catching accessories. ...
- Denim that fits like a dream. ...
- Updated basics.
A midi dress is a great length for the rectangle shape as it will hit you at the slimmest part of your legs. If you want to create some curves, you can do so with ruffles and a belt.
Do midi dresses make you look taller or shorter? ›The reason the midi length will make you appear taller is that it creates an elongating effect since it's hitting below the knee. Bonus: sport a solid black midi dress because this is one of the best ways to not only appear taller but appear slimmer too!
What is the most popular dress length? ›Maxi dresses usually hit right around the ankle. They might just be the most popular type of dress in our dress length guide!
Where should a midi dress sit? ›The term “midi” applies to any length from two inches below the knees to just above the ankles. The easiest lengths for most women are just above the swell of the calf (a couple of inches below the knees) or just below the calves (so that a few inches of ankle show).
Can short girls pull off midi dresses? ›
The biggest tip for styling a midi dress if you're petite is that there are no rules. I'm focusing more today on footwear to wear with these dresses. No, you don't have to wear sky-high heels with a midi to appear taller. You can wear whatever shoes you want!
How long should my dress be for my height? ›First, determine the length of your body from shoulder tip to ground (in). Next, determine the heel height (in). Next, gather the formula from above = DL = (SGL + HH) / 1.618. Finally, calculate the Dress Length.
Should short girls wear midi? ›While midi skirts often go to mid-calf, this can be too overwhelming on a petite frame. Instead, pick a skirt that only covers your knees. This will show off just enough leg to balance out the extra length of the skirt.
What is the best length of dress for over 50? ›Generally, the best lengths for women over 50 are knee-length, then midi, then maxi. To dress chic and classic as an older woman, try to steer clear of mini dresses. Take into account your personal style as well.
Can a 60 year old wear a short dress? ›Wear whatever makes you feel comfortable and stylish. If one has great legs and a fit body, there should be no problem wearing minidresses and shorts regardless of any age. I think women know instinctively what feels right and comfortable as they mature, without having to consider norms of society.
How do you look older by the way you dress? ›- Blouses and dress shirts often look more adult than T-shirts or other types of tops. ...
- Avoid novelty clothes. ...
- Avoid embellishments. ...
- Pick subdued colors, rather than flashy colors.
- Bold, Bright Colors. A great way to avoid feeling bored by your clothes as you get older is to keep things fun! ...
- Fun, Funky Patterns. ...
- Experiment With Silhouettes. ...
- Spice Any Outfit Up With Accessories and Handbags. ...
- Take It to the Next Level With Shoes. ...
- Related Articles.
However, there are some fashion choices that can make a woman look frumpy and unattractive. The most common factors that contribute to a frumpy look include clothing that is too tight or too loose, unflattering cuts and shapes, outdated styles, fabrics that don't flatter the body shape, and ill-fitting shoes.
What should a 70 year old woman wear? ›Some women as they age, especially those with light, peachy skin tone, can still wear many multi-colored patterns. But for many women over 70, especially those with a more subtle or bold hue, a monochromatic or tonal outfit (two shades of the same color) is the most elegant, sophisticated, and trendy look.
Can a 70 year old woman wear jeans? ›En español | EAre you ever too old to wear jeans? That question has been popping up on social media lately, so let's shout out a firm "No!" Choose jeans with the right fit, fabric, wash and proportions for your body, and then wear them in a contemporary way that suits your style and preferences.
What Colours make you look slimmer? ›
Black never fails to make you look slim and elegant. Darker shades of colors like blue, purple and brown can also help to hide flaws and create a slimming illusion. On the other hand, lighter colors, like white and khaki, can add pounds and give the illusion of a larger frame.
How can I look 20 lbs lighter? ›- Pay attention to vertical lines. These lines in seams, ...
- Steer clear of bulky fabrics like boucle and heavy wools. ...
- Keep embellishments to a minimum. ...
- To instantly appear more slender, try wearing the same. ...
- Don't wear clothes that are too large or too small.
As a general rule, a midi-length dress works best with a coat of the same hem length or longer, or with a short jacket – bikers are great – that emphasises the waist line.
Can you wear leggings with a midi dress? ›People love how black tights give the ability to wear all of the favourite midi dresses. So whether this is winter or summer, you can wear your LBD with perfect tights. From giving a classy look to making you feel comfortable, tights are the best things a girl can have.
What is the best style of dress to make you look slimmer? ›Any dress that does not have a belt — a shift, fit and flare, empire, raised waist, trapeze — is going to be more body-friendly to you now than separate tops and bottoms since there's no break at the waist. One-piece dresses glide over curves and balance body proportions, so you look more “even,” too.