').parent();\n _.$slideTrack.css('opacity', 0);\n\n if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n _.options.slidesToScroll = 1;\n }\n\n $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n _.setupInfinite();\n\n _.buildArrows();\n\n _.buildDots();\n\n _.updateDots();\n\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n if (_.options.draggable === true) {\n _.$list.addClass('draggable');\n }\n\n };\n\n Slick.prototype.buildRows = function() {\n\n var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n newSlides = document.createDocumentFragment();\n originalSlides = _.$slider.children();\n\n if(_.options.rows > 0) {\n\n slidesPerSection = _.options.slidesPerRow * _.options.rows;\n numOfSlides = Math.ceil(\n originalSlides.length / slidesPerSection\n );\n\n for(a = 0; a < numOfSlides; a++){\n var slide = document.createElement('div');\n for(b = 0; b < _.options.rows; b++) {\n var row = document.createElement('div');\n for(c = 0; c < _.options.slidesPerRow; c++) {\n var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n if (originalSlides.get(target)) {\n row.appendChild(originalSlides.get(target));\n }\n }\n slide.appendChild(row);\n }\n newSlides.appendChild(slide);\n }\n\n _.$slider.empty().append(newSlides);\n _.$slider.children().children().children()\n .css({\n 'width':(100 / _.options.slidesPerRow) + '%',\n 'display': 'inline-block'\n });\n\n }\n\n };\n\n Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n var _ = this,\n breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n var sliderWidth = _.$slider.width();\n var windowWidth = window.innerWidth || $(window).width();\n\n if (_.respondTo === 'window') {\n respondToWidth = windowWidth;\n } else if (_.respondTo === 'slider') {\n respondToWidth = sliderWidth;\n } else if (_.respondTo === 'min') {\n respondToWidth = Math.min(windowWidth, sliderWidth);\n }\n\n if ( _.options.responsive &&\n _.options.responsive.length &&\n _.options.responsive !== null) {\n\n targetBreakpoint = null;\n\n for (breakpoint in _.breakpoints) {\n if (_.breakpoints.hasOwnProperty(breakpoint)) {\n if (_.originalSettings.mobileFirst === false) {\n if (respondToWidth < _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n } else {\n if (respondToWidth > _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n }\n }\n }\n\n if (targetBreakpoint !== null) {\n if (_.activeBreakpoint !== null) {\n if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n _.activeBreakpoint =\n targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n _.activeBreakpoint = targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n if (_.activeBreakpoint !== null) {\n _.activeBreakpoint = null;\n _.options = _.originalSettings;\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n triggerBreakpoint = targetBreakpoint;\n }\n }\n\n // only trigger breakpoints during an actual break. not on initialize.\n if( !initial && triggerBreakpoint !== false ) {\n _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n }\n }\n\n };\n\n Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n var _ = this,\n $target = $(event.currentTarget),\n indexOffset, slideOffset, unevenOffset;\n\n // If target is a link, prevent default action.\n if($target.is('a')) {\n event.preventDefault();\n }\n\n // If target is not the
element (ie: a child), find the .\n if(!$target.is('li')) {\n $target = $target.closest('li');\n }\n\n unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n switch (event.data.message) {\n\n case 'previous':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n }\n break;\n\n case 'next':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n }\n break;\n\n case 'index':\n var index = event.data.index === 0 ? 0 :\n event.data.index || $target.index() * _.options.slidesToScroll;\n\n _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n $target.children().trigger('focus');\n break;\n\n default:\n return;\n }\n\n };\n\n Slick.prototype.checkNavigable = function(index) {\n\n var _ = this,\n navigables, prevNavigable;\n\n navigables = _.getNavigableIndexes();\n prevNavigable = 0;\n if (index > navigables[navigables.length - 1]) {\n index = navigables[navigables.length - 1];\n } else {\n for (var n in navigables) {\n if (index < navigables[n]) {\n index = prevNavigable;\n break;\n }\n prevNavigable = navigables[n];\n }\n }\n\n return index;\n };\n\n Slick.prototype.cleanUpEvents = function() {\n\n var _ = this;\n\n if (_.options.dots && _.$dots !== null) {\n\n $('li', _.$dots)\n .off('click.slick', _.changeSlide)\n .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n if (_.options.accessibility === true) {\n _.$dots.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$slider.off('focus.slick blur.slick');\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n _.$list.off('click.slick', _.clickHandler);\n\n $(document).off(_.visibilityChange, _.visibility);\n\n _.cleanUpSlideEvents();\n\n if (_.options.accessibility === true) {\n _.$list.off('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n }\n\n $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n };\n\n Slick.prototype.cleanUpSlideEvents = function() {\n\n var _ = this;\n\n _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n };\n\n Slick.prototype.cleanUpRows = function() {\n\n var _ = this, originalSlides;\n\n if(_.options.rows > 0) {\n originalSlides = _.$slides.children().children();\n originalSlides.removeAttr('style');\n _.$slider.empty().append(originalSlides);\n }\n\n };\n\n Slick.prototype.clickHandler = function(event) {\n\n var _ = this;\n\n if (_.shouldClick === false) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n }\n\n };\n\n Slick.prototype.destroy = function(refresh) {\n\n var _ = this;\n\n _.autoPlayClear();\n\n _.touchObject = {};\n\n _.cleanUpEvents();\n\n $('.slick-cloned', _.$slider).detach();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if ( _.$prevArrow && _.$prevArrow.length ) {\n\n _.$prevArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.prevArrow )) {\n _.$prevArrow.remove();\n }\n }\n\n if ( _.$nextArrow && _.$nextArrow.length ) {\n\n _.$nextArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.nextArrow )) {\n _.$nextArrow.remove();\n }\n }\n\n\n if (_.$slides) {\n\n _.$slides\n .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n .removeAttr('aria-hidden')\n .removeAttr('data-slick-index')\n .each(function(){\n $(this).attr('style', $(this).data('originalStyling'));\n });\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.detach();\n\n _.$list.detach();\n\n _.$slider.append(_.$slides);\n }\n\n _.cleanUpRows();\n\n _.$slider.removeClass('slick-slider');\n _.$slider.removeClass('slick-initialized');\n _.$slider.removeClass('slick-dotted');\n\n _.unslicked = true;\n\n if(!refresh) {\n _.$slider.trigger('destroy', [_]);\n }\n\n };\n\n Slick.prototype.disableTransition = function(slide) {\n\n var _ = this,\n transition = {};\n\n transition[_.transitionType] = '';\n\n if (_.options.fade === false) {\n _.$slideTrack.css(transition);\n } else {\n _.$slides.eq(slide).css(transition);\n }\n\n };\n\n Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).css({\n zIndex: _.options.zIndex\n });\n\n _.$slides.eq(slideIndex).animate({\n opacity: 1\n }, _.options.speed, _.options.easing, callback);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 1,\n zIndex: _.options.zIndex\n });\n\n if (callback) {\n setTimeout(function() {\n\n _.disableTransition(slideIndex);\n\n callback.call();\n }, _.options.speed);\n }\n\n }\n\n };\n\n Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).animate({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n }, _.options.speed, _.options.easing);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n });\n\n }\n\n };\n\n Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n var _ = this;\n\n if (filter !== null) {\n\n _.$slidesCache = _.$slides;\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.focusHandler = function() {\n\n var _ = this;\n\n _.$slider\n .off('focus.slick blur.slick')\n .on('focus.slick blur.slick', '*', function(event) {\n\n event.stopImmediatePropagation();\n var $sf = $(this);\n\n setTimeout(function() {\n\n if( _.options.pauseOnFocus ) {\n _.focussed = $sf.is(':focus');\n _.autoPlay();\n }\n\n }, 0);\n\n });\n };\n\n Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n var _ = this;\n return _.currentSlide;\n\n };\n\n Slick.prototype.getDotCount = function() {\n\n var _ = this;\n\n var breakPoint = 0;\n var counter = 0;\n var pagerQty = 0;\n\n if (_.options.infinite === true) {\n if (_.slideCount <= _.options.slidesToShow) {\n ++pagerQty;\n } else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n } else if (_.options.centerMode === true) {\n pagerQty = _.slideCount;\n } else if(!_.options.asNavFor) {\n pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n }else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n\n return pagerQty - 1;\n\n };\n\n Slick.prototype.getLeft = function(slideIndex) {\n\n var _ = this,\n targetLeft,\n verticalHeight,\n verticalOffset = 0,\n targetSlide,\n coef;\n\n _.slideOffset = 0;\n verticalHeight = _.$slides.first().outerHeight(true);\n\n if (_.options.infinite === true) {\n if (_.slideCount > _.options.slidesToShow) {\n _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n coef = -1\n\n if (_.options.vertical === true && _.options.centerMode === true) {\n if (_.options.slidesToShow === 2) {\n coef = -1.5;\n } else if (_.options.slidesToShow === 1) {\n coef = -2\n }\n }\n verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n }\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n if (slideIndex > _.slideCount) {\n _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n } else {\n _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n }\n }\n }\n } else {\n if (slideIndex + _.options.slidesToShow > _.slideCount) {\n _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n }\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.slideOffset = 0;\n verticalOffset = 0;\n }\n\n if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n } else if (_.options.centerMode === true && _.options.infinite === true) {\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n } else if (_.options.centerMode === true) {\n _.slideOffset = 0;\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n }\n\n if (_.options.vertical === false) {\n targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n } else {\n targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n }\n\n if (_.options.variableWidth === true) {\n\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n if (_.options.centerMode === true) {\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n }\n }\n\n return targetLeft;\n\n };\n\n Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n var _ = this;\n\n return _.options[option];\n\n };\n\n Slick.prototype.getNavigableIndexes = function() {\n\n var _ = this,\n breakPoint = 0,\n counter = 0,\n indexes = [],\n max;\n\n if (_.options.infinite === false) {\n max = _.slideCount;\n } else {\n breakPoint = _.options.slidesToScroll * -1;\n counter = _.options.slidesToScroll * -1;\n max = _.slideCount * 2;\n }\n\n while (breakPoint < max) {\n indexes.push(breakPoint);\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n\n return indexes;\n\n };\n\n Slick.prototype.getSlick = function() {\n\n return this;\n\n };\n\n Slick.prototype.getSlideCount = function() {\n\n var _ = this,\n slidesTraversed, swipedSlide, centerOffset;\n\n centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n if (_.options.swipeToSlide === true) {\n _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n swipedSlide = slide;\n return false;\n }\n });\n\n slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n return slidesTraversed;\n\n } else {\n return _.options.slidesToScroll;\n }\n\n };\n\n Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'index',\n index: parseInt(slide)\n }\n }, dontAnimate);\n\n };\n\n Slick.prototype.init = function(creation) {\n\n var _ = this;\n\n if (!$(_.$slider).hasClass('slick-initialized')) {\n\n $(_.$slider).addClass('slick-initialized');\n\n _.buildRows();\n _.buildOut();\n _.setProps();\n _.startLoad();\n _.loadSlider();\n _.initializeEvents();\n _.updateArrows();\n _.updateDots();\n _.checkResponsive(true);\n _.focusHandler();\n\n }\n\n if (creation) {\n _.$slider.trigger('init', [_]);\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n }\n\n if ( _.options.autoplay ) {\n\n _.paused = false;\n _.autoPlay();\n\n }\n\n };\n\n Slick.prototype.initADA = function() {\n var _ = this,\n numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n return (val >= 0) && (val < _.slideCount);\n });\n\n _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n }).find('a, input, button, select').attr({\n 'tabindex': '-1'\n });\n\n if (_.$dots !== null) {\n _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n var slideControlIndex = tabControlIndexes.indexOf(i);\n\n $(this).attr({\n 'role': 'tabpanel',\n 'id': 'slick-slide' + _.instanceUid + i,\n 'tabindex': -1\n });\n\n if (slideControlIndex !== -1) {\n var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n if ($('#' + ariaButtonControl).length) {\n $(this).attr({\n 'aria-describedby': ariaButtonControl\n });\n }\n }\n });\n\n _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n var mappedSlideIndex = tabControlIndexes[i];\n\n $(this).attr({\n 'role': 'presentation'\n });\n\n $(this).find('button').first().attr({\n 'role': 'tab',\n 'id': 'slick-slide-control' + _.instanceUid + i,\n 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n 'aria-label': (i + 1) + ' of ' + numDotGroups,\n 'aria-selected': null,\n 'tabindex': '-1'\n });\n\n }).eq(_.currentSlide).find('button').attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n }).end();\n }\n\n for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n if (_.options.focusOnChange) {\n _.$slides.eq(i).attr({'tabindex': '0'});\n } else {\n _.$slides.eq(i).removeAttr('tabindex');\n }\n }\n\n _.activateADA();\n\n };\n\n Slick.prototype.initArrowEvents = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'previous'\n }, _.changeSlide);\n _.$nextArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'next'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow.on('keydown.slick', _.keyHandler);\n _.$nextArrow.on('keydown.slick', _.keyHandler);\n }\n }\n\n };\n\n Slick.prototype.initDotEvents = function() {\n\n var _ = this;\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n $('li', _.$dots).on('click.slick', {\n message: 'index'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$dots.on('keydown.slick', _.keyHandler);\n }\n }\n\n if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n $('li', _.$dots)\n .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initSlideEvents = function() {\n\n var _ = this;\n\n if ( _.options.pauseOnHover ) {\n\n _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initializeEvents = function() {\n\n var _ = this;\n\n _.initArrowEvents();\n\n _.initDotEvents();\n _.initSlideEvents();\n\n _.$list.on('touchstart.slick mousedown.slick', {\n action: 'start'\n }, _.swipeHandler);\n _.$list.on('touchmove.slick mousemove.slick', {\n action: 'move'\n }, _.swipeHandler);\n _.$list.on('touchend.slick mouseup.slick', {\n action: 'end'\n }, _.swipeHandler);\n _.$list.on('touchcancel.slick mouseleave.slick', {\n action: 'end'\n }, _.swipeHandler);\n\n _.$list.on('click.slick', _.clickHandler);\n\n $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n if (_.options.accessibility === true) {\n _.$list.on('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n $(_.setPosition);\n\n };\n\n Slick.prototype.initUI = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.show();\n _.$nextArrow.show();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.show();\n\n }\n\n };\n\n Slick.prototype.keyHandler = function(event) {\n\n var _ = this;\n //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n if (event.keyCode === 37 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'next' : 'previous'\n }\n });\n } else if (event.keyCode === 39 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'previous' : 'next'\n }\n });\n }\n }\n\n };\n\n Slick.prototype.lazyLoad = function() {\n\n var _ = this,\n loadRange, cloneRange, rangeStart, rangeEnd;\n\n function loadImages(imagesScope) {\n\n $('img[data-lazy]', imagesScope).each(function() {\n\n var image = $(this),\n imageSource = $(this).attr('data-lazy'),\n imageSrcSet = $(this).attr('data-srcset'),\n imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n image\n .animate({ opacity: 0 }, 100, function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr('src', imageSource)\n .animate({ opacity: 1 }, 200, function() {\n image\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n });\n _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n });\n\n };\n\n imageToLoad.onerror = function() {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n };\n\n imageToLoad.src = imageSource;\n\n });\n\n }\n\n if (_.options.centerMode === true) {\n if (_.options.infinite === true) {\n rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n rangeEnd = rangeStart + _.options.slidesToShow + 2;\n } else {\n rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n }\n } else {\n rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n if (_.options.fade === true) {\n if (rangeStart > 0) rangeStart--;\n if (rangeEnd <= _.slideCount) rangeEnd++;\n }\n }\n\n loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n if (_.options.lazyLoad === 'anticipated') {\n var prevSlide = rangeStart - 1,\n nextSlide = rangeEnd,\n $slides = _.$slider.find('.slick-slide');\n\n for (var i = 0; i < _.options.slidesToScroll; i++) {\n if (prevSlide < 0) prevSlide = _.slideCount - 1;\n loadRange = loadRange.add($slides.eq(prevSlide));\n loadRange = loadRange.add($slides.eq(nextSlide));\n prevSlide--;\n nextSlide++;\n }\n }\n\n loadImages(loadRange);\n\n if (_.slideCount <= _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-slide');\n loadImages(cloneRange);\n } else\n if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n loadImages(cloneRange);\n } else if (_.currentSlide === 0) {\n cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n loadImages(cloneRange);\n }\n\n };\n\n Slick.prototype.loadSlider = function() {\n\n var _ = this;\n\n _.setPosition();\n\n _.$slideTrack.css({\n opacity: 1\n });\n\n _.$slider.removeClass('slick-loading');\n\n _.initUI();\n\n if (_.options.lazyLoad === 'progressive') {\n _.progressiveLazyLoad();\n }\n\n };\n\n Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'next'\n }\n });\n\n };\n\n Slick.prototype.orientationChange = function() {\n\n var _ = this;\n\n _.checkResponsive();\n _.setPosition();\n\n };\n\n Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n var _ = this;\n\n _.autoPlayClear();\n _.paused = true;\n\n };\n\n Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n var _ = this;\n\n _.autoPlay();\n _.options.autoplay = true;\n _.paused = false;\n _.focussed = false;\n _.interrupted = false;\n\n };\n\n Slick.prototype.postSlide = function(index) {\n\n var _ = this;\n\n if( !_.unslicked ) {\n\n _.$slider.trigger('afterChange', [_, index]);\n\n _.animating = false;\n\n if (_.slideCount > _.options.slidesToShow) {\n _.setPosition();\n }\n\n _.swipeLeft = null;\n\n if ( _.options.autoplay ) {\n _.autoPlay();\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n\n if (_.options.focusOnChange) {\n var $currentSlide = $(_.$slides.get(_.currentSlide));\n $currentSlide.attr('tabindex', 0).focus();\n }\n }\n\n }\n\n };\n\n Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'previous'\n }\n });\n\n };\n\n Slick.prototype.preventDefault = function(event) {\n\n event.preventDefault();\n\n };\n\n Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n tryCount = tryCount || 1;\n\n var _ = this,\n $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n image,\n imageSource,\n imageSrcSet,\n imageSizes,\n imageToLoad;\n\n if ( $imgsToLoad.length ) {\n\n image = $imgsToLoad.first();\n imageSource = image.attr('data-lazy');\n imageSrcSet = image.attr('data-srcset');\n imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr( 'src', imageSource )\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n\n if ( _.options.adaptiveHeight === true ) {\n _.setPosition();\n }\n\n _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n _.progressiveLazyLoad();\n\n };\n\n imageToLoad.onerror = function() {\n\n if ( tryCount < 3 ) {\n\n /**\n * try to load the image 3 times,\n * leave a slight delay so we don't get\n * servers blocking the request.\n */\n setTimeout( function() {\n _.progressiveLazyLoad( tryCount + 1 );\n }, 500 );\n\n } else {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n _.progressiveLazyLoad();\n\n }\n\n };\n\n imageToLoad.src = imageSource;\n\n } else {\n\n _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n }\n\n };\n\n Slick.prototype.refresh = function( initializing ) {\n\n var _ = this, currentSlide, lastVisibleIndex;\n\n lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n // in non-infinite sliders, we don't want to go past the\n // last visible index.\n if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n _.currentSlide = lastVisibleIndex;\n }\n\n // if less slides than to show, go to start.\n if ( _.slideCount <= _.options.slidesToShow ) {\n _.currentSlide = 0;\n\n }\n\n currentSlide = _.currentSlide;\n\n _.destroy(true);\n\n $.extend(_, _.initials, { currentSlide: currentSlide });\n\n _.init();\n\n if( !initializing ) {\n\n _.changeSlide({\n data: {\n message: 'index',\n index: currentSlide\n }\n }, false);\n\n }\n\n };\n\n Slick.prototype.registerBreakpoints = function() {\n\n var _ = this, breakpoint, currentBreakpoint, l,\n responsiveSettings = _.options.responsive || null;\n\n if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n _.respondTo = _.options.respondTo || 'window';\n\n for ( breakpoint in responsiveSettings ) {\n\n l = _.breakpoints.length-1;\n\n if (responsiveSettings.hasOwnProperty(breakpoint)) {\n currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n // loop through the breakpoints and cut out any existing\n // ones with the same breakpoint number, we don't want dupes.\n while( l >= 0 ) {\n if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n _.breakpoints.splice(l,1);\n }\n l--;\n }\n\n _.breakpoints.push(currentBreakpoint);\n _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n }\n\n }\n\n _.breakpoints.sort(function(a, b) {\n return ( _.options.mobileFirst ) ? a-b : b-a;\n });\n\n }\n\n };\n\n Slick.prototype.reinit = function() {\n\n var _ = this;\n\n _.$slides =\n _.$slideTrack\n .children(_.options.slide)\n .addClass('slick-slide');\n\n _.slideCount = _.$slides.length;\n\n if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.currentSlide = 0;\n }\n\n _.registerBreakpoints();\n\n _.setProps();\n _.setupInfinite();\n _.buildArrows();\n _.updateArrows();\n _.initArrowEvents();\n _.buildDots();\n _.updateDots();\n _.initDotEvents();\n _.cleanUpSlideEvents();\n _.initSlideEvents();\n\n _.checkResponsive(false, true);\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n _.setPosition();\n _.focusHandler();\n\n _.paused = !_.options.autoplay;\n _.autoPlay();\n\n _.$slider.trigger('reInit', [_]);\n\n };\n\n Slick.prototype.resize = function() {\n\n var _ = this;\n\n if ($(window).width() !== _.windowWidth) {\n clearTimeout(_.windowDelay);\n _.windowDelay = window.setTimeout(function() {\n _.windowWidth = $(window).width();\n _.checkResponsive();\n if( !_.unslicked ) { _.setPosition(); }\n }, 50);\n }\n };\n\n Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n var _ = this;\n\n if (typeof(index) === 'boolean') {\n removeBefore = index;\n index = removeBefore === true ? 0 : _.slideCount - 1;\n } else {\n index = removeBefore === true ? --index : index;\n }\n\n if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n return false;\n }\n\n _.unload();\n\n if (removeAll === true) {\n _.$slideTrack.children().remove();\n } else {\n _.$slideTrack.children(this.options.slide).eq(index).remove();\n }\n\n _.$slides = _.$slideTrack.children(this.options.slide);\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.append(_.$slides);\n\n _.$slidesCache = _.$slides;\n\n _.reinit();\n\n };\n\n Slick.prototype.setCSS = function(position) {\n\n var _ = this,\n positionProps = {},\n x, y;\n\n if (_.options.rtl === true) {\n position = -position;\n }\n x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n positionProps[_.positionProp] = position;\n\n if (_.transformsEnabled === false) {\n _.$slideTrack.css(positionProps);\n } else {\n positionProps = {};\n if (_.cssTransitions === false) {\n positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n _.$slideTrack.css(positionProps);\n } else {\n positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n _.$slideTrack.css(positionProps);\n }\n }\n\n };\n\n Slick.prototype.setDimensions = function() {\n\n var _ = this;\n\n if (_.options.vertical === false) {\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: ('0px ' + _.options.centerPadding)\n });\n }\n } else {\n _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: (_.options.centerPadding + ' 0px')\n });\n }\n }\n\n _.listWidth = _.$list.width();\n _.listHeight = _.$list.height();\n\n\n if (_.options.vertical === false && _.options.variableWidth === false) {\n _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n } else if (_.options.variableWidth === true) {\n _.$slideTrack.width(5000 * _.slideCount);\n } else {\n _.slideWidth = Math.ceil(_.listWidth);\n _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n }\n\n var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n };\n\n Slick.prototype.setFade = function() {\n\n var _ = this,\n targetLeft;\n\n _.$slides.each(function(index, element) {\n targetLeft = (_.slideWidth * index) * -1;\n if (_.options.rtl === true) {\n $(element).css({\n position: 'relative',\n right: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n } else {\n $(element).css({\n position: 'relative',\n left: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n }\n });\n\n _.$slides.eq(_.currentSlide).css({\n zIndex: _.options.zIndex - 1,\n opacity: 1\n });\n\n };\n\n Slick.prototype.setHeight = function() {\n\n var _ = this;\n\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n _.$list.css('height', targetHeight);\n }\n\n };\n\n Slick.prototype.setOption =\n Slick.prototype.slickSetOption = function() {\n\n /**\n * accepts arguments in format of:\n *\n * - for changing a single option's value:\n * .slick(\"setOption\", option, value, refresh )\n *\n * - for changing a set of responsive options:\n * .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n *\n * - for updating multiple values at once (not responsive)\n * .slick(\"setOption\", { 'option': value, ... }, refresh )\n */\n\n var _ = this, l, item, option, value, refresh = false, type;\n\n if( $.type( arguments[0] ) === 'object' ) {\n\n option = arguments[0];\n refresh = arguments[1];\n type = 'multiple';\n\n } else if ( $.type( arguments[0] ) === 'string' ) {\n\n option = arguments[0];\n value = arguments[1];\n refresh = arguments[2];\n\n if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n type = 'responsive';\n\n } else if ( typeof arguments[1] !== 'undefined' ) {\n\n type = 'single';\n\n }\n\n }\n\n if ( type === 'single' ) {\n\n _.options[option] = value;\n\n\n } else if ( type === 'multiple' ) {\n\n $.each( option , function( opt, val ) {\n\n _.options[opt] = val;\n\n });\n\n\n } else if ( type === 'responsive' ) {\n\n for ( item in value ) {\n\n if( $.type( _.options.responsive ) !== 'array' ) {\n\n _.options.responsive = [ value[item] ];\n\n } else {\n\n l = _.options.responsive.length-1;\n\n // loop through the responsive object and splice out duplicates.\n while( l >= 0 ) {\n\n if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n _.options.responsive.splice(l,1);\n\n }\n\n l--;\n\n }\n\n _.options.responsive.push( value[item] );\n\n }\n\n }\n\n }\n\n if ( refresh ) {\n\n _.unload();\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.setPosition = function() {\n\n var _ = this;\n\n _.setDimensions();\n\n _.setHeight();\n\n if (_.options.fade === false) {\n _.setCSS(_.getLeft(_.currentSlide));\n } else {\n _.setFade();\n }\n\n _.$slider.trigger('setPosition', [_]);\n\n };\n\n Slick.prototype.setProps = function() {\n\n var _ = this,\n bodyStyle = document.body.style;\n\n _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n if (_.positionProp === 'top') {\n _.$slider.addClass('slick-vertical');\n } else {\n _.$slider.removeClass('slick-vertical');\n }\n\n if (bodyStyle.WebkitTransition !== undefined ||\n bodyStyle.MozTransition !== undefined ||\n bodyStyle.msTransition !== undefined) {\n if (_.options.useCSS === true) {\n _.cssTransitions = true;\n }\n }\n\n if ( _.options.fade ) {\n if ( typeof _.options.zIndex === 'number' ) {\n if( _.options.zIndex < 3 ) {\n _.options.zIndex = 3;\n }\n } else {\n _.options.zIndex = _.defaults.zIndex;\n }\n }\n\n if (bodyStyle.OTransform !== undefined) {\n _.animType = 'OTransform';\n _.transformType = '-o-transform';\n _.transitionType = 'OTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.MozTransform !== undefined) {\n _.animType = 'MozTransform';\n _.transformType = '-moz-transform';\n _.transitionType = 'MozTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.webkitTransform !== undefined) {\n _.animType = 'webkitTransform';\n _.transformType = '-webkit-transform';\n _.transitionType = 'webkitTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.msTransform !== undefined) {\n _.animType = 'msTransform';\n _.transformType = '-ms-transform';\n _.transitionType = 'msTransition';\n if (bodyStyle.msTransform === undefined) _.animType = false;\n }\n if (bodyStyle.transform !== undefined && _.animType !== false) {\n _.animType = 'transform';\n _.transformType = 'transform';\n _.transitionType = 'transition';\n }\n _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n };\n\n\n Slick.prototype.setSlideClasses = function(index) {\n\n var _ = this,\n centerOffset, allSlides, indexOffset, remainder;\n\n allSlides = _.$slider\n .find('.slick-slide')\n .removeClass('slick-active slick-center slick-current')\n .attr('aria-hidden', 'true');\n\n _.$slides\n .eq(index)\n .addClass('slick-current');\n\n if (_.options.centerMode === true) {\n\n var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if (_.options.infinite === true) {\n\n if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n _.$slides\n .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n indexOffset = _.options.slidesToShow + index;\n allSlides\n .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n if (index === 0) {\n\n allSlides\n .eq(allSlides.length - 1 - _.options.slidesToShow)\n .addClass('slick-center');\n\n } else if (index === _.slideCount - 1) {\n\n allSlides\n .eq(_.options.slidesToShow)\n .addClass('slick-center');\n\n }\n\n }\n\n _.$slides\n .eq(index)\n .addClass('slick-center');\n\n } else {\n\n if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n _.$slides\n .slice(index, index + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else if (allSlides.length <= _.options.slidesToShow) {\n\n allSlides\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n remainder = _.slideCount % _.options.slidesToShow;\n indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n allSlides\n .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n allSlides\n .slice(indexOffset, indexOffset + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n }\n\n }\n\n if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n _.lazyLoad();\n }\n };\n\n Slick.prototype.setupInfinite = function() {\n\n var _ = this,\n i, slideIndex, infiniteCount;\n\n if (_.options.fade === true) {\n _.options.centerMode = false;\n }\n\n if (_.options.infinite === true && _.options.fade === false) {\n\n slideIndex = null;\n\n if (_.slideCount > _.options.slidesToShow) {\n\n if (_.options.centerMode === true) {\n infiniteCount = _.options.slidesToShow + 1;\n } else {\n infiniteCount = _.options.slidesToShow;\n }\n\n for (i = _.slideCount; i > (_.slideCount -\n infiniteCount); i -= 1) {\n slideIndex = i - 1;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex - _.slideCount)\n .prependTo(_.$slideTrack).addClass('slick-cloned');\n }\n for (i = 0; i < infiniteCount + _.slideCount; i += 1) {\n slideIndex = i;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex + _.slideCount)\n .appendTo(_.$slideTrack).addClass('slick-cloned');\n }\n _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n $(this).attr('id', '');\n });\n\n }\n\n }\n\n };\n\n Slick.prototype.interrupt = function( toggle ) {\n\n var _ = this;\n\n if( !toggle ) {\n _.autoPlay();\n }\n _.interrupted = toggle;\n\n };\n\n Slick.prototype.selectHandler = function(event) {\n\n var _ = this;\n\n var targetElement =\n $(event.target).is('.slick-slide') ?\n $(event.target) :\n $(event.target).parents('.slick-slide');\n\n var index = parseInt(targetElement.attr('data-slick-index'));\n\n if (!index) index = 0;\n\n if (_.slideCount <= _.options.slidesToShow) {\n\n _.slideHandler(index, false, true);\n return;\n\n }\n\n _.slideHandler(index);\n\n };\n\n Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n _ = this, navTarget;\n\n sync = sync || false;\n\n if (_.animating === true && _.options.waitForAnimate === true) {\n return;\n }\n\n if (_.options.fade === true && _.currentSlide === index) {\n return;\n }\n\n if (sync === false) {\n _.asNavFor(index);\n }\n\n targetSlide = index;\n targetLeft = _.getLeft(targetSlide);\n slideLeft = _.getLeft(_.currentSlide);\n\n _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n }\n\n if ( _.options.autoplay ) {\n clearInterval(_.autoPlayTimer);\n }\n\n if (targetSlide < 0) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n } else {\n animSlide = _.slideCount + targetSlide;\n }\n } else if (targetSlide >= _.slideCount) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = 0;\n } else {\n animSlide = targetSlide - _.slideCount;\n }\n } else {\n animSlide = targetSlide;\n }\n\n _.animating = true;\n\n _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n oldSlide = _.currentSlide;\n _.currentSlide = animSlide;\n\n _.setSlideClasses(_.currentSlide);\n\n if ( _.options.asNavFor ) {\n\n navTarget = _.getNavTarget();\n navTarget = navTarget.slick('getSlick');\n\n if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n navTarget.setSlideClasses(_.currentSlide);\n }\n\n }\n\n _.updateDots();\n _.updateArrows();\n\n if (_.options.fade === true) {\n if (dontAnimate !== true) {\n\n _.fadeSlideOut(oldSlide);\n\n _.fadeSlide(animSlide, function() {\n _.postSlide(animSlide);\n });\n\n } else {\n _.postSlide(animSlide);\n }\n _.animateHeight();\n return;\n }\n\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(targetLeft, function() {\n _.postSlide(animSlide);\n });\n } else {\n _.postSlide(animSlide);\n }\n\n };\n\n Slick.prototype.startLoad = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.hide();\n _.$nextArrow.hide();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.hide();\n\n }\n\n _.$slider.addClass('slick-loading');\n\n };\n\n Slick.prototype.swipeDirection = function() {\n\n var xDist, yDist, r, swipeAngle, _ = this;\n\n xDist = _.touchObject.startX - _.touchObject.curX;\n yDist = _.touchObject.startY - _.touchObject.curY;\n r = Math.atan2(yDist, xDist);\n\n swipeAngle = Math.round(r * 180 / Math.PI);\n if (swipeAngle < 0) {\n swipeAngle = 360 - Math.abs(swipeAngle);\n }\n\n if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n return (_.options.rtl === false ? 'right' : 'left');\n }\n if (_.options.verticalSwiping === true) {\n if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n return 'down';\n } else {\n return 'up';\n }\n }\n\n return 'vertical';\n\n };\n\n Slick.prototype.swipeEnd = function(event) {\n\n var _ = this,\n slideCount,\n direction;\n\n _.dragging = false;\n _.swiping = false;\n\n if (_.scrolling) {\n _.scrolling = false;\n return false;\n }\n\n _.interrupted = false;\n _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n if ( _.touchObject.curX === undefined ) {\n return false;\n }\n\n if ( _.touchObject.edgeHit === true ) {\n _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n }\n\n if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n direction = _.swipeDirection();\n\n switch ( direction ) {\n\n case 'left':\n case 'down':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n _.currentSlide + _.getSlideCount();\n\n _.currentDirection = 0;\n\n break;\n\n case 'right':\n case 'up':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n _.currentSlide - _.getSlideCount();\n\n _.currentDirection = 1;\n\n break;\n\n default:\n\n\n }\n\n if( direction != 'vertical' ) {\n\n _.slideHandler( slideCount );\n _.touchObject = {};\n _.$slider.trigger('swipe', [_, direction ]);\n\n }\n\n } else {\n\n if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n _.slideHandler( _.currentSlide );\n _.touchObject = {};\n\n }\n\n }\n\n };\n\n Slick.prototype.swipeHandler = function(event) {\n\n var _ = this;\n\n if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n return;\n } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n return;\n }\n\n _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n event.originalEvent.touches.length : 1;\n\n _.touchObject.minSwipe = _.listWidth / _.options\n .touchThreshold;\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.minSwipe = _.listHeight / _.options\n .touchThreshold;\n }\n\n switch (event.data.action) {\n\n case 'start':\n _.swipeStart(event);\n break;\n\n case 'move':\n _.swipeMove(event);\n break;\n\n case 'end':\n _.swipeEnd(event);\n break;\n\n }\n\n };\n\n Slick.prototype.swipeMove = function(event) {\n\n var _ = this,\n edgeWasHit = false,\n curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n return false;\n }\n\n curLeft = _.getLeft(_.currentSlide);\n\n _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n _.touchObject.swipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n verticalSwipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n _.scrolling = true;\n return false;\n }\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.swipeLength = verticalSwipeLength;\n }\n\n swipeDirection = _.swipeDirection();\n\n if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n _.swiping = true;\n event.preventDefault();\n }\n\n positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n if (_.options.verticalSwiping === true) {\n positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n }\n\n\n swipeLength = _.touchObject.swipeLength;\n\n _.touchObject.edgeHit = false;\n\n if (_.options.infinite === false) {\n if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n _.touchObject.edgeHit = true;\n }\n }\n\n if (_.options.vertical === false) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n } else {\n _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n }\n if (_.options.verticalSwiping === true) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n }\n\n if (_.options.fade === true || _.options.touchMove === false) {\n return false;\n }\n\n if (_.animating === true) {\n _.swipeLeft = null;\n return false;\n }\n\n _.setCSS(_.swipeLeft);\n\n };\n\n Slick.prototype.swipeStart = function(event) {\n\n var _ = this,\n touches;\n\n _.interrupted = true;\n\n if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n _.touchObject = {};\n return false;\n }\n\n if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n touches = event.originalEvent.touches[0];\n }\n\n _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n _.dragging = true;\n\n };\n\n Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n var _ = this;\n\n if (_.$slidesCache !== null) {\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.unload = function() {\n\n var _ = this;\n\n $('.slick-cloned', _.$slider).remove();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n _.$prevArrow.remove();\n }\n\n if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n _.$nextArrow.remove();\n }\n\n _.$slides\n .removeClass('slick-slide slick-active slick-visible slick-current')\n .attr('aria-hidden', 'true')\n .css('width', '');\n\n };\n\n Slick.prototype.unslick = function(fromBreakpoint) {\n\n var _ = this;\n _.$slider.trigger('unslick', [_, fromBreakpoint]);\n _.destroy();\n\n };\n\n Slick.prototype.updateArrows = function() {\n\n var _ = this,\n centerOffset;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if ( _.options.arrows === true &&\n _.slideCount > _.options.slidesToShow &&\n !_.options.infinite ) {\n\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n if (_.currentSlide === 0) {\n\n _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n }\n\n }\n\n };\n\n Slick.prototype.updateDots = function() {\n\n var _ = this;\n\n if (_.$dots !== null) {\n\n _.$dots\n .find('li')\n .removeClass('slick-active')\n .end();\n\n _.$dots\n .find('li')\n .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n .addClass('slick-active');\n\n }\n\n };\n\n Slick.prototype.visibility = function() {\n\n var _ = this;\n\n if ( _.options.autoplay ) {\n\n if ( document[_.hidden] ) {\n\n _.interrupted = true;\n\n } else {\n\n _.interrupted = false;\n\n }\n\n }\n\n };\n\n $.fn.slick = function() {\n var _ = this,\n opt = arguments[0],\n args = Array.prototype.slice.call(arguments, 1),\n l = _.length,\n i,\n ret;\n for (i = 0; i < l; i++) {\n if (typeof opt == 'object' || typeof opt == 'undefined')\n _[i].slick = new Slick(_[i], opt);\n else\n ret = _[i].slick[opt].apply(_[i].slick, args);\n if (typeof ret != 'undefined') return ret;\n }\n return _;\n };\n\n}));\n","$(document).ready(function () {\r\n\r\n disableSwipe();\r\n\r\n $(window).on('resize', function() {\r\n disableSwipe();\r\n });\r\n\r\n function disableSwipe() {\r\n $(\".heading-carousel__carousel .carousel\").each(function () {\r\n const slides = $(this).find('.slick-slide');\r\n const firstSlide = slides.first();\r\n const lastSlide = slides.last();\r\n const firstSlidePosition = firstSlide[0].getBoundingClientRect().left;\r\n const lastSlidePosition = lastSlide[0].getBoundingClientRect().left + lastSlide.outerWidth();\r\n const viewportWidth = $(window).width();\r\n const twoTileCarousel = $(this).hasClass('two-tile-carousel');\r\n const centerMode = !twoTileCarousel;\r\n\r\n if (firstSlidePosition >= 0 && lastSlidePosition <= viewportWidth) {\r\n $(this).slick('slickSetOption', {\r\n swipe: false,\r\n centerMode: centerMode,\r\n responsive: [\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n swipe: false,\r\n centerMode: true,\r\n }\r\n }\r\n ]\r\n }, true);\r\n } else {\r\n $(this).slick('slickSetOption', {\r\n swipe: true,\r\n centerMode: centerMode,\r\n responsive: [\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n swipe: true,\r\n centerMode: true,\r\n }\r\n }\r\n ]\r\n }, true);\r\n }\r\n });\r\n }\r\n});","import lity from \"lity\";\r\n\r\n$(() => {\r\n const $stickyBuyWrapper = $(\".sticky-buy-wrapper\");\r\n const $stickyBuyBtn = $(\"#stickyBuyTicketsBtn\");\r\n const $stickyTicketSelection = $(\"#stickyTicketSelection\");\r\n const $stickyThankyou = $(\"#stickyThankyou\");\r\n const $learnMoreVIPBtn = $(\"#learnMoreVIPBtn\");\r\n const $stickyTicketSelectionContainer = $(\r\n \".sticky-ticket-selection-container \"\r\n );\r\n const $addToCartBtn = $(\"#addToCartBtn\");\r\n $addToCartBtn.on(\"click\", function (e) {\r\n const $this = $(this);\r\n $this.addClass(\"disabled-loader\");\r\n $this.append(\r\n ''\r\n );\r\n const totalCartItems = $(\".shopping-cart-icon\").find(\".cart-qty\").html();\r\n if (totalCartItems >= 10) {\r\n getErrorCartQty();\r\n $(\".loading-indicator\").remove();\r\n $this.removeClass(\"disabled-loader\");\r\n } else {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n ''\r\n );\r\n $this.closest(\".lity\").hide();\r\n $.updateAntiForgeryTokens();\r\n let requestVerificationToken = $(\".sticky-buy-ticket-selector\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n let data = {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ProductVariantId: $this\r\n .closest(\".sticky-buy-ticket-selector\")\r\n .find(\".slick-center .ticket\")\r\n .data(\"product-id\"),\r\n ArtUnionId: $this.data(\"art-union-id\"),\r\n Quantity: $this\r\n .closest(\".sticky-buy-ticket-selector\")\r\n .find(\".slick-center .ticket\")\r\n .data(\"qty\"),\r\n IsPreOrder: $this.data(\"preorder-item\"),\r\n };\r\n\r\n $.ajax({\r\n url: $this.data(\"service-url\"),\r\n data,\r\n method: \"POST\",\r\n async: false,\r\n success: function success(data) {\r\n if (\r\n data.Data &&\r\n data.Data.ApiError &&\r\n data.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(data);\r\n } else {\r\n lity(\"#stickyThankyou\");\r\n $stickyTicketSelection.find(\".modal-close\").trigger(\"click\");\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/GetShoppingCartCount\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(count) {\r\n $(\".cart-qty\").html(count.Data.ShoppingCartCount);\r\n const totalCartItems = count.Data.ShoppingCartCount;\r\n if (totalCartItems === 0) {\r\n $(\".shopping-cart-icon\")\r\n .find(\".navigation-icon__counter\")\r\n .removeClass(\"solid\");\r\n $(\".shopping-cart-icon\").find(\".cart-qty\").html(\"\");\r\n $(\".cart-empty-section\").removeClass(\"hidden\");\r\n $(\"#cartBtn\").addClass(\"disabled\");\r\n $(\".cart-qty-container\").addClass(\"hidden\");\r\n } else {\r\n $(\".shopping-cart-icon\")\r\n .find(\".navigation-icon__counter\")\r\n .addClass(\"solid\");\r\n $(\".shopping-cart-icon\")\r\n .find(\".cart-qty\")\r\n .html(totalCartItems);\r\n $(\".cart-empty-section\").addClass(\"hidden\");\r\n $(\"#cartBtn\").removeClass(\"disabled\");\r\n $(\".cart-qty-container\").removeClass(\"hidden\");\r\n }\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n $(\".loading-indicator\").remove();\r\n $this.removeClass(\"disabled-loader\");\r\n },\r\n fail: function (error) {},\r\n });\r\n $(this).removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n }\r\n });\r\n\r\n if ($stickyBuyWrapper && $stickyBuyWrapper.length > 0) {\r\n if ($stickyBuyWrapper.data(\"exp-editor\").toLowerCase() !== \"false\") {\r\n $stickyBuyBtn.on(\"click\", function (e) {\r\n $stickyTicketSelection.show();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $stickyTicketSelection.hide();\r\n });\r\n }\r\n }\r\n\r\n if (\r\n $stickyTicketSelectionContainer &&\r\n $stickyTicketSelectionContainer.length > 0\r\n ) {\r\n if (\r\n $stickyTicketSelectionContainer.data(\"exp-editor\").toLowerCase() !==\r\n \"false\"\r\n ) {\r\n $addToCartBtn.on(\"click\", function (e) {\r\n $stickyThankyou.show();\r\n $stickyTicketSelection.hide();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $stickyThankyou.hide();\r\n });\r\n }\r\n }\r\n\r\n // Learn more button on sticky buy ticket selector\r\n $learnMoreVIPBtn.on(\"click\", function (e) {\r\n console.log(\"test\");\r\n let vipUrl = $(this).attr(\"href\");\r\n const subValue = $(\"#stickyTicketSelection\")\r\n .find(\".VIP-club-section-container\")\r\n .find(\".selected-ticket\")\r\n .html()\r\n .replace(\"$\", \"\");\r\n console.log(\"subValue\", subValue);\r\n vipUrl = vipUrl + \"?subvalue=\" + subValue;\r\n console.log(\"vipUrl\", vipUrl);\r\n $(this).attr(\"href\", vipUrl);\r\n });\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n function getErrorCartQty() {\r\n const message = $addToCartBtn.data(\"error-qty-message\");\r\n const title = $addToCartBtn.data(\"error-qty-title\");\r\n const button = $addToCartBtn.data(\"error-qty-button\");\r\n systemNotification.error(title, message, button);\r\n }\r\n});\r\n","import lity from \"lity\";\r\nimport attrIsTruthy from \"../../../../../Common/js/util/attributeHelper\";\r\n\r\n$(() => {\r\n const accountdetailcontrol = $(\"form.accountdetails-form\");\r\n const $countryAddressCheck = $(\".countryAddressCheck\");\r\n let $form = $(\"#accountDetailsEdit\");\r\n const $updateAccountDetailsModal = $(\"#updateAccountDetails\");\r\n let $updatedForm;\r\n let showConfirmModal;\r\n $.validator.addMethod(\r\n \"primaryNotEmpty\",\r\n function (value, element) {\r\n return $(element).val().length > 0;\r\n },\r\n \"Please enter your primary contact details\"\r\n );\r\n\r\n // Single line address/multi-field address form state managment toggle logic\r\n $countryAddressCheck.each((index, element) => {\r\n const $el = $(element);\r\n toggleAddressSection($el);\r\n $el.on(\"click\", (evt) => {\r\n const $targetEl = $(evt.target).closest(\".countryAddressCheck\");\r\n const checkedAttr = $targetEl.attr(\"data-check-domestic-address\");\r\n $targetEl.attr(\r\n \"data-check-domestic-address\",\r\n attrIsTruthy(checkedAttr) ? \"false\" : \"true\"\r\n );\r\n toggleAddressSection($targetEl);\r\n });\r\n });\r\n\r\n $(\"input.account-mobile-phone[data-isprimary='true']\").rules(\"add\", {\r\n primaryNotEmpty: 0,\r\n messages: {\r\n primaryNotEmpty: \"Please enter your primary mobile phone number\",\r\n },\r\n });\r\n\r\n $(\"input.account-other-phone[data-isprimary='true']\").rules(\"add\", {\r\n primaryNotEmpty: 0,\r\n messages: {\r\n primaryNotEmpty: \"Please enter your primary home phone number\",\r\n },\r\n });\r\n\r\n $(\"input.account-email[data-isprimary='true']\").rules(\"add\", {\r\n primaryNotEmpty: 0,\r\n messages: {\r\n primaryNotEmpty: \"Please enter your primary email address\",\r\n },\r\n });\r\n\r\n $(\"input.account-address[data-isprimary='true']\").rules(\"add\", {\r\n primaryNotEmpty: 0,\r\n messages: {\r\n primaryNotEmpty: \"Please enter your primary address\",\r\n },\r\n });\r\n\r\n const getDateSuffix = (dateStr) => {\r\n const date = parseInt(dateStr, 10);\r\n let dateSuffix = \"th\";\r\n if ([1, 21, 31].indexOf(date) !== -1) {\r\n dateSuffix = \"st\";\r\n } else if ([2, 22].indexOf(date) !== -1) {\r\n dateSuffix = \"nd\";\r\n } else if ([3, 23].indexOf(date) !== -1) {\r\n dateSuffix = \"rd\";\r\n }\r\n return dateSuffix;\r\n };\r\n const collectAddress = ($containerEl) => {\r\n let addressStr = \"\";\r\n let country = \"\";\r\n for (let i = 0, len = $containerEl.length; i < len; i++) {\r\n if (i == 2) {\r\n country = $containerEl\r\n .eq(i)\r\n .find(\".form-textfield-input, .form-select-input\")\r\n .val();\r\n } else {\r\n addressStr +=\r\n $containerEl\r\n .eq(i)\r\n .find(\".form-textfield-input, .form-select-input\")\r\n .val() + \" \";\r\n }\r\n }\r\n return addressStr + country;\r\n };\r\n const convertDateFormat = ($fieldElement) => {\r\n if ($fieldElement.length) {\r\n const monthArr = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ];\r\n const date = $fieldElement.html();\r\n if (date) {\r\n const [dd, mm, yyyy] = date.split(\"/\");\r\n $fieldElement.html(\r\n parseInt(dd.trim(), 10) +\r\n getDateSuffix(dd) +\r\n \" \" +\r\n monthArr[mm - 1] +\r\n \" \" +\r\n yyyy\r\n );\r\n }\r\n }\r\n };\r\n //get the contact detail if the field is valid\r\n const returnPartyContact = ($formTextField, isMobile) => {\r\n if (\r\n $.trim($formTextField.val()).length <= 0 &&\r\n $.trim($($formTextField).data(\"locationid\")).length > 0 &&\r\n $($formTextField).attr(\"data-isprimary\") !== \"true\"\r\n ) {\r\n $($formTextField).attr(\"data-isremoved\", \"true\");\r\n } else {\r\n $($formTextField).attr(\"data-isremoved\", \"false\");\r\n }\r\n\r\n if (\r\n $.trim($formTextField.val()).length ||\r\n attrIsTruthy($($formTextField).attr(\"data-isremoved\"))\r\n ) {\r\n const mobilePhone = {\r\n LogisticsElectronicAddressRecId: $($formTextField).data(\"addressrecid\"),\r\n LocationId: $($formTextField).data(\"locationid\"),\r\n PartyNumber: $($formTextField).data(\"partynumber\"),\r\n Description: $($formTextField).data(\"description\"),\r\n IsPrimary: $($formTextField).data(\"isprimary\"),\r\n IsMobilePhone: isMobile,\r\n Type: $($formTextField).data(\"type\"),\r\n Locator: $formTextField.val(),\r\n ToRemove: attrIsTruthy($($formTextField).attr(\"data-isremoved\")),\r\n };\r\n\r\n return mobilePhone;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const bindContactDetails = ($editFormField, $labelViewFormField, dataObj) => {\r\n if (dataObj !== null && dataObj.Locator.length > 0) {\r\n $editFormField.data(\r\n \"addressrecid\",\r\n dataObj.LogisticsElectronicAddressRecId\r\n );\r\n if (dataObj.Description === \"Home\") {\r\n dataObj.Locator = dataObj.Locator.replace(\r\n /(\\d{2})(\\d{4})(\\d{4})/,\r\n \"$1 $2 $3\"\r\n );\r\n }\r\n if (dataObj.Description === \"Mobile\") {\r\n dataObj.Locator = dataObj.Locator.replace(\r\n /(\\d{4})(\\d{3})(\\d{3})/,\r\n \"$1 $2 $3\"\r\n );\r\n }\r\n $editFormField.data(\"locationid\", dataObj.LocationId);\r\n $editFormField.data(\"partynumber\", dataObj.PartyNumber);\r\n $editFormField.data(\"description\", dataObj.Description);\r\n $editFormField.data(\"isprimary\", dataObj.IsPrimary);\r\n $editFormField.data(\"type\", dataObj.Type);\r\n $editFormField.attr(\"data-isremoved\", \"false\");\r\n $editFormField.val(dataObj.Locator);\r\n $editFormField.parents(\".form-row\").eq(0).show();\r\n $labelViewFormField.html(dataObj.Locator);\r\n $labelViewFormField\r\n .parents(\"label:first\")\r\n .removeClass(\"my-account-hide-container\");\r\n } else {\r\n $editFormField.data(\"addressrecid\", \"\");\r\n $editFormField.data(\"locationid\", \"\");\r\n $editFormField.data(\"partynumber\", \"\");\r\n $editFormField.data(\"description\", \"\");\r\n $editFormField.data(\"isprimary\", \"false\");\r\n $editFormField.attr(\"data-isremoved\", \"false\");\r\n $editFormField.val(\"\");\r\n $editFormField.parents(\".form-row\").eq(0).show();\r\n $labelViewFormField\r\n .parents(\"label:first\")\r\n .addClass(\"my-account-hide-container\");\r\n }\r\n $form = $(\"#accountDetailsEdit\");\r\n };\r\n // toggle between sign in and my account details\r\n $(document).keypress(function (e) {\r\n if (e.which === 13) {\r\n $(\".modal\").each(function () {\r\n if (!$(this).hasClass(\"lity-hide\")) {\r\n $(this).find(\"button[type=submit]\").trigger(\"click\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n const performAccountFieldsValidtion = (customerDataObj, e, token) => {\r\n const contactListCount = accountdetailcontrol\r\n .find(\"#ContactListCount\")\r\n .val();\r\n\r\n for (let index = 0; index < contactListCount; index++) {\r\n const mobilePhoneField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountMobilePhoneNumber\"\r\n );\r\n const homePhoneField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountHomePhoneNumber\"\r\n );\r\n const emailField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__UpdateAccountEmailAddress\"\r\n );\r\n const searchId = accountdetailcontrol\r\n .find(\"#Form_AccountAddressSearchId_\" + index + \"_\")\r\n .val();\r\n const isDomesticAddress = attrIsTruthy(\r\n accountdetailcontrol\r\n .find(\"#countryAddressCheck\" + index)\r\n .attr(\"data-check-domestic-address\")\r\n );\r\n const addressIntField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountInternationalAddress\"\r\n );\r\n const cityField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddressCity\"\r\n );\r\n const postCodeField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddressPostCode\"\r\n );\r\n const countryField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddressCountry\"\r\n );\r\n var stateField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddressState\"\r\n );\r\n if (countryField.val() != \"AUS\") {\r\n stateField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddressStateText\"\r\n );\r\n }\r\n\r\n const addressChanged =\r\n accountdetailcontrol\r\n .find(\"#Form_AccountContactDetails_\" + index + \"__AccountAddress\")\r\n .data(\"address-changed\") === true;\r\n const domAddressField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddress\"\r\n );\r\n\r\n let validContact = null;\r\n if (typeof mobilePhoneField !== \"undefined\") {\r\n validContact = returnPartyContact(mobilePhoneField, \"true\");\r\n }\r\n\r\n if (validContact) {\r\n customerDataObj.MobilePhoneNumbers.push(validContact);\r\n }\r\n\r\n if (typeof homePhoneField !== \"undefined\") {\r\n validContact = returnPartyContact(homePhoneField, \"false\");\r\n }\r\n\r\n if (validContact) {\r\n customerDataObj.HomePhoneNumbers.push(validContact);\r\n }\r\n\r\n if (typeof emailField !== \"undefined\") {\r\n validContact = returnPartyContact(emailField, false);\r\n }\r\n\r\n if (validContact) {\r\n customerDataObj.Emails.push(validContact);\r\n }\r\n\r\n const AddressObj = { Address: {}, SearchId: \"\" };\r\n\r\n if (typeof domAddressField !== \"undefined\") {\r\n if (\r\n (isDomesticAddress && searchId) ||\r\n attrIsTruthy($(domAddressField).attr(\"data-isremoved\"))\r\n ) {\r\n AddressObj.SearchId = searchId;\r\n AddressObj.Address.ToRemove = attrIsTruthy(\r\n $(domAddressField).attr(\"data-isremoved\")\r\n );\r\n AddressObj.Address.IsPostalAddress = \"true\";\r\n AddressObj.Address.AddressDescription =\r\n $(domAddressField).data(\"description\");\r\n AddressObj.Address.IsPrimary = $(domAddressField).data(\"isprimary\");\r\n AddressObj.Address.AddressLocationId =\r\n $(domAddressField).data(\"addresslocationid\");\r\n customerDataObj.CustomerAddress.push(AddressObj);\r\n }\r\n }\r\n\r\n if (typeof addressIntField !== \"undefined\") {\r\n if (\r\n ($.trim(addressIntField.val()).length && !isDomesticAddress) ||\r\n attrIsTruthy($(addressIntField).attr(\"data-isremoved\"))\r\n ) {\r\n AddressObj.Address.AddressStreet = addressIntField.val();\r\n AddressObj.Address.AddressCity = cityField.val();\r\n AddressObj.Address.AddressState = stateField.val();\r\n AddressObj.Address.AddressZipCode = postCodeField.val();\r\n AddressObj.Address.AddressCountryRegionId = countryField.val();\r\n AddressObj.Address.IsPostalAddress = \"true\";\r\n AddressObj.Address.AddressDescription =\r\n $(addressIntField).data(\"description\");\r\n AddressObj.Address.IsPrimary = $(addressIntField).data(\"isprimary\");\r\n AddressObj.Address.AddressLocationId =\r\n $(addressIntField).data(\"addresslocationid\");\r\n AddressObj.Address.ToRemove =\r\n $(addressIntField).attr(\"data-isremoved\") == \"true\";\r\n customerDataObj.CustomerAddress.push(AddressObj);\r\n }\r\n }\r\n }\r\n\r\n setTimeout(function () {\r\n $(\".accountdetails-form .js-btn-update\").removeClass(\"disabled\");\r\n }, 3000);\r\n\r\n const requestVerificationToken = accountdetailcontrol\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n jQuery\r\n .ajax({\r\n url: accountdetailcontrol.data(\"service-url\"),\r\n method: \"POST\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n customerDetails: customerDataObj,\r\n GoogleReCaptchaToken: token,\r\n },\r\n success: function success(data) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#updateAccountDetailsBtn\").removeClass(\"disabled-loader\");\r\n if (!data.ApiError) {\r\n if (data.RedirectUrl) {\r\n systemNotification.error(\r\n accountdetailcontrol.data(\"error-title\"),\r\n accountdetailcontrol.data(\"error-message\"),\r\n accountdetailcontrol.data(\"error-button\")\r\n );\r\n } else {\r\n systemNotification.success(\r\n accountdetailcontrol.data(\"success-title\"),\r\n accountdetailcontrol.data(\"success-message\"),\r\n accountdetailcontrol.data(\"success-button\")\r\n );\r\n showConfirmModal = false;\r\n $(\"#updateAccountDetails\").parents(\".lity\").hide();\r\n const $viewSection = $(\"#accountDetailsView\");\r\n const $editSection = $(\"#updateAccountDetails\");\r\n const updatedCustomerData = data.CustomerDataObj;\r\n const phoneCount =\r\n updatedCustomerData.MobilePhoneNumbers.length +\r\n updatedCustomerData.HomePhoneNumbers.length;\r\n var addressIndex = 0;\r\n const addressLabel = $viewSection.find(\".js-address-label\");\r\n for (let index = 0; index < contactListCount; index++) {\r\n //rebind mobile numbers\r\n const editMobile = $editSection.find(\r\n \"#Form_AccountContactDetails_\" +\r\n index +\r\n \"__AccountMobilePhoneNumber\"\r\n );\r\n\r\n const viewMobile = $viewSection.find(\r\n \"#LblAccountMobilePhone\" + index\r\n );\r\n if (editMobile !== \"undefined\" && viewMobile !== \"undefined\") {\r\n if (\r\n updatedCustomerData.MobilePhoneNumbers !== null &&\r\n updatedCustomerData.MobilePhoneNumbers.length > 0 &&\r\n index < updatedCustomerData.MobilePhoneNumbers.length\r\n ) {\r\n bindContactDetails(\r\n editMobile,\r\n viewMobile,\r\n updatedCustomerData.MobilePhoneNumbers[index]\r\n );\r\n //hide primary icon if the only one number is present\r\n if (phoneCount == 1) {\r\n viewMobile.parents(\"label:first\").html(viewMobile);\r\n } else if (\r\n updatedCustomerData.MobilePhoneNumbers.length == 1\r\n ) {\r\n //hide the number in label if the count is 1\r\n viewMobile.parents(\"label:first\").html(viewMobile);\r\n }\r\n } else if (index === 0) {\r\n //if no mobile numbers present, show empty text box\r\n bindContactDetails(editMobile, viewMobile, null);\r\n } else {\r\n bindContactDetails(editMobile, viewMobile, null);\r\n editMobile.parents(\".form-row\").eq(0).hide();\r\n viewMobile\r\n .parents(\"label:first\")\r\n .addClass(\"my-account-hide-container\");\r\n }\r\n }\r\n //rebind home phone numbers\r\n const editLandLine = $editSection.find(\r\n \"#Form_AccountContactDetails_\" +\r\n index +\r\n \"__AccountHomePhoneNumber\"\r\n );\r\n const viewLandLine = $viewSection.find(\r\n \"#LblAccountHomePhone\" + index\r\n );\r\n if (\r\n editLandLine !== \"undefined\" &&\r\n viewLandLine !== \"undefined\"\r\n ) {\r\n if (\r\n updatedCustomerData.HomePhoneNumbers !== null &&\r\n updatedCustomerData.HomePhoneNumbers.length > 0 &&\r\n index < updatedCustomerData.HomePhoneNumbers.length\r\n ) {\r\n bindContactDetails(\r\n editLandLine,\r\n viewLandLine,\r\n updatedCustomerData.HomePhoneNumbers[index]\r\n );\r\n //hide primary icon if the only one number is present\r\n if (phoneCount == 1) {\r\n viewLandLine.parents(\"label:first\").html(viewLandLine);\r\n } else if (\r\n updatedCustomerData.HomePhoneNumbers.length == 1\r\n ) {\r\n //hide the number in label if the count is 1\r\n viewLandLine.parents(\"label:first\").html(viewLandLine);\r\n }\r\n } else if (index === 0) {\r\n //if no mobile numbers present, show empty text box\r\n bindContactDetails(editLandLine, viewLandLine, null);\r\n } else {\r\n bindContactDetails(editLandLine, viewLandLine, null);\r\n editLandLine.parents(\".form-row\").eq(0).hide();\r\n viewLandLine\r\n .parents(\"label:first\")\r\n .addClass(\"my-account-hide-container\");\r\n }\r\n }\r\n //rebind home phone numbers\r\n const editEmail = $editSection.find(\r\n \"#Form_AccountContactDetails_\" +\r\n index +\r\n \"__UpdateAccountEmailAddress\"\r\n );\r\n const viewEmail = $viewSection.find(\"#LblAccountEmail\" + index);\r\n if (editEmail !== \"undefined\" && viewEmail !== \"undefined\") {\r\n if (\r\n updatedCustomerData.Emails !== null &&\r\n updatedCustomerData.Emails.length > 0 &&\r\n index < updatedCustomerData.Emails.length\r\n ) {\r\n bindContactDetails(\r\n editEmail,\r\n viewEmail,\r\n updatedCustomerData.Emails[index]\r\n );\r\n //hide primary icon if the only one email is present\r\n if (updatedCustomerData.Emails.length == 1) {\r\n viewEmail.parents(\"label:first\").html(viewEmail);\r\n }\r\n } else {\r\n //hide all empty boxes and labels\r\n bindContactDetails(editEmail, viewEmail, null);\r\n editEmail.parents(\".form-row\").eq(0).hide();\r\n viewEmail\r\n .parents(\"label:first\")\r\n .addClass(\"my-account-hide-container\");\r\n }\r\n }\r\n //rebind address\r\n const isDomesticAddress = attrIsTruthy(\r\n accountdetailcontrol\r\n .find(\"#countryAddressCheck\" + index)\r\n .attr(\"data-check-domestic-address\")\r\n );\r\n const accountAddress = isDomesticAddress\r\n ? collectAddress(\r\n $editSection\r\n .find(\"[data-address-group=\" + index + \"]\")\r\n .filter(\".domestic-address\")\r\n ) + \"AUS\"\r\n : collectAddress(\r\n $editSection\r\n .find(\"[data-address-group=\" + index + \"]\")\r\n .filter(\".international-address\")\r\n );\r\n const domesticAddressEdit = $editSection.find(\r\n \"#Form_AccountContactDetails_\" + index + \"__AccountAddress\"\r\n );\r\n const internationlAddressEdit = $editSection.find(\r\n \"#Form_AccountContactDetails_\" +\r\n index +\r\n \"__AccountInternationalAddress\"\r\n );\r\n if (\r\n (isDomesticAddress &&\r\n $.trim(domesticAddressEdit.val()).length) ||\r\n (!isDomesticAddress &&\r\n $.trim(internationlAddressEdit.val()).length)\r\n ) {\r\n if (\r\n addressIndex < updatedCustomerData.CustomerAddress.length\r\n ) {\r\n $(addressLabel[addressIndex])\r\n .find(\"span\")\r\n .html(accountAddress);\r\n } else {\r\n }\r\n if (updatedCustomerData.CustomerAddress.length == 1) {\r\n //hide number if only one address is present\r\n $(addressLabel[addressIndex])\r\n .find(\"p\")\r\n .html($(addressLabel[addressIndex]).find(\"span\"));\r\n }\r\n addressIndex++;\r\n }\r\n var $addressSection = $editSection.find(\r\n \"[data-address-group=\" + index + \"]\"\r\n );\r\n if (isDomesticAddress) {\r\n $addressSection\r\n .filter(\".international-address\")\r\n .find(\".form-textfield-input, .form-select-input\")\r\n .val(\"\")\r\n .parent(\".js-form-textfield\")\r\n .addClass(\"empty\");\r\n } else {\r\n $addressSection\r\n .filter(\".domestic-address\")\r\n .find(\".form-textfield-input\")\r\n .val(\"\")\r\n .parent(\".js-form-textfield\")\r\n .addClass(\"empty\");\r\n }\r\n }\r\n\r\n if (addressIndex < addressLabel.length) {\r\n var labelsToHide = addressLabel.slice(addressIndex);\r\n $(labelsToHide).hide();\r\n }\r\n if (\r\n $(\".confirm-status-modal\") &&\r\n $(\".confirm-status-modal\").length\r\n ) {\r\n $.getSuccessModalTheme($(\".confirm-status-modal\"));\r\n }\r\n\r\n $(\"html,body\").animate(\r\n { scrollTop: $(\"#accountDetailsView\").offset().top - 140 },\r\n 1000\r\n );\r\n }\r\n } else {\r\n if (data && data.ApiError && data.ApiError.ResponseStatus) {\r\n if (\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\" ||\r\n data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidEmailException\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n } else {\r\n systemNotification.error(\r\n accountdetailcontrol.data(\"error-title\"),\r\n accountdetailcontrol.data(\"error-message\"),\r\n accountdetailcontrol.data(\"error-button\")\r\n );\r\n }\r\n }\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#updateAccountDetailsBtn\").removeClass(\"disabled-loader\");\r\n // Failure\r\n if (error && error.status === 401) {\r\n // user is unauthorised lets redirect to the login page\r\n $.redirectToLoginPageWithReturnUrl(accountdetailcontrol);\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n };\r\n\r\n $(\"#updateAccountDetailsBtn\").on(\"click\", function (e) {\r\n\r\n $form.validate();\r\n if (!$form.valid()) {\r\n return\r\n }\r\n\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n ''\r\n );\r\n e.preventDefault();\r\n const customerDataObj = {\r\n Customer: {},\r\n HomePhoneNumbers: [],\r\n MobilePhoneNumbers: [],\r\n Emails: [],\r\n CustomerAddress: [],\r\n };\r\n\r\n accountdetailcontrol.validate();\r\n const allFieldsAreValid = accountdetailcontrol.valid();\r\n\r\n if (!allFieldsAreValid) return null;\r\n $(\".field-validation-error\").remove();\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n performAccountFieldsValidtion(customerDataObj, e, token);\r\n }, \"UpdateAccountDetails\");\r\n //performAccountFieldsValidtion(customerDataObj, e, \"test\");\r\n });\r\n\r\n if (accountdetailcontrol && accountdetailcontrol.length) {\r\n accountdetailcontrol.find(\"input\").on(\"blur keyup\", function () {\r\n accountdetailcontrol.validate();\r\n if (accountdetailcontrol.valid()) {\r\n $(\"#updateAccountDetails\")\r\n .find(\".js-btn-update-details\")\r\n .removeClass(\"btn-modal-disabled\")\r\n .addClass(\"btn-modal-enabled\");\r\n } else {\r\n $(\"#updateAccountDetails\")\r\n .find(\".js-btn-update-details\")\r\n .removeClass(\"btn-modal-enabled\")\r\n .addClass(\"btn-modal-disabled\");\r\n }\r\n });\r\n }\r\n // On click of no button\r\n $(\"#accountConfirmModal\")\r\n .find(\".no-btn\")\r\n .on(\"click\", (e) => {\r\n e.preventDefault();\r\n if ($(\"#updateAccountDetails\") && $(\"#updateAccountDetails\").length > 0) {\r\n $.showConfirmationModal(\"#updateAccountDetails\");\r\n }\r\n $(\".modal.confirmation-modal\").find(\".modal-close\").trigger(\"click\");\r\n });\r\n\r\n $(\".js-field-clear\").on(\"click\", (e) => {\r\n e.preventDefault();\r\n const cleaButton = $(e.target);\r\n const $parentRow = cleaButton.parents(\".form-row\").eq(0);\r\n if (cleaButton.hasClass(\"clear-address\")) {\r\n var searchidField = $parentRow.find(\"[id*=Form_AccountAddressSearchId]\");\r\n if (searchidField) {\r\n searchidField.val(\"\");\r\n }\r\n cleaButton.parents(\".form-row\").eq(1).hide();\r\n }\r\n $parentRow.find(\".form-textfield-input\").attr(\"data-isremoved\", \"true\");\r\n $parentRow.find(\".form-textfield-input\").val(\"\");\r\n $parentRow.hide();\r\n cleaButton.parents(\".address-list\").hide();\r\n showConfirmModal = true;\r\n });\r\n\r\n $(\".update-account-details-btn\").on(\"click\", (e) => {\r\n e.preventDefault();\r\n\r\n //For experience editor\r\n if ($updateAccountDetailsModal && $updateAccountDetailsModal.length > 0) {\r\n if (\r\n $(\"#accountDetailsView\").data(\"exp-editor\").toLowerCase() !== \"false\"\r\n ) {\r\n $updateAccountDetailsModal.show();\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $updateAccountDetailsModal.hide();\r\n });\r\n }\r\n }\r\n });\r\n\r\n // put the formatted-date class on any wrapping element which contains a date formatted dd/mm/yyyy which you would like to be formatted like so: 8th June 1988\r\n $(\".formatted-date\").each(function () {\r\n convertDateFormat($(this));\r\n });\r\n // toggle between Single line address/multi-field addresses\r\n function toggleAddressSection($targetEl) {\r\n const baseRow = $targetEl.closest(\".form-row\");\r\n const addressGroup = baseRow.attr(\"data-address-group\");\r\n const $siblingRows = baseRow.prevAll(\r\n '[data-address-group=\"' + addressGroup + '\"]'\r\n );\r\n if (attrIsTruthy($targetEl.attr(\"data-check-domestic-address\"))) {\r\n // using single line australian address (with lookup)\r\n $siblingRows.filter(\".international-address\").addClass(\"hidden\");\r\n $siblingRows.filter(\".domestic-address\").removeClass(\"hidden\");\r\n $targetEl.html(\r\n `Can't find your address? Enter it manually`\r\n );\r\n } else {\r\n // using the multi-input address format. We also want to clear the lookup input and search ID when we toggle this on\r\n $siblingRows.filter(\".domestic-address\").addClass(\"hidden\");\r\n $siblingRows.filter(\".international-address\").removeClass(\"hidden\");\r\n if($(\".new-account-form-expanded #AccountAddressCountry\").val()) {\r\n $(\".new-account-form-expanded #AccountAddressCountry\").closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n }\r\n $targetEl.html(\r\n '' +\r\n $targetEl.data(\"domestic-address-unchecked-label\") +\r\n \"\"\r\n );\r\n // attempt to clear the appropriate inputs (will only find account for acccount and gift for gift)\r\n $siblingRows\r\n .find(\r\n \"#AccountAddressSearchId, #Form_AccountAddressSearchId_\" +\r\n addressGroup +\r\n \"_\"\r\n )\r\n .val(\"\");\r\n\r\n if (\r\n $(\r\n \"#Form_AccountContactDetails_\" +\r\n addressGroup +\r\n \"__AccountAddressCountry\"\r\n ).val() == \"AUS\" ||\r\n $(\"#newAccountFormExpanded\").find(\"#AccountAddressCountry\").val() ==\r\n \"AUS\"\r\n ) {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .addClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .removeClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .addClass(\"hidden\");\r\n }\r\n $(\r\n \"#Form_AccountContactDetails_\" +\r\n addressGroup +\r\n \"__AccountAddressCountry\"\r\n ).on(\"change\", function () {\r\n if (this.value == \"AUS\") {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .addClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .removeClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .addClass(\"hidden\");\r\n }\r\n });\r\n\r\n // For checkout create account\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#AccountAddressCountry\")\r\n .on(\"change\", function () {\r\n if (this.value == \"AUS\") {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .addClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .removeClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.postcode-field\")\r\n .removeClass(\"postcode-full-width\");\r\n } else {\r\n $siblingRows\r\n .filter(\".international-address.non-aus-state\")\r\n .removeClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.aus-state\")\r\n .addClass(\"hidden\");\r\n $siblingRows\r\n .filter(\".international-address.postcode-field\")\r\n .addClass(\"postcode-full-width\");\r\n }\r\n });\r\n\r\n $siblingRows\r\n .find(\r\n \"#AccountAddress, #Form_AccountContactDetails_\" +\r\n addressGroup +\r\n \"__AccountAddress\"\r\n )\r\n .val(\"\");\r\n $siblingRows.find(\"#GiftAddressSearchId\").val(\"\");\r\n $siblingRows.find(\"#GiftAddress\").val(\"\");\r\n }\r\n }\r\n\r\n //on update detais modal close\r\n let originalForm = $form.serialize();\r\n\r\n $(\"#accountModalClose\").on(\"click\", (e) => {\r\n if (showConfirmModal) {\r\n lity(\"#accountConfirmModal\");\r\n } else {\r\n $(this).trigger(\"click\");\r\n $(\".modal.confirmation-modal\").find(\".modal-close\").trigger(\"click\");\r\n }\r\n });\r\n});\r\n","$(document).ready(function () {\r\n const footer = document.querySelector(\"footer.footer\");\r\n if (!footer) return;\r\n\r\n createBackToTopButton();\r\n\r\n const backToTopBtn = document.getElementById(\"back-to-top-button\");\r\n const stickyComponent = document.querySelector(\".sticky-bottom\");\r\n if (!backToTopBtn) return;\r\n\r\n const throttleClick = throttle(backToTopScroll, 10);\r\n window.addEventListener(\"scroll\", throttleClick);\r\n\r\n const debouncedResizeHandler = debounce(backToTopScroll, 100);\r\n window.addEventListener(\"resize\", debouncedResizeHandler);\r\n\r\n backToTopBtn.addEventListener(\"click\", function () {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\"\r\n });\r\n });\r\n\r\n function createBackToTopButton() {\r\n const backToTopBtnHTML = document.createElement(\"button\");\r\n backToTopBtnHTML.id = \"back-to-top-button\";\r\n\r\n const backToTopIcon = document.createElement(\"img\");\r\n backToTopIcon.src =\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/north.svg\";\r\n backToTopIcon.alt = \"back to the top button icon\";\r\n\r\n const backToTopText = document.createElement(\"span\");\r\n backToTopText.textContent = \"TOP\";\r\n\r\n backToTopBtnHTML.appendChild(backToTopIcon);\r\n backToTopBtnHTML.appendChild(backToTopText);\r\n\r\n footer.parentNode.insertBefore(backToTopBtnHTML, footer);\r\n }\r\n\r\n function backToTopScroll() {\r\n if (!window.scrollY) {\r\n backToTopBtn.style.display = \"none\";\r\n return;\r\n }\r\n\r\n const pageHeight =\r\n document.documentElement.scrollHeight - footer.offsetHeight;\r\n const scrollPosition = window.innerHeight + window.pageYOffset;\r\n\r\n if (scrollPosition >= pageHeight) {\r\n backToTopBtn.style.display = \"block\";\r\n\r\n if (!stickyComponent || !stickyComponent.offsetHeight) return;\r\n\r\n if (window.innerWidth < 480) {\r\n const stickyComponentRect = stickyComponent.getBoundingClientRect();\r\n const buttonOffset = stickyComponentRect.left;\r\n\r\n backToTopBtn.style.bottom = stickyComponentRect.height + 32 + \"px\";\r\n backToTopBtn.style.right = buttonOffset + \"px\";\r\n } else if (window.innerWidth < 1024) {\r\n backToTopBtn.style.bottom = \"1rem\";\r\n backToTopBtn.style.right = \"1rem\";\r\n } else {\r\n backToTopBtn.style.bottom = \"2rem\";\r\n backToTopBtn.style.right = \"2rem\";\r\n }\r\n return;\r\n }\r\n\r\n backToTopBtn.style.display = \"none\";\r\n };\r\n\r\n function throttle(fn, delay) {\r\n let lastCall = 0;\r\n return function (...args) {\r\n const now = new Date().getTime();\r\n if (now - lastCall < delay) {\r\n return;\r\n }\r\n lastCall = now;\r\n return fn(...args);\r\n }\r\n }\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n});","$(() => {\r\n\r\n const artUnionWinnerItems = $('.tile.art-union-winner-item'); // Get all tile items\r\n const artUnionMaxDisplay = $('.art-union-winners__tile-container').data('max-display'); // Get the max display attribute\r\n if (!artUnionWinnerItems || !artUnionMaxDisplay) return;\r\n\r\n\r\n artUnionWinnerItems.each(function (index) {\r\n if (index + 1 > artUnionMaxDisplay) {\r\n $(this).addClass('hidden');\r\n }\r\n \r\n if (index < artUnionMaxDisplay) {\r\n $(this).removeAttr('style');\r\n }\r\n });\r\n \r\n\r\n $('.art-union-winners__load-more a').on('click', (event) => {\r\n event.preventDefault(); // Prevent default link behavior\r\n\r\n artUnionWinnerItems.each(function () {\r\n // Check if the item has a class of 'hidden'\r\n if ($(this).hasClass('hidden')) {\r\n // Remove the 'hidden' class\r\n $(this).removeClass('hidden');\r\n $(this).removeAttr('style');\r\n }\r\n });\r\n\r\n $('.art-union-winners__load-more').addClass('hidden'); // Hide the \"Load More\" element\r\n });\r\n});","document.addEventListener(\"DOMContentLoaded\", function() {\r\n // Function to load the image\r\n function loadImage(image, $img) {\r\n const src = image.getAttribute(\"data-src\");\r\n if (src) {\r\n image.src = src;\r\n image.removeAttribute(\"data-src\");\r\n }\r\n if (image.src) {\r\n $img.addClass('loaded');\r\n }\r\n }\r\n // Create an IntersectionObserver instance\r\n const observer = new IntersectionObserver((entries, observer) => {\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting) {\r\n const image = entry.target;\r\n loadImage(image, $(entry.target));\r\n observer.unobserve(image);\r\n }\r\n });\r\n });\r\n // Get all images with the 'lazy' class\r\n const lazyImages = document.querySelectorAll('img.lazy');\r\n // Observe each image\r\n lazyImages.forEach(image => {\r\n observer.observe(image);\r\n });\r\n});\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n const lazyVideos = document.querySelectorAll(\"video.lazy\");\r\n const videoObserver = new IntersectionObserver((entries, observer) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const video = entry.target;\r\n video.querySelectorAll(\"source[data-src]\").forEach((source) => {\r\n source.src = source.getAttribute(\"data-src\");\r\n source.removeAttribute(\"data-src\");\r\n });\r\n // Load the video\r\n video.load();\r\n video.classList.add('loaded');\r\n // Unobserve the video since it's already loaded\r\n observer.unobserve(video);\r\n }\r\n });\r\n });\r\n lazyVideos.forEach((video) => {\r\n videoObserver.observe(video);\r\n });\r\n });","const FOOTER_SCROLL_TOP = {\r\n init() {\r\n $(document).ready(function () {\r\n $(window).on(\"load\", function () {\r\n const footerLogoAnchor = document.querySelector('.footer .footer__logo a');\r\n if (!footerLogoAnchor) return;\r\n footerLogoAnchor.addEventListener(\"click\", function (e) {\r\n window.location.pathname === '/' ? (e.preventDefault(), window.scrollTo(0, 0)) : null;\r\n })\r\n })\r\n })\r\n }\r\n};\r\n\r\nconst FOOTER_STICKY_PADDING = {\r\n init() {\r\n $(document).ready(function () {\r\n $(window).on(\"load\", function () {\r\n let selectedStickyBuy;\r\n const stickyBuy = $('.sticky-buy-wrapper');\r\n const stickyBuyVIP = $('.vip-sticky-button-container');\r\n const backToTopBtn = $('#back-to-top-button');\r\n\r\n if (stickyBuy.length < 1 && stickyBuyVIP.length < 1) return;\r\n\r\n if (stickyBuy.length > 0) {\r\n selectedStickyBuy = stickyBuy;\r\n } else if (stickyBuyVIP.length > 0) {\r\n selectedStickyBuy = stickyBuyVIP;\r\n }\r\n\r\n calculateFooterPadding();\r\n $(window).resize(calculateFooterPadding);\r\n\r\n function setFooterPadding(heightAdjustment) {\r\n const stickyBuyHeight = selectedStickyBuy.outerHeight();\r\n $('.footer .footer__inner').css('padding-bottom', stickyBuyHeight + heightAdjustment + 'px');\r\n }\r\n\r\n function calculateFooterPadding() {\r\n const screenWidth = $(window).width();\r\n\r\n if (screenWidth < 480) {\r\n let heightAdjust = 32;\r\n\r\n if (backToTopBtn.length > 0) {\r\n heightAdjust += backToTopBtn.outerHeight() + 16;\r\n }\r\n setFooterPadding(heightAdjust);\r\n } else if (screenWidth >= 480 && screenWidth < 1024) {\r\n setFooterPadding(48);\r\n } else {\r\n setFooterPadding(64);\r\n }\r\n }\r\n });\r\n })\r\n }\r\n};\r\n\r\n\r\n\r\nFOOTER_SCROLL_TOP.init();\r\nFOOTER_STICKY_PADDING.init();","$(document).ready(function () {\r\n const prizeTiles = $('.prize-tiles-stacked');\r\n if (prizeTiles.length < 1) return;\r\n\r\n const appendDrawTerms = (el) => {\r\n const mediaColumn = $(el).find('.prize-tiles-stacked__media-wrapper');\r\n if (mediaColumn.length < 1) return;\r\n \r\n const drawTerms = $(el).find('.prize-tiles-stacked__draw-terms');\r\n const drawTermsAnchor = $(drawTerms).find('a');\r\n \r\n if (drawTermsAnchor) {\r\n mediaColumn.append(drawTerms);\r\n drawTermsAnchor.removeAttr('style');\r\n }\r\n }\r\n \r\n $(prizeTiles).each((undefined, el) => {\r\n $(el).find('.prize-tiles-stacked__draw-terms') && appendDrawTerms(el);\r\n })\r\n});","$(document).ready(function () {\r\n if ($(\".accordion-custom\").length < 1) return;\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n\r\n $(\".accordion-custom .accordion-custom__item\").each(function () {\r\n const item = $(this);\r\n const body = $(item).find(\".accordion-custom__body\");\r\n $(body).css(\"height\", \"0px\");\r\n\r\n const head = $(item).find(\".accordion-custom__head\").first();\r\n const headHeight = $(head).outerHeight();\r\n const bodyHeight = $(body).find(\".accordion-custom__inner\").outerHeight();\r\n $(this).css(\"max-height\", headHeight);\r\n\r\n if ($(item).attr(\"data-acc-cust\") === \"expanded\") {\r\n $(body).css(\"height\", \"auto\");\r\n $(item)\r\n .addClass(\"accordion-item-active\")\r\n .css(\"max-height\", $(head).outerHeight() + bodyHeight + \"px\");\r\n $(head).addClass(\"accordion-head-active\");\r\n }\r\n\r\n $(head).on(\"click\", function () {\r\n // gather elements/dimensions\r\n const item = $(this).closest(\".accordion-custom__item\");\r\n const items = $(item).siblings();\r\n $(item).find('.accordion-custom__body').css('height', 'auto')\r\n const bodyHeight = $(item).find(\".accordion-custom__inner\").outerHeight();\r\n const accordionWrapper = $(this).closest(\".accordion-custom\");\r\n const isGroupCollapse = $(accordionWrapper).attr(\"data-acc-cust\") === \"auto-toggle\";\r\n\r\n // AUTO COLLAPSE GROUPING\r\n if (isGroupCollapse) {\r\n $(items).each(function () {\r\n const item = $(this);\r\n const head = $(item).find(\".accordion-custom__head\").first();\r\n const headHeight = $(head).outerHeight();\r\n\r\n if ($(item).hasClass(\"accordion-item-active\")) {\r\n $(item).removeClass(\"accordion-item-active\").css(\"max-height\", headHeight);\r\n $(head).removeClass(\"accordion-head-active\");\r\n }\r\n });\r\n }\r\n\r\n // if clicked accordion active\r\n if ($(item).hasClass(\"accordion-item-active\")) {\r\n $(item).css(\"max-height\", $(head).outerHeight());\r\n $(item).toggleClass(\"accordion-item-active\");\r\n $(head).toggleClass(\"accordion-head-active\");\r\n return;\r\n }\r\n\r\n // IF NESTED ACCORD, INCREASE PARENT HEIGHT\r\n if ($(item).closest(\".accordion-custom__item.accordion-item-active\").length > 0) {\r\n const parentHeadHeight = $(item).closest(\".accordion-custom__item.accordion-item-active\").find('.accordion-custom__head').outerHeight();\r\n const parentBodyHeight = $(item).closest(\".accordion-custom__item.accordion-item-active\").find('.accordion-custom__inner').outerHeight();\r\n \r\n $(item).closest(\".accordion-custom__item.accordion-item-active\").css(\r\n \"max-height\",\r\n $(this).outerHeight() + parentHeadHeight + parentBodyHeight + bodyHeight + 'px'\r\n );\r\n }\r\n\r\n // open accordion\r\n $(item).toggleClass(\"accordion-item-active\").css(\"max-height\", $(this).outerHeight() + 3 + bodyHeight + \"px\");;\r\n $(head).addClass(\"accordion-head-active\");\r\n });\r\n });\r\n\r\n const debouncedResizeHandler = debounce(function () {\r\n setTimeout(() => {\r\n $(\".accordion-custom .accordion-custom__item\").each(function() {\r\n const item = $(this);\r\n const body = $(item).find(\".accordion-custom__body\");\r\n const head = $(item).find(\".accordion-custom__head\").first();\r\n const headHeight = $(head).outerHeight();\r\n const bodyHeight = $(body).find(\".accordion-custom__inner\").outerHeight();\r\n\r\n // if accordion is active, set max-height to include uncollapsed body-content\r\n if ($(this).hasClass('accordion-item-active')) {\r\n $(this).css(\"max-height\", $(item).outerHeight() + headHeight + bodyHeight + \"px\");\r\n return\r\n }\r\n\r\n // if accordion not active, set max-height to exclude uncollapsed body-content\r\n $(this).css(\"max-height\", headHeight + \"px\");\r\n });\r\n }, 600);\r\n }, 100);\r\n\r\n $(window).on(\"resize\", debouncedResizeHandler);\r\n});","$(function () {\r\n jQuery.validator.addMethod(\r\n \"noSearchId\",\r\n function (value, element) {\r\n return (\r\n !$(element).data(\"address-changed\") ||\r\n $(element).siblings(\".address-search-value\").val().length > 0\r\n );\r\n },\r\n function(params, element) {\r\n return $(element).data(\"val-validaddresslookup\");\r\n }\r\n );\r\n\r\n $.validator.addClassRules(\"address-typeahead\", { noSearchId: 0 });\r\n\r\n function changeLabelWhenSuggestedAddressListIsDisplayed($el) {\r\n let $theFloatingField = $el.closest(\".floating-field\");\r\n let $theLabel = $theFloatingField.find(\".control-label\"); \r\n let $floatingLabel = $theFloatingField.find(\".floating-label\");\r\n let note = $el.data(\"address-lookup-note\")? $el.data(\"address-lookup-note\") : \"Please select your address from the list\";\r\n\r\n if (!$theLabel.data(\"original-label\")) {\r\n $theLabel.data(\"original-label\", $floatingLabel.html());\r\n }\r\n $floatingLabel.html(note);\r\n }\r\n\r\n function changeLabelWhenSuggestedAddressListIsClicked($el) {\r\n let $theFloatingField = $el.closest(\".floating-field\");\r\n let $theLabel = $theFloatingField.find(\".control-label\");\r\n let $floatingLabel = $theFloatingField.find(\".floating-label\");\r\n let originalLabel = $theLabel.data(\"original-label\");\r\n\r\n $floatingLabel.html(originalLabel);\r\n }\r\n\r\n $(\".typeahead\").each((index, element) => {\r\n const $el = $(element);\r\n const TYPEAHEAD = {\r\n init() {\r\n // http://api.jqueryui.com/autocomplete/\r\n $el.autocomplete({\r\n appendTo: $($el).parent(),\r\n autoFocus: true,\r\n minLength: 3,\r\n delay: 500,\r\n source: function source(request, response) {\r\n $.ajax({\r\n url: $el.data(\"typeahead-service\"),\r\n data: { rawAddress: request.term },\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(data) {\r\n const respData =\r\n typeof data === \"string\" ? JSON.parse(data) : data;\r\n const respArray = [];\r\n if (\r\n respData &&\r\n respData.AddressSuggestions &&\r\n respData.AddressSuggestions.length\r\n ) {\r\n const addressLookupValidation = $(\".domestic-address.form-row\").find(\".field-validation-error\");\r\n // Commenting this out for now as we still want to see the validation error while typing - #201601\r\n // if (addressLookupValidation.length) addressLookupValidation.css(\"display\", \"none\");\r\n for (\r\n let i = 0, len = respData.AddressSuggestions.length;\r\n i < len;\r\n i++\r\n ) {\r\n if ($el.hasClass(\"address-typeahead\")) {\r\n respArray.push(\r\n respData.AddressSuggestions[i].FormattedAddress\r\n );\r\n }\r\n }\r\n } else {\r\n respArray.push(\"Address not found\");\r\n }\r\n response(respArray);\r\n if (\r\n respData &&\r\n respData.AddressSuggestions &&\r\n respData.AddressSuggestions.length\r\n ) {\r\n for (\r\n let j = 0, resval = respData.AddressSuggestions.length;\r\n j < resval;\r\n j++\r\n ) {\r\n $el\r\n .closest(\".typeahead-container\")\r\n .find(\".ui-autocomplete li.ui-menu-item\")\r\n .eq(j)\r\n .append(\r\n '' +\r\n respData.AddressSuggestions[j].SearchResultId +\r\n \"\"\r\n );\r\n }\r\n\r\n $.resetFloatingFieldValidation($el);\r\n changeLabelWhenSuggestedAddressListIsDisplayed($el);\r\n\r\n }\r\n $(\"ul li.ui-menu-item\").on(\"click\", function () {\r\n changeLabelWhenSuggestedAddressListIsClicked($el)\r\n $(this)\r\n .closest(\".typeahead-container\")\r\n .find(\".address-search-value\")\r\n .val($(this).find(\"span.searchID\").text());\r\n $(\".js-addressvalidationerror\").remove();\r\n const accountdetailcontrol =\r\n jQuery(\".address-typeahead\").closest(\"form\");\r\n accountdetailcontrol.validate().element(\".address-typeahead\");\r\n $(\"#accountDetailsEdit\")\r\n .find(\"#updateAccountDetailsBtn\")\r\n .removeClass(\"disabled\");\r\n });\r\n },\r\n error: function error() {\r\n console.log(\"typeahead AJAX error\");\r\n },\r\n });\r\n },\r\n select: function (event, ui) {\r\n $(this)\r\n .closest(\".typeahead-container\")\r\n .find(\".address-search-value\")\r\n .val(\r\n $(\".ui-menu-item-wrapper.ui-state-active\")\r\n .parent()\r\n .find(\"span.searchID\")\r\n .text()\r\n );\r\n },\r\n close: function () {\r\n const addressLookupValidation = $(\".domestic-address.form-row\").find(\".field-validation-error\");\r\n if (addressLookupValidation.length) addressLookupValidation.css(\"display\", \"block\");\r\n }\r\n });\r\n $el.on(\"keyup\", () => {\r\n $el.data(\"address-changed\", true);\r\n $el.parent().find(\".address-search-value \").val(\"\");\r\n });\r\n },\r\n };\r\n TYPEAHEAD.init();\r\n });\r\n});\r\n","import lity from \"lity\";\r\nimport extensions from \"../../js/util/extensions\";\r\nimport { CustomCollapse } from \"../collapse-custom/collapse-custom.js\";\r\n$(() => {\r\n $.retrieveRecaptchaTokenIfActive = (callbackFunc, actionName) => {\r\n if (window.grecaptcha) {\r\n var siteKey = $(\"meta[name=recaptcha-site-key]\").attr(\"value\");\r\n grecaptcha.ready(function () {\r\n grecaptcha\r\n .execute(siteKey, { action: actionName })\r\n .then(function (token) {\r\n callbackFunc(token);\r\n });\r\n });\r\n } else {\r\n callbackFunc(null);\r\n }\r\n };\r\n\r\n $.appendFormVerificationToken = ($formEl, argsObj) => {\r\n const resultObj = argsObj;\r\n const verficationTokenEl =\r\n $formEl && $formEl.find('input[name=\"__RequestVerificationToken\"]')\r\n ? $formEl.find('input[name=\"__RequestVerificationToken\"]')\r\n : \"\";\r\n if (verficationTokenEl) {\r\n resultObj[verficationTokenEl.attr(\"name\")] = verficationTokenEl.val();\r\n }\r\n return resultObj;\r\n };\r\n\r\n $.appendRecaptchaVerificationToken = (form, token) => {\r\n const resultObj = form;\r\n if (token != null) {\r\n resultObj[\"GoogleReCaptchaToken\"] = token;\r\n }\r\n return resultObj;\r\n };\r\n\r\n $.updateAntiForgeryTokens = () => {\r\n let $tokens = $(\"body\").find('input[name=\"__RequestVerificationToken\"]');\r\n\r\n if ($tokens && $tokens.length > 0) {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/CheckoutAccount/RefreshAntiForgeryToken\",\r\n type: \"get\",\r\n async: false,\r\n success: function (response) {\r\n let tokenValue = $(response).val();\r\n $tokens.each(function () {\r\n $(this).val(tokenValue);\r\n });\r\n },\r\n });\r\n }\r\n };\r\n\r\n // check for a returnUrl and redirect to that location if present, otherwise default to the home page\r\n $.redirectToReturnUrlPage = () => {\r\n let returnUrl = extensions.getQueryStringParamByName(\"returnUrl\");\r\n let safeToRedirect = $.isKnownStaticRoute(returnUrl);\r\n\r\n if (window.location.hash !== \"\") {\r\n returnUrl = returnUrl + decodeURI(window.location.hash);\r\n }\r\n\r\n if (returnUrl && returnUrl.length > 0 && safeToRedirect) {\r\n window.location = returnUrl;\r\n } else {\r\n window.location = \"/\";\r\n }\r\n };\r\n $.isKnownStaticRoute = (url) => {\r\n //hard-code known safe routes\r\n if (url) {\r\n const urlLink = document.createElement(\"a\");\r\n urlLink.href = url;\r\n let isExternal = false;\r\n if (urlLink.host) {\r\n isExternal = !urlLink.host === window.location.host;\r\n }\r\n if (!isExternal) {\r\n switch (urlLink.pathname) {\r\n case \"/my-account\":\r\n case \"/vipclub/join-vip-club\":\r\n case \"/checkout\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n // used to redirect you to login page with requested page as a 'returnUrl'\r\n $.redirectToLoginPageWithReturnUrl = (formEl) => {\r\n const returnUrl = window.location.href;\r\n let redirectPageUrl = \"/login\";\r\n if (formEl) {\r\n redirectPageUrl = formEl.data(\"login-page\");\r\n }\r\n // append the returnUrl to the login\r\n redirectPageUrl = redirectPageUrl + \"?returnUrl=\" + returnUrl;\r\n window.location = redirectPageUrl;\r\n };\r\n\r\n // used to display confirmation modal after form submission\r\n // On click of yes and no buttons\r\n $(\".modal.confirmation-modal\")\r\n .find(\".yes-btn\")\r\n .on(\"click\", (e) => {\r\n e.preventDefault();\r\n $(\".modal.confirmation-modal\").find(\".modal-close\").trigger(\"click\");\r\n });\r\n\r\n $.showConfirmationModal = (modalEl) => {\r\n lity(modalEl);\r\n };\r\n $.getTicketDepletion = () => {\r\n $(\".ticket-depletion-container\").each(function (index) {\r\n const $numberOfTickets = $(this).find(\".number-of-tickets\");\r\n const $sliderAnimate = $(this).find(\".slider-animate\");\r\n const $halfSlider = $(this).find(\".half-slider\");\r\n $(this).show();\r\n // Animation for the number of tickets sold\r\n if ($numberOfTickets && $numberOfTickets.length) {\r\n let count = 0;\r\n const targetNumber = $numberOfTickets.data(\"actual-tickets\");\r\n if ($halfSlider && $halfSlider.length) {\r\n $halfSlider.css(\"width\", targetNumber + \"%\");\r\n }\r\n // $numberOfTickets.text(targetNumber);\r\n const interval = setInterval(function () {\r\n count = count + targetNumber;\r\n $numberOfTickets.text(count);\r\n if (count >= targetNumber) clearInterval(interval);\r\n count++;\r\n }, 100);\r\n if (targetNumber >= 100) {\r\n $sliderAnimate.removeClass(\"half-slider\").addClass(\"full-slider\");\r\n }\r\n }\r\n });\r\n };\r\n $.getCountdownTimer = () => {\r\n $(\".countdown-timer\").each(function (index) {\r\n const timerElement = $(this);\r\n if (timerElement) {\r\n const daysElement = $(this).find(\".days\");\r\n const hoursElement = $(this).find(\".hours\");\r\n const minutesElement = $(this).find(\".minutes\");\r\n const secondsElement = $(this).find(\".seconds\");\r\n const counterStopTime = $(this).data(\"given-time\");\r\n\r\n // Update the count down every 1second\r\n const timer = setInterval(() => {\r\n // Get todays date and time in AEST\r\n const AESTime = +10; // AEST time zone offset in hours\r\n const date = new Date();\r\n const now =\r\n date.getTime() +\r\n (date.getTimezoneOffset() + AESTime * 60) * 60 * 1000;\r\n // Set the given date\r\n const timerdate = counterStopTime\r\n ? new Date(counterStopTime).getTime()\r\n : now;\r\n const timeDifference = timerdate - now;\r\n // Get the time difference between target date and now\r\n if (timeDifference > 0) {\r\n timerElement.removeClass(\"hidden\");\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));\r\n const hours = Math.floor(\r\n (timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\r\n );\r\n const minutes = Math.floor(\r\n (timeDifference % (1000 * 60 * 60)) / (1000 * 60)\r\n );\r\n const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);\r\n // If user has opted to convert from days to hours\r\n\r\n if (\r\n timerElement.data(\"hours-only\") &&\r\n timerElement.data(\"hours-only\").toString().toLowerCase() !==\r\n \"false\"\r\n ) {\r\n const onlyHours = Math.floor(timeDifference / (1000 * 60 * 60));\r\n hoursElement.html(adjustDigits(onlyHours));\r\n } else {\r\n hoursElement.html(adjustDigits(hours));\r\n }\r\n daysElement.html(adjustDigits(days));\r\n minutesElement.html(adjustDigits(minutes));\r\n secondsElement.html(adjustDigits(seconds));\r\n } else {\r\n timerElement.addClass(\"hidden\");\r\n clearInterval(timer);\r\n }\r\n }, 1000);\r\n }\r\n });\r\n };\r\n function adjustDigits(time) {\r\n return time < 10 ? \"0\" + `${time}` : `${time}`;\r\n }\r\n $.updateTicketSpreadDetails = ($this, $currentSubscriptionValue) => {\r\n const $changeSubscriptionModal = $(\"#changeSubscriptionModal\");\r\n // To populate new ticket details for both gen and gt\r\n const newGenTicketValue = $this.data(\"gen-total-tickets\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".tickets-count\")\r\n .find(\".new-value\")\r\n .html(newGenTicketValue);\r\n const newGenTicketText = $this.data(\"gen-total-tickets-text\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".tickets-count\")\r\n .find(\".label-heading\")\r\n .html(newGenTicketText);\r\n const newGTValue = $this.data(\"gt-total-tickets\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".tickets-count\")\r\n .find(\".new-value\")\r\n .html(newGTValue);\r\n const newGtTicketText = $this.data(\"gt-total-tickets-text\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".tickets-count\")\r\n .find(\".label-heading\")\r\n .html(newGtTicketText);\r\n\r\n // To populate current ticket details for both gen and gt\r\n const currentGenTicketValue =\r\n $currentSubscriptionValue.data(\"gen-total-tickets\");\r\n $changeSubscriptionModal\r\n .find(\".gen-ticket-details\")\r\n .find(\".tickets-count\")\r\n .find(\".current-value\")\r\n .html(\"was \" + currentGenTicketValue);\r\n\r\n const currentGTValue = $currentSubscriptionValue.data(\"gt-total-tickets\");\r\n $changeSubscriptionModal\r\n .find(\".gt-details\")\r\n .find(\".tickets-count\")\r\n .find(\".current-value\")\r\n .html(\"was \" + currentGTValue);\r\n\r\n // To populate new 'book bonus' details for both gen and gt\r\n const newGenBookBonusValue = $this.data(\"gen-bonus-gold\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".book-bonus\")\r\n .find(\".new-value\")\r\n .html(newGenBookBonusValue);\r\n\r\n const newGTBookBonusValue = $this.data(\"gt-bonus-gold\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".book-bonus\")\r\n .find(\".new-value\")\r\n .html(newGTBookBonusValue);\r\n\r\n // To populate current 'book bonus' details for both gen and gt\r\n const currentGenBookBonusValue =\r\n $currentSubscriptionValue.data(\"gen-bonus-gold\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".book-bonus\")\r\n .find(\".current-value\")\r\n .html(\"was \" + currentGenBookBonusValue);\r\n\r\n const currentGTBookBonusValue =\r\n $currentSubscriptionValue.data(\"gt-bonus-gold\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".book-bonus\")\r\n .find(\".current-value\")\r\n .html(\"was \" + currentGTBookBonusValue);\r\n\r\n // To populate 'bonus' ticket details for both gen and gt\r\n const newGenBonusValue = $this.data(\"gen-bonus-tickets\");\r\n const genBonusTicketsText = $this.data(\"gen-bonus-tickets-text\");\r\n if (newGenBonusValue === 0 && newGenBookBonusValue !== `$0`) {\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets\")\r\n .removeClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .addClass(\"hidden\");\r\n } else if (newGenBonusValue === 0 && newGenBookBonusValue === `$0`) {\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .removeClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n } else {\r\n //Apply Bonus tickets value\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".bonus-details\")\r\n .find(\".new-value\")\r\n .html(newGenBonusValue);\r\n //Apply Bonus tickets suffix text ie. 'bonus tickets / bonus ticket'\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".bonus-details\")\r\n .find(\".bonus-ticket-text\")\r\n .html(genBonusTicketsText);\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gen-ticket-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .removeClass(\"hidden\");\r\n }\r\n\r\n const newGTBonusValue = $this.data(\"gt-bonus-tickets\");\r\n const gtBonusTicketsText = $this.data(\"gt-bonus-tickets-text\");\r\n if (newGTBonusValue === 0 && newGTBookBonusValue !== `$0`) {\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets\")\r\n .removeClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .addClass(\"hidden\");\r\n } else if (newGTBonusValue === 0 && newGTBookBonusValue === `$0`) {\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .removeClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n } else {\r\n //Apply Bonus tickets value\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".bonus-details\")\r\n .find(\".new-value\")\r\n .html(newGTBonusValue);\r\n //Apply Bonus tickets suffix text ie. 'bonus tickets / bonus ticket'\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".bonus-details\")\r\n .find(\".bonus-ticket-text\")\r\n .html(gtBonusTicketsText);\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".no-bonus-tickets-gold\")\r\n .addClass(\"hidden\");\r\n $(\".change-membership-benefits-wrapper\")\r\n .find(\".gt-details\")\r\n .find(\".existing-bonus-tickets\")\r\n .removeClass(\"hidden\");\r\n }\r\n };\r\n\r\n $.objectifyForm = (formArray) => {\r\n let i; // serialize data function\r\n const returnArray = {};\r\n for (i = 0; i < formArray.length; i++) {\r\n returnArray[formArray[i].name] = formArray[i].value;\r\n }\r\n const isVipForm = $(\"#checkout-steps\").data(\"vip-form\");\r\n if (isVipForm) {\r\n returnArray[\"IsVipForm\"] = isVipForm;\r\n }\r\n return returnArray;\r\n };\r\n $.facebookFormValidationFail = (options) => {\r\n const settings = $.extend(\r\n {\r\n formEl: $(\"form\"),\r\n message: \"Please enter the correct form value(s)\",\r\n messageContainerEl: $(\r\n ''\r\n ),\r\n messageChildEl: $(''),\r\n },\r\n options\r\n );\r\n const btnEl = settings.formEl.find(\".btn\").closest(\"div\");\r\n settings.messageChildEl.html(settings.message);\r\n settings.messageContainerEl.html(settings.messageChildEl);\r\n const fieldContainerEl = settings.formEl.find(\".sign-in-buttons\");\r\n fieldContainerEl.addClass(\"form-validation-failed\");\r\n fieldContainerEl.last().children(\"span.form-validation-failed\").remove();\r\n btnEl.last().children(\"div.warning-error-icon\").remove();\r\n btnEl.append(settings.messageContainerEl);\r\n };\r\n $.inputValueCheck = ($inputEl) => {\r\n if (!$inputEl.hasClass(\"form-textfield-input\")) {\r\n return;\r\n }\r\n if (\r\n $inputEl.attr(\"autocomplete\") === \"off\" &&\r\n !$inputEl.closest(\"div.js-form-textfield\").hasClass(\"typeahead-container\")\r\n ) {\r\n $inputEl.val(\"\");\r\n }\r\n setTimeout(() => {\r\n if ($inputEl.val() && $inputEl.val() !== \"\") {\r\n $inputEl.closest(\"div.js-form-textfield.empty\").removeClass(\"empty\");\r\n } else {\r\n $inputEl.closest(\"div.js-form-textfield\").addClass(\"empty\");\r\n }\r\n }, 100);\r\n };\r\n\r\n $.showHidePayment = (val) => {\r\n const btnPaymentContainer = $(\"#paymentSection\") \r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment\");\r\n btnPaymentContainer\r\n .each(function (i, el) {\r\n if ($(el).data(\"payment-type-btn\").toLowerCase() === \"apple\") {\r\n if (window.ApplePaySession) {\r\n val ? $(el).addClass(\"hidden\"): $(el).removeClass(\"hidden\");\r\n } else {\r\n $(el).addClass(\"hidden\");\r\n }\r\n } else if ($(el).data(\"payment-type-btn\").toLowerCase() === \"google\") {\r\n val ? $(el).addClass(\"hidden\"): $(el).removeClass(\"hidden\");\r\n } else {\r\n $(el).removeClass(\"hidden\");\r\n }\r\n });\r\n\r\n const divNotSupportMessage = $(\"#notSupportPaymentTypeMessage\") \r\n if (val){\r\n divNotSupportMessage.removeClass(\"hidden\");\r\n\r\n } else {\r\n divNotSupportMessage.addClass(\"hidden\");\r\n }\r\n };\r\n\r\n $.paymentCalc = () => {\r\n let totalValue = 0,\r\n preorderValue = 0,\r\n totalPayment = 0,\r\n ticketValue = 0,\r\n preOrderArtUnionId = [];\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n // $(\".preorder-summary\").find(\".pre-order-payment\").html(\"\");\r\n $(\".preorder-summary\").find(\".preorder-details-container\").html(\"\");\r\n $(\".preorder-summary\").addClass(\"hidden\");\r\n // Pay now calculaiton\r\n const $cartItem = $NVIPTicketSummary\r\n .find(\".ticket-item-content\")\r\n .not(\".preorder-item\");\r\n const $cartPreOrderItem = $NVIPTicketSummary.find(\r\n \".ticket-item-content.preorder-item\"\r\n );\r\n $cartItem.each(function () {\r\n if ($(this).find(\".ticket-price-details\")) {\r\n totalValue += parseInt(\r\n $(this).find(\".ticket-price-details\").find(\".amount-value\").html(),\r\n 10\r\n );\r\n }\r\n });\r\n if ($cartPreOrderItem && $cartPreOrderItem.length > 0) {\r\n $cartPreOrderItem.each(function () {\r\n preOrderArtUnionId.push(\r\n $(this).closest(\".ticket-item-container\").data(\"art-union-id\")\r\n );\r\n\r\n if ($(this).find(\".ticket-price-details\")) {\r\n preorderValue += parseInt(\r\n $(this).find(\".ticket-price-details\").find(\".amount-value\").html(),\r\n 10\r\n );\r\n }\r\n });\r\n let uniqueArtId = preOrderArtUnionId.filter(function (\r\n el,\r\n i,\r\n preOrderArtUnionId\r\n ) {\r\n return i == preOrderArtUnionId.indexOf(el);\r\n });\r\n $(\".preorder-summary\").removeClass(\"hidden\");\r\n\r\n for (let i = 0; i < uniqueArtId.length; i++) {\r\n ticketValue = 0;\r\n const artID = uniqueArtId[i];\r\n const preOrderDate = $(\".ticket-item-content\")\r\n .closest(\"[data-art-union-id='\" + artID + \"']\")\r\n .data(\"pre-order-date\");\r\n $cartPreOrderItem.each(function () {\r\n if (\r\n $(this).closest(\".ticket-item-container\").data(\"art-union-id\") ===\r\n artID\r\n ) {\r\n ticketValue += parseInt(\r\n $(this)\r\n .find(\".ticket-price-details\")\r\n .find(\".amount-value\")\r\n .html(),\r\n 10\r\n );\r\n }\r\n });\r\n const drawBadge =\r\n `\r\n ` +\r\n artID +\r\n `
`;\r\n const preOrderHTML =\r\n `\r\n
\r\n
` +\r\n preOrderDate +\r\n `
\r\n
${drawBadge}
\r\n
\r\n
\r\n
` +\r\n `$${ticketValue}` +\r\n `
\r\n
\r\n
`;\r\n\r\n $(\".preorder-summary\")\r\n .find(\".preorder-details-container\")\r\n .append(preOrderHTML);\r\n }\r\n }\r\n\r\n totalPayment = totalValue + preorderValue;\r\n $(\".pay-btn\").find(\".amount\").text(`$${totalValue}`);\r\n $(\".total-amount\").find(\".amount\").text(`$${totalPayment}`);\r\n };\r\n\r\n // To fill existing gift users in gift dropdown\r\n $.fillGiftDropdown = (results) => {\r\n const giftIcon =\r\n '';\r\n results.forEach(function (data, i) {\r\n $(\"#giftDetailsForm\")\r\n .find(\".dropdown-list\")\r\n .find(\"ul li\")\r\n .each(function (el, j) {\r\n if ($(this).data(\"gift-contact-id\") === data.ContactId) {\r\n $(this).remove();\r\n }\r\n });\r\n const giftUser =\r\n \"\" +\r\n data.FirstName +\r\n \" \" +\r\n data.LastName +\r\n giftIcon;\r\n (\"\");\r\n\r\n $(\"#giftDetailsForm\").find(\".dropdown-list\").find(\"ul\").append(giftUser);\r\n });\r\n\r\n // if dropdown currently open, resize dropdownContainer container to fit the newly injected elements.\r\n const checkoutGiftWrapper = $(\"#giftDetailsForm\");\r\n if (checkoutGiftWrapper.length < 1) return;\r\n const dropdownHeader = $(checkoutGiftWrapper).find(\".form-row\"),\r\n dropdownContainer = $(dropdownHeader).find(\".dropdown-list\"),\r\n dropdownListItems = $(dropdownContainer).find(\".form-select-input li\");\r\n let dropListHeight = 0;\r\n if (dropdownContainer.hasClass(\"dropdown-opened\")) {\r\n dropdownListItems.each((i, el) => {\r\n $(el).outerHeight() && (dropListHeight += $(el).outerHeight());\r\n });\r\n dropdownHeader.css(\r\n \"height\",\r\n dropListHeight + dropdownContainer.outerHeight() + \"px\"\r\n );\r\n }\r\n };\r\n\r\n // logout\r\n $.logout = () => {\r\n $(\".js-btn-logout\").on(\"click\", function (e) {\r\n e.preventDefault(); \r\n $.ajax({\r\n url: \"/rslsitecoreapi/CustomerAccounts/AccountLogout\",\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n success: function success() {\r\n $.handleEngageIdentity();\r\n $.redirectToReturnUrlPage();\r\n },\r\n });\r\n\r\n });\r\n };\r\n\r\n $.inputValidationError = (options) => {\r\n const settings = $.extend(\r\n {\r\n fieldEl: $('input[type=\"text\"]'),\r\n message: \"Please enter the correct field value\",\r\n messageContainerEl: $(\r\n '
'\r\n ),\r\n messageChildEl: $('
'),\r\n },\r\n options\r\n );\r\n const fieldContainerEl = settings.fieldEl.closest(\".form-textfield\");\r\n settings.messageChildEl.html(settings.message);\r\n settings.messageContainerEl.html(settings.messageChildEl);\r\n fieldContainerEl.children(\"span.field-validation-error\").remove();\r\n settings.fieldEl.after(settings.messageContainerEl);\r\n };\r\n\r\n $.reloadHeader = () => {\r\n // To reload Header\r\n $.ajax({\r\n url: \"/rslsitecoreapi/Navigation/ReloadNavigation\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (result) {\r\n $(\".header\").replaceWith(result.Html);\r\n $.navigationICon();\r\n $.loggedInMenuClose();\r\n $(\".collapse-custom\").each(function () {\r\n new CustomCollapse(this);\r\n });\r\n $.logout();\r\n }\r\n },\r\n fail: function (error) {},\r\n });\r\n };\r\n $.checkoutScrollToTop = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\",\r\n });\r\n };\r\n});\r\n// To get / in DOB fields\r\nconst singleLineDateInputCustom = document.querySelectorAll(\r\n \".js-single-date-input\"\r\n);\r\nArray.prototype.forEach.call(singleLineDateInputCustom, (el) => {\r\n el.addEventListener(\"input\", function (e) {\r\n this.type = \"tel\";\r\n var input = this.value;\r\n if (/\\D\\/$/.test(input)) input = input.substr(0, input.length - 3);\r\n var values = input.split(\"/\").map(function (v) {\r\n return v.replace(/\\D/g, \"\");\r\n });\r\n if (values[0]) values[0] = checkValue(values[0], 31);\r\n if (values[1]) values[1] = checkValue(values[1], 12);\r\n\r\n var output = values.map(function (v, i) {\r\n return v.length == 2 && i < 2 ? v + \"/\" : v;\r\n });\r\n this.value = output.join(\"\").substr(0, 14);\r\n });\r\n\r\n el.addEventListener(\"blur\", function (e) {\r\n this.type = \"tel\";\r\n var input = this.value;\r\n var values = input.split(\"/\").map(function (v, i) {\r\n return v.replace(/\\D/g, \"\");\r\n });\r\n var output = \"\";\r\n\r\n if (values.length == 3) {\r\n var year =\r\n values[2].length !== 4\r\n ? parseInt(values[2]) + 2000\r\n : parseInt(values[2]);\r\n var month = parseInt(values[1]) - 1;\r\n var day = parseInt(values[0]);\r\n var d = new Date(year, month, day);\r\n if (!isNaN(d)) {\r\n var dates = [d.getDate(), d.getMonth() + 1, d.getFullYear()];\r\n output = dates\r\n .map(function (v) {\r\n v = v.toString();\r\n return v.length == 1 ? \"0\" + v : v;\r\n })\r\n .join(\"/\");\r\n }\r\n }\r\n this.value = output;\r\n });\r\n});\r\n\r\n// helper for Single Line Date Input\r\nfunction checkValue(str, max) {\r\n if (str.charAt(0) !== \"0\" || str == \"00\") {\r\n var num = parseInt(str);\r\n if (isNaN(num) || num <= 0 || num > max) num = 1;\r\n str =\r\n num > parseInt(max.toString().charAt(0)) && num.toString().length == 1\r\n ? \"0\" + num\r\n : num.toString();\r\n }\r\n return str;\r\n}\r\n\r\n// Home phone and mobiel phone formatting\r\nlet new_number, mobile_new_number;\r\nfunction homePhoneFormat(ele, restore) {\r\n let selection_start = ele.selectionStart,\r\n number = ele.value.replace(/\\D/g, \"\"),\r\n selection_end = ele.selectionEnd;\r\n if (number.length > 2) {\r\n new_number = number.substring(0, 2) + \" \";\r\n\r\n if (number.length === 3 || number.length === 4) {\r\n new_number += number.substr(2);\r\n } else if (number.length === 5) {\r\n new_number += number.substring(2, 5);\r\n }\r\n if (number.length === 6) {\r\n new_number += number.substring(2) + \" \";\r\n }\r\n if (number.length > 6) {\r\n new_number += number.substring(2, 6) + \" \" + number.substring(6);\r\n }\r\n } else {\r\n new_number = number;\r\n }\r\n\r\n ele.value = new_number;\r\n\r\n if (\r\n (new_number.slice(-1) === \" \" &&\r\n restore === false &&\r\n new_number.length === 8 &&\r\n selection_end === 7) ||\r\n (new_number.length === 4 && selection_end === 3)\r\n ) {\r\n selection_start = new_number.length;\r\n selection_end = new_number.length;\r\n } else if (restore === \"revert\") {\r\n selection_start--;\r\n selection_end--;\r\n }\r\n ele.setSelectionRange(selection_start, selection_end);\r\n}\r\nfunction mobilePhoneFormat(ele, restore) {\r\n let selection_start = ele.selectionStart,\r\n number = ele.value.replace(/\\D/g, \"\"),\r\n selection_end = ele.selectionEnd;\r\n\r\n if (number.length > 3) {\r\n mobile_new_number = number.substring(0, 4) + \" \";\r\n\r\n if (number.length === 5 || number.length === 6) {\r\n mobile_new_number += number.substr(4);\r\n }\r\n if (number.length === 7) {\r\n mobile_new_number += number.substring(4, 7) + \" \";\r\n }\r\n if (number.length > 7) {\r\n mobile_new_number += number.substring(4, 7) + \" \" + number.substring(7);\r\n }\r\n } else {\r\n mobile_new_number = number;\r\n }\r\n\r\n ele.value = mobile_new_number;\r\n\r\n if (\r\n (mobile_new_number.slice(-1) === \" \" &&\r\n restore === false &&\r\n mobile_new_number.length === 9 &&\r\n selection_end === 8) ||\r\n (mobile_new_number.length === 5 && selection_end === 4 && !restore)\r\n ) {\r\n selection_start = mobile_new_number.length;\r\n selection_end = mobile_new_number.length;\r\n } else if (restore === \"revert\") {\r\n selection_start--;\r\n selection_end--;\r\n } else if (\r\n mobile_new_number.length === 5 &&\r\n selection_end === 4 &&\r\n mobile_new_number.slice(-1) === \" \" &&\r\n restore\r\n ) {\r\n selection_start = mobile_new_number.length - 1;\r\n selection_end = mobile_new_number.length - 1;\r\n }\r\n ele.setSelectionRange(selection_start, selection_end);\r\n}\r\n$.checkFormatHomePhone = (field, e) => {\r\n var key_code = e.keyCode,\r\n key_string = e.key,\r\n press_delete = false,\r\n dash_key = 189,\r\n delete_key = [8, 46],\r\n direction_key = [33, 34, 35, 36, 37, 38, 39, 40],\r\n selection_end = field.selectionEnd;\r\n\r\n // delete key was pressed\r\n if (delete_key.indexOf(key_code) > -1) {\r\n press_delete = true;\r\n }\r\n\r\n // only force formatting is a number or delete key was pressed\r\n if (key_string.match(/^\\d+$/) || press_delete) {\r\n homePhoneFormat(field, press_delete);\r\n } else if (direction_key.indexOf(key_code) > -1) {\r\n // do nothing\r\n } else if (dash_key === key_code) {\r\n if (selection_end === field.value.length) {\r\n field.value = field.value.slice(0, -1);\r\n } else {\r\n field.value =\r\n field.value.substring(0, selection_end - 1) +\r\n field.value.substr(selection_end);\r\n field.selectionEnd = selection_end - 1;\r\n }\r\n } else {\r\n e.preventDefault();\r\n // field.value = field.value.replace(/[^0-9\\-]/g,'')\r\n homePhoneFormat(field, \"revert\");\r\n }\r\n};\r\n$.checkFormatMobilePhone = (field, e) => {\r\n var key_code = e.keyCode,\r\n key_string = e.key,\r\n press_delete = false,\r\n dash_key = 189,\r\n delete_key = [8, 46],\r\n direction_key = [33, 34, 35, 36, 37, 38, 39, 40],\r\n selection_end = field.selectionEnd;\r\n\r\n // delete key was pressed\r\n if (delete_key.indexOf(key_code) > -1) {\r\n press_delete = true;\r\n }\r\n\r\n // only force formatting is a number or delete key was pressed\r\n if (key_string.match(/^\\d+$/) || press_delete) {\r\n mobilePhoneFormat(field, press_delete);\r\n } else if (direction_key.indexOf(key_code) > -1) {\r\n // do nothing\r\n } else if (dash_key === key_code) {\r\n if (selection_end === field.value.length) {\r\n field.value = field.value.slice(0, -1);\r\n } else {\r\n field.value =\r\n field.value.substring(0, selection_end - 1) +\r\n field.value.substr(selection_end);\r\n field.selectionEnd = selection_end - 1;\r\n }\r\n } else {\r\n e.preventDefault();\r\n // field.value = field.value.replace(/[^0-9\\-]/g,'')\r\n mobilePhoneFormat(field, \"revert\");\r\n }\r\n};\r\n$.navigationICon = () => {\r\n const accountButtonsText = $(\".navigation-icon.account\").find(\r\n \".navigation-icon__text\"\r\n );\r\n if (accountButtonsText.length < 1) return;\r\n\r\n const firstAccountButton = $(accountButtonsText)[0];\r\n const accountButtonText = $(firstAccountButton).text();\r\n const originalText = accountButtonText + \"!\";\r\n if (originalText.length < 1) return;\r\n\r\n const words = originalText.split(\" \");\r\n\r\n updateButtonText();\r\n\r\n const debouncedResizeHandler = debounce(updateButtonText, 100);\r\n window.addEventListener(\"resize\", debouncedResizeHandler);\r\n\r\n function updateButtonText() {\r\n var screenWidth = $(window).width();\r\n var buttonText = originalText;\r\n\r\n if (screenWidth < 447) return;\r\n\r\n if (screenWidth >= 448) {\r\n if (words.length > 1) {\r\n const concatName =\r\n words[1].length > 6 ? words[1].substring(0, 5) + \"...!\" : words[1];\r\n buttonText = words[0] + \" \" + concatName;\r\n } else if (screenWidth < 1280) {\r\n buttonText =\r\n originalText.length > 6\r\n ? \"Hi \" + originalText.substring(0, 5) + \"...!\"\r\n : originalText;\r\n } else {\r\n buttonText = \"Hi \" + originalText;\r\n }\r\n }\r\n\r\n if (accountButtonText === \"Login\") buttonText = \"Login\";\r\n\r\n $(accountButtonsText).each((i, el) => {\r\n $(el).text(buttonText);\r\n $(el).attr(\"style\") && $(el).removeAttr(\"style\");\r\n });\r\n }\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n};\r\nfunction closeNavItems() {\r\n const mobileCollapse = $(\".navigation__mobile-wrapper\").find(\r\n \".collapse-custom\"\r\n );\r\n if (mobileCollapse.length < 1) return;\r\n\r\n $(mobileCollapse)\r\n .find(\".collapse-custom__item\")\r\n .each(function (currIndex) {\r\n const currGrpHead = $(this).find(\".collapse-custom__head\");\r\n const currGrpBody = $(this).find(\".collapse-custom__body\");\r\n const navAnchorUl = $(currGrpBody).find(\".navigation__ul.dropdown\");\r\n if (currGrpBody.length < 1 || currGrpHead.length < 1) return;\r\n let largestTransitionDuration = 0;\r\n // expecting a whole number in seconds\r\n const transitionAnimations = $(currGrpBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration ? (largestTransitionDuration = el) : null\r\n );\r\n $(currGrpBody).css(\"maxHeight\", \"0px\");\r\n setTimeout(() => {\r\n $(this).hasClass(\"collapse-item-expanded\") &&\r\n $(this).removeClass(\"collapse-item-expanded\");\r\n if ($(currGrpHead).hasClass(\"open\"))\r\n $(currGrpHead).removeClass(\"open\").attr(\"aria-expanded\", \"false\");\r\n if (!$(currGrpBody).hasClass(\"collapsed\"))\r\n $(currGrpBody).addClass(\"collapsed\").attr(\"aria-expanded\", \"false\");\r\n if ($(navAnchorUl).length > 0 && $(navAnchorUl).hasClass(\"active\"))\r\n $(navAnchorUl).removeClass(\"active\");\r\n }, largestTransitionDuration * 1000);\r\n });\r\n}\r\n\r\nfunction getTransitionDuration(clickedBody) {\r\n let largestTransitionDuration = 0;\r\n if ($(clickedBody).length > 0) {\r\n const transitionAnimations = $(clickedBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration ? (largestTransitionDuration = el) : null\r\n );\r\n }\r\n return largestTransitionDuration * 1000;\r\n}\r\n\r\n// HAMBURGER\r\n$(\".navigation__hamburger\").on(\"click\", function () {\r\n // HAMBURGER MAIN-MENU CLOSE\r\n if (!$(\".navigation__mobile-wrapper\").hasClass(\"translate-x-full\")) {\r\n $(\".navigation__mobile-wrapper\").addClass(\"translate-x-full\");\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n position: \"unset\",\r\n });\r\n $(this).removeClass(\"open\").attr(\"aria-expanded\", \"false\");\r\n closeNavItems();\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n\r\n setTimeout(() => {\r\n // wait until animation-transition is complete\r\n $(\".navigation__mobile-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-wrapper\")));\r\n return;\r\n }\r\n\r\n // HAMBURGER, LOGIN-MENU CLOSE\r\n if ($(\".navigation__mobile-login-wrapper\").length > 0) {\r\n if (!$(\".navigation__mobile-login-wrapper\").hasClass(\"translate-x-full\")) {\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n position: \"unset\",\r\n });\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"translate-x-full\");\r\n $(this).removeClass(\"open\").attr(\"aria-expanded\", \"false\");\r\n $(\".navigation__login > a:first-of-type\")\r\n .removeClass(\"open\")\r\n .attr(\"aria-expanded\", \"false\");\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"collapsed\");\r\n // remove click outside event listener\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n }, getTransitionDuration($(\".navigation__mobile-login-wrapper\")));\r\n return;\r\n }\r\n }\r\n\r\n $(\".navigation__mobile-wrapper\").toggleClass(\"collapsed\");\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n\r\n setTimeout(() => {\r\n $(this).toggleClass(\"open\").attr(\"aria-expanded\", \"true\");\r\n $(\".navigation__mobile-wrapper\").toggleClass(\"translate-x-full\");\r\n $(\"body\").css({\r\n \"overflow-y\": \"hidden\",\r\n position: \"fixed\",\r\n });\r\n // add click outside event listener\r\n $(document).on(\"click.manualClickOutside\", function (event) {\r\n var $target = $(event.target);\r\n if (!$target.closest(\".navigation__mobile-wrapper\").length) {\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n position: \"relative\",\r\n });\r\n if (!$(\".navigation__mobile-wrapper\").hasClass(\"translate-x-full\")) {\r\n $(\".navigation__mobile-wrapper\").addClass(\"translate-x-full\");\r\n $(\".navigation__hamburger\")\r\n .removeClass(\"open\")\r\n .attr(\"aria-expanded\", \"false\");\r\n closeNavItems();\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n\r\n setTimeout(() => {\r\n // wait until animation-transition is complete\r\n $(\".navigation__mobile-wrapper\").addClass(\"collapsed\");\r\n // remove click outside event listener\r\n $(document).off(\"click.manualClickOutside\");\r\n }, getTransitionDuration($(\".navigation__mobile-wrapper\")));\r\n return;\r\n }\r\n }\r\n });\r\n }, 5);\r\n});\r\n\r\n$.navigateToNextStep = (result) => {\r\n if (\r\n result.IsVip &&\r\n $(\"#checkoutContainer\").data(\"nvip-checkout\").toString().toLowerCase() ===\r\n \"false\"\r\n ) {\r\n $(\"#checkoutContainer\").replaceWith(result.AlreadySubscribedText);\r\n }\r\n if (result.SuccessHtml) {\r\n $(\"#accountSection\").find(\".account-btn-group\").addClass(\"hidden\");\r\n $(\"#accountSection\").find(\".existing-account\").addClass(\"hidden\");\r\n $(\"#accountSection\").html(result.SuccessHtml);\r\n // rebind logout button\r\n $.logout();\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") && $(\"#gift\").length > 0 && !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\").find(nextStep).trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n // To reload Header\r\n $.reloadHeader();\r\n};\r\n$.navigateStoredPayment = (data) => {\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n // To reload Header\r\n $.reloadHeader();\r\n if (data.IsVip) {\r\n $(\"#checkoutSubscribedContainer\").replaceWith(data.AlreadySubscribedText);\r\n }\r\n if (data.SuccessHtml) {\r\n $(\"#accountSection\").find(\".account-btn-group\").addClass(\"hidden\");\r\n\r\n $(\"#loggedInDisplay\").remove();\r\n $(\".existing-account\").append(data.SuccessHtml);\r\n $(\"#loggedInDisplay\").removeClass(\"hidden\");\r\n $(\".logged-in-section.semi-trusted-mode-content\").addClass(\"hidden\");\r\n\r\n // rebind logout button\r\n $.logout();\r\n }\r\n if ($(\"#gift\") && $(\"#gift\").length > 0 && !$(\"#gift\").hasClass(\"hidden\")) {\r\n $.retrieveGiftcontacts();\r\n }\r\n\r\n if (\r\n $(\".loginFormStoredPayment\").closest(\"#paymentSection\") &&\r\n $(\".loginFormStoredPayment\").closest(\"#paymentSection\").not(\".hidden\")\r\n .length > 0\r\n ) {\r\n $(\".reviewAndOrderBtn\").trigger(\"click\"); // take user to review and order page\r\n } else {\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") && $(\"#gift\").length > 0 && !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\").find(nextStep).trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n }\r\n $(\".loginFormStoredPayment\").addClass(\"hidden\");\r\n $(\"#navigateToReview\").removeClass(\"hidden\");\r\n $(\".reviewAndOrderBtn\").removeClass(\"disabled\");\r\n }\r\n};\r\n$.loggedInMenuClose = () => {\r\n $(\".navigation__mobile-close\").each(function () {\r\n $(this).on(\"click\", function () {\r\n $(\".navigation__mobile-wrapper\").addClass(\"translate-x-full\");\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"translate-x-full\");\r\n $(\".navigation__hamburger\")\r\n .removeClass(\"open\")\r\n .attr(\"aria-expanded\", \"false\");\r\n closeNavItems();\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-wrapper\").addClass(\"collapsed\");\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-wrapper\")));\r\n });\r\n });\r\n // LOGIN-MENU-MOBILE CLOSE\r\n $(\".navigation__login.status--logged-in > a:first-of-type\").on(\r\n \"click\",\r\n function () {\r\n if (!$(\".navigation__mobile-wrapper\").hasClass(\"translate-x-full\")) {\r\n $(\".navigation__mobile-wrapper\").addClass(\"translate-x-full\");\r\n closeNavItems();\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-wrapper\")));\r\n }\r\n\r\n if (\r\n !$(\".navigation__mobile-login-wrapper\").hasClass(\"translate-x-full\")\r\n ) {\r\n $(\".navigation__mobile-login-wrapper\").toggleClass(\"translate-x-full\");\r\n $(\".navigation__hamburger\")\r\n .removeClass(\"open\")\r\n .attr(\"aria-expanded\", \"false\");\r\n $(this).toggleClass(\"open\").attr(\"aria-expanded\", \"true\");\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-login-wrapper\")));\r\n return;\r\n }\r\n\r\n $(\".navigation__mobile-login-wrapper\").removeClass(\"collapsed\");\r\n\r\n // LOGIN-MENU-MOBILE OPEN\r\n setTimeout(() => {\r\n $(\".navigation__hamburger\")\r\n .addClass(\"open\")\r\n .attr(\"aria-expanded\", \"true\");\r\n $(this).toggleClass(\"open\").attr(\"aria-expanded\", \"true\");\r\n $(\".navigation__mobile-login-wrapper\").toggleClass(\"translate-x-full\");\r\n\r\n // add click outside event listener\r\n $(document).on(\"click.manualClickOutside\", function (event) {\r\n var $target = $(event.target);\r\n if (!$target.closest(\".navigation__mobile-login-wrapper\").length) {\r\n if (\r\n !$(\".navigation__mobile-login-wrapper\").hasClass(\r\n \"translate-x-full\"\r\n )\r\n ) {\r\n $(\".navigation__mobile-login-wrapper\").toggleClass(\r\n \"translate-x-full\"\r\n );\r\n $(\".navigation__hamburger\")\r\n .removeClass(\"open\")\r\n .attr(\"aria-expanded\", \"false\");\r\n $(\".navigation__login.status--logged-in > a:first-of-type\")\r\n .toggleClass(\"open\")\r\n .attr(\"aria-expanded\", \"true\");\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"collapsed\");\r\n $(document).off(\"click.manualClickOutside\");\r\n }, getTransitionDuration($(\".navigation__mobile-login-wrapper\")));\r\n }\r\n }\r\n });\r\n }, getTransitionDuration($(\".navigation__mobile-login-wrapper\")));\r\n }\r\n );\r\n $.retrieveGiftcontacts = () => {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/giftcheckout/retrievegiftcontacts\",\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if (result) {\r\n if (result.Data.Contacts && result.Data.Contacts.Total > 0) {\r\n $.fillGiftDropdown(result.Data.Contacts.Results);\r\n }\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n };\r\n $.validator.addMethod(\r\n \"ausLandlineOrMobile\",\r\n function (value, element) {\r\n $.validator.messages.ausLandlineOrMobile = \"Phone number is invalid\";\r\n if (!value.startsWith(\"0\")) {\r\n $.validator.messages.ausLandlineOrMobile =\r\n \"Phone number must begin with a “0”\";\r\n return false;\r\n }\r\n\r\n const ausLandlineStartingPattern = /^(?:\\+?61|0)[2378]/;\r\n const ausMobileStartingPattern = /^(?:\\+?61|0)4/;\r\n\r\n const ausLandlinePattern = /^(?:\\+?61|\\(?0)[2378]\\)?(?:[ -]?[0-9]){8}$/;\r\n const ausMobilePattern = /^(?:\\+?61|0)4\\)?(?:[ -]?[0-9]){7}[0-9]$/;\r\n\r\n if (new RegExp(ausLandlineStartingPattern).test(value)) {\r\n $(element).data(\"phone-type\", \"landline\");\r\n }\r\n\r\n if (new RegExp(ausMobileStartingPattern).test(value)) {\r\n $(element).data(\"phone-type\", \"mobile\");\r\n }\r\n\r\n let isAusLandline = new RegExp(ausLandlinePattern).test(value);\r\n let isAusMobile = new RegExp(ausMobilePattern).test(value);\r\n\r\n if (!isAusLandline && !isAusMobile) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n },\r\n \"Phone number is invalid\"\r\n );\r\n\r\n $.resetFloatingFieldValidation = function ($el) {\r\n var $field = $el.closest(\".floating-field\");\r\n $field.removeClass(\"floating-field--invalid\");\r\n $field.find(\".floating-label-error\").html(\"\");\r\n $field.find(\".floating-label-error\").removeClass(\"field-validation-error\");\r\n };\r\n\r\n $.calculateAge = (value) => {\r\n // set up max allowed date as 18 years of age based on today's date\r\n const maxAllowedDate = new Date();\r\n maxAllowedDate.setYear(maxAllowedDate.getFullYear() - 18);\r\n const dateEntered = $.dateFromString(value);\r\n if (dateEntered != null && isNaN(dateEntered) === false) {\r\n // the date is valid, now also check that the user is over 18 years of age and hasn't entered a date that makes them older than 110 and return true if both conditions are met\r\n if ($.dateFromString(value) > maxAllowedDate) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n\r\n $.validateDate = (dateVal) => {\r\n const date = dateVal.split(\"/\");\r\n if (date.length !== 3) {\r\n return false;\r\n }\r\n const day = parseInt(date[0], 10);\r\n const month = parseInt(date[1], 10);\r\n const year = parseInt(date[2], 10);\r\n if (isNaN(month) || isNaN(day) || isNaN(year)) {\r\n return false;\r\n }\r\n if (month < 1 || month > 12) {\r\n return false;\r\n }\r\n // To check leap year\r\n function isLeapYear(year) {\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n }\r\n const numberOfDays = [\r\n 0,\r\n 31,\r\n isLeapYear(year) ? 29 : 28,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n ];\r\n return day >= 1 && day <= numberOfDays[month];\r\n };\r\n};\r\n\r\n// Floating field related code starts\r\n\r\n$.validator.setDefaults({\r\n focusInvalid: false,\r\n onkeyup: false,\r\n onclick: function (element) {\r\n let { $field, tagName } = getJqElandJqField(element);\r\n if ($field) {\r\n return tagName === \"SELECT\" ? false : true;\r\n }\r\n },\r\n highlight: highlightFloatingField,\r\n unhighlight: unHighlightFloatingField,\r\n});\r\n\r\nfunction highlightFloatingField(element) {\r\n let { $field } = getJqElandJqField(element);\r\n if ($field) {\r\n $field.addClass(\"floating-field--invalid\");\r\n }\r\n return true;\r\n}\r\n\r\nfunction unHighlightFloatingField(element) {\r\n let { $field } = getJqElandJqField(element);\r\n if ($field) {\r\n $field.removeClass(\"floating-field--invalid\");\r\n }\r\n return true;\r\n}\r\n\r\nconst $floatingFormField = $(\".floating-field\");\r\n\r\n$floatingFormField.find(\"input, select, textarea\").on(\"focus\", floatingFieldFocusHandler);\r\n$floatingFormField.find(\"input, select, textarea\").on(\"blur\", validateFloatingField);\r\n$floatingFormField.find(\"input, textarea\").on(\"keyup\", validateFloatingField);\r\n\r\nfunction setOnceErrored($el) {\r\n $el.data(\"onceErrored\", true);\r\n}\r\n\r\n// Wrap runValidationForElement with debounce\r\nconst debouncedRunValidationForElement = debounceFieldValidator(runValidationForElement, .3);\r\n\r\nfunction validateFloatingField(event) {\r\n let { $el } = getJqElandJqField(event.target);\r\n switch (event.type) {\r\n case \"blur\":\r\n if (!isAddressFieldAndIsSuggestionListOpen(event)) {\r\n floatingFieldBlurHandler(event);\r\n }\r\n break;\r\n case \"keyup\":\r\n if (!$el.hasClass(\"address-typeahead\")) {\r\n if($el.data(\"onceErrored\")) {\r\n debouncedRunValidationForElement(event);\r\n }\r\n }\r\n break;\r\n default:\r\n // handle other cases if needed\r\n break;\r\n }\r\n}\r\n\r\nfunction debounceFieldValidator(func, wait) {\r\n let timeout;\r\n return function(...args) {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func.apply(this, args), wait);\r\n };\r\n}\r\n\r\nfunction isAddressFieldAndIsSuggestionListOpen(event) {\r\n let { $el, $field } = getJqElandJqField(event.target);\r\n if($el.hasClass(\"address-typeahead\") && $field.find(\".ui-widget-content\").css(\"display\") === \"block\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction getJqElandJqField(element) {\r\n let $el = $(element);\r\n let tagName = $el.prop(\"tagName\");\r\n let $field = $el.closest(\".floating-field\").length\r\n ? $el.closest(\".floating-field\")\r\n : null;\r\n let $form = $el.closest(\"form\").length ? $el.closest(\"form\") : null;\r\n return {\r\n $el,\r\n $field,\r\n $form,\r\n tagName,\r\n };\r\n}\r\n\r\nfunction runValidationForElement(event) {\r\n let { $el, tagName } = getJqElandJqField(event.target);\r\n if (tagName === \"INPUT\" || tagName === \"TEXTAREA\") adjustErrorMessageForValidation(event);\r\n\r\n let isValid = $el.valid();\r\n if (!isValid) {\r\n setOnceErrored($el);\r\n }\r\n}\r\n\r\nfunction floatingFieldFocusHandler(event) {\r\n let { $field } = getJqElandJqField(event.target);\r\n $field.addClass([\"floating-field--focused\", \"floating-field--dirty\"]);\r\n}\r\n\r\nfunction floatingFieldBlurHandler(event) {\r\n let { $field } = getJqElandJqField(event.target);\r\n $field.removeClass(\"floating-field--focused\");\r\n runValidationForElement(event);\r\n}\r\n\r\nfunction adjustErrorMessageForValidation(event) {\r\n const $el = $(event.target);\r\n\r\n const value = $el.val().trim();\r\n if (value) {\r\n const msg = makeMessageForRegexField($el);\r\n if (msg) {\r\n const fieldName = $el.attr(\"name\");\r\n $el.closest(\"form\").validate().settings.messages[fieldName][\"regex\"] =\r\n msg;\r\n }\r\n }\r\n}\r\n\r\nfunction makeMessageForRegexField($element) {\r\n const errorMessageTemplate = $element.data(\"val-regex\");\r\n const { regex: pattern } = $element.rules();\r\n const value = $element.val().trim();\r\n\r\n if (!errorMessageTemplate || !pattern || !value) return null;\r\n\r\n const regex = new RegExp(pattern.replace(/['\"]/g, \"/\"));\r\n if (regex.test(value)) return null;\r\n\r\n // Iterate through each character of the value\r\n for (let i = 0; i < value.length; i++) {\r\n const character = value[i];\r\n if (!regex.test(character)) {\r\n // Found the problematic character, return modified error message\r\n return errorMessageTemplate.replace(\"{}\", `\"${character}\"`);\r\n }\r\n }\r\n}\r\n\r\n// If input values are already filled by the time page is loaded, make floating label correct\r\n $(document).ready(function () {\r\n let $validField = $('form')\r\n .find(\".floating-field:not(.hidden)\");\r\n if ($validField.length) {\r\n if ($validField.find(\"input\").length > 0) {\r\n let inputField = $validField.find(\"input\");\r\n inputField.each(function(index,data) {\r\n if ($(this).val()) {\r\n $(this)\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n }\r\n });\r\n }\r\n }\r\n \r\n });\r\n\r\n$.focusFirstInvalidField = (e) => {\r\n let $form = $(e.target).is('form') ? $(e.target) : $(e.target).closest('form');\r\n let $firstInvalidField = $form\r\n .find(\".floating-field--invalid:not(.hidden)\")\r\n .first();\r\n if ($firstInvalidField.length) {\r\n let inputField = $firstInvalidField.find(\"input\").first();\r\n let selectField = $firstInvalidField.find(\"select\");\r\n\r\n if (inputField.length > 0) {\r\n inputField.focus();\r\n } else if (selectField.length > 0) {\r\n selectField.focus();\r\n setTimeout(function () {\r\n selectField.blur();\r\n }, 250);\r\n }\r\n }\r\n}\r\n\r\n$.handleEngageIdentity = () => {\r\n\r\n if(window.engage){\r\n $.get(\"/rslsitecoreapi/accountanalytics/accountinfoforengage\",\r\n function (result) {\r\n if (result && result.Data && result.Data.user) {\r\n \r\n var user = JSON.parse(result.Data.user);\r\n \r\n var extensionData = {\r\n isVip: user.IsVIP,\r\n loginState: user.LoggedInState,\r\n state: user.AddressState,\r\n vipStatus: user.VIPStatus,\r\n daysSinceVIP: user.DaysSinceVIP,\r\n totalOrders: user.TotalOrders\r\n };\r\n \r\n var dlUserId = user.CustomerId;\r\n if (dlUserId === null || dlUserId === undefined || dlUserId === 'undefined' || dlUserId === 'null'){\r\n dlUserId = '';\r\n }\r\n var identifiers = [{\r\n id: dlUserId,\r\n provider: \"userID\"\r\n }];\r\n var browserId = window.engage.getBrowserId();\r\n if (dlUserId === ''){\r\n identifiers = [{\r\n id: browserId,\r\n provider: \"browser_id\"\r\n }];\r\n }\r\n var eventData = {\r\n channel: \"WEB\",\r\n currency: \"AUD\",\r\n pointOfSale: \"ArtUnion\",\r\n language: \"EN\",\r\n page: window.location.href,\r\n params: extensionData,\r\n identifiers: identifiers\r\n };\r\n\r\n // Send IDENTITY event to Sitecore Personalize\r\n window.engage.identity(eventData, extensionData);\r\n // DEBUGGING\r\n console.log(\"identity:\", eventData, extensionData);\r\n \r\n }\r\n }\r\n );\r\n }\r\n};\r\n\r\n// Floating field related code ends\r\n\r\n//for semitrusted login on checkout page\r\n$(\"#paymentSection\").find(\".loginFormStoredPayment\").find('.form-control').attr('id','semiTrustedPaymentPassword');\r\n$(\"#paymentSection\").find(\".loginFormStoredPayment\").find('.form-control').attr('name','Password');\r\n$(\"#paymentSection\").find(\".loginFormStoredPayment\").find(\"label\").attr('for','semiTrustedPaymentPassword');\r\n$(\"#paymentSection\").find(\".loginFormStoredPayment\").find(\".floating-label-error\").data('valmsg-for','Password');","$(document).ready(function () {\r\n const subscribePanel = $('.subscribe-now-panel');\r\n if (subscribePanel.length < 1) return;\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function() {\r\n var context = this, args = arguments;\r\n var later = function() {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n };\r\n\r\n const appendDrawTerms = (el) => {\r\n const drawTerms = $(el).find('.subscribe-now-panel__tcs');\r\n const drawTermsAnchor = $(drawTerms).find('a');\r\n \r\n if (drawTermsAnchor) {\r\n if ($(window).outerWidth() < 480) {\r\n if ($(drawTerms).css(\"transform\") === \"translateX(-50%)\")\r\n return;\r\n $(drawTerms).css({ \r\n left: \"50%\",\r\n bottom: \"1.25rem\",\r\n top: \"auto\",\r\n transform: \"translateX(-50%)\",\r\n });\r\n } else {\r\n const rightColInner = $(el).find(\r\n \".subscribe-now-panel__col-right__inner\"\r\n );\r\n\r\n if (rightColInner.length < 1) return;\r\n\r\n const rightColInnerLeftPos =\r\n Math.round($(rightColInner).position().left);\r\n\r\n const rightColInnerHeight = Math.round(\r\n $(rightColInner).outerHeight()\r\n );\r\n\r\n const rightColInnerTopPos = Math.round(\r\n $(rightColInner).position().top\r\n );\r\n \r\n if ($(drawTerms).css(\"transform\") != \"none\") $(drawTerms).removeAttr(\"style\");\r\n\r\n $(drawTerms).css({\r\n left: rightColInnerLeftPos + \"px\",\r\n top: rightColInnerTopPos + rightColInnerHeight + \"px\",\r\n });\r\n }\r\n $(drawTermsAnchor).attr('style') && $(drawTermsAnchor).removeAttr('style');\r\n }\r\n }\r\n \r\n setTimeout(() => {\r\n $(subscribePanel).each((undefined, el) => {\r\n $(el).find('.subscribe-now-panel__tcs').length > 0 && appendDrawTerms(el);\r\n })\r\n }, 100);\r\n\r\n\r\n const debouncedResizeHandler = debounce(function() {\r\n $(subscribePanel).each((undefined, el) => {\r\n $(el).find('.subscribe-now-panel__tcs').length > 0 && appendDrawTerms(el);\r\n });\r\n }, 100);\r\n\r\n $(window).on(\"resize\", debouncedResizeHandler); \r\n});","import lity from \"lity\";\r\n$(() => {\r\n const $changeSubscription = $(\"#changeSubscription\");\r\n const $changeMembershipBtn = $changeSubscription.find(\"#changeMemberhip\");\r\n const $newMembership = $(\"#changeSubscriptionModal\").find(\"#newMembership\");\r\n const $currentMembership = $(\"#changeSubscriptionModal\").find(\r\n \"#currentMembership\"\r\n );\r\n const $confirmSubscriptionChange = $(\"#confirmSubscriptionChange\");\r\n const $changeSubscriptionModal = $(\"#changeSubscriptionModal\");\r\n const $membershipViewSection = $(\"#membershipViewSection\");\r\n let currentSubscription,\r\n selectedSubscriptionId,\r\n subscriptionId,\r\n $existingSubscription,\r\n mostPopular,\r\n bestValue;\r\n if (\r\n $(\".subscription-container\").find(\".ticket-selector\") &&\r\n $(\".subscription-container\").find(\".ticket-selector\").length > 0\r\n ) {\r\n $(\".subscription-container\")\r\n .find(\".ticket-selector\")\r\n .find(\"a.ticket\")\r\n .each(function () {\r\n if ($(this).data(\"most-popular\") !== \"\") {\r\n mostPopular = $(this).data(\"most-popular\");\r\n }\r\n if ($(this).data(\"best-value\") !== \"\") {\r\n bestValue = $(this).data(\"best-value\");\r\n }\r\n if ($(this).data(\"current-subscription\").toLowerCase() === \"true\") {\r\n $changeMembershipBtn.addClass(\"disabled\");\r\n $(this).addClass(\"updated-subscription\");\r\n $existingSubscription = $(this).find(\".ticket\");\r\n } else {\r\n $changeMembershipBtn.removeClass(\"disabled\");\r\n $(this).removeClass(\"updated-subscription\");\r\n }\r\n });\r\n selectedSubscriptionId = $(\".slick-current\")\r\n .find(\".ticket\")\r\n .data(\"subscription-id\");\r\n currentSubscription = $(\".slick-current\")\r\n .find(\".ticket\")\r\n .data(\"current-subscription\");\r\n }\r\n\r\n $(\".btn.change-memberhip\").on(\"click\", function (e) {\r\n $.updateTicketSpreadDetails(\r\n $(\".slick-current\").find(\".ticket\"),\r\n $(\".ticket.updated-subscription\")\r\n );\r\n });\r\n\r\n let newMembershipAmount, selectedSubscription;\r\n\r\n // On click of arrows\r\n $(document).on(\"click\", \"#changeSubscription .slick-arrow\", function () {\r\n changeSubscriptionValues($(\".slick-center\").find(\".ticket\"));\r\n });\r\n // On click of each subscription ticket\r\n $(document).on(\"click\", \"#changeSubscription .slick-slide\", function () {\r\n changeSubscriptionValues($(this).find(\".ticket\"));\r\n });\r\n\r\n if ($(\"#changeSubscription\") && $(\"#changeSubscription\").length > 0) {\r\n if (\r\n $(\"#changeSubscription\").data(\"exp-editor\").toString().toLowerCase() !==\r\n \"false\"\r\n ) {\r\n $changeMembershipBtn.on(\"click\", function (e) {\r\n $changeSubscriptionModal.show();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $changeSubscriptionModal.hide();\r\n });\r\n }\r\n }\r\n\r\n if ($(\"#membershipPanel\") && $(\"#membershipPanel\").length > 0) {\r\n if (\r\n $(\"#membershipPanel\").data(\"exp-editor\").toString().toLowerCase() !==\r\n \"false\"\r\n ) {\r\n $(\"#viewMembershipBtn\").on(\"click\", function (e) {\r\n $(\"#membershipViewSection\").show();\r\n });\r\n $(\"#cancelMembership\").on(\"click\", function (e) {\r\n $(\"#cancelSubscriptionModal\").show();\r\n $(\"#cancelSubscriptionStep2\").show();\r\n $(\"#cancelSubscriptionStep3\").show();\r\n $(\"#cancelSubscriptionStep4\").show();\r\n $(\"#cancelSubscriptionStep4\").removeClass(\"lity\");\r\n $(\"#cancelSubscriptionStep4Pause\").show();\r\n $(\"#cancelSubscriptionStep4Pause\").removeClass(\"lity\");\r\n });\r\n $(\"#cancelSubscriptionModal\")\r\n .find(\".modal-close\")\r\n .on(\"click\", function (e) {\r\n $(\"#cancelSubscriptionModal\").hide();\r\n });\r\n $(\"#cancelSubscriptionStep4\")\r\n .find(\".close-btn\")\r\n .on(\"click\", function (e) {\r\n $(\"#cancelSubscriptionStep4\").hide();\r\n });\r\n $(\"#cancelSubscriptionStep4Pause\")\r\n .find(\".close-btn\")\r\n .on(\"click\", function (e) {\r\n $(\"#cancelSubscriptionStep4Pause\").hide();\r\n });\r\n\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $(\"#membershipViewSection\").hide();\r\n });\r\n }\r\n }\r\n\r\n $(\"#changeSubscriptionModal\")\r\n .find(\".modal-close\")\r\n .on(\"click\", (e) => {\r\n lity(\"#subscriptionConfirmModal\");\r\n });\r\n\r\n // On click of no button\r\n $(\"#subscriptionConfirmModal\")\r\n .find(\".no-btn\")\r\n .on(\"click\", (e) => {\r\n e.preventDefault();\r\n if (\r\n $(\"#changeSubscriptionModal\") &&\r\n $(\"#changeSubscriptionModal\").length > 0\r\n ) {\r\n $.showConfirmationModal(\"#changeSubscriptionModal\");\r\n }\r\n $(\".modal.confirmation-modal\").find(\".modal-close\").trigger(\"click\");\r\n });\r\n\r\n // on click of confirm change button\r\n $confirmSubscriptionChange.on(\"click\", function (e) {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n e.preventDefault();\r\n\r\n const $this = $(this);\r\n const $changesubscriptionContainer = $this.closest('#changeSubscriptionModal');\r\n const oldSubscriptionValue = $changesubscriptionContainer\r\n .find('.current-membership').find('.membership-amount').html();\r\n const newSubscriptionValue = $changesubscriptionContainer\r\n .find('.new-membership').find('.membership-amount').html();\r\n selectedSubscriptionId = $(\".slick-current\")\r\n .find(\".ticket\")\r\n .data(\"subscription-id\");\r\n const formatSelectedSubscriptionValue = $newMembership\r\n .find(\".membership-amount\")\r\n .html();\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n jQuery\r\n .ajax({\r\n url: $this.data(\"ajax-update-subscription-url\"),\r\n method: \"POST\",\r\n data: {\r\n subscriptionID: selectedSubscriptionId,\r\n subscriptionValue: formatSelectedSubscriptionValue,\r\n GoogleReCaptchaToken: token,\r\n },\r\n success: function success(data) {\r\n $confirmSubscriptionChange.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n if (!data.ApiError) {\r\n if (data.RedirectUrl) {\r\n systemNotification.error(\r\n $this.data(\"error-title\"),\r\n $this.data(\"error-message\"),\r\n $this.data(\"error-button\")\r\n );\r\n } else {\r\n $this.parents(\".lity\").hide();\r\n const $existingSubscription = $(\".ticket.updated-subscription\");\r\n if (\r\n $existingSubscription.data(\"most-popular\") === mostPopular\r\n ) {\r\n $existingSubscription.attr(\"data-ticket-title\", mostPopular);\r\n } else if (\r\n $existingSubscription.data(\"best-value\") === bestValue\r\n ) {\r\n $existingSubscription.attr(\"data-ticket-title\", bestValue);\r\n } else {\r\n $existingSubscription.attr(\"data-ticket-title\", \"\");\r\n }\r\n // Adjusting slide based on new current subscription\r\n $(\".ticket-selector .carousel\")\r\n .find(\".slick-slide\")\r\n .each(function () {\r\n if (\r\n $(this).find(\".ticket\").data(\"subscription-id\") ===\r\n selectedSubscriptionId\r\n ) {\r\n $(this).find(\".ticket\").addClass(\"updated-subscription\");\r\n $(this)\r\n .find(\".ticket\")\r\n .attr(\"data-current-subscription\", \"True\");\r\n $changeMembershipBtn.addClass(\"disabled\");\r\n $(this)\r\n .find(\".ticket\")\r\n .attr(\"data-ticket-title\", \"Current membership\");\r\n const currentMembershipTitle = $(this)\r\n .find(\".ticket\")\r\n .attr(\"data-ticket-title\");\r\n $(\".subscription-container\")\r\n .find(\".ticket-title\")\r\n .html(currentMembershipTitle);\r\n } else {\r\n $(this)\r\n .find(\".ticket\")\r\n .removeClass(\"updated-subscription\");\r\n $(this)\r\n .find(\".ticket\")\r\n .attr(\"data-current-subscription\", \"False\");\r\n $changeMembershipBtn.removeClass(\"disabled\");\r\n }\r\n\r\n if (\r\n $(this).find(\".ticket\").data(\"subscription-id\") ===\r\n selectedSubscriptionId &&\r\n $(this).find(\".ticket\").data(\"ticket-value\") !== \"1000\"\r\n ) {\r\n $(this).closest(\".slick-slide\").next().trigger(\"click\");\r\n }\r\n });\r\n // To update view memebrship details\r\n changeViewMembershipDetails();\r\n $.trackSubscriptionChange($(\"#confirmSubscriptionChange\"), oldSubscriptionValue, newSubscriptionValue);\r\n systemNotification.success(\r\n $this.data(\"success-title\"),\r\n $this.data(\"success-message\"),\r\n $this.data(\"success-button\")\r\n );\r\n }\r\n } else {\r\n if (data && data.ApiError && data.ApiError.ResponseStatus) {\r\n if (\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\" ||\r\n data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidEmailException\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n } else {\r\n systemNotification.error(\r\n $this.data(\"error-title\"),\r\n $this.data(\"error-message\"),\r\n $this.data(\"error-button\")\r\n );\r\n }\r\n }\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n $confirmSubscriptionChange.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n if (error && error.status === 401) {\r\n // If user is in semi trusted mode, then redirect to login page\r\n $.redirectToLoginPageWithReturnUrl();\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n }, \"ChangeSubscription\");\r\n });\r\n\r\n function changeViewMembershipDetails() {\r\n const $genDetails = $membershipViewSection.find(\".gen-ticket-details\");\r\n const $gtDetails = $membershipViewSection.find(\".gt-details\");\r\n const heading = $membershipViewSection.find(\".selected-subscription\");\r\n const amount = $(\".my-membership\").find(\".subscription-amount\");\r\n const updatedticketValue = $(\".ticket.updated-subscription\").data(\r\n \"ticket-value\"\r\n );\r\n heading.text(updatedticketValue);\r\n amount.text(updatedticketValue);\r\n // Ticket count\r\n const newGenTicketCount = $(\".ticket.updated-subscription\").data(\r\n \"gen-total-tickets\"\r\n );\r\n var newGenTicketWording = $(\".ticket.updated-subscription\").data(\r\n \"gen-total-tickets-text\"\r\n );\r\n const newGtCount = $(\".ticket.updated-subscription\").data(\r\n \"gt-total-tickets\"\r\n );\r\n var newGtTicketWording = $(\".ticket.updated-subscription\").data(\r\n \"gt-total-tickets-text\"\r\n );\r\n\r\n // Gen Ticket values / Wording\r\n $membershipViewSection\r\n .find(\".gen-ticket-details\")\r\n .find(\".tickets-count\")\r\n .find(\".new-value\")\r\n .html(newGenTicketCount);\r\n $membershipViewSection\r\n .find(\".gen-ticket-details\")\r\n .find(\".tickets-count\")\r\n .find(\".label-heading\")\r\n .html(newGenTicketWording);\r\n\r\n // Gt Ticket values / Wording\r\n $membershipViewSection\r\n .find(\".gt-details\")\r\n .find(\".tickets-count\")\r\n .find(\".new-value\")\r\n .html(newGtCount);\r\n $membershipViewSection\r\n .find(\".gt-details\")\r\n .find(\".tickets-count\")\r\n .find(\".label-heading\")\r\n .html(newGtTicketWording);\r\n\r\n // Book bonus gold\r\n const newGenBookBonusValue = $(\".ticket.updated-subscription\").data(\r\n \"gen-bonus-gold\"\r\n );\r\n const newGtBookBonusValue = $(\".ticket.updated-subscription\").data(\r\n \"gt-bonus-gold\"\r\n );\r\n // Gen Book Bonus Value\r\n $membershipViewSection\r\n .find(\".gen-ticket-details\")\r\n .find(\".book-bonus\")\r\n .find(\".new-value\")\r\n .html(newGenBookBonusValue);\r\n\r\n // Gt Bonus Bookbook value\r\n $membershipViewSection\r\n .find(\".gt-details\")\r\n .find(\".book-bonus\")\r\n .find(\".new-value\")\r\n .html(newGtBookBonusValue);\r\n\r\n // Bonus tickets\r\n // To populate 'bonus' ticket details for both gen and gt\r\n const newGenBonusValue = $(\".ticket.updated-subscription\").data(\r\n \"gen-bonus-tickets\"\r\n );\r\n const $genTicketBonusDetails = $(\"#membershipViewSection\").find(\r\n \".gen-ticket-details\"\r\n );\r\n\r\n var newGenBonusTicketWording = $(\".ticket.updated-subscription\").data(\r\n \"gen-bonus-tickets-text\"\r\n );\r\n\r\n if (newGenBonusValue === 0 && newGenBookBonusValue !== `$0`) {\r\n $genTicketBonusDetails.find(\".no-bonus-tickets\").removeClass(\"hidden\");\r\n $genTicketBonusDetails.find(\".existing-bonus-tickets\").addClass(\"hidden\");\r\n $genTicketBonusDetails.find(\".no-bonus-tickets-gold\").addClass(\"hidden\");\r\n } else if (newGenBonusValue === 0 && newGenBookBonusValue === `$0`) {\r\n $genTicketBonusDetails\r\n .find(\".no-bonus-tickets-gold\")\r\n .removeClass(\"hidden\");\r\n $genTicketBonusDetails.find(\".existing-bonus-tickets\").addClass(\"hidden\");\r\n $genTicketBonusDetails.find(\".no-bonus-tickets\").addClass(\"hidden\");\r\n } else {\r\n // Update bonus value\r\n $genTicketBonusDetails\r\n .find(\".bonus-details\")\r\n .find(\".new-value\")\r\n .html(newGenBonusValue);\r\n\r\n // Update bonus wording\r\n $genTicketBonusDetails\r\n .find(\".bonus-details\")\r\n .find(\".bonus-ticket-text\")\r\n .html(newGenBonusTicketWording);\r\n\r\n $genTicketBonusDetails.find(\".no-bonus-tickets\").addClass(\"hidden\");\r\n $genTicketBonusDetails.find(\".no-bonus-tickets-gold\").addClass(\"hidden\");\r\n $genTicketBonusDetails\r\n .find(\".existing-bonus-tickets\")\r\n .removeClass(\"hidden\");\r\n }\r\n const newGTBonusValue = $(\".ticket.updated-subscription\").data(\r\n \"gt-bonus-tickets\"\r\n );\r\n var newGtBonusTicketWording = $(\".ticket.updated-subscription\").data(\r\n \"gt-bonus-tickets-text\"\r\n );\r\n\r\n if (newGTBonusValue === 0 && newGtBookBonusValue !== `$0`) {\r\n $gtDetails.find(\".no-bonus-tickets\").removeClass(\"hidden\");\r\n $gtDetails.find(\".existing-bonus-tickets\").addClass(\"hidden\");\r\n $gtDetails.find(\".no-bonus-tickets-gold\").addClass(\"hidden\");\r\n } else if (newGenBonusValue === 0 && newGenBookBonusValue === `$0`) {\r\n $gtDetails.find(\".no-bonus-tickets-gold\").removeClass(\"hidden\");\r\n $gtDetails.find(\".existing-bonus-tickets\").addClass(\"hidden\");\r\n $gtDetails.find(\".no-bonus-tickets\").addClass(\"hidden\");\r\n } else {\r\n // Update bonus value\r\n $gtDetails\r\n .find(\".bonus-details\")\r\n .find(\".new-value\")\r\n .html(newGTBonusValue);\r\n\r\n // Update bonus wording\r\n $gtDetails\r\n .find(\".bonus-details\")\r\n .find(\".bonus-ticket-text\")\r\n .html(newGtBonusTicketWording);\r\n\r\n $gtDetails.find(\".no-bonus-tickets\").addClass(\"hidden\");\r\n $gtDetails.find(\".no-bonus-tickets-gold\").addClass(\"hidden\");\r\n $gtDetails.find(\".existing-bonus-tickets\").removeClass(\"hidden\");\r\n }\r\n }\r\n\r\n function changeSubscriptionValues($this) {\r\n // To enable or disable button\r\n selectedSubscription = $this.data(\"ticket-value\");\r\n $(\"#changeSubscription\")\r\n .find(\".selected-ticket\")\r\n .text(selectedSubscription);\r\n if ($this.hasClass(\"updated-subscription\")) {\r\n $changeMembershipBtn.addClass(\"disabled\");\r\n } else {\r\n $changeMembershipBtn.removeClass(\"disabled\");\r\n }\r\n // To update current membership title\r\n const ticketTitle = $this.attr(\"data-ticket-title\");\r\n $(\".subscription-container\").find(\".ticket-title\").html(ticketTitle);\r\n\r\n newMembershipAmount = $this.data(\"ticket-value\");\r\n subscriptionId = $this.data(\"subscription-id\");\r\n $newMembership.find(\".subscription-id\").html(subscriptionId);\r\n // To populate new and current membership amount\r\n $newMembership.find(\".membership-amount\").html(\"$\" + newMembershipAmount);\r\n\r\n const currentMembershipAmount = $(\".ticket.updated-subscription\").data(\r\n \"ticket-value\"\r\n );\r\n $currentMembership\r\n .find(\".membership-amount\")\r\n .html(\"$\" + currentMembershipAmount);\r\n $.updateTicketSpreadDetails($this, $(\".ticket.updated-subscription\"));\r\n }\r\n});\r\n","import lity from \"lity\";\r\nimport moment from \"moment\";\r\n$(() => {\r\n const $cancelSubscriptionModal = $(\"#cancelSubscriptionModal\");\r\n const $cancelSubscriptionContainer = $cancelSubscriptionModal.find(\r\n \".cancel-subscription-step\"\r\n );\r\n \r\n const hasDebugAttr = $cancelSubscriptionContainer.attr('debug-mode');\r\n const debugModeOn = typeof hasDebugAttr !== 'undefined' && hasDebugAttr !== false ? 'true' : 'false';\r\n const $cancelMembership = $(\"#cancelMembership\");\r\n const $notCancellingSubscription = $(\".not-cancelling-subscription\");\r\n const $cancelSubscriptionBtn = $(\"#cancelSubscriptionBtn\");\r\n const $cancelSubscriptionStep1 = $(\"#cancelSubscriptionStep1\");\r\n const $cancelSubscriptionStep2 = $(\"#cancelSubscriptionStep2\");\r\n const $cancelSubscriptionStep3 = $(\"#cancelSubscriptionStep3\");\r\n const $cancelSubscriptionStep4 = $(\"#cancelSubscriptionStep4\");\r\n const $cancelSubscriptionStep4Pause = $(\"#cancelSubscriptionStep4Pause\");\r\n const $cancelSubscriptionStep3Btn = $(\"#cancelSubscriptionStep3Btn\");\r\n const $cancelReasonContinue = $(\"#cancelReasonContinue\");\r\n const $pauseSubscription = $(\"#pauseSubscription\");\r\n const $dropdownList = $(\"form\").find(\".dropdown-list\");\r\n const $reasonDropdownList = $(\"#cancelSubscription2Form\").find(\".dropdown-list\");\r\n const $errorCancelSubscriptionModal = $(\"#errorCancelSubscriptionModal\");\r\n const $membershipPauseContainer = $(\"#membershipPauseContainer\");\r\n const $cancelSubscription3Form = $(\"#cancelSubscription3Form\");\r\n const cancelReasonForm = $cancelReasonContinue.closest(\"form\");\r\n const pauseSubscriptionForm = $pauseSubscription.closest(\"form\");\r\n let resumeDate, pauseContentHeight, totalHeight, dropdownHeight, formHeight;\r\n let suspendedAccount = $cancelReasonContinue\r\n .closest(\"form\")\r\n .find(\"ul\")\r\n .data(\"cancellation-suspended\");\r\n const requestVerificationToken = $(\r\n 'input[name=\"__RequestVerificationToken\"]'\r\n ).val();\r\n let selectedReason;\r\n const fixedHeight = 80;\r\n // On click of changed mind button\r\n $notCancellingSubscription.on(\"click\", function () {\r\n $cancelSubscriptionModal.find(\".modal-close\").trigger(\"click\");\r\n systemNotification.success(\r\n $cancelSubscriptionContainer.data(\"success-title\"),\r\n $cancelSubscriptionContainer.data(\"success-message\"),\r\n $cancelSubscriptionContainer.data(\"success-button\")\r\n );\r\n });\r\n\r\n // On click of 'cancel subscription' button on step 1 should take user to step2\r\n $cancelSubscriptionBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $cancelSubscriptionStep1.addClass(\"hidden\");\r\n const defaultValue = $dropdownList.find(\"label\").attr(\"for\");\r\n $dropdownList.find(\"label\").html(defaultValue);\r\n $cancelReasonContinue.addClass(\"disabled\");\r\n $cancelSubscriptionStep2.removeClass(\"hidden\");\r\n $cancelSubscriptionStep3.addClass(\"hidden\");\r\n const defaultResumeText = $cancelSubscription3Form\r\n .find(\"li:first-child\")\r\n .data(\"resumetext-subscription\");\r\n $cancelSubscription3Form.find(\".resume-text\").html(defaultResumeText);\r\n const defaultResumeDate = $cancelSubscription3Form\r\n .find(\"li:first-child\")\r\n .data(\"resumedate-subscription\");\r\n $cancelSubscription3Form.find(\".resume-date\").html(defaultResumeDate);\r\n $cancelSubscription3Form\r\n .find(\"li:first-child\")\r\n .attr(\"selected\", \"selected\")\r\n .siblings()\r\n .removeAttr(\"selected\");\r\n });\r\n\r\n // Customized dropdown\r\n $(document).on(\"click\", \".dropdown-list\", function (e) {\r\n $(this).find(\"ul\").toggle();\r\n $(this).toggleClass(\"dropdown-opened\");\r\n $(this).closest(\"form\").toggleClass(\"form-dropdown-opened\");\r\n if (!$(this).hasClass(\"dropdown-opened\")) {\r\n $(this).find(\"ul\").removeClass(\"dropdown-opened\");\r\n $(this).find(\"ul\").css(\"height\", \"0px\");\r\n $(this).closest(\"form\").css(\"height\", \"auto\");\r\n $(this)\r\n .closest(\".form-row\")\r\n .css(\"height\", $(this).closest(\".form-select\").outerHeight() + \"px\");\r\n } else {\r\n $(this).find(\"ul\").addClass(\"dropdown-opened\");\r\n let dropListHeight = 0;\r\n $(this)\r\n .find(\".form-select-input li\")\r\n .each((undefined, el) => {\r\n $(el).outerHeight() ? (dropListHeight += $(el).outerHeight()) : null;\r\n }),\r\n (dropListHeight += parseInt(\r\n $(this).css(\"padding-bottom\").replace(\"px\", \"\")\r\n ));\r\n $(this)\r\n .closest(\".form-row\")\r\n .css(\"height\", dropListHeight + $(this).outerHeight() + \"px\"),\r\n $(this).find(\"ul\").css(\"height\", \"auto\");\r\n }\r\n });\r\n $dropdownList.find(\"li\").on(\"click\", function (e) {\r\n pauseContentHeight = $(\"#cancelSubscription3Form\")\r\n .find(\".disclaimer-text\")\r\n .outerHeight();\r\n formHeight = $(this).closest(\"#cancelSubscription3Form\").outerHeight();\r\n if ($(window).width() >= 200 && $(window).width() <= 768) {\r\n $(\"#cancelSubscription3Form\").css(\"height\", \"auto\");\r\n }\r\n });\r\n // Assigning selected reason to a variable\r\n $reasonDropdownList.find(\"li\").on(\"click\", function (e) {\r\n selectedReason = $(this).data(\"cancellation-reason\");\r\n });\r\n\r\n // on change of draws for pause subscription\r\n $cancelSubscription3Form.find(\"li\").on(\"click\", function (e) {\r\n resumeDate = $(this).data(\"resumedate-subscription\");\r\n const resumeText = $(this).data(\"resumetext-subscription\");\r\n if ($(this).data(\"enddate-subscription\") === \"\") {\r\n $(\"#pauseSubscription\").addClass(\"disabled\");\r\n } else {\r\n $(\"#pauseSubscription\").removeClass(\"disabled\");\r\n }\r\n $cancelSubscription3Form.find(\".resume-date\").html(resumeDate);\r\n $cancelSubscription3Form.find(\".resume-text\").html(resumeText);\r\n });\r\n\r\n // Appending the selected dropdown option to dropdown select bar\r\n $(document).on(\"click\", \".dropdown-list li\", function (e) {\r\n $cancelReasonContinue.removeClass(\"disabled\");\r\n const selectedVal = $(this).html();\r\n $(this).attr(\"selected\", \"selected\").siblings().removeAttr(\"selected\");\r\n $(\".dropdown-list\").find(\"label\").html(selectedVal);\r\n });\r\n\r\n // On selecting 'Pause' on step3\r\n $pauseSubscription.on(\"click\", function (e) {\r\n const startDate = $(this)\r\n .closest(\"form\")\r\n .find(\".form-select-input\")\r\n .find('li[selected=\"selected\"]')\r\n .data(\"startdate-subscription\");\r\n const endDate = $(this)\r\n .closest(\"form\")\r\n .find(\".form-select-input\")\r\n .find('li[selected=\"selected\"]')\r\n .data(\"enddate-subscription\");\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n \r\n jQuery\r\n .ajax({\r\n url: $(this).closest(\"form\").data(\"pause-subscription-url\"),\r\n method: \"POST\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ReasonCode: selectedReason,\r\n StartDate: startDate,\r\n endDate: endDate,\r\n },\r\n success: function success(data) {\r\n if (data && data.ResponseStatus) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode.toLowerCase() === \"success\") {\r\n $cancelSubscriptionStep4Pause\r\n .find(\".pause-date\")\r\n .html(response.Message);\r\n displayThankyouModalPause();\r\n $.trackPauseSubscription(selectedReason, $pauseSubscription\r\n .closest(\"form\")\r\n .find(\".form-select-input\")\r\n .find('li[selected=\"selected\"]').val(), $pauseSubscription);\r\n $errorCancelSubscriptionModal.hide();\r\n displayResume();\r\n $membershipPauseContainer\r\n .find(\".date\")\r\n .html(dateFormat(response.Message));\r\n suspendedAccount = true;\r\n $(\"#membershipPanel\")\r\n .find(\".next-charge\")\r\n .find(\".date\")\r\n .html(dateFormat(response.Message));\r\n } else {\r\n systemNotification.error(\r\n pauseSubscriptionForm.data(\"error-title\"),\r\n pauseSubscriptionForm.data(\"error-message\"),\r\n pauseSubscriptionForm.data(\"error-button\")\r\n );\r\n $cancelSubscriptionModal.find(\".modal-close\").trigger(\"click\");\r\n }\r\n }\r\n $pauseSubscription.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n },\r\n })\r\n .fail(function (error) {\r\n $pauseSubscription.removeClass(\"disabled\");\r\n $(\".disabled-loader\").remove();\r\n handleFailure(error, pauseSubscriptionForm);\r\n });\r\n });\r\n\r\n // On clicking of resume\r\n if ($membershipPauseContainer && $membershipPauseContainer.length) {\r\n $membershipPauseContainer.find(\".btn\").on(\"click\", function (e) {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n jQuery\r\n .ajax({\r\n url: $(this).data(\"resume-subscription-url\"),\r\n method: \"POST\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n },\r\n success: function success(data) {\r\n if (data && data.ResponseStatus) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode.toLowerCase() === \"success\") {\r\n $membershipPauseContainer\r\n .addClass(\"membership-resumed\")\r\n .css(\"display\", \"block\");\r\n const updatedNextChargeDate = $(\"#membershipPanel\")\r\n .find(\".next-charge\")\r\n .siblings(\".draw-details\")\r\n .html();\r\n $(\"#membershipPanel\")\r\n .find(\".next-charge\")\r\n .find(\".date\")\r\n .html(dateFormat(updatedNextChargeDate));\r\n suspendedAccount = false;\r\n } else {\r\n $errorCancelSubscriptionModal.show();\r\n }\r\n }\r\n $membershipPauseContainer\r\n .find(\".btn\")\r\n .removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n },\r\n })\r\n .fail(function (error) {\r\n $membershipPauseContainer.find(\".btn\").removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n if (error && error.status === 401) {\r\n // If user is in semi trusted mode, then redirect to login page\r\n $.redirectToLoginPageWithReturnUrl();\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n });\r\n }\r\n\r\n // On clicking 'Cancel' button on step3\r\n $cancelSubscriptionStep3Btn.on(\"click\", function (e) {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n jQuery\r\n .ajax({\r\n url: $(this).data(\"cancel-membership-url\"),\r\n method: \"POST\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ReasonCode: selectedReason,\r\n },\r\n success: function success(data) {\r\n if (data && data.ResponseStatus) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode.toLowerCase() === \"success\") {\r\n displayThankyouModal();\r\n $.trackCancelSubscription(selectedReason, $cancelSubscriptionModal);\r\n $errorCancelSubscriptionModal.hide();\r\n $cancelSubscriptionStep4\r\n .find(\".modal-close\")\r\n .on(\"click\", function () {\r\n hideMembership();\r\n });\r\n $cancelSubscriptionStep4.find(\".btn\").on(\"click\", function (e) {\r\n hideMembership();\r\n });\r\n } else {\r\n systemNotification.error(\r\n $cancelSubscriptionStep3Btn.data(\"error-title\"),\r\n $cancelSubscriptionStep3Btn.data(\"error-message\"),\r\n $cancelSubscriptionStep3Btn.data(\"error-button\")\r\n );\r\n $cancelSubscriptionModal.find(\".modal-close\").trigger(\"click\");\r\n }\r\n }\r\n $cancelSubscriptionStep3Btn.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n },\r\n })\r\n .fail(function (error) {\r\n $cancelSubscriptionStep3Btn.removeClass(\"disabled-loader\");\r\n handleFailure(error, $cancelSubscriptionStep3Btn);\r\n });\r\n });\r\n\r\n // On selecting Cancelled reason in dropdown in step2\r\n $cancelReasonContinue.on(\"click\", function (e) {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n if (selectedReason.toLowerCase() === \"financial\" || suspendedAccount) {\r\n jQuery\r\n .ajax({\r\n url: $(this).closest(\"form\").data(\"service-url\"),\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ReasonCode: selectedReason,\r\n },\r\n method: \"POST\",\r\n success: function success(data) {\r\n if (data && data.ResponseStatus) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode.toLowerCase() === \"success\") {\r\n displayThankyouModal();\r\n $.trackCancelSubscription(selectedReason, $cancelSubscriptionModal);\r\n $errorCancelSubscriptionModal.hide();\r\n $cancelSubscriptionStep4\r\n .find(\".modal-close\")\r\n .on(\"click\", function (e) {\r\n hideMembership();\r\n });\r\n $cancelSubscriptionStep4.find(\".btn\").on(\"click\", function (e) {\r\n hideMembership();\r\n });\r\n } else {\r\n systemNotification.error(\r\n cancelReasonForm.data(\"error-title\"),\r\n cancelReasonForm.data(\"error-message\"),\r\n cancelReasonForm.data(\"error-button\")\r\n );\r\n $cancelSubscriptionModal.find(\".modal-close\").trigger(\"click\");\r\n }\r\n }\r\n $cancelReasonContinue.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n },\r\n })\r\n .fail(function (error) {\r\n $cancelReasonContinue.removeClass(\"disabled-loader\");\r\n handleFailure(error, cancelReasonForm);\r\n });\r\n } else {\r\n $cancelReasonContinue.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n $dropdownList\r\n .find(\"label\")\r\n .html($cancelSubscription3Form.data(\"pause-1-draw\"));\r\n $cancelSubscriptionStep3.removeClass(\"hidden\");\r\n $cancelSubscriptionStep1.addClass(\"hidden\");\r\n $cancelSubscriptionStep2.addClass(\"hidden\");\r\n $cancelSubscriptionStep4.addClass(\"hidden\");\r\n if (\r\n $cancelSubscription3Form.find(\"li\").attr(\"selected\") === \"selected\" &&\r\n $cancelSubscription3Form.find(\"li\").data(\"enddate-subscription\") === \"\"\r\n ) {\r\n $(\"#pauseSubscription\").addClass(\"disabled\");\r\n } else {\r\n $(\"#pauseSubscription\").removeClass(\"disabled\");\r\n }\r\n }\r\n });\r\n\r\n $errorCancelSubscriptionModal.find(\".close-modal\").on(\"click\", function (e) {\r\n if ($errorCancelSubscriptionModal && $errorCancelSubscriptionModal.length) {\r\n $errorCancelSubscriptionModal.hide();\r\n }\r\n });\r\n\r\n $cancelSubscriptionStep4.find(\".close-btn\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n $cancelSubscriptionStep4.addClass(\"hidden\");\r\n });\r\n $cancelSubscriptionStep4Pause.find(\".close-btn\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n $cancelSubscriptionStep4Pause.addClass(\"hidden\");\r\n });\r\n\r\n function displayThankyouModal() {\r\n $(\".cancel-subscription-not-thankyou\").closest(\".lity\").addClass(\"hidden\");\r\n $cancelSubscriptionStep4.removeClass(\"hidden\");\r\n $cancelSubscriptionStep1.addClass(\"hidden\");\r\n $cancelSubscriptionStep2.addClass(\"hidden\");\r\n $cancelSubscriptionStep3.addClass(\"hidden\");\r\n }\r\n\r\n function displayThankyouModalPause() {\r\n $(\".cancel-subscription-not-thankyou\").closest(\".lity\").addClass(\"hidden\");\r\n $cancelSubscriptionStep4Pause.removeClass(\"hidden\");\r\n $cancelSubscriptionStep1.addClass(\"hidden\");\r\n $cancelSubscriptionStep2.addClass(\"hidden\");\r\n $cancelSubscriptionStep3.addClass(\"hidden\");\r\n }\r\n\r\n function displayResume() {\r\n $membershipPauseContainer.removeClass(\"hidden\");\r\n $membershipPauseContainer.removeClass(\"membership-resumed\");\r\n }\r\n\r\n function dateFormat(date) {\r\n const dateString = date.split(\" \");\r\n let stringArray = new Array();\r\n for (var i = 0; i < dateString.length; i++) {\r\n stringArray.push(dateString[i]);\r\n }\r\n stringArray[1] = stringArray[1].toString().slice(0, -2);\r\n const updatedDateFormat = stringArray.join(\" \");\r\n const momentObj = moment(updatedDateFormat);\r\n const momentString = momentObj.format(\"Do MMMM YYYY\");\r\n return momentString;\r\n }\r\n function hideMembership() {\r\n const membershipId = $(\"#mymembership\");\r\n const manageVipSubscriptionId = $(\"#upgradesubscription\");\r\n $(\".navigation-inline\")\r\n .find(\".navigation-inline__item\")\r\n .map(function (i, el) {\r\n const geHref = $(this).find(\"a\").attr(\"href\");\r\n const vipSectionArray = [\r\n membershipId[0].id,\r\n manageVipSubscriptionId[0].id,\r\n ];\r\n if (vipSectionArray.includes(geHref.substring(1, geHref.length))) {\r\n $(el).remove();\r\n }\r\n });\r\n $(\"#my-account\").find(\".badge-container\").hide();\r\n\r\n $(\"#mymembership\").hide();\r\n $(\"#upgradesubscription\").hide();\r\n\r\n const loginImages = $(\".navigation-icon__wrapper\")\r\n .parent()\r\n .not(\".shopping-cart-icon\");\r\n\r\n $(loginImages).each(function () {\r\n $(this)\r\n .find(\"img\")\r\n .first()\r\n .attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/account_circle.svg\"\r\n );\r\n });\r\n }\r\n\r\n function handleFailure(error, errorMessageSource) {\r\n const loadIndicator = $(\".loading-indicator\");\r\n if (loadIndicator){\r\n loadIndicator.remove();\r\n }\r\n if (error && error.status === 401) {\r\n // If user is in semi trusted mode, then redirect to login page\r\n $.redirectToLoginPageWithReturnUrl();\r\n } else {\r\n systemNotification.error(\r\n errorMessageSource.data(\"error-title\"),\r\n errorMessageSource.data(\"error-message\"),\r\n errorMessageSource.data(\"error-button\")\r\n );\r\n if (debugModeOn){\r\n window.console && console.log(\"error\", error);\r\n } \r\n }\r\n }\r\n\r\n $cancelMembership.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\".cancel-subscription-not-thankyou\")\r\n .closest(\".lity\")\r\n .removeClass(\"hidden\");\r\n $cancelSubscriptionStep1.removeClass(\"hidden\");\r\n $cancelSubscriptionStep2.addClass(\"hidden\");\r\n $cancelSubscriptionStep3.addClass(\"hidden\");\r\n $cancelSubscriptionStep4.addClass(\"hidden\");\r\n $cancelSubscriptionStep4Pause.addClass(\"hidden\");\r\n });\r\n});\r\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var map = {\n\t\"./af\": 192,\n\t\"./af.js\": 192,\n\t\"./ar\": 193,\n\t\"./ar-dz\": 194,\n\t\"./ar-dz.js\": 194,\n\t\"./ar-kw\": 195,\n\t\"./ar-kw.js\": 195,\n\t\"./ar-ly\": 196,\n\t\"./ar-ly.js\": 196,\n\t\"./ar-ma\": 197,\n\t\"./ar-ma.js\": 197,\n\t\"./ar-sa\": 198,\n\t\"./ar-sa.js\": 198,\n\t\"./ar-tn\": 199,\n\t\"./ar-tn.js\": 199,\n\t\"./ar.js\": 193,\n\t\"./az\": 200,\n\t\"./az.js\": 200,\n\t\"./be\": 201,\n\t\"./be.js\": 201,\n\t\"./bg\": 202,\n\t\"./bg.js\": 202,\n\t\"./bm\": 203,\n\t\"./bm.js\": 203,\n\t\"./bn\": 204,\n\t\"./bn.js\": 204,\n\t\"./bo\": 205,\n\t\"./bo.js\": 205,\n\t\"./br\": 206,\n\t\"./br.js\": 206,\n\t\"./bs\": 207,\n\t\"./bs.js\": 207,\n\t\"./ca\": 208,\n\t\"./ca.js\": 208,\n\t\"./cs\": 209,\n\t\"./cs.js\": 209,\n\t\"./cv\": 210,\n\t\"./cv.js\": 210,\n\t\"./cy\": 211,\n\t\"./cy.js\": 211,\n\t\"./da\": 212,\n\t\"./da.js\": 212,\n\t\"./de\": 213,\n\t\"./de-at\": 214,\n\t\"./de-at.js\": 214,\n\t\"./de-ch\": 215,\n\t\"./de-ch.js\": 215,\n\t\"./de.js\": 213,\n\t\"./dv\": 216,\n\t\"./dv.js\": 216,\n\t\"./el\": 217,\n\t\"./el.js\": 217,\n\t\"./en-SG\": 218,\n\t\"./en-SG.js\": 218,\n\t\"./en-au\": 219,\n\t\"./en-au.js\": 219,\n\t\"./en-ca\": 220,\n\t\"./en-ca.js\": 220,\n\t\"./en-gb\": 221,\n\t\"./en-gb.js\": 221,\n\t\"./en-ie\": 222,\n\t\"./en-ie.js\": 222,\n\t\"./en-il\": 223,\n\t\"./en-il.js\": 223,\n\t\"./en-nz\": 224,\n\t\"./en-nz.js\": 224,\n\t\"./eo\": 225,\n\t\"./eo.js\": 225,\n\t\"./es\": 226,\n\t\"./es-do\": 227,\n\t\"./es-do.js\": 227,\n\t\"./es-us\": 228,\n\t\"./es-us.js\": 228,\n\t\"./es.js\": 226,\n\t\"./et\": 229,\n\t\"./et.js\": 229,\n\t\"./eu\": 230,\n\t\"./eu.js\": 230,\n\t\"./fa\": 231,\n\t\"./fa.js\": 231,\n\t\"./fi\": 232,\n\t\"./fi.js\": 232,\n\t\"./fo\": 233,\n\t\"./fo.js\": 233,\n\t\"./fr\": 234,\n\t\"./fr-ca\": 235,\n\t\"./fr-ca.js\": 235,\n\t\"./fr-ch\": 236,\n\t\"./fr-ch.js\": 236,\n\t\"./fr.js\": 234,\n\t\"./fy\": 237,\n\t\"./fy.js\": 237,\n\t\"./ga\": 238,\n\t\"./ga.js\": 238,\n\t\"./gd\": 239,\n\t\"./gd.js\": 239,\n\t\"./gl\": 240,\n\t\"./gl.js\": 240,\n\t\"./gom-latn\": 241,\n\t\"./gom-latn.js\": 241,\n\t\"./gu\": 242,\n\t\"./gu.js\": 242,\n\t\"./he\": 243,\n\t\"./he.js\": 243,\n\t\"./hi\": 244,\n\t\"./hi.js\": 244,\n\t\"./hr\": 245,\n\t\"./hr.js\": 245,\n\t\"./hu\": 246,\n\t\"./hu.js\": 246,\n\t\"./hy-am\": 247,\n\t\"./hy-am.js\": 247,\n\t\"./id\": 248,\n\t\"./id.js\": 248,\n\t\"./is\": 249,\n\t\"./is.js\": 249,\n\t\"./it\": 250,\n\t\"./it-ch\": 251,\n\t\"./it-ch.js\": 251,\n\t\"./it.js\": 250,\n\t\"./ja\": 252,\n\t\"./ja.js\": 252,\n\t\"./jv\": 253,\n\t\"./jv.js\": 253,\n\t\"./ka\": 254,\n\t\"./ka.js\": 254,\n\t\"./kk\": 255,\n\t\"./kk.js\": 255,\n\t\"./km\": 256,\n\t\"./km.js\": 256,\n\t\"./kn\": 257,\n\t\"./kn.js\": 257,\n\t\"./ko\": 258,\n\t\"./ko.js\": 258,\n\t\"./ku\": 259,\n\t\"./ku.js\": 259,\n\t\"./ky\": 260,\n\t\"./ky.js\": 260,\n\t\"./lb\": 261,\n\t\"./lb.js\": 261,\n\t\"./lo\": 262,\n\t\"./lo.js\": 262,\n\t\"./lt\": 263,\n\t\"./lt.js\": 263,\n\t\"./lv\": 264,\n\t\"./lv.js\": 264,\n\t\"./me\": 265,\n\t\"./me.js\": 265,\n\t\"./mi\": 266,\n\t\"./mi.js\": 266,\n\t\"./mk\": 267,\n\t\"./mk.js\": 267,\n\t\"./ml\": 268,\n\t\"./ml.js\": 268,\n\t\"./mn\": 269,\n\t\"./mn.js\": 269,\n\t\"./mr\": 270,\n\t\"./mr.js\": 270,\n\t\"./ms\": 271,\n\t\"./ms-my\": 272,\n\t\"./ms-my.js\": 272,\n\t\"./ms.js\": 271,\n\t\"./mt\": 273,\n\t\"./mt.js\": 273,\n\t\"./my\": 274,\n\t\"./my.js\": 274,\n\t\"./nb\": 275,\n\t\"./nb.js\": 275,\n\t\"./ne\": 276,\n\t\"./ne.js\": 276,\n\t\"./nl\": 277,\n\t\"./nl-be\": 278,\n\t\"./nl-be.js\": 278,\n\t\"./nl.js\": 277,\n\t\"./nn\": 279,\n\t\"./nn.js\": 279,\n\t\"./pa-in\": 280,\n\t\"./pa-in.js\": 280,\n\t\"./pl\": 281,\n\t\"./pl.js\": 281,\n\t\"./pt\": 282,\n\t\"./pt-br\": 283,\n\t\"./pt-br.js\": 283,\n\t\"./pt.js\": 282,\n\t\"./ro\": 284,\n\t\"./ro.js\": 284,\n\t\"./ru\": 285,\n\t\"./ru.js\": 285,\n\t\"./sd\": 286,\n\t\"./sd.js\": 286,\n\t\"./se\": 287,\n\t\"./se.js\": 287,\n\t\"./si\": 288,\n\t\"./si.js\": 288,\n\t\"./sk\": 289,\n\t\"./sk.js\": 289,\n\t\"./sl\": 290,\n\t\"./sl.js\": 290,\n\t\"./sq\": 291,\n\t\"./sq.js\": 291,\n\t\"./sr\": 292,\n\t\"./sr-cyrl\": 293,\n\t\"./sr-cyrl.js\": 293,\n\t\"./sr.js\": 292,\n\t\"./ss\": 294,\n\t\"./ss.js\": 294,\n\t\"./sv\": 295,\n\t\"./sv.js\": 295,\n\t\"./sw\": 296,\n\t\"./sw.js\": 296,\n\t\"./ta\": 297,\n\t\"./ta.js\": 297,\n\t\"./te\": 298,\n\t\"./te.js\": 298,\n\t\"./tet\": 299,\n\t\"./tet.js\": 299,\n\t\"./tg\": 300,\n\t\"./tg.js\": 300,\n\t\"./th\": 301,\n\t\"./th.js\": 301,\n\t\"./tl-ph\": 302,\n\t\"./tl-ph.js\": 302,\n\t\"./tlh\": 303,\n\t\"./tlh.js\": 303,\n\t\"./tr\": 304,\n\t\"./tr.js\": 304,\n\t\"./tzl\": 305,\n\t\"./tzl.js\": 305,\n\t\"./tzm\": 306,\n\t\"./tzm-latn\": 307,\n\t\"./tzm-latn.js\": 307,\n\t\"./tzm.js\": 306,\n\t\"./ug-cn\": 308,\n\t\"./ug-cn.js\": 308,\n\t\"./uk\": 309,\n\t\"./uk.js\": 309,\n\t\"./ur\": 310,\n\t\"./ur.js\": 310,\n\t\"./uz\": 311,\n\t\"./uz-latn\": 312,\n\t\"./uz-latn.js\": 312,\n\t\"./uz.js\": 311,\n\t\"./vi\": 313,\n\t\"./vi.js\": 313,\n\t\"./x-pseudo\": 314,\n\t\"./x-pseudo.js\": 314,\n\t\"./yo\": 315,\n\t\"./yo.js\": 315,\n\t\"./zh-cn\": 316,\n\t\"./zh-cn.js\": 316,\n\t\"./zh-hk\": 317,\n\t\"./zh-hk.js\": 317,\n\t\"./zh-tw\": 318,\n\t\"./zh-tw.js\": 318\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 729;","$(document).on('lity:ready', function (undefined, instance) {\r\n const lityInstance = instance.element();\r\n if (lityInstance.length < 1) return;\r\n\r\n const lityWrapper = $(lityInstance).find('.lity-wrap');\r\n if (lityWrapper.length < 1) return;\r\n\r\n const lityContent = $(lityInstance).find('.lity-content');\r\n if (lityContent.length < 1) return;\r\n\r\n const modalContentWrapper = $(lityWrapper).find('.modal-popup')\r\n if (modalContentWrapper.length < 1) return;\r\n\r\n const lityClasses = $(modalContentWrapper).attr('class').split(' ');\r\n if (lityClasses.length < 1) return;\r\n\r\n const refinedLityClasses = lityClasses.filter((className) => (className.includes('modal-container') || className.includes('modal-tcs') || className.includes('modal-media')) || className.includes('gallery-popup') || className.includes('gallery-slider') && className);\r\n if (refinedLityClasses.length < 1) return;\r\n\r\n $(refinedLityClasses).each((undefined, modalConfigClass) => lityWrapper.addClass(modalConfigClass));\r\n\r\n if (refinedLityClasses.includes('gallery-slider')) return;\r\n //Append close button\r\n const closeButton = $('

');\r\n lityContent.prepend(closeButton);\r\n});","$(document).on('lity:ready', function (event, instance) {\r\n const lityInstance = instance.element();\r\n if (!lityInstance) return;\r\n\r\n if (lityInstance.hasClass('lity-youtube')) {\r\n const lityWrapper = $(lityInstance).find('.lity-wrap');\r\n if (lityWrapper.length > 0) lityWrapper.addClass('modal-container modal-media');\r\n\r\n const lityYTContainer = instance.element().find('.lity-iframe-container');\r\n const closeButton = $('

');\r\n if (!lityYTContainer.length < 1) lityYTContainer.parent().prepend(closeButton);\r\n }\r\n\r\n if (lityInstance.hasClass('lity-iframe')) {\r\n const lityWrapper = $(lityInstance).find('.lity-wrap');\r\n if (lityWrapper.length > 0) lityWrapper.addClass('modal-container modal-tcs');\r\n\r\n const lityYTContainer = instance.element().find('.lity-iframe-container');\r\n const closeButton = $('

');\r\n if (!lityYTContainer.length < 1) lityYTContainer.parent().prepend(closeButton);\r\n }\r\n});\r\n","$(document).on('lity:close', function (event, instance) {\r\n const video = instance.element().find('video')[0];\r\n if (video) {\r\n video.pause();\r\n video.currentTime = 0; // Reset video to start\r\n }\r\n});\r\n\r\n$(document).on('lity:ready', function (event, instance) {\r\n const video = instance.element().find('video')[0];\r\n if (video) {\r\n video.play();\r\n }\r\n});","$(document).on('lity:ready', function (event, instance) {\r\n const lityInstance = instance.element();\r\n if (!lityInstance) return;\r\n\r\n const modalMedia = $(lityInstance).find('.modal-media');\r\n\r\n if (modalMedia.length < 1 && !lityInstance.hasClass('lity-youtube')) return;\r\n\r\n const lityContainer = $(lityInstance).find('.lity-container');\r\n if (lityContainer.length < 1) return;\r\n\r\n if (window.matchMedia(\"(orientation: landscape)\").matches) {\r\n lityContainer.addClass('landscape-mode');\r\n }\r\n\r\n window.matchMedia(\"(orientation: landscape)\").addEventListener(\"change\", e => {\r\n const landscape = e.matches;\r\n\r\n if (landscape) {\r\n lityContainer.addClass('landscape-mode');\r\n } else {\r\n lityContainer.removeClass('landscape-mode');\r\n }\r\n })\r\n});","$(() => {\r\n const $newPasswordField = $(\"#new-password-id\");\r\n const $newPasswordField1 = $(\"#new-password-id1\");\r\n const passwordUpdateControl = $(\"#updatePasswordForm\");\r\n const $updatePasswordBtn = $(\"#updatePasswordBtn\");\r\n const updateLoginForm = $(\"form.update-password\");\r\n const retypePasswordDivInput = passwordUpdateControl.find(\r\n \"#retype-new-password-id\"\r\n );\r\n const newPasswordInput = passwordUpdateControl.find(\"#new-password-id\");\r\n const updatePasswordForm = $(\"#updatePasswordForm\");\r\n const requestVerificationToken = updatePasswordForm\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n\r\n const $submitButton = $(\".update-password__button\");\r\n const dataSuccessMessage = updateLoginForm.attr(\"data-success-message\");\r\n const dataFailMessage = updateLoginForm.attr(\"data-fail-message\");\r\n\r\n // Convert text to password\r\n passwordUpdateControl\r\n .find(\".current-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\".current-password__input\", \".current-password\");\r\n });\r\n\r\n passwordUpdateControl.find(\".new-password__icon\").on(\"click\", function () {\r\n toggleInputType(\".new-password__input\", \".new-password\");\r\n });\r\n\r\n passwordUpdateControl\r\n .find(\".retype-new-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\r\n \".retype-new-password__input\",\r\n \".retype-new-password\"\r\n );\r\n });\r\n\r\n // For exp editor modal\r\n if ($(\".password-prompt\") && $(\".password-prompt\").length > 0) {\r\n if (\r\n $(\".password-prompt\").data(\"exp-editor\").toString().toLowerCase() !==\r\n \"false\"\r\n ) {\r\n $(\"#openUpdatePasswordModal\").on(\"click\", function (e) {\r\n $(\"#updatePasswordModal\").show();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $(\"#updatePasswordModal\").hide();\r\n });\r\n }\r\n }\r\n \r\n // No convert text to password\r\n\r\n const validateRetypePassword = () => {\r\n return newPasswordInput.val() === retypePasswordDivInput.val();\r\n };\r\n retypePasswordDivInput.on(\"keyup\", () => {\r\n retypePasswordDivInput.valid();\r\n if (retypePasswordDivInput.valid()) {\r\n setRetypePasswordError();\r\n }\r\n });\r\n\r\n const setRetypePasswordError = () => {\r\n if (!validateRetypePassword()) {\r\n retypePasswordDivInput.addClass(\"input-validation-error\");\r\n $(\r\n '#updatePasswordForm span[data-valmsg-for=\"retype-new-password-input\"]'\r\n ).addClass(\"field-validation-error\");\r\n $(\r\n '#updatePasswordForm span[data-valmsg-for=\"retype-new-password-input\"]'\r\n ).html(\r\n '
' +\r\n passwordUpdateControl\r\n .find(\".retype-new-password__input\")\r\n .attr(\"data-val-equalto\") +\r\n \"\"\r\n );\r\n } else {\r\n retypePasswordDivInput.removeClass(\"input-validation-error\");\r\n $(\r\n '#updatePasswordForm span[data-valmsg-for=\"retype-new-password-input\"]'\r\n ).removeClass(\"field-validation-error\");\r\n if (\r\n $(\r\n '#updatePasswordForm span[data-valmsg-for=\"retype-new-password-input\"]'\r\n ).text ===\r\n passwordUpdateControl\r\n .find(\".retype-new-password__input\")\r\n .attr(\"data-val-equalto\")\r\n ) {\r\n $(\r\n '#updatePasswordForm span[data-valmsg-for=\"retype-new-password-input\"]'\r\n ).html(\"\");\r\n }\r\n }\r\n };\r\n const toggleInputType = (inputClassName, iconClassName) => {\r\n $(iconClassName).find(\".visibility-off\").toggleClass(\"hidden\");\r\n\r\n const passwordType = $(inputClassName).attr(\"type\");\r\n if (passwordType === \"text\") {\r\n $(inputClassName).attr(\"type\", \"password\");\r\n } else {\r\n $(inputClassName).attr(\"type\", \"text\");\r\n }\r\n };\r\n\r\n\r\n $newPasswordField.on('blur keyup', function () {\r\n const $this = $(this)\r\n // Reset on keyup\r\n $.resetPasswordStrength()\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this)\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this)\r\n})\r\n\r\nfunction checkUpdatePasswordFormIsValid() {\r\n updatePasswordForm.validate();\r\n const enteredValue = newPasswordInput.val().toString();\r\n const specialChars = /[`!@#$%^&*()_\\-+=\\[\\]{};':\"\\\\|,.<>\\/?~ ]/;\r\n if (specialChars.test(enteredValue)) {\r\n if (\r\n updatePasswordForm.valid() &&\r\n $.checkPasswordComplianceSpecialChars(enteredValue)\r\n ) {\r\n return true; \r\n } else {\r\n return false; \r\n }\r\n } else {\r\n if (\r\n updatePasswordForm.valid() &&\r\n $.checkPasswordCompliance(enteredValue)\r\n ) {\r\n return true;\r\n } else {\r\n return false; \r\n }\r\n }\r\n \r\n}\r\n$(\"#updatePasswordForm\").find(\"input[type=text]\").val(\"\");\r\n$('#updatePasswordForm').find('.retype-new-password').addClass('hidden');\r\n$.resetPasswordStrength();\r\n$(\".strength-text\").html(\"\");\r\n // On submission of update password\r\n $submitButton.on(\"click\", function (e) {\r\n e.preventDefault();\r\n const currentPasswordField = passwordUpdateControl.find(\r\n \"#current-password-id\"\r\n );\r\n const newPasswordField = passwordUpdateControl.find(\"#new-password-id\");\r\n passwordUpdateControl.validate();\r\n if(checkUpdatePasswordFormIsValid() && passwordUpdateControl.valid()) {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const ajaxDataObj = {\r\n Username: \"\",\r\n CurrentPassword: currentPasswordField.val(),\r\n NewPassword: newPasswordField.val(),\r\n __RequestVerificationToken: requestVerificationToken,\r\n GoogleReCaptchaToken: token,\r\n };\r\n jQuery\r\n .ajax({\r\n url: passwordUpdateControl.data(\"service-url\"),\r\n method: \"POST\",\r\n data: $.appendFormVerificationToken(\r\n passwordUpdateControl,\r\n ajaxDataObj\r\n ),\r\n success: function success(data) {\r\n $(\".loading-indicator\").remove();\r\n $submitButton.removeClass(\"disabled-loader\");\r\n \r\n if (!data.ApiError) {\r\n if (data.RedirectUrl) {\r\n systemNotification.error(\r\n passwordUpdateControl.data(\"error-title\"),\r\n dataFailMessage,\r\n passwordUpdateControl.data(\"error-button\")\r\n );\r\n } else {\r\n const response = data.ResponseStatus;\r\n $submitButton.parents(\".lity\").hide();\r\n passwordUpdateControl.find(\".form-control\").val(\"\");\r\n systemNotification.success(\r\n passwordUpdateControl.data(\"success-title\"),\r\n dataSuccessMessage,\r\n passwordUpdateControl.data(\"success-button\")\r\n );\r\n $(\"#updatePasswordForm\").find(\"input[type=text]\").val(\"\");\r\n $('#updatePasswordForm').find('.retype-new-password').addClass('hidden');\r\n $(\".strength-text\").html(\"\");\r\n $.resetPasswordStrength();\r\n }\r\n } else {\r\n if (data && data.ApiError && data.ApiError.ResponseStatus) {\r\n if (\r\n data.ApiError.ResponseStatus.ErrorCode ==\r\n \"recaptchafailed\" ||\r\n data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidEmailException\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n } else {\r\n systemNotification.error(\r\n passwordUpdateControl.data(\"error-title\"),\r\n passwordUpdateControl.data(\"error-message\"),\r\n passwordUpdateControl.data(\"error-button\")\r\n );\r\n }\r\n }\r\n }\r\n \r\n },\r\n })\r\n .fail(function (error) {\r\n $(\".loading-indicator\").remove();\r\n $submitButton.removeClass(\"disabled-loader\");\r\n // Failure\r\n if (error && error.status === 401) {\r\n // user is unauthorised lets redirect to the login page\r\n $.redirectToLoginPageWithReturnUrl(passwordUpdateControl);\r\n } else {\r\n systemNotification.error(\r\n passwordUpdateControl.data(\"error-title\"),\r\n dataFailMessage,\r\n passwordUpdateControl.data(\"error-button\")\r\n );\r\n // window.console && console.log(\"error\", error);\r\n }\r\n });\r\n }, \"UpdatePassword\");\r\n }\r\n if (\r\n !$.checkPasswordComplianceChars(newPasswordField.val()) ||\r\n !$.checkPasswordComplianceSpecialChars(newPasswordField.val())\r\n ) {\r\n $.checkPasswordGuidelines(passwordUpdateControl.find(\"#new-password-id\"));\r\n }\r\n });\r\n\r\n // Check the password strength based on the given input in the password field\r\n $newPasswordField.on(\"blur keyup\", function () {\r\n const $this = $(this);\r\n\r\n // Reset on keyup\r\n $.resetPasswordStrength();\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this);\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this);\r\n });\r\n // Check the password strength based on the given input in the password field\r\n $newPasswordField1.on(\"blur keyup\", function () {\r\n const $this = $(this);\r\n\r\n // Reset on keyup\r\n $.resetPasswordStrength();\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this);\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this);\r\n });\r\n});\r\n","$(document).ready(function () {\r\n $(\"table.rsllott.vertical-table\").each((i, table) => {\r\n const tableRows = $(table).find(\"tr\");\r\n if (tableRows.length < 1) return;\r\n \r\n let tableHeadings = $(table).find(\"tr th\");\r\n if (tableHeadings.length < 1) return;\r\n \r\n let row = \"\";\r\n let tableRowsData = tableRows.filter((i, el) =>\r\n i > 0 ? el : null\r\n );\r\n\r\n let tableClasses = $(table).attr(\"class\");\r\n let tableDefaultClasses = [\"d-xs-none\", \"d-md2-table\", 'vertical-table'];\r\n\r\n // remove tableDefaultClasses strings from tableClasses string, if exists\r\n tableDefaultClasses.forEach((el) => {\r\n if (tableClasses.includes(el)) {\r\n tableClasses = tableClasses.replace(el, \"\");\r\n tableClasses;\r\n }\r\n });\r\n\r\n const isTableWrapper = $(table).parent().hasClass(\"table-wrapper\");\r\n const isTableWrapperConnected = $(table)\r\n .parent()\r\n .hasClass(\"connected\");\r\n\r\n let tableWrapper = document.createElement(\"div\");\r\n\r\n // -- if tables connected -- wrap many tables in 1 div (table-wrapper)\r\n if (isTableWrapper) {\r\n tableWrapper.classList.add(\"table-wrapper\");\r\n\r\n if (isTableWrapperConnected) {\r\n tableWrapper.classList.add(\"connected\");\r\n }\r\n }\r\n\r\n $(tableRowsData).each(function (i, el) {\r\n const tableRowLen = tableRowsData.length + 1;\r\n const verticalTable = document.createElement(\"table\");\r\n tableClasses += \" d-md2-none align--vertical\";\r\n tableClasses.split(\" \").forEach((el) => {\r\n if (el !== \"\") {\r\n verticalTable.classList.add(el.replace(\" \", \"\"));\r\n }\r\n });\r\n\r\n $(tableRowLen).each(function (i) {\r\n const tds = $(el).find(\"td\");\r\n row = \"\";\r\n \r\n $(tds).each((i, el) => {\r\n const firstItem = $(el)[0];\r\n row +=\r\n \"
\" +\r\n \"\" +\r\n $(tableHeadings[i]).html() +\r\n \" | \" +\r\n \"\" +\r\n $(firstItem).html() +\r\n \" |
\";\r\n });\r\n });\r\n\r\n $(verticalTable).html(row);\r\n $(tableWrapper).append(verticalTable);\r\n \r\n if (isTableWrapper) {\r\n $(table).parent().after(tableWrapper);\r\n } else {\r\n $(table).after(tableWrapper);\r\n }\r\n });\r\n });\r\n});\r\n","import postService from \"../../../../common/js/util/postService\";\r\nimport lity from \"lity\";\r\n\r\n(() => {\r\n let forgotPasswordForm = $(\"#forgotPasswordModal\");\r\n let emailDiv = $(\".forgot-password-email__input\");\r\n let emailValue = emailDiv.val();\r\n const forgotPwdCodeControl = $(\"#forgotCodePwd\");\r\n const resendLink = forgotPwdCodeControl.find(\".resend-link\");\r\n let submitButton = $(\".forgot-password__cta--button\");\r\n const resendText = resendLink.data(\"resend\");\r\n const resendSentText = resendLink.data(\"sent\");\r\n const forgotPwdEmailControl = $(\"#forgotPasswordModal\");\r\n const passwordUpdateField = $(\"#forgotPasswordStep2\").find(\r\n \"#new-password-id1\"\r\n );\r\n\r\n let forgotPwdClickCount = 0;\r\n\r\n const retypePasswordDivInput = $(\"#forgotPasswordStep2\").find(\r\n \"#retype-new-password-id1\"\r\n );\r\n const newPasswordInput = $(\"#forgotPasswordStep2\").find(\"#new-password-id1\");\r\n const requestVerificationToken = forgotPasswordForm\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const dataSuccessMessage = forgotPasswordForm.attr(\"data-success-message\");\r\n const dataFailMessage = forgotPasswordForm.attr(\"data-fail-message\");\r\n const postUrl = forgotPasswordForm.attr(\"data-service-url\");\r\n const openForgotModal = $(\".open-forgot-modal\");\r\n let lightBox;\r\n const closeModalButton = $(\"#closeOpenForgotPasswordModal\");\r\n\r\n const checkRetypePassword = () => {\r\n return newPasswordInput.val() === retypePasswordDivInput.val();\r\n };\r\n retypePasswordDivInput.on(\"keypress\", () => {\r\n retypePasswordDivInput.valid();\r\n if (!checkRetypePassword()) {\r\n retypePasswordDivInput.addClass(\"input-validation-error\");\r\n $(\r\n '#forgotPasswordStep2 span[data-valmsg-for=\"retype-new-password-input1\"]'\r\n ).addClass(\"field-validation-error\");\r\n $(\r\n '#forgotPasswordStep2 span[data-valmsg-for=\"retype-new-password-input1\"]'\r\n ).html(\r\n '
' +\r\n $(\"#forgotPasswordStep2\")\r\n .find(\".retype-new-password__input\")\r\n .attr(\"data-val-equalto\") +\r\n \"\"\r\n );\r\n } else {\r\n retypePasswordDivInput.removeClass(\"input-validation-error\");\r\n $(\r\n '#forgotPasswordStep2 span[data-valmsg-for=\"retype-new-password-input1\"]'\r\n ).removeClass(\"field-validation-error\");\r\n if (\r\n $(\r\n '#forgotPasswordStep2 span[data-valmsg-for=\"retype-new-password-input1\"]'\r\n ).text ===\r\n $(\"#forgotPasswordStep2\")\r\n .find(\".retype-new-password__input\")\r\n .attr(\"data-val-equalto\")\r\n ) {\r\n $(\r\n '#forgotPasswordStep2 span[data-valmsg-for=\"retype-new-password-input1\"]'\r\n ).html(\"\");\r\n }\r\n }\r\n });\r\n\r\n // Convert text to password\r\n $(\"#forgotPasswordStep2\")\r\n .find(\".current-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\".current-password__input\", \".current-password\");\r\n });\r\n\r\n $(\"#forgotPasswordStep2\")\r\n .find(\".new-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\".new-password__input\", \".new-password\");\r\n });\r\n\r\n $(\"#forgotPasswordStep2\")\r\n .find(\".retype-new-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\r\n \".retype-new-password__input\",\r\n \".retype-new-password\"\r\n );\r\n });\r\n const toggleInputType = (inputClassName, iconClassName) => {\r\n $(iconClassName).find(\".visibility-off\").toggleClass(\"hidden\");\r\n\r\n const passwordType = $(inputClassName).attr(\"type\");\r\n if (passwordType === \"text\") {\r\n $(inputClassName).attr(\"type\", \"password\");\r\n } else {\r\n $(inputClassName).attr(\"type\", \"text\");\r\n }\r\n };\r\n\r\n passwordUpdateField.on('blur keyup', function () {\r\n const $this = $(this)\r\n // Reset on keyup\r\n $.resetPasswordStrength()\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this)\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this)\r\n})\r\n\r\n openForgotModal.on(\"click\", () => {\r\n lightBox = lity(\"#forgotPasswordModal\");\r\n });\r\n\r\n $(\"#forgotPasswordModal\")\r\n .find(\"#forgotEmailBtn\")\r\n .on(\"click\", (e) => {\r\n e.preventDefault();\r\n forgotPasswordForm.validate();\r\n if (!forgotPasswordForm.valid()) {\r\n return;\r\n } \r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const emailField = forgotPwdEmailControl.find(\"#ForgotEmail\");\r\n const ajaxDataObj = {\r\n email: emailField.val(),\r\n GoogleReCaptchaToken: token,\r\n };\r\n forgotPwdEmailControl.validate();\r\n if (forgotPwdEmailControl.valid()) {\r\n $.ajax({\r\n url: forgotPwdEmailControl.data(\"service-url\"),\r\n method: \"POST\",\r\n data: $.appendFormVerificationToken(\r\n forgotPwdEmailControl,\r\n ajaxDataObj\r\n ),\r\n success: function success(data) {\r\n if (\r\n data &&\r\n data.ResponseStatus &&\r\n data.ResponseStatus.ErrorCode\r\n ) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode && response.ErrorCode === \"success\") {\r\n forgotPwdCodeControl.find(\"#forgotEmailHidden\").attr({\r\n \"data-ajax-key\": \"email\",\r\n \"data-ajax-val\": emailField.val(),\r\n });\r\n $(\"#forgotPasswordStep2\")\r\n .find(\"[data-email-address]\")\r\n .attr({ \"data-email-address\": emailField.val() })\r\n .html(emailField.val());\r\n lity(\"#forgotPasswordStep2\");\r\n $.resetPasswordStrength();\r\n $(\".strength-text\").html(\"\");\r\n $(\"#forgotPasswordStep1 .modal-close\").trigger(\"click\");\r\n $('#forgotCodePwd').find(\"input[type=password]\").val(\"\");\r\n $('#forgotCodePwd').find('.retype-new-password').addClass('hidden');\r\n $('#updatePasswordForm').find('.retype-new-password').addClass('hidden');\r\n forgotPwdCodeControl.find(\"input\").each((index, element) => {\r\n $.inputValueCheck($(element));\r\n });\r\n // reset values to starting on successful password reset in case user wants to do it again for some reason\r\n forgotPwdClickCount = 0;\r\n forgotPwdCodeControl\r\n .find(\".resend-link.disabled\")\r\n .removeClass(\"disabled\");\r\n resendLink.text(resendText);\r\n } else {\r\n forgotPwdEmailControl.find(\"#ForgotEmail-error\").html(response.Message);\r\n }\r\n }\r\n },\r\n });\r\n }\r\n }, \"ForgotPasswordStep2\");\r\n });\r\n resendLink.on(\"click\", (e) => {\r\n e.preventDefault();\r\n const emailFieldHidden = forgotPwdCodeControl.find(\"#forgotEmailHidden\");\r\n const ajaxDataObj = {};\r\n ajaxDataObj[emailFieldHidden.data(\"ajax-key\")] =\r\n emailFieldHidden.data(\"ajax-val\");\r\n // disbale the resend link after one click to stop users queuing up more codes before they've used the current one\r\n resendLink.addClass(\"disabled\");\r\n resendLink.text(resendSentText);\r\n\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const ajaxDataObj = {\r\n GoogleReCaptchaToken: token,\r\n };\r\n $.ajax({\r\n url: forgotPwdEmailControl.data(\"service-url\"),\r\n method: \"POST\",\r\n data: $.appendFormVerificationToken(forgotPwdEmailControl, ajaxDataObj),\r\n success: function success(data) {\r\n if (data && data.ResponseStatus && data.ResponseStatus.ErrorCode) {\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode && response.ErrorCode !== \"success\") {\r\n forgotPwdCodeControl.find(\".resend-link-error-message\").html(response.Message);\r\n lity(\"#resendLinkError\");\r\n $(\"#forgotPasswordStep2 .modal-close\").trigger(\"click\");\r\n }\r\n }\r\n },\r\n });\r\n }, \"ResetPassword\");\r\n });\r\n\r\n\r\n forgotPwdCodeControl.find(\".js-btn-forgot-password\").on(\"click\", (e) => {\r\n e.preventDefault();\r\n const enteredValue = forgotPwdCodeControl.find(\"#new-password-id1\")\r\n .val()\r\n .toString();\r\n forgotPwdCodeControl.validate();\r\n const checkFormValid =\r\n forgotPwdCodeControl.valid() &&\r\n ($.checkPasswordComplianceChars(enteredValue) ||\r\n $.checkPasswordComplianceSpecialChars(enteredValue));\r\n const secCodeField = forgotPwdCodeControl.find(\"#ForgotSecurityCode\");\r\n const passwordField = forgotPwdCodeControl.find(\"#new-password-id1\");\r\n const emailFieldHidden = forgotPwdCodeControl.find(\"#forgotEmailHidden\");\r\n if (checkFormValid) {\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const ajaxDataObj = {\r\n passwordResetToken: secCodeField.val(),\r\n password: passwordField.val(),\r\n GoogleReCaptchaToken: token,\r\n DataSourceId: $(\"#ForgotPasswordData_DataSourceId\").val(),\r\n };\r\n \r\n ajaxDataObj[emailFieldHidden.data(\"ajax-key\")] =\r\n emailFieldHidden.data(\"ajax-val\");\r\n forgotPwdCodeControl.validate();\r\n const enteredValue = $(passwordUpdateField).val().toString();\r\n if (\r\n (forgotPwdCodeControl.valid() &&\r\n $.checkPasswordCompliance(enteredValue)) ||\r\n (forgotPwdCodeControl.valid() &&\r\n $.checkPasswordComplianceSpecialChars(enteredValue))\r\n ) {\r\n forgotPwdClickCount++;\r\n \r\n if (forgotPwdClickCount >= 4) {\r\n resendLink.addClass(\"disabled\");\r\n const $field = $('#ForgotSecurityCode').closest(\".floating-field\");\r\n $field.addClass(\"floating-field--invalid\");\r\n const error = \"Maximum number of attempts has been reached. Please try again after 20 minutes to reset your password.\"\r\n $field.find(\".floating-label-error\").html(\r\n '
' +\r\n error +\r\n \"\"\r\n );\r\n $field.find(\".floating-label-error\").addClass(\"field-validation-error\");\r\n }\r\n if (forgotPwdClickCount <= 3) {\r\n $(\".js-btn-forgot-password\").append(\r\n '
'\r\n );\r\n $.ajax({\r\n url: forgotPwdCodeControl.data(\"service-url\"),\r\n method: \"POST\",\r\n data: $.appendFormVerificationToken(\r\n forgotPwdCodeControl,\r\n ajaxDataObj\r\n ),\r\n success: function success(data) {\r\n if (\r\n data &&\r\n data.ResponseStatus &&\r\n data.ResponseStatus.ErrorCode\r\n ) {\r\n $(\".loading-indicator\").remove();\r\n const response = data.ResponseStatus;\r\n if (response.ErrorCode && response.ErrorCode === \"success\") {\r\n const confirmationFormControl = $(\"#forgotPasswordStep3\");\r\n const redirectUrl =\r\n confirmationFormControl.data(\"login-page\");\r\n if (\r\n $(\"#confirmationForgotPasswordOverlay\") &&\r\n $(\"#confirmationForgotPasswordOverlay\").length\r\n ) {\r\n $(\"#confirmationForgotPasswordOverlay\").show();\r\n }\r\n $(\"#forgotPasswordStep2 .modal-close\").trigger(\"click\");\r\n if ($(\"#updatepassword\") && $(\"#updatepassword\").length) {\r\n $(\"#updatepassword .modal-close\").trigger(\"click\");\r\n }\r\n \r\n systemNotification.success(\r\n data.ResponseStatus.TitleText,\r\n data.ResponseStatus.Message,\r\n data.ResponseStatus.ButtonText\r\n );\r\n $.resetPasswordStrength();\r\n $(\".strength-text\").html(\"\");\r\n $('#forgotCodePwd').find('.retype-new-password').addClass('hidden');\r\n $('#updatePasswordForm').find('.retype-new-password').addClass('hidden');\r\n forgotPwdCodeControl.find(\"input[type=text]\").val(\"\");\r\n $(\"#forgotPasswordModal\").find(\"input[type=email]\").val(\"\");\r\n forgotPwdCodeControl.find(\"input[type=password]\").val(\"\");\r\n $(\"#forgotPasswordStep1 .modal-close\").trigger(\"click\");\r\n $(\"#forgotPasswordModal .modal-close\").trigger(\"click\");\r\n $(\"#updatePasswordModal .modal-close\").trigger(\"click\");\r\n confirmationFormControl\r\n .find(\".confirmation-btn\")\r\n .on(\"click\", (e) => {\r\n if ($(\".overlay\") && $(\".overlay\").length) {\r\n $(\".overlay\").hide(500);\r\n }\r\n \r\n if (window.location.pathname !== redirectUrl) {\r\n $.redirectToLoginPageWithReturnUrl(\r\n confirmationFormControl\r\n );\r\n }\r\n });\r\n } else {\r\n const $field = $('#ForgotSecurityCode').closest(\".floating-field\");\r\n const error = \"Security code is incorrect\";\r\n $field.addClass(\"floating-field--invalid\");\r\n $field.find(\".floating-label-error\").html(\r\n '
' +\r\n error +\r\n \"\"\r\n );\r\n $field.find(\".floating-label-error\").addClass(\"field-validation-error\");\r\n var scrollTo = secCodeField[0].id;\r\n $(\"#\" + scrollTo)\r\n .get(0)\r\n .scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }, \"ResetPassword\");\r\n }\r\n \r\n if (\r\n !$.checkPasswordComplianceChars(enteredValue) ||\r\n !$.checkPasswordComplianceSpecialChars(enteredValue)\r\n ) {\r\n $.checkPasswordGuidelines(forgotPwdCodeControl.find(\"#new-password-id1\"));\r\n }\r\n });\r\n const $forgotPasswordModalExpEditor = $(\"#forgotPasswordModalContainer\");\r\n if (\r\n $forgotPasswordModalExpEditor &&\r\n $forgotPasswordModalExpEditor.length > 0\r\n ) {\r\n if (\r\n $forgotPasswordModalExpEditor\r\n .data(\"exp-editor\")\r\n .toString()\r\n .toLowerCase() !== \"false\"\r\n ) {\r\n $(\".forgot-password-modal-link\").on(\"click\", function (e) {\r\n $forgotPasswordModalExpEditor.show();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $forgotPasswordModalExpEditor.hide();\r\n });\r\n $(\"#forgotEmailBtn\").on(\"click\", function (e) {\r\n $(\"#forgotPasswordStep2\").show();\r\n });\r\n $(\".modal-close\").on(\"click\", function (e) {\r\n $(\"#forgotPasswordStep2\").hide();\r\n });\r\n }\r\n }\r\n})();\r\n","const postService = (() => {\r\n const post = (url, data) => {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n url,\r\n data,\r\n method: \"POST\",\r\n success: (successData) => {\r\n resolve(data);\r\n },\r\n error: (errorData) => {\r\n reject(errorData);\r\n },\r\n });\r\n });\r\n };\r\n\r\n return { post };\r\n})();\r\n\r\nexport default postService;\r\n","$(() => {\r\n const $googlePaySection = $(\"#google-pay-section\");\r\n\r\n if ($googlePaySection && $googlePaySection.length > 0) {\r\n var isNVIPCheckout = $googlePaySection.data(\"is-nvip\");\r\n\r\n function placeOrderOrSubscribe() {\r\n var apiURL = \"\";\r\n var apiMethod = \"POST\";\r\n\r\n if (isNVIPCheckout && isNVIPCheckout.toLowerCase() === \"true\") {\r\n $.placeOrderNVIP(this);\r\n } else {\r\n $.placeOrderVIP(this);\r\n }\r\n }\r\n\r\n function getGoogleTransactionInfo() {\r\n var _totalPrice = \"1.01\"; // For testing set set the dummy price if Total Price is not set.\r\n\r\n if ($googlePaySection.data(\"payment-amount\")) {\r\n _totalPrice = $googlePaySection.data(\"payment-amount\");\r\n _totalPrice = _totalPrice.toString().replace(\"$\", \"\");\r\n }\r\n\r\n return {\r\n // displayItems: [{\r\n // label: \"Subtotal\",\r\n // type: \"SUBTOTAL\",\r\n // price: \"29.00\",\r\n // },\r\n // {\r\n // label: \"Tax\",\r\n // type: \"TAX\",\r\n // price: \"1.00\",\r\n // }\r\n // ],\r\n countryCode: \"AU\",\r\n currencyCode: \"AUD\",\r\n totalPriceStatus: \"FINAL\",\r\n totalPrice: \"\" + _totalPrice + \"\",\r\n totalPriceLabel: \"Total\",\r\n };\r\n }\r\n\r\n // Make sure to have https://pay.google.com/gp/p/js/pay.js loaded on your page\r\n\r\n // You will need a button element on your page styled according to Google's brand guidelines\r\n // https://developers.google.com/pay/api/web/guides/brand-guidelines\r\n var buttonDiv = document.querySelector(\"#google-pay-button\");\r\n var environment = \"TEST\";\r\n var merchantId = \"merchant-id-from-google\";\r\n\r\n if ($googlePaySection.data(\"googlepay-env\")) {\r\n environment = $googlePaySection.data(\"googlepay-env\");\r\n }\r\n\r\n if ($googlePaySection.data(\"googlepay-merchantid\")) {\r\n merchantId = $googlePaySection.data(\"googlepay-merchantid\");\r\n }\r\n\r\n var paymentsClient = new google.payments.api.PaymentsClient({\r\n environment: environment, // Or 'PRODUCTION'\r\n });\r\n\r\n braintree.client.create(\r\n {\r\n authorization: $googlePaySection.data(\"client-token\"),\r\n },\r\n function (clientErr, clientInstance) {\r\n braintree.googlePayment.create(\r\n {\r\n client: clientInstance,\r\n googlePayVersion: 2,\r\n googleMerchantId: merchantId, // Optional in sandbox; if set in sandbox, this value must be a valid production Google Merchant ID\r\n },\r\n function (googlePaymentErr, googlePaymentInstance) {\r\n paymentsClient\r\n .isReadyToPay({\r\n // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest\r\n apiVersion: 2,\r\n apiVersionMinor: 0,\r\n allowedPaymentMethods:\r\n googlePaymentInstance.createPaymentDataRequest()\r\n .allowedPaymentMethods,\r\n existingPaymentMethodRequired: true, // Optional\r\n })\r\n .then(function (response) {\r\n if (response.result) {\r\n var paymentDataRequest =\r\n googlePaymentInstance.createPaymentDataRequest({\r\n transactionInfo: getGoogleTransactionInfo,\r\n });\r\n console.log(paymentDataRequest);\r\n\r\n const button = paymentsClient.createButton({\r\n buttonColor: \"black\",\r\n buttonType: \"pay\",\r\n onClick: () => { },\r\n allowedPaymentMethods: [], // use the same payment methods as for the loadPaymentData() API call\r\n });\r\n\r\n buttonDiv.appendChild(button);\r\n\r\n button.addEventListener(\"click\", function (event) {\r\n $(\"#google-pay-section\").addClass(\"disabled-loader\");\r\n $(\".gpay-button\").append(\r\n '
'\r\n );\r\n event.preventDefault();\r\n\r\n // We recommend collecting billing address information, at minimum\r\n // billing postal code, and passing that billing postal code with all\r\n // Google Pay card transactions as a best practice.\r\n // See all available options at https://developers.google.com/pay/api/web/reference/object\r\n var cardPaymentMethod =\r\n paymentDataRequest.allowedPaymentMethods[1];\r\n\r\n // Get the Total Amount from Hidden field.\r\n paymentDataRequest.transactionInfo =\r\n getGoogleTransactionInfo();\r\n console.log(getGoogleTransactionInfo());\r\n\r\n cardPaymentMethod.parameters.billingAddressRequired = true;\r\n cardPaymentMethod.parameters.billingAddressParameters = {\r\n format: \"FULL\",\r\n phoneNumberRequired: true,\r\n };\r\n\r\n paymentsClient\r\n .loadPaymentData(paymentDataRequest)\r\n .then(function (paymentData) {\r\n googlePaymentInstance.parseResponse(\r\n paymentData,\r\n function (err, result) {\r\n if (err) {\r\n // Handle parsing error\r\n console.error(err);\r\n }\r\n\r\n var tokenData = {\r\n Nonce: result.nonce,\r\n Type: \"GooglePay\",\r\n CardType: result.details.cardType,\r\n LastFour: result.details.lastFour,\r\n };\r\n\r\n console.log(result);\r\n\r\n // Send result.nonce to your server\r\n // result.type may be either \"AndroidPayCard\" or \"PayPalAccount\", and\r\n // paymentData will contain the billingAddress for card payments\r\n\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/UpdatePaymentCookie\",\r\n method: \"POST\",\r\n data: tokenData,\r\n success: function success(data) {\r\n window.console &&\r\n console.log(\r\n \"UpdatePaymentCookie\",\r\n data\r\n );\r\n if (data == \"success\") {\r\n placeOrderOrSubscribe();\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n $(\"#modifyBtn\").removeClass(\r\n \"pointer-none\"\r\n );\r\n window.console &&\r\n console.log(\"error\", error);\r\n $(\".loading-indicator\").remove();\r\n $(\"#google-pay-section\").removeClass(\r\n \"disabled-loader\"\r\n );\r\n $(\"#modifyBtn\").removeClass(\r\n \"pointer-none\"\r\n );\r\n });\r\n }\r\n );\r\n })\r\n .catch(function (err) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#google-pay-section\").removeClass(\r\n \"disabled-loader\"\r\n );\r\n\r\n // dont show error message if user close the payment screen.\r\n if (\r\n err.DOMException ||\r\n (err.statusCode &&\r\n err.statusCode === \"CANCELED\")\r\n ) {\r\n console.log(err);\r\n } else {\r\n // Handle errors\r\n console.error(err);\r\n\r\n $(\"#payment\").trigger(\"click\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\r\n \"payment-error-title\"\r\n ),\r\n $(\"#completPurchaseBtn\").data(\r\n \"payment-error-message\"\r\n ),\r\n $(\"#completPurchaseBtn\").data(\r\n \"payment-error-button\"\r\n )\r\n );\r\n }\r\n });\r\n });\r\n }\r\n })\r\n .catch(function (err) {\r\n // Handle errors\r\n\r\n console.error(err);\r\n\r\n $(\"#payment\").trigger(\"click\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n });\r\n }\r\n );\r\n\r\n // Set up other Braintree components\r\n }\r\n );\r\n }\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n});\r\n","$(() => {\r\n const $applePaySection = $(\"#apple-pay-section\");\r\n var _applePayInstance = null;\r\n\r\n if ($applePaySection && $applePaySection.length > 0) {\r\n var isNVIPCheckout = $applePaySection.data(\"is-nvip\");\r\n\r\n function placeOrderOrSubscribe() {\r\n var apiURL = \"\";\r\n var apiMethod = \"POST\";\r\n\r\n if (isNVIPCheckout && isNVIPCheckout.toLowerCase() === \"true\") {\r\n $.placeOrderNVIP(this);\r\n } else {\r\n $.placeOrderVIP(this);\r\n }\r\n }\r\n function getAppleTransactionInfo() {\r\n var _totalPrice = \"1.01\"; // For testing set the dummy price if Total Price is not set.\r\n var _applePaymentSheetLabel = \"Testing (Card is not charged)\";\r\n\r\n if ($applePaySection.data(\"payment-amount\")) {\r\n _totalPrice = $applePaySection.data(\"payment-amount\");\r\n _totalPrice = _totalPrice.toString().replace(\"$\", \"\");\r\n }\r\n\r\n if ($applePaySection.data(\"apple-payment-sheet-label\")) {\r\n _applePaymentSheetLabel = $applePaySection.data(\"apple-payment-sheet-label\"); \r\n }\r\n\r\n return {\r\n countryCode: \"AU\",\r\n currencyCode: \"AUD\",\r\n merchantCapabilities: [\"supports3DS\"],\r\n supportedNetworks: [\"visa\", \"masterCard\", \"amex\"],\r\n total: {\r\n label: _applePaymentSheetLabel,\r\n type: \"final\",\r\n amount: \"\" + _totalPrice + \"\",\r\n },\r\n };\r\n }\r\n\r\n if (window.ApplePaySession && ApplePaySession.canMakePayments()) {\r\n // This device supports version 3 of Apple Pay.\r\n console.log(\"This device supports version 3 of Apple Pay.\");\r\n $(\"#paymentSection\")\r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment\")\r\n .each(function (i, el) {\r\n if ($(el).data(\"payment-type-btn\").toLowerCase() === \"apple\") {\r\n $(el).removeClass(\"hidden\");\r\n }\r\n });\r\n } else {\r\n $(\"#paymentSection\")\r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment\")\r\n .each(function (i, el) {\r\n if ($(el).data(\"payment-type-btn\").toLowerCase() === \"apple\") {\r\n $(el).addClass(\"hidden\");\r\n }\r\n });\r\n }\r\n\r\n if (!window.ApplePaySession) {\r\n console.error(\"This device does not support Apple Pay\");\r\n $(\"#paymentSection\")\r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment\")\r\n .each(function (i, el) {\r\n if ($(el).data(\"payment-type-btn\").toLowerCase() === \"apple\") {\r\n $(el).addClass(\"hidden\");\r\n }\r\n });\r\n }\r\n\r\n if (!ApplePaySession.canMakePayments()) {\r\n console.error(\"This device is not capable of making Apple Pay payments\");\r\n }\r\n\r\n braintree.client.create(\r\n {\r\n authorization: $applePaySection.data(\"client-token\"),\r\n },\r\n function (clientErr, clientInstance) {\r\n if (clientErr) {\r\n console.error(\"Error creating client:\", clientErr);\r\n return;\r\n }\r\n\r\n console.log(\"braintree.client.create:\", clientInstance);\r\n braintree.applePay.create(\r\n {\r\n client: clientInstance,\r\n },\r\n function (applePayErr, applePayInstance) {\r\n if (applePayErr) {\r\n console.error(\"Error creating applePayInstance:\", applePayErr);\r\n return;\r\n }\r\n\r\n console.log(\"braintree.applePay.create:\", applePayInstance);\r\n _applePayInstance = applePayInstance;\r\n }\r\n );\r\n }\r\n );\r\n\r\n self.intializeApplePaySession = function () {\r\n var paymentRequest = _applePayInstance.createPaymentRequest(\r\n getAppleTransactionInfo()\r\n );\r\n $(\"#apple-pay-section\").addClass(\"disabled-loader\");\r\n $(\".apple-pay-btn-wrapper\")\r\n .find(\"#svg-text\")\r\n .append(\r\n '
'\r\n );\r\n $(\"#modifyBtn\").addClass(\"pointer-none\");\r\n console.log(\"paymentRequest:\", paymentRequest);\r\n\r\n var session = new ApplePaySession(3, paymentRequest);\r\n\r\n console.log(\"session\", session);\r\n\r\n session.onvalidatemerchant = function (event) {\r\n console.log(\"onvalidatemerchant validationURL\", event);\r\n\r\n _applePayInstance\r\n .performValidation({\r\n validationURL: event.validationURL,\r\n displayName: \"RSL Art Union\",\r\n })\r\n .then(function (merchantSession) {\r\n session.completeMerchantValidation(merchantSession);\r\n console.log(\"merchantSession\", merchantSession);\r\n })\r\n .catch(function (validationErr) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#apple-pay-section\").removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n // You should show an error to the user, e.g. 'Apple Pay failed to load.'\r\n console.error(\"Error validating merchant:\", validationErr);\r\n\r\n session.abort();\r\n });\r\n };\r\n\r\n session.onpaymentauthorized = function (event) {\r\n console.log(\"Your shipping address is:\", event.payment.shippingContact);\r\n\r\n _applePayInstance\r\n .tokenize({\r\n token: event.payment.token,\r\n })\r\n .then(function (payload) {\r\n // Send payload.nonce to your server.\r\n console.log(\"nonce:\", payload.nonce);\r\n console.log(\"payload:\", payload);\r\n\r\n // If requested, address information is accessible in event.payment\r\n // and may also be sent to your server.\r\n console.log(\"Payment event:\", event);\r\n\r\n var tokenData = {\r\n Nonce: payload.nonce,\r\n Type: \"ApplePay\",\r\n CardType: payload.details.cardType,\r\n LastFour: payload.details.paymentInstrumentName,\r\n };\r\n\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/UpdatePaymentCookie\",\r\n method: \"POST\",\r\n data: tokenData,\r\n success: function success(data) {\r\n window.console && console.log(\"UpdatePaymentCookie\", data);\r\n if (data == \"success\") {\r\n // After you have transacted with the payload.nonce,\r\n // call 'completePayment' to dismiss the Apple Pay sheet.\r\n session.completePayment(ApplePaySession.STATUS_SUCCESS);\r\n\r\n placeOrderOrSubscribe();\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n $(\"#payment\").trigger(\"click\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#apple-pay-section\").removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n });\r\n })\r\n .catch(function (tokenizeErr) {\r\n $(\"#payment\").trigger(\"click\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#apple-pay-section\").removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n console.error(\"Error tokenizing Apple Pay:\", tokenizeErr);\r\n session.completePayment(ApplePaySession.STATUS_FAILURE);\r\n });\r\n };\r\n session.oncancel = function (event) {\r\n console.log(\"oncacnel\", event);\r\n $(\".loading-indicator\").remove();\r\n $(\"#apple-pay-section\").removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n };\r\n session.begin();\r\n console.log(session);\r\n // Set up your Apple Pay button here\r\n };\r\n }\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n});\r\n","$(() => {\r\n\r\nconst $appleLoginBtn = $(\"#signin-with-apple-login-btn\");\r\nconst $appleSignupBtn = $(\"#signup-with-apple-login-btn\");\r\nlet appleFirstName, appleSecondName, appleEmail;\r\n self.appleSignIn = async function () {\r\n try { \r\n let _firstName=\"\";\r\n let _lastName=\"\";\r\n let _email=\"\";\r\n // Handle successful response.\r\n var _appleData = await AppleID.auth.signIn(); \r\n console.log(_appleData);\r\n \r\n if (_appleData && _appleData.authorization && _appleData.authorization.id_token){ \r\n \r\n var codeData = { auth_data: _appleData,accountlogininfoid: $appleLoginBtn.data(\"account-login-info\") };\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/SocialLogin/LoginWithApple\",\r\n method: \"POST\",\r\n data: codeData,\r\n success: function success(data) {\r\n window.console && console.log(\"success\", data);\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (\r\n $appleLoginBtn.closest(\"#accountSection\") &&\r\n $appleLoginBtn.closest(\"#accountSection\").length > 0 &&\r\n $(\"#account\").hasClass(\"active-step\")\r\n ) {\r\n $.navigateToNextStep(data);\r\n } else if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0 &&\r\n $(\"#payment\").hasClass(\"active-step\")\r\n ) {\r\n $.navigateStoredPayment(data); \r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .trigger(\"click\");\r\n $(\".logged-in-section.semi-trusted-mode-content\").addClass(\r\n \"hidden\"\r\n );\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n const response = data.Error.ResponseStatus;\r\n let errorTitle = \"\";\r\n let errorMessage = \"\";\r\n let errorButton = \"\";\r\n if (\r\n response &&\r\n response.ErrorCode == \"incorrectusernameorpassword\"\r\n ) {\r\n // show invalid login error\r\n errorTitle = $(\"#signin-with-apple-login-btn\").data(\r\n \"invalid-login-error-title\"\r\n );\r\n errorMessage = $(\"#signin-with-apple-login-btn\").data(\r\n \"invalid-login-error-message\"\r\n );\r\n errorButton = $(\"#signin-with-apple-login-btn\").data(\r\n \"invalid-login-error-button\"\r\n );\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n } else if (response.ErrorCode === \"UserNotFound\") {\r\n if (\r\n $appleLoginBtn.closest(\"#accountSection\") &&\r\n $appleLoginBtn.closest(\"#accountSection\").length > 0\r\n ) {\r\n $(\"#accountSection\")\r\n .find(\".create-account-btn-text\")\r\n .trigger(\"click\"); \r\n \r\n if (_appleData.user && _appleData.user.name){\r\n // populate the who step and details step fields with Apple data we got from the response\r\n _firstName=_appleData.user.name.firstName;\r\n _lastName=_appleData.user.name.lastName;\r\n }\r\n \r\n if (_appleData.user && _appleData.user.email){\r\n _email=_appleData.user.email;\r\n }\r\n if (_firstName === '' && _email === '') {\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n $('.resume-apple-create-account-text').removeClass('hidden');\r\n $(\"#AppleSignUpAccessToken\").val(\r\n _appleData.authorization.id_token\r\n );\r\n $(\"#newAccountFormExpanded\")\r\n .find(\".retype-new-password\").addClass(\"hidden\");\r\n } else {\r\n $('.resume-apple-create-account-text').addClass('hidden');\r\n setUserDetails(_appleData.authorization.id_token,_firstName,_lastName,_email); \r\n } \r\n } else {\r\n if (_appleData.user && _appleData.user.name){\r\n // populate the who step and details step fields with Apple data we got from the response\r\n _firstName=_appleData.user.name.firstName;\r\n _lastName=_appleData.user.name.lastName;\r\n }\r\n \r\n if (_appleData.user && _appleData.user.email){\r\n _email=_appleData.user.email;\r\n }\r\n sessionStorage.setItem('appleFirstName', _firstName);\r\n sessionStorage.setItem('appleSecondName', _lastName);\r\n sessionStorage.setItem('appleEmail', _email);\r\n sessionStorage.setItem('appleToken', _appleData.authorization.id_token);\r\n window.location.replace(\"/create-account\"); \r\n // setUserDetails(_appleData.authorization.id_token,_firstName,_lastName,_email); \r\n }\r\n } else {\r\n // show generic error\r\n errorTitle = $(\"#signin-with-apple-login-btn\").data(\"error-title\");\r\n errorMessage = $(\"#signin-with-apple-login-btn\").data(\"error-message\");\r\n errorButton = $(\"#signin-with-apple-login-btn\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n }\r\n } else {\r\n errorTitle = $(\"#signin-with-apple-login-btn\").data(\"error-title\");\r\n errorMessage = $(\"#signin-with-apple-login-btn\").data(\"error-message\");\r\n errorButton = $(\"#signin-with-apple-login-btn\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .addClass(\"hidden\");\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n });\r\n } \r\n } catch ( error ) {\r\n // Handle error.\r\n console.log(error);\r\n }\r\n };\r\n \r\n self.createUserOnAppleSignIn = async function () {\r\n\r\n try {\r\n let _firstName=\"\";\r\n let _lastName=\"\";\r\n let _email=\"\";\r\n // Handle successful response.\r\n var _appleData = await AppleID.auth.signIn(); \r\n if (_appleData && _appleData.authorization && _appleData.authorization.id_token){ \r\n \r\n var codeData = { auth_data: _appleData,accountlogininfoid: $appleSignupBtn.data(\"account-login-info\") };\r\n\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/SocialLogin/LoginWithApple\",\r\n method: \"POST\",\r\n data: codeData,\r\n success: function success(data) {\r\n window.console && console.log(\"success\", data);\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (\r\n $appleSignupBtn.closest(\"#accountSection\") &&\r\n $appleSignupBtn.closest(\"#accountSection\").length > 0\r\n ) {\r\n $.navigateToNextStep(data);\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n\r\n if (_appleData.user && _appleData.user.name){\r\n // populate the who step and details step fields with FB data we got from the response\r\n _firstName=_appleData.user.name.firstName;\r\n _lastName=_appleData.user.name.lastName;\r\n }\r\n \r\n if (_appleData.user && _appleData.user.email){\r\n _email=_appleData.user.email;\r\n }\r\n if (_firstName === '' && _email === '') {\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n $('.resume-apple-create-account-text').removeClass('hidden');\r\n $(\"#AppleSignUpAccessToken\").val(\r\n _appleData.authorization.id_token\r\n );\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .removeClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\").val('');\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\").val('');\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .removeClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .removeClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\").removeClass('disabled');\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\").val('');\r\n sessionStorage.removeItem(\"appleFirstName\");\r\n sessionStorage.removeItem(\"appleSecondName\");\r\n sessionStorage.removeItem(\"appleEmail\");\r\n sessionStorage.removeItem(\"appleToken\");\r\n } else {\r\n $('.resume-apple-create-account-text').addClass('hidden');\r\n setUserDetails(_appleData.authorization.id_token,_firstName,_lastName,_email); \r\n sessionStorage.removeItem(\"appleFirstName\");\r\n sessionStorage.removeItem(\"appleSecondName\");\r\n sessionStorage.removeItem(\"appleEmail\");\r\n sessionStorage.removeItem(\"appleToken\");\r\n }\r\n }\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n }); \r\n\r\n }\r\n\r\n \r\n } catch ( error ) {\r\n // Handle error.\r\n console.log(error);\r\n }\r\n \r\n }; \r\n if ($appleSignupBtn && $appleSignupBtn.length > 0) {\r\n if ($(\"#AppleSignUpAccessToken\") && $(\"#AppleSignUpAccessToken\").val() != '') {\r\n const firstName = sessionStorage.getItem('appleFirstName');\r\n const lastName =sessionStorage.getItem('appleSecondName');\r\n const email =sessionStorage.getItem('appleEmail');\r\n const tokenId = sessionStorage.getItem('appleToken');\r\n if (firstName && email) {\r\n setUserDetails(tokenId,firstName,lastName,email); \r\n } else {\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n $('.resume-apple-create-account-text').removeClass('hidden');\r\n $(\"#newAccountFormExpanded\")\r\n .find(\".retype-new-password\").addClass(\"hidden\");\r\n }\r\n }\r\n }\r\n // Listen for authorization failures.\r\ndocument.addEventListener('AppleIDSignInOnFailure', (event) => {\r\n // Handle error.\r\n console.log(event.detail);\r\n});\r\n\r\nfunction setUserDetails(accesstoken,given_name,family_name,email){\r\n \r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n // populate the who step and details step fields with FB data we got from the response\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n // To disable email field\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .addClass(\"disabled\");\r\n $(\"#FirstName\").val(given_name);\r\n $(\"#LastName\").val(family_name);\r\n $(\"#EmailAddress\").val(email);\r\n $(\"#AppleSignUpAccessToken\").val(\r\n accesstoken\r\n );\r\n\r\n // if there is a value in any inputs in the details or new member form (which there is now we've set some), then remove the empty class so the label text sits higher\r\n $(\"#newAccountFormExpanded input\")\r\n .filter(function () {\r\n return this.value;\r\n })\r\n .parent(\".js-form-textfield\")\r\n .removeClass(\"empty\");\r\n }\r\n\r\n});\r\n\r\n\r\n","$(() => {\r\n var clientId = null;\r\n var _scope =\r\n \"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email\";\r\n\r\n const $googleLoginBtn = $(\"#google-login-btn\");\r\n const $googleSignupBtn = $(\"#signup-with-google-login-btn\");\r\n\r\n //Login With Google user\r\n if ($googleLoginBtn && $googleLoginBtn.length > 0) {\r\n clientId = $googleLoginBtn.data(\"client-id\");\r\n $googleLoginBtn.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n const googleLoginTokenClient = google.accounts.oauth2.initTokenClient({\r\n client_id: clientId,\r\n scope: _scope,\r\n prompt: \"\",\r\n callback: (tokenResponse) => {\r\n console.log(tokenResponse);\r\n var codeData = {\r\n access_token: tokenResponse.access_token,\r\n accountlogininfoid: $googleLoginBtn.data(\"account-login-info\"),\r\n };\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/SocialLogin/LoginWithGoogle\",\r\n method: \"POST\",\r\n data: codeData,\r\n success: function success(data) {\r\n window.console && console.log(\"success\", data);\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (\r\n $googleLoginBtn.closest(\"#accountSection\") &&\r\n $googleLoginBtn.closest(\"#accountSection\").length > 0 &&\r\n $(\"#account\").hasClass(\"active-step\")\r\n ) {\r\n $.navigateToNextStep(data);\r\n } else if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0 &&\r\n $(\"#payment\").hasClass(\"active-step\")\r\n ) {\r\n $.navigateStoredPayment(data);\r\n console.log(\"test\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .trigger(\"click\");\r\n $(\".logged-in-section.semi-trusted-mode-content\").addClass(\r\n \"hidden\"\r\n );\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n const response = data.Error.ResponseStatus;\r\n let errorTitle = \"\";\r\n let errorMessage = \"\";\r\n let errorButton = \"\";\r\n if (\r\n response &&\r\n response.ErrorCode == \"incorrectusernameorpassword\"\r\n ) {\r\n // show invalid login error\r\n errorTitle = $(\"#google-login-btn\").data(\r\n \"invalid-login-error-title\"\r\n );\r\n errorMessage = $(\"#google-login-btn\").data(\r\n \"invalid-login-error-message\"\r\n );\r\n errorButton = $(\"#google-login-btn\").data(\r\n \"invalid-login-error-button\"\r\n );\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n } else if (response.ErrorCode === \"UserNotFound\") {\r\n if (\r\n $googleLoginBtn.closest(\"#accountSection\") &&\r\n $googleLoginBtn.closest(\"#accountSection\").length > 0\r\n ) {\r\n $(\"#accountSection\")\r\n .find(\".create-account-btn-text\")\r\n .trigger(\"click\");\r\n\r\n setUserDetails(tokenResponse.access_token);\r\n\r\n\r\n } else {\r\n window.location.replace(\"/createaccount\");\r\n }\r\n } else {\r\n // show generic error\r\n errorTitle = $(\"#google-login-btn\").data(\"error-title\");\r\n errorMessage = $(\"#google-login-btn\").data(\"error-message\");\r\n errorButton = $(\"#google-login-btn\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n }\r\n } else {\r\n errorTitle = $(\"#google-login-btn\").data(\"error-title\");\r\n errorMessage = $(\"#google-login-btn\").data(\"error-message\");\r\n errorButton = $(\"#google-login-btn\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .addClass(\"hidden\");\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n\r\n self.googleIDSignIn = function () {\r\n googleLoginTokenClient.requestAccessToken();\r\n };\r\n }\r\n\r\n // Sign up with Google login user\r\n if ($googleSignupBtn && $googleSignupBtn.length > 0) {\r\n clientId = $googleSignupBtn.data(\"client-id\");\r\n $googleSignupBtn.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\"); \r\n\r\n if ($(\"#GoogleSignUpAccessToken\") && $(\"#GoogleSignUpAccessToken\").val() != ''){\r\n setUserDetails($(\"#GoogleSignUpAccessToken\").val());\r\n }\r\n\r\n const createCustomerTokenClient = google.accounts.oauth2.initTokenClient({\r\n client_id: clientId,\r\n scope: _scope,\r\n prompt: \"\",\r\n callback: (tokenResponse) => {\r\n console.log(tokenResponse);\r\n\r\n var codeData = {\r\n access_token: tokenResponse.access_token,\r\n accountlogininfoid: $googleSignupBtn.data(\"account-login-info\"),\r\n };\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/SocialLogin/LoginWithGoogle\",\r\n method: \"POST\",\r\n data: codeData,\r\n success: function success(data) {\r\n window.console && console.log(\"success\", data);\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (\r\n $googleLoginBtn.closest(\"#accountSection\") &&\r\n $googleLoginBtn.closest(\"#accountSection\").length > 0\r\n ) {\r\n $.navigateToNextStep(data);\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n $(\".checkout-navigation-menu\")\r\n .find(\".tick-icon\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n setUserDetails(tokenResponse.access_token);\r\n }\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n\r\n self.createUserOnGoogleSignIn = function () {\r\n createCustomerTokenClient.requestAccessToken();\r\n };\r\n }\r\n\r\n const googleClient = google.accounts.oauth2.initCodeClient({\r\n client_id: clientId,\r\n scope: _scope,\r\n redirect_uri: \"https://rsllott.dev.local.com/Login/GoogleLoginCallback\",\r\n ux_mode: \"popup\",\r\n callback: (response) => {\r\n console.log(response);\r\n var codeData = { code: response.code };\r\n console.log(response);\r\n },\r\n });\r\n\r\n self.googleIDSignInOnSuccess = function () {};\r\n\r\n self.createUserOnGoogleSignInRequestCode = function () {\r\n googleClient.requestCode();\r\n };\r\n\r\n function setUserDetails(accesstoken){\r\n jQuery\r\n .ajax({\r\n url:\r\n \"https://www.googleapis.com/oauth2/v1/userinfo?access_token=\" +\r\n accesstoken,\r\n method: \"GET\",\r\n // data: codeData,\r\n success: function success(data) {\r\n window.console && console.log(\"success\", data);\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n // populate the who step and details step fields with FB data we got from the response\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n // To disable email field\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .addClass(\"disabled\");\r\n $(\"#FirstName\").val(data.given_name);\r\n $(\"#LastName\").val(data.family_name);\r\n $(\"#EmailAddress\").val(data.email);\r\n $(\"#GoogleSignUpAccessToken\").val(\r\n accesstoken\r\n );\r\n\r\n // if there is a value in any inputs in the details or new member form (which there is now we've set some), then remove the empty class so the label text sits higher\r\n $(\"#newAccountFormExpanded input\")\r\n .filter(function () {\r\n return this.value;\r\n })\r\n .parent(\".js-form-textfield\")\r\n .removeClass(\"empty\");\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n });\r\n\r\n }\r\n\r\n\r\n});\r\n","$(document).ready(function () {\r\n $.loggedInMenuClose();\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n function closeNavItems() {\r\n const mobileCollapse = $(\".navigation__mobile-wrapper\").find(\r\n \".collapse-custom\"\r\n );\r\n if (mobileCollapse.length < 1) return;\r\n\r\n $(mobileCollapse)\r\n .find(\".collapse-custom__item\")\r\n .each(function (currIndex) {\r\n const currGrpHead = $(this).find(\".collapse-custom__head\");\r\n const currGrpBody = $(this).find(\".collapse-custom__body\");\r\n const navAnchorUl = $(currGrpBody).find(\".navigation__ul.dropdown\");\r\n if (currGrpBody.length < 1 || currGrpHead.length < 1) return;\r\n let largestTransitionDuration = 0;\r\n // expecting a whole number in seconds\r\n const transitionAnimations = $(currGrpBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration\r\n ? (largestTransitionDuration = el)\r\n : null\r\n );\r\n $(currGrpBody).css(\"maxHeight\", \"0px\");\r\n setTimeout(() => {\r\n $(this).hasClass(\"collapse-item-expanded\") &&\r\n $(this).removeClass(\"collapse-item-expanded\");\r\n if ($(currGrpHead).hasClass(\"open\"))\r\n $(currGrpHead).removeClass(\"open\").attr(\"aria-expanded\", \"false\");\r\n if (!$(currGrpBody).hasClass(\"collapsed\"))\r\n $(currGrpBody).addClass(\"collapsed\").attr(\"aria-expanded\", \"false\");\r\n if ($(navAnchorUl).length > 0 && $(navAnchorUl).hasClass(\"active\"))\r\n $(navAnchorUl).removeClass(\"active\");\r\n }, largestTransitionDuration * 1000);\r\n });\r\n }\r\n\r\n function getTransitionDuration(clickedBody) {\r\n let largestTransitionDuration = 0;\r\n if ($(clickedBody).length > 0) {\r\n const transitionAnimations = $(clickedBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration ? (largestTransitionDuration = el) : null\r\n );\r\n }\r\n return largestTransitionDuration * 1000;\r\n }\r\n const resizeHandler = () => {\r\n if ($(window).width() >= 768) {\r\n if (!$(\".navigation__mobile-wrapper\").hasClass(\"translate-x-full\")) {\r\n $(\".navigation__mobile-wrapper\").addClass(\"translate-x-full\");\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-wrapper\")));\r\n }\r\n\r\n if (\r\n !$(\".navigation__mobile-login-wrapper\").hasClass(\"translate-x-full\")\r\n ) {\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"translate-x-full\");\r\n\r\n setTimeout(() => {\r\n $(\".navigation__mobile-login-wrapper\").addClass(\"collapsed\");\r\n }, getTransitionDuration($(\".navigation__mobile-login-wrapper\")));\r\n }\r\n\r\n if ($(\".navigation__hamburger\").hasClass(\"open\")) {\r\n $(\".navigation__hamburger\").removeClass(\"open\");\r\n }\r\n\r\n if ($(\".navigation__login > a:first-of-type\").hasClass(\"open\")) {\r\n $(\".navigation__login > a:first-of-type\").removeClass(\"open\");\r\n }\r\n\r\n closeNavItems();\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n } else {\r\n $(\".navigation__desktop-collapse .collapse-custom\")\r\n .find(\".collapse-custom__item\")\r\n .each(function (currIndex) {\r\n if ($(this).hasClass(\"collapse-item-expanded\"))\r\n $(this).removeClass(\"collapse-item-expanded\");\r\n\r\n if ($(this).find(\".navigation-icon.account\").length > 0) {\r\n $(this).find(\".navigation-icon.account\").hasClass(\"open\") &&\r\n $(this).find(\".navigation-icon.account\").removeClass(\"open\");\r\n }\r\n const currGrpBody = $(this).find(\".collapse-custom__body\");\r\n let largestTransitionDuration = 0;\r\n if (currGrpBody.length < 1) return;\r\n\r\n const transitionAnimations = $(currGrpBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration\r\n ? (largestTransitionDuration = el)\r\n : null\r\n );\r\n\r\n $(currGrpBody).css({\r\n maxHeight: \"0px\",\r\n });\r\n\r\n $(currGrpBody).removeClass(\"animate-fx-1\");\r\n\r\n setTimeout(() => {\r\n $(currGrpBody).addClass(\"collapsed\");\r\n $(currGrpBody).attr(\"aria-expanded\", \"false\");\r\n $(this)\r\n .find(\".collapse-custom__head\")\r\n .attr(\"aria-expanded\", \"false\");\r\n $(document).trigger(\"click.clickOutside\", [true]);\r\n }, largestTransitionDuration * 1000);\r\n });\r\n }\r\n };\r\n\r\n const debouncedResizeHandler = debounce(resizeHandler, 100);\r\n window.addEventListener(\"resize\", debouncedResizeHandler);\r\n});\r\n","$(() => {\r\n $(document).ready(function () {\r\n $(window).on(\"load\", function () {\r\n $.navigationICon();\r\n });\r\n });\r\n});\r\n","import { Carousel } from \"../carousel/carousel\";\r\nimport carouselSettings from \"../carousel/carousel-settings\";\r\nimport TICKET_SELECTOR from \"../sticky-buy-ticket-selection/sticky-buy-ticket-selection\";\r\nimport lity from \"lity\";\r\nimport SimpleScrollbar from \"../scrollbar/scrollbar\";\r\nimport extensions from \"../../js/util/extensions\";\r\n\r\n$(() => {\r\n const existingTickets = [];\r\n const existingTicketValues = [];\r\n const $goToCartBtn = $(\"#goToCartBtn\");\r\n $(\".cart-selction.hidden\").find(\".carousel\").slick(\"unslick\");\r\n $(\"#NVIPTicketSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n let isCartLoading = false;\r\n\r\n $.hideGPayAPayForPreOrder = () => {\r\n const cartItems = $('#NVIPTicketSummary').find('.ticket-item-container');\r\n let preOrderArray = 0, nonPreOrderArray = 0;\r\n cartItems.each(function () {\r\n if($(this).find('.ticket-item-content').hasClass('preorder-item')) {\r\n preOrderArray++;\r\n } else {\r\n nonPreOrderArray++;\r\n }\r\n });\r\n let activeClassBtn = [];\r\n $(\"#paymentRadioButtons\")\r\n .find(\".btn.btn-payment\")\r\n .each(function (i, el) {\r\n if($(this).not(\".hidden\").hasClass(\"active\")) {\r\n activeClassBtn.push(el);\r\n }\r\n });\r\n if (activeClassBtn.length === 0) {\r\n $(\".reviewAndOrderBtn\").addClass(\"disabled\");\r\n } else {\r\n $(\".reviewAndOrderBtn\").removeClass(\"disabled\");\r\n }\r\n preOrderArray >= 1 && nonPreOrderArray === 0 ? $.showHidePayment(true) : $.showHidePayment(false);\r\n }\r\n // To handle query string param from URL\r\n const cartQueryParam = extensions.getQueryStringParamByName(\"cart\");\r\n\r\n // To check if draw parameter is having error or not\r\n if (\r\n typeof $(\"#checkoutContainer\").data(\"query-param-error-msg\") !==\r\n \"undefined\" &&\r\n $(\"#checkoutContainer\").data(\"query-param-error-msg\") !== \"\" &&\r\n $(\"#checkoutContainer\").data(\"nvip-checkout\") === \"True\"\r\n ) {\r\n systemNotification.error(\r\n $(\"#checkoutContainer\").data(\"query-param-error-title\"),\r\n $(\"#checkoutContainer\").data(\"query-param-error-msg\"),\r\n $(\"#checkoutContainer\").data(\"query-param-error-btn\")\r\n );\r\n $(\"#system-notification--error\")\r\n .closest(\".lity-wrap\")\r\n .attr(\"id\", \"deepLinkOutsideModal\");\r\n $(\"#system-notification--error\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n getCartModal(true);\r\n });\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n if ($(e.target).is(\"#deepLinkOutsideModal\")) {\r\n e.preventDefault();\r\n getCartModal(true);\r\n }\r\n });\r\n } else if ($(\"#NVIPTicketSummary\") && $(\"#NVIPTicketSummary\").length > 0 && $(\"#NVIPTicketSummary\").data(\"cart-qty\") === 0 && cartQueryParam === null) {\r\n //If cart is empty on NVIP chekcout page\r\n getCartModal(true);\r\n } else if (cartQueryParam && cartQueryParam.toLowerCase() === \"open\") {\r\n getCartModal(true);\r\n }\r\n\r\n // On click of header icon\r\n $(\".shopping-cart-icon\").on(\"click\", function (e) {\r\n if (isCartLoading) return;\r\n isCartLoading = true;\r\n getCartModal(false);\r\n });\r\n\r\n // On click of cart checkout button\r\n $(document).on(\"click\", \"#shoppingCart #cartBtn\", function (e) {\r\n const $this = $(this);\r\n e.preventDefault();\r\n if ($(\"#shoppingCart\").hasClass(\"NVIP-checkout-modify\")) {\r\n getCheckoutSummary();\r\n $(\"#shoppingCart\").find(\".lity-content\").toggleClass(\"translate-x-full\");\r\n $(\"#shoppingCart\").find(\".lity-container\").toggleClass(\"lity-animate\");\r\n setTimeout(() => {\r\n $(\"#shoppingCart\").remove();\r\n }, getTransitionDuration($(\"#shoppingCart\")));\r\n } else {\r\n const redirectURL = $this.data(\"redirect-nvip-cart-url\");\r\n window.location.replace(redirectURL);\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n showHideGift();\r\n }\r\n unlockScrollOnBody();\r\n });\r\n\r\n if ($(\"#NVIPTicketSummary\") && $(\"#NVIPTicketSummary\").length > 0) {\r\n showHideGift();\r\n }\r\n\r\n function lockScrollOnBody() {\r\n $(\"body\").addClass(\"body-scroll-lock\");\r\n }\r\n\r\n function unlockScrollOnBody() {\r\n $(\"body\").removeClass(\"body-scroll-lock\");\r\n }\r\n\r\n function showHideGift() {\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n const $gift = $(\".checkout-navigation-menu\").find(\"#gift\");\r\n const $payment = $(\".checkout-navigation-menu\").find(\"#payment\");\r\n const $semiTrustedLogin = $(\r\n \".logged-in-section.semi-trusted-mode-content\"\r\n ).not(\".hidden\");\r\n\r\n if ($NVIPTicketSummary && $NVIPTicketSummary.length > 0) {\r\n // Check if there are only pre order items in the cart, then remove apple/google pays\r\n $.hideGPayAPayForPreOrder();\r\n if ($NVIPTicketSummary.data(\"isgift\").toLowerCase() === \"false\") {\r\n $gift.addClass(\"hidden\");\r\n $gift.next(\".step-line\").addClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n if (\r\n $(\"#account\").hasClass(\"validated-step\") ||\r\n ($semiTrustedLogin && $semiTrustedLogin.length > 0)\r\n ) {\r\n $payment.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n $(\"#paymentSection\").removeClass(\"hidden\");\r\n $(\"#paymentSection\")\r\n .find(\".loginFormStoredPayment\")\r\n .addClass(\"hidden\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n } else {\r\n $payment.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n $(\"#paymentSection\").addClass(\"hidden\");\r\n }\r\n } else {\r\n // If the session is in semitrusted show login tab\r\n $.ajax({\r\n url: \"/rslsitecoreapi/Checkout/CheckUserTrustState\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (result.Status === \"SemiTrusted\") {\r\n // To show semitrusted login section\r\n $(\".logged-in-section.semi-trusted-mode-content\").removeClass(\r\n \"hidden\"\r\n );\r\n $(\".loginFormStoredPayment\").removeClass(\"hidden\");\r\n $(\".loginFormStoredPayment\").show();\r\n $(\"#loggedInDisplay\").addClass(\"hidden\");\r\n\r\n $payment.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $gift.removeClass(\"hidden\");\r\n $gift.next(\".step-line\").removeClass(\"hidden\");\r\n $gift.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n $(\"#paymentSection\").addClass(\"hidden\");\r\n } else {\r\n // To show gift section\r\n $gift.removeClass(\"hidden\");\r\n $gift.next(\".step-line\").removeClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $gift.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#gift\").trigger(\"click\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n $.retrieveGiftcontacts();\r\n } else {\r\n $gift.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n }\r\n }\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n }\r\n }\r\n\r\n // On click of close icon\r\n $(document).on(\"click touchstart\", \"#cartContainer .cart-close\", function () {\r\n $(\"#NVIPTicketSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n $(\"#shoppingCart\").find(\".lity-content\").toggleClass(\"translate-x-full\");\r\n $(\"#shoppingCart\").find(\".lity-container\").toggleClass(\"lity-animate\");\r\n if ($(\"#shoppingCart\").hasClass(\"NVIP-checkout-modify\")) {\r\n getCheckoutSummary();\r\n setTimeout(() => {\r\n $(\"#shoppingCart\").remove();\r\n }, getTransitionDuration($(\"#shoppingCart\")));\r\n } else {\r\n setTimeout(() => {\r\n $(\"#shoppingCart\").remove();\r\n }, getTransitionDuration($(\"#shoppingCart\")));\r\n }\r\n unlockScrollOnBody();\r\n });\r\n\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n if ($(e.target).is(\"#shoppingCart\")) {\r\n unlockScrollOnBody();\r\n $(\"#NVIPTicketSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n $(\"#shoppingCart\").find(\".lity-content\").toggleClass(\"translate-x-full\");\r\n $(\"#shoppingCart\").find(\".lity-container\").toggleClass(\"lity-animate\");\r\n if ($(\"#shoppingCart\").hasClass(\"NVIP-checkout-modify\")) {\r\n getCheckoutSummary();\r\n setTimeout(() => {\r\n $(\"#shoppingCart\").remove();\r\n }, getTransitionDuration($(\"#shoppingCart\")));\r\n } else {\r\n setTimeout(() => {\r\n $(\"#shoppingCart\").remove();\r\n }, getTransitionDuration($(\"#shoppingCart\")));\r\n }\r\n }\r\n });\r\n function getCheckoutSummary() {\r\n const $this = $(\"#shoppingCart.NVIP-checkout-modify\");\r\n $.ajax({\r\n url: $this.data(\"checkout-service-url\"),\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if ((result.Data && result.Data.RedirectUrl) || result.RedirectUrl) {\r\n window.location.replace(result.RedirectUrl);\r\n return;\r\n }\r\n\r\n $(\"#NVIPTicketSummary\").replaceWith(result.Html);\r\n \r\n // rebind modify button\r\n $(\"#NVIPTicketSummary\")\r\n .find(\"#modifyBtn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"pointer-none\");\r\n $.modifyBtnGA($(this));\r\n getCartModal(true);\r\n });\r\n\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n showHideGift();\r\n }\r\n $.paymentCalc();\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n const getTransitionDuration = (clickedBody) => {\r\n let largestTransitionDuration = 0;\r\n if ($(clickedBody).length > 0) {\r\n const transitionAnimations = $(clickedBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration ? (largestTransitionDuration = el) : null\r\n );\r\n }\r\n return largestTransitionDuration * 1000;\r\n };\r\n // From sticky buy \"GetCartItems\"\r\n $goToCartBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n getCartModal(false);\r\n });\r\n\r\n //On click of modify button on checkout page\r\n $(\"#NVIPTicketSummary\")\r\n .find(\"#modifyBtn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"pointer-none\");\r\n $.modifyBtnGA($(this));\r\n getCartModal(true);\r\n });\r\n\r\n function getCartModal(flagValue) {\r\n // Update the cart based on selected tickets\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/GetShoppingCart\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (result.RedirectUrl) {\r\n window.location.replace(result.RedirectUrl);\r\n return;\r\n }\r\n $(document.body).append(result.Html);\r\n lockScrollOnBody();\r\n $(\"#goToCartBtn\").closest(\".lity\").hide();\r\n if (\r\n $(\".ticket-depletion-container\") &&\r\n $(\".ticket-depletion-container\").length > 0\r\n ) {\r\n $.getTicketDepletion();\r\n }\r\n $(\"#shoppingCart\").animate({ right: \"0px\" }, \"1000\", function () {\r\n $(\"#shoppingCart\").removeClass(\"hidden\");\r\n });\r\n if (flagValue) {\r\n $(\"#shoppingCart\").addClass(\"NVIP-checkout-modify\");\r\n } else {\r\n $(\"#shoppingCart\").removeClass(\"NVIP-checkout-modify\");\r\n }\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/GetShoppingCartCount\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(count) {\r\n cartQtyCalc(count.Data.ShoppingCartCount);\r\n },\r\n fail: function (error) {},\r\n });\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n $(\".loading-indicator\").remove();\r\n $(\"#goToCartBtn\").removeClass(\"disabled-loader\");\r\n $(\"#NVIPTicketSummary\")\r\n .find(\"#modifyBtn\")\r\n .removeClass(\"pointer-none\");\r\n } else {\r\n // To initiate the slick carousel\r\n getSlickCarousel();\r\n paymentCalc(); // Payment\r\n // To get existing ticket selector values for NVIP cart\r\n $(\"#cartContainer\")\r\n .find(\".cart-section\")\r\n .find(\".carousel\")\r\n .each(function () {\r\n if (\r\n $(this).find(\".slick-center\") &&\r\n $(this).find(\".slick-center\").length > 0\r\n ) {\r\n existingTickets.push(\r\n $(this).closest(\".cart-section\").data(\"product-variant-id\")\r\n );\r\n existingTicketValues.push(\r\n $(this).find(\".ticket.selected\").data(\"ticket-value\")\r\n );\r\n }\r\n });\r\n\r\n cartFunctions(); //Add and remove funcitons\r\n // Capture current cart items and send to GA\r\n $.trackViewCart(\r\n $(\".cart-container .cart-added-items .slick-slide.slick-current a\")\r\n );\r\n }\r\n $(\"#NVIPTicketSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#goToCartBtn\").removeClass(\"disabled-loader\");\r\n isCartLoading = false;\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n\r\n $(document).on(\"click touchstart\", \"#shoppingCart .slick-slide\", function (evt) {\r\n evt.preventDefault();\r\n const ticketEl = $(this);\r\n const $currentCarousel = $(ticketEl.closest(\".carousel\"));\r\n const slideIndex = ticketEl.data(\"slick-index\");\r\n const swiperEl = $(\".ticket-selector .carousel\");\r\n // move the carousel to center the selected slide\r\n $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n ticketSelection($(this).find(\".ticket\"));\r\n setMostPopular($(this));\r\n paymentCalc();\r\n $.trackCartTicketSelector(ticketEl, existingTickets, existingTicketValues);\r\n const totalCartItems = $(\".cart-added-items\").find(\".cart-section\").length;\r\n cartQtyCalc(totalCartItems);\r\n updateShoppingCartCall($(this).find(\".ticket\"));\r\n });\r\n // On click of arrows\r\n $(document).on(\"click touchstart\", \"#shoppingCart .slick-arrow\", function (evt) {\r\n evt.preventDefault();\r\n const slickCenter = $(this)\r\n .closest(\".ticket-selector-slider\")\r\n .find(\".slick-center\");\r\n if ($(this).hasClass(\"slick-prev\")) {\r\n smoothTicketSelection(slickCenter);\r\n } else {\r\n smoothTicketSelection(slickCenter);\r\n }\r\n ticketSelection(\r\n $(this).closest(\".cart-section\").find(\".slick-center .ticket\")\r\n );\r\n setMostPopular($(this).closest(\".cart-section\").find(\".slick-center\"));\r\n paymentCalc();\r\n $.trackCartTicketSelector(\r\n slickCenter,\r\n existingTickets,\r\n existingTicketValues\r\n );\r\n const totalCartItems = $(\".cart-added-items\").find(\".cart-section\").length;\r\n cartQtyCalc(totalCartItems);\r\n updateShoppingCartCall(\r\n $(this).closest(\".cart-section\").find(\".slick-center .ticket\")\r\n );\r\n });\r\n function smoothTicketSelection(ticketEl) {\r\n const $currentCarousel = $(ticketEl.closest(\".carousel\"));\r\n const selected = ticketEl.find(\".ticket\").hasClass(\"selected\");\r\n const slideIndex = ticketEl.data(\"slick-index\");\r\n\r\n // move the carousel to center the selected slide\r\n $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n }\r\n function getSlickCarousel() {\r\n let initialSlideValue;\r\n // To initiate the slick carousel\r\n $(\"#cartContainer\")\r\n .find(\".cart-section\")\r\n .find(\".carousel\")\r\n .each(function () {\r\n const $currentCarousel = $(this);\r\n initialSlideValue = $(this).data(\"initial-slide\");\r\n carouselSettings.initialSlide =\r\n initialSlideValue !== undefined\r\n ? initialSlideValue\r\n : carouselSettings.initialSlide;\r\n new Carousel(this, carouselSettings);\r\n if (\r\n $currentCarousel.find(\".slick-arrow.slick-next\") &&\r\n $currentCarousel.find(\".slick-arrow.slick-next\").length > 0\r\n ) {\r\n const iconElementLeft =\r\n '
';\r\n $currentCarousel\r\n .find(\".slick-arrow.slick-next\")\r\n .empty()\r\n .append(iconElementLeft);\r\n }\r\n if (\r\n $currentCarousel.find(\".slick-arrow.slick-prev\") &&\r\n $currentCarousel.find(\".slick-arrow.slick-prev\").length > 0\r\n ) {\r\n const iconElementRight =\r\n '
';\r\n $currentCarousel\r\n .find(\".slick-arrow.slick-prev\")\r\n .empty()\r\n .append(iconElementRight);\r\n }\r\n // $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n $currentCarousel.find(\"a.ticket\").each(function () {\r\n if (\r\n $(this).closest(\".slick-center\") &&\r\n $(this).closest(\".slick-center\").length > 0\r\n ) {\r\n const swiperWrapperEl = $(this).closest(\".swiper-wrapper\");\r\n // remove class from other tickets\r\n swiperWrapperEl.find(\".ticket\").removeClass(\"selected\");\r\n //swiperWrapperEl.find(\".ticket\").find(\".total-tickets\").hide();\r\n swiperWrapperEl\r\n .find(\".ticket\")\r\n .closest(\".slick-slide\")\r\n .removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n $(this).find(\".total-tickets\").show();\r\n }\r\n });\r\n setMostPopular($currentCarousel.find(\".slick-center\"));\r\n if ($currentCarousel.find(\".ticket.selected\")) {\r\n checkBonusTickets($currentCarousel.find(\".ticket.selected\"));\r\n }\r\n });\r\n }\r\n function ticketSelection(ticketEl) {\r\n const swiperEl = $(\".ticket-selector .carousel\");\r\n newSelectedTicket(swiperEl.find(\".slick-center\"));\r\n if (ticketEl) {\r\n checkBonusTickets(ticketEl);\r\n }\r\n }\r\n function setMostPopular($this) {\r\n const ticketTitle = $this.find(\".ticket.selected\").data(\"ticket-title\");\r\n $this.closest(\".cart-section\").find(\".ticket-title\").html(ticketTitle);\r\n }\r\n function newSelectedTicket($ticket) {\r\n const totalTickets = $ticket.find(\".ticket\").data(\"total-tickets\");\r\n const swiperWrapperEl = $ticket.closest(\".swiper-wrapper\");\r\n\r\n // remove class from other tickets\r\n swiperWrapperEl.find(\".ticket\").removeClass(\"selected\");\r\n // swiperWrapperEl.find(\".ticket\").find(\".total-tickets\").hide();\r\n swiperWrapperEl\r\n .find(\".ticket\")\r\n .closest(\".slick-slide\")\r\n .removeClass(\"slick-current slick-center selected\");\r\n\r\n // add class to this ticket\r\n $ticket.addClass(\"slick-current slick-center selected\");\r\n $ticket.find(\".ticket\").addClass(\"selected\");\r\n swiperWrapperEl.addClass(\"selected\");\r\n }\r\n\r\n // On click of adding upsell ticket to cart \"UpdateShoppingCart\"\r\n $(document).on(\"click\", \"#shoppingCart .upsell-cart-btn\", function (e) {\r\n e.preventDefault();\r\n const totalCartItems = $(\".cart-added-items\").find(\".cart-section\").length;\r\n if (totalCartItems >= 10) {\r\n getErrorCartQty();\r\n } else {\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n '
'\r\n );\r\n addUpsellTicket($(this));\r\n }\r\n });\r\n\r\n function addUpsellTicket($this) {\r\n $this.addClass(\"added-upsell-item\");\r\n const $upsellBtn = $this;\r\n const addedTicketId = $upsellBtn.data(\"product-variant-id\");\r\n const requestVerificationToken = $(\"#shoppingCart\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const data = {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ShoppingCartItems: [],\r\n IsGift: $(\"#cartContainer\").find(\"#giftPurchase\").val(),\r\n };\r\n\r\n $(\".cart-added-items\")\r\n .find(\".cart-section\")\r\n .each(function () {\r\n data.ShoppingCartItems.push({\r\n ProductVariantId: $(this).find(\".ticket.selected\").data(\"product-id\"),\r\n ArtUnionId: $(this).data(\"art-union-id\"),\r\n Quantity: $(this).find(\".ticket.selected\").data(\"qty\"),\r\n IsPreOrder: $(this).data(\"preorder-item\"),\r\n });\r\n });\r\n $(\".added-upsell-item.upsell-cart-btn\")\r\n .closest(\".upsell-section\")\r\n .each(function () {\r\n data.ShoppingCartItems.push({\r\n ProductVariantId: $(this)\r\n .find(\".added-upsell-item.upsell-cart-btn\")\r\n .data(\"product-variant-id\"),\r\n ArtUnionId: $(this)\r\n .find(\".added-upsell-item.upsell-cart-btn\")\r\n .data(\"art-union-id\"),\r\n Quantity: 1,\r\n IsPreOrder: $(this).data(\"preorder-item\"),\r\n });\r\n });\r\n\r\n $.ajax({\r\n url: $(\"#cartContainer\")\r\n .find(\".upsell-cart-btn\")\r\n .data(\"service-add-upsell-url\"),\r\n data,\r\n method: \"POST\",\r\n async: false,\r\n\r\n success: function success(result) {\r\n $upsellBtn\r\n .closest(\".upsell-section\")\r\n .find(\".upsell-section-content\")\r\n .addClass(\"hidden\");\r\n $upsellBtn\r\n .closest(\".upsell-section\")\r\n .find(\".upsell-added-cart-info\")\r\n .removeClass(\"hidden\");\r\n\r\n // To update the cart \"GetCartItems\"\r\n $.ajax({\r\n url: $upsellBtn.data(\"service-get-cart-items-url\"),\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n $(\".cart-added-items\").html(result.Html);\r\n // To initiate the slick carousel\r\n getSlickCarousel();\r\n $(\"#shoppingCart\")\r\n .find(\".upsell-cart-btn\")\r\n .removeClass(\"added-upsell-item\");\r\n if (\r\n $(\".ticket-depletion-container\") &&\r\n $(\".ticket-depletion-container\").length > 0\r\n ) {\r\n $.getTicketDepletion();\r\n }\r\n $(\"#shoppingCart\").animate({ right: \"0px\" }, \"1000\", function () {\r\n $(\"#shoppingCart\").removeClass(\"hidden\");\r\n });\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n paymentCalc();\r\n const totalCartItems =\r\n $(\".cart-added-items\").find(\".cart-section\").length;\r\n cartQtyCalc(totalCartItems);\r\n cartFunctions();\r\n $.trackAddCartItem($upsellBtn);\r\n // To get existing ticket selector values for NVIP cart\r\n $(\"#cartContainer\")\r\n .find(\".cart-section\")\r\n .find(\".carousel\")\r\n .each(function () {\r\n if (\r\n $(this).find(\".slick-center\") &&\r\n $(this).find(\".slick-center\").length > 0\r\n ) {\r\n existingTickets.push(\r\n $(this)\r\n .closest(\".cart-section\")\r\n .data(\"product-variant-id\")\r\n );\r\n existingTicketValues.push(\r\n $(this).find(\".ticket.selected\").data(\"ticket-value\")\r\n );\r\n }\r\n });\r\n }\r\n },\r\n complete: function (data) {\r\n //Scroll to the newly added item\r\n $(\".cart-added-items\")\r\n .find(\".cart-section\")\r\n .each(function () {\r\n if (\r\n $(this).find(\".ticket.selected\").data(\"product-id\") ===\r\n addedTicketId\r\n ) {\r\n const cartScrollWrapper = $(this).closest($(\".ss-content\"));\r\n if ($(cartScrollWrapper).length < 1) return;\r\n\r\n const cartScrollContent =\r\n $(cartScrollWrapper).find(\".lity-content\");\r\n if ($(cartScrollContent).length < 1) return;\r\n\r\n // confirm if cart has scrollbar\r\n if ($(cartScrollContent).height() <= $(window).outerHeight())\r\n return;\r\n\r\n // return if new upsell item added already at the top of the cart\r\n if ($(\".ss-content\").scrollTop() === this.offsetTop) return;\r\n\r\n $(cartScrollWrapper).animate(\r\n {\r\n scrollTop: this.offsetTop,\r\n },\r\n 2000\r\n );\r\n }\r\n });\r\n },\r\n fail: function (error) {},\r\n });\r\n },\r\n fail: function (error) {},\r\n });\r\n\r\n $upsellBtn.removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n }\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n const invalid = extensions.getQueryStringParamByName(\"invalid\");\r\n if (invalid && invalid.toLowerCase() === \"true\") {\r\n systemNotification.error(\r\n \"title\",\r\n \"You've entered an invalid parameter, please select from the cart\",\r\n \"Ok\"\r\n );\r\n }\r\n function getErrorCartQty() {\r\n const message = $(\"#shoppingCart\").data(\"error-qty-message\");\r\n const title = $(\"#shoppingCart\").data(\"error-qty-title\");\r\n const button = $(\"#shoppingCart\").data(\"error-qty-button\");\r\n systemNotification.error(title, message, button);\r\n }\r\n\r\n function cartQtyCalc(totalCartItems) {\r\n if (totalCartItems === 1) {\r\n $(\".cart-qty\").html(totalCartItems);\r\n $(\".cart-qty-container\").find(\".item-text\").html(\" item\");\r\n }\r\n if (totalCartItems > 1) {\r\n $(\".cart-qty\").html(totalCartItems);\r\n $(\".cart-qty-container\").find(\".item-text\").html(\" items\");\r\n }\r\n\r\n if (totalCartItems === 0) {\r\n $(\".shopping-cart-icon\")\r\n .find(\".navigation-icon__counter\")\r\n .removeClass(\"solid\");\r\n $(\".shopping-cart-icon\").find(\".cart-qty\").html(\"\");\r\n $(\".cart-empty-section\").removeClass(\"hidden\");\r\n $(\"#cartBtn\").addClass(\"disabled\");\r\n $(\".cart-qty-container\").addClass(\"hidden\");\r\n } else {\r\n $(\".shopping-cart-icon\")\r\n .find(\".navigation-icon__counter\")\r\n .addClass(\"solid\");\r\n $(\".shopping-cart-icon\").find(\".cart-qty\").html(totalCartItems);\r\n $(\".cart-empty-section\").addClass(\"hidden\");\r\n $(\".cart-qty-container\").removeClass(\"hidden\");\r\n\r\n setCheckoutButtonStatus();\r\n\r\n }\r\n }\r\n function paymentCalc() {\r\n let totalValue = 0,\r\n preorderValue = 0,\r\n totalPayment = 0,\r\n ticketValue = 0,\r\n preOrderArtUnionId = [];\r\n\r\n $(\".preorder-summary\").find(\".preorder-details-container\").html(\"\");\r\n $(\".preorder-summary\").addClass(\"hidden\");\r\n // Pay now calculaiton\r\n const $cartItem = $(\".cart-ticket-selector\").not(\".preorder-item\");\r\n const $cartPreOrderItem = $(\".cart-ticket-selector.preorder-item\");\r\n $cartItem.each(function () {\r\n if ($(this).find(\".ticket.selected\").attr(\"data-ticket-value\")) {\r\n totalValue += parseInt(\r\n $(this).find(\".ticket.selected\").attr(\"data-ticket-value\"),\r\n 10\r\n );\r\n }\r\n });\r\n if ($cartPreOrderItem && $cartPreOrderItem.length > 0) {\r\n $cartPreOrderItem.each(function () {\r\n preOrderArtUnionId.push(\r\n $(this).closest(\".cart-section\").data(\"art-union-id\")\r\n );\r\n\r\n if ($(this).find(\".ticket.selected\").attr(\"data-ticket-value\")) {\r\n preorderValue += parseInt(\r\n $(this).find(\".ticket.selected\").attr(\"data-ticket-value\"),\r\n 10\r\n );\r\n }\r\n });\r\n let uniqueArtId = preOrderArtUnionId.filter(function (\r\n el,\r\n i,\r\n preOrderArtUnionId\r\n ) {\r\n return i == preOrderArtUnionId.indexOf(el);\r\n });\r\n $(\".preorder-summary\").removeClass(\"hidden\");\r\n\r\n for (let i = 0; i < uniqueArtId.length; i++) {\r\n ticketValue = 0;\r\n const artID = uniqueArtId[i];\r\n const preOrderDate = $(\".cart-section-content\")\r\n .closest(\"[data-art-union-id='\" + artID + \"']\")\r\n .data(\"pre-order-date\");\r\n $cartPreOrderItem.each(function () {\r\n if ($(this).closest(\".cart-section\").data(\"art-union-id\") === artID) {\r\n ticketValue += parseInt(\r\n $(this).find(\".ticket.selected\").attr(\"data-ticket-value\"),\r\n 10\r\n );\r\n }\r\n });\r\n\r\n const preOrderHTML =\r\n `
\r\n
\r\n
` +\r\n preOrderDate +\r\n `
\r\n
PRE-ORDER
\r\n
\r\n
\r\n
` +\r\n `$${ticketValue}` +\r\n `
\r\n
\r\n
`;\r\n $(\".preorder-summary\")\r\n .find(\".preorder-details-container\")\r\n .append(preOrderHTML);\r\n }\r\n }\r\n\r\n totalPayment = totalValue + preorderValue;\r\n $(\"#cartContainer\").find(\".pay-btn\").find(\".amount\").text(`$${totalValue}`);\r\n $(\"#cartContainer\")\r\n .find(\".total-amount\")\r\n .find(\".amount\")\r\n .text(`$${totalPayment}`);\r\n }\r\n\r\n function updateShoppingCartCall($this) {\r\n const cartItems = $(\".cart-added-items\")\r\n .children(\".cart-section\")\r\n .not(\".removed-cart-item\");\r\n const requestVerificationToken = $(\"#shoppingCart\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const data = {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ShoppingCartItems: [],\r\n IsGift: $(\"#cartContainer\").find(\"#giftPurchase\").val(),\r\n };\r\n cartItems.each(function () {\r\n data.ShoppingCartItems.push({\r\n ProductVariantId: $(this).find(\".ticket.selected\").data(\"product-id\"),\r\n ArtUnionId: $(this).data(\"art-union-id\"),\r\n Quantity: $(this).find(\".ticket.selected\").data(\"qty\"),\r\n IsPreOrder: $(this).data(\"preorder-item\"),\r\n });\r\n });\r\n\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/UpdateShoppingCart\",\r\n data,\r\n method: \"POST\",\r\n async: false,\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n }\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n\r\n function checkBonusTickets($this) {\r\n const bonusValue = $this.data(\"bonus-tickets\");\r\n const bonusGold = $this.data(\"bonus-gold\");\r\n const $bonusTicketsGold = $this\r\n .closest(\".cart-ticket-selector\")\r\n .find(\".bonus-tickets-gold\");\r\n const $noBonusTicketsGold = $this\r\n .closest(\".cart-ticket-selector\")\r\n .find(\".no-bonus-tickets-gold\");\r\n const $noBonusTickets = $this\r\n .closest(\".cart-ticket-selector\")\r\n .find(\".no-bonus-tickets\");\r\n if (bonusValue === 0 && bonusGold.toString().toLowerCase() === `$0k`) {\r\n $bonusTicketsGold.addClass(\"hidden\");\r\n $noBonusTickets.addClass(\"hidden\");\r\n $noBonusTicketsGold.removeClass(\"hidden\");\r\n }\r\n if (bonusValue === 0 && bonusGold.toString().toLowerCase() !== `$0k`) {\r\n $bonusTicketsGold.addClass(\"hidden\");\r\n $noBonusTicketsGold.addClass(\"hidden\");\r\n $noBonusTickets.removeClass(\"hidden\");\r\n $noBonusTickets.find(\".bonus-gold\").html(bonusGold);\r\n }\r\n if (bonusValue !== 0 && bonusGold.toString().toLowerCase() !== `$0k`) {\r\n $bonusTicketsGold.removeClass(\"hidden\");\r\n $bonusTicketsGold.find(\".bonus-gold\").html(bonusGold);\r\n $bonusTicketsGold.find(\".bonus-tickets\").html(bonusValue);\r\n $noBonusTickets.addClass(\"hidden\");\r\n $noBonusTicketsGold.addClass(\"hidden\");\r\n\r\n const bonusText = $this.data(\"bonus-tickets-text\");\r\n $bonusTicketsGold.find(\".bonus-tickets-text\").html(bonusText);\r\n }\r\n }\r\n //When user has removed the ticket \"UpdateShoppingCart\"\r\n $(\"#cartContainer\")\r\n .find(\".confirm-remove\")\r\n .on(\"click touchstart\", function (e) {\r\n removeCartitem($(this));\r\n });\r\n\r\n function removeCartitem(el) {\r\n const $this = el;\r\n $this.closest(\".cart-section\").addClass(\"removed-cart-item\");\r\n const cartItems = $(\".cart-added-items\")\r\n .children()\r\n .not(\".removed-cart-item\");\r\n const requestVerificationToken = $(\"#shoppingCart\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const data = {\r\n __RequestVerificationToken: requestVerificationToken,\r\n ShoppingCartItems: [],\r\n IsGift: $(\"#cartContainer\").find(\"#giftPurchase\").val(),\r\n };\r\n\r\n cartItems.each(function () {\r\n data.ShoppingCartItems.push({\r\n ProductVariantId: $(this)\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"product-id\"),\r\n ArtUnionId: $(this).closest(\".cart-section\").data(\"art-union-id\"),\r\n Quantity: $(this)\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"qty\"),\r\n IsPreOrder: $(this).closest(\".cart-section\").data(\"preorder-item\"),\r\n });\r\n });\r\n const $cartSection = $(\".cart-section\");\r\n $.ajax({\r\n url: $this.data(\"service-remove-url\"),\r\n data,\r\n method: \"POST\",\r\n async: false,\r\n success: function success(result) {\r\n $this\r\n .closest(\".cart-section\")\r\n .find(\".remove-container\")\r\n .addClass(\"hidden\");\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if ($this.closest(\".cart-section\").hasClass(\"draw-sold-closed\")) {\r\n $this.closest(\".cart-section\").remove();\r\n $this.closest(\".cart-section\").addClass(\"hide-cart-item\");\r\n paymentCalc(); // Payment\r\n const totalCartItems =\r\n $(\".cart-added-items\").find(\".cart-section\").length;\r\n cartQtyCalc(totalCartItems);\r\n } else {\r\n $this\r\n .closest(\".cart-section\")\r\n .find(\".remove-icon\")\r\n .addClass(\"hidden\");\r\n $this\r\n .closest(\".cart-section\")\r\n .find(\".remove-container\")\r\n .addClass(\"hidden\");\r\n $this\r\n .closest(\".cart-section\")\r\n .find(\".removed-container\")\r\n .removeClass(\"hidden\");\r\n\r\n if (\r\n $this.closest(\".cart-section\").find(\".removed-container\") &&\r\n $this.closest(\".cart-section\").find(\".removed-container\").length >\r\n 0\r\n ) {\r\n setTimeout(function () {\r\n $this.closest(\".cart-section\").remove();\r\n $this.closest(\".cart-section\").addClass(\"hide-cart-item\");\r\n paymentCalc(); // Payment\r\n const totalCartItems =\r\n $(\".cart-added-items\").find(\".cart-section\").length;\r\n cartQtyCalc(totalCartItems);\r\n }, 2000);\r\n }\r\n $.trackRemoveCartItem($this);\r\n }\r\n }\r\n\r\n // To update the upsell section after removing from cart \"GetUpsellItems\"\r\n $.ajax({\r\n url: $this.data(\"service-get-upsell-items-url\"),\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n $(\".upsell-items\").replaceWith(result.Html);\r\n if (\r\n $(\".ticket-depletion-container\") &&\r\n $(\".ticket-depletion-container\").length > 0\r\n ) {\r\n $.getTicketDepletion();\r\n }\r\n $.getCountdownTimer();\r\n\r\n // Remove existing click handler, if any\r\n $(document).off(\"click\", \"#shoppingCart .upsell-cart-btn\");\r\n\r\n // Then On click of adding upsell ticket to cart \"UpdateShoppingCart\"\r\n $(document).on(\r\n \"click\",\r\n \"#shoppingCart .upsell-cart-btn\",\r\n function (e) {\r\n e.preventDefault();\r\n addUpsellTicket($(this));\r\n }\r\n );\r\n },\r\n fail: function (error) {},\r\n });\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n\r\n $.getCheckoutSumamry = (storedPayment, callback) => {\r\n const $this = $(\"#shoppingCart.NVIP-checkout-modify\");\r\n $.ajax({\r\n url: \"/rslsitecoreapi/checkout/getnvipcheckoutsummary\",\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n async: false,\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n $(\"#NVIPTicketSummary\").html(result.Html);\r\n $.hideGPayAPayForPreOrder();\r\n $.paymentCalc();\r\n $(\"#NVIPTicketSummary\")\r\n .find(\"#modifyBtn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n getCartModal(true);\r\n });\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n if (\r\n $(\"#NVIPTicketSummary\") &&\r\n $(\"#NVIPTicketSummary\").length > 0 &&\r\n !storedPayment\r\n ) {\r\n showHideGift();\r\n }\r\n }\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n error: function error() {\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n });\r\n };\r\n $.rebindModify = () => {\r\n // rebind modify button\r\n $(\"#NVIPTicketSummary\")\r\n .find(\"#modifyBtn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"pointer-none\");\r\n $.modifyBtnGA($(this));\r\n getCartModal(true);\r\n });\r\n };\r\n function cartFunctions() {\r\n $.getCountdownTimer();\r\n //Scrollbar\r\n $(\".shopping-cart .lity-container\").each(function () {\r\n // only init scrollbar.js, if not already initialized\r\n if (typeof this != \"undefined\" && this != null) {\r\n if ($(this).find(\".ss-wrapper\").length < 1) {\r\n SimpleScrollbar.initEl(this);\r\n }\r\n }\r\n });\r\n\r\n // Remove functionality\r\n $(\"#cartContainer\")\r\n .find(\".remove-icon\")\r\n .on(\"click touchstart\", function (e) {\r\n if ($(this).closest(\".cart-section\").hasClass(\"draw-sold-closed\")) {\r\n removeCartitem($(this));\r\n } else {\r\n $(this)\r\n .closest(\".cart-section\")\r\n .find(\".remove-container\")\r\n .removeClass(\"hidden\");\r\n $(this)\r\n .closest(\".cart-section\")\r\n .find(\".remove-icon\")\r\n .addClass(\"hidden\");\r\n }\r\n });\r\n\r\n $(\"#cartContainer\")\r\n .find(\".close-remove\")\r\n .on(\"click\", function (e) {\r\n $(\"#cartContainer\").find(\".remove-container\").addClass(\"hidden\");\r\n $(\"#cartContainer\").find(\".remove-icon\").removeClass(\"hidden\");\r\n });\r\n // When user has removed the ticket \"UpdateShoppingCart\"\r\n $(\"#cartContainer\")\r\n .find(\".confirm-remove\")\r\n .on(\"click touchstart\", function (e) {\r\n removeCartitem($(this));\r\n });\r\n }\r\n\r\n //Identify if the cart still has any valid items in it\r\n function setCheckoutButtonStatus() { \r\n var cartItems = $(\".cart-added-items\").find(\".cart-section\");\r\n var containsValidItem = false;\r\n var $cartBtn = $(\"#cartBtn\");\r\n \r\n cartItems.each(function () {\r\n \r\n if($(this).hasClass(\"draw-sold-closed\") === false){\r\n containsValidItem = true;\r\n }\r\n });\r\n \r\n if(containsValidItem){\r\n $cartBtn.removeClass(\"disabled\");\r\n } else {\r\n $cartBtn.addClass(\"disabled\");\r\n } \r\n }\r\n});\r\n","$(document).ready(function () {\r\n const scrollingWrapper = $(\".navigation-inline__scroll-container\");\r\n const items = $(\".navigation-inline__item\");\r\n if (!scrollingWrapper.length || !items.length) return;\r\n\r\n const prevButton = $(\".prev-button\");\r\n const nextButton = $('.next-button');\r\n if (!nextButton.length || !prevButton.length) return;\r\n\r\n const inlineSection = $('#inline-navigation-section');\r\n if (!inlineSection.length) return;\r\n\r\n const inlineOffset = inlineSection.offset().top - 76;\r\n inlineSection.attr('data-offset', inlineOffset);\r\n\r\n //timeout variable for slideToHighlitedItem function\r\n let selectedTimeout;\r\n\r\n //Attach Events\r\n scrollingWrapper.on(\"scroll\", toggleArrows);\r\n $(window).on(\"resize\", toggleArrows);\r\n $(window).on('scroll', addStickyEffect);\r\n $(window).on('scroll', slideToHighlightedItem);\r\n\r\n //Call initial functions\r\n toggleArrows();\r\n addStickyEffect();\r\n\r\n nextButton.click(function () {\r\n scrollNextLeftAligned();\r\n });\r\n\r\n prevButton.click(function () {\r\n scrollPrevLeftAligned();\r\n });\r\n\r\n function findLeftAlignedIndex() {\r\n const scrollLeft = Math.round(Math.round(scrollingWrapper.scrollLeft()));\r\n let accumulatedWidth = 0;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const itemWidth = Math.round(items.eq(i).outerWidth(true));\r\n if (\r\n scrollLeft >= accumulatedWidth &&\r\n scrollLeft < accumulatedWidth + itemWidth\r\n ) {\r\n return i;\r\n }\r\n accumulatedWidth += itemWidth;\r\n }\r\n return -1;\r\n }\r\n\r\n function scrollNextLeftAligned() {\r\n const nextLeftAlignedIndex = findLeftAlignedIndex();\r\n let accumulatedWidth = 0;\r\n for (let i = 0; i < nextLeftAlignedIndex; i++) {\r\n accumulatedWidth += Math.ceil(items.eq(i).outerWidth(true));\r\n }\r\n if (\r\n nextLeftAlignedIndex !== -1 &&\r\n nextLeftAlignedIndex < items.length - 1\r\n ) {\r\n const nextItemWidth = Math.ceil(\r\n items.eq(nextLeftAlignedIndex).outerWidth(true)\r\n );\r\n let animateScrollAmount = Math.round(scrollingWrapper.scrollLeft()) + nextItemWidth + (accumulatedWidth - Math.round(scrollingWrapper.scrollLeft()));\r\n const maxScrollLeft = scrollingWrapper.prop('scrollWidth') - scrollingWrapper.outerWidth(true);\r\n if (animateScrollAmount >= maxScrollLeft) {\r\n animateScrollAmount = maxScrollLeft;\r\n }\r\n\r\n scrollingWrapper.animate(\r\n {\r\n scrollLeft: animateScrollAmount\r\n },\r\n 300\r\n );\r\n }\r\n }\r\n\r\n function scrollPrevLeftAligned() {\r\n const leftAlignedIndex = findLeftAlignedIndex();\r\n let accumulatedWidth = 0;\r\n for (let i = 0; i < leftAlignedIndex; i++) {\r\n accumulatedWidth += Math.ceil(items.eq(i).outerWidth(true));\r\n }\r\n const scrollDiff = Math.round(scrollingWrapper.scrollLeft()) - accumulatedWidth;\r\n\r\n let prevItemWidth =\r\n scrollDiff == 0\r\n ? Math.ceil(items.eq(leftAlignedIndex - 1).outerWidth(true)) \r\n : 0;\r\n\r\n scrollingWrapper.animate(\r\n {\r\n scrollLeft: Math.round(scrollingWrapper.scrollLeft()) - prevItemWidth - scrollDiff\r\n },\r\n 300\r\n );\r\n }\r\n\r\n function toggleArrows() {\r\n const currScrollLeft = Math.round(scrollingWrapper.scrollLeft());\r\n const maxScrollLeft = Math.floor(scrollingWrapper.prop('scrollWidth') - scrollingWrapper.outerWidth(true));\r\n\r\n if (maxScrollLeft <= 0) {\r\n prevButton.removeClass('show');\r\n nextButton.removeClass('show');\r\n scrollingWrapper.css('mask-image', 'none');\r\n } else {\r\n if (currScrollLeft == 0) {\r\n $(prevButton).removeClass(\"show\");\r\n $(nextButton).addClass(\"show\");\r\n scrollingWrapper.css('mask-image', 'linear-gradient(to right, black 93%, transparent 98%)');\r\n } else if (currScrollLeft > 0 && currScrollLeft < maxScrollLeft) {\r\n $(prevButton).addClass(\"show\");\r\n $(nextButton).addClass(\"show\");\r\n scrollingWrapper.css('mask-image', 'linear-gradient(to right, transparent 2%, black 7%, black 93%, transparent 98%)');\r\n } else {\r\n $(nextButton).removeClass(\"show\");\r\n $(prevButton).addClass(\"show\");\r\n scrollingWrapper.css('mask-image', 'linear-gradient(to right, transparent 2%, black 7%');\r\n }\r\n }\r\n }\r\n\r\n function slideToHighlightedItem() {\r\n clearTimeout(selectedTimeout);\r\n\r\n const selectedAnchor = scrollingWrapper.find('a.selected');\r\n let accumulatedWidth = 0;\r\n let prevItemWidth = 0;\r\n\r\n if (selectedAnchor.length) {\r\n for (let i = 0; i < items.length - 1; i++) {\r\n const currentItemWidth = Math.ceil(items.eq(i).outerWidth(true));\r\n if (items.eq(i).find('a.selected').length > 0) break;\r\n accumulatedWidth += currentItemWidth;\r\n prevItemWidth = currentItemWidth;\r\n }\r\n\r\n let animateScrollAmount = accumulatedWidth - 60;\r\n const maxScrollLeft = scrollingWrapper.prop('scrollWidth') - scrollingWrapper.outerWidth(true);\r\n\r\n if (animateScrollAmount >= maxScrollLeft) {\r\n animateScrollAmount = maxScrollLeft;\r\n }\r\n\r\n selectedTimeout = setTimeout(function () {\r\n scrollingWrapper.animate(\r\n {\r\n scrollLeft: animateScrollAmount\r\n },\r\n 300\r\n );\r\n }, 300);\r\n }\r\n }\r\n\r\n //sticky nav on scroll\r\n function addStickyEffect() {\r\n const scroll = $(window).scrollTop();\r\n const offsetVal = inlineSection.data('offset');\r\n\r\n if (scroll >= offsetVal) {\r\n inlineSection.addClass('sticky-inline');\r\n } else {\r\n inlineSection.removeClass('sticky-inline');\r\n }\r\n }\r\n\r\n const slider = document.querySelector('.navigation-inline__scroll-container');\r\n if (!slider) return;\r\n\r\n let isDown = false;\r\n let startX;\r\n let scrollLeft;\r\n\r\n //Draggable Nav Area\r\n\r\n slider.addEventListener('mousedown', (e) => {\r\n isDown = true;\r\n slider.classList.add('active');\r\n startX = e.pageX - slider.offsetLeft;\r\n scrollLeft = slider.scrollLeft;\r\n cancelMomentumTracking();\r\n });\r\n\r\n\r\n slider.addEventListener('mouseleave', () => {\r\n isDown = false;\r\n slider.classList.remove('active');\r\n });\r\n\r\n\r\n slider.addEventListener('mouseup', () => {\r\n isDown = false;\r\n slider.classList.remove('active');\r\n beginMomentumTracking();\r\n });\r\n\r\n\r\n slider.addEventListener('mousemove', (e) => {\r\n if (!isDown) return;\r\n e.preventDefault();\r\n const x = e.pageX - slider.offsetLeft;\r\n const walk = (x - startX) * 3; //scroll-fast\r\n var prevScrollLeft = slider.scrollLeft;\r\n slider.scrollLeft = scrollLeft - walk;\r\n velX = slider.scrollLeft - prevScrollLeft;\r\n });\r\n\r\n // Draggable Nav area with Momentum\r\n\r\n let velX = 0;\r\n let momentumID;\r\n\r\n slider.addEventListener('wheel', (e) => {\r\n cancelMomentumTracking();\r\n });\r\n\r\n function beginMomentumTracking() {\r\n cancelMomentumTracking();\r\n momentumID = requestAnimationFrame(momentumLoop);\r\n }\r\n\r\n function cancelMomentumTracking() {\r\n cancelAnimationFrame(momentumID);\r\n }\r\n\r\n function momentumLoop() {\r\n slider.scrollLeft += velX;\r\n velX *= 0.95;\r\n if (Math.abs(velX) > 0.5) {\r\n momentumID = requestAnimationFrame(momentumLoop);\r\n }\r\n }\r\n});","const hash = decodeURI(window.location.hash);\r\nconst isInlineNav = document.getElementById('navigation-inline');\r\n// delete hash so the page won't scroll to it\r\nif (isInlineNav) {\r\n window.location.hash = '';\r\n}\r\nlet targetSectionarray = [];\r\n\r\n$(() => {\r\n // Creating an array for the whole navigation sections displayed on page\r\n if ($('.js-trigger') && $('.js-trigger').length) {\r\n $('.js-trigger').each(function (i, el) {\r\n const currLink = $(el);\r\n const refElement = currLink.attr(\"href\");\r\n const refElementId = refElement.substring(1, refElement.length);\r\n const targetEl = document.getElementById(refElementId);\r\n targetSectionarray.push(targetEl);\r\n });\r\n }\r\n\r\n // Call the 'onScroll' method only when there is inpage navigation \r\n if ($('.js-inline-nav') && $('.js-inline-nav').length) {\r\n $(document).on(\"scroll\", onScroll);\r\n }\r\n const PRIZE_EXPLORER = {\r\n init() {\r\n //look for urls with hash values in them and call move users after page has loaded to enusre there is an offset for the sticky nav\r\n if (hash && isInlineNav) {\r\n //get element by ID using native javascript to allow for spaces in IDs (not valid markup so some techdebt would be to remove spaces in all IDs in Sitecore solution)\r\n const hashId = hash.substring(1);\r\n const moveToTarget = document.getElementById(hashId);\r\n if (moveToTarget) {\r\n setTimeout(function () {\r\n $('html, body').animate({\r\n scrollTop: $(moveToTarget).offset().top - 101 //height of the sticky nav plus some (needs to be higher on page load for some reason)\r\n }, 700, 'swing', function () { });\r\n }, 1);\r\n }\r\n }\r\n\r\n // Select all links with hashes\r\n $('a[href*=\"#\"]')\r\n // Remove links that don't actually link to anything\r\n .not('[href=\"#\"]')\r\n .not('[href=\"#0\"]')\r\n .click(function (event) {\r\n // On-page links\r\n if (location.pathname.replace(/^\\//, '') == this.pathname.replace(/^\\//, '') && location.hostname == this.hostname) {\r\n // Figure out element to scroll to\r\n let target = $(this).attr('href');\r\n target = target.length ? document.getElementById(target.split('#')[1]) : $('[name=' + this.hash.slice(1) + ']');\r\n const $target = $(target);\r\n // Check if the anchor tag is linked with lity modal\r\n const isLityModal = $(this).get(0).hasAttribute('data-lity');\r\n\r\n // Does a scroll target exist?\r\n if (target && $target && !isLityModal) {\r\n // Only prevent default if animation is actually gonna happen\r\n\r\n event.preventDefault();\r\n\r\n $('html, body').animate({\r\n scrollTop: $target.offset().top - 101\r\n }, 700, function () {\r\n\r\n // Callback after animation\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n PRIZE_EXPLORER.init();\r\n});\r\nfunction onScroll() {\r\n let isInViewport;\r\n let position;\r\n let navElementId;\r\n let viewPortElementsArray = [];\r\n\r\n targetSectionarray.map(function (element) {\r\n if (typeof (element) == 'undefined' || element == null) return;\r\n\r\n position = element.getBoundingClientRect();\r\n\r\n // checking the element if fully visible or partially visible\r\n isInViewport = (position.top >= 0 && position.bottom <= window.innerHeight) || (position.top < window.innerHeight && position.bottom >= 0);\r\n\r\n\r\n if (isInViewport) {\r\n if (position.top >= 0) {\r\n viewPortElementsArray.push(element);\r\n }\r\n\r\n if (viewPortElementsArray.length > 1) {\r\n let viewPortElementsPosition = [];\r\n viewPortElementsArray.map(function (el) {\r\n viewPortElementsPosition.push($(el).offset().top);\r\n });\r\n\r\n let value = viewPortElementsPosition[0];\r\n let index = 0;\r\n for (let i = 1; i < viewPortElementsPosition.length; i++) {\r\n if (viewPortElementsPosition[i] < value) {\r\n value = viewPortElementsPosition[i];\r\n index = i;\r\n }\r\n }\r\n const filteredEl = viewPortElementsArray[index];\r\n navElementId = $(filteredEl).attr('id');\r\n\r\n } else {\r\n navElementId = $(element).attr('id');\r\n }\r\n\r\n const currLink = $('.js-trigger').filter(function () {\r\n const geHref = $(this).attr(\"href\");\r\n return geHref.substring(1, geHref.length) === navElementId;\r\n });\r\n\r\n currLink.addClass('selected');\r\n currLink.closest('.navigation-inline__item').siblings().find('.js-trigger').removeClass('selected');\r\n }\r\n });\r\n\r\n\r\n\r\n}","import dayjs from \"dayjs\";\r\n\r\nconst weekday = require(\"dayjs/plugin/weekday\");\r\ndayjs.extend(weekday);\r\n\r\n$(document).ready(function () {\r\n if ($(\".upcoming-draws-calendar\").length < 1) return;\r\n\r\n // Amount of months to render into future ~ value represents months\r\n const calendarForecastAmnt = 11; // min amount: 3, due to desktop-shownMonths = 3\r\n\r\n let currentRange;\r\n const WEEKDAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n const START_DATE = dayjs().subtract(1, \"month\").format(\"YYYY-MM\");\r\n const END_DATE = dayjs().add(calendarForecastAmnt, \"month\").format(\"YYYY-MM\");\r\n const END_YEAR = parseInt(\r\n dayjs().add(calendarForecastAmnt, \"month\").format(\"YYYY\")\r\n );\r\n const END_MONTH = parseInt(\r\n dayjs().add(calendarForecastAmnt, \"month\").format(\"M\")\r\n );\r\n const INITIAL_YEAR = dayjs().format(\"YYYY\");\r\n const INITIAL_MONTH = dayjs().format(\"M\");\r\n const validDatesRange = {\r\n start: START_DATE,\r\n end: END_DATE,\r\n };\r\n\r\n /*\r\n Select your start month, relevant from today's date.\r\n Update INITIAL_MONTH: EG: `INITIAL_MONTH - 10`\r\n Currently set to start 1 month in the past, from today's date.\r\n */\r\n let selectedMonth = dayjs(new Date(INITIAL_YEAR, INITIAL_MONTH - 1));\r\n\r\n let currentMonthDays;\r\n let previousMonthDays;\r\n let nextMonthDays;\r\n let localDrawData = [];\r\n\r\n const loadingSpinner = document.querySelector(\".loading-spinner-wrapper\");\r\n const calendarWrapper = document.querySelector(\".upcoming-draws-calendar\");\r\n\r\n const btnSelectorsWrapper = document.createElement(\"div\");\r\n btnSelectorsWrapper.classList.add(\r\n \"upcoming-draws-calendar__btn-selectors-wrapper\"\r\n );\r\n\r\n const calendarMonthsWrapper = document.createElement(\"div\");\r\n calendarMonthsWrapper.classList.add(\r\n \"upcoming-draws-calendar__months-wrapper\"\r\n );\r\n\r\n const prevMonthSelectorEl = document.createElement(\"button\");\r\n prevMonthSelectorEl.classList.add(\r\n \"upcoming-draws-calendar__date-toggle-selector\",\r\n \"prev\"\r\n );\r\n prevMonthSelectorEl.innerHTML = `\r\n\t\t
\r\n\t`;\r\n\r\n const nextMonthSelectorEl = document.createElement(\"button\");\r\n nextMonthSelectorEl.classList.add(\r\n \"upcoming-draws-calendar__date-toggle-selector\",\r\n \"next\"\r\n );\r\n nextMonthSelectorEl.innerHTML = `\r\n\t\t
\r\n\t`;\r\n\r\n function getCalendarData() {\r\n if (!window.upcomingDrawsData) return;\r\n localDrawData = window.upcomingDrawsData.DrawDates;\r\n\r\n if (localDrawData.length < 1) {\r\n console.log(\"window data not found\");\r\n return;\r\n }\r\n }\r\n\r\n function updateEventsCalendarView() {\r\n calendarMonthsWrapper.innerHTML = \"\";\r\n prevMonthSelectorEl.style.visibility = \"hidden\";\r\n nextMonthSelectorEl.style.visibility = \"hidden\";\r\n loadingSpinner.style.display = \"block\";\r\n\r\n if (localDrawData.length > 0) {\r\n createCalendar(\r\n selectedMonth.format(\"YYYY\"),\r\n selectedMonth.format(\"M\"),\r\n currentRange,\r\n localDrawData\r\n );\r\n loadingSpinner.style.display = \"none\";\r\n } else {\r\n calendarWrapper.innerHTML = `\r\n
\r\n `;\r\n loadingSpinner.style.display = \"none\";\r\n }\r\n }\r\n\r\n function findIndexInArray(array, DrawDate) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (Array.isArray(array[i])) {\r\n if (array[i][0].DrawDate.DrawDate === el.DrawDate) {\r\n return { index: i, isArray: true };\r\n }\r\n } else {\r\n if (array[i].DrawDate.DrawDate === DrawDate) {\r\n return { index: i, isArray: false };\r\n }\r\n }\r\n }\r\n return { index: -1, isArray: false };\r\n }\r\n\r\n function createCalendar(\r\n year = INITIAL_YEAR,\r\n month = INITIAL_MONTH,\r\n calendarRange = 1,\r\n localDrawData = null\r\n ) {\r\n prevMonthSelectorEl.style.visibility = \"visible\";\r\n nextMonthSelectorEl.style.visibility = \"visible\";\r\n\r\n btnSelectorsWrapper.appendChild(prevMonthSelectorEl);\r\n btnSelectorsWrapper.appendChild(nextMonthSelectorEl);\r\n calendarWrapper.appendChild(btnSelectorsWrapper);\r\n\r\n for (let i = 0; i < calendarRange; i++) {\r\n const calendarMonthWrapper = document.createElement(\"div\");\r\n calendarMonthWrapper.classList.add(\r\n \"upcoming-draws-calendar__month-wrapper\"\r\n );\r\n\r\n const calendarMonthHeader = document.createElement(\"div\");\r\n calendarMonthHeader.classList.add(\r\n \"upcoming-draws-calendar__month-header\"\r\n );\r\n calendarMonthHeader.innerText = dayjs(\r\n new Date(year, month - 1 + i)\r\n ).format(\"MMMM YYYY\");\r\n\r\n const daysOfWeekEl = document.createElement(\"ol\");\r\n const calendarDaysEl = document.createElement(\"ol\");\r\n\r\n daysOfWeekEl.classList.add(\"upcoming-draws-calendar__days-of-week\");\r\n calendarDaysEl.classList.add(\"upcoming-draws-calendar__days-grid\");\r\n calendarMonthWrapper.appendChild(calendarMonthHeader);\r\n\r\n WEEKDAYS.forEach((weekday) => {\r\n const weekDayElement = document.createElement(\"li\");\r\n daysOfWeekEl.appendChild(weekDayElement);\r\n weekDayElement.innerText = weekday;\r\n });\r\n\r\n calendarMonthsWrapper.appendChild(calendarMonthWrapper);\r\n calendarWrapper.appendChild(calendarMonthsWrapper);\r\n calendarMonthWrapper.appendChild(daysOfWeekEl);\r\n calendarMonthWrapper.appendChild(calendarDaysEl);\r\n\r\n currentMonthDays = createDaysForCurrentMonth(\r\n year,\r\n parseInt(month) + i,\r\n dayjs(`${year}-${month}-01`).daysInMonth()\r\n );\r\n\r\n previousMonthDays = createDaysForPreviousMonth(year, month);\r\n nextMonthDays = createDaysForNextMonth(year, month);\r\n\r\n const days = [\r\n ...previousMonthDays,\r\n ...currentMonthDays,\r\n ...nextMonthDays,\r\n ];\r\n\r\n if (localDrawData) {\r\n // filter 'draw-dates' to within current calendar range (1 month behind, 11 months ahead)\r\n const DrawDatesData = localDrawData.filter(\r\n (element) =>\r\n element.DrawDate.split(\"-\")[0] ==\r\n dayjs(selectedMonth).add(i, \"month\").format(\"YYYY\") &&\r\n element.DrawDate.split(\"-\")[1] ==\r\n dayjs(selectedMonth).add(i, \"month\").format(\"MM\") &&\r\n element\r\n );\r\n\r\n DrawDatesData.length > 0 &&\r\n DrawDatesData.forEach(\r\n (drawDate) => (drawDate.drawStatus = \"draw-date\")\r\n );\r\n\r\n // filter `open-draw-dates` within current calendar range\r\n const OpenDatesData = localDrawData.filter(\r\n (element) =>\r\n element.OpenDate.split(\"-\")[0] ==\r\n dayjs(selectedMonth).add(i, \"month\").format(\"YYYY\") &&\r\n element.OpenDate.split(\"-\")[1] ==\r\n dayjs(selectedMonth).add(i, \"month\").format(\"MM\") &&\r\n element.DrawType !== \"Q \" &&\r\n element.DrawType !== \"W \" &&\r\n element\r\n );\r\n\r\n OpenDatesData.length > 0 &&\r\n OpenDatesData.forEach(\r\n (openDate) => (openDate.drawStatus = \"open-date\")\r\n );\r\n\r\n let drawData;\r\n days.forEach((day) => {\r\n let DrawDatesFiltered = [];\r\n\r\n // filter draw-dates down to current day\r\n if (DrawDatesData && DrawDatesData.length > 0) {\r\n DrawDatesData.forEach((el, i) => {\r\n if (day.dayOfMonth == el.DrawDate.split(\"-\")[2].split(\"T\")[0]) {\r\n let { index, isArray } = findIndexInArray(\r\n DrawDatesFiltered,\r\n el.DrawDate\r\n );\r\n if (index !== -1) {\r\n if (isArray) {\r\n DrawDatesFiltered[index].push(el);\r\n } else {\r\n DrawDatesFiltered[index] = [DrawDatesFiltered[index], el];\r\n }\r\n } else {\r\n DrawDatesFiltered.push(el);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // filter open-draw-dates down to current day\r\n if (OpenDatesData && OpenDatesData.length > 0) {\r\n OpenDatesData.forEach((el, i) => {\r\n if (day.dayOfMonth == el.OpenDate.split(\"-\")[2].split(\"T\")[0]) {\r\n let { index, isArray } = findIndexInArray(\r\n DrawDatesFiltered,\r\n el.DrawDate\r\n );\r\n if (index !== -1) {\r\n if (isArray) {\r\n DrawDatesFiltered[index].push(el);\r\n } else {\r\n DrawDatesFiltered[index] = [DrawDatesFiltered[index], el];\r\n }\r\n } else {\r\n DrawDatesFiltered.push(el);\r\n }\r\n }\r\n });\r\n }\r\n\r\n drawData = {\r\n ...drawData,\r\n DrawDatesFiltered: DrawDatesFiltered,\r\n };\r\n\r\n appendDay(day, drawData, calendarMonthWrapper);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function appendDay(day, drawData = null, calendarMonthWrapper) {\r\n const dayElement = document.createElement(\"li\");\r\n const dayElementClassList = dayElement.classList;\r\n dayElementClassList.add(\"calendar-day\");\r\n\r\n if (drawData) {\r\n // [`W `] => draw-type-1 => WIN 5k\r\n // [`Q `] => draw-type-2 => WIN 100k\r\n // [`AU`, `IsVIPOnly`] => draw-type-3 => VIP draw: open/close draw-dates\r\n // [`AU`] => draw-type-4 => Standard draw: open/close draw-dates\r\n // Open Dates - related to `5k` & `100k` are not rendered to calendar\r\n\r\n if (drawData.DrawDatesFiltered && drawData.DrawDatesFiltered.length > 0) {\r\n drawData.DrawDatesFiltered.forEach((drawDayData, i) => {\r\n dayElementClassList.add(\r\n \"draw-day\",\r\n drawData.DrawDatesFiltered.length > 1\r\n ? `event-count-${drawData.DrawDatesFiltered.length}`\r\n : \"event-count-1\"\r\n );\r\n\r\n const drawWrapper = document.createElement(\"div\");\r\n drawWrapper.classList.add(\"upcoming-draws-calendar__draw-wrapper\");\r\n let vipIcon = document.createElement(\"div\");\r\n let vipText;\r\n let formattedDrawName = drawDayData.DrawName;\r\n\r\n if (formattedDrawName.includes(\"AU\")) {\r\n formattedDrawName = formattedDrawName.replace(\"AU\", \"\");\r\n }\r\n\r\n if (formattedDrawName.includes(\"L\")) {\r\n formattedDrawName = formattedDrawName.replace(\"L\", \"\");\r\n }\r\n\r\n if (drawDayData.IsVIPOnly) {\r\n drawWrapper.classList.add(`vip`);\r\n vipIcon.classList.add(\"vip-crown__wrapper\");\r\n vipIcon.innerHTML = `

`;\r\n }\r\n\r\n vipText = `
${formattedDrawName}`;\r\n\r\n const drawTextWrapper = document.createElement(\"span\");\r\n drawTextWrapper.classList.add(\"upcoming-draws-calendar__draw-text\");\r\n\r\n // open dates\r\n if (drawDayData.drawStatus === \"open-date\") {\r\n drawWrapper.classList.add(`draw-type-3`);\r\n if (drawDayData.IsVIPOnly) {\r\n vipIcon.classList.add(\"white\");\r\n drawWrapper.appendChild(vipIcon);\r\n }\r\n drawTextWrapper.innerHTML += vipText;\r\n }\r\n\r\n // draw dates\r\n if (drawDayData.drawStatus === \"draw-date\") {\r\n if (drawDayData.DrawType) {\r\n switch (drawDayData.DrawType) {\r\n case \"W \": // WIN 5k\r\n drawWrapper.classList.add(`draw-type-1`);\r\n drawTextWrapper.innerHTML =\r\n drawData.DrawDatesFiltered.length < 2\r\n ? `WIN
$5K$5K`;\r\n break;\r\n case \"Q \": // WIN 100k\r\n drawWrapper.classList.add(`draw-type-2`);\r\n drawTextWrapper.innerHTML =\r\n drawData.DrawDatesFiltered.length < 2\r\n ? `WIN
$100K`\r\n : `
$100K`;\r\n break;\r\n default: // Standard / VIP draws\r\n drawWrapper.classList.add(`draw-type-4`);\r\n if (drawDayData.IsVIPOnly) {\r\n drawWrapper.appendChild(vipIcon);\r\n }\r\n drawTextWrapper.innerHTML += vipText;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n drawWrapper.append(drawTextWrapper);\r\n dayElement.appendChild(drawWrapper);\r\n });\r\n }\r\n }\r\n\r\n const dayOfMonthElement = document.createElement(\"span\");\r\n dayOfMonthElement.classList.add(\"date-of-month\");\r\n dayOfMonthElement.innerText = day.dayOfMonth;\r\n dayElement.appendChild(dayOfMonthElement);\r\n\r\n if (!day.isCurrentMonth) {\r\n dayElementClassList.add(\"not-current-month-day\");\r\n }\r\n\r\n calendarMonthWrapper\r\n .querySelector(\".upcoming-draws-calendar__days-grid\")\r\n .appendChild(dayElement);\r\n }\r\n\r\n function getNumberOfDaysInMonth(year, month) {\r\n return dayjs(`${year}-${month}-01`).daysInMonth();\r\n }\r\n\r\n function createDaysForCurrentMonth(year, month) {\r\n return [...Array(getNumberOfDaysInMonth(year, month))].map((day, index) => {\r\n return {\r\n date: dayjs(`${year}-${month}-${index + 1}`).format(\"YYYY-MM-DD\"),\r\n dayOfMonth: index + 1,\r\n isCurrentMonth: true,\r\n };\r\n });\r\n }\r\n\r\n function createDaysForPreviousMonth(year, month) {\r\n const firstDayOfTheMonthWeekday = getWeekday(currentMonthDays[0].date);\r\n const previousMonth = dayjs(`${year}-${month}-01`).subtract(1, \"month\");\r\n // Render calendar-week start to be sunday (firstDayOfTheMonthWeekday === 0)\r\n // or for EG. set to 6 if calendar-day starts on a Monday\r\n const visibleNumberOfDaysFromPreviousMonth = firstDayOfTheMonthWeekday\r\n ? firstDayOfTheMonthWeekday\r\n : 0;\r\n\r\n const previousMonthLastMondayDayOfMonth = dayjs(currentMonthDays[0].date)\r\n .subtract(visibleNumberOfDaysFromPreviousMonth, \"day\")\r\n .date();\r\n\r\n return [...Array(visibleNumberOfDaysFromPreviousMonth)].map(\r\n (day, index) => {\r\n return {\r\n date: dayjs(\r\n `${previousMonth.year()}-${previousMonth.month() + 1}-${\r\n previousMonthLastMondayDayOfMonth + index\r\n }`\r\n ).format(\"YYYY-MM-DD\"),\r\n dayOfMonth: previousMonthLastMondayDayOfMonth + index,\r\n isCurrentMonth: false,\r\n };\r\n }\r\n );\r\n }\r\n\r\n function createDaysForNextMonth(year, month) {\r\n const lastDayOfTheMonthWeekday = getWeekday(\r\n `${year}-${month}-${currentMonthDays.length}`\r\n );\r\n const nextMonth = dayjs(`${year}-${month}-01`).add(1, \"month\");\r\n const visibleNumberOfDaysFromNextMonth = lastDayOfTheMonthWeekday\r\n ? 7 - lastDayOfTheMonthWeekday\r\n : lastDayOfTheMonthWeekday;\r\n\r\n return [...Array(visibleNumberOfDaysFromNextMonth)].map((day, index) => {\r\n return {\r\n date: dayjs(\r\n `${nextMonth.year()}-${nextMonth.month() + 1}-${index + 1}`\r\n ).format(\"YYYY-MM-DD\"),\r\n dayOfMonth: index + 1,\r\n isCurrentMonth: false,\r\n };\r\n });\r\n }\r\n\r\n function getWeekday(date) {\r\n return dayjs(date).weekday();\r\n }\r\n\r\n function initMonthSelectors() {\r\n prevMonthSelectorEl.addEventListener(\r\n \"click\",\r\n prevMonthSelectorClickHandler\r\n );\r\n nextMonthSelectorEl.addEventListener(\r\n \"click\",\r\n nextMonthSelectorClickHandler\r\n );\r\n }\r\n\r\n function isToggleAmountWithinRange() {\r\n let index = 0;\r\n while (index < currentRange) {\r\n selectedMonth = dayjs(selectedMonth).subtract(1, \"month\");\r\n $(nextMonthSelectorEl).removeAttr(\"style\");\r\n\r\n if (\r\n dayjs(validDatesRange.start).format(\"YYYY-MM\") ==\r\n dayjs(selectedMonth).format(\"YYYY-MM\")\r\n ) {\r\n $(prevMonthSelectorEl).css(\"display\", \"none\");\r\n return false;\r\n }\r\n index++;\r\n }\r\n }\r\n\r\n function isNextToggleWithinRange() {\r\n let index = 0;\r\n const passedRange = dayjs(validDatesRange.end).subtract(\r\n currentRange - 1,\r\n \"M\"\r\n );\r\n while (index < currentRange) {\r\n selectedMonth = dayjs(selectedMonth).add(1, \"month\");\r\n $(prevMonthSelectorEl).removeAttr(\"style\");\r\n\r\n if (\r\n passedRange.format(\"YYYY-MM\") == dayjs(selectedMonth).format(\"YYYY-MM\")\r\n ) {\r\n $(nextMonthSelectorEl).css(\"display\", \"none\");\r\n return false;\r\n }\r\n index++;\r\n }\r\n }\r\n\r\n function prevMonthSelectorClickHandler() {\r\n isToggleAmountWithinRange();\r\n updateEventsCalendarView();\r\n }\r\n\r\n function nextMonthSelectorClickHandler() {\r\n isNextToggleWithinRange();\r\n updateEventsCalendarView();\r\n }\r\n\r\n function resizeHandler() {\r\n let monthAdjustAmnt;\r\n\r\n switch (true) {\r\n case $(window).width() < 768:\r\n if (currentRange === 1) return;\r\n if (selectedMonth.format(\"YYYY\") == END_YEAR) {\r\n if (parseInt(selectedMonth.format(\"M\")) < END_MONTH) {\r\n $(nextMonthSelectorEl).removeAttr(\"style\");\r\n }\r\n }\r\n currentRange = 1;\r\n updateEventsCalendarView();\r\n break;\r\n\r\n case $(window).width() >= 768 && $(window).width() < 1140:\r\n if (currentRange === 2) return;\r\n\r\n let currMonth = parseInt(dayjs(selectedMonth).format(\"M\"));\r\n\r\n if (currentRange === 1) {\r\n if (selectedMonth.format(\"YYYY\") == END_YEAR) {\r\n if (currMonth == END_MONTH) {\r\n $(nextMonthSelectorEl).css(\"display\", \"none\");\r\n selectedMonth = dayjs(selectedMonth).subtract(1, \"month\");\r\n }\r\n }\r\n $(nextMonthSelectorEl).removeAttr(\"style\");\r\n currentRange = 2;\r\n updateEventsCalendarView();\r\n return;\r\n }\r\n\r\n if (currentRange === 3) {\r\n if (selectedMonth.format(\"YYYY\") == END_YEAR) {\r\n if (currMonth == END_MONTH - currentRange) {\r\n $(nextMonthSelectorEl).css(\"display\", \"none\");\r\n selectedMonth = dayjs(selectedMonth).subtract(2, \"month\");\r\n } else if (currMonth == END_MONTH - currentRange + 1) {\r\n $(nextMonthSelectorEl).css(\"display\", \"none\");\r\n selectedMonth = dayjs(selectedMonth).subtract(1, \"month\");\r\n }\r\n }\r\n $(nextMonthSelectorEl).removeAttr(\"style\");\r\n currentRange = 2;\r\n updateEventsCalendarView();\r\n return;\r\n }\r\n\r\n // initial load\r\n currentRange = 2;\r\n updateEventsCalendarView();\r\n break;\r\n\r\n default:\r\n currentRange === 1 ? (monthAdjustAmnt = 2) : (monthAdjustAmnt = 1);\r\n if (currentRange === 3) return;\r\n if (selectedMonth.format(\"YYYY\") == END_YEAR) {\r\n if (parseInt(selectedMonth.format(\"M\")) + currentRange >= END_MONTH) {\r\n selectedMonth = dayjs(selectedMonth).subtract(\r\n monthAdjustAmnt,\r\n \"month\"\r\n );\r\n }\r\n currentRange = 3;\r\n updateEventsCalendarView();\r\n break;\r\n }\r\n\r\n currentRange = 3;\r\n if (selectedMonth.format(\"YYYY\") == END_YEAR) {\r\n if (parseInt(selectedMonth.format(\"M\")) + currentRange > END_MONTH) {\r\n nextMonthSelectorEl.style.display = \"none\";\r\n const amountPassed =\r\n currentRange -\r\n (parseInt(selectedMonth.format(\"M\")) + currentRange - END_MONTH);\r\n\r\n if (\r\n parseInt(selectedMonth.format(\"M\")) + currentRange - 1 ==\r\n END_MONTH\r\n ) {\r\n createCalendar(\r\n selectedMonth.format(\"YYYY\"),\r\n selectedMonth.format(\"M\"),\r\n currentRange\r\n );\r\n return;\r\n }\r\n selectedMonth = dayjs(selectedMonth).subtract(\r\n amountPassed,\r\n \"month\"\r\n );\r\n }\r\n }\r\n updateEventsCalendarView();\r\n break;\r\n }\r\n }\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n\r\n function init() {\r\n getCalendarData();\r\n resizeHandler();\r\n initMonthSelectors();\r\n\r\n const debouncedResizeHandler = debounce(resizeHandler, 250);\r\n $(window).resize(debouncedResizeHandler);\r\n }\r\n\r\n init();\r\n});\r\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i
{\r\n const hiddenItemsInnerWrapperHeight = $(hiddenItemsInnerWrapper).height();\r\n hiddenItemsWrapper.css('max-height', hiddenItemsInnerWrapperHeight);\r\n }\r\n\r\n showMoreOrdersBtn.on('click', function() {\r\n if ($(this).addClass('d-flex')) $(this).addClass('hidden').removeClass('d-flex');\r\n updateHiddenItemsWrapperHeight();\r\n });\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function() {\r\n var context = this, args = arguments;\r\n var later = function() {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n };\r\n\r\n const debouncedResizeHandler = debounce(function() {\r\n if (!showMoreOrdersBtn.hasClass('hidden')) return;\r\n updateHiddenItemsWrapperHeight();\r\n }, 100);\r\n\r\n $(window).on('resize',debouncedResizeHandler);\r\n});","$(document).ready(function () {\r\n const lockupCarousels = $('.media-lockup-section__carousel carousel');\r\n if (lockupCarousels.length < 1) return;\r\n\r\n lockupCarousels.each(function () {\r\n const carousel = $(this);\r\n const videos = carousel.find('.media-lockup-section__carousel video');\r\n if (videos.length < 1) return;\r\n\r\n videos.each(function () {\r\n this.pause();\r\n this.currentTime = 0;\r\n });\r\n\r\n carousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\r\n videos[currentSlide].pause();\r\n videos[currentSlide].currentTime = 0;\r\n });\r\n\r\n carousel.on('afterChange', function (event, slick, currentSlide) {\r\n videos[currentSlide].play();\r\n });\r\n\r\n carousel.on('destroy', function () {\r\n videos.each(function () {\r\n this.pause();\r\n this.currentTime = 0;\r\n });\r\n });\r\n });\r\n});","import SimpleScrollbar from \"../scrollbar/scrollbar\";\r\nimport { Carousel } from \"../carousel/carousel\";\r\nimport carouselSettings from \"../carousel/carousel-settings\";\r\nimport extensions from \"../../js/util/extensions\";\r\nimport TICKET_SELECTOR from \"../sticky-buy-ticket-selection/sticky-buy-ticket-selection\";\r\n\r\n$(() => {\r\n const $VIPSignupBtn = $(\"#VIPSignupBtn\");\r\n $(\"#VIPMembershipSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n if ($('.change-membership-benefits-wrapper') && $('.change-membership-benefits-wrapper').length > 0) {\r\n getVIPCheckoutSummary();\r\n }\r\n // subscription start date selection\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n $(\"#VIPMembershipCart\").find(\".single-draw-selector\").each(function (i, el) {\r\n if ($(this).hasClass('selected-draw')) {\r\n $(this).addClass('previous-selected-draw');\r\n } else {\r\n $(this).removeClass('previous-selected-draw');\r\n }\r\n });\r\n }\r\n $(document).off(\"pointerdown\", \".single-draw-selector\");\r\n $(document).on(\"pointerdown\", \".single-draw-selector\", function (e) {\r\n selectStartDate($(this));\r\n });\r\n $(document).off(\"click\", \"#VIPMembershipCart .cart-close\");\r\n //To close VIP cart\r\n $(document).on(\"click touchstart\", \"#VIPMembershipCart .cart-close\", function () {\r\n $(\".loading-indicator\").remove();\r\n $(\"#VIPSignupBtn\").removeClass(\"disabled-loader\");\r\n getVIPCheckoutSummary();\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n });\r\n $(\"#VIPMembershipCart\")\r\n .find(\".lity-content\")\r\n .toggleClass(\"translate-x-full\");\r\n $(\"#VIPMembershipCart\").find(\".lity-container\").toggleClass(\"lity-animate\");\r\n setTimeout(() => {\r\n $(\"#VIPMembershipCart\").remove();\r\n }, getTransitionDuration($(\"#VIPMembershipCart\")));\r\n });\r\n // To check if draw parameter is having error or not\r\n if (\r\n typeof $(\"#checkoutContainer\").data(\"query-param-error-msg\") !==\r\n \"undefined\" &&\r\n $(\"#checkoutContainer\").data(\"query-param-error-msg\") !== \"\" &&\r\n $(\"#checkoutContainer\").data(\"nvip-checkout\") === \"False\"\r\n ) {\r\n systemNotification.error(\r\n $(\"#checkoutContainer\").data(\"query-param-error-title\"),\r\n $(\"#checkoutContainer\").data(\"query-param-error-msg\"),\r\n $(\"#checkoutContainer\").data(\"query-param-error-btn\")\r\n );\r\n $(\"#system-notification--error\")\r\n .closest(\".lity-wrap\")\r\n .attr(\"id\", \"deepLinkOutsideModal\");\r\n $(\"#system-notification--error\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length === 0) {\r\n getVIPCart(\"\", false);\r\n }\r\n });\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n if ($(e.target).is(\"#deepLinkOutsideModal\")) {\r\n e.preventDefault();\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length === 0) {\r\n getVIPCart(\"\", false);\r\n }\r\n }\r\n });\r\n }\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n if ($(e.target).is(\"#VIPMembershipCart\")) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#VIPSignupBtn\").removeClass(\"disabled-loader\");\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n });\r\n getVIPCheckoutSummary();\r\n $(\"#VIPMembershipCart\")\r\n .find(\".lity-content\")\r\n .toggleClass(\"translate-x-full\");\r\n $(\"#VIPMembershipCart\")\r\n .find(\".lity-container\")\r\n .toggleClass(\"lity-animate\");\r\n setTimeout(() => {\r\n $(\"#VIPMembershipCart\").remove();\r\n }, getTransitionDuration($(\"#VIPMembershipCart\")));\r\n $.trackUpdateVIPCart( $(\r\n \".cart-container .subscription-content .slick-slide.slick-current a\"\r\n ));\r\n }\r\n });\r\n\r\n // Based on VIP cart URL with query params\r\n const cartParam = extensions.getQueryStringParamByName(\"vipcart\");\r\n\r\n //If cart is empty on VIP chekcout page\r\n if ($(\"#VIPMembershipSummary\") && $(\"#VIPMembershipSummary\").length > 0) {\r\n if (\r\n ($(\"#VIPMembershipSummary\").find(\".change-membership-benefits-wrapper\") &&\r\n $(\"#VIPMembershipSummary\").find(\".change-membership-benefits-wrapper\")\r\n .length === 0 &&\r\n $(\"#checkoutContainer\").data(\"query-param-error-msg\") === \"\") || (cartParam && cartParam === \"open\")\r\n ) {\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length === 0) {\r\n getVIPCart(\"\", false);\r\n }\r\n }\r\n }else if (cartParam && cartParam === \"open\"){ //Flag vipcart=open should be working on all pages\r\n getVIPCart(\"\", false);\r\n }\r\n // On click of modify button on memberhsip summary\r\n $(document).on(\"click\", \"#VIPMembershipSummary #modifyBtn\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"pointer-none\");\r\n const btnText = $(this).data(\"vip-cart-submit-btn\");\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length === 0) {\r\n getVIPCart(btnText, true);\r\n }\r\n $.trackViewCart(\r\n $(\".cart-container .subscription-content .slick-slide.slick-current a\"),\r\n true\r\n );\r\n });\r\n\r\n // On click of VIP signup sticky button\r\n $VIPSignupBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n ''\r\n );\r\n const btnText = \"\";\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length === 0) {\r\n getVIPCart(btnText, false);\r\n }\r\n $.trackViewCart(\r\n $(\".cart-container .subscription-content .slick-slide.slick-current a\"),\r\n true\r\n );\r\n });\r\n\r\n $(document).on(\"click touchstart\", \"#VIPMembershipCart .slick-arrow\", function (evt) {\r\n evt.preventDefault();\r\n const slickCenter = $(this)\r\n .closest(\".ticket-selector-slider\")\r\n .find(\".slick-center\");\r\n if ($(this).hasClass(\"slick-prev\")) {\r\n smoothTicketSelection(slickCenter);\r\n } else {\r\n smoothTicketSelection(slickCenter);\r\n }\r\n ticketSelection(slickCenter);\r\n selectedSubscriptionAPICall(slickCenter.find(\".ticket\"));\r\n showGoldenTreasure(slickCenter);\r\n });\r\n\r\n function smoothTicketSelection(ticketEl) {\r\n const $currentCarousel = $(ticketEl.closest(\".carousel\"));\r\n const selected = ticketEl.find(\".ticket\").hasClass(\"selected\");\r\n const slideIndex = ticketEl.data(\"slick-index\");\r\n\r\n // move the carousel to center the selected slide\r\n $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n }\r\n $(document).on(\"click touchstart\", \"#VIPMembershipCart .slick-slide\", function (evt) {\r\n evt.preventDefault();\r\n const ticketEl = $(this);\r\n const $currentCarousel = $(ticketEl.closest(\".carousel\"));\r\n const slideIndex = ticketEl.data(\"slick-index\");\r\n const swiperEl = $(\".ticket-selector .carousel\");\r\n // move the carousel to center the selected slide\r\n $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n ticketSelection($(this).find(\".ticket\"));\r\n const $btnEl = $(this);\r\n ticketSelection(ticketEl);\r\n selectedSubscriptionAPICall(ticketEl.find(\".ticket\"));\r\n showGoldenTreasure($(this));\r\n });\r\n function getVIPCart(text, flagValue) {\r\n const selectedSubValue = extensions.getQueryStringParamByName(\"subValue\");\r\n $.ajax({\r\n url:\r\n \"/rslsitecoreapi/subscription/getsubscriptioncart\" +\r\n \"?subValue=\" +\r\n selectedSubValue,\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (result.RedirectUrl) {\r\n window.location.href = result.RedirectUrl;\r\n return;\r\n }\r\n if (result.Data && result.Data.hasOwnProperty(\"ErrorTitle\")) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#VIPSignupBtn\").removeClass(\"disabled-loader\");\r\n getApiError(result);\r\n } else {\r\n $(document.body).append(result.Html);\r\n //$(document).find(\"#VIPMembershipCart .slick-slide\").slick('refresh');\r\n VIPCarousel();\r\n $(\".cart-heading\").trigger(\"click\");\r\n setTimeout(() => {\r\n $(\".subscription-container .ticket-title\").html(\r\n $(\".subscription-container .ticket.selected\").attr(\r\n \"data-ticket-title\"\r\n )\r\n );\r\n }, 0);\r\n if (flagValue) {\r\n $(\"#VIPMembershipCart\").addClass(\"VIP-checkout-modify\");\r\n } else {\r\n $(\"#VIPMembershipCart\").removeClass(\"VIP-checkout-modify\");\r\n }\r\n $(\"body\").css({\r\n \"overflow-y\": \"hidden\",\r\n });\r\n //Scrollbar\r\n $(\".shopping-cart .lity-container\").each(function () {\r\n if (typeof this != \"undefined\" && this != null) {\r\n SimpleScrollbar.initEl(this);\r\n }\r\n });\r\n\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n if (\r\n $(\"#VIPMembershipCart\")\r\n .data(\"exp-editor\")\r\n .toString()\r\n .toLowerCase() !== \"false\"\r\n ) {\r\n $(\"#VIPMembershipCart\").addClass(\"vip-exp-editor\");\r\n } else {\r\n $(\"#VIPMembershipCart\").removeClass(\"vip-exp-editor\");\r\n }\r\n }\r\n \r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n //auto select the draw\r\n const selectedDraw = $(\"#VIPMembershipCart\").find(\"#vipStep2\").data('selected-artunionid');\r\n selectedSubscriptionAPICall(\r\n $(\"#VIPMembershipCart\").find(\".slick-center\").find(\".ticket\")\r\n );\r\n $(\"#VIPMembershipCart\").find(\".single-draw-selector\").each(function (i, el) {\r\n if (selectedDraw === '') {\r\n if (i === 0) {\r\n selectStartDate($(this));\r\n }\r\n } else if($(this).data('artunionid') === selectedDraw) {\r\n selectStartDate($(this));\r\n }\r\n });\r\n }\r\n if (text !== \"\") {\r\n $(\"#becomeMemberBtn\").html(text);\r\n }\r\n // Capture current cart items and send to GA\r\n $.trackViewCart(\r\n $(\r\n \".cart-container .subscription-content .slick-slide.slick-current a\"\r\n ),\r\n true\r\n );\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#VIPSignupBtn\").removeClass(\"disabled-loader\");\r\n },\r\n fail: function (error) {},\r\n });\r\n }\r\n \r\n function updateReviewSectionSubscription() {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/Subscription/GetReviewSectionValues\",\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if (result) {\r\n $(\"#review-subscription-val\").text(\r\n \"$\" + result.SubscriptionValue + \" per draw\"\r\n );\r\n $(\".vip-pay-details\").find('span').not(\"#review-subscription-val\").text(\r\n result.StartDate\r\n );\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n\r\n function getVIPCheckoutSummary() {\r\n const $this = $(\"#VIPMembershipSummary\").find(\"#modifyBtn\");\r\n $.ajax({\r\n url: $this.data(\"vip-summary-url\"),\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if ((result.Data && result.Data.RedirectUrl) || result.RedirectUrl) {\r\n window.location.replace(result.RedirectUrl);\r\n return;\r\n }\r\n $(\"#VIPMembershipSummary\").replaceWith(result.Html);\r\n $(\"#VIPMembershipSummary\").find(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n updateReviewSectionSubscription();\r\n $.hideGPayAPayForPreOrderVIP();\r\n const $payment = $(\".checkout-navigation-menu\").find(\"#payment\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $payment.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n $(\"#paymentSection\").removeClass(\"hidden\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n } else {\r\n $payment.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#paymentSection\").addClass(\"hidden\");\r\n }\r\n\r\n // rebind modify button\r\n /* $(\"#VIPMembershipSummary\")\r\n .find(\"#modifyBtn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"pointer-none\");\r\n getVIPCart(\"\", true);\r\n }); */\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data;\r\n systemNotification.error(\r\n response.ErrorTitle,\r\n response.ErrorMessage,\r\n response.ErrorButtonText\r\n );\r\n }\r\n function selectStartDate(element) {\r\n const $this = element;\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n $(\"#VIPMembershipCart\").find(\".single-draw-selector\").each(function (i, el) {\r\n if ($(this).hasClass('selected-draw')) {\r\n $(this).addClass('previous-selected-draw');\r\n } else {\r\n $(this).removeClass('previous-selected-draw');\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n $this.addClass('selected-draw');\r\n }, 100);\r\n $this.siblings().removeClass('selected-draw');\r\n $this.find('.tick span').removeClass('hidden');\r\n $this.find('.tick span').addClass('hidden');\r\n $.ajax({\r\n url:\r\n $this\r\n .data(\"single-draw-service-url\") +\r\n \"?artunionid=\" +\r\n $this.data(\"artunionid\"),\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n async: false,\r\n success: function success() {\r\n },\r\n fail: function (error) {\r\n console.log(error);\r\n },\r\n });\r\n }\r\n function VIPCarousel() {\r\n // To initiate the slick carousel\r\n let initialSlideValue, slickIndexQueryParam;\r\n console.log('intiializing slick')\r\n $(\"#VIPMembershipCart\")\r\n .find(\".carousel\")\r\n .each(function () {\r\n const $currentCarousel = $(this);\r\n const subValue = extensions.getQueryStringParamByName(\"subValue\");\r\n\r\n if (subValue !== null || subValue !== \"\") {\r\n $currentCarousel.find(\".ticket\").each(function (i, el) {\r\n if ($(this).data(\"ticket-value\") == subValue) {\r\n slickIndexQueryParam = i;\r\n }\r\n });\r\n initialSlideValue = slickIndexQueryParam;\r\n if (subValue === \"5\") {\r\n $(\".goldenTrasureDraw\").show();\r\n } else {\r\n $(\".goldenTrasureDraw\").hide();\r\n }\r\n }\r\n if (subValue === null || subValue === \"\") {\r\n initialSlideValue = $currentCarousel.data(\"initial-slide\");\r\n if (initialSlideValue === 0) {\r\n $(\".goldenTrasureDraw\").show();\r\n } else {\r\n $(\".goldenTrasureDraw\").hide();\r\n }\r\n }\r\n carouselSettings.initialSlide =\r\n initialSlideValue !== undefined\r\n ? initialSlideValue\r\n : $currentCarousel.data(\"initial-slide\");\r\n new Carousel(this, carouselSettings);\r\n if (\r\n $currentCarousel.find(\".slick-arrow.slick-next\") &&\r\n $currentCarousel.find(\".slick-arrow.slick-next\").length > 0\r\n ) {\r\n const iconElementLeft =\r\n '';\r\n $currentCarousel\r\n .find(\".slick-arrow.slick-next\")\r\n .empty()\r\n .append(iconElementLeft);\r\n }\r\n if (\r\n $currentCarousel.find(\".slick-arrow.slick-prev\") &&\r\n $currentCarousel.find(\".slick-arrow.slick-prev\").length > 0\r\n ) {\r\n const iconElementRight =\r\n '';\r\n $currentCarousel\r\n .find(\".slick-arrow.slick-prev\")\r\n .empty()\r\n .append(iconElementRight);\r\n }\r\n $(this)\r\n .find(\"a.ticket\")\r\n .each(function () {\r\n if (\r\n $(this).closest(\".slick-center\") &&\r\n $(this).closest(\".slick-center\").length > 0\r\n ) {\r\n const swiperWrapperEl = $(this).closest(\".swiper-wrapper\");\r\n // remove class from other tickets\r\n swiperWrapperEl.find(\".ticket\").removeClass(\"selected\");\r\n swiperWrapperEl\r\n .find(\".ticket\")\r\n .closest(\".slick-slide\")\r\n .removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n }\r\n });\r\n if (subValue !== null) {\r\n changeSubscriptionValues($(\".slick-center\").find(\".ticket\"));\r\n }\r\n const slideIndex = $currentCarousel\r\n .find(\".slick-center\").data(\"slick-index\");\r\n // $currentCarousel.slick(\"slickGoTo\", slideIndex, true);\r\n });\r\n }\r\n\r\n function changeSubscriptionValues($this) {\r\n $(\"#changeSubscription\")\r\n .find(\".selected-ticket\")\r\n .text($this.data(\"ticket-value\"));\r\n\r\n // To update current membership title\r\n const ticketTitle = $this.attr(\"data-ticket-title\");\r\n $(\".subscription-container\").find(\".ticket-title\").html(ticketTitle);\r\n\r\n $.updateTicketSpreadDetails($this, $(\".ticket.updated-subscription\"));\r\n }\r\n\r\n function ticketSelection(ticketEl) {\r\n newSelectedTicket($(\".ticket-selector .carousel\").find(\".slick-center\"));\r\n }\r\n\r\n function newSelectedTicket($ticket) {\r\n const totalTickets = $ticket.find(\".ticket\").data(\"total-tickets\");\r\n const swiperWrapperEl = $ticket.closest(\".swiper-wrapper\");\r\n\r\n // remove class from other tickets\r\n swiperWrapperEl.find(\".ticket\").removeClass(\"selected\");\r\n swiperWrapperEl\r\n .find(\".ticket\")\r\n .closest(\".slick-slide\")\r\n .removeClass(\"slick-current slick-center selected\");\r\n\r\n // add class to this ticket\r\n $ticket.addClass(\"slick-current slick-center selected\");\r\n $ticket.find(\".ticket\").addClass(\"selected\");\r\n swiperWrapperEl.addClass(\"selected\");\r\n }\r\n\r\n function showGoldenTreasure(selectedSlide) {\r\n if (selectedSlide.find(\".ticket\").hasClass(\"selected\")) {\r\n if (selectedSlide.find(\".ticket\").data(\"ticket-value\") === 5) {\r\n $(\".goldenTrasureDraw\").show();\r\n } else {\r\n $(\".goldenTrasureDraw\").hide();\r\n }\r\n }\r\n }\r\n const getTransitionDuration = (clickedBody) => {\r\n let largestTransitionDuration = 0;\r\n if ($(clickedBody).length > 0) {\r\n const transitionAnimations = $(clickedBody)\r\n .css(\"transition-duration\")\r\n .split(\",\")\r\n .map((el) => el.slice(0, -1));\r\n transitionAnimations.map((el) =>\r\n el > largestTransitionDuration ? (largestTransitionDuration = el) : null\r\n );\r\n }\r\n return largestTransitionDuration * 1000;\r\n };\r\n // on click of subscription ticket\r\n function selectedSubscriptionAPICall($this) {\r\n $.ajax({\r\n url:\r\n $this\r\n .closest(\"#VIPMembershipCart\")\r\n .data(\"subscription-ticket-selector\") +\r\n \"?subscriptionId=\" +\r\n $this.data(\"subscription-id\"),\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n async: false,\r\n success: function success() {\r\n },\r\n fail: function (error) {\r\n console.log(error);\r\n },\r\n });\r\n }\r\n\r\n // On click of 'become member button'\r\n $(document).on(\"click\", \"#becomeMemberBtn\", function (evt) {\r\n const $this = $(this);\r\n evt.preventDefault();\r\n const slickCenter = $this\r\n .closest(\"#changeSubscription\")\r\n .find(\".slick-center\");\r\n selectedSubscriptionAPICall(slickCenter.find(\".ticket\"));\r\n $(this)\r\n .find(\"#becomeMemberBtn\")\r\n .append(\r\n ''\r\n );\r\n if ($(\"#VIPMembershipCart\").hasClass(\"VIP-checkout-modify\")) {\r\n getVIPCheckoutSummary();\r\n $(\"#VIPMembershipCart\")\r\n .find(\".lity-content\")\r\n .toggleClass(\"translate-x-full\");\r\n $(\"#VIPMembershipCart\")\r\n .find(\".lity-container\")\r\n .toggleClass(\"lity-animate\");\r\n setTimeout(() => {\r\n $(\"#VIPMembershipCart\").remove();\r\n }, getTransitionDuration($(\"#VIPMembershipCart\")));\r\n } else {\r\n window.location.href = $this.data(\"redirect-vip-cart-url\");\r\n }\r\n\r\n $(\".loading-indicator\").remove();\r\n $(\"#becomeMemberBtn\").removeClass(\"disabled-loader\");\r\n $(\"body\").css({\r\n \"overflow-y\": \"auto\",\r\n });\r\n $.trackUpdateVIPCart( $(\r\n \".cart-container .subscription-content .slick-slide.slick-current a\"\r\n ));\r\n });\r\n\r\n $.hideGPayAPayForPreOrderVIP = () => {\r\n const vipItems = $('#VIPMembershipSummary');\r\n let activeClassBtn = [];\r\n $(\"#paymentRadioButtons\")\r\n .find(\".btn.btn-payment\")\r\n .each(function (i, el) {\r\n if($(this).not(\".hidden\").hasClass(\"active\")) {\r\n activeClassBtn.push(el);\r\n }\r\n });\r\n if (activeClassBtn.length === 0) {\r\n $(\".reviewAndOrderBtn\").addClass(\"disabled\");\r\n } else {\r\n $(\".reviewAndOrderBtn\").removeClass(\"disabled\");\r\n }\r\n vipItems.data('preorder-item').toLowerCase() === 'true' ? $.showHidePayment(true) : $.showHidePayment(false);\r\n }\r\n});\r\n\r\n","$(() => {\r\n const $account = $(\".checkout-navigation-menu\").find(\"#account\");\r\n const $payment = $(\".checkout-navigation-menu\").find(\"#payment\");\r\n const $review = $(\".checkout-navigation-menu\").find(\"#review\");\r\n const $gift = $(\".checkout-navigation-menu\").find(\"#gift\");\r\n const $accountContent = $(\"#accountSection\");\r\n const $giftContent = $(\"#giftSection\");\r\n const $paymentContent = $(\"#paymentSection\");\r\n const $reviewContent = $(\"#reviewSection\");\r\n const $creditCardFormBtn = $(\"#creditCardFormBtn\");\r\n const $yourPaymentFormCreditCard = $(\"#YourPaymentFormCreditCard\");\r\n const $reviewAndOrderBtn = $(\".reviewAndOrderBtn\");\r\n const $ccReviewAndOrderBtn = $(\".ccReviewAndOrderBtn\");\r\n const $navigateToReview = $(\"#navigateToReview\");\r\n const $NVIPGooglePaySection = $(\"#google-pay-button-message\");\r\n const $NVIPApplePaySection = $(\"#apple-pay-button-message\");\r\n let clickedButtonPaymentType;\r\n const $existingAccountBtn = $(\"#accountSection\").find(\".login-btn-text\");\r\n const $loggedInCreateBtn = $(\".logged-in-section\").find(\r\n \".create-account-btn\"\r\n );\r\n const $createAccountBtn = $(\"#accountSection\").find(\r\n \".create-account-btn-text\"\r\n );\r\n\r\n $(document).on(\"click\", \".checkout-navigation-menu #account\", function (e) {\r\n $accountContent.show();\r\n $(\".existing-account\").removeClass(\"hidden\");\r\n $(\".new-account\").addClass(\"hidden\");\r\n $(\".account-btn-group\").addClass(\"hidden\");\r\n\r\n $paymentContent.hide();\r\n $giftContent.hide();\r\n $reviewContent.hide();\r\n setActiveClass($(this));\r\n $(\".logged-in-section\")\r\n .find(\".create-account-btn\")\r\n .on(\"click\", function (e) {\r\n if (\r\n $(\"#gift\") &&\r\n $(\"#gift\").length === 0 &&\r\n $(\"#gift\").hasClass(\"hidden\")\r\n ) {\r\n $paymentContent.show();\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n }\r\n $accountContent.hide();\r\n $giftContent.hide();\r\n $reviewContent.hide();\r\n getGift();\r\n });\r\n });\r\n $(\".logged-in-section\")\r\n .find(\".create-account-btn\")\r\n .on(\"click\", function (e) {\r\n if (\r\n $(\"#gift\") &&\r\n $(\"#gift\").length === 0 &&\r\n $(\"#gift\").hasClass(\"hidden\")\r\n ) {\r\n $paymentContent.show();\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n }\r\n\r\n $accountContent.hide();\r\n $giftContent.hide();\r\n $reviewContent.hide();\r\n getGift();\r\n });\r\n\r\n $(document).on(\"click\", \".checkout-navigation-menu #gift\", function (e) {\r\n $giftContent.show();\r\n $accountContent.hide();\r\n $paymentContent.hide();\r\n $reviewContent.hide();\r\n setActiveClass($(this));\r\n });\r\n\r\n if ($payment.hasClass(\"active-step\") || $payment.hasClass(\"validated-step\")) {\r\n // To find if it's stored payment or not\r\n getStoredPayment();\r\n }\r\n function getGift() {\r\n if ($(\"#gift\") && $(\"#gift\").length > 0 && !$(\"#gift\").hasClass(\"hidden\")) {\r\n $.retrieveGiftcontacts();\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") && $(\"#gift\").length > 0 && !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n\r\n $(\".checkout-navigation-menu\").find(nextStep).trigger(\"click\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n }\r\n\r\n $(document).on(\"click\", \".checkout-navigation-menu #payment\", function (e) {\r\n $paymentContent.show();\r\n $accountContent.hide();\r\n $giftContent.hide();\r\n $reviewContent.hide();\r\n setActiveClass($(this));\r\n // To find if it's stored payment or not\r\n getStoredPayment();\r\n if ($(\"#NVIPTicketSummary\") && $(\"#NVIPTicketSummary\").length > 0) {\r\n // Check if there are only pre order items in the cart, then remove apple/google pays\r\n $.hideGPayAPayForPreOrder();\r\n } else if ($(\"#VIPMembershipSummary\") && $(\"#VIPMembershipSummary\").length > 0) {\r\n // Check if there are only pre order items in the cart, then remove apple/google pays\r\n $.hideGPayAPayForPreOrderVIP();\r\n }\r\n });\r\n \r\n \r\n\r\n $(document).on(\"click\", \".checkout-navigation-menu #review\", function (e) {\r\n $reviewContent.show();\r\n $paymentContent.hide();\r\n $accountContent.hide();\r\n $giftContent.hide();\r\n setActiveClass($(this));\r\n if (\r\n $(\".review-section-content-vip\") &&\r\n $(\".review-section-content-vip\").length > 0\r\n ) {\r\n getVIPReviewContent();\r\n } else if (\r\n $(\".review-section-content\") &&\r\n $(\".review-section-content\").length > 0\r\n ) {\r\n getNVIPReviewContent();\r\n }\r\n });\r\n $existingAccountBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\".existing-account\").removeClass(\"hidden\");\r\n $(\".new-account\").addClass(\"hidden\");\r\n $(\".account-btn-group\").addClass(\"hidden\");\r\n });\r\n $createAccountBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\".existing-account\").addClass(\"hidden\");\r\n $(\".new-account\").removeClass(\"hidden\");\r\n\r\n $(\".account-btn-group\").addClass(\"hidden\");\r\n });\r\n\r\n // step active class adding\r\n function setActiveClass($this) {\r\n $this.removeClass().addClass(\"active-step heading\");\r\n $this.nextAll().removeClass(\"active-step\");\r\n $this.prevAll().addClass(\"validated-step\").removeClass(\"active-step\");\r\n }\r\n function getStoredPayment() {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/GetStoredPayment\",\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if (result.Data.IsStoreFundingSourceAvailable) {\r\n $(\".stored-payment\").removeClass(\"hidden\");\r\n $(\".stored-payment\").find(\"img\").attr(\"src\", result.Data.ImageSrc);\r\n $(\".stored-payment\").find(\".prefix-text\").html(result.Data.Type);\r\n $(\".stored-payment\")\r\n .find(\".text-truncation\")\r\n .html(result.Data.LastFour);\r\n } else {\r\n $(\".stored-payment\").addClass(\"hidden\");\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n function getVIPReviewContent() {\r\n hideShowGoogleAppleButtonMessage(\"hide\");\r\n $.ajax({\r\n url: \"/rslsitecoreapi/Subscription/GetReviewSectionValues\",\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if (result) {\r\n if (result.PaymentType) {\r\n hideShowGoogleAppleButtonMessage(\r\n result.PaymentType.toLowerCase()\r\n );\r\n }\r\n if (\r\n (result.PaymentType &&\r\n result.PaymentType.toLowerCase() === \"creditcard\") ||\r\n (result.PaymentType &&\r\n result.PaymentType.toLowerCase() === \"storedpayment\")\r\n ) {\r\n $(\".review-section-content-vip\")\r\n .find(\".paid-info\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n $(\".review-section-content-vip\")\r\n .find(\".paid-info\")\r\n .addClass(\"hidden\");\r\n }\r\n if (result.SubscriptionValue === \"5\") {\r\n $(\".review-section-content-vip\")\r\n .find(\".inline-notification\")\r\n .removeClass(\"hidden\");\r\n } else {\r\n $(\".review-section-content-vip\")\r\n .find(\".inline-notification\")\r\n .addClass(\"hidden\");\r\n }\r\n // update review badge\r\n\r\n $(\".review-section-content-vip\")\r\n .find(\".badge-container\")\r\n .find(\".label-text\")\r\n .text(result.NextDrawNumber);\r\n // amount\r\n const amount = $(\".review-section-content-vip\")\r\n .find(\".vip-pay-details\")\r\n .html()\r\n .replace(\r\n \"{0}\",\r\n \"$\" +\r\n result.SubscriptionValue +\r\n \" per draw\" +\r\n \"\"\r\n )\r\n .replace();\r\n\r\n $(\".review-section-content-vip\")\r\n .find(\".vip-pay-details\")\r\n .html(amount);\r\n\r\n const subscriptionDate = $(\".review-section-content-vip\")\r\n .find(\".vip-pay-details\")\r\n .html()\r\n .replace(\"{1}\", \"\" + result.StartDate + \"\")\r\n .replace();\r\n $(\".review-section-content-vip\")\r\n .find(\".vip-pay-details\")\r\n .html(subscriptionDate);\r\n if (result.SubscriptionValue) {\r\n $(\"#google-pay-section\").data(\r\n \"payment-amount\",\r\n result.SubscriptionValue\r\n );\r\n $(\"#apple-pay-section\").data(\r\n \"payment-amount\",\r\n result.SubscriptionValue\r\n );\r\n } else {\r\n $(\"#google-pay-section\").data(\"payment-amount\", 1); // Set dummy data\r\n $(\"#apple-pay-section\").data(\"payment-amount\", 1);\r\n console.log(\"SubscriptionValue is empty\");\r\n }\r\n $(\".vip-badge-container\")\r\n .find(\".label-text\")\r\n .text(result.NextDrawNumber);\r\n $(\".review-section-content-vip\")\r\n .find(\".paid-info\")\r\n .find(\".payment-img\")\r\n .replaceWith(\r\n '
'\r\n );\r\n $(\".review-section-content-vip\")\r\n .find(\".paid-info\")\r\n .find(\".card-type\")\r\n .text(result.CardType);\r\n $(\".review-section-content-vip\")\r\n .find(\".card-digits\")\r\n .text(result.CardLastFourDigits);\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n\r\n function hideShowGoogleAppleButtonMessage(paymentType) {\r\n switch (paymentType) {\r\n case \"googlepay\":\r\n if ($NVIPGooglePaySection) {\r\n $NVIPGooglePaySection.removeClass(\"hidden\");\r\n }\r\n if ($NVIPApplePaySection) {\r\n $NVIPApplePaySection.addClass(\"hidden\");\r\n }\r\n\r\n break;\r\n case \"applepay\":\r\n if ($NVIPApplePaySection) {\r\n $NVIPApplePaySection.removeClass(\"hidden\");\r\n }\r\n if ($NVIPGooglePaySection) {\r\n $NVIPGooglePaySection.addClass(\"hidden\");\r\n }\r\n break;\r\n case \"hide\":\r\n default:\r\n if ($NVIPGooglePaySection) {\r\n $NVIPGooglePaySection.addClass(\"hidden\");\r\n }\r\n if ($NVIPApplePaySection) {\r\n $NVIPApplePaySection.addClass(\"hidden\");\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const $NVIPreviewSection = $(\".review-section-content\");\r\n function getNVIPReviewContent() {\r\n hideShowGoogleAppleButtonMessage(\"hide\");\r\n $.ajax({\r\n url: $NVIPreviewSection.data(\"nvip-review-payment-info\"),\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n if (result) {\r\n if (\r\n result.Data.PaymentType &&\r\n result.Data.HasOnlyPreOrderItems === true\r\n ) {\r\n hideShowGoogleAppleButtonMessage(\r\n result.Data.PaymentType.toLowerCase()\r\n );\r\n } else {\r\n hideShowGoogleAppleButtonMessage(\"hide\");\r\n }\r\n\r\n if (\r\n (result.Data.PaymentType &&\r\n result.Data.PaymentType.toLowerCase() === \"creditcard\") ||\r\n (result.Data.PaymentType &&\r\n result.Data.PaymentType.toLowerCase() === \"storedpayment\")\r\n ) {\r\n $NVIPreviewSection.find(\".paid-info\").removeClass(\"hidden\");\r\n } else {\r\n $NVIPreviewSection.find(\".paid-info\").addClass(\"hidden\");\r\n }\r\n $NVIPreviewSection\r\n .find(\".paid-info\")\r\n .find(\".card-type\")\r\n .text(result.Data.CCType);\r\n $NVIPreviewSection\r\n .find(\".paid-info\")\r\n .find(\".payment-img\")\r\n .replaceWith(\r\n '
'\r\n );\r\n\r\n $NVIPreviewSection\r\n .find(\".gift-disclaimer\")\r\n .find(\"span\")\r\n .text(result.Data.Name);\r\n\r\n $NVIPreviewSection.find(\".card-digits\").text(result.Data.LastFour);\r\n const amount = $(\".review-pay-btn\").find(\".amount\").html();\r\n $(\"#google-pay-section\").data(\"payment-amount\", amount);\r\n $(\"#apple-pay-section\").data(\"payment-amount\", amount);\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n $(\"#paymentRadioButtons\")\r\n .find(\".btn.btn-payment\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n const clickedButton = $(this);\r\n clickedButtonPaymentType = clickedButton\r\n .data(\"payment-type-btn\")\r\n .toLowerCase();\r\n clickedButton.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\".update-payment-method-btn\").removeClass(\"disabled\");\r\n // show or hide credit card form\r\n if (clickedButtonPaymentType === \"creditcard\") {\r\n $yourPaymentFormCreditCard.show();\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").hide();\r\n $(\".payment-btn-review\").removeClass(\"hidden\");\r\n $navigateToReview.addClass(\"hidden\");\r\n $(\".reviewAndOrderBtn:not(.js-credit-card-submit)\").addClass(\r\n \"disabled\"\r\n );\r\n $(\"#YourPaymentFormPaypal\")\r\n .find(\".form-group-option-detail\")\r\n .addClass(\"hidden\");\r\n } else if (\r\n clickedButtonPaymentType === \"storedpayment\" &&\r\n $(\".logged-in-section\")\r\n .not(\".semi-trusted-mode-content\")\r\n .data(\"currentusertruststate\") === \"SemiTrusted\"\r\n ) {\r\n $navigateToReview.addClass(\"hidden\");\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").show();\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").find('.form-control').attr('id','semiTrustedPaymentPassword');\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").find('.form-control').attr('name','Password');\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").find(\"label\").attr('for','semiTrustedPaymentPassword');\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").find(\".floating-label-error\").data('valmsg-for','Password');\r\n $yourPaymentFormCreditCard.hide();\r\n } else {\r\n $yourPaymentFormCreditCard.hide();\r\n $(\"#paymentSection\").find(\".loginFormStoredPayment\").hide();\r\n $(\".payment-btn-review\").addClass(\"hidden\");\r\n $navigateToReview.removeClass(\"hidden\");\r\n $reviewAndOrderBtn.removeClass(\"disabled\");\r\n $(\"#YourPaymentFormPaypal\")\r\n .find(\".form-group-option-detail\")\r\n .removeClass(\"hidden\");\r\n }\r\n\r\n if (clickedButtonPaymentType === \"storedpayment\") {\r\n $(\".reviewAndOrderBtn\").addClass(\"stored-payment-btn\");\r\n } else {\r\n $(\".reviewAndOrderBtn\").removeClass(\"stored-payment-btn\");\r\n }\r\n\r\n if (\r\n clickedButtonPaymentType === \"google\" ||\r\n clickedButtonPaymentType === \"apple\" ||\r\n clickedButtonPaymentType === \"paypal\"\r\n ) {\r\n $(\".reviewAndOrderBtn\").addClass(\"google-payment-btn\");\r\n } else {\r\n $(\".reviewAndOrderBtn\").removeClass(\"google-payment-btn\");\r\n }\r\n });\r\n\r\n $(\".fb-btn-group\")\r\n .find(\".btn.btn-payment\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(this).addClass(\"active\").siblings().removeClass(\"active\");\r\n });\r\n\r\n $reviewAndOrderBtn.on(\"click\", function (e) {\r\n e.preventDefault();\r\n\r\n const paymentType = $(this)\r\n .closest(\"#paymentSection\")\r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment.active\")\r\n .data(\"payment-type-btn\");\r\n let type;\r\n if (paymentType.toLowerCase() === \"google\") {\r\n type = \"GooglePay\";\r\n } else if (paymentType.toLowerCase() === \"paypal\") {\r\n type = \"PayPal\";\r\n } else if (paymentType.toLowerCase() === \"apple\") {\r\n type = \"ApplePay\";\r\n }\r\n const data = {\r\n Type: type,\r\n };\r\n $.ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/CreateOrUpdateCheckoutCookiePaymentStep\",\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n data: data,\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n } else {\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length\r\n ) {\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#payment\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $(\".checkout-navigation-menu\").find(\"#review\").trigger(\"click\");\r\n $.checkoutScrollToTop();\r\n }\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n },\r\n error: function error() {},\r\n });\r\n $(\".review-section-content-vip\").find(\".paid-info\").addClass(\"hidden\");\r\n if ($(this).hasClass(\"stored-payment-btn\")) {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/CreateOrUpdateCheckoutCookiePaymentStep\",\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n UseNewFundingSource: \"false\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n } else {\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length\r\n ) {\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#payment\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $(\".checkout-navigation-menu\").find(\"#review\").trigger(\"click\");\r\n $.checkoutScrollToTop();\r\n // To show the respective payment button on review section\r\n\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons\")\r\n .find(\".pay-btn\")\r\n .each(function (i, el) {\r\n if (\r\n $(el).data(\"payment-type-btn\").toLowerCase() ===\r\n \"creditcard\"\r\n ) {\r\n console.log(\"test\", $(el).siblings());\r\n $(el).removeClass(\"hidden\");\r\n $(el).siblings().addClass(\"hidden\");\r\n }\r\n });\r\n }\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n },\r\n error: function error() {},\r\n });\r\n } else {\r\n $(\".checkout-navigation-menu\").find(\"#review\").trigger(\"click\");\r\n $.checkoutScrollToTop();\r\n }\r\n\r\n // To show the respective payment button on review section\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons\")\r\n .find(\".pay-btn\")\r\n .each(function (i, el) {\r\n if (\r\n $(el).data(\"payment-type-btn\").toLowerCase() ===\r\n clickedButtonPaymentType\r\n ) {\r\n $(el).removeClass(\"hidden\");\r\n $(el).siblings().addClass(\"hidden\");\r\n }\r\n });\r\n });\r\n $ccReviewAndOrderBtn.on(\"click\", function (e) {\r\n // don't e.preventDefault\r\n //e.preventDefault();\r\n $(\".review-section-content-vip\").find(\".paid-info\").removeClass(\"hidden\");\r\n // To show the respective payment button on review section\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons\")\r\n .find(\".pay-btn\")\r\n .each(function (i, el) {\r\n if (\r\n $(el).data(\"payment-type-btn\").toLowerCase() ===\r\n clickedButtonPaymentType\r\n ) {\r\n $(el).removeClass(\"hidden\");\r\n $(el).siblings().addClass(\"hidden\");\r\n }\r\n });\r\n });\r\n\r\n // logout\r\n $(\".js-btn-logout\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n console.log(\"test\");\r\n $.ajax({\r\n url: \"/rslsitecoreapi/CustomerAccounts/AccountLogout\",\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n success: function success() {\r\n $.handleEngageIdentity();\r\n if (window.location.href.indexOf(\"/my-account\") > -1) {\r\n $.redirectToLoginPageWithReturnUrl();\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n },\r\n });\r\n });\r\n //Check if it's an apple device or not\r\n /* if (\r\n navigator.userAgent.match(/(iPod|iPhone|iPad|Mac)/) ||\r\n (navigator.userAgent.indexOf(\"Mac OS X\") != -1 &&\r\n navigator.userAgent.indexOf(\"Safari\") != -1 &&\r\n navigator.userAgent.indexOf(\"Chrome\") == -1)\r\n ) {\r\n $(\"#paymentSection\")\r\n .find(\"#paymentRadioButtons\")\r\n .find(\".btn-payment\")\r\n .each(function (i, el) {\r\n if ($(el).data(\"payment-type-btn\").toLowerCase() === \"apple\") {\r\n $(el).removeClass(\"hidden\");\r\n }\r\n });\r\n } */\r\n});\r\n","import { data } from \"jquery\";\r\nimport lity from \"lity\";\r\n\r\n$(() => {\r\n const $loginBtn = $(\"#loginBtn\");\r\n const $loginBtnStored = $(\".loginBtnStored\");\r\n const $loginForm = $(\"#loginForm\");\r\n const $loginFormStored = $(\".loginFormStoredPayment\");\r\n const $reviewAndOrderBtn = $(\".reviewAndOrderBtn\");\r\n \r\n // Convert text to password\r\n $(\"form#loginForm .new-password__icon\").on(\"click\", function () {\r\n toggleInputType(\".new-password__input\", \".new-password\");\r\n });\r\n $(\"form.loginFormStoredPayment .new-password__icon\").on(\"click\", function () {\r\n toggleInputType(\".new-password__input\", \".new-password\");\r\n });\r\n const toggleInputType = (inputClassName, iconClassName) => {\r\n $(iconClassName).find(\".visibility-off\").toggleClass(\"hidden\");\r\n\r\n const passwordType = $(inputClassName).attr(\"type\");\r\n if (passwordType === \"text\") {\r\n $(inputClassName).attr(\"type\", \"password\");\r\n } else {\r\n $(inputClassName).attr(\"type\", \"text\");\r\n }\r\n };\r\n\r\n // Check the password strength based on the given input in the password field\r\n $('.login-form').find('[name=\"Password\"]').on(\"blur keyup\", function () {\r\n const $this = $(this);\r\n\r\n // Reset on keyup\r\n $.resetPasswordStrength();\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this);\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this);\r\n });\r\n\r\n if (\r\n $loginForm &&\r\n $loginForm.length > 0 &&\r\n $loginForm.data(\"standalone-login\") &&\r\n $loginForm.data(\"standalone-login\").toString().toLowerCase() !== \"false\"\r\n ) {\r\n $loginBtn.removeClass(\"disabled\");\r\n $loginForm.on(\"submit\", function (e) {\r\n const $this = $(this);\r\n e.preventDefault();\r\n\r\n\r\n if ($this.valid()) {\r\n $(this).find(\"#loginBtn\").addClass(\"disabled-loader\");\r\n $(this)\r\n .find(\"#loginBtn\")\r\n .append(\r\n ''\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const requestVerificationToken = $this\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const loginInfo = $.objectifyForm($this.serializeArray());\r\n jQuery.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n loginInfo: loginInfo,\r\n GoogleReCaptchaToken: token,\r\n DataSourceId: $this.find(\"#DataSourceId\").val(),\r\n },\r\n success: function success(data) {\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n $.handleEngageIdentity();\r\n if (data.ShowMergeCartMessage) {\r\n lity(\"#cartConfirmModal\");\r\n const $cartConfirmModal = $(\"#cartConfirmModal\");\r\n $cartConfirmModal\r\n .find(\".confirm-heading\")\r\n .html(data.MergeCartMessageTitle);\r\n $cartConfirmModal\r\n .find(\".confirmation-text\")\r\n .html(data.MergeCartMessageMessage);\r\n $cartConfirmModal\r\n .find(\"#cartMerge\")\r\n .html(data.MergeCartMessageMerge);\r\n $cartConfirmModal\r\n .find(\"#cartReplace\")\r\n .html(data.MergeCartMessageReplace);\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n if (data.SuccessHtml) {\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n\r\n $(\"#loggedInDisplay\").remove();\r\n $(\".existing-account\").append(data.SuccessHtml);\r\n $(\"#loggedInDisplay\").removeClass(\"hidden\");\r\n $(\".existing-account-login\").addClass(\"hidden\");\r\n\r\n // rebind logout button\r\n $.logout();\r\n $(\"#accountSection\")\r\n .find(\".existing-account-login\")\r\n .addClass(\"hidden\");\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n }\r\n }\r\n } else {\r\n $(\".loading-indicator\").remove();\r\n $(\"#loginBtn\").removeClass(\"disabled-loader\");\r\n const response = data.Error.ResponseStatus;\r\n if (response) {\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n if (data.ApiError && data.ApiError.ResponseStatus) {\r\n const recaptchaError = data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n recaptchaError.TitleText,\r\n recaptchaError.Message,\r\n recaptchaError.ButtonText\r\n );\r\n }\r\n }\r\n } else if (\r\n data &&\r\n data.ApiError &&\r\n data.ApiError.ResponseStatus &&\r\n data.ApiError.ResponseStatus.ErrorCode &&\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\"\r\n ) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#loginBtn\").removeClass(\"disabled-loader\");\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n }\r\n },\r\n });\r\n }, \"Login\");\r\n } \r\n });\r\n } else {\r\n // checkout login\r\n $loginForm.on(\"submit\", function (e) {\r\n const $this = $(this);\r\n \r\n e.preventDefault();\r\n if ($this.valid()) {\r\n $(this).find(\"#loginBtn\").addClass(\"disabled-loader\");\r\n $(this)\r\n .find(\"#loginBtn\")\r\n .append(\r\n ''\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const loginInfo = $.objectifyForm($this.serializeArray());\r\n const requestVerificationToken = $this\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n jQuery.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n loginInfo: loginInfo,\r\n GoogleReCaptchaToken: token,\r\n DataSourceId: $this.find(\"#DataSourceId\").val(),\r\n },\r\n success: function success(data) {\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n $.handleEngageIdentity();\r\n if (data.ShowMergeCartMessage) {\r\n lity(\"#cartConfirmModal\");\r\n const $cartConfirmModal = $(\"#cartConfirmModal\");\r\n $cartConfirmModal\r\n .find(\".confirm-heading\")\r\n .html(data.MergeCartMessageTitle);\r\n $cartConfirmModal\r\n .find(\".confirmation-text\")\r\n .html(data.MergeCartMessageMessage);\r\n $cartConfirmModal\r\n .find(\"#cartMerge\")\r\n .html(data.MergeCartMessageMerge);\r\n $cartConfirmModal\r\n .find(\"#cartReplace\")\r\n .html(data.MergeCartMessageReplace);\r\n } else {\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n // To reload Header\r\n $.reloadHeader();\r\n if (\r\n data.IsVip &&\r\n $(\"#checkoutContainer\")\r\n .data(\"nvip-checkout\")\r\n .toString()\r\n .toLowerCase() === \"false\"\r\n ) {\r\n $(\"#checkoutContainer\").replaceWith(\r\n data.AlreadySubscribedText\r\n );\r\n }\r\n if (data.SuccessHtml) {\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n\r\n $(\"#loggedInDisplay\").remove();\r\n $(\".existing-account\").append(data.SuccessHtml);\r\n $(\"#loggedInDisplay\").removeClass(\"hidden\");\r\n $(\".existing-account-login\").addClass(\"hidden\");\r\n\r\n // rebind logout button\r\n $.logout();\r\n }\r\n if (\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ) {\r\n $.retrieveGiftcontacts();\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n // if it is NVIP checkout\r\n if ($(\"#NVIPTicketSummary\").length > 0) {\r\n $.getCheckoutSumamry(\"false\", function () {\r\n $.showErrorIfNoTicketsInCheckout();\r\n $.updateAntiForgeryTokens();\r\n });\r\n } else {\r\n // else if it is VIP checkout\r\n $.showErrorIfSubscriptionSelected();\r\n $.updateAntiForgeryTokens();\r\n }\r\n\r\n // get analytics data\r\n $.get(\r\n \"/rslsitecoreapi/accountanalytics/accountinfo\",\r\n function (result) {\r\n if (result && result.Data && result.Data.user) {\r\n $(\"body\").data(\"ga-user-config\", result.Data.user);\r\n }\r\n if (\r\n result &&\r\n result.Data &&\r\n result.Data.subscriptions &&\r\n result.Data.subscriptions != \"\"\r\n ) {\r\n $(\"body\").data(\r\n \"ga-user-subscriptions-config\",\r\n JSON.parse(result.Data.subscriptions)\r\n );\r\n }\r\n\r\n $.trackUserDetailsEvent(true);\r\n }\r\n );\r\n }\r\n }\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n } else {\r\n $(\".loading-indicator\").remove();\r\n $(\"#loginBtn\").removeClass(\"disabled-loader\");\r\n const response = data.Error.ResponseStatus;\r\n if (response) {\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n if (data.ApiError && data.ApiError.ResponseStatus) {\r\n const recaptchaError = data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n recaptchaError.TitleText,\r\n recaptchaError.Message,\r\n recaptchaError.ButtonText\r\n );\r\n }\r\n }\r\n } else if (\r\n data &&\r\n data.ApiError &&\r\n data.ApiError.ResponseStatus &&\r\n data.ApiError.ResponseStatus.ErrorCode &&\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n }\r\n\r\n $(\".loading-indicator\").remove();\r\n $(\"#loginBtn\").removeClass(\"disabled-loader\");\r\n },\r\n });\r\n }, \"Login\");\r\n }\r\n\r\n });\r\n }\r\n // Stored payment login\r\n if ($loginFormStored && $loginFormStored.length > 0) {\r\n $loginBtnStored.removeClass(\"disabled\");\r\n let $loginPasswordField;\r\n $loginFormStored.on(\"submit\", function (e) {\r\n const $this = $(this);\r\n e.preventDefault();\r\n if($this.closest('#paymentSection') && $this.closest('#paymentSection').length > 0) {\r\n $loginPasswordField = $loginFormStored.find('#semiTrustedPaymentPassword');\r\n } else {\r\n $loginPasswordField = $loginFormStored.find('#Password');\r\n }\r\n let passwordValue = $loginPasswordField.val().toString();\r\n let isPasswordValid = ($.checkPasswordComplianceChars(passwordValue) || $.checkPasswordComplianceSpecialChars(passwordValue));\r\n\r\n if ($this.valid()) {\r\n $(this).find(\".loginBtnStored\").addClass(\"disabled-loader\");\r\n $(this)\r\n .find(\".loginBtnStored\")\r\n .append(\r\n ''\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const loginInfo = $.objectifyForm($this.serializeArray());\r\n const requestVerificationToken = $this\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n jQuery.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n loginInfo: loginInfo,\r\n GoogleReCaptchaToken: token,\r\n DataSourceId: $this.find(\"#DataSourceId\").val(),\r\n },\r\n success: function success(data) {\r\n if (data && data.Error && data.Error.ResponseStatus) {\r\n $.handleEngageIdentity();\r\n const respObj = data.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (data.ShowMergeCartMessage) {\r\n lity(\"#cartConfirmModal\");\r\n const $cartConfirmModal = $(\"#cartConfirmModal\");\r\n $cartConfirmModal\r\n .find(\".confirm-heading\")\r\n .html(data.MergeCartMessageTitle);\r\n $cartConfirmModal\r\n .find(\".confirmation-text\")\r\n .html(data.MergeCartMessageMessage);\r\n $cartConfirmModal\r\n .find(\"#cartMerge\")\r\n .html(data.MergeCartMessageMerge);\r\n $cartConfirmModal\r\n .find(\"#cartReplace\")\r\n .html(data.MergeCartMessageReplace);\r\n } else {\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n // To reload Header\r\n $.reloadHeader();\r\n if (data.IsVip) {\r\n $(\"#checkoutSubscribedContainer\").replaceWith(\r\n data.AlreadySubscribedText\r\n );\r\n }\r\n if (data.SuccessHtml) {\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n\r\n $(\"#loggedInDisplay\").remove();\r\n $(\".existing-account\").append(data.SuccessHtml);\r\n $(\"#loggedInDisplay\").removeClass(\"hidden\");\r\n $(\r\n \".logged-in-section.semi-trusted-mode-content\"\r\n ).addClass(\"hidden\");\r\n\r\n // rebind logout button\r\n $.logout();\r\n }\r\n if (\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ) {\r\n $.retrieveGiftcontacts();\r\n }\r\n\r\n // if it is NVIP checkout\r\n if ($(\"#NVIPTicketSummary\").length > 0) {\r\n $.getCheckoutSumamry(\"true\", function () {\r\n $.showErrorIfNoTicketsInCheckout();\r\n $.updateAntiForgeryTokens();\r\n });\r\n } else {\r\n // else if it is VIP checkout\r\n $.showErrorIfSubscriptionSelected();\r\n $.updateAntiForgeryTokens();\r\n }\r\n if (\r\n $loginFormStored.closest(\"#paymentSection\") &&\r\n $loginFormStored\r\n .closest(\"#paymentSection\")\r\n .not(\".hidden\").length > 0\r\n ) {\r\n $reviewAndOrderBtn.trigger(\"click\"); // take user to review and order page\r\n } else {\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n }\r\n $loginFormStored.hide();\r\n $(\"#navigateToReview\").removeClass(\"hidden\");\r\n $reviewAndOrderBtn.removeClass(\"disabled\");\r\n\r\n // get analytics data\r\n $.get(\r\n \"/rslsitecoreapi/accountanalytics/accountinfo\",\r\n function (result) {\r\n if (result && result.Data && result.Data.user) {\r\n $(\"body\").data(\"ga-user-config\", result.Data.user);\r\n }\r\n if (\r\n result &&\r\n result.Data &&\r\n result.Data.subscriptions &&\r\n result.Data.subscriptions != \"\"\r\n ) {\r\n $(\"body\").data(\r\n \"ga-user-subscriptions-config\",\r\n JSON.parse(result.Data.subscriptions)\r\n );\r\n }\r\n\r\n $.trackUserDetailsEvent(true);\r\n }\r\n );\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n }\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n } else {\r\n $(\".loading-indicator\").remove();\r\n $(\".loginBtnStored\").removeClass(\"disabled-loader\");\r\n const response = data.Error.ResponseStatus;\r\n if (response) {\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n if (data.ApiError && data.ApiError.ResponseStatus) {\r\n const recaptchaError = data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n recaptchaError.TitleText,\r\n recaptchaError.Message,\r\n recaptchaError.ButtonText\r\n );\r\n }\r\n }\r\n } else if (\r\n data &&\r\n data.ApiError &&\r\n data.ApiError.ResponseStatus &&\r\n data.ApiError.ResponseStatus.ErrorCode &&\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n }\r\n\r\n $(\".loading-indicator\").remove();\r\n $(\".loginBtnStored\").removeClass(\"disabled-loader\");\r\n },\r\n });\r\n }, \"Login\");\r\n }\r\n\r\n });\r\n }\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n function showHideGift() {\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n const $gift = $(\".checkout-navigation-menu\").find(\"#gift\");\r\n const $payment = $(\".checkout-navigation-menu\").find(\"#payment\");\r\n if ($NVIPTicketSummary && $NVIPTicketSummary.length > 0) {\r\n if ($NVIPTicketSummary.data(\"isgift\").toLowerCase() === \"false\") {\r\n $gift.addClass(\"hidden\");\r\n $gift.next(\".step-line\").addClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $payment.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n $(\"#paymentSection\").removeClass(\"hidden\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n } else {\r\n $payment.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n $(\"#paymentSection\").addClass(\"hidden\");\r\n }\r\n } else {\r\n $gift.removeClass(\"hidden\");\r\n $gift.next(\".step-line\").removeClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $gift.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#gift\").trigger(\"click\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n } else {\r\n $gift.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n }\r\n }\r\n }\r\n }\r\n // facebook login for existing user for checkout page\r\n if (\r\n $(\".fbloginbutton\") &&\r\n $(\".fbloginbutton\").length > 0 &&\r\n $(\".fbloginbutton\").closest(\"#accountSection\") &&\r\n $(\".fbloginbutton\").closest(\"#accountSection\").length > 0\r\n ) {\r\n $(\".fbloginbutton\")\r\n .off(\"click\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\"#js-checkout-submit-Login\").addClass(\"active\");\r\n const $el = $(\".fbloginbutton\");\r\n const that = $(this);\r\n that.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n FB.login(\r\n function (res) {\r\n if (res.status === \"connected\") {\r\n $.ajax({\r\n url: $el.data(\"fb-ajax\"),\r\n data: {\r\n fbresponse: res.authResponse.accessToken,\r\n accountlogininfoid: $el.data(\"account-login-info\"),\r\n },\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n $(\".field-validation-error\").remove();\r\n if (result && result.Error && result.Error.ResponseStatus) {\r\n const respObj = result.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n $.handleEngageIdentity();\r\n if (\r\n that.closest(\"#accountSection\") &&\r\n that.closest(\"#accountSection\").length > 0\r\n ) {\r\n $.navigateToNextStep(result);\r\n } else if (\r\n (that.closest(\".loginFormStoredPayment\") &&\r\n that.closest(\".loginFormStoredPayment\").length > 0 &&\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0)\r\n ) {\r\n $.navigateStoredPayment(data);\r\n console.log(\"test\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .trigger(\"click\");\r\n $(\r\n \".logged-in-section.semi-trusted-mode-content\"\r\n ).addClass(\"hidden\");\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n } else {\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n\r\n let errorTitle = \"\";\r\n let errorMessage = \"\";\r\n let errorButton = \"\";\r\n if (\r\n result &&\r\n result.Error &&\r\n result.Error.ResponseStatus &&\r\n result.Error.ResponseStatus.ErrorCode ==\r\n \"incorrectusernameorpassword\"\r\n ) {\r\n // show invalid login error\r\n errorTitle = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-title\"\r\n );\r\n errorMessage = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-message\"\r\n );\r\n errorButton = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-button\"\r\n );\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n } else if (respObj.ErrorCode === \"UserNotFound\") {\r\n if (\r\n $(\".fbloginbutton\").closest(\"#accountSection\") &&\r\n $(\".fbloginbutton\").closest(\"#accountSection\")\r\n .length > 0\r\n ) {\r\n $(\"#accountSection\")\r\n .find(\".create-account-btn-text\")\r\n .trigger(\"click\");\r\n\r\n // put the FB access Token where we can ensure it gets posted to checkout cookie as well as use for setting form state correctly\r\n $(\"#newAccountFormExpanded #FacebookSignUpAccessToken\").val(\r\n res.authResponse.accessToken\r\n );\r\n\r\n setUserDetails(FB,res);\r\n \r\n that.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n\r\n } else {\r\n window.location.replace(\"/createaccount\");\r\n }\r\n } else {\r\n // show generic error\r\n errorTitle = $(\".fbloginbutton\").data(\"error-title\");\r\n errorMessage =\r\n $(\".fbloginbutton\").data(\"error-message\");\r\n errorButton = $(\".fbloginbutton\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n }\r\n } else {\r\n // show generic error\r\n errorTitle = $(\".fbloginbutton\").data(\"error-title\");\r\n errorMessage =\r\n $(\".fbloginbutton\").data(\"error-message\");\r\n errorButton = $(\".fbloginbutton\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n $(\"#js-checkout-submit-Login\").removeClass(\"active\");\r\n },\r\n error: function error() {\r\n console.log(\"FB login AJAX error\");\r\n },\r\n });\r\n } else {\r\n $(\"#js-checkout-submit-Login\").removeClass(\"active\");\r\n }\r\n },\r\n { scope: \"email,user_birthday\" }\r\n );\r\n });\r\n $.ajaxSetup({ cache: true });\r\n // initialise FB scripts if the face book login button is present on the account page\r\n if ($(\".fbloginbutton\") && $(\".fbloginbutton\").length) {\r\n let fbAppId = $(\".fbloginbutton\").data(\"fb-app-id\");\r\n\r\n $.getScript(\"https://connect.facebook.net/en_US/sdk.js\", () => {\r\n FB.init({\r\n appId: fbAppId,\r\n version: \"v2.7\", // or v2.1, v2.2, v2.3, ...\r\n });\r\n $(\".fbloginbutton\").removeAttr(\"disabled\");\r\n });\r\n }\r\n } else {\r\n $(\".fbloginbutton\")\r\n .off(\"click\")\r\n .on(\"click\", function () {\r\n $(\"#js-checkout-submit-Login\").addClass(\"active\");\r\n const $el = $(\".fbloginbutton\");\r\n const that = $(this);\r\n FB.login(\r\n function (res) {\r\n if (res.status === \"connected\") {\r\n $.ajax({\r\n url: $el.data(\"fb-ajax\"),\r\n data: {\r\n fbresponse: res.authResponse.accessToken,\r\n accountlogininfoid: $el.data(\"account-login-info\"),\r\n },\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n $(\".field-validation-error\").remove();\r\n if (result && result.Error && result.Error.ResponseStatus) {\r\n const respObj = result.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n $.handleEngageIdentity();\r\n $.redirectToReturnUrlPage();\r\n } else {\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n\r\n let errorTitle = \"\";\r\n let errorMessage = \"\";\r\n let errorButton = \"\";\r\n if (\r\n result &&\r\n result.Error &&\r\n result.Error.ResponseStatus &&\r\n result.Error.ResponseStatus.ErrorCode ==\r\n \"incorrectusernameorpassword\"\r\n ) {\r\n // show invalid login error\r\n errorTitle = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-title\"\r\n );\r\n errorMessage = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-message\"\r\n );\r\n errorButton = $(\".fbloginbutton\").data(\r\n \"invalid-login-error-button\"\r\n );\r\n } else if (respObj.ErrorCode === \"UserNotFound\") {\r\n if (\r\n $(\".fbloginbutton\").closest(\"#accountSection\") &&\r\n $(\".fbloginbutton\").closest(\"#accountSection\")\r\n .length > 0\r\n ) {\r\n $(\"#accountSection\")\r\n .find(\".create-account-btn-text\")\r\n .trigger(\"click\");\r\n\r\n // put the FB access Token where we can ensure it gets posted to checkout cookie as well as use for setting form state correctly\r\n $(\"#newAccountFormExpanded #FacebookSignUpAccessToken\").val(\r\n res.authResponse.accessToken\r\n );\r\n \r\n setUserDetails(FB,res);\r\n\r\n that.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n\r\n } else {\r\n window.location.replace(\"/createaccount\");\r\n }\r\n } else {\r\n // show generic error\r\n errorTitle = $(\".fbloginbutton\").data(\"error-title\");\r\n errorMessage =\r\n $(\".fbloginbutton\").data(\"error-message\");\r\n errorButton = $(\".fbloginbutton\").data(\"error-button\");\r\n systemNotification.error(\r\n errorTitle,\r\n errorMessage,\r\n errorButton\r\n );\r\n }\r\n }\r\n }\r\n $(\"#js-checkout-submit-Login\").removeClass(\"active\");\r\n },\r\n error: function error() {\r\n console.log(\"FB login AJAX error\");\r\n },\r\n });\r\n } else {\r\n $(\"#js-checkout-submit-Login\").removeClass(\"active\");\r\n }\r\n },\r\n { scope: \"email,user_birthday\" }\r\n );\r\n });\r\n $.ajaxSetup({ cache: true });\r\n // initialise FB scripts if the face book login button is present on the account page\r\n if ($(\".fbloginbutton\") && $(\".fbloginbutton\").length) {\r\n let fbAppId = $(\".fbloginbutton\").data(\"fb-app-id\");\r\n\r\n $.getScript(\"https://connect.facebook.net/en_US/sdk.js\", () => {\r\n FB.init({\r\n appId: fbAppId,\r\n version: \"v2.7\", // or v2.1, v2.2, v2.3, ...\r\n });\r\n $(\".fbloginbutton\").removeAttr(\"disabled\");\r\n });\r\n }\r\n }\r\n\r\n // on click of cart merge/replace confirm modal close\r\n $(\"#cartConfirmModal\")\r\n .find(\".modal-close\")\r\n .on(\"click\", function (e) {\r\n $.redirectToReturnUrlPage();\r\n });\r\n\r\n // on click of cart merge or replace\r\n const $cartMerge = $(\"#cartConfirmModal\").find(\"#cartMerge\");\r\n const $cartReplace = $(\"#cartConfirmModal\").find(\"#cartReplace\");\r\n $cartMerge.on(\"click\", function () {\r\n $.redirectToReturnUrlPage();\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/MergeShoppingCarts\",\r\n method: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n console.log(result);\r\n },\r\n fail: function (error) {},\r\n });\r\n });\r\n $cartReplace.on(\"click\", function () {\r\n $.redirectToReturnUrlPage();\r\n $.ajax({\r\n url: \"/rslsitecoreapi/ShoppingCart/ReplaceCart\",\r\n method: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n console.log(result);\r\n },\r\n fail: function (error) {},\r\n });\r\n });\r\n});\r\n\r\nfunction setUserDetails(FB,res){\r\n FB.api(\r\n \"/me?access_token=\" + res.authResponse.accessToken,\r\n { locale: \"en_US\", fields: \"first_name,last_name,email\" },\r\n (result) => {\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n // populate the who step and details step fields with FB data we got from the response\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded #FirstName\").val(\r\n result.first_name\r\n );\r\n $(\"#newAccountFormExpanded #LastName\").val(\r\n result.last_name\r\n );\r\n $(\"#newAccountFormExpanded #EmailAddress\").val(\r\n result.email\r\n );\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\r\n \"#newAccountFormExpanded #FacebookSignUpAccessToken\"\r\n ).attr(\"data-email\", result.email);\r\n // To disable email field\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .addClass(\"disabled\");\r\n // if there is a value in any inputs in the details or new member form (which there is now we've set some), then remove the empty class so the label text sits higher\r\n $(\"#newAccountFormExpanded input\")\r\n .filter(function () {\r\n return this.value;\r\n })\r\n .parent(\".js-form-textfield\")\r\n .removeClass(\"empty\");\r\n }\r\n );\r\n}\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n setTimeout(function () {\r\n $('input:-webkit-autofill').each(function(){\r\n $(this).addClass('autofilled');\r\n $('.autofilled').closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(this)\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n })\r\n },1000);\r\n});","$(document).ready(function () {\r\n const overviewContainer = $('.overview-section');\r\n if (overviewContainer.length < 1) return;\r\n\r\n overviewContainer.each(function () {\r\n const overviewComponent = $(this);\r\n const collapsible = overviewComponent.find('.overview-section__content');\r\n if (collapsible.length < 1) return;\r\n\r\n const readMoreButton = overviewComponent.find('.overview-section__read-more');\r\n if (readMoreButton.length < 1) return;\r\n\r\n const readMoreText = readMoreButton.find('.read-more__text');\r\n if (readMoreText.length < 1) return;\r\n\r\n let isExpanded = false;\r\n let isCollapsibleContent = overviewComponent.hasClass('collapse');\r\n\r\n init();\r\n\r\n readMoreButton.click(function (e) {\r\n e.preventDefault();\r\n\r\n if (isExpanded) {\r\n collapsible.css({ 'max-height': '144px', 'mask-image': 'var(--mask-gradient)' });\r\n readMoreText.text('Read more');\r\n readMoreButton.removeClass('expanded');\r\n } else {\r\n collapsible.css({ 'max-height': '100%', 'mask-image': 'none' });\r\n readMoreText.text('Read less');\r\n readMoreButton.addClass('expanded');\r\n }\r\n isExpanded = !isExpanded;\r\n });\r\n\r\n $(window).on('resize', function () {\r\n isCollapsibleContent = overviewComponent.hasClass('collapse');\r\n\r\n if (!isCollapsibleContent) {\r\n collapsible.css({ 'max-height': '100%', 'mask-image': 'none' });\r\n readMoreButton.css('display', 'none');\r\n return;\r\n }\r\n\r\n if (!isExpanded) collapsible.css('max-height', '144px');\r\n\r\n if (collapsible.prop('scrollHeight') > 144) {\r\n readMoreButton.css('display', 'block');\r\n\r\n if (!isExpanded) collapsible.css('mask-image', 'var(--mask-gradient)');\r\n }\r\n\r\n if (collapsible.prop('scrollHeight') < 144) {\r\n readMoreButton.css('display', 'none');\r\n\r\n if (!isExpanded) collapsible.css('mask-image', 'none');\r\n }\r\n });\r\n\r\n function init() {\r\n if (!isCollapsibleContent) {\r\n collapsible.css({ 'max-height': '100%' });\r\n }\r\n\r\n if (collapsible.prop('scrollHeight') > 144 && isCollapsibleContent) {\r\n collapsible.css({ 'mask-image': 'var(--mask-gradient)' });\r\n readMoreButton.css('display', 'block');\r\n }\r\n }\r\n });\r\n});","import lity from \"lity\";\r\n$(() => {\r\n const $galleryCategory = $(\"#galleryFilter li\");\r\n const defaultCategory = $(\"#galleryFilter\")\r\n .find(\".selected\")\r\n .data(\"category\");\r\n const $galleryCategoryImage = $(\"#galleryCategory\").find(\".gallery-img\");\r\n const $gridGalleryImages = $(\"#gridThumbnails\").find(\".gallery-img\");\r\n const $defaultImage = $(\"#gridThumbnails\").find(\".gallery-img.selected\");\r\n const $imageDetails = $(\"#imageDetails\");\r\n const heading = $defaultImage.data(\"location\");\r\n const description = $defaultImage.data(\"image-description\");\r\n const $selectedThumbnail = $(\"#selectedImage\");\r\n const location = $(\"#mainThumbnailImage\").data(\"location\");\r\n const imageDescription = $(\"#mainThumbnailImage\").data(\"image-description\");\r\n\r\n // By default, assign the heading and description on page load\r\n $imageDetails.find(\".heading\").html(heading);\r\n $imageDetails.find(\".description\").html(description);\r\n\r\n // if ($galleryCategory.length < 1) return;\r\n\r\n //Filtering the gallery categories\r\n $galleryCategory.on(\"click\", function () {\r\n const $this = $(this);\r\n $this.siblings(\".gallery-category\").removeClass(\"selected\");\r\n $this.addClass(\"selected\");\r\n const selectedCategory = $this.data(\"category\");\r\n $(\"#galleryCategory\").attr(\"data-selected-category\", selectedCategory);\r\n if (selectedCategory === defaultCategory) {\r\n $galleryCategoryImage.show();\r\n } else {\r\n $galleryCategoryImage.hide();\r\n const selectedGallery = $galleryCategoryImage.filter(function (i) {\r\n return $(this).data(\"category\") == selectedCategory;\r\n });\r\n selectedGallery.map(function (i) {\r\n $(this).show();\r\n });\r\n }\r\n });\r\n\r\n // ** Prevent opening a modal when 'view all' text in the 'view all images' is clicked\r\n let $galleryContainerViewAllTextElement = $(\"#galleryContainer\").find(\".view-all-text\");\r\n\r\n \r\n $galleryContainerViewAllTextElement.on(\"click\", function (e) {\r\n if ($(e.target).hasClass('view-all-text') || $(e.target).closest('.view-all-text').length) {\r\n e.stopImmediatePropagation()\r\n $(e.target).closest('.grid-item').find('.gallery-img').trigger('click')\r\n }\r\n });\r\n // **\r\n\r\n let $galleryContainerImages = $(\"#galleryContainer\").find(\".gallery-img\");\r\n\r\n $galleryContainerImages.on(\"click\", function (e) {\r\n e.stopPropagation() \r\n // ** Show the first image in the gallery when the \"view all images\" tile/thumbnail is clicked\r\n if ($(e.target).parents('.view-all-image').length) {\r\n $(\"#galleryContainer .grid-item:first-child .gallery-img\").trigger('click')\r\n return\r\n } \r\n // **\r\n lity(\"#galleryInnerModal\");\r\n const selectedimage = $(this).attr(\"src\") || $(this).attr(\"data-ofi-src\");\r\n $(\"#mainImage\").replaceWith(\r\n '
'\r\n );\r\n selectGridImages($(this));\r\n const galleryCategorySelected = $(this);\r\n $(\"#gridThumbnails\")\r\n .find(\".gallery-img\")\r\n .each(function (i) {\r\n if (galleryCategorySelected.data(\"index\") === $(this).data(\"index\")) {\r\n $(this)\r\n .closest(\".grid-image\")\r\n .siblings()\r\n .find(\".gallery-img\")\r\n .removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n }\r\n });\r\n });\r\n\r\n\r\n // Commenting the below code to skip showing the modal popup on clicking the category image work item: 184067\r\n\r\n // Clicking on category image should display thumbnail modal popup\r\n // $galleryCategoryImage.on(\"click\", function () {\r\n // lity(\"#galleryInnerModal\");\r\n // const selectedimage = $(this).attr(\"src\") || $(this).attr(\"data-ofi-src\");\r\n // $(\"#mainImage\").replaceWith(\r\n // '
'\r\n // );\r\n // selectGridImages($(this));\r\n // const galleryCategorySelected = $(this);\r\n // $(\"#gridThumbnails\")\r\n // .find(\".gallery-img\")\r\n // .each(function (i) {\r\n // if (galleryCategorySelected.data(\"index\") === $(this).data(\"index\")) {\r\n // $(this)\r\n // .closest(\".grid-image\")\r\n // .siblings()\r\n // .find(\".gallery-img\")\r\n // .removeClass(\"selected\");\r\n // $(this).addClass(\"selected\");\r\n // }\r\n // });\r\n // });\r\n\r\n $(\"#mainThumbnailImage\")\r\n .parent()\r\n .on(\"click\", function (e) {\r\n\r\n e.preventDefault();\r\n const $this = $(this).find(\"#mainThumbnailImage\");\r\n const thumbnailImage = $this.attr(\"src\") || $this.attr(\"data-ofi-src\");\r\n const heading = $this.data(\"location\");\r\n const description = $this.data(\"image-description\");\r\n $(\"#mainImage\").replaceWith(\r\n '
'\r\n );\r\n\r\n $imageDetails.find(\".heading\").html(heading);\r\n $imageDetails.find(\".description\").html(description);\r\n $selectedThumbnail.html($this.data(\"index\") + \"/\");\r\n if (!$this.hasClass(\"selected\")) {\r\n $gridGalleryImages.removeClass(\"selected\");\r\n $this.addClass(\"selected\");\r\n }\r\n });\r\n\r\n // Gallery grid/thumbnail images\r\n $gridGalleryImages.on(\"click\", function (e) {\r\n\r\n e.preventDefault();\r\n selectGridImages($(this));\r\n $(this)\r\n .closest(\".grid-image\")\r\n .siblings()\r\n .find(\".gallery-img\")\r\n .removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n });\r\n function selectGridImages($this) {\r\n const $gridImageContainer = $(\"#gridThumbnails\").find(\".grid-image\");\r\n\r\n const thumbnailImage = $this.attr(\"src\") || $this.attr(\"data-ofi-src\");\r\n const heading = $this.data(\"location\");\r\n const description = $this.data(\"image-description\");\r\n\r\n $(\"#mainImage\").replaceWith(\r\n '
'\r\n );\r\n\r\n $imageDetails.find(\".heading\").html(heading);\r\n $imageDetails.find(\".description\").html(description);\r\n $selectedThumbnail.html($this.data(\"index\") + \"/\");\r\n }\r\n // clicking on previous image\r\n $(\"#prevArrow\").on(\"click\", clickPrevImage);\r\n $(\"#prevArrow\").addClass(\"disable-arrow\");\r\n\r\n // clicking on next image\r\n $(\"#nextArrow\").on(\"click\", clickNextImage);\r\n let prevImgCount = 0;\r\n let nextImgCount = 0;\r\n\r\n function clickNextImage() {\r\n const $gridImageContainer = $(\"#gridThumbnails\").find(\".grid-image\");\r\n const currentImg = $gridImageContainer.find(\".gallery-img.selected\");\r\n const $prevImgContainer = currentImg.closest(\".grid-image\").prev();\r\n const prevImg = $prevImgContainer.find(\".gallery-img\");\r\n const $nextImgContainer = currentImg.closest(\".grid-image\").next();\r\n const nextImg = $nextImgContainer.find(\".gallery-img\");\r\n const lastIndex = $(\"#gridThumbnails .grid-image:last-child\")\r\n .find(\".gallery-img.selected\")\r\n .data(\"index\");\r\n prevImgCount++;\r\n\r\n const currentSelected = currentImg.data(\"index\");\r\n if (currentSelected + 1 <= $(\"#galleryInnerModal\").data(\"total-images\")) {\r\n $selectedThumbnail.html(currentSelected + 1 + \"/\");\r\n }\r\n\r\n if (prevImg.length || prevImgCount >= 1) {\r\n $(\"#prevArrow\").removeClass(\"disable-arrow\");\r\n }\r\n\r\n if (nextImg.length) {\r\n currentImg.removeClass(\"selected\");\r\n $(\"#nextArrow\").removeClass(\"disable-arrow\");\r\n const thumbnailImage =\r\n nextImg.attr(\"src\") || nextImg.attr(\"data-ofi-src\");\r\n const heading = nextImg.data(\"location\");\r\n const description = nextImg.data(\"image-description\");\r\n $(\"#mainImage\").replaceWith(\r\n '
'\r\n );\r\n\r\n $imageDetails.find(\".heading\").html(heading);\r\n $imageDetails.find(\".description\").html(description);\r\n\r\n nextImg.addClass(\"selected\");\r\n\r\n if (prevImgCount % 7 === 0) {\r\n $(\"#gridThumbnails\").animate(\r\n {\r\n scrollTop: $(\".grid-image\").offset().top,\r\n },\r\n 100\r\n );\r\n }\r\n\r\n let currentScroll = $(\"#gridThumbnails\").get(0).scrollLeft;\r\n let scrollWidth = $(\"#gridThumbnails\").get(0).scrollWidth;\r\n if (75 + currentScroll >= scrollWidth) {\r\n return;\r\n } else {\r\n $(\"#gridThumbnails\").animate(\r\n {\r\n scrollLeft: \"+=75px\",\r\n },\r\n \"slow\"\r\n );\r\n }\r\n }\r\n\r\n if ($(\"#galleryInnerModal\").data(\"total-images\") === lastIndex) {\r\n $(\"#nextArrow\").addClass(\"disable-arrow\");\r\n $(\"#prevArrow\").removeClass(\"disable-arrow\");\r\n }\r\n }\r\n\r\n function clickPrevImage() {\r\n const $gridImageContainer = $(\"#gridThumbnails\").find(\".grid-image\");\r\n const currentImg = $gridImageContainer.find(\".gallery-img.selected\");\r\n const $prevImgContainer = currentImg.closest(\".grid-image\").prev();\r\n const prevImg = $prevImgContainer.find(\".gallery-img\");\r\n const $nextImgContainer = currentImg.closest(\".grid-image\").next();\r\n const nextImg = $nextImgContainer.find(\".gallery-img\");\r\n const lastIndex = $(\"#gridThumbnails .grid-image:last-child\")\r\n .find(\".gallery-img.selected\")\r\n .data(\"index\");\r\n\r\n nextImgCount++;\r\n const currentSelected = currentImg.data(\"index\");\r\n if (currentSelected > 1) {\r\n $selectedThumbnail.html(currentSelected - 1 + \"/\");\r\n }\r\n\r\n if (currentSelected <= 1) {\r\n $(\"#prevArrow\").addClass(\"disable-arrow\");\r\n $(\"#nextArrow\").removeClass(\"disable-arrow\");\r\n }\r\n\r\n if (\r\n nextImg.length ||\r\n $(\"#galleryInnerModal\").data(\"total-images\") === lastIndex\r\n ) {\r\n $(\"#nextArrow\").removeClass(\"disable-arrow\");\r\n }\r\n\r\n if (prevImg.length) {\r\n currentImg.removeClass(\"selected\");\r\n $(\"#prevArrow\").removeClass(\"disable-arrow\");\r\n const thumbnailImage =\r\n prevImg.attr(\"src\") || prevImg.attr(\"data-ofi-src\");\r\n const heading = prevImg.data(\"location\");\r\n const description = prevImg.data(\"image-description\");\r\n\r\n $(\"#mainImage\").replaceWith(\r\n '
'\r\n );\r\n $imageDetails.find(\".heading\").html(heading);\r\n $imageDetails.find(\".description\").html(description);\r\n\r\n prevImg.addClass(\"selected\");\r\n\r\n if (nextImgCount % 7 === 0) {\r\n $(\"#gridThumbnails\").animate(\r\n {\r\n scrollTop: $(\".grid-image\").offset().top,\r\n },\r\n 100\r\n );\r\n }\r\n\r\n let currentScroll = $(\"#gridThumbnails\").get(0).scrollLeft;\r\n if (currentScroll - 75 <= 0) {\r\n return;\r\n } else {\r\n $(\"#gridThumbnails\").animate(\r\n {\r\n scrollLeft: \"-=75px\",\r\n },\r\n \"slow\"\r\n );\r\n }\r\n }\r\n }\r\n //Scroll to the gallery component\r\n $(\"#backArrow\").on(\"click\", function () {\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop: $(\"#galleryContainer\").offset().top,\r\n },\r\n 2000\r\n );\r\n });\r\n});\r\n","import Chart from 'chart.js';\r\n\r\n$(() => {\r\n if ($('.calculator').length === 0) {\r\n return false;\r\n }\r\n const options = {\r\n type: 'doughnut',\r\n options: {\r\n events: [],\r\n legend: {\r\n display: false\r\n },\r\n tooltips: {\r\n enabled: false\r\n },\r\n cutoutPercentage: 80,\r\n }\r\n };\r\n const liveCtx = document.getElementById('js-calculator-chart-live');\r\n const liveChart = new Chart(liveCtx, { // eslint-disable-line no-unused-vars\r\n ...options,\r\n data: {\r\n datasets: [{\r\n data: [0, 100],\r\n backgroundColor: [\r\n '#0081C8',\r\n '#F0F3F8'\r\n ]\r\n }]\r\n }\r\n });\r\n const sellCtx = document.getElementById('js-calculator-chart-sell');\r\n const sellChart = new Chart(sellCtx, { // eslint-disable-line no-unused-vars\r\n ...options,\r\n data: {\r\n datasets: [{\r\n data: [0, 100],\r\n backgroundColor: [\r\n '#0081C8',\r\n '#F0F3F8'\r\n ]\r\n }]\r\n }\r\n });\r\n const rentCtx = document.getElementById('js-calculator-chart-rent');\r\n const rentChart = new Chart(rentCtx, { // eslint-disable-line no-unused-vars\r\n ...options,\r\n data: {\r\n datasets: [{\r\n data: [0, 100],\r\n backgroundColor: [\r\n '#0081C8',\r\n '#F0F3F8'\r\n ]\r\n }]\r\n }\r\n });\r\n const setChartData = () => {\r\n let selectedLive = 0;\r\n let totalLive = 0;\r\n let selectedSell = 0;\r\n let totalSell = 0;\r\n let selectedRent = 0;\r\n let totalRent = 0;\r\n $('.calculator-btn.live').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-value');\r\n totalLive += parseInt(value, 10);\r\n });\r\n $('.calculator-btn.live.active').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-value');\r\n selectedLive += parseInt(value, 10);\r\n });\r\n $('.calculator-btn.sell').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-sell');\r\n totalSell += parseInt(value, 10);\r\n });\r\n $('.calculator-btn.sell.active').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-sell');\r\n selectedSell += parseInt(value, 10);\r\n });\r\n $('.calculator-btn.rent').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-income');\r\n totalRent += parseInt(value, 10);\r\n });\r\n $('.calculator-btn.rent.active').each(function () {\r\n const value = $(this).closest('.calculator-panel').attr('data-income');\r\n selectedRent += parseInt(value, 10);\r\n const liveValue = $(this).closest('.calculator-panel').attr('data-value');\r\n selectedLive += parseInt(liveValue, 10);\r\n });\r\n /* eslint-disable */\r\n liveChart.data.datasets.forEach((dataset) => {\r\n dataset.data = [selectedLive, totalLive - selectedLive];\r\n });\r\n liveChart.update();\r\n sellChart.data.datasets.forEach((dataset) => {\r\n dataset.data = [selectedSell, totalSell - selectedSell];\r\n });\r\n sellChart.update();\r\n rentChart.data.datasets.forEach((dataset) => {\r\n dataset.data = [selectedRent, totalRent - selectedRent];\r\n });\r\n /* eslint-enable */\r\n rentChart.update();\r\n // update totals\r\n $('.total-live .value').text(`$${selectedLive.toLocaleString('en-AU')}`);\r\n $('.total-sell .value').text(`$${selectedSell.toLocaleString('en-AU')}`);\r\n $('.total-rent .value').text(`$${selectedRent.toLocaleString('en-AU')} /yr`);\r\n };\r\n setChartData();\r\n $('.calculator-btn').on('click', function (e) { // eslint-disable-line prefer-arrow-function\r\n const valueArray = [];\r\n e.preventDefault();\r\n localStorage.clear();\r\n const panelEl = $(this).closest('.calculator-panel');\r\n const panelBtns = panelEl.find('.calculator-btn');\r\n panelBtns.removeClass('active');\r\n $(this).addClass('active');\r\n setChartData();\r\n $(this).parents('.calculator-panel').data('calculator-val', $.trim($(this).text()));\r\n $('.calculator-btn.active').each(function () {\r\n const pusval = $(this).parents('.calculator-panel').data('calculator-val');\r\n valueArray.push(pusval);\r\n });\r\n localStorage.setItem('getCalcValue', valueArray);\r\n });\r\n return '';\r\n});\r\n\r\nif (localStorage.getItem('getCalcValue') !== null) {\r\n const selectedProperties = localStorage.getItem('getCalcValue').split(',');\r\n $.each(selectedProperties, function (index, value) {\r\n const findproperty = localStorage.getItem('getCalcValue').split(',')[index].toLowerCase();\r\n setTimeout(function () {\r\n $('.calculator-panel').eq(index).find('.' + findproperty + '').click();\r\n },\r\n 1000);\r\n });\r\n}\r\n","import lity from \"lity\";\r\n$(() => {\r\n const unsubscribeForm = $(\"#email-unsubscribe\");\r\n const unsubscribeBtn = $(\"#unsubscribeBtn\");\r\n let ajaxDataObj;\r\n\r\n // On submit of unsubscribe form, ajax post should happen\r\n unsubscribeBtn.on(\"click\", (e) => {\r\n e.preventDefault();\r\n const serviceUrl = unsubscribeForm.data(\"service-url\");\r\n const token = unsubscribeForm.data(\"service-token\");\r\n const datasourceId = unsubscribeForm.data(\"ds-id\");\r\n const customerId = unsubscribeForm.data(\"customer-id\");\r\n const deliveryLogId = unsubscribeForm.data(\"delivery-log-id\");\r\n const processingText = unsubscribeForm.data(\"processing-msg\");\r\n\r\n ajaxDataObj = {\r\n DataSourceId: datasourceId,\r\n CustomerId: customerId,\r\n PkeyToken: token,\r\n DeliveryLogId: deliveryLogId,\r\n };\r\n\r\n unsubscribeBtn.html(processingText);\r\n unsubscribeBtn.addClass(\"disabled\");\r\n jQuery.ajax({\r\n url: serviceUrl,\r\n method: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(ajaxDataObj),\r\n success: function success(redirectUrl) {\r\n unsubscribeBtn.html(\"Unsubscribe\");\r\n unsubscribeBtn.removeClass(\"disabled\");\r\n window.location.href = redirectUrl;\r\n },\r\n error: function error(error) {\r\n systemNotification.error(\r\n unsubscribeBtn.data(\"error-title\"),\r\n unsubscribeBtn.data(\"error-message\"),\r\n unsubscribeBtn.data(\"error-button\")\r\n );\r\n unsubscribeBtn.removeClass(\"disabled\");\r\n },\r\n });\r\n });\r\n});\r\n","$(() => {\r\n $.placeOrderVIP = function (el) {\r\n let $this = $(el);\r\n\r\n $.showErrorIfSubscriptionSelected(function (errorWasShown) {\r\n // only try to place order if there was no error shown\r\n if (!errorWasShown) {\r\n $this = $(\"#paySubscriptionBtn\");\r\n $(\"#checkoutLoader\").fadeIn(300);\r\n $.updateAntiForgeryTokens();\r\n $.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n $(\"#checkoutLoader\").fadeOut(300);\r\n if (\r\n result.Data.ApiError.ResponseStatus.ErrorCode &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode.toLowerCase() ===\r\n \"checkoutnull\"\r\n ) {\r\n getApiError(result);\r\n $(\".system-notification\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n window.location.reload();\r\n });\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n e.preventDefault();\r\n window.location.reload();\r\n });\r\n } else if(result.Data.ApiError.ResponseStatus.ErrorCode &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode.toLowerCase() ===\r\n \"braintreeerror\") {\r\n systemNotification.error(\r\n $(\"#paySubscriptionBtn\").data(\r\n \"payment-error-title\"\r\n ),\r\n $(\"#paySubscriptionBtn\").data(\r\n \"payment-error-message\"\r\n ),\r\n $(\"#paySubscriptionBtn\").data(\r\n \"payment-error-button\"\r\n )\r\n );\r\n $(\"#payment\").trigger(\"click\");\r\n } else {\r\n systemNotification.error(\r\n $(\"#paySubscriptionBtn\").data(\r\n \"error-title\"\r\n ),\r\n $(\"#paySubscriptionBtn\").data(\r\n \"error-message\"\r\n ),\r\n $(\"#paySubscriptionBtn\").data(\r\n \"error-button\"\r\n )\r\n );\r\n $(\"#payment\").trigger(\"click\");\r\n }\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#paySubscriptionBtn\").removeClass(\"disabled-loader\");\r\n } else {\r\n window.location.replace(result.RedirectUrl);\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n });\r\n };\r\n\r\n //Navigate to VIP confirm page\r\n $(document).on(\"click\", \"#paySubscriptionBtn\", function (e) {\r\n e.preventDefault();\r\n $(\"#modifyBtn\").addClass(\"pointer-none\");\r\n $.placeOrderVIP(this);\r\n });\r\n\r\n $.showErrorIfSubscriptionSelected = function (callback) {\r\n // if it is VIP\r\n var $VIPSummary = $(\"#VIPMembershipSummary\");\r\n var errorWasShown = false;\r\n\r\n if ($VIPSummary.length > 0) {\r\n // if no subscription is selected show error\r\n if ($(\".vip-badge-container\").length <= 0) {\r\n errorWasShown = true;\r\n\r\n systemNotification.error(\r\n $VIPSummary.data(\"nosubscription-error-title\"),\r\n $VIPSummary.data(\"nosubscription-error-message\"),\r\n $VIPSummary.data(\"nosubscription-error-button\")\r\n );\r\n\r\n // add on click bind\r\n $(\".system-notification\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n $(\"#modifyBtn\").trigger(\"click\");\r\n\r\n // remove the binding\r\n $(\".system-notification\").find(\".btn\").off(\"click\");\r\n });\r\n }\r\n }\r\n\r\n if (callback) {\r\n callback(errorWasShown);\r\n }\r\n };\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n});\r\n","$(() => {\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n if ($NVIPTicketSummary && $NVIPTicketSummary.length > 0) {\r\n $.paymentCalc();\r\n }\r\n\r\n //Navigate to NVIP confirm page\r\n $(document).on(\"click\", \"#completPurchaseBtn\", function (e) {\r\n e.preventDefault();\r\n $(\"#modifyBtn\").addClass(\"pointer-none\");\r\n $.placeOrderNVIP(this);\r\n });\r\n let timesRun = 0;\r\n // Should be called for every 20secs\r\n function checkTransactionStatusNVIP(confirmRedirectUrl) {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/checkout/checktransactionstatus\",\r\n method: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n async: true,\r\n success: function success(result) {\r\n timesRun += 1;\r\n if (timesRun >= result.Data.MaxPolling) {\r\n window.location.replace(confirmRedirectUrl);\r\n } else if (\r\n result.Data.OrderTransactionStatus &&\r\n result.Data.OrderTransactionStatus.toLowerCase() === \"complete\"\r\n ) {\r\n // If the Order is completed Successfully, redirect to confirmation page\r\n timesRun = 0;\r\n window.location.replace(confirmRedirectUrl);\r\n } else if (\r\n (result.Data.OrderTransactionStatus &&\r\n result.Data.OrderTransactionStatus.toLowerCase() ===\r\n \"failedpayment\") ||\r\n (result.Data.OrderTransactionStatus &&\r\n result.Data.OrderTransactionStatus.toLowerCase() ===\r\n \"pendingpayment\")\r\n ) {\r\n // If the payment failed or pending and the state is not in progress, redirect to checkout page\r\n timesRun = 0;\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n // TODO show the payment section and error popup\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n }\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n } else {\r\n setTimeout(() => {\r\n checkTransactionStatusNVIP(confirmRedirectUrl);\r\n }, 3000);\r\n }\r\n },\r\n });\r\n }\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n $.placeOrderNVIP = function (el) {\r\n let $this = $(el);\r\n $.showErrorIfNoTicketsInCheckout(function (errorWasShown) {\r\n // only try to place order if there was no error shown\r\n if (!errorWasShown) {\r\n $this = $(\"#completPurchaseBtn\");\r\n $(\"#checkoutLoader\").fadeIn(300);\r\n\r\n $.updateAntiForgeryTokens();\r\n\r\n let requestVerificationToken = $(\".review-section-content\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n\r\n $.ajax({\r\n url: $this.data(\"place-order-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n __RequestVerificationToken: requestVerificationToken,\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n $(\"#checkoutLoader\").fadeOut(300);\r\n if (\r\n result.Data.ApiError.ResponseStatus &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode.includes(\r\n \"Braintree\"\r\n )\r\n ) {\r\n $(\"#payment\").trigger(\"click\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n } else if (\r\n result.Data.ApiError.ResponseStatus &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode &&\r\n result.Data.ApiError.ResponseStatus.ErrorCode.toLowerCase() ===\r\n \"checkoutnull\"\r\n ) {\r\n getApiError(result);\r\n $(\".system-notification\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n window.location.reload();\r\n });\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n e.preventDefault();\r\n window.location.reload();\r\n });\r\n } else if (\r\n result.Data.ApiError.ResponseStatus &&\r\n (result.Data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidLineItem\" ||\r\n result.Data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidArtUnionStatus\")\r\n ) {\r\n const ButtonText = $(\"#completPurchaseBtn\").data(\r\n \"line-item-error-button\"\r\n );\r\n const Message = $(\"#completPurchaseBtn\").data(\r\n \"line-item-error-message\"\r\n );\r\n const TitleText = $(\"#completPurchaseBtn\").data(\r\n \"line-item-error-title\"\r\n );\r\n\r\n systemNotification.error(TitleText, Message, ButtonText);\r\n\r\n // add on click bind\r\n $(\".system-notification\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n $(\"#modifyBtn\").trigger(\"click\");\r\n\r\n // remove the binding\r\n $(\".system-notification\").find(\".btn\").off(\"click\");\r\n });\r\n } else {\r\n const ButtonText = $(\"#completPurchaseBtn\").data(\r\n \"error-button\"\r\n );\r\n const Message = $(\"#completPurchaseBtn\").data(\"error-message\");\r\n const TitleText = $(\"#completPurchaseBtn\").data(\"error-title\");\r\n systemNotification.error(TitleText, Message, ButtonText);\r\n $(\"#payment\").trigger(\"click\");\r\n }\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#completPurchaseBtn\").removeClass(\"disabled-loader\");\r\n } else {\r\n var redirectUrl = result.RedirectUrl\r\n ? result.RedirectUrl\r\n : result.Data.RedirectUrl;\r\n // To check transaction status API call\r\n checkTransactionStatusNVIP(redirectUrl);\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n });\r\n };\r\n\r\n $.showErrorIfNoTicketsInCheckout = function (callback) {\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n var errorWasShown = false;\r\n\r\n // check if we are in NVIP\r\n if ($NVIPTicketSummary.length > 0) {\r\n // if there are no tickets then show the message\r\n if ($(\".ticket-item-container\").length <= 0) {\r\n errorWasShown = true;\r\n systemNotification.error(\r\n $NVIPTicketSummary.data(\"noticket-error-title\"),\r\n $NVIPTicketSummary.data(\"noticket-error-message\"),\r\n $NVIPTicketSummary.data(\"noticket-error-button\")\r\n );\r\n\r\n // add on click bind\r\n $(\".system-notification\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n $(\"#modifyBtn\").trigger(\"click\");\r\n\r\n // remove the binding\r\n $(\".system-notification\").find(\".btn\").off(\"click\");\r\n });\r\n }\r\n }\r\n\r\n if (callback) {\r\n callback(errorWasShown);\r\n }\r\n };\r\n});\r\n","import attrIsTruthy from \"../../../../Common/js/util/attributeHelper\";\r\n$(() => {\r\n let selectedDropdownContactId, customerDataObj;\r\n var homePhoneNumberInputGift = document.getElementById(\"homePhoneNumber\");\r\n if (\r\n typeof homePhoneNumberInputGift != \"undefined\" &&\r\n homePhoneNumberInputGift != null\r\n ) {\r\n homePhoneNumberInputGift.onkeyup = function (e) {\r\n $.checkFormatHomePhone(this, e);\r\n };\r\n }\r\n var mobilePhoneNumberInputGift = document.getElementById(\"mobilePhoneNumber\");\r\n if (\r\n typeof mobilePhoneNumberInputGift != \"undefined\" &&\r\n mobilePhoneNumberInputGift != null\r\n ) {\r\n mobilePhoneNumberInputGift.onkeyup = function (e) {\r\n $.checkFormatMobilePhone(this, e);\r\n };\r\n }\r\n\r\n function checkGiftNewRecipientFormIsValid() {\r\n $(\"#giftNewRecipientForm\").validate();\r\n if ($(\"#giftNewRecipientForm\").valid()) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n // Reset State and Country select fields\r\n if (!$(\"#Form_AccountContactDetails_0__AccountAddressState option:first\").val()) {\r\n $(\"#Form_AccountContactDetails_0__AccountAddressState option:first\").html(\"\");\r\n $(\"#Form_AccountContactDetails_0__AccountAddressState\").on(\"click\", function () {\r\n $(\"#Form_AccountContactDetails_0__AccountAddressState option:first\").html(\"State\");\r\n });\r\n }\r\n if (!$(\"#Form_AccountContactDetails_0__AccountAddressCountry option:first\").val()) {\r\n $(\"#Form_AccountContactDetails_0__AccountAddressCountry option:first\").html(\"\");\r\n $(\"#Form_AccountContactDetails_0__AccountAddressCountry\").closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#Form_AccountContactDetails_0__AccountAddressCountry\").on(\"click\", function () {\r\n $(\"#Form_AccountContactDetails_0__AccountAddressCountry option:first\").html(\"Country\");\r\n });\r\n }\r\n\r\n $(\".gift-new-recipient-form .countryAddressCheck\").css(\"display\", \"none\");\r\n // Toggle outside Australia address link\r\n $(\".gift-new-recipient-form #Form_AccountContactDetails_0__AccountAddress\").on(\"focus\", function () {\r\n $(\".countryAddressCheck\").css(\"display\", \"flex\");\r\n });\r\n\r\n $(document).on(\"click\", \"#giftDetailsForm .dropdown-list li\", function (e) {\r\n const $this = $(this);\r\n const $giftNewRecipientForm = $(\"#giftNewRecipientForm\");\r\n const $giftContinueBtn = $(\"#giftContinueBtn\");\r\n if ($(this).data(\"gift-new-recipient\")) {\r\n $(\"#updateGiftAccount\").addClass(\"hidden\");\r\n $(\"#createGiftAccount\").removeClass(\"hidden\");\r\n $(\"#giftNewRecipientForm\").removeClass(\"hidden\");\r\n $giftContinueBtn.addClass(\"hidden\");\r\n $(\"#giftNewRecipientForm\").find(\"input[type=text], textarea\").val(\"\");\r\n if ($(\".domestic-address.form-row\").hasClass(\"hidden\")) {\r\n $(\".countryAddressCheck\").trigger(\"click\");\r\n }\r\n }\r\n if ($(this).data(\"no-gift\")) {\r\n $(\"#giftNewRecipientForm\").addClass(\"hidden\");\r\n $giftContinueBtn.removeClass(\"hidden\");\r\n $giftContinueBtn.removeClass(\"disabled\");\r\n }\r\n selectedDropdownContactId = $this.data(\"gift-contact-id\");\r\n if ($(this).data(\"gift-existing\")) {\r\n $(\"#updateGiftAccount\").removeClass(\"hidden\");\r\n $(\"#createGiftAccount\").addClass(\"hidden\");\r\n $(\"#giftNewRecipientForm\").removeClass(\"hidden\");\r\n $giftContinueBtn.addClass(\"hidden\");\r\n $.ajax({\r\n url:\r\n $(\"#giftDetailsForm\").data(\"service-url\") +\r\n \"?contactId=\" +\r\n $this.data(\"gift-contact-id\"),\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n // Populate the form with API response\r\n $giftNewRecipientForm\r\n .find(\"#firstName\")\r\n .val(result.Data.Contact.FirstName);\r\n $giftNewRecipientForm\r\n .find(\"#firstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n\r\n $giftNewRecipientForm\r\n .find(\"#lastName\")\r\n .val(result.Data.Contact.LastName);\r\n $giftNewRecipientForm\r\n .find(\"#lastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#emailId\")\r\n .val(result.Data.Contact.Email);\r\n $giftNewRecipientForm\r\n .find(\"#emailId\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n if(result.Data.Contact.HomePhone !== null) {\r\n $giftNewRecipientForm\r\n .find(\"#phoneNumberGift\")\r\n .val(result.Data.Contact.HomePhone);\r\n } else {\r\n $giftNewRecipientForm\r\n .find(\"#phoneNumberGift\")\r\n .val(result.Data.Contact.MobilePhone);\r\n }\r\n $giftNewRecipientForm\r\n .find(\"#phoneNumberGift\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\r\n \"#Form_AccountContactDetails_0__AccountInternationalAddress\"\r\n )\r\n .val(result.Data.Contact.Address.Street);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountInternationalAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddress\")\r\n .val(result.Data.Contact.Address.Street);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressCity\")\r\n .val(result.Data.Contact.Address.City);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressCity\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressPostCode\")\r\n .val(result.Data.Contact.Address.ZipCode);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressPostCode\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressState\")\r\n .val(result.Data.Contact.Address.State);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressState\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressStateText\")\r\n .val(result.Data.Contact.Address.State);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressStateText\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressCountry\")\r\n .val(result.Data.Contact.Address.CountryRegionId);\r\n $giftNewRecipientForm\r\n .find(\"#Form_AccountContactDetails_0__AccountAddressCountry\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $giftNewRecipientForm\r\n .find(\"#SuburbirstName\")\r\n .val(result.Data.Contact.Address.Suburb);\r\n $giftNewRecipientForm\r\n .find(\"#SuburbirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\".gift-new-recipient-form .countryAddressCheck\").css(\"display\", \"flex\");\r\n // it is an international address\r\n if (result.Data.Contact.Address.DPID == 0) {\r\n if (\r\n !$giftNewRecipientForm\r\n .find(\".domestic-address.form-row\")\r\n .hasClass(\"hidden\")\r\n ) {\r\n $giftNewRecipientForm\r\n .find(\".countryAddressCheck\")\r\n .trigger(\"click\");\r\n $giftNewRecipientForm\r\n .find(\".form-row.international-address.aus-state\")\r\n .addClass(\"hidden\");\r\n $giftNewRecipientForm\r\n .find(\r\n \".form-row.international-address.non-aus-state\"\r\n )\r\n .removeClass(\"hidden\");\r\n }\r\n } else {\r\n if (\r\n $giftNewRecipientForm\r\n .find(\".domestic-address.form-row\")\r\n .hasClass(\"hidden\")\r\n ) {\r\n $giftNewRecipientForm\r\n .find(\".countryAddressCheck\")\r\n .trigger(\"click\");\r\n $giftNewRecipientForm\r\n .find(\r\n \".form-row.international-address.non-aus-state.m10-bottom\"\r\n )\r\n .addClass(\"hidden\");\r\n }\r\n }\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n });\r\n\r\n $(\"#giftDetailsForm\")\r\n .find(\".dropdown-list\")\r\n .on(\"click\", function (e) {\r\n $(this)\r\n .closest(\".gift-details-content\")\r\n .toggleClass(\"form-dropdown-opened\");\r\n });\r\n $(\"#giftContinueBtn\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n const $this = $(this);\r\n const requestVerificationToken = $(\"#giftSection\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n $.ajax({\r\n url: $this.data(\"gift-url\"),\r\n method: \"POST\",\r\n //contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: {\r\n __RequestVerificationToken: requestVerificationToken,\r\n },\r\n\r\n success: function (result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n getCheckoutSumamry(false);\r\n $(\".checkout-navigation-menu\").find(\"#gift\").addClass(\"hidden\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#payment\")\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n $(\r\n \".loginFormStoredPayment\"\r\n ).addClass(\"hidden\");\r\n }\r\n },\r\n fail: function (error) {},\r\n });\r\n });\r\n function getCheckoutSumamry(skipShowHide) {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/Checkout/GetNVIPCheckoutSummary\",\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n } else {\r\n $(\"#NVIPTicketSummary\").replaceWith(result.Html);\r\n $.rebindModify();\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n if (!skipShowHide) {\r\n showHideGift();\r\n }\r\n }\r\n $.paymentCalc();\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n function showHideGift() {\r\n // To show/hide gift menu icon based on whether it's a gift or not\r\n const $NVIPTicketSummary = $(\"#NVIPTicketSummary\");\r\n const $gift = $(\".checkout-navigation-menu\").find(\"#gift\");\r\n const $payment = $(\".checkout-navigation-menu\").find(\"#payment\");\r\n if ($NVIPTicketSummary && $NVIPTicketSummary.length > 0) {\r\n if ($NVIPTicketSummary.data(\"isgift\").toLowerCase() === \"false\") {\r\n $gift.addClass(\"hidden\");\r\n $gift.next(\".step-line\").addClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $payment.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n $(\"#paymentSection\").removeClass(\"hidden\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n } else {\r\n $payment.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n $(\"#paymentSection\").addClass(\"hidden\");\r\n }\r\n } else {\r\n $gift.removeClass(\"hidden\");\r\n $gift.next(\".step-line\").removeClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n if ($(\"#account\").hasClass(\"validated-step\")) {\r\n $gift.addClass(\"active-step\").removeClass(\"disabled-step\");\r\n $(\".checkout-navigation-menu\").find(\"#gift\").trigger(\"click\");\r\n $(\"#accountSection\").addClass(\"hidden\");\r\n $(\"#giftSection\").removeClass(\"hidden\");\r\n } else {\r\n $gift.addClass(\"disabled-step\").removeClass(\"active-step\");\r\n $(\".checkout-navigation-menu\").find(\"#account\").trigger(\"click\");\r\n $(\"#accountSection\").removeClass(\"hidden\");\r\n $(\"#giftSection\").addClass(\"hidden\");\r\n }\r\n }\r\n }\r\n }\r\n // On submit of gift details new recipient form\r\n $(\"#createGiftAccount\").on(\"click\", function (e) {\r\n\r\n if(!checkGiftNewRecipientFormIsValid()) {\r\n $.focusFirstInvalidField(e);\r\n return false;\r\n }\r\n\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n ''\r\n );\r\n e.preventDefault();\r\n customerDataObj = {\r\n Customer: {},\r\n FirstName: \"\",\r\n LastName: \"\",\r\n HomePhone: \"\",\r\n MobilePhone: \"\",\r\n Email: \"\",\r\n Message: \"\",\r\n };\r\n const $this = $(this).closest(\"form\");\r\n if ($this.valid()) {\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n performAccountFieldsValidtion(customerDataObj, e, token);\r\n }, \"UpdateGiftDetails\");\r\n }\r\n });\r\n\r\n // On sumbit of update gift\r\n $(\"#updateGiftAccount\").on(\"click\", function (e) {\r\n\r\n if(!checkGiftNewRecipientFormIsValid()) {\r\n $.focusFirstInvalidField(e);\r\n return false;\r\n }\r\n\r\n $(this).addClass(\"disabled-loader\");\r\n $(this).append(\r\n ''\r\n );\r\n e.preventDefault();\r\n customerDataObj = {\r\n Customer: {},\r\n FirstName: \"\",\r\n LastName: \"\",\r\n HomePhone: \"\",\r\n MobilePhone: \"\",\r\n Email: \"\",\r\n Message: \"\",\r\n };\r\n const $this = $(this).closest(\"form\");\r\n if ($this.valid()) {\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n performAccountFieldsValidtion(customerDataObj, e, token);\r\n }, \"UpdateGiftDetails\");\r\n }\r\n });\r\n const accountdetailcontrol = $(\"#giftNewRecipientForm\");\r\n const performAccountFieldsValidtion = (customerDataObj, e, token) => {\r\n const mobilePhoneField = accountdetailcontrol.find(\"#MobilePhoneNumber\");\r\n const homePhoneField = accountdetailcontrol.find(\"#homePhoneNumber\");\r\n const phoneField = accountdetailcontrol.find(\"#phoneNumberGift\");\r\n const emailField = accountdetailcontrol.find(\"#emailId\");\r\n const searchId = accountdetailcontrol\r\n .find(\"#Form_AccountAddressSearchId_0_\")\r\n .val();\r\n const isDomesticAddress = attrIsTruthy(\r\n accountdetailcontrol\r\n .find(\"#countryAddressCheck0\")\r\n .attr(\"data-check-domestic-address\")\r\n );\r\n const addressIntField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountInternationalAddress\"\r\n );\r\n const cityField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddressCity\"\r\n );\r\n const postCodeField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddressPostCode\"\r\n );\r\n const countryField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddressCountry\"\r\n );\r\n var stateField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddressStatee\"\r\n );\r\n if (countryField.val() != \"AUS\") {\r\n stateField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddressStateText\"\r\n );\r\n }\r\n\r\n const addressChanged =\r\n accountdetailcontrol\r\n .find(\"#Form_AccountContactDetails_0__AccountAddress\")\r\n .data(\"address-changed\") === true;\r\n const domAddressField = accountdetailcontrol.find(\r\n \"#Form_AccountContactDetails_0__AccountAddress\"\r\n );\r\n\r\n let validContact = null;\r\n if (typeof mobilePhoneField !== \"undefined\") {\r\n validContact = returnPartyContact(mobilePhoneField, \"true\");\r\n }\r\n\r\n customerDataObj.MobilePhone = phoneField.data(\"phone-type\") === \"mobile\"\r\n ? phoneField.val().replace(/\\s/g, \"\")\r\n : \"\";\r\n\r\n customerDataObj.FirstName = accountdetailcontrol.find(\"#firstName\").val();\r\n customerDataObj.LastName = accountdetailcontrol.find(\"#lastName\").val();\r\n customerDataObj.Message = accountdetailcontrol.find(\"#messageInput\").val();\r\n customerDataObj.GiftContactId = selectedDropdownContactId;\r\n\r\n customerDataObj.HomePhone = phoneField.data(\"phone-type\") === \"landline\"\r\n ? phoneField.val().replace(/\\s/g, \"\")\r\n : \"\";\r\n customerDataObj.Email = accountdetailcontrol.find(\"#emailId\").val();\r\n\r\n if (typeof domAddressField !== \"undefined\") {\r\n if (\r\n (isDomesticAddress && searchId) ||\r\n attrIsTruthy($(domAddressField).attr(\"data-isremoved\"))\r\n ) {\r\n customerDataObj.AddressSearchId = searchId;\r\n customerDataObj.ToRemove = attrIsTruthy(\r\n $(domAddressField).attr(\"data-isremoved\")\r\n );\r\n customerDataObj.IsPostalAddress = \"true\";\r\n customerDataObj.AddressDescription =\r\n $(domAddressField).data(\"description\");\r\n customerDataObj.IsPrimary = $(domAddressField).data(\"isprimary\");\r\n customerDataObj.AddressLocationId =\r\n $(domAddressField).data(\"addresslocationid\");\r\n }\r\n }\r\n\r\n if (typeof addressIntField !== \"undefined\") {\r\n if (\r\n ($.trim(addressIntField.val()).length && !isDomesticAddress) ||\r\n attrIsTruthy($(addressIntField).attr(\"data-isremoved\"))\r\n ) {\r\n customerDataObj.InternationalAddress = {};\r\n customerDataObj.InternationalAddress.Street = addressIntField.val();\r\n customerDataObj.InternationalAddress.City = cityField.val();\r\n customerDataObj.InternationalAddress.State = stateField.val();\r\n customerDataObj.InternationalAddress.ZipCode = postCodeField.val();\r\n customerDataObj.InternationalAddress.CountryRegionId =\r\n countryField.val();\r\n customerDataObj.InternationalAddress.IsPostalAddress = \"true\";\r\n customerDataObj.InternationalAddress.Description =\r\n $(addressIntField).data(\"description\");\r\n customerDataObj.InternationalAddress.IsPrimary =\r\n $(addressIntField).data(\"isprimary\");\r\n customerDataObj.InternationalAddress.LocationId =\r\n $(addressIntField).data(\"addresslocationid\");\r\n customerDataObj.InternationalAddress.ToRemove =\r\n $(addressIntField).attr(\"data-isremoved\") == \"true\";\r\n }\r\n }\r\n\r\n setTimeout(function () {\r\n $(\".accountdetails-form .js-btn-update\").removeClass(\"disabled\");\r\n }, 3000);\r\n $.updateAntiForgeryTokens();\r\n customerDataObj.GoogleReCaptchaToken = token;\r\n customerDataObj.__RequestVerificationToken = $(\"#giftSection\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n jQuery\r\n .ajax({\r\n url: accountdetailcontrol.data(\"service-url\"),\r\n method: \"POST\",\r\n data: customerDataObj,\r\n success: function success(data) {\r\n if (\r\n data.Data &&\r\n data.Data.ApiError &&\r\n data.Data.ApiError.IsSuccessful\r\n ) {\r\n if (data.Data.NewGiftId) {\r\n // After Adding new recipient, Update receipient form and button will be enabled\r\n selectedDropdownContactId = data.Data.NewGiftId;\r\n $(\"#createGiftAccount\").addClass(\"disabled\");\r\n $(\"#createGiftAccount\").addClass(\"hidden\");\r\n $(\"#updateGiftAccount\").removeClass(\"disabled\");\r\n $(\"#updateGiftAccount\").removeClass(\"hidden\");\r\n\r\n const newGiftUserName =\r\n accountdetailcontrol.find(\"#firstName\").val() +\r\n \" \" +\r\n accountdetailcontrol.find(\"#lastName\").val();\r\n\r\n $(\".gift-details-form .form-select-input\").append(\r\n \"\" +\r\n accountdetailcontrol.find(\"#firstName\").val() +\r\n \" \" +\r\n accountdetailcontrol.find(\"#lastName\").val() +\r\n \"\"\r\n );\r\n // Populate the dropdown with the newly added gift recipient\r\n\r\n $(\"#giftDetailsForm\")\r\n .find(\".dropdown-select-label\")\r\n .html(newGiftUserName);\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#payment\")\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\").find(\"#payment\").trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#gift\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n $(\".loading-indicator\").remove();\r\n $(\"#createGiftAccount\").removeClass(\"disabled-loader\");\r\n $(\"#updateGiftAccount\").removeClass(\"disabled-loader\");\r\n } else {\r\n if (data && data.ApiError && data.ApiError.ResponseStatus) {\r\n if (\r\n data.ApiError.ResponseStatus.ErrorCode == \"recaptchafailed\" ||\r\n data.ApiError.ResponseStatus.ErrorCode ==\r\n \"InvalidEmailException\"\r\n ) {\r\n systemNotification.error(\r\n \"Oops\",\r\n data.ApiError.ResponseStatus.Message,\r\n \"Ok\"\r\n );\r\n } else {\r\n systemNotification.error(\r\n accountdetailcontrol.data(\"error-title\"),\r\n accountdetailcontrol.data(\"error-message\"),\r\n accountdetailcontrol.data(\"error-button\")\r\n );\r\n }\r\n }\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#createGiftAccount\").removeClass(\"disabled-loader\");\r\n $(\"#updateGiftAccount\").removeClass(\"disabled-loader\");\r\n },\r\n })\r\n .fail(function (error) {\r\n // Failure\r\n if (error && error.status === 401) {\r\n // user is unauthorised lets redirect to the login page\r\n $.redirectToLoginPageWithReturnUrl(accountdetailcontrol);\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n };\r\n //get the contact detail if the field is valid\r\n const returnPartyContact = ($formTextField, isMobile) => {\r\n if (\r\n $.trim($formTextField.val()).length <= 0 &&\r\n $.trim($($formTextField).data(\"locationid\")).length > 0 &&\r\n $($formTextField).attr(\"data-isprimary\") !== \"true\"\r\n ) {\r\n $($formTextField).attr(\"data-isremoved\", \"true\");\r\n } else {\r\n $($formTextField).attr(\"data-isremoved\", \"false\");\r\n }\r\n\r\n if (\r\n $.trim($formTextField.val()).length ||\r\n attrIsTruthy($($formTextField).attr(\"data-isremoved\"))\r\n ) {\r\n const mobilePhone = {\r\n LogisticsElectronicAddressRecId: $($formTextField).data(\"addressrecid\"),\r\n LocationId: $($formTextField).data(\"locationid\"),\r\n PartyNumber: $($formTextField).data(\"partynumber\"),\r\n Description: $($formTextField).data(\"description\"),\r\n IsPrimary: $($formTextField).data(\"isprimary\"),\r\n IsMobilePhone: isMobile,\r\n Type: $($formTextField).data(\"type\"),\r\n Locator: $formTextField.val(),\r\n ToRemove: attrIsTruthy($($formTextField).attr(\"data-isremoved\")),\r\n };\r\n\r\n return mobilePhone;\r\n } else {\r\n return null;\r\n }\r\n };\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n});\r\n","$(() => {\r\n const $newAccountForm = $(\"#newAccountForm\");\r\n const $newAccountFormExpanded = $(\"#newAccountFormExpanded\");\r\n const $continueBtn = $(\"#continueBtn\");\r\n const $continueExpandedBtn = $(\"#newAccountExpandedContinue\");\r\n const $newPassword = $(\"#NewPassword\");\r\n const $SignUpWithFaceBookBtn = $(\"#SignUpWithFaceBookBtn\");\r\n const $enterDetailsSelfBtn = $(\"#enterDetailsSelfBtn\");\r\n let firstName, lastName, email;\r\n $newAccountFormExpanded.find(\"input:not(.address-typeahead)\").on(\"blur\", function () {\r\n if ($(this).val().length === 0 || !$(this).val()) {\r\n $(this).valid();\r\n }\r\n });\r\n\r\n /* \r\n $newAccountFormExpanded.find(\"input\").on(\"keyup\", function () {\r\n $newAccountFormExpanded.validate();\r\n const enteredValue = $newAccountFormExpanded\r\n .find(\"#NewPassword\")\r\n .val()\r\n .toString();\r\n const specialChars = /[`!@#$%^&*()_\\-+=\\[\\]{};':\"\\\\|,.<>\\/?~ ]/;\r\n if (specialChars.test(enteredValue)) {\r\n if (\r\n $newAccountFormExpanded.valid() &&\r\n $.checkPasswordComplianceSpecialChars(enteredValue)\r\n ) {\r\n if (\r\n $continueExpandedBtn\r\n .closest(\"#newAccountFormExpanded\")\r\n .find(\".input-checkbox\")\r\n .hasClass(\"checked\")\r\n ) {\r\n $continueExpandedBtn.removeClass(\"disabled\");\r\n } else {\r\n $continueExpandedBtn.addClass(\"disabled\");\r\n }\r\n } else {\r\n $continueExpandedBtn.addClass(\"disabled\");\r\n }\r\n } else {\r\n if (\r\n $newAccountFormExpanded.valid() &&\r\n $.checkPasswordCompliance(enteredValue)\r\n ) {\r\n if (\r\n $continueExpandedBtn\r\n .closest(\"#newAccountFormExpanded\")\r\n .find(\".input-checkbox\")\r\n .hasClass(\"checked\")\r\n ) {\r\n $continueExpandedBtn.removeClass(\"disabled\");\r\n } else {\r\n $continueExpandedBtn.addClass(\"disabled\");\r\n }\r\n } else {\r\n $continueExpandedBtn.addClass(\"disabled\");\r\n }\r\n }\r\n }); */\r\n\r\n var PhoneNumber = document.getElementById(\"PhoneNumber\");\r\n if (typeof PhoneNumber != \"undefined\" && PhoneNumber != null) {\r\n PhoneNumber.onkeyup = function (e) {\r\n let phoneType = $(PhoneNumber).data(\"phone-type\");\r\n\r\n /* if (phoneType === \"landline\") {\r\n $.checkFormatHomePhone(this, e);\r\n } else if (phoneType === \"mobile\") {\r\n $.checkFormatMobilePhone(this, e);\r\n } */\r\n };\r\n }\r\n\r\n // For date of birth new requirement to open 3 dropdowns\r\n $(\"#dateDropdown option:first\").val(\"\");\r\n $(\"#monthDropdown option:first\").val(\"\");\r\n $(\"#yearDropdown option:first\").val(\"\");\r\n $(\"#onLoadDOB\")\r\n .find(\".control-label\")\r\n .find(\".floating-label\").on(\"click\", function () {\r\n $(\"#dateOfBirthSplit\")\r\n .find(\"select\").trigger('mousedown');\r\n });\r\n // For date of birth new requirement to open 3 dropdowns\r\n $(\"#dateOfBirthSplit\")\r\n .find(\"select\")\r\n .on(\"mousedown\", function () {\r\n const event = $(\"#onLoadDOB\");\r\n event.removeClass(\"dob-split-show\");\r\n event.addClass(\"dob-split-show-none\");\r\n event.addClass(\"floating-field--dirty\");\r\n $(\"#yearDropdown option:first\").html(\"Year\");\r\n $(\"#monthDropdown option:first\").html(\"Month\");\r\n $(\"#dateDropdown option:first\").html(\"Day\");\r\n });\r\n\r\n $(\"#DateOfBirth\").on(\"blur\", function () {\r\n if (!$(this).val()) {\r\n const error = $(this).data(\"val-required\");\r\n setErrors($(this), error);\r\n }\r\n });\r\n // Date of birth validations\r\n let error;\r\n $(\"#dateOfBirthSplit\")\r\n .find(\"select\")\r\n .on(\"change blur\", function () {\r\n if (\r\n (!$(\"#dateDropdown\").val() &&\r\n !$(\"#monthDropdown\").val() &&\r\n !$(\"#yearDropdown\").val()) ||\r\n ($(\"#dateDropdown\").val().toLowerCase() === \"date of birth\" &&\r\n !$(\"#monthDropdown\").val() &&\r\n !$(\"#yearDropdown\").val())\r\n ) {\r\n error = $(\"#onLoadDOB\").data(\"val-required\");\r\n setErrors($(this), error);\r\n } else if (\r\n !$(\"#dateDropdown\").val() &&\r\n ($(this).data(\"field\") === \"day\" ||\r\n $(this).data(\"field\") === \"year\" ||\r\n $(this).data(\"field\") === \"month\")\r\n ) {\r\n error = $(dateDropdown).data(\"day-required\");\r\n setErrors($(this), error);\r\n } else if (\r\n !$(\"#monthDropdown\").val() &&\r\n ($(this).data(\"field\") === \"month\" ||\r\n $(this).data(\"field\") === \"year\" ||\r\n $(this).data(\"field\") === \"day\") &&\r\n $(\"#dateDropdown\").val()\r\n ) {\r\n error = $(\"#monthDropdown\").data(\"month-required\");\r\n setErrors($(this), error);\r\n } else if (\r\n !$(\"#yearDropdown\").val() &&\r\n ($(this).data(\"field\") === \"year\" ||\r\n $(this).data(\"field\") === \"month\" ||\r\n $(this).data(\"field\") === \"day\") &&\r\n $(\"#monthDropdown\").val()\r\n ) {\r\n error = $(\"#yearDropdown\").data(\"year-required\");\r\n setErrors($(this), error);\r\n } else {\r\n const date = $(\"#dateOfBirthSplit\").find(\"#dateDropdown\").val();\r\n const month = $(\"#dateOfBirthSplit\").find(\"#monthDropdown\").val();\r\n const year = $(\"#dateOfBirthSplit\").find(\"#yearDropdown\").val();\r\n const dob = date + \"/\" + month + \"/\" + year;\r\n if (!$.validateDate(dob)) {\r\n error = $(\"#dateDropdown\").data(\"day-invalid\");\r\n setErrors($(this), error);\r\n } else if ($.calculateAge(dob)) {\r\n error = $(\"#dateOfBirthSplit\").data(\"val-check-age\");\r\n setErrors($(this), error);\r\n } else {\r\n resetErrors($(this));\r\n }\r\n }\r\n });\r\n function resetErrors(el) {\r\n el.closest(\"#onLoadDOB\").removeClass(\"floating-field--invalid\");\r\n el.closest(\"#dateOfBirthSplit\").removeClass(\"floating-field--invalid\");\r\n el.closest(\"#dateOfBirthSplit\").removeClass(\"input-validation-error\");\r\n el.closest(\"#onLoadDOB\")\r\n .find(\"span.floating-label-error\")\r\n .removeClass(\"field-validation-error\");\r\n el.closest(\"#onLoadDOB\").find(\"span.floating-label-error\").html(\"\");\r\n }\r\n function setErrors(el, error) {\r\n el.closest(\"#onLoadDOB\").addClass(\"floating-field--invalid\");\r\n el.closest(\"#dateOfBirthSplit\").addClass(\"floating-field--invalid\");\r\n el.closest(\"#onLoadDOB\")\r\n .find(\"span.floating-label-error\")\r\n .addClass(\"field-validation-error\");\r\n el.closest(\"#onLoadDOB\")\r\n .find(\"span.floating-label-error\")\r\n .html('' + error + \"\");\r\n }\r\n // Reset State and Country select fields\r\n if (!$(\"#AccountAddressAusState option:first\").val()) {\r\n $(\"#AccountAddressAusState option:first\").html(\"\");\r\n $(\"#AccountAddressAusState\").on(\"click\", function () {\r\n $(\"#AccountAddressAusState option:first\").html(\"State\");\r\n });\r\n }\r\n if (!$(\"#AccountAddressCountry option:first\").val()) {\r\n $(\"#AccountAddressCountry option:first\").html(\"\");\r\n $(\"#AccountAddressCountry\").on(\"click\", function () {\r\n $(\"#AccountAddressCountry option:first\").html(\"Country\");\r\n });\r\n }\r\n\r\n $(\".new-account .countryAddressCheck\").css(\"display\", \"none\");\r\n // Toggle outside Australia address link\r\n $(\".new-account #AccountAddress\").on(\"focus\", function () {\r\n $(\".countryAddressCheck\").css(\"display\", \"flex\");\r\n });\r\n const requestVerificationToken = $newAccountForm\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n // Check the password strength based on the given input in the password field\r\n $newPassword.on(\"keyup blur\", function () {\r\n const $this = $(this);\r\n // Reset on keyup\r\n $.resetPasswordStrength();\r\n\r\n // Password guidelines\r\n $.checkPasswordGuidelines($this);\r\n\r\n // Set Password Strength\r\n $.setPasswordStrength($this);\r\n });\r\n // Convert text to password\r\n $newAccountFormExpanded.find(\".new-password__icon\").on(\"click\", function () {\r\n toggleInputType(\".new-password__input\", \".new-password\");\r\n });\r\n\r\n $newAccountFormExpanded\r\n .find(\".retype-new-password__icon\")\r\n .on(\"click\", function () {\r\n toggleInputType(\".retype-new-password__input\", \".retype-new-password\");\r\n });\r\n\r\n const toggleInputType = (inputClassName, passwordClass) => {\r\n $(passwordClass).find(\".visibility-off\").toggleClass(\"hidden\");\r\n\r\n const passwordType = $(inputClassName).attr(\"type\");\r\n if (passwordType === \"text\") {\r\n $(inputClassName).attr(\"type\", \"password\");\r\n } else {\r\n $(inputClassName).attr(\"type\", \"text\");\r\n }\r\n };\r\n\r\n $newAccountForm.on(\"submit\", function (e) {\r\n e.preventDefault();\r\n const $this = $(this);\r\n const firstNameControl = $this.find(\"#AccountFirstName\");\r\n const lastNameControl = $this.find(\"#AccountLastName\");\r\n const emailControl = $this.find(\"#AccountEmailAddress\");\r\n firstName = firstNameControl.val();\r\n lastName = lastNameControl.val();\r\n email = emailControl.val();\r\n if ($(this).valid()) {\r\n $(this).find(\"#continueBtn\").addClass(\"disabled-loader\");\r\n $(this)\r\n .find(\"#continueBtn\")\r\n .append(\r\n ''\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const ajaxDataObj = {\r\n FirstName: firstNameControl.val(),\r\n LastName: lastNameControl.val(),\r\n EmailAddress: emailControl.val(),\r\n __RequestVerificationToken: requestVerificationToken,\r\n GoogleReCaptchaToken: token,\r\n };\r\n $.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: $.appendFormVerificationToken($this, ajaxDataObj),\r\n success: function (result) {\r\n if (result === \"\") {\r\n // empty string results will occur if the post fails anti-forgery check\r\n return;\r\n }\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .val(firstNameControl.val());\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .val(lastNameControl.val());\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .val(emailControl.val());\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n $(\".loading-indicator\").remove();\r\n $(\"#continueBtn\").removeClass(\"disabled-loader\");\r\n $(\"#newAccountFormExpanded\").addClass(\"hidden\");\r\n } else {\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $newAccountForm.addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\".retype-new-password\")\r\n .addClass(\"hidden\");\r\n // To show pasword fields and to enable email field\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .removeClass(\"disabled\");\r\n // If the password is filled by autofill, then trigger blur event to show the retype password field\r\n if($(\"#newAccountFormExpanded\").find(\"#NewPassword\").val()) $(\"#newAccountFormExpanded\").find(\"#NewPassword\").trigger(\"blur\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .removeClass(\"hidden\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".heading-text\")\r\n .html(\"OR\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".dash-separator\")\r\n .removeClass(\"complete-text\");\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#continueBtn\").removeClass(\"disabled-loader\");\r\n },\r\n fail: function (error) {},\r\n });\r\n }, \"CreateOrUpdateCheckoutCookieWhoStepNew\");\r\n }\r\n });\r\n\r\n $(\"#newAccountFormExpanded\").on(\"submit\", function (e) {\r\n e.preventDefault();\r\n const enteredValue = $newAccountFormExpanded\r\n .find(\"#NewPassword\")\r\n .val()\r\n .toString();\r\n // Checkbox validaiton\r\n const labelEl = $(this).find(\".terms-conditions\").find(\"label\");\r\n if (\r\n labelEl.find(\".checkbox-error\") &&\r\n labelEl.find(\".checkbox-error\").length > 0\r\n ) {\r\n labelEl.find(\".checkbox-error\").remove();\r\n }\r\n\r\n if ($(this).find(\".input-checkbox\").hasClass(\"checked\")) {\r\n labelEl.find(\".checkbox-error\").remove();\r\n $(this).find(\"#termsConditionsNewAccount\").removeClass(\"error-border\");\r\n } else {\r\n labelEl.prepend(\r\n 'Please agree to the Privacy Policy
'\r\n );\r\n $(this).find(\"#termsConditionsNewAccount\").addClass(\"error-border\");\r\n }\r\n const $this = $(this);\r\n const requestVerificationToken = $(\"#newAccountFormExpanded\")\r\n .find('input[name=\"__RequestVerificationToken\"]')\r\n .val();\r\n const date = $(\"#dateOfBirthSplit\").find(\"#dateDropdown\").val();\r\n const month = $(\"#dateOfBirthSplit\").find(\"#monthDropdown\").val();\r\n const year = $(\"#dateOfBirthSplit\").find(\"#yearDropdown\").val();\r\n const firstNameControl = $this.find(\"#FirstName\");\r\n const emailControl = $this.find(\"#EmailAddress\");\r\n const lastNameControl = $this.find(\"#LastName\");\r\n const phoneControl = $this.find(\"#PhoneNumber\");\r\n const dobControl = date + \"/\" + month + \"/\" + year;\r\n const internationalAddressControl = $this.find(\r\n \"#AccountInternationalAddress\"\r\n );\r\n const accountAddressSearchIdControl = $this.find(\"#AccountAddressSearchId\");\r\n const accountAddressControl = $this.find(\"#AccountAddress\");\r\n const accountAddressCityControl = $this.find(\"#AccountAddressCity\");\r\n const accountAddressCountryControl = $this.find(\"#AccountAddressCountry\");\r\n const accountAddressAusStateControl = $this.find(\"#AccountAddressAusState\");\r\n const accountAddressPostCodeControl = $this.find(\"#AccountAddressPostCode\");\r\n const newPasswordControl = $this.find(\"#NewPassword\");\r\n if (!date || !month || !year) {\r\n const error = $(\"#onLoadDOB\").data(\"val-required\");\r\n setErrors($(\"#dateOfBirthSplit\").find(\"select\"), error);\r\n }\r\n $(\"#onLoadDOB\").trigger(\"click\");\r\n $newAccountFormExpanded.find(\"#NewPassword\").trigger(\"click\");\r\n const dobValid = date && month && year;\r\n $.focusFirstInvalidField(e);\r\n let checkFormValid;\r\n // To check if creating account through social logins or not\r\n if (\r\n ($(\"#GoogleSignUpAccessToken\") &&\r\n $(\"#GoogleSignUpAccessToken\").val() !== \"\") ||\r\n ($(\"#FacebookSignUpAccessToken\") &&\r\n $(\"#FacebookSignUpAccessToken\").val() !== \"\") ||\r\n ($(\"#AppleSignUpAccessToken\") &&\r\n $(\"#AppleSignUpAccessToken\").val() !== \"\")\r\n ) {\r\n checkFormValid =\r\n $this.valid() &&\r\n $(this).find(\".input-checkbox\").hasClass(\"checked\") &&\r\n dobValid &&\r\n !$.calculateAge(dobControl) &&\r\n $.validateDate(dobControl);\r\n } else {\r\n checkFormValid =\r\n $this.valid() &&\r\n $(this).find(\".input-checkbox\").hasClass(\"checked\") &&\r\n dobValid &&\r\n !$.calculateAge(dobControl) &&\r\n $.validateDate(dobControl) &&\r\n ($.checkPasswordComplianceChars(enteredValue) ||\r\n $.checkPasswordComplianceSpecialChars(enteredValue));\r\n }\r\n if (checkFormValid) {\r\n $(this).find(\"#newAccountExpandedContinue\").addClass(\"disabled-loader\");\r\n $(this)\r\n .find(\"#newAccountExpandedContinue\")\r\n .append(\r\n ''\r\n );\r\n $.retrieveRecaptchaTokenIfActive(function (token) {\r\n const ajaxDataObj = {\r\n FirstName: firstNameControl.val(),\r\n LastName: lastNameControl.val(),\r\n EmailAddress: emailControl.val(),\r\n HomePhoneNumber:\r\n phoneControl.data(\"phone-type\") === \"landline\"\r\n ? phoneControl.val().replace(/\\s/g, \"\")\r\n : \"\",\r\n MobilePhoneNumber:\r\n phoneControl.data(\"phone-type\") === \"mobile\"\r\n ? phoneControl.val().replace(/\\s/g, \"\")\r\n : \"\",\r\n CBDay: date,\r\n CBMonth: month,\r\n CBYear: year,\r\n // DateOfBirth: \"'\" + date + \"/\" + month + \"/\" + year + \"'\",\r\n AccountInternationalAddress: internationalAddressControl.val(),\r\n AccountAddress: accountAddressControl.val(),\r\n AccountAddressSearchId: accountAddressSearchIdControl.val(),\r\n AccountAddressCity: accountAddressCityControl.val(),\r\n AccountAddressCountry: accountAddressCountryControl.val(),\r\n AccountAddressAusState: accountAddressAusStateControl.val(),\r\n AccountAddressPostCode: accountAddressPostCodeControl.val(),\r\n AccountLoginInfo: $this.data(\"account-login-info\"),\r\n NewPassword: newPasswordControl.val(),\r\n __RequestVerificationToken: requestVerificationToken,\r\n GoogleReCaptchaToken: token,\r\n FacebookSignUpAccessToken: $(\"#FacebookSignUpAccessToken\").val(),\r\n GoogleSignUpAccessToken: $(\"#GoogleSignUpAccessToken\").val(),\r\n AppleSignUpAccessToken: $(\"#AppleSignUpAccessToken\").val(),\r\n };\r\n $.ajax({\r\n url: $this.data(\"service-url\"),\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: $.appendFormVerificationToken($this, ajaxDataObj),\r\n success: function (result) {\r\n $.updateAntiForgeryTokens();\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n\r\n $(\".loading-indicator\").remove();\r\n $(\"#newAccountExpandedContinue\").removeClass(\"disabled-loader\");\r\n } else {\r\n \r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0\r\n ) {\r\n if (result) {\r\n $(\"#accountSection\")\r\n .find(\".account-btn-group\")\r\n .addClass(\"hidden\");\r\n\r\n $(\"#loggedInDisplay\").remove();\r\n $(\".existing-account\").append(result);\r\n $(\"#loggedInDisplay\").removeClass(\"hidden\");\r\n\r\n //Hide normal login form\r\n $(\".existing-account-login\").addClass(\"hidden\");\r\n // Ensure parent container visible\r\n $(\"#accountSection\")\r\n .find(\".existing-account\")\r\n .removeClass(\"hidden\");\r\n\r\n // rebind logout button\r\n $.logout();\r\n }\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n var nextStep =\r\n $(\"#gift\") &&\r\n $(\"#gift\").length > 0 &&\r\n !$(\"#gift\").hasClass(\"hidden\")\r\n ? \"#gift\"\r\n : \"#payment\";\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(nextStep)\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $.checkoutScrollToTop();\r\n $(\".checkout-navigation-menu\").find(nextStep).trigger(\"click\");\r\n\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#account\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n\r\n // To reload Header\r\n $.reloadHeader();\r\n // get analytics data\r\n $.get(\r\n \"/rslsitecoreapi/accountanalytics/accountinfo\",\r\n function (result) {\r\n if (result && result.Data && result.Data.user) {\r\n $(\"body\").data(\"ga-user-config\", result.Data.user);\r\n }\r\n\r\n $.trackUserDetailsEvent(false, \"accountCreated\");\r\n }\r\n );\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\"#newAccountExpandedContinue\").removeClass(\"disabled-loader\");\r\n },\r\n fail: function (error) {\r\n const ButtonText = $newAccountForm.data(\"error-button\");\r\n const Message = $newAccountForm.data(\"fail-message\");\r\n const TitleText = $newAccountForm.data(\"error-title\");\r\n systemNotification.error(TitleText, Message, ButtonText);\r\n },\r\n });\r\n }, \"CreateNewCustomerDetailsForm\");\r\n }\r\n\r\n $(\"#onLoadDOB\").trigger(\"click\");\r\n if (!date || !month || !year) {\r\n const error = $(\"#onLoadDOB\").data(\"val-required\");\r\n setErrors($(\"#dateOfBirthSplit\").find(\"select\"), error);\r\n $(\"#onLoadDOB\").addClass(\"floating-field--invalid\");\r\n } else if (!$.validateDate(dobControl)) {\r\n $(\"#onLoadDOB\").addClass(\"floating-field--invalid\");\r\n const error = $(\"#dateDropdown\").data(\"day-invalid\");\r\n setErrors($(\"#dateOfBirthSplit\").find(\"select\"), error);\r\n } else if ($.calculateAge(dobControl)) {\r\n $(\"#onLoadDOB\").addClass(\"floating-field--invalid\");\r\n const error = $(\"#dateOfBirthSplit\").data(\"val-check-age\");\r\n setErrors($(\"#dateOfBirthSplit\").find(\"select\"), error);\r\n } else {\r\n resetErrors($(\"#dateOfBirthSplit\").find(\"select\"));\r\n }\r\n\r\n if (\r\n !$.checkPasswordComplianceChars(enteredValue) ||\r\n !$.checkPasswordComplianceSpecialChars(enteredValue)\r\n ) {\r\n $.checkPasswordGuidelines($newAccountFormExpanded.find(\"#NewPassword\"));\r\n }\r\n });\r\n\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n\r\n if (response.Message) {\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n } else {\r\n systemNotification.error(\r\n $(\".new-account-form\").data(\"error-title\"),\r\n $(\".new-account-form\").data(\"fail-message\"),\r\n $(\".new-account-form\").data(\"error-button\")\r\n );\r\n }\r\n }\r\n\r\n // On click of 'enter details my self' button should hide fb form and should show create account form\r\n $enterDetailsSelfBtn.on(\"click\", function () {\r\n //clear the facebook token if entering manually\r\n $(\"#FacebookSignUpAccessToken\").val(\"\");\r\n $(\"#GoogleSignUpAccessToken\").val(\"\");\r\n $(\"#AppleSignUpAccessToken\").val(\"\");\r\n $('.resume-apple-create-account-text').addClass('hidden');\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $.checkoutScrollToTop();\r\n $(\"#newAccountFormExpanded\").find(\"#FirstName\").focus();\r\n $newAccountForm.addClass(\"hidden\");\r\n // To show pasword fields and to enable email field\r\n $(\"#newAccountFormExpanded\").find(\"#EmailAddress\").removeClass(\"disabled\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".heading-text\")\r\n .html(\"OR\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".dash-separator\")\r\n .removeClass(\"complete-text\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .removeClass(\"hidden\");\r\n if($(\"#newAccountFormExpanded\").find(\".new-password\") && $(\"#newAccountFormExpanded\").find(\".new-password\").length > 0) {\r\n if (!$(\"#newAccountFormExpanded\").find(\r\n \".new-password\").hasClass('hidden') && $(\"#newAccountFormExpanded\").find(\r\n \".new-password\").find('#NewPassword').val().toString()) {\r\n $(\"#newAccountFormExpanded\").find(\".retype-new-password\").removeClass(\"hidden\");\r\n }\r\n }\r\n });\r\n\r\n $(\"#logout\").hide();\r\n $.ajaxSetup({ cache: true });\r\n // initialse the facebook scripts if the checkout page login or sign up button is present\r\n if ($(\"#SignUpWithFaceBookBtn\") && $(\"#SignUpWithFaceBookBtn\").length) {\r\n let fbAppId = $(\"#SignUpWithFaceBookBtn\").data(\"fb-app-id\");\r\n\r\n $.getScript(\"https://connect.facebook.net/en_US/sdk.js\", () => {\r\n FB.init({\r\n appId: fbAppId,\r\n version: \"v2.7\", // or v2.1, v2.2, v2.3, ...\r\n });\r\n\r\n if ($(\"#FacebookSignUpAccessToken\") && $(\"#FacebookSignUpAccessToken\").val() != ''){\r\n FB.api(\r\n \"/me?access_token=\" + $(\"#FacebookSignUpAccessToken\").val(),\r\n { locale: \"en_US\", fields: \"first_name,last_name,email\" },\r\n (result) => {\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n // populate the who step and details step fields with FB data we got from the response\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n \r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded #FirstName\").val(\r\n result.first_name\r\n );\r\n $(\"#newAccountFormExpanded #LastName\").val(\r\n result.last_name\r\n );\r\n $(\"#newAccountFormExpanded #EmailAddress\").val(\r\n result.email\r\n );\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\r\n \"#newAccountFormExpanded #FacebookSignUpAccessToken\"\r\n ).attr(\"data-email\", result.email); \r\n // To disable email field\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .addClass(\"disabled\");\r\n // if there is a value in any inputs in the details or new member form (which there is now we've set some), then remove the empty class so the label text sits higher\r\n $(\"#newAccountFormExpanded input\")\r\n .filter(function () {\r\n return this.value;\r\n })\r\n .parent(\".js-form-textfield\")\r\n .removeClass(\"empty\");\r\n }\r\n ); \r\n \r\n } \r\n });\r\n\r\n \r\n }\r\n\r\n // change button classes\r\n $(document).on(\"click\", \"fb-btn-group .btn.btn.btn-payment\", function (e) {\r\n const clickedButton = $(this);\r\n clickedButton.addClass(\"active\").siblings().removeClass(\"active\");\r\n });\r\n $(document).on(\"click\", \"fb-btn-group .btn.social-btn\", function (e) {\r\n const clickedButton = $(this);\r\n clickedButton.addClass(\"active\").siblings().removeClass(\"active\");\r\n });\r\n\r\n // facebook sign up for new user. We pop the FB window (if not already logged in) and push the FB token into the checkout cookie to be used to create the native account when processing order.\r\n $(\"#SignUpWithFaceBookBtn\")\r\n .off(\"click\")\r\n .on(\"click\", function () {\r\n // show the logging in overlay\r\n const that = $(this);\r\n that.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n // To hide pasword fields and to disable email field\r\n $(\"#newAccountFormExpanded\").find(\"#EmailAddress\").addClass(\"disabled\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".dash-separator\")\r\n .addClass(\"complete-text\");\r\n $(\".new-account\")\r\n .find(\".heading-with-border-container.or-text\")\r\n .find(\".heading-text\")\r\n .html(\"COMPLETE YOUR DETAILS\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\r\n \".new-password, .retype-new-password, .strength-bars, .strength-text, .password-guidelines, .password-description\"\r\n )\r\n .addClass(\"hidden\");\r\n\r\n FB.login(\r\n function (res) {\r\n if (res.status === \"connected\" && res.authResponse) {\r\n $.ajax({\r\n url: \"/rslsitecoreapi/sociallogin/loginwithfacebook\",\r\n data: {\r\n fbresponse: res.authResponse.accessToken,\r\n accountlogininfoid: $(\"#SignUpWithFaceBookBtn\").data(\r\n \"account-login-info\"\r\n ),\r\n },\r\n method: \"POST\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n $(\".field-validation-error\").remove();\r\n if (result && result.Error && result.Error.ResponseStatus) {\r\n const respObj = result.Error.ResponseStatus;\r\n if (respObj.ErrorCode === \"success\") {\r\n if (\r\n that.closest(\"#accountSection\") &&\r\n that.closest(\"#accountSection\").length > 0\r\n ) {\r\n $.navigateToNextStep(result);\r\n } else {\r\n $.redirectToReturnUrlPage();\r\n }\r\n } else {\r\n // put the FB access Token where we can ensure it gets posted to checkout cookie as well as use for setting form state correctly\r\n $(\"#newAccountFormExpanded #FacebookSignUpAccessToken\").val(\r\n res.authResponse.accessToken\r\n );\r\n FB.api(\r\n \"/me?access_token=\" + res.authResponse.accessToken,\r\n { locale: \"en_US\", fields: \"first_name,last_name,email\" },\r\n (result) => {\r\n // populate the who step and details step fields with FB data we got from the response\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#FirstName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#LastName\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#EmailAddress\")\r\n .closest(\".form-group\")\r\n .addClass(\"floating-field--dirty\");\r\n $(\"#newAccountFormExpanded #FirstName\").val(\r\n result.first_name\r\n );\r\n $(\"#newAccountFormExpanded #LastName\").val(\r\n result.last_name\r\n );\r\n $(\"#newAccountFormExpanded #EmailAddress\").val(\r\n result.email\r\n );\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"hidden\");\r\n $(\"#newAccountFormExpanded\").removeClass(\"hidden\");\r\n $(\"#newAccountForm\").addClass(\"hidden\");\r\n $(\r\n \"#newAccountFormExpanded #FacebookSignUpAccessToken\"\r\n ).attr(\"data-email\", result.email);\r\n // if there is a value in any inputs in the details or new member form (which there is now we've set some), then remove the empty class so the label text sits higher\r\n $(\"#newAccountFormExpanded input\")\r\n .filter(function () {\r\n return this.value;\r\n })\r\n .parent(\".js-form-textfield\")\r\n .removeClass(\"empty\");\r\n }\r\n );\r\n that.addClass(\"active\").siblings().removeClass(\"active\");\r\n $(\"#enterDetailsSelfBtn\").removeClass(\"active\");\r\n }\r\n }\r\n $(\"#js-checkout-submit-Login\").removeClass(\"active\");\r\n },\r\n error: function error() {\r\n console.log(\"FB login AJAX error\");\r\n },\r\n });\r\n } else {\r\n $(\"#js-checkout-submit-Signup\").removeClass(\"active\");\r\n }\r\n },\r\n { scope: \"email,user_birthday\" }\r\n );\r\n });\r\n});\r\n","import attrIsTruthy from \"../../../../Common/js/util/attributeHelper\";\r\n\r\n$(() => {\r\n const dl = window.dataLayer || [];\r\n const $bodyEl = $(\"body\");\r\n const ANALYTICS = {\r\n pushToDataLayer(obj) {\r\n this.logEventObject(obj);\r\n dl.push(obj);\r\n },\r\n logEventObject(obj) {\r\n if (!window.isNonProd) return;\r\n\r\n console.log(\r\n \"----------------------------- \\n\" + \"DataLayer Event Triggered: \\n\"\r\n );\r\n console.log(obj);\r\n console.log(\"----------------------------- \\n\");\r\n },\r\n queryToObjFormat(queryStr, isObjFormat) {\r\n const resultArr = [];\r\n const queryArr = queryStr.split(\";\");\r\n const queryArrLength = queryArr.length;\r\n for (let i = 0; i < queryArrLength; i++) {\r\n const pipeArr = queryArr[i].split(\"&\");\r\n const resultObj = {};\r\n for (let j = 0, len = pipeArr.length; j < len; j++) {\r\n const propValArr = pipeArr[j].split(\"=\");\r\n if (\r\n propValArr != null &&\r\n propValArr[0] != null &&\r\n propValArr[1] != null\r\n ) {\r\n resultObj[propValArr[0]] = propValArr[1] || \"\";\r\n }\r\n }\r\n resultArr.push(resultObj);\r\n }\r\n return queryArrLength === 1 && isObjFormat ? resultArr[0] : resultArr;\r\n },\r\n trackDataLayerPageEvent: function trackDataLayerPageEvent() {\r\n // if we're going to fire the ecommerce page event, you need to have a hidden field with the ID: #eCommercePageEvent which has all the data pushed into it\r\n // this is used primarily on the confirmation page. This is where we pull the data and prepare it for the Google Tag Manager Data Layer\r\n const eCommercePageEvent = $(\"#eCommercePageEvent\");\r\n let eCommDataItems = {};\r\n let dataItems = {};\r\n let ecommerceObj = {};\r\n const userInfoObj =\r\n ANALYTICS.queryToObjFormat($bodyEl.data(\"ga-user-config\"), true) || {};\r\n let subscriptionConfig;\r\n // To push the 'subscription' event to data layer which occurs on all pages for VIP member\r\n if (\r\n $bodyEl.data(\"ga-user-subscriptions-config\") &&\r\n $bodyEl.data(\"ga-user-subscriptions-config\") !== \"\"\r\n ) {\r\n subscriptionConfig = $bodyEl.data(\"ga-user-subscriptions-config\");\r\n }\r\n\r\n // To push 'Pageview' event to data layer, which is common for all pages (which has data attribute of 'ga-page-config')\r\n const pageInfoObj =\r\n ANALYTICS.queryToObjFormat($bodyEl.data(\"ga-page-config\"), true) || {};\r\n dataItems = { event: pageInfoObj.eventName };\r\n delete pageInfoObj.eventName;\r\n if (!pageInfoObj.pageCategory) {\r\n pageInfoObj.pageCategory = $bodyEl.data(\"ga-page-name\") || \"\";\r\n }\r\n const pageName = $(\".js-page-name\");\r\n if (pageName && pageName.length > 0) {\r\n pageInfoObj.pageCategory = pageName.data(\"ga-name\");\r\n }\r\n dataItems.page = pageInfoObj;\r\n dataItems.user = userInfoObj;\r\n if (dataItems.user.totalOrders >= 1) {\r\n dataItems.user.newExisting = \"Existing\";\r\n } else {\r\n dataItems.user.newExisting = \"New\";\r\n }\r\n dataItems.subscriptions = subscriptionConfig;\r\n this.pushToDataLayer(dataItems);\r\n\r\n //fireEcommerce for NVIP Checkout Pages\r\n if ($bodyEl.data(\"ga-page-name\").toLowerCase() === \"checkout\") {\r\n const checkoutEcommerceProducts = [];\r\n const checkoutTicketEl = $bodyEl.find(\r\n \".checkout-ticket-summary-container .ticket-item-content .ticket-details\"\r\n );\r\n if (checkoutTicketEl.length > 0) {\r\n checkoutTicketEl.each(function (index, element) {\r\n if ($(this).data(\"ga-ecommerce-product-info\")) {\r\n checkoutEcommerceProducts.push(\r\n ANALYTICS.queryToObjFormat(\r\n $(this).data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {}\r\n );\r\n }\r\n });\r\n }\r\n this.pushToDataLayer({\r\n event: \"fireEcommerce\",\r\n ecommerce: checkoutEcommerceProducts,\r\n });\r\n }\r\n\r\n //fireEcommerce for VIP Checkout Pages\r\n const subscriptionEcommerceProducts = [];\r\n const $vipMembershipSummary = $(\"#VIPMembershipSummary\");\r\n if (\r\n $vipMembershipSummary.length > 0 &&\r\n $vipMembershipSummary.data(\"ga-ecommerce-product-info\")\r\n ) {\r\n subscriptionEcommerceProducts.push(\r\n ANALYTICS.queryToObjFormat(\r\n $vipMembershipSummary.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {}\r\n );\r\n let vipDrawNumber;\r\n if ($(\"#VIPMembershipSummary\").length > 0) {\r\n vipDrawNumber = $(\"#VIPMembershipSummary\").data('artunionid');\r\n }\r\n subscriptionEcommerceProducts[0].commencedDraw = vipDrawNumber;\r\n subscriptionEcommerceProducts[0].price = subscriptionEcommerceProducts[0].price.padStart(3, \"0\");\r\n subscriptionEcommerceProducts[0].variant = vipDrawNumber + subscriptionEcommerceProducts[0].variant.slice(6, -3) + subscriptionEcommerceProducts[0].price;\r\n this.pushToDataLayer({\r\n event: \"fireEcommerce\",\r\n ecommerce: subscriptionEcommerceProducts,\r\n });\r\n }\r\n\r\n if (eCommercePageEvent.length) {\r\n const eCommPageInfoObj =\r\n ANALYTICS.queryToObjFormat(\r\n eCommercePageEvent.data(\"ga-page-config\"),\r\n true\r\n ) || {};\r\n const confirmationActionInfo =\r\n ANALYTICS.queryToObjFormat(\r\n eCommercePageEvent.data(\"ga-ecommerce-action-info\"),\r\n true\r\n ) || {};\r\n const confirmationEcommerceProducts = [];\r\n const dlEcommerceObj = {};\r\n let paymentMethod;\r\n\r\n if (eCommPageInfoObj.action.toLowerCase() === \"purchase\") {\r\n //Get the products\r\n const confirmationTicketEl = $bodyEl.find(\r\n \".ticket-item-content .ticket-details\"\r\n );\r\n if (confirmationTicketEl.length > 0) {\r\n confirmationTicketEl.each(function () {\r\n if ($(this).data(\"ga-ecommerce-product-info\")) {\r\n confirmationEcommerceProducts.push(\r\n ANALYTICS.queryToObjFormat(\r\n $(this).data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {}\r\n );\r\n }\r\n });\r\n }\r\n dlEcommerceObj.products = confirmationEcommerceProducts;\r\n\r\n //Get the action info needed\r\n dlEcommerceObj[\"orderId\"] = confirmationActionInfo.id || \"\";\r\n dlEcommerceObj.tax = confirmationActionInfo.tax || \"\";\r\n dlEcommerceObj.revenue = confirmationActionInfo.revenue || \"\";\r\n paymentMethod = confirmationActionInfo.paymentMethodType || \"\";\r\n\r\n this.pushToDataLayer({\r\n event: \"fireConfirmation\",\r\n ecommerce: dlEcommerceObj,\r\n paymentMethod: paymentMethod,\r\n });\r\n } else if (eCommPageInfoObj.action.toLowerCase() === \"subscribe\") {\r\n //Get the product\r\n confirmationEcommerceProducts.push(\r\n ANALYTICS.queryToObjFormat(\r\n eCommercePageEvent.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {}\r\n );\r\n let vipDrawNumber;\r\n if ($(\".vip-subscription-confirmation\").length > 0) {\r\n vipDrawNumber = $(\".vip-subscription-confirmation\").data('artunionid');\r\n }\r\n confirmationEcommerceProducts[0].commencedDraw = vipDrawNumber;\r\n confirmationEcommerceProducts[0].price = confirmationEcommerceProducts[0].price.padStart(3, \"0\");\r\n confirmationEcommerceProducts[0].variant = vipDrawNumber + confirmationEcommerceProducts[0].variant .slice(6, -3) + confirmationEcommerceProducts[0].price;\r\n dlEcommerceObj.products = confirmationEcommerceProducts;\r\n\r\n //Get the action info needed\r\n dlEcommerceObj[\"subscriptionId\"] = confirmationActionInfo.id || \"\";\r\n dlEcommerceObj.tax = confirmationActionInfo.tax || \"\";\r\n dlEcommerceObj.revenue = confirmationActionInfo.revenue || \"\";\r\n paymentMethod = confirmationActionInfo.paymentMethodType || \"\";\r\n\r\n this.pushToDataLayer({\r\n event: \"fireConfirmation\",\r\n ecommerce: dlEcommerceObj,\r\n paymentMethod: paymentMethod,\r\n });\r\n }\r\n }\r\n },\r\n trackPageEventByName() {\r\n let dataItems = {};\r\n const userInfoObj =\r\n ANALYTICS.queryToObjFormat($bodyEl.data(\"ga-user-config\"), true) || {};\r\n const pageInfoObj =\r\n ANALYTICS.queryToObjFormat($bodyEl.data(\"ga-page-config\"), true) || {};\r\n dataItems = { event: pageInfoObj.eventName };\r\n delete pageInfoObj.eventName;\r\n pageInfoObj.pageCategory = $bodyEl.data(\"ga-page-name\") || \"\";\r\n dataItems.page = pageInfoObj;\r\n dataItems.user = userInfoObj;\r\n this.pushToDataLayer(dataItems);\r\n },\r\n trackDataLayerBtnEvent($triggerBtnEl) {\r\n // for each individual button click event within the purchase form we fire this event and populate the Data Layer with the latest information based on user interactions\r\n const configObj = ANALYTICS.queryToObjFormat(\r\n $triggerBtnEl.data(\"ga-config\"),\r\n true\r\n );\r\n const dataItems = { event: configObj.eventName };\r\n const dlEcommerceObj = {};\r\n let ecommerceObj = {};\r\n delete configObj.eventName;\r\n switch (dataItems.event) {\r\n case \"trackValidForm\":\r\n if ($triggerBtnEl.closest(\"form\").valid()) {\r\n if (!configObj.buttonGroup) {\r\n configObj.buttonGroup = $bodyEl.data(\"ga-page-name\") || \"\";\r\n }\r\n dataItems.eventContext = configObj;\r\n this.pushToDataLayer(dataItems);\r\n }\r\n break;\r\n case \"trackEcommerce\":\r\n dlEcommerceObj.action = configObj.buttonCallToAction || \"checkout\";\r\n dlEcommerceObj.products =\r\n ANALYTICS.queryToObjFormat(\r\n $triggerBtnEl.data(\"ga-ecommerce-product-info\"),\r\n false\r\n ) || [];\r\n dlEcommerceObj.actionInfo =\r\n ANALYTICS.queryToObjFormat(\r\n $triggerBtnEl.data(\"ga-ecommerce-action-info\"),\r\n false\r\n ) || {};\r\n dataItems.ecommerce = dlEcommerceObj;\r\n ecommerceObj =\r\n ANALYTICS.populateCheckoutEcommerceDataObject(dlEcommerceObj);\r\n this.pushToDataLayer({\r\n event: \"fireEcommerce\",\r\n ecommerce: ecommerceObj,\r\n });\r\n break;\r\n case \"trackButtonClick\":\r\n if (!configObj.buttonGroup) {\r\n configObj.buttonGroup = $bodyEl.data(\"ga-page-name\") || \"\";\r\n }\r\n dataItems.eventContext = configObj;\r\n if ($triggerBtnEl.get(0).hasAttribute(\"data-ga-product-price\")) {\r\n dataItems.eventContext.buttonCallToAction =\r\n $triggerBtnEl.data(\"ga-product-price\");\r\n }\r\n\r\n // Attach currently-selected product details\r\n // Become a VIP member\r\n if ($triggerBtnEl[0].id == \"becomeMemberBtn\") {\r\n const vipSubscription = $triggerBtnEl.closest(\r\n \".change-subscription-wrapper\"\r\n );\r\n if ($(vipSubscription).length > 0) {\r\n const selectedSubscription = $(vipSubscription).find(\r\n \".ticket-selector .slick-current a\"\r\n );\r\n if (\r\n $(selectedSubscription).length > 0 &&\r\n selectedSubscription.data(\"subscription-id\")\r\n ) {\r\n dataItems.eventContext.subscriptionId =\r\n selectedSubscription.data(\"subscription-id\");\r\n }\r\n // ga selected product info\r\n if (selectedSubscription.data(\"ga-ecommerce-product-info\")) {\r\n const userInfoObj =\r\n ANALYTICS.queryToObjFormat(\r\n selectedSubscription.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n if (userInfoObj[\"data-ga-ecommerce-action-info\"] !== \"\")\r\n dataItems.eventContext.selectedProduct = userInfoObj;\r\n }\r\n }\r\n }\r\n // Sticky Buy (Non VIP), Add to cart\r\n if ($triggerBtnEl[0].id == \"addToCartBtn\") {\r\n const ticketSelector = $triggerBtnEl.closest(\r\n \".ticket-selector-wrapper\"\r\n );\r\n if ($(ticketSelector).length > 0) {\r\n const selectedProduct = $(ticketSelector).find(\r\n \".ticket-selector .slick-current a\"\r\n );\r\n if (\r\n $(selectedProduct).length > 0 &&\r\n selectedProduct.data(\"product-id\")\r\n ) {\r\n dataItems.eventContext.productId = selectedProduct\r\n .data(\"product-id\")\r\n .toString();\r\n }\r\n // ga selected product info\r\n if (selectedProduct.data(\"ga-ecommerce-product-info\")) {\r\n const userInfoObj =\r\n ANALYTICS.queryToObjFormat(\r\n selectedProduct.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n if (userInfoObj !== \"\" && userInfoObj)\r\n dataItems.eventContext.selectedProduct = userInfoObj;\r\n }\r\n }\r\n }\r\n\r\n this.pushToDataLayer(dataItems);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n },\r\n populateSelectedProducts() {\r\n // Filter out the selected ticketes without including bundler ticket selected for\r\n const $selectedProducts = $(\"a.ticket.selected\").filter(function () {\r\n return !$(this).parents(\"div\").hasClass(\"ticket-bundler-selector\");\r\n });\r\n\r\n const productList = [];\r\n if ($selectedProducts && $selectedProducts.length > 0) {\r\n $selectedProducts.each(function () {\r\n const selectedProduct = $(this);\r\n // determine if the product is a regular ticket product or VIP product\r\n const subscriptionId = $(selectedProduct).data(\"subscription-id\");\r\n if (\r\n selectedProduct.closest(\"section\").data(\"manage-subscription\") ===\r\n true\r\n ) {\r\n // can't gift a vip sub and vip will always be true for subs\r\n const newPrice = $(selectedProduct).data(\"ticket-id\");\r\n const oldPlan = $(selectedProduct)\r\n .parents(\".ticket-selector-slider\")\r\n .data(\"selected-slide\");\r\n const oldPrice = $(\"a.ticket\")\r\n .filter(`[data-subscription-id~='${oldPlan}']`)\r\n .data(\"ticket-id\");\r\n const newPlan = $(selectedProduct).data(\"subscription-id\");\r\n const planName = $(selectedProduct).data(\"subscription-id\");\r\n const ecommProduct = {\r\n name: planName,\r\n newPlan: newPlan,\r\n newPrice: newPrice,\r\n oldPlan: oldPlan,\r\n oldPrice: oldPrice,\r\n variance: newPrice - oldPrice,\r\n quantity: \"1\",\r\n isGift: \"False\",\r\n vipClub: \"True\",\r\n };\r\n productList.push(ecommProduct);\r\n } else if (subscriptionId) {\r\n // can't gift a vip sub and vip will always be true for subs\r\n const ecommProduct = {\r\n name: $(selectedProduct).data(\"subscription-id\"),\r\n id: $(selectedProduct).data(\"subscription-id\"),\r\n price: $(selectedProduct).data(\"ticket-id\"),\r\n quantity: \"1\",\r\n isGift: \"False\",\r\n vipClub: \"True\",\r\n };\r\n productList.push(ecommProduct);\r\n } else {\r\n // orders are either entirely gifted or not, so check for gift flag on any of them and set the flag in ecomm object\r\n let orderIsGift = \"False\";\r\n // in checkout.js we have logic to set this to checked if they select gift in step 3 as well so we can check just this input to know if user is gifting in the funnel itself.\r\n // We get this properly on confirmation from the page load purchase api respone\r\n const orderSummaryGiftCheckbox = $(\r\n 'input[name=\"checkout-is-gift\"]'\r\n );\r\n if (\r\n orderSummaryGiftCheckbox &&\r\n orderSummaryGiftCheckbox.is(\":checked\")\r\n ) {\r\n orderIsGift = \"True\";\r\n }\r\n const ecommProduct = {\r\n name: $(selectedProduct)\r\n .parents(\".ticket-selector\")\r\n .data(\"draw-title\"),\r\n id: $(selectedProduct)\r\n .parents(\".ticket-selector\")\r\n .attr(\"id\")\r\n .split(\"-\")[1],\r\n variant: $(selectedProduct).data(\"ticket-name\"),\r\n price: $(selectedProduct).data(\"ticket-value\"),\r\n quantity: $(selectedProduct).data(\"qty\"),\r\n isGift: orderIsGift,\r\n vipClub: \"False\",\r\n };\r\n productList.push(ecommProduct);\r\n }\r\n });\r\n }\r\n return productList;\r\n },\r\n populateCheckoutEcommerceDataObject(dlEcommerceObj) {\r\n // see doco for 'checkout' and 'add' or 'remove' ecommerce data layer formatting here: https://developers.google.com/tag-manager/enhanced-ecommerce\r\n const ecommerceObj = {};\r\n const actionType = dlEcommerceObj.action;\r\n ecommerceObj[actionType] = {};\r\n // populate the products from the DOM itself for 'checkout' steps as we don't reload the renderings to get this directly from the data set on the Views on page load that is otherwise not up to date\r\n ecommerceObj[actionType].products = ANALYTICS.populateSelectedProducts(\r\n dlEcommerceObj.products\r\n );\r\n if (actionType.toLowerCase() === \"checkout\") {\r\n ecommerceObj[actionType].actionField = dlEcommerceObj.actionFields;\r\n if (!ecommerceObj[actionType].actionField) {\r\n ecommerceObj[actionType].actionField = {};\r\n }\r\n ecommerceObj[actionType].actionField.step = parseInt(\r\n dlEcommerceObj.actionInfo[0].step,\r\n 10\r\n );\r\n }\r\n return ecommerceObj;\r\n },\r\n populateConfirmationEcommerceDataObject(dlEcommerceObj) {\r\n // see doco for 'purchase' ecommerce data layer formatting here: https://developers.google.com/tag-manager/enhanced-ecommerce\r\n const ecommerceObj = {};\r\n const actionType = dlEcommerceObj.action;\r\n ecommerceObj[actionType] = {};\r\n // populate the products from the hidden field on the view for confirmation as we've just reloaded the page and populated the product details from the order API repsonse\r\n ecommerceObj[actionType].products = dlEcommerceObj.products;\r\n ecommerceObj[actionType].actionField = dlEcommerceObj.actionFields;\r\n if (!ecommerceObj[actionType].actionField) {\r\n ecommerceObj[actionType].actionField = {};\r\n }\r\n return ecommerceObj;\r\n },\r\n init() {\r\n ANALYTICS.trackDataLayerPageEvent();\r\n $(document)\r\n .find(\"[data-btn-ga-enabled]\")\r\n .on(\"click\", (evt) => {\r\n const $btnEl = $(evt.currentTarget);\r\n if (\r\n $btnEl.length &&\r\n attrIsTruthy($btnEl.data(\"btn-ga-enabled\")) &&\r\n $btnEl.data(\"ga-config\")\r\n ) {\r\n ANALYTICS.trackDataLayerBtnEvent($btnEl);\r\n }\r\n });\r\n },\r\n };\r\n\r\n if (\r\n attrIsTruthy($bodyEl.data(\"ga-normal-editor\")) &&\r\n attrIsTruthy($bodyEl.data(\"ga-page-enabled\"))\r\n ) {\r\n ANALYTICS.init();\r\n }\r\n\r\n $.trackUserDetailsEvent = (includeSubscriptions, eventName) => {\r\n let dataItems = {};\r\n const userInfoObj =\r\n ANALYTICS.queryToObjFormat($bodyEl.data(\"ga-user-config\"), true) || {};\r\n dataItems.user = userInfoObj;\r\n dataItems.event = eventName || \"accountLogin\";\r\n if (includeSubscriptions) {\r\n let subscriptionConfig = $bodyEl.data(\"ga-user-subscriptions-config\");\r\n dataItems.subscriptions = subscriptionConfig;\r\n }\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n $.trackPageChange = () => {\r\n ANALYTICS.trackPageEventByName();\r\n };\r\n\r\n $.trackCheckboxEvent = (currentCheckbox, status) => {\r\n const configObj =\r\n ANALYTICS.queryToObjFormat(currentCheckbox.data(\"ga-config\"), true) || {};\r\n const dataItems = { event: configObj.eventName };\r\n dataItems.eventContext = configObj;\r\n dataItems.eventContext.action =\r\n dataItems.eventContext.action + \"-\" + status;\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n $.trackViewCart = (cartProducts, isVIPCart = false) => {\r\n const dataItems = {\r\n event: isVIPCart ? \"viewVIPCart\" : \"viewCart\",\r\n ecommerce: [],\r\n };\r\n let vipDraw;\r\n if (cartProducts.length > 0) {\r\n cartProducts.each(function () {\r\n if (\r\n $(this).length &&\r\n attrIsTruthy($(this).data(\"btn-ga-enabled\")) &&\r\n $(this).data(\"ga-config\")\r\n ) {\r\n const viewCart = \r\n ANALYTICS.queryToObjFormat(\r\n $(this).data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n $(\"#VIPMembershipCart\").find(\".single-draw-selector\").each(function (i, el) {\r\n if ($(this).hasClass('selected-draw')) {\r\n vipDraw = $(this).data('artunionid');\r\n }\r\n });\r\n }\r\n viewCart.commencedDraw = vipDraw;\r\n viewCart.price = viewCart.price.padStart(3, \"0\");\r\n viewCart.variant = viewCart.commencedDraw + viewCart.variant.slice(6, -3) + viewCart.price;\r\n dataItems.ecommerce.push(viewCart);\r\n }\r\n });\r\n }\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n \r\n $.trackUpdateVIPCart = (cartProducts) => {\r\n const dataItems = {\r\n event: \"updateVIPCart\",\r\n ecommerce: [],\r\n };\r\n let vipDraw;\r\n if (cartProducts.length > 0) {\r\n cartProducts.each(function () {\r\n if (\r\n $(this).length &&\r\n attrIsTruthy($(this).data(\"btn-ga-enabled\")) &&\r\n $(this).data(\"ga-config\")\r\n ) {\r\n dataItems.ecommerce.push(\r\n ANALYTICS.queryToObjFormat(\r\n $(this).data(\"ga-update-cart-ecommerce-product-info\"),\r\n true\r\n ) || {}\r\n );\r\n if ($(\"#VIPMembershipCart\") && $(\"#VIPMembershipCart\").length > 0) {\r\n $(\"#VIPMembershipCart\").find(\".single-draw-selector\").each(function (i, el) {\r\n if ($(this).hasClass('selected-draw')) {\r\n vipDraw = $(this).data('artunionid');\r\n }\r\n });\r\n }\r\n dataItems.ecommerce[0].commencedDraw = vipDraw;\r\n dataItems.ecommerce[0].price = dataItems.ecommerce[0].price.padStart(3, \"0\");\r\n dataItems.ecommerce[0].variant = vipDraw + dataItems.ecommerce[0].variant.slice(6, -3) + dataItems.ecommerce[0].price;\r\n }\r\n });\r\n }\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n $.trackCartTicketSelector = (\r\n ticketEl,\r\n existingTickets,\r\n existingTicketValues\r\n ) => {\r\n let prevTicket;\r\n const ticketSelector = ticketEl.closest(\".ticket-selector-wrapper\");\r\n if ($(ticketSelector).length > 0) {\r\n const configObj =\r\n ANALYTICS.queryToObjFormat(\r\n ticketEl.find(\"a\").data(\"ga-config\"),\r\n true\r\n ) || {};\r\n const dataItems = { event: configObj.eventName };\r\n dataItems.eventContext = configObj;\r\n for (let i = 0; i < existingTickets.length; i++) {\r\n if (\r\n existingTickets[i] ===\r\n ticketEl.closest(\".cart-section\").data(\"product-variant-id\")\r\n ) {\r\n for (let j = 0; j < existingTicketValues.length; j++) {\r\n prevTicket = existingTicketValues[i];\r\n }\r\n }\r\n }\r\n dataItems.eventContext.buttonCallToAction = \"$\" + prevTicket;\r\n dataItems.eventContext.buttonDescription = \"$\" + prevTicket;\r\n dataItems.eventContext.buttonDestination =\r\n \"$\" + ticketEl.find(\"a\").data(\"ticket-value\");\r\n dataItems.eventContext.productID = ticketEl\r\n .closest(\".cart-section\")\r\n .data(\"product-variant-id\");\r\n // ga selected product info\r\n dataItems.eventContext.selectedProduct = [];\r\n const productInfo =\r\n ANALYTICS.queryToObjFormat(\r\n ticketEl.find(\"a\").data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n const ticketInfo =\r\n ANALYTICS.queryToObjFormat(\r\n ticketEl.find(\"a\").data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n productInfo.variant = ticketInfo.variant;\r\n productInfo.price = \"$\" + ticketEl.find(\"a\").data(\"ticket-value\");\r\n productInfo.quantity = ticketEl.find(\"a\").data(\"qty\");\r\n dataItems.eventContext.selectedProduct.push(productInfo);\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n }\r\n };\r\n $.trackRemoveCartItem = (removedTicket) => {\r\n const ticket = removedTicket\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\");\r\n const configObj =\r\n ANALYTICS.queryToObjFormat(removedTicket.data(\"ga-config\"), true) || {};\r\n const dataItems = { event: configObj.eventName };\r\n dataItems.eventContext = configObj;\r\n dataItems.eventContext.action = dataItems.eventContext.action;\r\n dataItems.eventContext.buttonCallToAction =\r\n dataItems.eventContext.buttonCallToAction +\r\n \" $\" +\r\n removedTicket\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"ticket-value\");\r\n dataItems.eventContext.buttonDescription =\r\n dataItems.eventContext.buttonDescription +\r\n \" $\" +\r\n removedTicket\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"ticket-value\");\r\n dataItems.eventContext.productID = removedTicket\r\n .closest(\".cart-section\")\r\n .data(\"product-variant-id\");\r\n dataItems.eventContext.selectedProduct = [];\r\n const productInfo =\r\n ANALYTICS.queryToObjFormat(\r\n removedTicket.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n const ticketInfo =\r\n ANALYTICS.queryToObjFormat(\r\n ticket.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n productInfo.variant = ticketInfo.variant;\r\n productInfo.price =\r\n \"$\" +\r\n removedTicket\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"ticket-value\");\r\n productInfo.quantity = removedTicket\r\n .closest(\".cart-section\")\r\n .find(\".ticket.selected\")\r\n .data(\"qty\");\r\n dataItems.eventContext.selectedProduct.push(productInfo);\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n // To track for add cart item\r\n $.trackAddCartItem = (addedTicket) => {\r\n const configObj =\r\n ANALYTICS.queryToObjFormat(addedTicket.data(\"ga-config\"), true) || {};\r\n const dataItems = { event: configObj.eventName };\r\n dataItems.eventContext = configObj;\r\n dataItems.eventContext.action = dataItems.eventContext.action;\r\n dataItems.eventContext.buttonDescription =\r\n dataItems.eventContext.buttonDescription;\r\n dataItems.eventContext.buttonCallToAction =\r\n dataItems.eventContext.buttonCallToAction;\r\n dataItems.eventContext.productID = addedTicket.data(\"product-variant-id\");\r\n dataItems.eventContext.selectedProduct = [];\r\n const productInfo =\r\n ANALYTICS.queryToObjFormat(\r\n addedTicket.data(\"ga-ecommerce-product-info\"),\r\n true\r\n ) || {};\r\n productInfo.quantity = 1;\r\n dataItems.eventContext.selectedProduct.push(productInfo);\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n $.modifyBtnGA = (modifyBtn) => {\r\n const configObj =\r\n ANALYTICS.queryToObjFormat(modifyBtn.data(\"ga-config\"), true) || {};\r\n const dataItems = { event: configObj.eventName };\r\n dataItems.eventContext = configObj;\r\n ANALYTICS.pushToDataLayer(dataItems);\r\n };\r\n\r\n $.trackCancelSubscription = (cancelledReason, $cancelModal) => {\r\n const cancelledInfo =\r\n ANALYTICS.queryToObjFormat(\r\n $cancelModal.data(\"ga-config\"),\r\n true\r\n ) || {};\r\n cancelledInfo.cancellationReason = cancelledReason;\r\n ANALYTICS.pushToDataLayer(cancelledInfo);\r\n };\r\n $.trackPauseSubscription = (pauseReason, pausedDraws, $pauseSubscriptionCTA) => {\r\n const pausedInfo =\r\n ANALYTICS.queryToObjFormat(\r\n $pauseSubscriptionCTA.data(\"ga-config\"),\r\n true\r\n ) || {};\r\n pausedInfo.pauseReason = pauseReason;\r\n pausedInfo.pausingDraws = pausedDraws;\r\n ANALYTICS.pushToDataLayer(pausedInfo);\r\n }\r\n $.trackSubscriptionChange = ($changeSubscriptionCTA, oldVal, newVal) => {\r\n const changedSubscriptionInfo =\r\n ANALYTICS.queryToObjFormat(\r\n $changeSubscriptionCTA.data(\"ga-config\"),\r\n true\r\n ) || {};\r\n changedSubscriptionInfo.oldSubscriptionValue = oldVal;\r\n changedSubscriptionInfo.newSubscriptionValue = newVal;\r\n ANALYTICS.pushToDataLayer(changedSubscriptionInfo);\r\n }\r\n \r\n let storedPayment;\r\n if(($('.stored-card-details').find('.js-card-type') && $('.stored-card-details').find('.js-card-type').length === 0)\r\n && ($('.stored-card-details').find('.js-paypal-email') && $('.stored-card-details').find('.js-paypal-email').length === 0)) {\r\n storedPayment = 'false';\r\n } else {\r\n storedPayment = 'true';\r\n }\r\n\r\n $.trackUpdatePayment = ($updatePaymentBtn, oldPaymentText, newpaymentText) => {\r\n const changedPayment =\r\n ANALYTICS.queryToObjFormat(\r\n $updatePaymentBtn.data(\"ga-config\"),\r\n true\r\n ) || {};\r\n if (storedPayment === 'false') {\r\n changedPayment.oldPaymentMethod = changedPayment.oldPaymentMethod;\r\n } else {\r\n changedPayment.oldPaymentMethod = oldPaymentText;\r\n }\r\n changedPayment.newPaymentMethod = newpaymentText;\r\n storedPayment = 'true';\r\n ANALYTICS.pushToDataLayer(changedPayment);\r\n }\r\n});\r\n","import lity from \"lity\";\r\n\r\nconst creditCardForm = document.querySelector(\"#YourPaymentFormCreditCard\");\r\nconst accountpaymentsubmit = document.querySelector(\".paymentdetails-form\");\r\nconst payPalContinueBtn = $(\"#btnContinuePaymentPayPal\");\r\nconst payPalFormWrapper = $(\".js-paypal-form-wrapper\");\r\nconst braintreeFormWrapper = $(\".js-braintree-form-wrapper\");\r\nconst braintreeErrorDiv = $(\".js-braintree-error\");\r\nconst payPalErrorDiv = $(\".js-paypal-error\");\r\nlet oldPaymentMethodPaypal, oldPaymentMethod;\r\nlet bTpaymentFormCreditCardNumberValidataionMsg = \"Card number is invalid\";\r\nlet bTpaymentFormCreditCardNameValidataionMsg = \"Name on card is invalid\";\r\nlet bTpaymentFormCreditCardExpiryValidataionMsg = \"Expiry date is invalid\";\r\nlet bTpaymentFormCreditCardNumberNotSupportedMsg = \"Card number is not a supported card type\";\r\n\r\n\r\n$(document).ready(function () {\r\n $(document).on(\"click\", function () {\r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n if (!$(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n $(\"#credit_card_number\").removeClass(\"itsValidCard\");\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_number\");\r\n }\r\n }\r\n\r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_expiry\");\r\n }\r\n\r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_name\");\r\n }\r\n\r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n }\r\n\r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n }\r\n });\r\n $(\"#credit-card-number\").attr(\"placeholder\", \"xxxx xxxx xxxx xxxx\");\r\n $(\"#expiration\").attr(\"placeholder\", \"mm/yy\");\r\n});\r\nconst setModalHeadingText = ($modalEl, responseCode) => {\r\n if (responseCode.toLowerCase() === \"success\") {\r\n $modalEl.find(\".message-heading-failure\").addClass(\"hidden\");\r\n $modalEl.find(\".message-heading-success\").removeClass(\"hidden\");\r\n } else {\r\n $modalEl.find(\".message-heading-failure\").removeClass(\"hidden\");\r\n $modalEl.find(\".message-heading-success\").addClass(\"hidden\");\r\n }\r\n};\r\n\r\nfunction displayPurchaseFormClientTokenError() {\r\n // if we can't get a client token, show appropriate messaging for both paypal and braintree if they're on the page\r\n if (braintreeFormWrapper) {\r\n braintreeFormWrapper.addClass(\"hidden\");\r\n }\r\n if (braintreeErrorDiv) {\r\n braintreeErrorDiv.removeClass(\"hidden\");\r\n }\r\n if (payPalFormWrapper) {\r\n payPalFormWrapper.addClass(\"hidden\");\r\n }\r\n if (payPalErrorDiv) {\r\n payPalErrorDiv.removeClass(\"hidden\");\r\n }\r\n}\r\n\r\nfunction setFundingSource(payload) {\r\n const storeFundingSourceCheckbox = $(\r\n \"input#IsStoreFundingSource.Credit-card-save\"\r\n );\r\n if (\r\n storeFundingSourceCheckbox != null &&\r\n storeFundingSourceCheckbox.length > 0\r\n ) {\r\n payload.IsStoreFundingSource = storeFundingSourceCheckbox[0].checked;\r\n }\r\n payload.UseNewFundingSource = $(\"#CardStepUseNewFundingSource\").val();\r\n}\r\n\r\nfunction setErrorMsgOnPaymentFormField(error, field) {\r\n let parentFloatingFieldEl = $(field).closest(\".floating-field\");\r\n parentFloatingFieldEl.find(\".field-validation-error span\").html(error);\r\n parentFloatingFieldEl.addClass(\"floating-field--dirty floating-field--invalid\");\r\n}\r\n\r\nfunction removeErrorMsgOnPaymentFormFieldWhenValid(field) {\r\n let parentFloatingFieldEl = $(field).closest(\".floating-field\");\r\n parentFloatingFieldEl.find(\".field-validation-error span\").html(\"\");\r\n parentFloatingFieldEl.removeClass(\"floating-field--invalid\");\r\n parentFloatingFieldEl.addClass(\"floating-field--valid\");\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .removeClass(\"disabled-loader\");\r\n $(\".loading-indicator\").remove();\r\n}\r\n\r\n// PayPal\r\nif (\r\n ($(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length > 0) ||\r\n ($(\"#updatePaymentModal\") && $(\"#updatePaymentModal\").length > 0)\r\n) {\r\n braintree.client.create(\r\n {\r\n authorization: $(\"#ClientToken\").val(),\r\n },\r\n function (err, clientInstance) {\r\n if (err) {\r\n console.error(err);\r\n displayPurchaseFormClientTokenError();\r\n return;\r\n }\r\n if ($(\"div#paypal-button\") && $(\"div#paypal-button\").length > 0) {\r\n var isNVIPCheckout = $(\"div#paypal-button\").data(\"is-nvip\");\r\n\r\n function placeOrderOrSubscribe() {\r\n var apiURL = \"\";\r\n var apiMethod = \"POST\";\r\n\r\n if (isNVIPCheckout && isNVIPCheckout.toLowerCase() === \"true\") {\r\n $.placeOrderNVIP(this);\r\n } else {\r\n $.placeOrderVIP(this);\r\n }\r\n }\r\n\r\n // Create a PayPal Checkout component.\r\n braintree.paypalCheckout.create(\r\n {\r\n client: clientInstance,\r\n },\r\n function (paypalCheckoutCreationErr, paypalCheckoutInstance) {\r\n // Stop if there was a problem creating PayPal Checkout. This could happen if there was a network error or if it's incorrectly configured.\r\n if (paypalCheckoutCreationErr) {\r\n console.error(\r\n \"Error creating PayPal Checkout:\",\r\n paypalCheckoutCreationErr\r\n );\r\n displayPurchaseFormClientTokenError();\r\n return;\r\n }\r\n // Set up PayPal with the checkout.js library\r\n const paypalEnv = $(\"div#paypal-button\").data(\"paypal-env\");\r\n paypal.Button.render(\r\n {\r\n env: paypalEnv, // or 'sandbox'\r\n locale: \"en_AU\",\r\n style: {\r\n size: \"medium\",\r\n color: \"gold\",\r\n shape: \"rect\",\r\n tagline: \"false\",\r\n },\r\n payment: function () {\r\n return paypalCheckoutInstance.createPayment({\r\n flow: \"vault\",\r\n currency: \"AUD\",\r\n\r\n // Your PayPal options here. For available options, see\r\n // http://braintree.github.io/braintree-web/current/PayPalCheckout.html#createPayment\r\n });\r\n },\r\n onClick() {\r\n $(\"#paymentPayButtons\")\r\n .find(\"#paypal-button\")\r\n .addClass(\"disabled-loader\");\r\n $(\".paypal-button\").append(\r\n ''\r\n );\r\n $(\"#modifyBtn\").addClass(\"pointer-none\");\r\n if ($('.stored-card-details').find('.js-card-type') && $('.stored-card-details').find('.js-card-type').length > 0) {\r\n oldPaymentMethodPaypal = $('.stored-card-details').find('.js-card-type').html();\r\n if (oldPaymentMethodPaypal.toLowerCase() === 'visa' || oldPaymentMethodPaypal.toLowerCase() === 'americanexpress' || oldPaymentMethodPaypal.toLowerCase() === 'mastercard') {\r\n oldPaymentMethodPaypal = \"CreditCard\";\r\n } \r\n } else if ($('.stored-card-details').find('.js-paypal-email') && $('.stored-card-details').find('.js-paypal-email').length > 0) {\r\n oldPaymentMethodPaypal = \"Paypal\";\r\n }\r\n \r\n },\r\n \r\n onAuthorize: function (data, actions) {\r\n return paypalCheckoutInstance\r\n .tokenizePayment(data)\r\n .then(function (payload) {\r\n console.log(\"Paypal\", payload);\r\n\r\n payload.__RequestVerificationToken = $(\r\n 'input[name=\"__RequestVerificationToken\"]'\r\n ).val();\r\n payload.CardholderName = payload.details.email;\r\n if (\r\n $(\"#updatePaymentModal\") &&\r\n $(\"#updatePaymentModal\").length > 0\r\n ) {\r\n const updatePaymentDetailsForm = $(\"main\").find(\r\n \".paymentdetails-form\"\r\n );\r\n if (\r\n $(\"#DataSourceId\") &&\r\n $(\"#DataSourceId\").length > 0\r\n ) {\r\n payload.DataSourceId = $(\"#DataSourceId\").val();\r\n }\r\n const updatePaymentUrl =\r\n updatePaymentDetailsForm.data(\"service-url\");\r\n // Post nonce to server\r\n $.ajax({\r\n url: updatePaymentUrl,\r\n method: \"POST\",\r\n async: false,\r\n contentType:\r\n \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: payload,\r\n success: function success(result) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#paymentPayButtons\")\r\n .find(\"#paypal-button\")\r\n .removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n if (result === \"\") {\r\n // empty string results will occur if the post fails anti-forgery check\r\n return;\r\n }\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n if (result && result.Error.ResponseStatus) {\r\n const response = result.Error.ResponseStatus;\r\n if (\r\n response.ErrorCode &&\r\n response.ErrorCode.toLowerCase() === \"success\"\r\n ) {\r\n const $editSection = $(\r\n \"#js-account-payment-edit\"\r\n );\r\n const $viewSection = $(\r\n \"#js-account-payment-view\"\r\n );\r\n $editSection.hide();\r\n $(\"#updatePaymentModal\").addClass(\"hidden\");\r\n if (\r\n $(\r\n \"#js-account-payment-view > span.stored-card-details\"\r\n ).length &&\r\n $(\r\n \"span.stored-card-details span.js-paypal-email\"\r\n ).length\r\n ) {\r\n $(\"span.js-paypal-email\").html(\r\n result.PayPalEmail\r\n );\r\n } else {\r\n if (\r\n $(\r\n \"#js-account-payment-view > span.stored-card-details\"\r\n ).length\r\n ) {\r\n $(\"span.stored-card-details\").remove();\r\n }\r\n if (\r\n $(\"#js-account-payment-view\").find(\"img.payment-icon\").length\r\n ) {\r\n $(\"img.payment-icon\").remove();\r\n }\r\n if ($(\".my-account-payment-panel\").length) {\r\n $viewSection.prepend(\r\n 'Stored PayPal account using ' +\r\n result.PayPalEmail +\r\n \"\"\r\n );\r\n const updateCardIcon =\r\n '';\r\n $(\"#paymentModify\")\r\n .empty()\r\n .append(\r\n updateCardIcon +\r\n $(\"#paymentModify\").data(\r\n \"update-information\"\r\n )\r\n );\r\n } else {\r\n $viewSection.prepend(\r\n 'Stored PayPal account using ' +\r\n result.PayPalEmail +\r\n \"\"\r\n );\r\n }\r\n }\r\n $viewSection.show();\r\n $.trackUpdatePayment($('.update-payment-method-btn'), oldPaymentMethodPaypal, \"PayPal\");\r\n if (result.Error.ResponseStatus) {\r\n getApiBillingSuccess(result);\r\n }\r\n }\r\n\r\n if (\r\n result.Error.ResponseStatus.ErrorCode &&\r\n result.Error.ResponseStatus.ErrorCode.toLowerCase() ===\r\n \"fail\"\r\n ) {\r\n getApiBillingError(result);\r\n }\r\n }\r\n },\r\n }).fail(function (error) {\r\n // Failure\r\n if (error && error.status === 401) {\r\n // user is unauthorised lets redirect to the login page\r\n $.redirectToLoginPageWithReturnUrl(\r\n $(\"main\").find(\".paymentdetails-form\")\r\n );\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n } else {\r\n // This will be called when PayPal is used on checkout\r\n var tokenData = {\r\n Nonce: payload.nonce,\r\n Type: \"PayPalAccount\",\r\n CardType: \"\",\r\n LastFour: \"\",\r\n };\r\n\r\n jQuery\r\n .ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/UpdatePaymentCookie\",\r\n method: \"POST\",\r\n data: tokenData,\r\n success: function success(data) {\r\n window.console &&\r\n console.log(\"UpdatePaymentCookie\", data);\r\n if (data == \"success\") {\r\n placeOrderOrSubscribe();\r\n }\r\n },\r\n })\r\n .fail(function (error) {\r\n window.console && console.log(\"error\", error);\r\n });\r\n }\r\n });\r\n },\r\n onCancel: function (paypalCheckoutCancelData) {\r\n $(\".loading-indicator\").remove();\r\n $(\"#paymentPayButtons\")\r\n .find(\"#paypal-button\")\r\n .removeClass(\"disabled-loader\");\r\n $(\"#modifyBtn\").removeClass(\"pointer-none\");\r\n },\r\n onError: function (paypalCheckoutErr) {\r\n console.error(\"checkout.js error\", paypalCheckoutErr);\r\n $(\"#payment\").trigger(\"click\");\r\n systemNotification.error(\r\n $(\"#completPurchaseBtn\").data(\"payment-error-title\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-message\"),\r\n $(\"#completPurchaseBtn\").data(\"payment-error-button\")\r\n );\r\n },\r\n },\r\n \"#paypal-button\"\r\n ).then(function () {\r\n // The PayPal button will be rendered in an html element with the id\r\n // 'paypal-button'. This function will be called when the PayPal button\r\n // is set up and ready to be used.\r\n });\r\n }\r\n );\r\n }\r\n\r\n // Create Hosted Fields\r\n // Credit Card\r\n let isValidCardType = true;\r\n braintree.hostedFields.create(\r\n {\r\n client: clientInstance,\r\n styles: {\r\n \"input\": {\r\n \"font-size\": \"16px\",\r\n \"color\": \"#64708e\",\r\n \"font\": \"400 16px/1.5 Gotham,sans-serif\"\r\n },\r\n \"::placeholder\": {\r\n \"color\": \"#64708e\",\r\n \"font\": \"400 16px/1.5 Gotham,sans-serif\"\r\n }\r\n },\r\n fields: {\r\n number: {\r\n selector: \"#credit_card_number\",\r\n placeholder: \"xxxx xxxx xxxx xxxx\",\r\n },\r\n expirationDate: {\r\n selector: \"#credit_card_expiry\",\r\n placeholder: \"mm / yyyy\",\r\n },\r\n cardholderName: {\r\n selector: \"#credit_card_name\",\r\n },\r\n },\r\n },\r\n function (hfErr, hostedFieldsInstance) {\r\n if (hfErr) {\r\n console.error(hfErr);\r\n return;\r\n }\r\n\r\n // check if the card type is valid and accepted by us\r\n hostedFieldsInstance.on(\"cardTypeChange\", function (event) {\r\n // Handle credit card type change in number field\r\n if (event.cards.length === 1) {\r\n if (\r\n event.cards[0].type !== \"american-express\" &&\r\n event.cards[0].type !== \"visa\" &&\r\n event.cards[0].type !== \"master-card\"\r\n ) {\r\n $(\"#credit_card_number\").addClass(\"itsNotValidCard\");\r\n isValidCardType = false;\r\n return;\r\n }\r\n }\r\n isValidCardType = true;\r\n $(\"#credit_card_number\").removeClass(\"itsNotValidCard\");\r\n });\r\n\r\n hostedFieldsInstance.on('blur', function (event) {\r\n let field = event.fields[event.emittedBy]; \r\n let floatingClass = '.floating-field';\r\n $(field.container).closest(floatingClass).removeClass(\"floating-field--focused\");\r\n if(event.emittedBy === \"number\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n }\r\n if(event.emittedBy === \"cardholderName\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n } \r\n\r\n if(event.emittedBy === \"expirationDate\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n if (!$(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n $(\"#credit_card_number\").removeClass(\"itsValidCard\");\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_number\");\r\n }\r\n }\r\n \r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_expiry\");\r\n }\r\n \r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_name\");\r\n }\r\n });\r\n hostedFieldsInstance.on('keyup', function (event) {\r\n let field = event.fields[event.emittedBy]; \r\n\r\n if(event.emittedBy === \"number\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n } \r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n }\r\n if(event.emittedBy === \"cardholderName\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n } \r\n\r\n if(event.emittedBy === \"expirationDate\" && !field.isValid) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n if (!$(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n $(\"#credit_card_number\").removeClass(\"itsValidCard\");\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_number\");\r\n }\r\n }\r\n \r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_expiry\");\r\n }\r\n \r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_name\");\r\n }\r\n });\r\n hostedFieldsInstance.on('focus', function (event) { \r\n const dirtyClass = 'floating-field--dirty floating-field--focused';\r\n const floatingClass = '.floating-field';\r\n const field = event.fields[event.emittedBy];\r\n $(field.container).closest(floatingClass).addClass(dirtyClass);\r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n }\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n }\r\n \r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n } \r\n\r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-invalid\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n } \r\n if ($(\"#credit_card_number\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n if (!$(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n $(\"#credit_card_number\").removeClass(\"itsValidCard\");\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_number\");\r\n }\r\n }\r\n \r\n if ($(\"#credit_card_expiry\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_expiry\");\r\n }\r\n \r\n if ($(\"#credit_card_name\").hasClass(\"braintree-hosted-fields-valid\")) {\r\n removeErrorMsgOnPaymentFormFieldWhenValid(\"#credit_card_name\");\r\n }\r\n });\r\n\r\n creditCardForm.addEventListener(\r\n \"submit\",\r\n function (event) {\r\n event.preventDefault();\r\n const that = $(this);\r\n $(\"#btnContinuePaymentCreditCard\").removeClass(\"disabled\");\r\n // tokenize hosted fields\r\n hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {\r\n if (tokenizeErr) {\r\n let expiry = false;\r\n let cardnumber = false;\r\n let cardholdername = false;\r\n switch (tokenizeErr.code) {\r\n case \"HOSTED_FIELDS_FIELDS_EMPTY\":\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n break;\r\n case \"HOSTED_FIELDS_FIELDS_INVALID\":\r\n $.each(\r\n tokenizeErr.details.invalidFieldKeys,\r\n function (i, val) {\r\n if (val === \"number\") {\r\n cardnumber = true;\r\n }\r\n if (val === \"expirationDate\") {\r\n expiry = true;\r\n }\r\n if (val === \"cardholderName\") {\r\n cardholdername = true;\r\n }\r\n }\r\n );\r\n if (cardnumber) {\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n } else {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n }\r\n }\r\n if (expiry) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n }\r\n if (cardholdername) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n }\r\n break;\r\n case \"HOSTED_FIELDS_FAILED_TOKENIZATION\":\r\n console.error(\"Tokenization failed server side.\");\r\n break;\r\n\r\n case \"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR\":\r\n console.error(\r\n \"Network error occurred when tokenizing.\"\r\n );\r\n break;\r\n\r\n default:\r\n console.error(\r\n \"A tokenisation error has occurred: \",\r\n tokenizeErr\r\n );\r\n }\r\n } else if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n } else {\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n $(\"#btnContinuePaymentCreditCard\").removeClass(\"disabled\");\r\n that.find(\".js-btn-next-section\").trigger(\"click\");\r\n $(\"#details\").show();\r\n $(\".lastfourNumber\").text(payload.details.lastFour);\r\n $(\".lastfourNumber\").prepend(\r\n \" \" +\r\n payload.details.cardType +\r\n \" ending in \"\r\n );\r\n payload.CardholderName = payload.details.cardholderName;\r\n payload.LastFour = payload.details.lastFour;\r\n payload.CardType = payload.details.cardType;\r\n setFundingSource(payload);\r\n // Post nonce to server\r\n $.ajax({\r\n url: \"/rslsitecoreapi/PaymentCheckout/CreateOrUpdateCheckoutCookiePaymentStep\",\r\n method: \"POST\",\r\n async: false,\r\n contentType:\r\n \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: $.appendFormVerificationToken(that, payload),\r\n success: function success(data) {\r\n if (data === \"\") {\r\n // empty string results will occur if the post fails anti-forgery check\r\n return;\r\n }\r\n // ensure the 'continue' button for paypal is hidden again so that if a user tries to switch beteen payment methods the 'nonce' value we have is always correct.\r\n payPalContinueBtn\r\n .removeClass(\"toggleable hidden\")\r\n .addClass(\"toggleable hidden\");\r\n\r\n // Set the steps\r\n if (\r\n $(\".checkout-navigation-menu\") &&\r\n $(\".checkout-navigation-menu\").length\r\n ) {\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#payment\")\r\n .removeClass()\r\n .addClass(\"validated-step heading\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .removeClass()\r\n .addClass(\"active-step heading\");\r\n $(\".checkout-navigation-menu\")\r\n .find(\"#review\")\r\n .trigger(\"click\");\r\n $.checkoutScrollToTop();\r\n // To show the respective payment button on review section\r\n $(\"#paySubscriptionBtn\").removeClass(\"hidden\");\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons\")\r\n .find(\".pay-btn\")\r\n .each(function (i, el) {\r\n $(\"#paySubscriptionBtn\")\r\n .siblings()\r\n .addClass(\"hidden\");\r\n });\r\n }\r\n // set the inner gift form component selections so they appear correctly when opened/modified\r\n if (\r\n $('input[name=\"checkout-is-gift\"]').is(\":checked\")\r\n ) {\r\n $('input:radio[name=\"IsGift\"][value=\"True\"]').trigger(\r\n \"click\"\r\n );\r\n } else {\r\n $(\r\n 'input:radio[name=\"IsGift\"][value=\"False\"]'\r\n ).trigger(\"click\");\r\n $(\".gift-section .form-group-option-detail\").hide();\r\n }\r\n try {\r\n // checkoutEcommerceAnalytics(data);\r\n } catch (gaErr) {\r\n console.log(gaErr.message);\r\n }\r\n },\r\n })\r\n .done(function (data, status, jqxhr) {\r\n // Success\r\n })\r\n .fail(function (error) {\r\n // Failure\r\n window.console && console.log(\"error\", error);\r\n });\r\n }\r\n });\r\n },\r\n false\r\n );\r\n\r\n if ($(\"main\").hasClass(\"main\")) {\r\n accountpaymentsubmit.addEventListener(\r\n \"submit\",\r\n function (event) {\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .addClass(\"disabled-loader\");\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .append(\r\n ''\r\n );\r\n event.preventDefault();\r\n const that = $(this);\r\n $(\"#js-checkout-submit\").addClass(\"active\");\r\n // tokenize hosted fields\r\n hostedFieldsInstance.tokenize(function (\r\n tokenizeErr,\r\n payload\r\n ) {\r\n if (tokenizeErr) {\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .removeClass(\"disabled-loader\");\r\n let expiry = false;\r\n let cardnumber = false;\r\n let cardholdername = false;\r\n switch (tokenizeErr.code) {\r\n case \"HOSTED_FIELDS_FIELDS_EMPTY\":\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n break;\r\n case \"HOSTED_FIELDS_FIELDS_INVALID\":\r\n $.each(\r\n tokenizeErr.details.invalidFieldKeys,\r\n function (i, val) {\r\n if (val === \"number\") {\r\n cardnumber = true;\r\n }\r\n if (val === \"expirationDate\") {\r\n expiry = true;\r\n }\r\n if (val === \"cardholderName\") {\r\n cardholdername = true;\r\n }\r\n }\r\n );\r\n if (cardnumber) {\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n } else {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberValidataionMsg, \"#credit_card_number\");\r\n }\r\n }\r\n if (expiry) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardExpiryValidataionMsg, \"#credit_card_expiry\");\r\n }\r\n if (cardholdername) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNameValidataionMsg, \"#credit_card_name\");\r\n }\r\n break;\r\n case \"HOSTED_FIELDS_FAILED_TOKENIZATION\":\r\n console.error(\"Tokenization failed server side.\");\r\n break;\r\n\r\n case \"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR\":\r\n console.error(\r\n \"Network error occurred when tokenizing.\"\r\n );\r\n if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n }\r\n break;\r\n\r\n default:\r\n console.error(\r\n \"A tokenisation error has occurred: \",\r\n tokenizeErr\r\n );\r\n }\r\n } else if ($(\"#credit_card_number\").hasClass(\"itsNotValidCard\")) {\r\n setErrorMsgOnPaymentFormField(bTpaymentFormCreditCardNumberNotSupportedMsg, \"#credit_card_number\");\r\n } else {\r\n payload.CardholderName = payload.details.cardholderName;\r\n // get token value for credit card update\r\n if (that.hasClass(\"js-smstoken-update\")) {\r\n payload.SMSToken = $(\"#SmsToken\").val();\r\n }\r\n if ($(\"#DataSourceId\") && $(\"#DataSourceId\").length > 0) {\r\n payload.DataSourceId = $(\"#DataSourceId\").val();\r\n }\r\n if ($('.stored-card-details').find('.js-card-type') && $('.stored-card-details').find('.js-card-type').length > 0) {\r\n oldPaymentMethod = $('.stored-card-details').find('.js-card-type').html();\r\n if (oldPaymentMethod.toLowerCase() === 'visa' || oldPaymentMethod.toLowerCase() === 'americanexpress' || oldPaymentMethod.toLowerCase() === 'mastercard') {\r\n oldPaymentMethod = \"CreditCard\";\r\n } \r\n } else if ($('.stored-card-details').find('.js-paypal-email') && $('.stored-card-details').find('.js-paypal-email').length > 0) {\r\n oldPaymentMethod = \"Paypal\";\r\n }\r\n \r\n const addOrUpdatePaymentUrl = that.data(\"service-url\");\r\n // Post nonce to server\r\n $.ajax({\r\n url: addOrUpdatePaymentUrl,\r\n method: \"POST\",\r\n async: false,\r\n contentType:\r\n \"application/x-www-form-urlencoded; charset=utf-8\",\r\n data: $.appendFormVerificationToken(that, payload),\r\n success: function success(data) {\r\n if (data === \"\") {\r\n // empty string results will occur if the post fails anti-forgery check\r\n return;\r\n }\r\n // to update cresit card using sms token\r\n if (that.hasClass(\"js-smstoken-update\")) {\r\n if (\r\n data &&\r\n data.Error &&\r\n data.Error.ResponseStatus\r\n ) {\r\n const response = data.Error.ResponseStatus;\r\n $(\"#js-account-payment-edit\").hide();\r\n $(\".js-card-header\").hide();\r\n if (\r\n response.ErrorCode &&\r\n response.ErrorCode === \"success\"\r\n ) {\r\n $(\".js-token-error\").addClass(\"hide-message\");\r\n $(\".js-token-success\").removeClass(\r\n \"hide-message\"\r\n );\r\n const gaSuccessTag =\r\n $(\".js-token-success\").data(\"ga-success\");\r\n $(\"body\").data(\"ga-page-name\", gaSuccessTag);\r\n $.trackPageChange();\r\n } else if (\r\n response.ErrorCode &&\r\n response.ErrorCode ===\r\n \"IncorrectCreditCardDetails\"\r\n ) {\r\n $(\".js-token-error\").removeClass(\r\n \"hide-message\"\r\n );\r\n $(\".js-token-success\").addClass(\"hide-message\");\r\n const gaErrorTag =\r\n $(\".js-token-error\").data(\"ga-decline\");\r\n $(\"body\").data(\"ga-page-name\", gaErrorTag);\r\n $.trackPageChange();\r\n } else {\r\n $(\".js-all-error\").html(\r\n response.Error.ResponseStatus.Message\r\n );\r\n }\r\n }\r\n } else {\r\n $(\"#js-checkout-submit\").removeClass(\"active\");\r\n if (\r\n data &&\r\n data.Error &&\r\n data.Error.ResponseStatus\r\n ) {\r\n const response = data.Error.ResponseStatus;\r\n if (\r\n response.ErrorCode &&\r\n response.ErrorCode.toLowerCase() === \"success\"\r\n ) {\r\n const $editSection = $(\r\n \"#js-account-payment-edit\"\r\n );\r\n const $viewSection = $(\r\n \"#js-account-payment-view\"\r\n );\r\n $editSection.hide();\r\n $(\"#updatePaymentModal\").addClass(\"hidden\");\r\n if (\r\n $(\r\n \"#js-account-payment-view > span.stored-card-details\"\r\n ).length &&\r\n $(\r\n \"span.stored-card-details span.js-card-type\"\r\n ).length\r\n ) {\r\n $(\"span.js-card-type\").html(data.CardType);\r\n $(\"span.js-card-sourceid\").html(\r\n data.LastFour\r\n );\r\n } else {\r\n if (\r\n $(\r\n \"#js-account-payment-view > span.stored-card-details\"\r\n ).length\r\n ) {\r\n $(\"span.stored-card-details\").remove();\r\n }\r\n if (\r\n $(\"#js-account-payment-view\").find(\"img.payment-icon\").length\r\n ) {\r\n $(\"img.payment-icon\").remove();\r\n }\r\n if ($(\".my-account-payment-panel\").length) {\r\n $viewSection.prepend(\r\n 'Stored ' +\r\n data.CardType +\r\n \" ending in \" +\r\n data.LastFour +\r\n \"\"\r\n );\r\n } else {\r\n $viewSection.prepend(\r\n 'Stored ' +\r\n data.CardType +\r\n \" ending in \" +\r\n data.LastFour +\r\n \"\"\r\n );\r\n }\r\n }\r\n $viewSection.show();\r\n $.trackUpdatePayment($('.update-payment-method-btn'), oldPaymentMethod, \"CreditCard\");\r\n getPaymentIcon(data.CardType);\r\n getApiBillingSuccess(data);\r\n }\r\n }\r\n }\r\n if (\r\n data.Error.ResponseStatus.ErrorCode &&\r\n data.Error.ResponseStatus.ErrorCode.toLowerCase() ===\r\n \"fail\"\r\n ) {\r\n getApiBillingError(data);\r\n $(\".loading-indicator\").remove();\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .removeClass(\"disabled-loader\");\r\n }\r\n $(\".loading-indicator\").remove();\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .removeClass(\"disabled\");\r\n },\r\n }).fail(function (error) {\r\n // Failure\r\n if (error && error.status === 401) {\r\n // user is unauthorised lets redirect to the login page\r\n $.redirectToLoginPageWithReturnUrl(that);\r\n }\r\n window.console && console.log(\"error\", error);\r\n });\r\n }\r\n });\r\n },\r\n false\r\n );\r\n }\r\n }\r\n );\r\n }\r\n );\r\n\r\n function getPaymentIcon(CardType) {\r\n const updatedPayment = $(\"#PaymentPanel\")\r\n .find(\"span.stored-card-details\")\r\n .html();\r\n $(\"#changeMembershipModal\").find(\".payment-text\").html(updatedPayment);\r\n const addCardIcon =\r\n '';\r\n const updateCardIcon =\r\n '';\r\n switch (CardType.toLowerCase()) {\r\n case \"visa\":\r\n $(\".change-payment-icon\").attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/visa-blue.svg\"\r\n );\r\n $(\"#changeMembershipModal\")\r\n .find(\".vip-payment-icon\")\r\n .attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/visa-blue.svg\"\r\n );\r\n $(\"#paymentModify\")\r\n .empty()\r\n .append(\r\n updateCardIcon + $(\"#paymentModify\").data(\"update-information\")\r\n );\r\n break;\r\n case \"mastercard\":\r\n $(\".change-payment-icon\").attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/master-card.svg\"\r\n );\r\n $(\"#changeMembershipModal\")\r\n .find(\".vip-payment-icon\")\r\n .attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/master-card.svg\"\r\n );\r\n $(\"#paymentModify\")\r\n .empty()\r\n .append(\r\n updateCardIcon + $(\"#paymentModify\").data(\"update-information\")\r\n );\r\n break;\r\n case \"americanexpress\":\r\n $(\".change-payment-icon\").attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/amex.svg\"\r\n );\r\n $(\"#changeMembershipModal\")\r\n .find(\".vip-payment-icon\")\r\n .attr(\r\n \"src\",\r\n \"/RSLLOTT/assets/Frontend RSLLOTT/images/icons/amex.svg\"\r\n );\r\n\r\n $(\"#paymentModify\")\r\n .empty()\r\n .append(\r\n updateCardIcon + $(\"#paymentModify\").data(\"update-information\")\r\n );\r\n break;\r\n default:\r\n $(\"#paymentModify\")\r\n .empty()\r\n .append(addCardIcon + $(\"#paymentModify\").data(\"add-information\"));\r\n break;\r\n }\r\n }\r\n function getApiError(errorResult) {\r\n const response = errorResult.Data.ApiError.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n function getApiBillingSuccess(errorResult) {\r\n const response = errorResult.Error.ResponseStatus;\r\n systemNotification.success(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n\r\n function getApiBillingError(errorResult) {\r\n const response = errorResult.Error.ResponseStatus;\r\n systemNotification.error(\r\n response.TitleText,\r\n response.Message,\r\n response.ButtonText\r\n );\r\n }\r\n}\r\n","$(() => {\r\n //Checkbox functionality for both VIP and NVIP\r\n $(document).on(\"change\", \"input[type='checkbox']\", function (e) {\r\n $(this).val(this.checked ? \"TRUE\" : \"FALSE\");\r\n $(this).closest(\".input-checkbox\").toggleClass(\"checked\");\r\n if (\r\n $(this).closest(\"#reviewSection\") &&\r\n $(this).closest(\"#reviewSection\").length > 0\r\n ) {\r\n if ($(\"#reviewSection\").find(\".input-checkbox\").hasClass(\"checked\")) {\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons .pay-btn\")\r\n .removeClass(\"disabled\");\r\n } else {\r\n $(\"#reviewSection\")\r\n .find(\"#paymentPayButtons .pay-btn\")\r\n .addClass(\"disabled\");\r\n }\r\n }\r\n // create account checkbox validation\r\n if (\r\n $(this).closest(\"#newAccountFormExpanded\") &&\r\n $(this).closest(\"#newAccountFormExpanded\").length > 0\r\n ) {\r\n const labelEl = $(\"#newAccountFormExpanded\")\r\n .find(\".terms-conditions\")\r\n .find(\"label\");\r\n if (\r\n $(\"#newAccountFormExpanded\").find(\".input-checkbox\").hasClass(\"checked\")\r\n ) {\r\n labelEl.find(\".checkbox-error\").remove();\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#termsConditionsNewAccount\")\r\n .removeClass(\"error-border\");\r\n } else {\r\n labelEl.prepend(\r\n 'Please agree to the Privacy Policy
'\r\n );\r\n $(\"#newAccountFormExpanded\")\r\n .find(\"#termsConditionsNewAccount\")\r\n .addClass(\"error-border\");\r\n }\r\n }\r\n\r\n if (\r\n $(this).closest(\"#shoppingCart\") &&\r\n $(this).closest(\"#shoppingCart\").length > 0\r\n ) {\r\n if ($(\"#shoppingCart\").find(\".input-checkbox\").hasClass(\"checked\")) {\r\n setShoppingCartGift(true);\r\n } else {\r\n setShoppingCartGift(false);\r\n }\r\n }\r\n });\r\n /* $(\".input-checkbox\").on(\"click\", function (e) {\r\n if ($(this).hasClass(\"checked\")) {\r\n $(this)\r\n .closest(\".review-content\")\r\n .find(\"#paySubscriptionBtn\")\r\n .removeClass(\"disabled\");\r\n }\r\n }); */\r\n\r\n function setShoppingCartGift(checked) {\r\n $.ajax({\r\n url:\r\n \"/rslsitecoreapi/ShoppingCart/SetShoppingCartGift\" +\r\n \"?isgift=\" +\r\n checked,\r\n method: \"GET\",\r\n contentType: \"application/x-www-form-urlencoded\",\r\n dataType: \"json\",\r\n success: function success(result) {\r\n if (\r\n result.Data &&\r\n result.Data.ApiError &&\r\n result.Data.ApiError.IsApiError\r\n ) {\r\n getApiError(result);\r\n }\r\n },\r\n error: function error() {},\r\n });\r\n }\r\n const $YourPaymentFormCreditCardForm = $(\"#YourPaymentFormCreditCard\");\r\n const $reviewAndOrderBtn = $(\".reviewAndOrderBtn\");\r\n\r\n $YourPaymentFormCreditCardForm.find(\"input\").on(\"blur keyup\", function () {\r\n $YourPaymentFormCreditCardForm.validate();\r\n if ($YourPaymentFormCreditCardForm.valid()) {\r\n $reviewAndOrderBtn.removeClass(\"disabled\");\r\n } else {\r\n $reviewAndOrderBtn.addClass(\"disabled\");\r\n }\r\n });\r\n});\r\n","$(() => {\r\n const $updatePaymentBillingBtn = $(\"#btnContinuePaymentCreditCard\");\r\n const $yourPaymentFormCreditCard = $(\"#YourPaymentFormCreditCard\");\r\n const $payPalBtn = $(\"#payPalBtn\");\r\n $(\"#paymentBillingButtons\")\r\n .find(\".btn.btn-payment\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n const clickedButton = $(this);\r\n clickedButtonPaymentType = clickedButton\r\n .data(\"payment-type-btn\")\r\n .toLowerCase();\r\n clickedButton.addClass(\"active\").siblings().removeClass(\"active\");\r\n\r\n // show or hide credit card form\r\n if (clickedButtonPaymentType === \"creditcard\") {\r\n $yourPaymentFormCreditCard.show();\r\n $updatePaymentBillingBtn.removeClass(\"disabled hidden\");\r\n\r\n $payPalBtn.addClass(\"hidden\");\r\n } else {\r\n $yourPaymentFormCreditCard.hide();\r\n $updatePaymentBillingBtn.addClass(\"hidden\");\r\n $payPalBtn.removeClass(\"disabled hidden\");\r\n }\r\n });\r\n // toggle between edit and view modals for Payment Section\r\n $(\"#my-account .js-payment-btn-modify\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n\r\n $(\"#js-account-payment-view\").hide();\r\n $(\"#js-account-payment-edit\").show();\r\n if ($(\".payment-warning-error-message\").is(\":visible\")) {\r\n $(\".payment-warning-error-message\")\r\n .closest(\".form-group-option-detail\")\r\n .css({ padding: \"0\", \"border-top\": \"none\" });\r\n }\r\n });\r\n\r\n $(\"#billingClose\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\"#updateBillingDetails\").addClass(\"hidden\");\r\n });\r\n $(\".update-account-details-btn\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n updateLabelClassIfFormInputsContainData(\".accountdetails-form\");\r\n $(\"#updateBillingDetails\").removeClass(\"hidden\");\r\n });\r\n\r\n function updateLabelClassIfFormInputsContainData(formClass) {\r\n let fields = $(formClass).find(\".floating-field\");\r\n\r\n $(fields).each(function () {\r\n let input = $(this).find(\"input:not([type='hidden'])\");\r\n if (input.val() !== \"\") {\r\n input.closest(\".floating-field\").addClass(\"floating-field--dirty\");\r\n }\r\n });\r\n }\r\n\r\n // toggle between edit and view modals for Payment Section\r\n $(\".js-payment-btn-modify\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n\r\n $(\"#js-account-payment-view\").hide();\r\n $(\"#js-account-payment-edit\").show();\r\n if ($(\".payment-warning-error-message\").is(\":visible\")) {\r\n $(\".payment-warning-error-message\")\r\n .closest(\".form-group-option-detail\")\r\n .css({ padding: \"0\", \"border-top\": \"none\" });\r\n }\r\n });\r\n\r\n // To show edit payment modal for Payment Section\r\n $(\"#paymentModify\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\"#updatePaymentModal\").removeClass(\"hidden\");\r\n $(\".loading-indicator\").remove();\r\n $(\".paymentdetails-form\")\r\n .find(\".update-payment-method-btn\")\r\n .removeClass(\"disabled-loader\");\r\n // To disable payment method form fields when payment API down\r\n if ($(\".payment-warning-error-message\").is(\":visible\")) {\r\n $(\"#updatePaymentModal\")\r\n .find(\".form-group-option-header\")\r\n .addClass(\"payment-form-disabled\");\r\n $(\"#updatePaymentModal\")\r\n .find(\".payment-update-btn\")\r\n .addClass(\"payment-form-disabled\");\r\n $(\".payment-warning-error-message\")\r\n .closest(\".form-group-option-detail\")\r\n .css({ padding: \"0\", \"border-top\": \"none\" });\r\n } else {\r\n $(\"#updatePaymentModal\")\r\n .find(\".form-group-option-header\")\r\n .removeClass(\"payment-form-disabled\");\r\n $(\"#updatePaymentModal\")\r\n .find(\".payment-update-btn\")\r\n .removeClass(\"payment-form-disabled\");\r\n }\r\n });\r\n\r\n //on click of outside modal\r\n $(document).on(\"click\", function (e) {\r\n if ($(e.target).is(\"#updatePaymentModal\")) {\r\n if ($(\"#updatePaymentModal\") && $(\"#updatePaymentModal\").length > 0) {\r\n setTimeout(() => {\r\n $(\"#updatePaymentModal\").addClass(\"hidden\");\r\n }, 100);\r\n }\r\n }\r\n });\r\n\r\n // To highlight the selected payment method\r\n $(\"#myAccountPaymentEdit\")\r\n .find(\".form-group-option-header\")\r\n .on(\"click\", function (e) {\r\n $(e.target)\r\n .closest(\".form-group-option\")\r\n .addClass(\"payment-selected\")\r\n .siblings()\r\n .removeClass(\"payment-selected\");\r\n });\r\n\r\n // Closing modals on click of success close buttons\r\n $(\"#updatePaymentModal\")\r\n .find(\".close-modal\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n if ($(\"#updatePaymentModal\") && $(\"#updatePaymentModal\").length) {\r\n $(\"#updatePaymentModal\").addClass(\"hidden\");\r\n }\r\n });\r\n $(\"#modal-account-updated\")\r\n .find(\".btn\")\r\n .on(\"click\", function (e) {\r\n if ($(\"#updatePaymentModal\") && $(\"#updatePaymentModal\").length) {\r\n $(\"#updatePaymentModal\").addClass(\"hidden\");\r\n }\r\n });\r\n\r\n // To show edit payment modal for Payment Section\r\n $(\"#my-account\")\r\n .find(\"#paymentModify\")\r\n .on(\"click\", function (e) {\r\n e.preventDefault();\r\n $(\"#updatePaymentModal\").removeClass(\"hidden\");\r\n // To disable payment method form fields when payment API down\r\n if ($(\".payment-warning-error-message\").is(\":visible\")) {\r\n $(\"#updatePaymentModal\")\r\n .find(\".form-group-option-header\")\r\n .addClass(\"payment-form-disabled\");\r\n $(\"#updatePaymentModal\")\r\n .find(\".payment-update-btn\")\r\n .addClass(\"payment-form-disabled\");\r\n $(\".payment-warning-error-message\")\r\n .closest(\".form-group-option-detail\")\r\n .css({ padding: \"0\", \"border-top\": \"none\" });\r\n } else {\r\n $(\"#updatePaymentModal\")\r\n .find(\".form-group-option-header\")\r\n .removeClass(\"payment-form-disabled\");\r\n $(\"#updatePaymentModal\")\r\n .find(\".payment-update-btn\")\r\n .removeClass(\"payment-form-disabled\");\r\n }\r\n });\r\n\r\n // To highlight the selected payment method\r\n $(\"#myAccountPaymentEdit\")\r\n .find(\".form-group-option-header\")\r\n .on(\"click\", function (e) {\r\n $(e.target)\r\n .closest(\".form-group-option\")\r\n .addClass(\"payment-selected active\")\r\n .siblings()\r\n .removeClass(\"payment-selected active\");\r\n });\r\n});\r\n"],"sourceRoot":""}