{"version":3,"sources":["webpack://kidsacademy/./static/js/components/main-banner.js","webpack://kidsacademy/./static/js/components/parsley-validators.js","webpack://kidsacademy/./static/js/website/storytime-advertising.js","webpack://kidsacademy/./node_modules/bootstrap/dist/js/npm.js","webpack://kidsacademy/./node_modules/bootstrap/js/affix.js","webpack://kidsacademy/./node_modules/bootstrap/js/alert.js","webpack://kidsacademy/./node_modules/bootstrap/js/button.js","webpack://kidsacademy/./node_modules/bootstrap/js/carousel.js","webpack://kidsacademy/./node_modules/bootstrap/js/collapse.js","webpack://kidsacademy/./node_modules/bootstrap/js/dropdown.js","webpack://kidsacademy/./node_modules/bootstrap/js/modal.js","webpack://kidsacademy/./node_modules/bootstrap/js/popover.js","webpack://kidsacademy/./node_modules/bootstrap/js/scrollspy.js","webpack://kidsacademy/./node_modules/bootstrap/js/tab.js","webpack://kidsacademy/./node_modules/bootstrap/js/tooltip.js","webpack://kidsacademy/./node_modules/bootstrap/js/transition.js","webpack://kidsacademy/./node_modules/js-cookie/src/js.cookie.js","webpack://kidsacademy/./node_modules/object-fit-images/dist/ofi.common-js.js","webpack://kidsacademy/./node_modules/parsleyjs/dist/parsley.js","webpack://kidsacademy/./node_modules/qs/lib/formats.js","webpack://kidsacademy/./node_modules/qs/lib/index.js","webpack://kidsacademy/./node_modules/qs/lib/parse.js","webpack://kidsacademy/./node_modules/qs/lib/stringify.js","webpack://kidsacademy/./node_modules/qs/lib/utils.js","webpack://kidsacademy/./node_modules/slick-carousel/slick/slick.js","webpack://kidsacademy/./node_modules/toastr/toastr.js","webpack://kidsacademy/external var \"jQuery\"","webpack://kidsacademy/webpack/bootstrap","webpack://kidsacademy/webpack/runtime/amd define","webpack://kidsacademy/webpack/runtime/compat get default export","webpack://kidsacademy/webpack/runtime/define property getters","webpack://kidsacademy/webpack/runtime/global","webpack://kidsacademy/webpack/runtime/hasOwnProperty shorthand","webpack://kidsacademy/./static/js/config.js","webpack://kidsacademy/./static/js/utils.js","webpack://kidsacademy/./static/js/components/contact-us-form.js","webpack://kidsacademy/./static/js/components/main.js","webpack://kidsacademy/./static/js/components/menu.js","webpack://kidsacademy/./static/js/components/homepage.js","webpack://kidsacademy/./static/js/components/header.js","webpack://kidsacademy/./static/js/components/main-banner-timer.js","webpack://kidsacademy/./static/js/components/go-to-top-btn.js","webpack://kidsacademy/./static/js/components/my-messages.js","webpack://kidsacademy/./static/js/payment/subscription.utils.js","webpack://kidsacademy/./static/js/components/monetization-popup.js","webpack://kidsacademy/./static/js/components/blog-subscription-popup.js","webpack://kidsacademy/./static/js/components/website-plans-modal.js","webpack://kidsacademy/./static/js/components/website-cr-tg-plans-modal.js","webpack://kidsacademy/./static/js/components/website-sign-up-modal.js","webpack://kidsacademy/./static/js/website/storytime.js","webpack://kidsacademy/./static/js/website/material-detail.js","webpack://kidsacademy/./static/js/material-detail.js"],"names":["$","document","ready","$mainBannerCarousel","length","$mainBannerContent","on","removeClass","show","not","slick","slidesToShow","slidesToScroll","autoplay","autoplaySpeed","swipeToSlide","adaptiveHeight","window","Parsley","addValidator","requirementType","validateString","value","RegExp","test","messages","en","$monetizationPopups","$advertisingContainer","html","goToPaymentBtnAttrValue","advertisingGoToPaymentBtnSelector","advertisingGifSelector","advertisingImgSelector","defaultGifUrl","STATIC_URL","defaultImgUrl","mediaBlockSelector","goToPaymentBtnSelector","$popupTransitionLoader","subscriptionStepClass","transformAdvertisingContent","$advertisingContentContainer","addClass","$advertisingContent","gifUrl","imgUrl","createAdvertisingContent","attr","$advertisingControls","find","append","each","i","elem","ga","includes","mouseHoverHandler","direction","event","$targetMediaBlock","target","closest","toggleClass","$advertisingGif","$advertisingImg","hide","$targetPopup","targetPopupId","filter","popup","defineTargetPopup","contentToEmbed","$mediaBlock","$targetPopupContent","modal","click","hover","bind","error","e","handleAdvertisingEvents","embedAdvertisingContent","Affix","element","options","this","extend","DEFAULTS","$target","proxy","checkPosition","checkPositionWithEventLoop","$element","affixed","unpin","pinnedOffset","Plugin","option","$this","data","VERSION","RESET","offset","prototype","getState","scrollHeight","height","offsetTop","offsetBottom","scrollTop","position","targetHeight","top","initializing","colliderTop","getPinnedOffset","setTimeout","is","bottom","Math","max","body","affix","css","affixType","Event","trigger","isDefaultPrevented","replace","old","fn","Constructor","noConflict","$spy","call","dismiss","Alert","el","close","TRANSITION_DURATION","selector","$parent","removeElement","detach","remove","preventDefault","support","transition","hasClass","one","emulateTransitionEnd","alert","Button","isLoading","toggle","setState","loadingText","state","d","$el","val","resetText","prop","removeAttr","changed","$input","button","$btn","first","type","Carousel","$indicators","paused","sliding","interval","$active","$items","keyboard","keydown","pause","documentElement","cycle","action","slide","to","wrap","tagName","which","prev","next","clearInterval","setInterval","getItemIndex","item","parent","children","index","getItemForDirection","active","activeIndex","itemIndex","eq","pos","that","end","$next","isCycling","relatedTarget","slideEvent","$nextIndicator","slidEvent","offsetWidth","join","carousel","clickHandler","href","slideIndex","$carousel","Collapse","$trigger","id","transitioning","getParent","addAriaAndCollapsedClass","getTargetFromTrigger","dimension","activesData","actives","startEvent","complete","scrollSize","camelCase","offsetHeight","isOpen","collapse","Dropdown","clearMenus","contains","isActive","createElement","insertAfter","stopPropagation","dropdown","Modal","$body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","fixedContent","remote","load","_relatedTarget","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","escape","resize","appendTo","adjustDialog","enforceFocus","off","hideModal","has","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","callback","animate","doAnimate","currentTarget","focus","callbackRemove","modalIsOverflowing","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","innerWidth","documentElementRect","getBoundingClientRect","right","abs","left","clientWidth","measureScrollbar","bodyPad","parseInt","style","actualPadding","calculatedPadding","parseFloat","padding","removeData","scrollDiv","className","removeChild","showEvent","Popover","init","tooltip","Error","placement","content","template","constructor","getDefaults","setContent","$tip","tip","title","getTitle","getContent","typeContent","sanitize","sanitizeHtml","text","hasContent","$e","o","arrow","$arrow","popover","ScrollSpy","$scrollElement","offsets","targets","activeTarget","process","refresh","getScrollHeight","offsetMethod","offsetBase","isWindow","map","$href","sort","a","b","push","maxScroll","activate","clear","undefined","parents","parentsUntil","scrollspy","Tab","$ul","$previous","hideEvent","container","tab","DISALLOWED_ATTRIBUTES","uriAttrs","DefaultWhitelist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","l","unsafeHtml","whiteList","sanitizeFn","implementation","createHTMLDocument","createdDocument","innerHTML","whitelistKeys","elements","len","elName","attributeList","attributes","whitelistedAttributes","concat","j","len2","removeAttribute","parentNode","Tooltip","enabled","timeout","hoverState","inState","animation","delay","viewport","getOptions","$viewport","isFunction","triggers","split","eventIn","eventOut","enter","leave","_options","fixTitle","dataAttributes","dataAttr","hasOwnProperty","getDelegateOptions","defaults","key","obj","self","clearTimeout","isInStateTrue","inDom","ownerDocument","tipId","getUID","autoToken","autoPlace","display","getPosition","actualWidth","actualHeight","orgPlacement","viewportDim","width","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","marginTop","marginLeft","isNaN","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","isBody","elRect","isSvg","SVGElement","elOffset","scroll","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","prefix","random","getElementById","enable","disable","toggleEnabled","destroy","duration","called","transEndEventNames","WebkitTransition","MozTransition","OTransition","name","transitionEnd","special","bsTransitionEnd","bindType","delegateType","handle","handleObj","handler","apply","arguments","factory","module","exports","OldCookies","Cookies","api","result","decode","decodeURIComponent","converter","set","path","expires","Date","toUTCString","JSON","stringify","write","encodeURIComponent","String","stringifiedAttributes","attributeName","cookie","get","json","jar","cookies","parts","slice","charAt","read","parse","getJSON","withConverter","OFI","propRegex","testImg","Image","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","getAttribute","nativeSetAttribute","setAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","naturalWidth","fixOne","parsed","getComputedStyle","fontFamily","exec","getStyle","ofi","skipTest","srcset","src","naturalHeight","descriptors","Object","defineProperty","ss","keepSrcUsable","err","console","warn","picturefill","pf","_","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","imgs","opts","startAutoMode","getElementsByTagName","querySelectorAll","addEventListener","watchMQ","getOfiImageMaybe","HTMLImageElement","hijackAttributes","_slice","Array","_slicedToArray","arr","isArray","Symbol","iterator","_arr","_n","_d","_e","_s","_i","done","sliceIterator","TypeError","_extends","assign","source","_toConsumableArray","arr2","from","globalID","pastWarnings","Utils","namespace","attribute","regex","specified","camelize","deserializeValue","checkAttr","_checkAttr","hasAttribute","setAttr","dasherize","getType","generateID","num","Number","str","chr","toUpperCase","_window$console","warnOnce","msg","_resetWarnings","trimString","string","date","_parsed$map","x","_parsed$map2","year","month","day","getFullYear","getMonth","getDate","_string","integer","number","object","regexp","_regexp","flags","parseRequirement","converted","namespaceEvents","events","evt","difference","array","indexOf","all","promises","when","objectCreate","create","_SubmitSelector","Defaults","inputs","excluded","priorityEnabled","multiple","group","uiEnabled","validationThreshold","triggerAfterFailure","errorClass","successClass","classHandler","Field","errorsContainer","errorsWrapper","errorTemplate","Base","__id__","asyncSupport","_pipeAccordingToValidationResult","_this","pipe","r","Deferred","validationResult","reject","resolve","promise","actualizeOptions","domOptions","_resetOptions","initOptions","_listeners","subscribe","listenTo","queue","splice","unsubscribe","unsubscribeTo","extraArg","asyncIsValid","force","whenValid","_findRelated","convertArrayRequirement","m","values","convertExtraOptionRequirement","requirementSpec","extraOptionReader","main","extra","Validator","spec","validate","requirementFirstArg","validateMultiple","instance","validateDate","_isDateInput","validateNumber","parseRequirements","requirements","isPlainObject","priority","ValidatorRegistry","validators","catalog","__class__","locale","typeTesters","email","digits","alphanum","url","range","decimalPlaces","ValidatorRegistry__parseArguments","args","ValidatorRegistry__operatorToValidator","operator","_len","requirementsAndInput","_key","pop","ValidatorRegistry__comparisonOperator","setLocale","addCatalog","addMessage","message","addMessages","nameMessageObject","arg1","arg2","_setValidator","hasValidator","updateValidator","removeValidator","validator","getErrorMessage","constraint","formatMessage","defaultMessage","parameters","notblank","required","_ref","_ref$step","step","_ref$base","base","tester","nb","decimals","toInt","f","pow","pattern","minlength","requirement","maxlength","min","mincheck","maxcheck","check","equalto","refOrValue","$reference","UI","diffResults","newResult","oldResult","deep","added","kept","found","assert","removed","Form","_actualizeTriggers","_this2","onSubmitValidate","onSubmitButton","_focusedField","fields","field","noFocus","_destroyUI","_reflowUI","_buildUI","_ui","diff","lastValidationResult","_manageStatusClass","_manageErrorsMessages","_failedOnce","getErrorsMessages","errorMessage","_getErrorMessage","addError","_ref2","_ref2$updateClass","updateClass","_addError","_errorClass","updateError","_ref3","_ref3$updateClass","_updateError","removeError","_ref4$updateClass","_removeError","hasConstraints","needsValidation","_successClass","_resetClass","errorsMessagesDisabled","_insertErrorWrapper","$errorsWrapper","_ref5","_ref6","customConstraintErrorMessage","$errorClassHandler","_manageClassHandler","errorsWrapperId","validationInformationVisible","$handlerFunction","$handler","jQuery","_inputHolder","$errorsContainer","after","_this3","$toBind","_validateIfNeeded","_this4","getValue","debounce","_debounced","_resetUI","Form__statusMapping","pending","resolved","rejected","_this5","parsley","submitSource","_submitSource","_remoteCache","whenValidate","_trigger","stopImmediatePropagation","_submit","$synthetic","_arguments","_Utils$all$done$fail$always","_this6","_ref7","submitEvent","_refreshFields","_withoutReactualizingFormOptions","fail","always","isValid","_arguments2","_this7","_ref8","reset","_bindFields","_this8","oldFields","fieldsMappedById","fieldInstance","Factory","uniqueId","oldActualizeOptions","eventName","Constraint","parsleyField","isDomConstraint","validatorSpec","_validatorRegistry","_parseRequirements","capitalize","_validator","requirementList","_this9","parsleyFormInstance","constraints","constraintsByName","_bindConstraints","parsley_field__statusMapping","_whenValid$always$done$fail$always","_this10","_ref9","_isInGroup","_refreshed","_isRequired","validateIfEmpty","_arguments3","_this11","_ref10","_ref10$force","groupedConstraints","_getGroupedConstraints","_validateConstraint","_this12","_handleWhitespace","_refreshConstraints","refreshConstraints","addConstraint","removeConstraint","updateConstraint","_bindHtml5Constraints","trimValue","whitespace","c","parsley_field","Multiple","addElement","$elements","fieldConstraints","_init","savedparsleyFormInstance","__version__","isMultiple","handleMultiple","parsleyMultipleInstance","_this13","input","$previouslyRelated","doNotStore","parsleyInstance","ParsleyExtend","vernums","jquery","forEach","version","psly","instances","ParsleyConfig","ParsleyUtils","registry","i18n","ParsleyValidator","method","_window$Parsley","ParsleyUI","doNotUpdateClass","autoBind","deprecated","adapt","context","parsleyAdaptedCallback","unshift","eventPrefix","lastIndexOf","substr","InputEvent","_this14","globals","g","isNativeEvent","originalEvent","isTrusted","fakeInputEvent","misbehaves","behavesOk","install","inputEventPatched","uninstall","listen","unsubscribeAll","emit","_instance","instanceGiven","asyncValidators","xhr","status","reverse","addAsyncValidator","ajaxOptions","csr","remoteOptions","param","ajax","handleXhr","then","percentTwenties","formatters","RFC1738","RFC3986","formats","utils","allowDots","allowPrototypes","arrayLimit","decoder","delimiter","depth","parameterLimit","plainObjects","strictNullHandling","parseKeys","givenKey","child","segment","keys","chain","leaf","root","parseArrays","cleanRoot","parseObject","ignoreQueryPrefix","isRegExp","tempObj","cleanStr","limit","Infinity","part","bracketEqualsPos","parseValues","newObj","merge","compact","arrayPrefixGenerators","brackets","indices","repeat","pushToArray","valueOrArray","toISO","toISOString","encode","encoder","encodeValuesOnly","serializeDate","skipNulls","generateArrayPrefix","formatter","isBuffer","objKeys","format","arrayFormat","joined","addQueryPrefix","hexTable","toString","arrayToObject","reduce","acc","refs","compacted","compactQueue","out","charCodeAt","mergeTarget","targetItem","Slick","instanceUid","settings","dataSettings","accessibility","appendArrows","appendDots","arrows","asNavFor","prevArrow","nextArrow","centerMode","centerPadding","cssEase","customPaging","slider","dots","dotsClass","draggable","easing","edgeFriction","fade","focusOnSelect","infinite","initialSlide","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","responsive","rows","rtl","slidesPerRow","speed","swipe","touchMove","touchThreshold","useCSS","useTransform","variableWidth","vertical","verticalSwiping","waitForAnimate","zIndex","initials","animating","dragging","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","slideCount","slideWidth","$slideTrack","$slides","slideOffset","swipeLeft","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","hidden","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","originalSettings","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","insertBefore","prependTo","reinit","animateHeight","outerHeight","animateSlide","targetLeft","animProps","animStart","now","ceil","applyTransition","disableTransition","getNavTarget","slideHandler","slideTo","buildArrows","add","buildDots","dot","getDotCount","buildOut","wrapAll","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","createDocumentFragment","row","appendChild","empty","checkResponsive","initial","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","n","cleanUpEvents","interrupt","visibility","cleanUpSlideEvents","orientationChange","cleanUpRows","fadeSlide","opacity","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","verticalOffset","floor","offsetLeft","outerWidth","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","goTo","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","initArrowEvents","initDotEvents","initSlideEvents","initUI","keyCode","rangeStart","rangeEnd","loadImages","imagesScope","image","imageSource","imageToLoad","onload","onerror","progressiveLazyLoad","slickNext","slickPause","play","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","y","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","opt","bodyStyle","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","transform","allSlides","remainder","infiniteCount","clone","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","PI","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","touches","swipeStart","swipeMove","curLeft","positionOffset","pageX","clientX","pageY","clientY","sqrt","unfilterSlides","slickUnfilter","fromBreakpoint","ret","$container","listener","previousToast","toastId","toastType","toastr","$toastElement","clearOptions","getContainer","clearToast","toastsToClear","clearContainer","removeToast","optionsOverride","notify","iconClass","iconClasses","info","success","warning","containerId","positionClass","createContainer","hideMethod","hideDuration","hideEasing","publish","preventDuplicates","shouldExit","intervalId","$titleElement","$messageElement","$progressElement","$closeElement","closeHtml","progressBar","hideEta","maxHideTime","response","startTime","toastClass","suffix","escapeHtml","titleClass","setTitle","messageClass","setMessage","closeButton","closeClass","prepend","progressClass","newestOnTop","ariaValue","setAria","showMethod","showDuration","showEasing","onShown","timeOut","hideToast","getTime","updateProgress","closeOnHover","stickAround","delayedHideToast","onclick","tapToDismiss","cancelBubble","onCloseClick","debug","log","override","closeMethod","closeDuration","closeEasing","onHidden","endTime","extendedTimeOut","stop","percentage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdD","getter","__esModule","definition","enumerable","globalThis","Function","ENDPOINT","URLS","GET_PARAMS","LOCAL_STORAGE_KEYS","JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE","FEEDBACK_TYPES","SUPPORT_EMAIL","ERROR_CODES","RESPONSE_CODES","SUBJECTS","INVALID_DISTRICT","INVALID_SCHOOL","INVALID_USER","EMPTY_USER","GIFT_CODE_INVALID","SUBSCRIPTION_EXISTS","INVALID_ACCOUNT_TYPE","ACCOUNT_TYPES","ACCOUNT_TYPES_STRING","PROMO_LANDINGS_URLS","DROPIN_SCRIPT_URL","CUSTOM_MESSAGE","SUBSCRIPTION_POPUP","PURCHASE_STEP_TRIGGERED_ATTRIBUTE","SUBSCRIPTION_PERIODS","SUBSCRIPTION_PERIOD_MAPPING","price","MAILING_LISTS","MODALS","WORKSHEET_ACTIONS","WEBSITE_CUSTOM_EVENTS","WEBSITE_LIMIT_STATUSES","WORKSHEET_ACTION_TYPES","IS_DOWNLOAD_WORKSHEET_FLOW","getBrowser","userAgent","navigator","tem","M","appName","appVersion","toggleButtonLoading","$button","removeProperty","replaceEmailWithLink","addLinkToEmail","emailLinkHref","text1","text2","getError","errorResponse","errorMsgs","es","defaultErrorMsg","LANGUAGE_CODE","errors","responseText","getUrlParam","paramName","URLSearchParams","location","search","results","decodeURI","deleteUrlParam","URL","searchParams","delete","history","replaceState","scrollToHashedElement","hash","scrollIntoViewDelay","scrollTimeout","$header","heightToSubtract","innerHeight","formattedHash","$elem","isASCII","braintreeDropinConfig","totalAmount","config","authorization","braintree_token","threeDSecure","vaultManager","card","cardholderName","overrides","styles","color","paypal","flow","buttonStyle","size","paypalCredit","venmo","applePay","displayName","paymentRequest","total","label","amount","requiredBillingContactFields","ENV","googlePay","googlePayVersion","merchantId","transactionInfo","totalPriceStatus","totalPrice","currencyCode","allowedPaymentMethods","billingAddressRequired","billingAddressParameters","threeDSecureConfig","givenName","user","first_name","surname","last_name","billingAddress","getUserSources","sourcesOfUser","dispatchCustomEvent","CustomEvent","detail","dispatchEvent","storage","localStorage","setItem","isDelete","getItem","removeItem","isFormValid","$form","formParsley","deleteGetParamFromUrl","pathname","isThreeDSecureCanceled","payload","liabilityShifted","isThreeDSecurePassed","processingPlurals","singular","plural","numberNum","toggleMarkWorksheetAsDone","worksheetId","isPostMethod","toggleAddWorksheetToFavorite","redirectToCompleteOnlineInTGC","slug","queryParams","baseUrl","showJoinKidsAcademyModal","checkStorage","teacherQueryParams","parentQueryParams","analyticEventType","$joinKidsacademyForFreeModal","teacher","student","initialTeacherHref","initialParentHref","initialTarget","isFinished","updateWorksheetDownloadCount","shouldDownloadBeCounted","count","isAbleToDownload","worksheetLastDownloadDate","nowTimestamp","downloadWorksheetHandler","utm","btnDataSelectorValue","hasValidParentSubscription","worksheetSlug","isLoggedIn","websiteAccountType","activityId","activityType","page","params","substring","redirectToTgcWithOpenActivityParams","isWebGamesPage","$contactUsForm","contactUsFormSubmitBtn","$contactUsFormSubmitBtn","$contactUsModal","$contactUsSuccessModal","$contactUsErrorModal","formValidation","clearFields","$inputs","$textareas","hideContactUsModal","submitForm","formDataArr","serializeArray","feedback_type","device_page","device_browser","device_os","platform","previous_page","referrer","time","screen_resolution","screen","getContactFormData","contentType","MSInputMethodContext","documentMode","adsBannerModal","adsBannerModalClose","htmx","$worksheetItem","parentSubscriptionPastDueUntil","parentSignUpUrl","teacherSignUpUrl","parentSignUpModal","ajaxSetup","cache","beforeSend","csrfToken","setRequestHeader","sayswho","N","ua","role","Qs","queryObject","doRedirectsOnPageLoad","browserName","browserVersion","$mainBanner","mainBannerImgUrl","$pictureElement","$imgElementForIE","handleMainBannerImageLoad","selectParentTab","selectTeacherTab","predicate","list","thisArg","findIndex","$bottomAdsense","$footer","$plansModal","mobileFilterOverlay","filterCloseBtn","fadeOut","$loginPage","$logInModal","$kindsAcademyCom","noRedirectAttrName","schoolLoginForm","familyLoginForm","specialInputSelector","loginEmailInput","loginPasswordInput","$loginError","tabId","$resetForm","$mainMenuNavbar","$mainMenuDropdown","$appDropdownToggle","$appDropdownMenu","$appDropdown","openTabByGetParam","accountType","setEmailFromGetParam","providedEmail","handleLoginRedirectError","resetParsleyErrors","form","initLoginTooltip","toggleFormLoading","$submitBtn","hideLoginFormError","handleLoginError","$errorBlock","tabName","redirect_url","error_code","subject","password","loginParsleyForm","username","fwdUrl","reload","coupon","nextParam","nextUrl","origin","couponGetParam","has_parent_subscription","nextPath","emailParam","btoa","getParams","noNeedToRedirectFlag","matchMedia","matches","slideToggle","$curURL","$appLinkHref","initAppsDropdown","$linkHref","getActivePointAppDropdownMenu","$document","addsFreeModalBtnClicked","$timer","formatNumberForDisplay","toLocaleString","minimumIntegerDigits","setTimerValue","secondsInterval","fullDaysLeft","fullHoursLeft","fullMinsLeft","secondsLeft","seconds","hoursRemain","minsRemain","secondsToDhms","timerData","timerSectionAttr","entries","timerElement","timerExpires","timerExpiresDate","timerInterval","dateFrom","dateUntil","dateFromToUTC","dateDiffUTC","countdown","setTimer","backTop","pageYOffset","pushState","notification","$notificationDropdown","notificationMarkAsRead","$notificationContainer","$notificationActiveIcon","$notificationInActiveIcon","accSettingsMessagesBtn","$messagesContentList","messagePreviewText","$messagePreviewList","messageIdDataAttr","markAllAsReadBtn","messageBackBtn","$messageTopTitle","messageReadClassName","markMessageAsReadOnUI","messageId","currentMessageSelector","$messagePreviewItem","$headerMessageItem","sendMessagesReadRequest","messageIdsArray","ids","has_unread_messages","makeNotificationIconInactive","updateUrlWithMessageIdGetParam","newUrl","notReadMessagesIdsArray","$messageTextItem","$messageContentItem","$messageContentAllItems","$messageLink","showMessageById","$notReadPreviewMessageItems","openMessageOnPageLoad","toggleApplyCouponBtn","couponInput","applyCouponBtn","couponBlockParams","emptyCouponClass","handleDropinToken","errorHandler","token","getSelectedOfferDetails","selectedOffer","amountOff","planAttr","userEmail","offerPeriod","backUrl","offerPeriodDisplay","planPeriod","planFullPrice","toFixed","planPriceWithDiscount","planFormattedNewPrice","planSlug","planBackUrl","planPeriodDisplay","getTotalPricesInCents","planFullPriceInCents","isTrialActive","isEbloxAdded","activeCoupon","shippingCountriesSelect","mainSubscriptionPriceInCents","subscriptionPriceInCents","ebloxAndShippingPriceInCents","totalPriceInCents","getShippingPriceInCents","ebloxAddonPrice","amountPriceInCents","priceAfterDiscount","priceFor3DSecure","threeDSecurePrice","threeDSecurePriceAfterDiscount","getPriceFor3ds","getCurrencyPrice","priceInCents","monetizationPopupsSelector","isWorksheetDownloadAvailable","closePopupTextBtn","downloadText","downloadLink","isPopupAutoplay","$planPeriod","$planFullPrice","$planTrialPeriod","$planDiscountRow","$planTrialRow","$planDiscount","$planTotalPrice","$planRenewCondition","section","isTrialRadioEnabled","trialDuration","submitText","isCouponEnabled","$subscriptionStep","monetizationPopupContentSelector","$monetizationPopupContent","isSubscriptionKind","braintreeDropinSelector","hiddenInputSelect","$subscriptionError","$submitPaymentBtn","isSubscriptionStep","$actionElementToShow","$firstKindVideoStep","$firstKindPurchaseStep","firstKindPlan","firstKindGoToPaymentStepBtn","$firstKindGoToPaymentStepBtn","prevSectionButton","$prevSectionButton","$openModal","ableToGetTrial","dropinTokenCallback","preparePuschaseStep","selectSection","sectionId","prepareFirstSectionUI","prepareSecondSectionUI","offer","planTrialPeriod","isTrialEnabled","renderSelectedOfferDetails","getTotalPrices","setTotalPriceToUI","dropinContainerId","initBraintreeDropin","currencyPrice","isBraintreeInitilazing","braintree","totalPriceInDollars","braintreeConf","dropin","createErr","isPaymentMethodRequestable","priceFor3DSecureStr","threeDSecureConf","requestPaymentMethod","requestPaymentMethodErr","clearSelectedPaymentMethod","post","payment_method_nonce","nonce","plan_slug","discount_id","trial_enabled","triggerGAEventOnCheckout","triggerAnalyticsOnCheckout","getScript","account_type","need_to_login","medium","campaign","defineFirstKind","popupDialogSelector","subscriptionFirstStepClass","$videoStep","checkoutTextAttr","trial","noTrial","$firstSection","$secondSection","planInput","selectedPlanInput","goToPaymentStepBtn","$goToPaymentStepBtn","toggleCouponBlockBtn","$toggleCouponBlockBtn","$couponBlock","$couponInputSection","$couponForm","$couponInput","applyCoupon","$applyCoupon","$couponError","removeCoupon","$removeCoupon","$couponMessage","$licenseActivationCodeModal","activeClass","showCouponText","hideCouponText","isSpecialCouponApplied","specialCouponTrialDuration","removedSubscriptions","toggleIsCouponInputSection","setCheckoutBtnTitleNew","checkoutBtnTitle","checkCouponApplicability","isInvalid","prepareSecondStep","triggerAnalyticsSubmit","trim","doCheckIsCouponDistributorCode","amount_off","exclude_subscriptions","has_trial","trial_duration","isCouponValid","description","setCheckoutBtnTitle","errorObject","couponBlock","toggleCouponBlock","$popupPlanInput","onSubscriptionStepLoad","defineSubscriptionStep","$blogSubscriptionPopup","$blogSubscriptionPopupSubscribe","$blogSubscriptionPopupSuccess","blogSubscriptionPopupSubmit","$blogSubscriptionPopupSubmit","$blogSubscriptionPopupForm","$blogSubscriptionPopupInput","currentDate","currDate","currMonth","showPopup","popupDisplayCounter","setPopupDisplayParams","blogSubscriptionPopupFormParsley","subscribeEmail","list_name","email_address","REF_LANDIN","submitSubscriptionForm","$websitePlansModal","isSuccessStepShown","adFreeSubscription","planBtn","braintreeDropin","braintreeDropinInstance","$plansContainer","$purchaseContainer","backToPlansBtn","$backToPlansBtn","$websitePlansModalTitle","defaultModalTitle","isTwoPlansModal","$goToPaymentBtn","$buySubscriptionSuccessStep","$subtitle","trialDurationAttr","priceAttr","successStepActive","$fullPrice","$trialValue","$trialRow","$todayPrice","$renewCondition","twoPlansClassName","$plansModalLoading","$plansModalContent","toggleWebsitePlansLoading","showWebsitePlansNoFreePopup","isDefaultTitle","redirect","actionType","goToCompleteOnlineInTgc","can_download_pdf","handleCompleteOnline","errorResp","getTotalPriceInCents","goToPaymentErrorHandler","planPrice","planPriceString","trialDurationString","renderSecondStepUI","onDismissPlansModal","worksheetUtm","skipOnboarding","redirectToTgcWithOpenWorksheetParams","teardown","isSignUpComplete","isPromo","subtitle","showSignUpModal","isWebsitePlansModalShow","HAS_PARENT_SUBSCRIPTION","isWebsitePlans","isWebsitePlansExists","onPageLoad","termsCheckbox","formSubmitBtn","$formError","$registrationModalSubmitBtn","$termsCheckbox","googleCaptchaToken","onRecaptchaExpire","getPayload","website_account_type","loadRecaptcha","isChecked","expiredCallback","captchaDataSelector","onRECAPTCHAloadCallback","grecaptcha","render","RECAPTCHA_SITE_KEY","script","initGoogleRecaptcha","$regForm","parsleyForm","websitePlanSlug","promoPlanSlug","hidePlaceholderClass","$socialIconRow","$socialTable","$window","$story","commentSent","commentTextarea","commentNameInput","commentSendButton","categoryDropDownContent","categoryDropDownTitle","requestSent","loadComments","storytimeId","headers","Accept","commentsHTML","setSocialButtonsPosition","setSocialButtonsVisibility","windowHeight","socialIconPosition","fadeIn","selectedCategory","categoryItem","setActiveCategoryToDropdownTitle","$commentForm","commentText","author_name","storytime","commentId","$textarea","$currentBlogPost","$likeButton","$likeCount","storyTimeId","activeCassName","changeLikesForArticle","$dropDown","$dropDownContent","toggleCategoryDropdown","activeClassName","openClassName","spinnerSelector","articleContainer","relatedLinksContainer","breadcrumbs","$currentCategoryItem","buildUrl","updatePageUrl","partial","$newPage","newBreadcrumbs","newArticle","$relatedLinks","newRelatedLinks","newTitle","newMetaTitle","updateArticle","objectFitImages"],"mappings":"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","file":"material-detail_js.js","sourcesContent":["$(document).ready(() => {\n  const $mainBannerCarousel = $('[data-selector=\"main-banner-slider\"]');\n\n  if (!$mainBannerCarousel || !$mainBannerCarousel.length) return;\n\n  const $mainBannerContent = $('[data-selector=\"main-banner-content\"]');\n\n  // callback for the first time Slick initializes\n  $mainBannerCarousel.on('init', () => {\n    $mainBannerContent.removeClass('_loading');\n    $mainBannerCarousel.show();\n  });\n\n  $mainBannerCarousel.not('.slick-initialized').slick({\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    autoplay: true,\n    autoplaySpeed: 5000,\n    swipeToSlide: true,\n    adaptiveHeight: true\n  });\n});\n","$(function () {\n  window.Parsley.addValidator('password', {\n    requirementType: 'string',\n    validateString: function (value) {\n      const regex = new RegExp('(?=.*[a-zA-Z])(\\w*)(?=.{6,})');\n      return regex.test(value);\n    },\n    messages: {\n      en: 'Password should be at least 6 characters long and have 1 letter'\n    }\n  });\n\n\n  window.Parsley.addValidator('cardholderName', {\n    requirementType: 'string',\n    validateString: function (value) {\n      const regex = /\\w+\\s\\w+/;\n      return regex.test(value);\n    },\n    messages: {\n      en: 'Please provide cardholder\\'s first and last names'\n    }\n  });\n});\n","$(document).ready(() => {\n  const monetizationPopupsSelector = '[data-selector=\"monetization-popup\"]';\n  const $monetizationPopups = $(monetizationPopupsSelector);\n  const $advertisingContainer = $('[data-selector=\"storytime-advertising-container\"]');\n  if (!$monetizationPopups.length) {\n    $advertisingContainer.html('');\n    return;\n  }\n\n  const advertisingTargetPopupIdAttr = 'data-target-popup-id';\n  const advertisingGifUrlAttr = 'data-gif-url';\n  const advertisingImgUrlAttr = 'data-img-url';\n  const advertisingClassModifier = '_advertising';\n  const advertisingContentOverlayHiddenClass = '_hidden';\n  const goToPaymentBtnAttrValue = 'advertising-go-to-checkout-btn';\n  const advertisingGoToPaymentBtnSelector = `[data-selector=${goToPaymentBtnAttrValue}]`;\n  const firstKindVideoStepSelector = '[data-selector=\"first-kind-video-step\"]';\n  const advertisingGifSelector = '[data-selector=\"advertising-media-gif\"]';\n  const advertisingImgSelector = '[data-selector=\"advertising-media-img\"]';\n  const advertisingContentOverlaySelector = '[data-selector=\"advertising-overlay\"]';\n\n  /* eslint-disable max-len */\n  const defaultGifUrl = `${window.STATIC_URL}images/storytime-advertising/default-storytime-advertising.gif`;\n  const defaultImgUrl = `${window.STATIC_URL}images/storytime-advertising/default-storytime-advertising.png`;\n  /* eslint-enable */\n\n  // target monetization popup\n  const popupIdAttr = 'data-popup-id';\n  const targetPopupAdvertisingContent = '[data-selector=\"popup-advertising-content\"]';\n  const mediaContentSelector = '[data-selector=\"media-content\"]';\n  const mediaBlockSelector = '[data-selector=\"media-block\"]';\n  const goToPaymentBtnSelector = '[data-selector=\"first-kind-go-to-checkout-btn\"]';\n  const monetizationPopupContentSelector = '[data-selector=\"monetization-popup-content\"]';\n  const $popupTransitionLoader = $('[data-selector=\"monetization-popup-transition-loader\"]');\n  const subscriptionStepClass = '_subscription-step';\n\n\n  const createAdvertisingContent = (gifUrl, imgUrl) => {\n    return $(`<img class=\"story-time-advertising__media-content\"\n                   data-selector=\"advertising-media-gif\"\n                   src=${gifUrl}>\n              <img class=\"story-time-advertising__media-content\"\n                   data-selector=\"advertising-media-img\"\n                   src=${imgUrl}\n                   style=\"display: none\">\n              <div data-selector=\"advertising-overlay\"\n                   class=\"story-time-advertising__media-overlay _hidden\"\n              ></div>`);\n  };\n\n  const createAdvertisingControls = () => {\n    /* eslint-disable max-len */\n    return $(`<div class=\"story-time-advertising__media-controls\">\n                <svg width=\"17\" height=\"18\" viewBox=\"0 0 17 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M0 0.680011V17.3196C0 17.837 0.563778 18.1648 1.02368 17.914L16.3104 9.59461C16.7854 9.33588 16.7854 8.66373 16.3104 8.40588L1.02368 0.0865212C0.563778 -0.16521 0 0.162564 0 0.680011Z\" fill=\"#333333\"/>\n                </svg>\n                <span class=\"story-time-advertising__media-controls-timer\">2:10</span>\n                <svg width=\"26\" height=\"18\" viewBox=\"0 0 26 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M11.5146 0.235013L6.57287 4.74423C6.40778 4.89391 6.19316 4.97756 5.97083 4.97756H1.14794C0.513986 4.97756 0 5.49154 0 6.1255V11.874C0 12.508 0.513986 13.022 1.14794 13.022H5.97083C6.19316 13.022 6.40888 13.1056 6.57287 13.2553L11.5146 17.7645C12.0881 18.2884 13.0104 17.8812 13.0104 17.1041V0.895382C13.0104 0.118348 12.0892 -0.287779 11.5146 0.235013Z\" fill=\"#333333\"/>\n                  <path d=\"M24.881 13.0034L24.5805 13.3038C24.2944 13.59 23.831 13.59 23.5449 13.3038L16.2742 6.03319C15.988 5.74703 15.988 5.28367 16.2742 4.99751L16.5747 4.69704C16.8608 4.41088 17.3242 4.41088 17.6103 4.69704L24.881 11.9677C25.1661 12.2539 25.1661 12.7183 24.881 13.0034Z\" fill=\"#333333\"/>\n                  <path d=\"M16.5717 13.3038L16.2713 13.0034C15.9851 12.7172 15.9851 12.2539 16.2713 11.9677L23.5419 4.69704C23.8281 4.41088 24.2914 4.41088 24.5776 4.69704L24.8781 4.99751C25.1642 5.28367 25.1642 5.74703 24.8781 6.03319L17.6074 13.3038C17.3212 13.59 16.8579 13.59 16.5717 13.3038Z\" fill=\"#333333\"/>\n                </svg>\n              </div>`);\n    /* eslint-enable */\n  };\n\n  const transformAdvertisingContent = ($advertisingContentContainer) => {\n    $advertisingContentContainer.addClass(advertisingClassModifier);\n    const gifUrl = $advertisingContainer.attr(advertisingGifUrlAttr) || defaultGifUrl;\n    const imgUrl = $advertisingContainer.attr(advertisingImgUrlAttr) || defaultImgUrl;\n    const $advertisingContent = createAdvertisingContent(gifUrl, imgUrl);\n    const $advertisingControls = createAdvertisingControls();\n\n    const $mediaContentContainer = $advertisingContentContainer.find(mediaContentSelector);\n    $mediaContentContainer.html($advertisingContent);\n    const $mediaBlock = $advertisingContentContainer.find(mediaBlockSelector);\n    $mediaBlock.append($advertisingControls);\n\n    const $links = $advertisingContentContainer.find('[data-selector=\"monetization-popup-link\"]');\n    $links.each((i, elem) => {\n      const ga = $(elem).attr('onclick');\n      if (ga.includes('Appstore Link')) {\n        $(elem).attr(\n          'onclick',\n          'ga(\"send\", \"event\", \"TG_Banner_Blog\", \"Appstore Link\", \"Click\");'\n        );\n      } else if (ga.includes('Google Link')) {\n        $(elem).attr(\n          'onclick',\n          'ga(\"send\", \"event\", \"TG_Banner_Blog\", \"Google Link\", \"Click\");'\n        );\n      }\n    });\n\n    const $goToPaymentBtn = $advertisingContentContainer.find(goToPaymentBtnSelector);\n    $goToPaymentBtn.attr('data-selector', goToPaymentBtnAttrValue);\n  };\n\n  const handleAdvertisingEvents = ($targetPopup) => {\n    const $mediaBlock = $advertisingContainer.find(mediaBlockSelector);\n    const $targetPopupContent = $targetPopup.find(monetizationPopupContentSelector);\n\n    $(document)\n      .on('click', mediaBlockSelector, () => {\n        ga('send', 'event', 'TG_Banner_Blog', 'GIF Link', 'Click');\n        $targetPopup.modal('show');\n      })\n      .on('click', advertisingGoToPaymentBtnSelector, () => {\n        ga('send', 'event', 'TG_Banner_Blog', 'Plan Link', 'Click');\n\n        $targetPopupContent.addClass(subscriptionStepClass);\n        $popupTransitionLoader.show();\n        const $firstKindVideoStep = $targetPopup.find(firstKindVideoStepSelector);\n        $firstKindVideoStep.hide();\n        const $goToPaymentBtnSelector = $targetPopup.find(goToPaymentBtnSelector);\n        $goToPaymentBtnSelector.click();\n        $targetPopup.modal('show');\n      });\n\n    $mediaBlock.hover(mouseHoverHandler.bind(this, 'in'), mouseHoverHandler.bind(this, 'out'));\n    $targetPopup.on('show.bs.modal', () => {\n      ga('send', 'event', 'TG_Banner_Blog', 'PopUp Banner Shown', 'Shown');\n    });\n    $targetPopup.on('hide.bs.modal', () => {\n      $targetPopupContent.removeClass(subscriptionStepClass);\n    });\n    $(advertisingGifSelector).error((e) => $(e.target).attr('src', defaultGifUrl));\n    $(advertisingImgSelector).error((e) => $(e.target).attr('src', defaultImgUrl));\n  };\n\n  const defineTargetPopup = (targetPopupId) => {\n    const $targetPopup = $monetizationPopups\n      .filter((i, popup) => $(popup).attr(popupIdAttr) === targetPopupId);\n\n    return $targetPopup.length ? $targetPopup : null;\n  };\n\n  const embedAdvertisingContent = () => {\n    const targetPopupId = $advertisingContainer.attr(advertisingTargetPopupIdAttr);\n    const $targetPopup = defineTargetPopup(targetPopupId);\n    if (!$targetPopup || !$targetPopup.length) {\n      $advertisingContainer.html('');\n      return;\n    }\n\n    const contentToEmbed = $targetPopup.find(targetPopupAdvertisingContent).html();\n    $advertisingContainer.html(contentToEmbed);\n\n    transformAdvertisingContent($advertisingContainer);\n    handleAdvertisingEvents($targetPopup);\n  };\n\n  const mouseHoverHandler = (direction, event) => {\n    const $targetMediaBlock = $(event.target).closest(mediaBlockSelector);\n    const $advertisingContentOverlay = $targetMediaBlock.find(advertisingContentOverlaySelector);\n    $advertisingContentOverlay.toggleClass(advertisingContentOverlayHiddenClass);\n    const $advertisingGif = $targetMediaBlock.find(advertisingGifSelector);\n    const $advertisingImg = $targetMediaBlock.find(advertisingImgSelector);\n\n    if (direction === 'in') {\n      $advertisingGif.hide();\n      $advertisingImg.show();\n      return;\n    }\n\n    $advertisingImg.hide();\n    $advertisingGif.show();\n  };\n\n  embedAdvertisingContent();\n});\n","// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')","/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml)\n    }\n\n    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","/*!\n* Parsley.js\n* Version 2.8.0 - built Wed, Sep 13th 2017, 11:04 pm\n* http://parsleyjs.org\n* Guillaume Potier - <guillaume@wisembly.com>\n* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>\n* MIT Licensed\n*/\n\n// The source code below is generated by babel as\n// Parsley is written in ECMAScript 6\n//\nvar _slice = Array.prototype.slice;\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : global.parsley = factory(global.jQuery);\n})(this, function ($) {\n  'use strict';\n\n  var globalID = 1;\n  var pastWarnings = {};\n\n  var Utils = {\n    // Parsley DOM-API\n    // returns object from dom attributes and values\n    attr: function attr(element, namespace, obj) {\n      var i;\n      var attribute;\n      var attributes;\n      var regex = new RegExp('^' + namespace, 'i');\n\n      if ('undefined' === typeof obj) obj = {};else {\n        // Clear all own properties. This won't affect prototype's values\n        for (i in obj) {\n          if (obj.hasOwnProperty(i)) delete obj[i];\n        }\n      }\n\n      if (!element) return obj;\n\n      attributes = element.attributes;\n      for (i = attributes.length; i--;) {\n        attribute = attributes[i];\n\n        if (attribute && attribute.specified && regex.test(attribute.name)) {\n          obj[this.camelize(attribute.name.slice(namespace.length))] = this.deserializeValue(attribute.value);\n        }\n      }\n\n      return obj;\n    },\n\n    checkAttr: function checkAttr(element, namespace, _checkAttr) {\n      return element.hasAttribute(namespace + _checkAttr);\n    },\n\n    setAttr: function setAttr(element, namespace, attr, value) {\n      element.setAttribute(this.dasherize(namespace + attr), String(value));\n    },\n\n    getType: function getType(element) {\n      return element.getAttribute('type') || 'text';\n    },\n\n    generateID: function generateID() {\n      return '' + globalID++;\n    },\n\n    /** Third party functions **/\n    deserializeValue: function deserializeValue(value) {\n      var num;\n\n      try {\n        return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : !isNaN(num = Number(value)) ? num : /^[\\[\\{]/.test(value) ? JSON.parse(value) : value) : value;\n      } catch (e) {\n        return value;\n      }\n    },\n\n    // Zepto camelize function\n    camelize: function camelize(str) {\n      return str.replace(/-+(.)?/g, function (match, chr) {\n        return chr ? chr.toUpperCase() : '';\n      });\n    },\n\n    // Zepto dasherize function\n    dasherize: function dasherize(str) {\n      return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n    },\n\n    warn: function warn() {\n      var _window$console;\n\n      if (window.console && 'function' === typeof window.console.warn) (_window$console = window.console).warn.apply(_window$console, arguments);\n    },\n\n    warnOnce: function warnOnce(msg) {\n      if (!pastWarnings[msg]) {\n        pastWarnings[msg] = true;\n        this.warn.apply(this, arguments);\n      }\n    },\n\n    _resetWarnings: function _resetWarnings() {\n      pastWarnings = {};\n    },\n\n    trimString: function trimString(string) {\n      return string.replace(/^\\s+|\\s+$/g, '');\n    },\n\n    parse: {\n      date: function date(string) {\n        var parsed = string.match(/^(\\d{4,})-(\\d\\d)-(\\d\\d)$/);\n        if (!parsed) return null;\n\n        var _parsed$map = parsed.map(function (x) {\n          return parseInt(x, 10);\n        });\n\n        var _parsed$map2 = _slicedToArray(_parsed$map, 4);\n\n        var _ = _parsed$map2[0];\n        var year = _parsed$map2[1];\n        var month = _parsed$map2[2];\n        var day = _parsed$map2[3];\n\n        var date = new Date(year, month - 1, day);\n        if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) return null;\n        return date;\n      },\n      string: function string(_string) {\n        return _string;\n      },\n      integer: function integer(string) {\n        if (isNaN(string)) return null;\n        return parseInt(string, 10);\n      },\n      number: function number(string) {\n        if (isNaN(string)) throw null;\n        return parseFloat(string);\n      },\n      'boolean': function _boolean(string) {\n        return !/^\\s*false\\s*$/i.test(string);\n      },\n      object: function object(string) {\n        return Utils.deserializeValue(string);\n      },\n      regexp: function regexp(_regexp) {\n        var flags = '';\n\n        // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern\n        if (/^\\/.*\\/(?:[gimy]*)$/.test(_regexp)) {\n          // Replace the regexp literal string with the first match group: ([gimy]*)\n          // If no flag is present, this will be a blank string\n          flags = _regexp.replace(/.*\\/([gimy]*)$/, '$1');\n          // Again, replace the regexp literal string with the first match group:\n          // everything excluding the opening and closing slashes and the flags\n          _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');\n        } else {\n          // Anchor regexp:\n          _regexp = '^' + _regexp + '$';\n        }\n        return new RegExp(_regexp, flags);\n      }\n    },\n\n    parseRequirement: function parseRequirement(requirementType, string) {\n      var converter = this.parse[requirementType || 'string'];\n      if (!converter) throw 'Unknown requirement specification: \"' + requirementType + '\"';\n      var converted = converter(string);\n      if (converted === null) throw 'Requirement is not a ' + requirementType + ': \"' + string + '\"';\n      return converted;\n    },\n\n    namespaceEvents: function namespaceEvents(events, namespace) {\n      events = this.trimString(events || '').split(/\\s+/);\n      if (!events[0]) return '';\n      return $.map(events, function (evt) {\n        return evt + '.' + namespace;\n      }).join(' ');\n    },\n\n    difference: function difference(array, remove) {\n      // This is O(N^2), should be optimized\n      var result = [];\n      $.each(array, function (_, elem) {\n        if (remove.indexOf(elem) == -1) result.push(elem);\n      });\n      return result;\n    },\n\n    // Alter-ego to native Promise.all, but for jQuery\n    all: function all(promises) {\n      // jQuery treats $.when() and $.when(singlePromise) differently; let's avoid that and add spurious elements\n      return $.when.apply($, _toConsumableArray(promises).concat([42, 42]));\n    },\n\n    // Object.create polyfill, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill\n    objectCreate: Object.create || (function () {\n      var Object = function Object() {};\n      return function (prototype) {\n        if (arguments.length > 1) {\n          throw Error('Second argument not supported');\n        }\n        if (typeof prototype != 'object') {\n          throw TypeError('Argument must be an object');\n        }\n        Object.prototype = prototype;\n        var result = new Object();\n        Object.prototype = null;\n        return result;\n      };\n    })(),\n\n    _SubmitSelector: 'input[type=\"submit\"], button:submit'\n  };\n\n  // All these options could be overriden and specified directly in DOM using\n  // `data-parsley-` default DOM-API\n  // eg: `inputs` can be set in DOM using `data-parsley-inputs=\"input, textarea\"`\n  // eg: `data-parsley-stop-on-first-failing-constraint=\"false\"`\n\n  var Defaults = {\n    // ### General\n\n    // Default data-namespace for DOM API\n    namespace: 'data-parsley-',\n\n    // Supported inputs by default\n    inputs: 'input, textarea, select',\n\n    // Excluded inputs by default\n    excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]',\n\n    // Stop validating field on highest priority failing constraint\n    priorityEnabled: true,\n\n    // ### Field only\n\n    // identifier used to group together inputs (e.g. radio buttons...)\n    multiple: null,\n\n    // identifier (or array of identifiers) used to validate only a select group of inputs\n    group: null,\n\n    // ### UI\n    // Enable\\Disable error messages\n    uiEnabled: true,\n\n    // Key events threshold before validation\n    validationThreshold: 3,\n\n    // Focused field on form validation error. 'first'|'last'|'none'\n    focus: 'first',\n\n    // event(s) that will trigger validation before first failure. eg: `input`...\n    trigger: false,\n\n    // event(s) that will trigger validation after first failure.\n    triggerAfterFailure: 'input',\n\n    // Class that would be added on every failing validation Parsley field\n    errorClass: 'parsley-error',\n\n    // Same for success validation\n    successClass: 'parsley-success',\n\n    // Return the `$element` that will receive these above success or error classes\n    // Could also be (and given directly from DOM) a valid selector like `'#div'`\n    classHandler: function classHandler(Field) {},\n\n    // Return the `$element` where errors will be appended\n    // Could also be (and given directly from DOM) a valid selector like `'#div'`\n    errorsContainer: function errorsContainer(Field) {},\n\n    // ul elem that would receive errors' list\n    errorsWrapper: '<ul class=\"parsley-errors-list\"></ul>',\n\n    // li elem that would receive error message\n    errorTemplate: '<li></li>'\n  };\n\n  var Base = function Base() {\n    this.__id__ = Utils.generateID();\n  };\n\n  Base.prototype = {\n    asyncSupport: true, // Deprecated\n\n    _pipeAccordingToValidationResult: function _pipeAccordingToValidationResult() {\n      var _this = this;\n\n      var pipe = function pipe() {\n        var r = $.Deferred();\n        if (true !== _this.validationResult) r.reject();\n        return r.resolve().promise();\n      };\n      return [pipe, pipe];\n    },\n\n    actualizeOptions: function actualizeOptions() {\n      Utils.attr(this.element, this.options.namespace, this.domOptions);\n      if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions();\n      return this;\n    },\n\n    _resetOptions: function _resetOptions(initOptions) {\n      this.domOptions = Utils.objectCreate(this.parent.options);\n      this.options = Utils.objectCreate(this.domOptions);\n      // Shallow copy of ownProperties of initOptions:\n      for (var i in initOptions) {\n        if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i];\n      }\n      this.actualizeOptions();\n    },\n\n    _listeners: null,\n\n    // Register a callback for the given event name\n    // Callback is called with context as the first argument and the `this`\n    // The context is the current parsley instance, or window.Parsley if global\n    // A return value of `false` will interrupt the calls\n    on: function on(name, fn) {\n      this._listeners = this._listeners || {};\n      var queue = this._listeners[name] = this._listeners[name] || [];\n      queue.push(fn);\n\n      return this;\n    },\n\n    // Deprecated. Use `on` instead\n    subscribe: function subscribe(name, fn) {\n      $.listenTo(this, name.toLowerCase(), fn);\n    },\n\n    // Unregister a callback (or all if none is given) for the given event name\n    off: function off(name, fn) {\n      var queue = this._listeners && this._listeners[name];\n      if (queue) {\n        if (!fn) {\n          delete this._listeners[name];\n        } else {\n          for (var i = queue.length; i--;) if (queue[i] === fn) queue.splice(i, 1);\n        }\n      }\n      return this;\n    },\n\n    // Deprecated. Use `off`\n    unsubscribe: function unsubscribe(name, fn) {\n      $.unsubscribeTo(this, name.toLowerCase());\n    },\n\n    // Trigger an event of the given name\n    // A return value of `false` interrupts the callback chain\n    // Returns false if execution was interrupted\n    trigger: function trigger(name, target, extraArg) {\n      target = target || this;\n      var queue = this._listeners && this._listeners[name];\n      var result;\n      var parentResult;\n      if (queue) {\n        for (var i = queue.length; i--;) {\n          result = queue[i].call(target, target, extraArg);\n          if (result === false) return result;\n        }\n      }\n      if (this.parent) {\n        return this.parent.trigger(name, target, extraArg);\n      }\n      return true;\n    },\n\n    asyncIsValid: function asyncIsValid(group, force) {\n      Utils.warnOnce(\"asyncIsValid is deprecated; please use whenValid instead\");\n      return this.whenValid({ group: group, force: force });\n    },\n\n    _findRelated: function _findRelated() {\n      return this.options.multiple ? $(this.parent.element.querySelectorAll('[' + this.options.namespace + 'multiple=\"' + this.options.multiple + '\"]')) : this.$element;\n    }\n  };\n\n  var convertArrayRequirement = function convertArrayRequirement(string, length) {\n    var m = string.match(/^\\s*\\[(.*)\\]\\s*$/);\n    if (!m) throw 'Requirement is not an array: \"' + string + '\"';\n    var values = m[1].split(',').map(Utils.trimString);\n    if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';\n    return values;\n  };\n\n  var convertExtraOptionRequirement = function convertExtraOptionRequirement(requirementSpec, string, extraOptionReader) {\n    var main = null;\n    var extra = {};\n    for (var key in requirementSpec) {\n      if (key) {\n        var value = extraOptionReader(key);\n        if ('string' === typeof value) value = Utils.parseRequirement(requirementSpec[key], value);\n        extra[key] = value;\n      } else {\n        main = Utils.parseRequirement(requirementSpec[key], string);\n      }\n    }\n    return [main, extra];\n  };\n\n  // A Validator needs to implement the methods `validate` and `parseRequirements`\n\n  var Validator = function Validator(spec) {\n    $.extend(true, this, spec);\n  };\n\n  Validator.prototype = {\n    // Returns `true` iff the given `value` is valid according the given requirements.\n    validate: function validate(value, requirementFirstArg) {\n      if (this.fn) {\n        // Legacy style validator\n\n        if (arguments.length > 3) // If more args then value, requirement, instance...\n          requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest\n        return this.fn(value, requirementFirstArg);\n      }\n\n      if (Array.isArray(value)) {\n        if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values';\n        return this.validateMultiple.apply(this, arguments);\n      } else {\n        var instance = arguments[arguments.length - 1];\n        if (this.validateDate && instance._isDateInput()) {\n          arguments[0] = Utils.parse.date(arguments[0]);\n          if (arguments[0] === null) return false;\n          return this.validateDate.apply(this, arguments);\n        }\n        if (this.validateNumber) {\n          if (isNaN(value)) return false;\n          arguments[0] = parseFloat(arguments[0]);\n          return this.validateNumber.apply(this, arguments);\n        }\n        if (this.validateString) {\n          return this.validateString.apply(this, arguments);\n        }\n        throw 'Validator `' + this.name + '` only handles multiple values';\n      }\n    },\n\n    // Parses `requirements` into an array of arguments,\n    // according to `this.requirementType`\n    parseRequirements: function parseRequirements(requirements, extraOptionReader) {\n      if ('string' !== typeof requirements) {\n        // Assume requirement already parsed\n        // but make sure we return an array\n        return Array.isArray(requirements) ? requirements : [requirements];\n      }\n      var type = this.requirementType;\n      if (Array.isArray(type)) {\n        var values = convertArrayRequirement(requirements, type.length);\n        for (var i = 0; i < values.length; i++) values[i] = Utils.parseRequirement(type[i], values[i]);\n        return values;\n      } else if ($.isPlainObject(type)) {\n        return convertExtraOptionRequirement(type, requirements, extraOptionReader);\n      } else {\n        return [Utils.parseRequirement(type, requirements)];\n      }\n    },\n    // Defaults:\n    requirementType: 'string',\n\n    priority: 2\n\n  };\n\n  var ValidatorRegistry = function ValidatorRegistry(validators, catalog) {\n    this.__class__ = 'ValidatorRegistry';\n\n    // Default Parsley locale is en\n    this.locale = 'en';\n\n    this.init(validators || {}, catalog || {});\n  };\n\n  var typeTesters = {\n    email: /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,\n\n    // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers\n    number: /^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i,\n\n    integer: /^-?\\d+$/,\n\n    digits: /^\\d+$/,\n\n    alphanum: /^\\w+$/i,\n\n    date: {\n      test: function test(value) {\n        return Utils.parse.date(value) !== null;\n      }\n    },\n\n    url: new RegExp(\"^\" +\n    // protocol identifier\n    \"(?:(?:https?|ftp)://)?\" + // ** mod: make scheme optional\n    // user:pass authentication\n    \"(?:\\\\S+(?::\\\\S*)?@)?\" + \"(?:\" +\n    // IP address exclusion\n    // private & local networks\n    // \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +   // ** mod: allow local networks\n    // \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n    // \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n    // IP address dotted notation octets\n    // excludes loopback network 0.0.0.0\n    // excludes reserved space >= 224.0.0.0\n    // excludes network & broacast addresses\n    // (first & last IP address of each class)\n    \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" + \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" + \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" + \"|\" +\n    // host name\n    '(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)' +\n    // domain name\n    '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*' +\n    // TLD identifier\n    '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))' + \")\" +\n    // port number\n    \"(?::\\\\d{2,5})?\" +\n    // resource path\n    \"(?:/\\\\S*)?\" + \"$\", 'i')\n  };\n  typeTesters.range = typeTesters.number;\n\n  // See http://stackoverflow.com/a/10454560/8279\n  var decimalPlaces = function decimalPlaces(num) {\n    var match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n    if (!match) {\n      return 0;\n    }\n    return Math.max(0,\n    // Number of digits right of decimal point.\n    (match[1] ? match[1].length : 0) - (\n    // Adjust for scientific notation.\n    match[2] ? +match[2] : 0));\n  };\n\n  // parseArguments('number', ['1', '2']) => [1, 2]\n  var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) {\n    return args.map(Utils.parse[type]);\n  };\n  // operatorToValidator returns a validating function for an operator function, applied to the given type\n  var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) {\n    return function (value) {\n      for (var _len = arguments.length, requirementsAndInput = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        requirementsAndInput[_key - 1] = arguments[_key];\n      }\n\n      requirementsAndInput.pop(); // Get rid of `input` argument\n      return operator.apply(undefined, [value].concat(_toConsumableArray(ValidatorRegistry__parseArguments(type, requirementsAndInput))));\n    };\n  };\n\n  var ValidatorRegistry__comparisonOperator = function ValidatorRegistry__comparisonOperator(operator) {\n    return {\n      validateDate: ValidatorRegistry__operatorToValidator('date', operator),\n      validateNumber: ValidatorRegistry__operatorToValidator('number', operator),\n      requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s)\n      priority: 30\n    };\n  };\n\n  ValidatorRegistry.prototype = {\n    init: function init(validators, catalog) {\n      this.catalog = catalog;\n      // Copy prototype's validators:\n      this.validators = _extends({}, this.validators);\n\n      for (var name in validators) this.addValidator(name, validators[name].fn, validators[name].priority);\n\n      window.Parsley.trigger('parsley:validator:init');\n    },\n\n    // Set new messages locale if we have dictionary loaded in ParsleyConfig.i18n\n    setLocale: function setLocale(locale) {\n      if ('undefined' === typeof this.catalog[locale]) throw new Error(locale + ' is not available in the catalog');\n\n      this.locale = locale;\n\n      return this;\n    },\n\n    // Add a new messages catalog for a given locale. Set locale for this catalog if set === `true`\n    addCatalog: function addCatalog(locale, messages, set) {\n      if ('object' === typeof messages) this.catalog[locale] = messages;\n\n      if (true === set) return this.setLocale(locale);\n\n      return this;\n    },\n\n    // Add a specific message for a given constraint in a given locale\n    addMessage: function addMessage(locale, name, message) {\n      if ('undefined' === typeof this.catalog[locale]) this.catalog[locale] = {};\n\n      this.catalog[locale][name] = message;\n\n      return this;\n    },\n\n    // Add messages for a given locale\n    addMessages: function addMessages(locale, nameMessageObject) {\n      for (var name in nameMessageObject) this.addMessage(locale, name, nameMessageObject[name]);\n\n      return this;\n    },\n\n    // Add a new validator\n    //\n    //    addValidator('custom', {\n    //        requirementType: ['integer', 'integer'],\n    //        validateString: function(value, from, to) {},\n    //        priority: 22,\n    //        messages: {\n    //          en: \"Hey, that's no good\",\n    //          fr: \"Aye aye, pas bon du tout\",\n    //        }\n    //    })\n    //\n    // Old API was addValidator(name, function, priority)\n    //\n    addValidator: function addValidator(name, arg1, arg2) {\n      if (this.validators[name]) Utils.warn('Validator \"' + name + '\" is already defined.');else if (Defaults.hasOwnProperty(name)) {\n        Utils.warn('\"' + name + '\" is a restricted keyword and is not a valid validator name.');\n        return;\n      }\n      return this._setValidator.apply(this, arguments);\n    },\n\n    hasValidator: function hasValidator(name) {\n      return !!this.validators[name];\n    },\n\n    updateValidator: function updateValidator(name, arg1, arg2) {\n      if (!this.validators[name]) {\n        Utils.warn('Validator \"' + name + '\" is not already defined.');\n        return this.addValidator.apply(this, arguments);\n      }\n      return this._setValidator.apply(this, arguments);\n    },\n\n    removeValidator: function removeValidator(name) {\n      if (!this.validators[name]) Utils.warn('Validator \"' + name + '\" is not defined.');\n\n      delete this.validators[name];\n\n      return this;\n    },\n\n    _setValidator: function _setValidator(name, validator, priority) {\n      if ('object' !== typeof validator) {\n        // Old style validator, with `fn` and `priority`\n        validator = {\n          fn: validator,\n          priority: priority\n        };\n      }\n      if (!validator.validate) {\n        validator = new Validator(validator);\n      }\n      this.validators[name] = validator;\n\n      for (var locale in validator.messages || {}) this.addMessage(locale, name, validator.messages[locale]);\n\n      return this;\n    },\n\n    getErrorMessage: function getErrorMessage(constraint) {\n      var message;\n\n      // Type constraints are a bit different, we have to match their requirements too to find right error message\n      if ('type' === constraint.name) {\n        var typeMessages = this.catalog[this.locale][constraint.name] || {};\n        message = typeMessages[constraint.requirements];\n      } else message = this.formatMessage(this.catalog[this.locale][constraint.name], constraint.requirements);\n\n      return message || this.catalog[this.locale].defaultMessage || this.catalog.en.defaultMessage;\n    },\n\n    // Kind of light `sprintf()` implementation\n    formatMessage: function formatMessage(string, parameters) {\n      if ('object' === typeof parameters) {\n        for (var i in parameters) string = this.formatMessage(string, parameters[i]);\n\n        return string;\n      }\n\n      return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';\n    },\n\n    // Here is the Parsley default validators list.\n    // A validator is an object with the following key values:\n    //  - priority: an integer\n    //  - requirement: 'string' (default), 'integer', 'number', 'regexp' or an Array of these\n    //  - validateString, validateMultiple, validateNumber: functions returning `true`, `false` or a promise\n    // Alternatively, a validator can be a function that returns such an object\n    //\n    validators: {\n      notblank: {\n        validateString: function validateString(value) {\n          return (/\\S/.test(value)\n          );\n        },\n        priority: 2\n      },\n      required: {\n        validateMultiple: function validateMultiple(values) {\n          return values.length > 0;\n        },\n        validateString: function validateString(value) {\n          return (/\\S/.test(value)\n          );\n        },\n        priority: 512\n      },\n      type: {\n        validateString: function validateString(value, type) {\n          var _ref = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n          var _ref$step = _ref.step;\n          var step = _ref$step === undefined ? 'any' : _ref$step;\n          var _ref$base = _ref.base;\n          var base = _ref$base === undefined ? 0 : _ref$base;\n\n          var tester = typeTesters[type];\n          if (!tester) {\n            throw new Error('validator type `' + type + '` is not supported');\n          }\n          if (!tester.test(value)) return false;\n          if ('number' === type) {\n            if (!/^any$/i.test(step || '')) {\n              var nb = Number(value);\n              var decimals = Math.max(decimalPlaces(step), decimalPlaces(base));\n              if (decimalPlaces(nb) > decimals) // Value can't have too many decimals\n                return false;\n              // Be careful of rounding errors by using integers.\n              var toInt = function toInt(f) {\n                return Math.round(f * Math.pow(10, decimals));\n              };\n              if ((toInt(nb) - toInt(base)) % toInt(step) != 0) return false;\n            }\n          }\n          return true;\n        },\n        requirementType: {\n          '': 'string',\n          step: 'string',\n          base: 'number'\n        },\n        priority: 256\n      },\n      pattern: {\n        validateString: function validateString(value, regexp) {\n          return regexp.test(value);\n        },\n        requirementType: 'regexp',\n        priority: 64\n      },\n      minlength: {\n        validateString: function validateString(value, requirement) {\n          return value.length >= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      maxlength: {\n        validateString: function validateString(value, requirement) {\n          return value.length <= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      length: {\n        validateString: function validateString(value, min, max) {\n          return value.length >= min && value.length <= max;\n        },\n        requirementType: ['integer', 'integer'],\n        priority: 30\n      },\n      mincheck: {\n        validateMultiple: function validateMultiple(values, requirement) {\n          return values.length >= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      maxcheck: {\n        validateMultiple: function validateMultiple(values, requirement) {\n          return values.length <= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      check: {\n        validateMultiple: function validateMultiple(values, min, max) {\n          return values.length >= min && values.length <= max;\n        },\n        requirementType: ['integer', 'integer'],\n        priority: 30\n      },\n      min: ValidatorRegistry__comparisonOperator(function (value, requirement) {\n        return value >= requirement;\n      }),\n      max: ValidatorRegistry__comparisonOperator(function (value, requirement) {\n        return value <= requirement;\n      }),\n      range: ValidatorRegistry__comparisonOperator(function (value, min, max) {\n        return value >= min && value <= max;\n      }),\n      equalto: {\n        validateString: function validateString(value, refOrValue) {\n          var $reference = $(refOrValue);\n          if ($reference.length) return value === $reference.val();else return value === refOrValue;\n        },\n        priority: 256\n      }\n    }\n  };\n\n  var UI = {};\n\n  var diffResults = function diffResults(newResult, oldResult, deep) {\n    var added = [];\n    var kept = [];\n\n    for (var i = 0; i < newResult.length; i++) {\n      var found = false;\n\n      for (var j = 0; j < oldResult.length; j++) if (newResult[i].assert.name === oldResult[j].assert.name) {\n        found = true;\n        break;\n      }\n\n      if (found) kept.push(newResult[i]);else added.push(newResult[i]);\n    }\n\n    return {\n      kept: kept,\n      added: added,\n      removed: !deep ? diffResults(oldResult, newResult, true).added : []\n    };\n  };\n\n  UI.Form = {\n\n    _actualizeTriggers: function _actualizeTriggers() {\n      var _this2 = this;\n\n      this.$element.on('submit.Parsley', function (evt) {\n        _this2.onSubmitValidate(evt);\n      });\n      this.$element.on('click.Parsley', Utils._SubmitSelector, function (evt) {\n        _this2.onSubmitButton(evt);\n      });\n\n      // UI could be disabled\n      if (false === this.options.uiEnabled) return;\n\n      this.element.setAttribute('novalidate', '');\n    },\n\n    focus: function focus() {\n      this._focusedField = null;\n\n      if (true === this.validationResult || 'none' === this.options.focus) return null;\n\n      for (var i = 0; i < this.fields.length; i++) {\n        var field = this.fields[i];\n        if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) {\n          this._focusedField = field.$element;\n          if ('first' === this.options.focus) break;\n        }\n      }\n\n      if (null === this._focusedField) return null;\n\n      return this._focusedField.focus();\n    },\n\n    _destroyUI: function _destroyUI() {\n      // Reset all event listeners\n      this.$element.off('.Parsley');\n    }\n\n  };\n\n  UI.Field = {\n\n    _reflowUI: function _reflowUI() {\n      this._buildUI();\n\n      // If this field doesn't have an active UI don't bother doing something\n      if (!this._ui) return;\n\n      // Diff between two validation results\n      var diff = diffResults(this.validationResult, this._ui.lastValidationResult);\n\n      // Then store current validation result for next reflow\n      this._ui.lastValidationResult = this.validationResult;\n\n      // Handle valid / invalid / none field class\n      this._manageStatusClass();\n\n      // Add, remove, updated errors messages\n      this._manageErrorsMessages(diff);\n\n      // Triggers impl\n      this._actualizeTriggers();\n\n      // If field is not valid for the first time, bind keyup trigger to ease UX and quickly inform user\n      if ((diff.kept.length || diff.added.length) && !this._failedOnce) {\n        this._failedOnce = true;\n        this._actualizeTriggers();\n      }\n    },\n\n    // Returns an array of field's error message(s)\n    getErrorsMessages: function getErrorsMessages() {\n      // No error message, field is valid\n      if (true === this.validationResult) return [];\n\n      var messages = [];\n\n      for (var i = 0; i < this.validationResult.length; i++) messages.push(this.validationResult[i].errorMessage || this._getErrorMessage(this.validationResult[i].assert));\n\n      return messages;\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    addError: function addError(name) {\n      var _ref2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var message = _ref2.message;\n      var assert = _ref2.assert;\n      var _ref2$updateClass = _ref2.updateClass;\n      var updateClass = _ref2$updateClass === undefined ? true : _ref2$updateClass;\n\n      this._buildUI();\n      this._addError(name, { message: message, assert: assert });\n\n      if (updateClass) this._errorClass();\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    updateError: function updateError(name) {\n      var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var message = _ref3.message;\n      var assert = _ref3.assert;\n      var _ref3$updateClass = _ref3.updateClass;\n      var updateClass = _ref3$updateClass === undefined ? true : _ref3$updateClass;\n\n      this._buildUI();\n      this._updateError(name, { message: message, assert: assert });\n\n      if (updateClass) this._errorClass();\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    removeError: function removeError(name) {\n      var _ref4 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var _ref4$updateClass = _ref4.updateClass;\n      var updateClass = _ref4$updateClass === undefined ? true : _ref4$updateClass;\n\n      this._buildUI();\n      this._removeError(name);\n\n      // edge case possible here: remove a standard Parsley error that is still failing in this.validationResult\n      // but highly improbable cuz' manually removing a well Parsley handled error makes no sense.\n      if (updateClass) this._manageStatusClass();\n    },\n\n    _manageStatusClass: function _manageStatusClass() {\n      if (this.hasConstraints() && this.needsValidation() && true === this.validationResult) this._successClass();else if (this.validationResult.length > 0) this._errorClass();else this._resetClass();\n    },\n\n    _manageErrorsMessages: function _manageErrorsMessages(diff) {\n      if ('undefined' !== typeof this.options.errorsMessagesDisabled) return;\n\n      // Case where we have errorMessage option that configure an unique field error message, regardless failing validators\n      if ('undefined' !== typeof this.options.errorMessage) {\n        if (diff.added.length || diff.kept.length) {\n          this._insertErrorWrapper();\n\n          if (0 === this._ui.$errorsWrapper.find('.parsley-custom-error-message').length) this._ui.$errorsWrapper.append($(this.options.errorTemplate).addClass('parsley-custom-error-message'));\n\n          return this._ui.$errorsWrapper.addClass('filled').find('.parsley-custom-error-message').html(this.options.errorMessage);\n        }\n\n        return this._ui.$errorsWrapper.removeClass('filled').find('.parsley-custom-error-message').remove();\n      }\n\n      // Show, hide, update failing constraints messages\n      for (var i = 0; i < diff.removed.length; i++) this._removeError(diff.removed[i].assert.name);\n\n      for (i = 0; i < diff.added.length; i++) this._addError(diff.added[i].assert.name, { message: diff.added[i].errorMessage, assert: diff.added[i].assert });\n\n      for (i = 0; i < diff.kept.length; i++) this._updateError(diff.kept[i].assert.name, { message: diff.kept[i].errorMessage, assert: diff.kept[i].assert });\n    },\n\n    _addError: function _addError(name, _ref5) {\n      var message = _ref5.message;\n      var assert = _ref5.assert;\n\n      this._insertErrorWrapper();\n      this._ui.$errorsWrapper.addClass('filled').append($(this.options.errorTemplate).addClass('parsley-' + name).html(message || this._getErrorMessage(assert)));\n    },\n\n    _updateError: function _updateError(name, _ref6) {\n      var message = _ref6.message;\n      var assert = _ref6.assert;\n\n      this._ui.$errorsWrapper.addClass('filled').find('.parsley-' + name).html(message || this._getErrorMessage(assert));\n    },\n\n    _removeError: function _removeError(name) {\n      this._ui.$errorsWrapper.removeClass('filled').find('.parsley-' + name).remove();\n    },\n\n    _getErrorMessage: function _getErrorMessage(constraint) {\n      var customConstraintErrorMessage = constraint.name + 'Message';\n\n      if ('undefined' !== typeof this.options[customConstraintErrorMessage]) return window.Parsley.formatMessage(this.options[customConstraintErrorMessage], constraint.requirements);\n\n      return window.Parsley.getErrorMessage(constraint);\n    },\n\n    _buildUI: function _buildUI() {\n      // UI could be already built or disabled\n      if (this._ui || false === this.options.uiEnabled) return;\n\n      var _ui = {};\n\n      // Give field its Parsley id in DOM\n      this.element.setAttribute(this.options.namespace + 'id', this.__id__);\n\n      /** Generate important UI elements and store them in this **/\n      // $errorClassHandler is the $element that woul have parsley-error and parsley-success classes\n      _ui.$errorClassHandler = this._manageClassHandler();\n\n      // $errorsWrapper is a div that would contain the various field errors, it will be appended into $errorsContainer\n      _ui.errorsWrapperId = 'parsley-id-' + (this.options.multiple ? 'multiple-' + this.options.multiple : this.__id__);\n      _ui.$errorsWrapper = $(this.options.errorsWrapper).attr('id', _ui.errorsWrapperId);\n\n      // ValidationResult UI storage to detect what have changed bwt two validations, and update DOM accordingly\n      _ui.lastValidationResult = [];\n      _ui.validationInformationVisible = false;\n\n      // Store it in this for later\n      this._ui = _ui;\n    },\n\n    // Determine which element will have `parsley-error` and `parsley-success` classes\n    _manageClassHandler: function _manageClassHandler() {\n      // Class handled could also be determined by function given in Parsley options\n      if ('string' === typeof this.options.classHandler && $(this.options.classHandler).length) return $(this.options.classHandler);\n\n      // Class handled could also be determined by function given in Parsley options\n      var $handlerFunction = this.options.classHandler;\n\n      // It might also be the function name of a global function\n      if ('string' === typeof this.options.classHandler && 'function' === typeof window[this.options.classHandler]) $handlerFunction = window[this.options.classHandler];\n\n      if ('function' === typeof $handlerFunction) {\n        var $handler = $handlerFunction.call(this, this);\n\n        // If this function returned a valid existing DOM element, go for it\n        if ('undefined' !== typeof $handler && $handler.length) return $handler;\n      } else if ('object' === typeof $handlerFunction && $handlerFunction instanceof jQuery && $handlerFunction.length) {\n        return $handlerFunction;\n      } else if ($handlerFunction) {\n        Utils.warn('The class handler `' + $handlerFunction + '` does not exist in DOM nor as a global JS function');\n      }\n\n      return this._inputHolder();\n    },\n\n    _inputHolder: function _inputHolder() {\n      // if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container\n      if (!this.options.multiple || this.element.nodeName === 'SELECT') return this.$element;\n\n      // But if multiple element (radio, checkbox), that would be their parent\n      return this.$element.parent();\n    },\n\n    _insertErrorWrapper: function _insertErrorWrapper() {\n      var $errorsContainer = this.options.errorsContainer;\n\n      // Nothing to do if already inserted\n      if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent();\n\n      if ('string' === typeof $errorsContainer) {\n        if ($($errorsContainer).length) return $($errorsContainer).append(this._ui.$errorsWrapper);else if ('function' === typeof window[$errorsContainer]) $errorsContainer = window[$errorsContainer];else Utils.warn('The errors container `' + $errorsContainer + '` does not exist in DOM nor as a global JS function');\n      }\n\n      if ('function' === typeof $errorsContainer) $errorsContainer = $errorsContainer.call(this, this);\n\n      if ('object' === typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper);\n\n      return this._inputHolder().after(this._ui.$errorsWrapper);\n    },\n\n    _actualizeTriggers: function _actualizeTriggers() {\n      var _this3 = this;\n\n      var $toBind = this._findRelated();\n      var trigger;\n\n      // Remove Parsley events already bound on this field\n      $toBind.off('.Parsley');\n      if (this._failedOnce) $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () {\n        _this3._validateIfNeeded();\n      });else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) {\n        $toBind.on(trigger, function (event) {\n          _this3._validateIfNeeded(event);\n        });\n      }\n    },\n\n    _validateIfNeeded: function _validateIfNeeded(event) {\n      var _this4 = this;\n\n      // For keyup, keypress, keydown, input... events that could be a little bit obstrusive\n      // do not validate if val length < min threshold on first validation. Once field have been validated once and info\n      // about success or failure have been displayed, always validate with this trigger to reflect every yalidation change.\n      if (event && /key|input/.test(event.type)) if (!(this._ui && this._ui.validationInformationVisible) && this.getValue().length <= this.options.validationThreshold) return;\n\n      if (this.options.debounce) {\n        window.clearTimeout(this._debounced);\n        this._debounced = window.setTimeout(function () {\n          return _this4.validate();\n        }, this.options.debounce);\n      } else this.validate();\n    },\n\n    _resetUI: function _resetUI() {\n      // Reset all event listeners\n      this._failedOnce = false;\n      this._actualizeTriggers();\n\n      // Nothing to do if UI never initialized for this field\n      if ('undefined' === typeof this._ui) return;\n\n      // Reset all errors' li\n      this._ui.$errorsWrapper.removeClass('filled').children().remove();\n\n      // Reset validation class\n      this._resetClass();\n\n      // Reset validation flags and last validation result\n      this._ui.lastValidationResult = [];\n      this._ui.validationInformationVisible = false;\n    },\n\n    _destroyUI: function _destroyUI() {\n      this._resetUI();\n\n      if ('undefined' !== typeof this._ui) this._ui.$errorsWrapper.remove();\n\n      delete this._ui;\n    },\n\n    _successClass: function _successClass() {\n      this._ui.validationInformationVisible = true;\n      this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass);\n    },\n    _errorClass: function _errorClass() {\n      this._ui.validationInformationVisible = true;\n      this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass);\n    },\n    _resetClass: function _resetClass() {\n      this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass);\n    }\n  };\n\n  var Form = function Form(element, domOptions, options) {\n    this.__class__ = 'Form';\n\n    this.element = element;\n    this.$element = $(element);\n    this.domOptions = domOptions;\n    this.options = options;\n    this.parent = window.Parsley;\n\n    this.fields = [];\n    this.validationResult = null;\n  };\n\n  var Form__statusMapping = { pending: null, resolved: true, rejected: false };\n\n  Form.prototype = {\n    onSubmitValidate: function onSubmitValidate(event) {\n      var _this5 = this;\n\n      // This is a Parsley generated submit event, do not validate, do not prevent, simply exit and keep normal behavior\n      if (true === event.parsley) return;\n\n      // If we didn't come here through a submit button, use the first one in the form\n      var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0];\n      this._submitSource = null;\n      this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);\n      if (submitSource && null !== submitSource.getAttribute('formnovalidate')) return;\n\n      window.Parsley._remoteCache = {};\n\n      var promise = this.whenValidate({ event: event });\n\n      if ('resolved' === promise.state() && false !== this._trigger('submit')) {\n        // All good, let event go through. We make this distinction because browsers\n        // differ in their handling of `submit` being called from inside a submit event [#1047]\n      } else {\n          // Rejected or pending: cancel this submit\n          event.stopImmediatePropagation();\n          event.preventDefault();\n          if ('pending' === promise.state()) promise.done(function () {\n            _this5._submit(submitSource);\n          });\n        }\n    },\n\n    onSubmitButton: function onSubmitButton(event) {\n      this._submitSource = event.currentTarget;\n    },\n    // internal\n    // _submit submits the form, this time without going through the validations.\n    // Care must be taken to \"fake\" the actual submit button being clicked.\n    _submit: function _submit(submitSource) {\n      if (false === this._trigger('submit')) return;\n      // Add submit button's data\n      if (submitSource) {\n        var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false);\n        if (0 === $synthetic.length) $synthetic = $('<input class=\"parsley-synthetic-submit-button\" type=\"hidden\">').appendTo(this.$element);\n        $synthetic.attr({\n          name: submitSource.getAttribute('name'),\n          value: submitSource.getAttribute('value')\n        });\n      }\n\n      this.$element.trigger(_extends($.Event('submit'), { parsley: true }));\n    },\n\n    // Performs validation on fields while triggering events.\n    // @returns `true` if all validations succeeds, `false`\n    // if a failure is immediately detected, or `null`\n    // if dependant on a promise.\n    // Consider using `whenValidate` instead.\n    validate: function validate(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');\n\n        var _arguments = _slice.call(arguments);\n\n        var group = _arguments[0];\n        var force = _arguments[1];\n        var event = _arguments[2];\n\n        options = { group: group, force: force, event: event };\n      }\n      return Form__statusMapping[this.whenValidate(options).state()];\n    },\n\n    whenValidate: function whenValidate() {\n      var _Utils$all$done$fail$always,\n          _this6 = this;\n\n      var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var group = _ref7.group;\n      var force = _ref7.force;\n      var event = _ref7.event;\n\n      this.submitEvent = event;\n      if (event) {\n        this.submitEvent = _extends({}, event, { preventDefault: function preventDefault() {\n            Utils.warnOnce(\"Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`\");\n            _this6.validationResult = false;\n          } });\n      }\n      this.validationResult = true;\n\n      // fire validate event to eventually modify things before every validation\n      this._trigger('validate');\n\n      // Refresh form DOM options and form's fields that could have changed\n      this._refreshFields();\n\n      var promises = this._withoutReactualizingFormOptions(function () {\n        return $.map(_this6.fields, function (field) {\n          return field.whenValidate({ force: force, group: group });\n        });\n      });\n\n      return (_Utils$all$done$fail$always = Utils.all(promises).done(function () {\n        _this6._trigger('success');\n      }).fail(function () {\n        _this6.validationResult = false;\n        _this6.focus();\n        _this6._trigger('error');\n      }).always(function () {\n        _this6._trigger('validated');\n      })).pipe.apply(_Utils$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));\n    },\n\n    // Iterate over refreshed fields, and stop on first failure.\n    // Returns `true` if all fields are valid, `false` if a failure is detected\n    // or `null` if the result depends on an unresolved promise.\n    // Prefer using `whenValid` instead.\n    isValid: function isValid(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');\n\n        var _arguments2 = _slice.call(arguments);\n\n        var group = _arguments2[0];\n        var force = _arguments2[1];\n\n        options = { group: group, force: force };\n      }\n      return Form__statusMapping[this.whenValid(options).state()];\n    },\n\n    // Iterate over refreshed fields and validate them.\n    // Returns a promise.\n    // A validation that immediately fails will interrupt the validations.\n    whenValid: function whenValid() {\n      var _this7 = this;\n\n      var _ref8 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var group = _ref8.group;\n      var force = _ref8.force;\n\n      this._refreshFields();\n\n      var promises = this._withoutReactualizingFormOptions(function () {\n        return $.map(_this7.fields, function (field) {\n          return field.whenValid({ group: group, force: force });\n        });\n      });\n      return Utils.all(promises);\n    },\n\n    refresh: function refresh() {\n      this._refreshFields();\n      return this;\n    },\n\n    // Reset UI\n    reset: function reset() {\n      // Form case: emit a reset event for each field\n      for (var i = 0; i < this.fields.length; i++) this.fields[i].reset();\n\n      this._trigger('reset');\n    },\n\n    // Destroy Parsley instance (+ UI)\n    destroy: function destroy() {\n      // Field case: emit destroy event to clean UI and then destroy stored instance\n      this._destroyUI();\n\n      // Form case: destroy all its fields and then destroy stored instance\n      for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy();\n\n      this.$element.removeData('Parsley');\n      this._trigger('destroy');\n    },\n\n    _refreshFields: function _refreshFields() {\n      return this.actualizeOptions()._bindFields();\n    },\n\n    _bindFields: function _bindFields() {\n      var _this8 = this;\n\n      var oldFields = this.fields;\n\n      this.fields = [];\n      this.fieldsMappedById = {};\n\n      this._withoutReactualizingFormOptions(function () {\n        _this8.$element.find(_this8.options.inputs).not(_this8.options.excluded).each(function (_, element) {\n          var fieldInstance = new window.Parsley.Factory(element, {}, _this8);\n\n          // Only add valid and not excluded `Field` and `FieldMultiple` children\n          if (('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) {\n            var uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__;\n            if ('undefined' === typeof _this8.fieldsMappedById[uniqueId]) {\n              _this8.fieldsMappedById[uniqueId] = fieldInstance;\n              _this8.fields.push(fieldInstance);\n            }\n          }\n        });\n\n        $.each(Utils.difference(oldFields, _this8.fields), function (_, field) {\n          field.reset();\n        });\n      });\n      return this;\n    },\n\n    // Internal only.\n    // Looping on a form's fields to do validation or similar\n    // will trigger reactualizing options on all of them, which\n    // in turn will reactualize the form's options.\n    // To avoid calling actualizeOptions so many times on the form\n    // for nothing, _withoutReactualizingFormOptions temporarily disables\n    // the method actualizeOptions on this form while `fn` is called.\n    _withoutReactualizingFormOptions: function _withoutReactualizingFormOptions(fn) {\n      var oldActualizeOptions = this.actualizeOptions;\n      this.actualizeOptions = function () {\n        return this;\n      };\n      var result = fn();\n      this.actualizeOptions = oldActualizeOptions;\n      return result;\n    },\n\n    // Internal only.\n    // Shortcut to trigger an event\n    // Returns true iff event is not interrupted and default not prevented.\n    _trigger: function _trigger(eventName) {\n      return this.trigger('form:' + eventName);\n    }\n\n  };\n\n  var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) {\n    var validatorSpec = window.Parsley._validatorRegistry.validators[name];\n    var validator = new Validator(validatorSpec);\n    priority = priority || parsleyField.options[name + 'Priority'] || validator.priority;\n    isDomConstraint = true === isDomConstraint;\n\n    _extends(this, {\n      validator: validator,\n      name: name,\n      requirements: requirements,\n      priority: priority,\n      isDomConstraint: isDomConstraint\n    });\n    this._parseRequirements(parsleyField.options);\n  };\n\n  var capitalize = function capitalize(str) {\n    var cap = str[0].toUpperCase();\n    return cap + str.slice(1);\n  };\n\n  Constraint.prototype = {\n    validate: function validate(value, instance) {\n      var _validator;\n\n      return (_validator = this.validator).validate.apply(_validator, [value].concat(_toConsumableArray(this.requirementList), [instance]));\n    },\n\n    _parseRequirements: function _parseRequirements(options) {\n      var _this9 = this;\n\n      this.requirementList = this.validator.parseRequirements(this.requirements, function (key) {\n        return options[_this9.name + capitalize(key)];\n      });\n    }\n  };\n\n  var Field = function Field(field, domOptions, options, parsleyFormInstance) {\n    this.__class__ = 'Field';\n\n    this.element = field;\n    this.$element = $(field);\n\n    // Set parent if we have one\n    if ('undefined' !== typeof parsleyFormInstance) {\n      this.parent = parsleyFormInstance;\n    }\n\n    this.options = options;\n    this.domOptions = domOptions;\n\n    // Initialize some properties\n    this.constraints = [];\n    this.constraintsByName = {};\n    this.validationResult = true;\n\n    // Bind constraints\n    this._bindConstraints();\n  };\n\n  var parsley_field__statusMapping = { pending: null, resolved: true, rejected: false };\n\n  Field.prototype = {\n    // # Public API\n    // Validate field and trigger some events for mainly `UI`\n    // @returns `true`, an array of the validators that failed, or\n    // `null` if validation is not finished. Prefer using whenValidate\n    validate: function validate(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');\n        options = { options: options };\n      }\n      var promise = this.whenValidate(options);\n      if (!promise) // If excluded with `group` option\n        return true;\n      switch (promise.state()) {\n        case 'pending':\n          return null;\n        case 'resolved':\n          return true;\n        case 'rejected':\n          return this.validationResult;\n      }\n    },\n\n    // Validate field and trigger some events for mainly `UI`\n    // @returns a promise that succeeds only when all validations do\n    // or `undefined` if field is not in the given `group`.\n    whenValidate: function whenValidate() {\n      var _whenValid$always$done$fail$always,\n          _this10 = this;\n\n      var _ref9 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var force = _ref9.force;\n      var group = _ref9.group;\n\n      // do not validate a field if not the same as given validation group\n      this.refresh();\n      if (group && !this._isInGroup(group)) return;\n\n      this.value = this.getValue();\n\n      // Field Validate event. `this.value` could be altered for custom needs\n      this._trigger('validate');\n\n      return (_whenValid$always$done$fail$always = this.whenValid({ force: force, value: this.value, _refreshed: true }).always(function () {\n        _this10._reflowUI();\n      }).done(function () {\n        _this10._trigger('success');\n      }).fail(function () {\n        _this10._trigger('error');\n      }).always(function () {\n        _this10._trigger('validated');\n      })).pipe.apply(_whenValid$always$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));\n    },\n\n    hasConstraints: function hasConstraints() {\n      return 0 !== this.constraints.length;\n    },\n\n    // An empty optional field does not need validation\n    needsValidation: function needsValidation(value) {\n      if ('undefined' === typeof value) value = this.getValue();\n\n      // If a field is empty and not required, it is valid\n      // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators\n      if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty) return false;\n\n      return true;\n    },\n\n    _isInGroup: function _isInGroup(group) {\n      if (Array.isArray(this.options.group)) return -1 !== $.inArray(group, this.options.group);\n      return this.options.group === group;\n    },\n\n    // Just validate field. Do not trigger any event.\n    // Returns `true` iff all constraints pass, `false` if there are failures,\n    // or `null` if the result can not be determined yet (depends on a promise)\n    // See also `whenValid`.\n    isValid: function isValid(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');\n\n        var _arguments3 = _slice.call(arguments);\n\n        var force = _arguments3[0];\n        var value = _arguments3[1];\n\n        options = { force: force, value: value };\n      }\n      var promise = this.whenValid(options);\n      if (!promise) // Excluded via `group`\n        return true;\n      return parsley_field__statusMapping[promise.state()];\n    },\n\n    // Just validate field. Do not trigger any event.\n    // @returns a promise that succeeds only when all validations do\n    // or `undefined` if the field is not in the given `group`.\n    // The argument `force` will force validation of empty fields.\n    // If a `value` is given, it will be validated instead of the value of the input.\n    whenValid: function whenValid() {\n      var _this11 = this;\n\n      var _ref10 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var _ref10$force = _ref10.force;\n      var force = _ref10$force === undefined ? false : _ref10$force;\n      var value = _ref10.value;\n      var group = _ref10.group;\n      var _refreshed = _ref10._refreshed;\n\n      // Recompute options and rebind constraints to have latest changes\n      if (!_refreshed) this.refresh();\n      // do not validate a field if not the same as given validation group\n      if (group && !this._isInGroup(group)) return;\n\n      this.validationResult = true;\n\n      // A field without constraint is valid\n      if (!this.hasConstraints()) return $.when();\n\n      // Value could be passed as argument, needed to add more power to 'field:validate'\n      if ('undefined' === typeof value || null === value) value = this.getValue();\n\n      if (!this.needsValidation(value) && true !== force) return $.when();\n\n      var groupedConstraints = this._getGroupedConstraints();\n      var promises = [];\n      $.each(groupedConstraints, function (_, constraints) {\n        // Process one group of constraints at a time, we validate the constraints\n        // and combine the promises together.\n        var promise = Utils.all($.map(constraints, function (constraint) {\n          return _this11._validateConstraint(value, constraint);\n        }));\n        promises.push(promise);\n        if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed\n      });\n      return Utils.all(promises);\n    },\n\n    // @returns a promise\n    _validateConstraint: function _validateConstraint(value, constraint) {\n      var _this12 = this;\n\n      var result = constraint.validate(value, this);\n      // Map false to a failed promise\n      if (false === result) result = $.Deferred().reject();\n      // Make sure we return a promise and that we record failures\n      return Utils.all([result]).fail(function (errorMessage) {\n        if (!(_this12.validationResult instanceof Array)) _this12.validationResult = [];\n        _this12.validationResult.push({\n          assert: constraint,\n          errorMessage: 'string' === typeof errorMessage && errorMessage\n        });\n      });\n    },\n\n    // @returns Parsley field computed value that could be overrided or configured in DOM\n    getValue: function getValue() {\n      var value;\n\n      // Value could be overriden in DOM or with explicit options\n      if ('function' === typeof this.options.value) value = this.options.value(this);else if ('undefined' !== typeof this.options.value) value = this.options.value;else value = this.$element.val();\n\n      // Handle wrong DOM or configurations\n      if ('undefined' === typeof value || null === value) return '';\n\n      return this._handleWhitespace(value);\n    },\n\n    // Reset UI\n    reset: function reset() {\n      this._resetUI();\n      return this._trigger('reset');\n    },\n\n    // Destroy Parsley instance (+ UI)\n    destroy: function destroy() {\n      // Field case: emit destroy event to clean UI and then destroy stored instance\n      this._destroyUI();\n      this.$element.removeData('Parsley');\n      this.$element.removeData('FieldMultiple');\n      this._trigger('destroy');\n    },\n\n    // Actualize options and rebind constraints\n    refresh: function refresh() {\n      this._refreshConstraints();\n      return this;\n    },\n\n    _refreshConstraints: function _refreshConstraints() {\n      return this.actualizeOptions()._bindConstraints();\n    },\n\n    refreshConstraints: function refreshConstraints() {\n      Utils.warnOnce(\"Parsley's refreshConstraints is deprecated. Please use refresh\");\n      return this.refresh();\n    },\n\n    /**\n    * Add a new constraint to a field\n    *\n    * @param {String}   name\n    * @param {Mixed}    requirements      optional\n    * @param {Number}   priority          optional\n    * @param {Boolean}  isDomConstraint   optional\n    */\n    addConstraint: function addConstraint(name, requirements, priority, isDomConstraint) {\n\n      if (window.Parsley._validatorRegistry.validators[name]) {\n        var constraint = new Constraint(this, name, requirements, priority, isDomConstraint);\n\n        // if constraint already exist, delete it and push new version\n        if ('undefined' !== this.constraintsByName[constraint.name]) this.removeConstraint(constraint.name);\n\n        this.constraints.push(constraint);\n        this.constraintsByName[constraint.name] = constraint;\n      }\n\n      return this;\n    },\n\n    // Remove a constraint\n    removeConstraint: function removeConstraint(name) {\n      for (var i = 0; i < this.constraints.length; i++) if (name === this.constraints[i].name) {\n        this.constraints.splice(i, 1);\n        break;\n      }\n      delete this.constraintsByName[name];\n      return this;\n    },\n\n    // Update a constraint (Remove + re-add)\n    updateConstraint: function updateConstraint(name, parameters, priority) {\n      return this.removeConstraint(name).addConstraint(name, parameters, priority);\n    },\n\n    // # Internals\n\n    // Internal only.\n    // Bind constraints from config + options + DOM\n    _bindConstraints: function _bindConstraints() {\n      var constraints = [];\n      var constraintsByName = {};\n\n      // clean all existing DOM constraints to only keep javascript user constraints\n      for (var i = 0; i < this.constraints.length; i++) if (false === this.constraints[i].isDomConstraint) {\n        constraints.push(this.constraints[i]);\n        constraintsByName[this.constraints[i].name] = this.constraints[i];\n      }\n\n      this.constraints = constraints;\n      this.constraintsByName = constraintsByName;\n\n      // then re-add Parsley DOM-API constraints\n      for (var name in this.options) this.addConstraint(name, this.options[name], undefined, true);\n\n      // finally, bind special HTML5 constraints\n      return this._bindHtml5Constraints();\n    },\n\n    // Internal only.\n    // Bind specific HTML5 constraints to be HTML5 compliant\n    _bindHtml5Constraints: function _bindHtml5Constraints() {\n      // html5 required\n      if (null !== this.element.getAttribute('required')) this.addConstraint('required', true, undefined, true);\n\n      // html5 pattern\n      if (null !== this.element.getAttribute('pattern')) this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true);\n\n      // range\n      var min = this.element.getAttribute('min');\n      var max = this.element.getAttribute('max');\n      if (null !== min && null !== max) this.addConstraint('range', [min, max], undefined, true);\n\n      // HTML5 min\n      else if (null !== min) this.addConstraint('min', min, undefined, true);\n\n        // HTML5 max\n        else if (null !== max) this.addConstraint('max', max, undefined, true);\n\n      // length\n      if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength')) this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true);\n\n      // HTML5 minlength\n      else if (null !== this.element.getAttribute('minlength')) this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true);\n\n        // HTML5 maxlength\n        else if (null !== this.element.getAttribute('maxlength')) this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true);\n\n      // html5 types\n      var type = Utils.getType(this.element);\n\n      // Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise\n      if ('number' === type) {\n        return this.addConstraint('type', ['number', {\n          step: this.element.getAttribute('step') || '1',\n          base: min || this.element.getAttribute('value')\n        }], undefined, true);\n        // Regular other HTML5 supported types\n      } else if (/^(email|url|range|date)$/i.test(type)) {\n          return this.addConstraint('type', type, undefined, true);\n        }\n      return this;\n    },\n\n    // Internal only.\n    // Field is required if have required constraint without `false` value\n    _isRequired: function _isRequired() {\n      if ('undefined' === typeof this.constraintsByName.required) return false;\n\n      return false !== this.constraintsByName.required.requirements;\n    },\n\n    // Internal only.\n    // Shortcut to trigger an event\n    _trigger: function _trigger(eventName) {\n      return this.trigger('field:' + eventName);\n    },\n\n    // Internal only\n    // Handles whitespace in a value\n    // Use `data-parsley-whitespace=\"squish\"` to auto squish input value\n    // Use `data-parsley-whitespace=\"trim\"` to auto trim input value\n    _handleWhitespace: function _handleWhitespace(value) {\n      if (true === this.options.trimValue) Utils.warnOnce('data-parsley-trim-value=\"true\" is deprecated, please use data-parsley-whitespace=\"trim\"');\n\n      if ('squish' === this.options.whitespace) value = value.replace(/\\s{2,}/g, ' ');\n\n      if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils.trimString(value);\n\n      return value;\n    },\n\n    _isDateInput: function _isDateInput() {\n      var c = this.constraintsByName.type;\n      return c && c.requirements === 'date';\n    },\n\n    // Internal only.\n    // Returns the constraints, grouped by descending priority.\n    // The result is thus an array of arrays of constraints.\n    _getGroupedConstraints: function _getGroupedConstraints() {\n      if (false === this.options.priorityEnabled) return [this.constraints];\n\n      var groupedConstraints = [];\n      var index = {};\n\n      // Create array unique of priorities\n      for (var i = 0; i < this.constraints.length; i++) {\n        var p = this.constraints[i].priority;\n        if (!index[p]) groupedConstraints.push(index[p] = []);\n        index[p].push(this.constraints[i]);\n      }\n      // Sort them by priority DESC\n      groupedConstraints.sort(function (a, b) {\n        return b[0].priority - a[0].priority;\n      });\n\n      return groupedConstraints;\n    }\n\n  };\n\n  var parsley_field = Field;\n\n  var Multiple = function Multiple() {\n    this.__class__ = 'FieldMultiple';\n  };\n\n  Multiple.prototype = {\n    // Add new `$element` sibling for multiple field\n    addElement: function addElement($element) {\n      this.$elements.push($element);\n\n      return this;\n    },\n\n    // See `Field._refreshConstraints()`\n    _refreshConstraints: function _refreshConstraints() {\n      var fieldConstraints;\n\n      this.constraints = [];\n\n      // Select multiple special treatment\n      if (this.element.nodeName === 'SELECT') {\n        this.actualizeOptions()._bindConstraints();\n\n        return this;\n      }\n\n      // Gather all constraints for each input in the multiple group\n      for (var i = 0; i < this.$elements.length; i++) {\n\n        // Check if element have not been dynamically removed since last binding\n        if (!$('html').has(this.$elements[i]).length) {\n          this.$elements.splice(i, 1);\n          continue;\n        }\n\n        fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;\n\n        for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);\n      }\n\n      return this;\n    },\n\n    // See `Field.getValue()`\n    getValue: function getValue() {\n      // Value could be overriden in DOM\n      if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value;\n\n      // Radio input case\n      if (this.element.nodeName === 'INPUT') {\n        var type = Utils.getType(this.element);\n        if (type === 'radio') return this._findRelated().filter(':checked').val() || '';\n\n        // checkbox input case\n        if (type === 'checkbox') {\n          var values = [];\n\n          this._findRelated().filter(':checked').each(function () {\n            values.push($(this).val());\n          });\n\n          return values;\n        }\n      }\n\n      // Select multiple case\n      if (this.element.nodeName === 'SELECT' && null === this.$element.val()) return [];\n\n      // Default case that should never happen\n      return this.$element.val();\n    },\n\n    _init: function _init() {\n      this.$elements = [this.$element];\n\n      return this;\n    }\n  };\n\n  var Factory = function Factory(element, options, parsleyFormInstance) {\n    this.element = element;\n    this.$element = $(element);\n\n    // If the element has already been bound, returns its saved Parsley instance\n    var savedparsleyFormInstance = this.$element.data('Parsley');\n    if (savedparsleyFormInstance) {\n\n      // If the saved instance has been bound without a Form parent and there is one given in this call, add it\n      if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) {\n        savedparsleyFormInstance.parent = parsleyFormInstance;\n        savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options);\n      }\n\n      if ('object' === typeof options) {\n        _extends(savedparsleyFormInstance.options, options);\n      }\n\n      return savedparsleyFormInstance;\n    }\n\n    // Parsley must be instantiated with a DOM element or jQuery $element\n    if (!this.$element.length) throw new Error('You must bind Parsley on an existing element.');\n\n    if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a Form instance');\n\n    this.parent = parsleyFormInstance || window.Parsley;\n    return this.init(options);\n  };\n\n  Factory.prototype = {\n    init: function init(options) {\n      this.__class__ = 'Parsley';\n      this.__version__ = '2.8.0';\n      this.__id__ = Utils.generateID();\n\n      // Pre-compute options\n      this._resetOptions(options);\n\n      // A Form instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute\n      if (this.element.nodeName === 'FORM' || Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm');\n\n      // Every other element is bound as a `Field` or `FieldMultiple`\n      return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');\n    },\n\n    isMultiple: function isMultiple() {\n      var type = Utils.getType(this.element);\n      return type === 'radio' || type === 'checkbox' || this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple');\n    },\n\n    // Multiples fields are a real nightmare :(\n    // Maybe some refactoring would be appreciated here...\n    handleMultiple: function handleMultiple() {\n      var _this13 = this;\n\n      var name;\n      var multiple;\n      var parsleyMultipleInstance;\n\n      // Handle multiple name\n      this.options.multiple = this.options.multiple || (name = this.element.getAttribute('name')) || this.element.getAttribute('id');\n\n      // Special select multiple input\n      if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) {\n        this.options.multiple = this.options.multiple || this.__id__;\n        return this.bind('parsleyFieldMultiple');\n\n        // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it\n      } else if (!this.options.multiple) {\n          Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element);\n          return this;\n        }\n\n      // Remove special chars\n      this.options.multiple = this.options.multiple.replace(/(:|\\.|\\[|\\]|\\{|\\}|\\$)/g, '');\n\n      // Add proper `data-parsley-multiple` to siblings if we have a valid multiple name\n      if (name) {\n        $('input[name=\"' + name + '\"]').each(function (i, input) {\n          var type = Utils.getType(input);\n          if (type === 'radio' || type === 'checkbox') input.setAttribute(_this13.options.namespace + 'multiple', _this13.options.multiple);\n        });\n      }\n\n      // Check here if we don't already have a related multiple instance saved\n      var $previouslyRelated = this._findRelated();\n      for (var i = 0; i < $previouslyRelated.length; i++) {\n        parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley');\n        if ('undefined' !== typeof parsleyMultipleInstance) {\n\n          if (!this.$element.data('FieldMultiple')) {\n            parsleyMultipleInstance.addElement(this.$element);\n          }\n\n          break;\n        }\n      }\n\n      // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')`\n      // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance\n      this.bind('parsleyField', true);\n\n      return parsleyMultipleInstance || this.bind('parsleyFieldMultiple');\n    },\n\n    // Return proper `Form`, `Field` or `FieldMultiple`\n    bind: function bind(type, doNotStore) {\n      var parsleyInstance;\n\n      switch (type) {\n        case 'parsleyForm':\n          parsleyInstance = $.extend(new Form(this.element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields();\n          break;\n        case 'parsleyField':\n          parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend);\n          break;\n        case 'parsleyFieldMultiple':\n          parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init();\n          break;\n        default:\n          throw new Error(type + 'is not a supported Parsley type');\n      }\n\n      if (this.options.multiple) Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple);\n\n      if ('undefined' !== typeof doNotStore) {\n        this.$element.data('FieldMultiple', parsleyInstance);\n\n        return parsleyInstance;\n      }\n\n      // Store the freshly bound instance in a DOM element for later access using jQuery `data()`\n      this.$element.data('Parsley', parsleyInstance);\n\n      // Tell the world we have a new Form or Field instance!\n      parsleyInstance._actualizeTriggers();\n      parsleyInstance._trigger('init');\n\n      return parsleyInstance;\n    }\n  };\n\n  var vernums = $.fn.jquery.split('.');\n  if (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) {\n    throw \"The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.\";\n  }\n  if (!vernums.forEach) {\n    Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');\n  }\n  // Inherit `on`, `off` & `trigger` to Parsley:\n  var Parsley = _extends(new Base(), {\n    element: document,\n    $element: $(document),\n    actualizeOptions: null,\n    _resetOptions: null,\n    Factory: Factory,\n    version: '2.8.0'\n  });\n\n  // Supplement Field and Form with Base\n  // This way, the constructors will have access to those methods\n  _extends(parsley_field.prototype, UI.Field, Base.prototype);\n  _extends(Form.prototype, UI.Form, Base.prototype);\n  // Inherit actualizeOptions and _resetOptions:\n  _extends(Factory.prototype, Base.prototype);\n\n  // ### jQuery API\n  // `$('.elem').parsley(options)` or `$('.elem').psly(options)`\n  $.fn.parsley = $.fn.psly = function (options) {\n    if (this.length > 1) {\n      var instances = [];\n\n      this.each(function () {\n        instances.push($(this).parsley(options));\n      });\n\n      return instances;\n    }\n\n    // Return undefined if applied to non existing DOM element\n    if (this.length == 0) {\n      return;\n    }\n\n    return new Factory(this[0], options);\n  };\n\n  // ### Field and Form extension\n  // Ensure the extension is now defined if it wasn't previously\n  if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {};\n\n  // ### Parsley config\n  // Inherit from ParsleyDefault, and copy over any existing values\n  Parsley.options = _extends(Utils.objectCreate(Defaults), window.ParsleyConfig);\n  window.ParsleyConfig = Parsley.options; // Old way of accessing global options\n\n  // ### Globals\n  window.Parsley = window.psly = Parsley;\n  Parsley.Utils = Utils;\n  window.ParsleyUtils = {};\n  $.each(Utils, function (key, value) {\n    if ('function' === typeof value) {\n      window.ParsleyUtils[key] = function () {\n        Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');\n        return Utils[key].apply(Utils, arguments);\n      };\n    }\n  });\n\n  // ### Define methods that forward to the registry, and deprecate all access except through window.Parsley\n  var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);\n  window.ParsleyValidator = {};\n  $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator hasValidator'.split(' '), function (i, method) {\n    window.Parsley[method] = function () {\n      return registry[method].apply(registry, arguments);\n    };\n    window.ParsleyValidator[method] = function () {\n      var _window$Parsley;\n\n      Utils.warnOnce('Accessing the method \\'' + method + '\\' through Validator is deprecated. Simply call \\'window.Parsley.' + method + '(...)\\'');\n      return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments);\n    };\n  });\n\n  // ### UI\n  // Deprecated global object\n  window.Parsley.UI = UI;\n  window.ParsleyUI = {\n    removeError: function removeError(instance, name, doNotUpdateClass) {\n      var updateClass = true !== doNotUpdateClass;\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'removeError\\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');\n      return instance.removeError(name, { updateClass: updateClass });\n    },\n    getErrorsMessages: function getErrorsMessages(instance) {\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'getErrorsMessages\\' on the instance directly.');\n      return instance.getErrorsMessages();\n    }\n  };\n  $.each('addError updateError'.split(' '), function (i, method) {\n    window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {\n      var updateClass = true !== doNotUpdateClass;\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'' + method + '\\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');\n      return instance[method](name, { message: message, assert: assert, updateClass: updateClass });\n    };\n  });\n\n  // ### PARSLEY auto-binding\n  // Prevent it by setting `ParsleyConfig.autoBind` to `false`\n  if (false !== window.ParsleyConfig.autoBind) {\n    $(function () {\n      // Works only on `data-parsley-validate`.\n      if ($('[data-parsley-validate]').length) $('[data-parsley-validate]').parsley();\n    });\n  }\n\n  var o = $({});\n  var deprecated = function deprecated() {\n    Utils.warnOnce(\"Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley\");\n  };\n\n  // Returns an event handler that calls `fn` with the arguments it expects\n  function adapt(fn, context) {\n    // Store to allow unbinding\n    if (!fn.parsleyAdaptedCallback) {\n      fn.parsleyAdaptedCallback = function () {\n        var args = Array.prototype.slice.call(arguments, 0);\n        args.unshift(this);\n        fn.apply(context || o, args);\n      };\n    }\n    return fn.parsleyAdaptedCallback;\n  }\n\n  var eventPrefix = 'parsley:';\n  // Converts 'parsley:form:validate' into 'form:validate'\n  function eventName(name) {\n    if (name.lastIndexOf(eventPrefix, 0) === 0) return name.substr(eventPrefix.length);\n    return name;\n  }\n\n  // $.listen is deprecated. Use Parsley.on instead.\n  $.listen = function (name, callback) {\n    var context;\n    deprecated();\n    if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) {\n      context = arguments[1];\n      callback = arguments[2];\n    }\n\n    if ('function' !== typeof callback) throw new Error('Wrong parameters');\n\n    window.Parsley.on(eventName(name), adapt(callback, context));\n  };\n\n  $.listenTo = function (instance, name, fn) {\n    deprecated();\n    if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');\n\n    if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong parameters');\n\n    instance.on(eventName(name), adapt(fn));\n  };\n\n  $.unsubscribe = function (name, fn) {\n    deprecated();\n    if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong arguments');\n    window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback);\n  };\n\n  $.unsubscribeTo = function (instance, name) {\n    deprecated();\n    if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');\n    instance.off(eventName(name));\n  };\n\n  $.unsubscribeAll = function (name) {\n    deprecated();\n    window.Parsley.off(eventName(name));\n    $('form,input,textarea,select').each(function () {\n      var instance = $(this).data('Parsley');\n      if (instance) {\n        instance.off(eventName(name));\n      }\n    });\n  };\n\n  // $.emit is deprecated. Use jQuery events instead.\n  $.emit = function (name, instance) {\n    var _instance;\n\n    deprecated();\n    var instanceGiven = instance instanceof parsley_field || instance instanceof Form;\n    var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);\n    args.unshift(eventName(name));\n    if (!instanceGiven) {\n      instance = window.Parsley;\n    }\n    (_instance = instance).trigger.apply(_instance, _toConsumableArray(args));\n  };\n\n  var pubsub = {};\n\n  $.extend(true, Parsley, {\n    asyncValidators: {\n      'default': {\n        fn: function fn(xhr) {\n          // By default, only status 2xx are deemed successful.\n          // Note: we use status instead of state() because responses with status 200\n          // but invalid messages (e.g. an empty body for content type set to JSON) will\n          // result in state() === 'rejected'.\n          return xhr.status >= 200 && xhr.status < 300;\n        },\n        url: false\n      },\n      reverse: {\n        fn: function fn(xhr) {\n          // If reverse option is set, a failing ajax request is considered successful\n          return xhr.status < 200 || xhr.status >= 300;\n        },\n        url: false\n      }\n    },\n\n    addAsyncValidator: function addAsyncValidator(name, fn, url, options) {\n      Parsley.asyncValidators[name] = {\n        fn: fn,\n        url: url || false,\n        options: options || {}\n      };\n\n      return this;\n    }\n\n  });\n\n  Parsley.addValidator('remote', {\n    requirementType: {\n      '': 'string',\n      'validator': 'string',\n      'reverse': 'boolean',\n      'options': 'object'\n    },\n\n    validateString: function validateString(value, url, options, instance) {\n      var data = {};\n      var ajaxOptions;\n      var csr;\n      var validator = options.validator || (true === options.reverse ? 'reverse' : 'default');\n\n      if ('undefined' === typeof Parsley.asyncValidators[validator]) throw new Error('Calling an undefined async validator: `' + validator + '`');\n\n      url = Parsley.asyncValidators[validator].url || url;\n\n      // Fill current value\n      if (url.indexOf('{value}') > -1) {\n        url = url.replace('{value}', encodeURIComponent(value));\n      } else {\n        data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value;\n      }\n\n      // Merge options passed in from the function with the ones in the attribute\n      var remoteOptions = $.extend(true, options.options || {}, Parsley.asyncValidators[validator].options);\n\n      // All `$.ajax(options)` could be overridden or extended directly from DOM in `data-parsley-remote-options`\n      ajaxOptions = $.extend(true, {}, {\n        url: url,\n        data: data,\n        type: 'GET'\n      }, remoteOptions);\n\n      // Generate store key based on ajax options\n      instance.trigger('field:ajaxoptions', instance, ajaxOptions);\n\n      csr = $.param(ajaxOptions);\n\n      // Initialise querry cache\n      if ('undefined' === typeof Parsley._remoteCache) Parsley._remoteCache = {};\n\n      // Try to retrieve stored xhr\n      var xhr = Parsley._remoteCache[csr] = Parsley._remoteCache[csr] || $.ajax(ajaxOptions);\n\n      var handleXhr = function handleXhr() {\n        var result = Parsley.asyncValidators[validator].fn.call(instance, xhr, url, options);\n        if (!result) // Map falsy results to rejected promise\n          result = $.Deferred().reject();\n        return $.when(result);\n      };\n\n      return xhr.then(handleXhr, handleXhr);\n    },\n\n    priority: -1\n  });\n\n  Parsley.on('form:submit', function () {\n    Parsley._remoteCache = {};\n  });\n\n  Base.prototype.addAsyncValidator = function () {\n    Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');\n    return Parsley.addAsyncValidator.apply(Parsley, arguments);\n  };\n\n  // This is included with the Parsley library itself,\n  // thus there is no use in adding it to your project.\n  Parsley.addMessages('en', {\n    defaultMessage: \"This value seems to be invalid.\",\n    type: {\n      email: \"This value should be a valid email.\",\n      url: \"This value should be a valid url.\",\n      number: \"This value should be a valid number.\",\n      integer: \"This value should be a valid integer.\",\n      digits: \"This value should be digits.\",\n      alphanum: \"This value should be alphanumeric.\"\n    },\n    notblank: \"This value should not be blank.\",\n    required: \"This value is required.\",\n    pattern: \"This value seems to be invalid.\",\n    min: \"This value should be greater than or equal to %s.\",\n    max: \"This value should be lower than or equal to %s.\",\n    range: \"This value should be between %s and %s.\",\n    minlength: \"This value is too short. It should have %s characters or more.\",\n    maxlength: \"This value is too long. It should have %s characters or fewer.\",\n    length: \"This value length is invalid. It should be between %s and %s characters long.\",\n    mincheck: \"You must select at least %s choices.\",\n    maxcheck: \"You must select %s choices or fewer.\",\n    check: \"You must select between %s and %s choices.\",\n    equalto: \"This value should be the same.\"\n  });\n\n  Parsley.setLocale('en');\n\n  /**\n   * inputevent - Alleviate browser bugs for input events\n   * https://github.com/marcandre/inputevent\n   * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm)\n   * @author Marc-Andre Lafortune <github@marc-andre.ca>\n   * @license MIT\n   */\n\n  function InputEvent() {\n    var _this14 = this;\n\n    var globals = window || global;\n\n    // Slightly odd way construct our object. This way methods are force bound.\n    // Used to test for duplicate library.\n    _extends(this, {\n\n      // For browsers that do not support isTrusted, assumes event is native.\n      isNativeEvent: function isNativeEvent(evt) {\n        return evt.originalEvent && evt.originalEvent.isTrusted !== false;\n      },\n\n      fakeInputEvent: function fakeInputEvent(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          $(evt.target).trigger('input');\n        }\n      },\n\n      misbehaves: function misbehaves(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          _this14.behavesOk(evt);\n          $(document).on('change.inputevent', evt.data.selector, _this14.fakeInputEvent);\n          _this14.fakeInputEvent(evt);\n        }\n      },\n\n      behavesOk: function behavesOk(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          $(document) // Simply unbinds the testing handler\n          .off('input.inputevent', evt.data.selector, _this14.behavesOk).off('change.inputevent', evt.data.selector, _this14.misbehaves);\n        }\n      },\n\n      // Bind the testing handlers\n      install: function install() {\n        if (globals.inputEventPatched) {\n          return;\n        }\n        globals.inputEventPatched = '0.0.3';\n        var _arr = ['select', 'input[type=\"checkbox\"]', 'input[type=\"radio\"]', 'input[type=\"file\"]'];\n        for (var _i = 0; _i < _arr.length; _i++) {\n          var selector = _arr[_i];\n          $(document).on('input.inputevent', selector, { selector: selector }, _this14.behavesOk).on('change.inputevent', selector, { selector: selector }, _this14.misbehaves);\n        }\n      },\n\n      uninstall: function uninstall() {\n        delete globals.inputEventPatched;\n        $(document).off('.inputevent');\n      }\n\n    });\n  };\n\n  var inputevent = new InputEvent();\n\n  inputevent.install();\n\n  var parsley = Parsley;\n\n  return parsley;\n});\n//# sourceMappingURL=parsley.js.map\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n    'default': 'RFC3986',\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    parameterLimit: 1000,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n\n    for (var i = 0; i < parts.length; ++i) {\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder);\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder);\n            val = options.decoder(part.slice(pos + 1), defaults.decoder);\n        }\n        if (has.call(obj, key)) {\n            obj[key] = [].concat(obj[key]).concat(val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n    var leaf = val;\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys\n        // that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options);\n};\n\nmodule.exports = function (str, opts) {\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;\n    options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;\n    options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;\n    options.parseArrays = options.parseArrays !== false;\n    options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;\n    options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;\n    options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;\n    options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;\n    options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options);\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaults = {\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    formatter,\n    encodeValuesOnly\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n\n        if (isArray(obj)) {\n            pushToArray(values, stringify(\n                obj[key],\n                generateArrayPrefix(prefix, key),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        } else {\n            pushToArray(values, stringify(\n                obj[key],\n                prefix + (allowDots ? '.' + key : '[' + key + ']'),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        }\n    }\n\n    return values;\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;\n    var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n    var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;\n    var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;\n    var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;\n    var sort = typeof options.sort === 'function' ? options.sort : null;\n    var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;\n    var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;\n    var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;\n    if (typeof options.format === 'undefined') {\n        options.format = formats['default'];\n    } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {\n        throw new TypeError('Unknown format option provided.');\n    }\n    var formatter = formats.formatters[options.format];\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (options.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = options.arrayFormat;\n    } else if ('indices' in options) {\n        arrayFormat = options.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (sort) {\n        objKeys.sort(sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encode ? encoder : null,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            formatter,\n            encodeValuesOnly\n        ));\n    }\n\n    var joined = keys.join(delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    var obj;\n\n    while (queue.length) {\n        var item = queue.pop();\n        obj = item.obj[item.prop];\n\n        if (Array.isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n\n    return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (Array.isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (Array.isArray(target) && !Array.isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (Array.isArray(target) && Array.isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str) {\n    try {\n        return decodeURIComponent(str.replace(/\\+/g, ' '));\n    } catch (e) {\n        return str;\n    }\n};\n\nvar encode = function encode(str) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = typeof str === 'string' ? str : String(str);\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    merge: merge\n};\n","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.6.0\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-prev\" aria-label=\"Previous\" tabindex=\"0\" role=\"button\">Previous</button>',\n                nextArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-next\" aria-label=\"Next\" tabindex=\"0\" role=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" data-role=\"none\" role=\"button\" tabindex=\"0\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\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.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div aria-live=\"polite\" class=\"slick-list\"/>').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 > 1) {\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 <li> element (ie: a child), find the <li>.\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        }\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\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        $(document).off('ready.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 > 1) {\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\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\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',\n                '*:not(.slick-arrow)', 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            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\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\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                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\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 && _.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        _.$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        _.$slideTrack.attr('role', 'listbox');\n\n        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n            $(this).attr({\n                'role': 'option',\n                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''\n            });\n        });\n\n        if (_.$dots !== null) {\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                $(this).attr({\n                    'role': 'presentation',\n                    'aria-selected': 'false',\n                    'aria-controls': 'navigation' + _.instanceUid + i + '',\n                    'id': 'slick-slide' + _.instanceUid + i + ''\n                });\n            })\n                .first().attr('aria-selected', 'true').end()\n                .find('button').attr('role', 'button').end()\n                .closest('div').attr('role', 'toolbar');\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\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\n        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {\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        $(document).on('ready.slick.slick-' + _.instanceUid, _.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                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy')\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        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            _.setPosition();\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\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            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy')\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                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                if (responsiveSettings.hasOwnProperty(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            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n\n                    _.$slides\n                        .slice(index - centerOffset, 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, 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') {\n            _.lazyLoad();\n        }\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; 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            _.setSlideClasses(index);\n            _.asNavFor(index);\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 (_.slideCount <= _.options.slidesToShow) {\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) {\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) {\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) {\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        _.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;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || 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        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = Math.round(Math.sqrt(\n                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (swipeDirection === 'vertical') {\n            return;\n        }\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\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                .attr('aria-hidden', 'true');\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active')\n                .attr('aria-hidden', 'false');\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","/*\n * Toastr\n * Copyright 2012-2015\n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n/* global define */\n(function (define) {\n    define(['jquery'], function ($) {\n        return (function () {\n            var $container;\n            var listener;\n            var toastId = 0;\n            var toastType = {\n                error: 'error',\n                info: 'info',\n                success: 'success',\n                warning: 'warning'\n            };\n\n            var toastr = {\n                clear: clear,\n                remove: remove,\n                error: error,\n                getContainer: getContainer,\n                info: info,\n                options: {},\n                subscribe: subscribe,\n                success: success,\n                version: '2.1.4',\n                warning: warning\n            };\n\n            var previousToast;\n\n            return toastr;\n\n            ////////////////\n\n            function error(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.error,\n                    iconClass: getOptions().iconClasses.error,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function getContainer(options, create) {\n                if (!options) { options = getOptions(); }\n                $container = $('#' + options.containerId);\n                if ($container.length) {\n                    return $container;\n                }\n                if (create) {\n                    $container = createContainer(options);\n                }\n                return $container;\n            }\n\n            function info(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.info,\n                    iconClass: getOptions().iconClasses.info,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function subscribe(callback) {\n                listener = callback;\n            }\n\n            function success(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.success,\n                    iconClass: getOptions().iconClasses.success,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function warning(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.warning,\n                    iconClass: getOptions().iconClasses.warning,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function clear($toastElement, clearOptions) {\n                var options = getOptions();\n                if (!$container) { getContainer(options); }\n                if (!clearToast($toastElement, options, clearOptions)) {\n                    clearContainer(options);\n                }\n            }\n\n            function remove($toastElement) {\n                var options = getOptions();\n                if (!$container) { getContainer(options); }\n                if ($toastElement && $(':focus', $toastElement).length === 0) {\n                    removeToast($toastElement);\n                    return;\n                }\n                if ($container.children().length) {\n                    $container.remove();\n                }\n            }\n\n            // internal functions\n\n            function clearContainer (options) {\n                var toastsToClear = $container.children();\n                for (var i = toastsToClear.length - 1; i >= 0; i--) {\n                    clearToast($(toastsToClear[i]), options);\n                }\n            }\n\n            function clearToast ($toastElement, options, clearOptions) {\n                var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n                if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n                    $toastElement[options.hideMethod]({\n                        duration: options.hideDuration,\n                        easing: options.hideEasing,\n                        complete: function () { removeToast($toastElement); }\n                    });\n                    return true;\n                }\n                return false;\n            }\n\n            function createContainer(options) {\n                $container = $('<div/>')\n                    .attr('id', options.containerId)\n                    .addClass(options.positionClass);\n\n                $container.appendTo($(options.target));\n                return $container;\n            }\n\n            function getDefaults() {\n                return {\n                    tapToDismiss: true,\n                    toastClass: 'toast',\n                    containerId: 'toast-container',\n                    debug: false,\n\n                    showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\n                    showDuration: 300,\n                    showEasing: 'swing', //swing and linear are built into jQuery\n                    onShown: undefined,\n                    hideMethod: 'fadeOut',\n                    hideDuration: 1000,\n                    hideEasing: 'swing',\n                    onHidden: undefined,\n                    closeMethod: false,\n                    closeDuration: false,\n                    closeEasing: false,\n                    closeOnHover: true,\n\n                    extendedTimeOut: 1000,\n                    iconClasses: {\n                        error: 'toast-error',\n                        info: 'toast-info',\n                        success: 'toast-success',\n                        warning: 'toast-warning'\n                    },\n                    iconClass: 'toast-info',\n                    positionClass: 'toast-top-right',\n                    timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\n                    titleClass: 'toast-title',\n                    messageClass: 'toast-message',\n                    escapeHtml: false,\n                    target: 'body',\n                    closeHtml: '<button type=\"button\">&times;</button>',\n                    closeClass: 'toast-close-button',\n                    newestOnTop: true,\n                    preventDuplicates: false,\n                    progressBar: false,\n                    progressClass: 'toast-progress',\n                    rtl: false\n                };\n            }\n\n            function publish(args) {\n                if (!listener) { return; }\n                listener(args);\n            }\n\n            function notify(map) {\n                var options = getOptions();\n                var iconClass = map.iconClass || options.iconClass;\n\n                if (typeof (map.optionsOverride) !== 'undefined') {\n                    options = $.extend(options, map.optionsOverride);\n                    iconClass = map.optionsOverride.iconClass || iconClass;\n                }\n\n                if (shouldExit(options, map)) { return; }\n\n                toastId++;\n\n                $container = getContainer(options, true);\n\n                var intervalId = null;\n                var $toastElement = $('<div/>');\n                var $titleElement = $('<div/>');\n                var $messageElement = $('<div/>');\n                var $progressElement = $('<div/>');\n                var $closeElement = $(options.closeHtml);\n                var progressBar = {\n                    intervalId: null,\n                    hideEta: null,\n                    maxHideTime: null\n                };\n                var response = {\n                    toastId: toastId,\n                    state: 'visible',\n                    startTime: new Date(),\n                    options: options,\n                    map: map\n                };\n\n                personalizeToast();\n\n                displayToast();\n\n                handleEvents();\n\n                publish(response);\n\n                if (options.debug && console) {\n                    console.log(response);\n                }\n\n                return $toastElement;\n\n                function escapeHtml(source) {\n                    if (source == null) {\n                        source = '';\n                    }\n\n                    return source\n                        .replace(/&/g, '&amp;')\n                        .replace(/\"/g, '&quot;')\n                        .replace(/'/g, '&#39;')\n                        .replace(/</g, '&lt;')\n                        .replace(/>/g, '&gt;');\n                }\n\n                function personalizeToast() {\n                    setIcon();\n                    setTitle();\n                    setMessage();\n                    setCloseButton();\n                    setProgressBar();\n                    setRTL();\n                    setSequence();\n                    setAria();\n                }\n\n                function setAria() {\n                    var ariaValue = '';\n                    switch (map.iconClass) {\n                        case 'toast-success':\n                        case 'toast-info':\n                            ariaValue =  'polite';\n                            break;\n                        default:\n                            ariaValue = 'assertive';\n                    }\n                    $toastElement.attr('aria-live', ariaValue);\n                }\n\n                function handleEvents() {\n                    if (options.closeOnHover) {\n                        $toastElement.hover(stickAround, delayedHideToast);\n                    }\n\n                    if (!options.onclick && options.tapToDismiss) {\n                        $toastElement.click(hideToast);\n                    }\n\n                    if (options.closeButton && $closeElement) {\n                        $closeElement.click(function (event) {\n                            if (event.stopPropagation) {\n                                event.stopPropagation();\n                            } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n                                event.cancelBubble = true;\n                            }\n\n                            if (options.onCloseClick) {\n                                options.onCloseClick(event);\n                            }\n\n                            hideToast(true);\n                        });\n                    }\n\n                    if (options.onclick) {\n                        $toastElement.click(function (event) {\n                            options.onclick(event);\n                            hideToast();\n                        });\n                    }\n                }\n\n                function displayToast() {\n                    $toastElement.hide();\n\n                    $toastElement[options.showMethod](\n                        {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n                    );\n\n                    if (options.timeOut > 0) {\n                        intervalId = setTimeout(hideToast, options.timeOut);\n                        progressBar.maxHideTime = parseFloat(options.timeOut);\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n                        if (options.progressBar) {\n                            progressBar.intervalId = setInterval(updateProgress, 10);\n                        }\n                    }\n                }\n\n                function setIcon() {\n                    if (map.iconClass) {\n                        $toastElement.addClass(options.toastClass).addClass(iconClass);\n                    }\n                }\n\n                function setSequence() {\n                    if (options.newestOnTop) {\n                        $container.prepend($toastElement);\n                    } else {\n                        $container.append($toastElement);\n                    }\n                }\n\n                function setTitle() {\n                    if (map.title) {\n                        var suffix = map.title;\n                        if (options.escapeHtml) {\n                            suffix = escapeHtml(map.title);\n                        }\n                        $titleElement.append(suffix).addClass(options.titleClass);\n                        $toastElement.append($titleElement);\n                    }\n                }\n\n                function setMessage() {\n                    if (map.message) {\n                        var suffix = map.message;\n                        if (options.escapeHtml) {\n                            suffix = escapeHtml(map.message);\n                        }\n                        $messageElement.append(suffix).addClass(options.messageClass);\n                        $toastElement.append($messageElement);\n                    }\n                }\n\n                function setCloseButton() {\n                    if (options.closeButton) {\n                        $closeElement.addClass(options.closeClass).attr('role', 'button');\n                        $toastElement.prepend($closeElement);\n                    }\n                }\n\n                function setProgressBar() {\n                    if (options.progressBar) {\n                        $progressElement.addClass(options.progressClass);\n                        $toastElement.prepend($progressElement);\n                    }\n                }\n\n                function setRTL() {\n                    if (options.rtl) {\n                        $toastElement.addClass('rtl');\n                    }\n                }\n\n                function shouldExit(options, map) {\n                    if (options.preventDuplicates) {\n                        if (map.message === previousToast) {\n                            return true;\n                        } else {\n                            previousToast = map.message;\n                        }\n                    }\n                    return false;\n                }\n\n                function hideToast(override) {\n                    var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n                    var duration = override && options.closeDuration !== false ?\n                        options.closeDuration : options.hideDuration;\n                    var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n                    if ($(':focus', $toastElement).length && !override) {\n                        return;\n                    }\n                    clearTimeout(progressBar.intervalId);\n                    return $toastElement[method]({\n                        duration: duration,\n                        easing: easing,\n                        complete: function () {\n                            removeToast($toastElement);\n                            clearTimeout(intervalId);\n                            if (options.onHidden && response.state !== 'hidden') {\n                                options.onHidden();\n                            }\n                            response.state = 'hidden';\n                            response.endTime = new Date();\n                            publish(response);\n                        }\n                    });\n                }\n\n                function delayedHideToast() {\n                    if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n                        intervalId = setTimeout(hideToast, options.extendedTimeOut);\n                        progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n                    }\n                }\n\n                function stickAround() {\n                    clearTimeout(intervalId);\n                    progressBar.hideEta = 0;\n                    $toastElement.stop(true, true)[options.showMethod](\n                        {duration: options.showDuration, easing: options.showEasing}\n                    );\n                }\n\n                function updateProgress() {\n                    var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n                    $progressElement.width(percentage + '%');\n                }\n            }\n\n            function getOptions() {\n                return $.extend({}, getDefaults(), toastr.options);\n            }\n\n            function removeToast($toastElement) {\n                if (!$container) { $container = getContainer(); }\n                if ($toastElement.is(':visible')) {\n                    return;\n                }\n                $toastElement.remove();\n                $toastElement = null;\n                if ($container.children().length === 0) {\n                    $container.remove();\n                    previousToast = undefined;\n                }\n            }\n\n        })();\n    });\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n    if (typeof module !== 'undefined' && module.exports) { //Node\n        module.exports = factory(require('jquery'));\n    } else {\n        window.toastr = factory(window.jQuery);\n    }\n}));\n","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/* eslint-disable max-len */\nexport const GAMES = {\n  CAR_PUZZLE: 'rush-hour-car-parking-puzzle'\n}\n\nexport const ENDPOINT = {\n  USER_PROFILE: '/api/user/profile/',\n  USER_RESET_PASSWORD: '/api/v2/user/password/',\n\n  BUY_SUBSCRIPTION_APP: '/api/braintree/buy-subscription-app/',\n  BUY_SUBSCRIPTION: '/api/braintree/buy-subscription/',\n  UPGRADE_SUBSCRIPTION: '/api/braintree/upgrade-subscription/',\n  COUPON_VALIDATE: '/api/braintree/coupon/validate/',\n  UPDATE_PAYMENT_METHOD: '/api/braintree/payment-method/',\n  BUY_PRODUCT: '/api/braintree/purchases/',\n  GET_BRAINTREE_TOKEN: '/api/braintree/get-token/',\n\n  GIFT_CODE_VALIDATE: '/api/gift/verify/',\n  GIFT_CODE_REDEEM: '/api/gift/redeem/',\n  GIFT_PURCHASE: '/api/gift/purchase/',\n\n  USER_LOGIN: '/api/v2/user/login/',\n  WAIT_LIST: '/api/v2/waitlist/',\n  SET_PASSWORD: '/api/v2/user/set-password/',\n\n  TEACHER_SIGN_UP: '/api/school/v2/teachers/',\n  KID_PROFILE_CREATE: '/api/school/v2/users/create/',\n\n  LMS_SUBSCRIPTION: '/api/lms/subscription/',\n  FEEDBACK: '/api/feedback/',\n  FEEDBACK_V2: '/api/v2/feedback/',\n  BLOG_LIKE: '/api/storytime/like/',\n  COMMENT: '/api/comment/',\n  WORKSHEET_RATING: '/api/worksheets/rating/',\n  QUIZ_RATING: '/api/v4/flashes/rating/',\n  INVOICE_PAYMENT: '/api/invoice-payment/',\n  GET_KIDS_REPORT_DATA: (offset) => `/api/v1/study-reports/kids/?tz_offset=${offset}`,\n  GET_KID_REPORT_DATA: (params, kidId) => `/api/v1/study-reports/kids/${kidId}/studying-time-spent/${params}`,\n  GET_COURSE_DETAILS: (courseId) => `/api/study/v3/course-detail/${courseId}/`,\n\n  MARK_AS_DONE: (id) => `/api/worksheets/${id}/accomplished/`,\n  ADD_TO_FAVORITE: (id) => `/api/worksheets/${id}/favorite/`,\n\n  CANCEL_SUBSCRIPTION: (merchant, id) => `/api/${window.merchant}/subscription/${id}/`,\n  NOTIFICATION_MARK_AS_READ: '/api/user-campaign-message/batch-mark-as-read/',\n  USER_SUBSCRIBE: '/api/user/subscribe/',\n  WORKSHEETS_PDF_STATUS: '/api/worksheets/pdf/',\n  WORKSHEET_CHECK_STATUS: '/api/worksheets/pdf/?commit=1',\n\n  // Skilled worksheets\n  GET_SKILLED_WORKSHEET: (id) => `/api/v1/skilled-worksheets/${id}/`,\n\n  // Classroom\n  CLASSROOM_JOIN: (id) => `/api/classrooms/${id}/members/`,\n  CLASSROOM_CODE_CHECK: '/api/classrooms/join/',\n  CLASSROOM_CREATE: '/api/classrooms/',\n  CLASSROOM_START: (id) => `/api/classrooms/${id}/start/`,\n  CLASSROOM_UPDATE: (id) => `/api/classrooms/${id}/`,\n  CLASSROOM_ADD_ACTIVITY: (classroomId) => `/api/classrooms/${classroomId}/activities/`,\n  WEBSITE_WORKSHEETS: '/api/study/v3/website-worksheets/?features=default,tf_regression,tick_v1,circle_v2,chessboard,coloring',\n  WEBSITE_DRILLS: '/api/study/v3/website-skilled-worksheet-subjects/?remove_root_subject=1',\n  GET_SUBJECTS_FOR_FILTER: '/api/worksheet/subjects/',\n\n  ADD_TASK_TO_SUBJECT: '/api/v1/skilled-worksheets/bulk/',\n\n  // Home library endpoints\n  WEBSITE_VIDEOS: '/api/study/v3/website-videos/',\n  WEBSITE_GAMES: '/api/study/v3/games/',\n  WEBSITE_ONLINE_GAMES: '/api/study/v3/online-games/',\n  WEBSITE_QUIZZES: '/api/v4/flashes/?all=1',\n  WEBSITE_LESSONS: '/api/study/v3/website-lessons/',\n  SUBJECT_CATEGORIES_MAPPING: '/api/segment/subject-categories-mapping/',\n  SUBJECTS_GRADE_EXCLUDING: '/api/segment/subjects-v2/grade-excluding/',\n};\n/* eslint-enable */\n\nexport const URLS = {\n  FREE_SIGN_UP: '/free-sign-up/',\n  WEB_GAMES_MATH_1GRADE_APP: '/web-games/math/first-grade/app/',\n  FREE_SIGN_UP_WORKSHEET: '/free-sign-up/welcome/',\n  SIGN_UP: '/sign-up/',\n  SIGN_UP_TEACHER: '/sign-up/teacher/',\n  DISTRIBUTOR_CODE_SUCCESS: '/activate-license/success/',\n  PARENT_SUBSCRIPTION_SUCCESS: 'subscription-success',\n  PARENT_SUBSCRIPTION_PLANS: 'subscription-plans',\n  HYBRID_LEARNING_PLATFORM: 'hybrid-learning-platform',\n  SIGN_UP_PARENT_COMPLETE: 'sign-up-parent',\n  SIGN_UP_PARENT_SUCCESS: '/sign-up/parent/success/',\n  KID_PROFILE_CREATE: '/kid-profile/create/',\n  GIFT_REDEEM_SUCCESS: '/gift/redeem/success/',\n  LEARNING_MATERIALS: '/learning-materials/',\n  GIFT_PURCHASE: 'gift-purchase',\n  TG_ONLINE: '/tg/',\n  CLASSROOM: '/classroom',\n  WORKSHEET_CHECK_BASE: '/worksheets-check',\n  WORKSHEET_CHECK: slug => `/worksheets-check/${slug}/`,\n  QUIZ_CHECK: slug => `/quiz-check/${slug}/`\n};\n\nexport const GET_PARAMS = {\n  // REDIRECT_TO_TGC is duplicated in kidsacademy/kidsacademy/worksheet-check/src/utils/utils.ts:77\n  OPEN_ACTIVITY_IN_TGC: 'ka_website.openActivityInTgc',\n  WORKSHEET_ID: 'ka_website.worksheetId',\n  LESSON_ID: 'ka_website.lessonId',\n  REDIRECT_TO_TGC: 'ka_website.toTGC',\n  SHOW_TGC_ONBOARDING: 'ka_website.showOnboarding',\n  AD_FREE_MODAL: 'adsFreeModal',\n  FROM_DISTRIBUTOR_SIGN_UP_FLOW: 'distributorCodeFlow',\n  EMAIL: 'email',\n  ACCOUNT_TYPE: 'type',\n  MAKE_REDIRECT: 'makeRedirect',\n  COUPON: 'coupon',\n  GRADE: 'grade',\n  SUBJECT: 'subject',\n  SKIP_ONBOARDING: 'skipOnboarding',\n  ERROR: 'error',\n  NEXT: 'next',\n  PLAN_TO_UPGRADE_SLUG: 'planToUpgradeSlug',\n  MESSAGE_ID: 'messageId',\n  TITLE: 'title',\n  IS_TGC: 'isTGC',\n  VERSION: 'v',\n  GAME_FULL_SCREEN_MODE: 'fullScreen',\n  DOWNLOAD_POPUP_LIMIT: 'downloadLimitPopup',\n  CAMPAIGN_ID: 'CampaignID'\n};\n\nexport const DEFAULT_GRADE_ID_FOR_TGC = 1;\n\nexport const LOCAL_STORAGE_KEYS = {\n  PASSED_SKILLED_WORKSHEET_LIST: 'passedSkilledWorksheetList',\n  WORKSHEET_LAST_DOWNLOAD_DATE: 'worksheetLastDownloadDate',\n  WORKSHEET_TRY_DOWNLOADED_COUNT: 'worksheetTryDownloadedCount',\n  WORKSHEET_ID: 'worksheetId',\n  WORKSHEET_SLUG: 'worksheetSlug',\n  WORKSHEET_TO_DOWNLOAD_DATA: 'worksheetToDownloadData',\n  WORKSHEET_ACTION: 'worksheetsAction',\n  PLACEMENT: 'placement',\n  WEBSITE_ACCOUNT_TYPE: 'websiteAccountType',\n  PARTNER_COUPON_CODE: 'partnerCouponCode',\n  IS_UI_TESTING_MODE: 'isTestRunning',\n  IS_SOUND_MUTED: 'isSoundMuted',\n  IS_BLOG_SUBSCRIBED: 'isBlogSubscribed',\n  POPUP_LAST_DISPLAY_DATE: 'lastPopupDisplayDate',\n  SUBSCRIPTION_POPUP_DISPLAY_COUNTER: 'subscriptionPopupDisplayCounter',\n  IS_SHOW_STEP_PROGRESS_BAR: 'isShowStepProgressBar',\n  SHOW_WEBSITE_PLANS_MODAL: 'showWebsitePlansModal',\n  SHOW_WEBSITE_PLANS_MODAL_PURCHASE: 'showWebsitePlansModalPurchase',\n  SHOW_PROMO_PLANS_MODAL_PURCHASE: 'showPromoPlansModalPurchase',\n  WEBSITE_PLANS_MODAL_PLAN_SLUG: 'websitePlansModalPlanSlug',\n  WEBSITE_PLANS_MODAL_EBLOX_ADDED: 'websitePlansModalEbloxAdded',\n  CHECK_AVAILABILITY_OF_PDF: 'checkAvailabilityOfPdf',\n  SHOW_WEB_GAMES_SUBSCRIPTION_MODAL: 'showWebGamesSubscriptionModal',\n  JOIN_KIDSACADEMY_FOR_FREE: 'joinKidsAcademyForFree'\n};\n\nexport const JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE = {\n  GAME: 'GAME',\n  COMPLETE_ONLINE: 'COMPLETE_ONLINE',\n  DEFAULT: 'DEFAULT'\n};\n\nexport const SUBSCRIPTION_TYPES = {\n  PARENT: '1',\n  SCHOOL: '2',\n  DISTRICT: '3'\n};\n\nexport const FEEDBACK_TYPES = {\n  REQUEST: 1,\n  SCHOOL_REQUEST: 2,\n  ISSUE_REPORT: 3,\n  QUESTION_FOR_EXPERT: 4,\n  QUOTE_REQUEST: 5,\n  // CONTENT_LICENSING: 6, need to add this to back-end\n};\n\nexport const CURRENCY = '$';\n\nexport const SUPPORT_EMAIL = 'accounts@kidsacademy.com';\n\nexport const ERROR_CODES = {\n  CAPTCHA_INVALID: 1400,\n  ALREADY_REGISTERED: 1110,\n  HAS_NO_SCHOOL_DISTRICT: 1104,\n  AUTH_STUDENT_USER: 1119,\n  // eslint-disable-next-line max-len\n  STUDENT_LIMIT_EXCEEDED: 1601  // max students already joined classroom (classroom was created by teacher without subscription)\n};\n\nexport const RESPONSE_CODES = {\n  1101: 'INVALID_DISTRICT',\n  1102: 'INVALID_SCHOOL',\n  1103: 'INVALID_USER',\n  1104: 'EMPTY_USER',\n  1119: 'AUTH_STUDENT_USER',\n  900: 'GIFT_CODE_INVALID',\n  1008: 'SUBSCRIPTION_EXISTS',\n  1117: 'INVALID_ACCOUNT_TYPE'\n};\n\nexport const SUBJECTS = {\n  INVALID_DISTRICT: 'District is not validated',\n  INVALID_SCHOOL: 'School is not validated',\n  INVALID_USER: 'User is not validated',\n  EMPTY_USER: 'User has no school and district',\n  GIFT_CODE_INVALID: '',\n  SUBSCRIPTION_EXISTS: '',\n  INVALID_ACCOUNT_TYPE: ''\n};\n\nexport const ACCOUNT_TYPES = {\n  PARENT: '0',\n  TEACHER: '1',\n  SCHOOL_ADMIN: '3',\n  DISTRICT: '2',\n  KID: '6'\n};\n\nexport const ACCOUNT_TYPES_STRING = {\n  PARENT: 'parent',\n  TEACHER: 'teacher',\n  DISTRICT: 'district'\n};\n\nexport const SUBJECTS_CONFIG = {\n  /* eslint-disable max-len */\n  prek: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'The World Around Us',\n    id: 8\n  }, {name: 'Chess', id: 6}, {name: 'Art and Crafts', id: 9}],\n  gradek: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {name: 'Science', id: 3}, {\n    name: 'Reading',\n    id: 4\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade1: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {name: 'Science', id: 3}, {\n    name: 'Reading',\n    id: 4\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade2: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'Science',\n    id: 3\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade3: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'Science',\n    id: 3\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}]\n  /* eslint-enable */\n};\n\nexport const ACCOUNT_SETTINGS_NAV_ITEM = {\n  REPORT: 'report'\n};\n\nexport const EBLOX_COUPONS = ['eblox', 'e-blox'];\n\nexport const PROMO_LANDINGS_URLS = [\n  '/online-learning-app-games-video-practice/',\n  '/1/',\n  '/2/',\n];\n\nexport const SUBJECTS_CATEGORIES_MAPPING = {\n  'Math': ['Math', 'Logic and Early Math'],\n  'English': ['English Language Arts', 'English as a Second Language'],\n  'World Around Us': ['World around Us'],\n  'Science': ['Science'],\n  'Social Studies': ['Social Studies'],\n  'Chess': ['Chess'],\n  'Art And Crafts': ['Arts'],\n  'Reading': ['Foundational Reading'],\n};\n\nexport const SUBJECTS_GRADES_MAPPING = {\n  'Math': [1, 2, 3, 5, 6],\n  'English': [1, 2, 3, 5, 6],\n  'World Around Us': [1],\n  'Science': [2, 3, 5, 6],\n  'Social Studies': [2, 3, 5, 6],\n  'Chess': [1, 2, 3, 5, 6],\n  'Art And Crafts': [1],\n  'Reading': [2, 3, 5, 6],\n};\n\n// eslint-disable-next-line max-len\nexport const MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nexport const SUBSCRIPTION_CANCEL_REASON_IDS = {\n  OTHER: 3\n};\n\nexport const IFRAME_EVENTS = {\n  GAME_HINT_SHOWN: 'GAME_HINT_SHOWN',\n  GAME_SCORE: 'GAME_SCORE',\n  GAME_TIME_STARTED: 'GAME_TIME_STARTED',\n  GAME_TIME_CANCELLED: 'GAME_TIME_CANCELLED',\n  GAME_TIME_COMPLETED: 'GAME_TIME_COMPLETED',\n};\n\nexport const POST_HOG = {\n  PROJECT_ID: {\n    CLASSROOM: 'phc_KHhKCtPwhypuRp8t03IpkA0KT20AzZ0skCK5a9xnnGs',\n    TGC: 'phc_W2hlcR55zEcKOGNcD2VHQ2WKigsciqp5zNrH4ML4Zyx'\n  }\n};\n\nexport const IFRAME_POST_EVENTS = {\n  WEB_TOGGLE_SOUNDS: 'WEB_TOGGLE_SOUNDS'\n};\n\nexport const TGC_IFRAME_EVENTS = {\n  OPEN_ACTIVITY: 'OPEN_ACTIVITY',\n  GAME_INIT_STARTED: 'GAME_INIT_STARTED',\n  GAME_INIT_COMPLETED: 'GAME_INIT_COMPLETED',\n  GAME_SOUNDS_ACTIVATED: 'GAME_SOUNDS_ACTIVATED',\n  PURCHASE_INIT: 'PURCHASE_INIT',\n  PURCHASE_CANCELED: 'PURCHASE_CANCELED',\n  PURCHASE_COMPLETED: 'PURCHASE_COMPLETED',\n  USER_UPDATED: 'USER_UPDATED',\n  USER_REQUEST_EMAIL: 'USER_REQUEST_EMAIL'\n};\n\n// eslint-disable-next-line max-len\nexport const DROPIN_SCRIPT_URL = 'https://js.braintreegateway.com/web/dropin/1.46.0/js/dropin.min.js';\n\nexport const CUSTOM_MESSAGE = {\n  THREE_D_SECURE_ABORT: 'Purchase cancelled, please select another payment method',\n  BRAINTREE_CREATE_ERROR: 'Please try again.',\n};\n\n// subscription popup modal options\nexport const SUBSCRIPTION_POPUP = {\n  DEFAULT_DELAY: 10000,\n  SECOND_DISPLAY_DELAY: 120000,\n  DISPLAY_LIMIT: 2\n};\n\n// timeout to start download worksheet/show close popup btn\nexport const WORKSHEET_DOWNLOAD_DELAY = 10000;\n\n// time limit for loading spinner on start download elements\nexport const WORKSHEET_POPUP_INIT_LIMIT = 15000;\n\n// attribute representing monetization popup purchase step have been triggered\nexport const PURCHASE_STEP_TRIGGERED_ATTRIBUTE = 'data-purchase-triggered';\n\nexport const SUBSCRIPTION_PERIODS = {\n  LIFETIME: 'lifetime'\n};\n\nexport const SUBSCRIPTION_PERIOD_MAPPING = {\n  /* eslint-disable max-len */\n  'one_day': (price) => `<p>Renews at ${CURRENCY}${price} / day</p>`,\n  'half_yearly': (price) => `<p>Renews at ${CURRENCY}${price} / half year after free trial</p>`,\n  'monthly': (price) => `<p>Renews at ${CURRENCY}${price} / month after free trial</p>`,\n  'quarterly': (price) => `<p>Renews at ${CURRENCY}${price} / quarter after free trial</p>`,\n  'yearly': (price) => `<p>Renews at ${CURRENCY}${price} / year after free trial</p>`,\n  'lifetime': () => ''\n  /* eslint-enable */\n};\n\nexport const SECONDS_PER_DAY = 86400;\nexport const SECONDS_PER_HOUR = 3600;\nexport const SECONDS_PER_MINUTE = 60;\n\nexport const MAILING_LISTS = {\n  BLOG_POPUP: 'kidsacademy_newsletter',\n  TGC_LIST: 'kidsacademy_tgc_list'\n};\n\nexport const MODALS = {\n  FREE_SIGN_UP_FOR_DOWNLOAD_W: '#freeSignupForDownloadWorksheet',\n  ACCOUNT_TYPE_MODAL: '#websiteAccountTypeModal',\n  WEBSITE_SIGN_UP_MODAL: '#learning-resources-registration',\n  WEBSITE_QUESTION_FAVOURITES_MODAL: '#website-question-favourites-modal',\n  WEBSITE_PLANS_MODAL: '#website-plans-modal',\n  WEBSITE_CR_TG_PLANS_MODAL: '#website-cr-tg-plans-modal',\n  WEBSITE_QUESTION_DONE_MODAL: '#website-question-done-modal',\n  MONETIZATION: '#monetization-popup',\n  ADDS_FREE: '#addFreeModal',\n  WORKSHEET_IMAGE_POPUP: '#worksheetImagePopup',\n  WORKSHEET_IMAGE_POPUP_ID: (id) => `#worksheetImagePopup-${id}`,\n  QUIZ_IMAGE_POPUP: '#quizImagePopup',\n  TGC_SUBSCRIPTION_POPUP: '#tgcSubscriptionPopUp',\n  WEB_TGC_PAYWALL_POPUP: '#tgc-paywall-modal',\n  WEB_APP_PAYWALL_POPUP: '#web-app-paywall-modal',\n  WEB_TGC_LOGIN_MODAL: '#tgcLogInModal',\n  WEB_TGC_RESET_PASSWORD_MODAL: '#tgcResetPasswordModal',\n  TGC_PAYWALL_MODAL_NEW: '#tgc-paywall-modal-new',\n  JOIN_KA_FOR_FREE_MODAL: '#join-ka-for-free-modal',\n  SUBSCRIPTION_PROMO_MODAL: '#subscriptionPromoModal'\n};\n\nexport const WORKSHEET_ACTIONS = {\n  GO_TO_WORKSHEET_CHECK_IN_TGC: 'goToWorksheetCheckInTgc',\n  ADD_TO_FAVORITE: 'addToFavorite',\n  DELETE_FROM_FAVORITE: 'deleteFromFavorite',\n  MARK_AS_DONE: 'markAsDone',\n  UNMARK_AS_DONE: 'unmarkAsDone',\n  FAVORITE_FILTER: 'favoriteFilter',\n  DONE_FILTER: 'doneFilter',\n  INIT_WORKSHEET_DOWNLOAD: 'initDownload'\n};\n\nexport const PLACEMENTS = {\n  WORKSHEET_LIST_PAGE: 'worksheet-list-page',\n  WORKSHEET_DETAIL_PAGE: 'worksheet-page',\n  LESSON_DETAIL_PAGE: 'worksheet-lesson-page',\n  HOME_PAGE: 'home-page'\n};\n\nexport const WEBSITE_CUSTOM_EVENTS = {\n  DOWNLOAD_WORKSHEET: 'downloadWorksheet',\n  SHOW_PLANS_POPUP_NO_FREE: 'showPlansPopupNoFree',\n  RELOAD_HTMX_ADS_BANNERS: 'reloadHtmxAdsBanners'\n};\n\nexport const WEBSITE_LIMIT_STATUSES = {\n  ALLOWED: 'ALLOWED',\n  SHOW_PROMO_BANNER: 'SHOW_PROMO_BANNER',\n  DENIED: 'DENIED'\n};\n\nexport const URL_NAMES = {\n  WORKSHEET_ANSWERS: 'worksheet-answers'\n};\n\nexport const LANGUAGE_CODES = {\n  SPANISH: 'es',\n  ENGLISH: 'en'\n};\n\nexport const MIDDLE_WIDTH = 991;\n\n// export const MOBILE_WIDTH = 767;\n\n// export const SHOW_ADDS_FREE_MODAL_DELAY = 1000;\n\n\nexport const UTM = {\n  SOURCE: {\n    MOBI: 'kidsacademy-mobi',\n    COM: 'kidsacademy-com'\n  },\n  MEDIUM: {\n    VIDEO: 'video',\n    QUIZ: 'quiz',\n    WORKSHEET: 'worksheet',\n    GAME: 'game',\n    EDUCATORS: 'educators'\n  },\n  CAMPAIGN: {\n    LANDING: 'landing'\n  },\n  CONTENT: {\n    CATALOG: 'catalog',\n    ACTIVITY_PAGE: 'activity+page',\n    START_CLASSROOM: 'start+my+classroom'\n  }\n};\n\n/* web tgc onboarding events: /tg */\nexport const POST_HOG_PAGES = {\n  SUBSCRIPTION: 'Subscription',\n  ONBOARDING: 'Onboarding',\n};\n\n/* web tgc onboarding events: /tg */\nexport const POST_HOG_EVENTS = {\n  TRIAL: 'Trial',\n  SIGN_IN: 'Sign in',\n  PURCHASE: 'Purchase',\n  START_TRIAL_BTN: 'Start trial button',\n  PURCHASE_ERROR: 'Purchase error',\n  TGC_STEP_1: 'tgc step 1',\n  TGC_STEP_2: 'tgc step 2',\n  TGC_STEP_3: 'tgc step 3',\n  PAYWALL: 'Paywall',\n  SIGN_UP_OK: 'Sign up ok',\n  SIGN_UP_ERROR: 'Sign up error',\n};\n\nexport const HTTPS_PREFIX = () => {\n  let prefix = 'https://'; // prod & stage\n\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'dev') prefix = 'http://';\n  if (!env) prefix = 'https://';\n\n  return prefix;\n};\n\nexport const WORKSHEET_ACTION_TYPES = {\n  COMPLETE_ONLINE: 'completeOnline',\n  DOWNLOAD: 'download',\n  LEARN_ONLINE: 'learnOnline',\n};\n\nexport const IS_DOWNLOAD_WORKSHEET_FLOW = '_download-worksheet-flow';\n","import {\n  CURRENCY,\n  ENDPOINT,\n  ERROR_CODES,\n  LOCAL_STORAGE_KEYS,\n  WEBSITE_LIMIT_STATUSES,\n  SUPPORT_EMAIL,\n  WEBSITE_CUSTOM_EVENTS,\n  ACCOUNT_TYPES,\n  URLS,\n  JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE,\n  HTTPS_PREFIX,\n  GET_PARAMS,\n  PLACEMENTS,\n  WORKSHEET_ACTIONS,\n  WORKSHEET_ACTION_TYPES,\n  MODALS\n} from './config.js';\n\nexport const getBrowser = () => {\n  const userAgent = navigator.userAgent;\n  let tem;\n  let M = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n  if (/trident/i.test(M[1])) {\n    tem = /\\brv[ :]+(\\d+)/g.exec(userAgent) || [];\n    return 'IE ' + (tem[1] || '');\n  }\n\n  if (M[1] === 'Chrome') {\n    tem = userAgent.match(/\\b(OPR|Edge)\\/(\\d+)/);\n    if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera');\n  }\n\n  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n  if ((tem = userAgent.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1]);\n  return M.join(' ');\n};\n\nexport const toggleButtonLoading = ($button, isLoading, callback = () => {}) => {\n  if (!$button) return;\n  if (!$button.length) return;\n\n  const width = $button.width();\n\n  if (isLoading) {\n    $button.attr('data-value', $button.html());\n    $button.attr('data-position', $button.css('position'));\n    $button.attr('disabled', true);\n    $button.css('position', 'relative');\n    // eslint-disable-next-line max-len\n    $button.html('<div class=\"lds-ellipsis\" style=\"position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\"><div></div><div></div><div></div><div></div></div>');\n    $button.width(width);\n  } else {\n    $button[0].style.removeProperty('width');\n    $button.html($button.attr('data-value'));\n    $button.css('position', $button.attr('data-position'));\n    $button.attr('disabled', false);\n  }\n  callback();\n};\n\nexport const capitalize = (string) => {\n  if (typeof string !== 'string') return '';\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\nexport const replaceEmailWithLink = (error, addLinkToEmail = true) => {\n  const emailLinkHref = `mailto:${SUPPORT_EMAIL}`;\n  const text1 = 'contact us';\n  const text2 = 'contact support';\n\n  // TODO add support for spanish lang\n\n  if (error.indexOf('@') > -1 && addLinkToEmail) {\n    const email = error.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\n    return error.replace(email[0], `<a href=\"mailto:${email[0]}\">${email[0]}</a>`);\n  }\n\n  if (error.toLowerCase().indexOf(text1) > -1 && addLinkToEmail) {\n    return error.replace(text1, `<a href=\"${emailLinkHref}\">${text1}</a>`);\n  }\n\n  if (error.toLowerCase().indexOf(text2) > -1 && addLinkToEmail) {\n    return error.replace(text2, `<a href=\"${emailLinkHref}\">${text2}</a>`);\n  }\n\n  return error;\n};\n\nexport const getError = (errorResponse, addLinkToEmail = true) => {\n  const emailLinkHref = `mailto:${SUPPORT_EMAIL}`;\n\n  const errorMsgs = {\n    en: `Something went wrong. Please <a href=\"${emailLinkHref}\">contact us</a>.`,\n    es: `Algo salió mal. Por favor  <a href=\"${emailLinkHref}\">contáctenos</a>.`\n  };\n\n  let defaultErrorMsg = errorMsgs[window.LANGUAGE_CODE];\n  if (!defaultErrorMsg) defaultErrorMsg = errorMsgs.en;\n\n  if (!errorResponse) return defaultErrorMsg;\n\n  let errors = '';\n\n  try {\n    errors = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return defaultErrorMsg;\n  }\n\n  if (!errors) return defaultErrorMsg;\n  if (!errors.error) return defaultErrorMsg;\n\n  const updatedErrorText = replaceEmailWithLink(errors.error, addLinkToEmail);\n  return updatedErrorText;\n};\n\nexport const getErrorCode = (errorResponse) => {\n  if (!errorResponse) return null;\n  let error = null;\n\n  try {\n    error = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return null;\n  }\n\n  if (!error) return null;\n  if (!error.error_code) return null;\n\n  return error.error_code;\n};\n\nexport const setUrlParam = (name, value) => {\n  if (history.pushState) {\n    const location = window.location;\n    const newUrl = `${location.protocol}//${location.host}${location.pathname}?${name}=${value}`;\n    window.history.pushState({path: newUrl}, '', newUrl);\n  }\n};\n\nexport const getUrlParam = (paramName) => {\n  if (typeof URLSearchParams === 'function') {\n    const paramValue = new URLSearchParams(window.location.search).get(paramName);\n    return paramValue;\n  }\n\n  // fallback for IE\n  const results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n  if (results == null) return null;\n  return decodeURI(results[1]) || null;\n};\n\nexport const deleteUrlParam = (paramName) => {\n  const url = new URL(window.location);\n  url.searchParams.delete(paramName);\n  history.replaceState(null, null, url);\n};\n\nexport const isBase64 = (str) => {\n  try {\n    return btoa(atob(str)) === str;\n  } catch (err) {\n    return false;\n  }\n};\n\nexport const fixPlusSymbolInProvidedEmail = (email) => {\n  return email.replace(' ', '+');\n};\n\nexport const scrollToHashedElement = (hash, {\n  callback = () => {},\n  scrollIntoViewDelay = 500,\n  scrollTimeout = 300\n}) => {\n  if (!hash) return;\n\n  const $header = $('header');\n  const isHeaderFixed = $header.length ? document.documentElement.clientWidth > 891 : false;\n  const heightToSubtract = isHeaderFixed ? $header.innerHeight() : 0;\n\n  setTimeout(() => {\n    const formattedHash = hash.substr(1);\n    const $elem = $(`[data-hash=\"${formattedHash}\"]`);\n\n    if ($elem.length) {\n      //need to subtract header height cause header for tablets is fixed\n      const elemOffset = $elem.offset().top;\n      const scrollTop = elemOffset - heightToSubtract;\n\n      $([document.documentElement, document.body]).animate(\n        {scrollTop},\n        scrollIntoViewDelay,\n        () => {\n          callback($elem);\n        }\n      );\n    }\n  }, scrollTimeout);\n};\n\n/*\n*  func param takes name of needed api function, e.g. 'playVideo'\n*  For a full list of possible functions, see:\n*  http://code.google.com/apis/youtube/js_api_reference.html\n*/\nexport const callYTPlayer = ($frame, func, args) => {\n  if (!($frame instanceof jQuery)) return;\n  const frameContainerId = $frame.attr('id');\n  const iframe = $frame[0];\n  if (iframe) {\n    // Frame exists,\n    iframe.contentWindow.postMessage(JSON.stringify({\n      'event': 'command',\n      'func': func,\n      'args': args || [],\n      'id': frameContainerId\n    }), '*');\n  }\n};\n\nexport const getYTVideoConfig = (videoId, onReadyHandler, $videoModal) => {\n  return {\n    width: '100%',\n    height: '300',\n    videoId: videoId,\n    playerVars: {\n      rel: 0\n    },\n    events: {\n      'onReady': onReadyHandler,\n      'onStateChange': function (state) {\n        if (state.data === window.YT.PlayerState.ENDED && $videoModal) {\n          $videoModal.modal('hide');\n        }\n      }\n    }\n  };\n};\n\nexport const initGoogleRecaptcha = (callback, expiredCallback = null) => {\n  if (!$('#google-recaptcha-container').length) return;\n\n  // add RECAPTCHA script tag to DOM\n  $(document).ready(() => {\n    const captchaDataSelector = 'google-recaptcha';\n    const $captchaDataSelector = $(`[data-selector=\"${captchaDataSelector}\"]`);\n    if ($captchaDataSelector.length) return; // prevent multiple recaptcha init\n\n    window.onRECAPTCHAloadCallback = () => {\n      try {\n        grecaptcha.render('google-recaptcha-container', {\n          'sitekey': window.RECAPTCHA_SITE_KEY,\n          'callback': callback,\n          'expired-callback': expiredCallback,\n          'error-callback': (error) => {\n            console.error(error); // eslint-disable-line no-console\n          },\n        });\n      } catch (error) {\n        console.error(error); // eslint-disable-line no-console\n      }\n    };\n\n    // create script tag\n    const script = document.createElement('script');\n    script.type = 'text/javascript';\n    script.setAttribute('src', 'https://www.google.com/recaptcha/api.js?onload=onRECAPTCHAloadCallback&render=explicit');\n    script.setAttribute('data-selector', captchaDataSelector);\n\n    // set size depends on device screen width\n    const deviceWidth = (window.innerWidth > 0) ? window.innerWidth : screen.width;\n    const minAvailableWidthForDesktopView = 460;\n    if (deviceWidth < minAvailableWidthForDesktopView) {\n      $('#google-recaptcha-container').attr('data-size', 'compact');\n    }\n\n    document.body.appendChild(script);\n  });\n};\n\nexport const handleCAPTCHAError = (errorResponse) => {\n  if (!errorResponse) return;\n\n  let error = {};\n\n  try {\n    error = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return;\n  }\n\n  if (!error) return;\n\n  if (error.error_code === ERROR_CODES.CAPTCHA_INVALID\n    && grecaptcha\n    && typeof grecaptcha.reset == 'function') {\n    grecaptcha.reset();\n  }\n};\n\nexport const copyStringToBuffer = (stringToCopy) => {\n  if (!stringToCopy) return;\n\n  const el = document.createElement('textarea');\n\n  el.value = stringToCopy;\n  el.setAttribute('readonly', '');\n  el.style.position = 'absolute';\n  el.style.left = '-9999px';\n  document.body.appendChild(el);\n\n  const selected = document.getSelection().rangeCount > 0\n    ? document.getSelection().getRangeAt(0) : false;\n\n  el.select();\n  document.execCommand('copy');\n  document.body.removeChild(el);\n\n  if (selected) {\n    document.getSelection().removeAllRanges();\n    document.getSelection().addRange(selected);\n  }\n};\n\nexport const isASCII = (str) => {\n  return /^[\\x00-\\x7F]*$/.test(str);\n};\n\nexport const braintreeDropinConfig = (totalAmount, container = '#dropin-container') => {\n  const config = {\n    authorization: window.braintree_token,\n    container: container,\n    threeDSecure: true,\n    vaultManager: true,\n    card: {\n      cardholderName: {\n        required: true\n      },\n      overrides: {\n        styles: {\n          '.invalid': {\n            color: 'red'\n          }\n        }\n      }\n    },\n    paypal: {\n      flow: 'vault',\n      buttonStyle: {\n        size: 'medium'\n      }\n    },\n    paypalCredit: {\n      flow: 'vault',\n      buttonStyle: {\n        size: 'medium'\n      }\n    },\n    venmo: {},\n    applePay: {\n      displayName: 'Kids Academy Company',\n      paymentRequest: {\n        total: {\n          label: 'Kids Academy Talented & Gifted',\n          amount: totalAmount // should be in dollars (string): '152.99', '0.99'\n        },\n        // We recommend collecting billing address information, at minimum\n        // billing postal code, and passing that billing postal code with all\n        // Google Pay transactions as a best practice.\n        requiredBillingContactFields: []\n      },\n    },\n  };\n\n  if (window.ENV !== 'prod') {\n    config.googlePay = {\n      googlePayVersion: 2,\n      merchantId: '09638095500891200480',\n      transactionInfo: {\n        totalPriceStatus: 'FINAL',\n        totalPrice: totalAmount, // should be in dollars (string): '152.99', '0.99'\n        currencyCode: 'USD'\n      },\n      allowedPaymentMethods: [{\n        type: 'CARD',\n        parameters: {\n          // We recommend collecting and passing billing address information\n          // with all Google Pay transactions as a best practice.\n          billingAddressRequired: true,\n          billingAddressParameters: {\n            format: 'FULL'\n          }\n        }\n      }]\n    };\n  }\n\n  return config;\n};\n\nexport const threeDSecureConfig = (totalPrice) => {\n  const givenName = window.user && window.user.first_name;\n  const surname = window.user && window.user.last_name;\n  return {\n    amount: parseFloat(totalPrice),\n    email: window.user && window.user.email,\n    billingAddress: {\n      // ASCII-printable characters required, else will throw a validation error\n      givenName: isASCII(givenName) && givenName,\n      // ASCII-printable characters required, else will throw a validation error\n      surname: isASCII(surname) && surname\n    }\n  };\n};\n\nexport const getUserSources = (key) => {\n  if (!key) return '';\n  if (!window.sourcesOfUser) return '';\n  if (!window.sourcesOfUser.hasOwnProperty(key)) return '';\n\n  const result = window.sourcesOfUser[key];\n  if (result === 'None') return null;\n\n  return result;\n};\n\nexport const scrollToTop = () => {\n  const $body = $('body, html');\n  $body.animate({\n    scrollTop: 0\n  }, 500);\n};\n\nexport const getHumanReadablePrice = (priceInCents) => {\n  const result = (priceInCents / 100).toFixed(2).toString();\n  return `${CURRENCY}${result}`;\n};\n\n\nexport const isUiTestingMode = () => {\n  const value = localStorage.getItem(LOCAL_STORAGE_KEYS.IS_UI_TESTING_MODE);\n  const result = value === 'true';\n\n  return result;\n};\n\nexport const isAnySelected = ($elementsArray) => {\n  let isAnySelected = false;\n\n  $elementsArray.each(function (index, item) {\n    if (item.checked) isAnySelected = true;\n  });\n\n  return isAnySelected;\n};\n\n\nexport const isObjectEmpty = (obj) => {\n  if (Object.getOwnPropertyNames) {\n    return (Object.getOwnPropertyNames(obj).length === 0);\n  }\n\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key)) return false;\n  }\n\n  return true;\n};\n\nexport const isBrowserSupportsWebp = (callback) => {\n  const imgHeight = 2;\n  const webP = new Image();\n  /* eslint-disable max-len */\n  webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n\n  webP.onload = webP.onerror = () => {\n    callback(webP.height === imgHeight);\n  };\n};\n\nexport const dispatchCustomEvent = (name, data) => {\n  const event = new CustomEvent(name, {detail: data});\n  document.dispatchEvent(event);\n};\n\nexport const storage = {\n  set: (key, value) => {\n    localStorage.setItem(key, value);\n  },\n  get: (key, isDelete = false) => {\n    const result = localStorage.getItem(key);\n    if (isDelete) localStorage.removeItem(key);\n    return result;\n  },\n  delete: (key) => {\n    localStorage.removeItem(key);\n  }\n};\n\nexport const isFormValid = ($form) => {\n  const formParsley = $form.parsley();\n  formParsley.validate();\n\n  return formParsley.isValid();\n};\n\nexport const deleteGetParamFromUrl = (param) => {\n  const regex = new RegExp(`[\\\\?&]${param}=[^&]+`);\n\n  history.replaceState && history.replaceState(\n    // eslint-disable-next-line max-len\n    null, '', location.pathname + location.search.replace(regex, '').replace(/^&/, '?') + location.hash\n  );\n};\n\n/**\n * @param date\n * @returns {string} month dd, yyyy // example - June 1, 2020\n */\nexport const formatDate = (date) => {\n  /* eslint-disable max-len */\n  const formattedDate = new Date(date).toLocaleDateString({}, {\n    timeZone: 'UTC',\n    month: 'short',\n    day: 'numeric',\n    year: 'numeric'\n  });\n  return formattedDate;\n};\n\nexport const isThreeDSecureCanceled = (payload) => {\n  const {type, liabilityShifted: isThreeDSecurePassed} = payload;\n  return type === 'CreditCard' && !isThreeDSecurePassed;\n};\n\n/**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * The value is no lower than min (or the next integer greater than min\n * if min isn't an integer) and no greater than max (or the next integer\n * lower than max if max isn't an integer).\n */\nexport const getRandomInt = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n\nexport const toggleStepProgressBar = ($stepProgressBar, callback = () => {}) => {\n  if (storage.get(LOCAL_STORAGE_KEYS.IS_SHOW_STEP_PROGRESS_BAR) === 'True') {\n    $stepProgressBar.show();\n  } else {\n    $stepProgressBar.hide();\n  }\n\n  callback();\n};\n\nexport const processingPlurals = (number = null, singular = '', plural = '') => {\n  if (number === null) return singular;\n  const numberNum = parseInt(number);\n\n  if (numberNum === 0) return plural;\n  if (numberNum === 1) return singular;\n  if (numberNum > 1) return plural;\n};\n\nexport const initWorksheetDownload = (pdfLink, dontPostEvent = false) => {\n  if (!dontPostEvent) ga('send', 'event', 'PDF worksheet', 'download');\n\n  const isSafariBrowser = getBrowser().toLowerCase().includes('safari');\n\n  if (isSafariBrowser) {\n    window.location = pdfLink;\n\n    return;\n  }\n\n  window.open(pdfLink, '_blank');\n};\n\nexport const toggleMarkWorksheetAsDone = (worksheetId, isPostMethod = true, callback = () => {}) => {\n  $.ajax({\n    url: ENDPOINT.MARK_AS_DONE(worksheetId),\n    method: isPostMethod ? 'POST' : 'DELETE'\n  }).then(() => {\n    callback();\n  });\n};\n\nexport const toggleAddWorksheetToFavorite = (worksheetId, isPostMethod = true, callback = () => {}) => {\n  $.ajax({\n    url: ENDPOINT.ADD_TO_FAVORITE(worksheetId),\n    method: isPostMethod ? 'POST' : 'DELETE'\n  }).then(() => {\n    callback();\n  });\n};\n\nexport const handlePdfDownload = (startPdfDownload = () => {}) => {\n  $.ajax({\n      url: ENDPOINT.WORKSHEETS_PDF_STATUS,\n      method: 'GET'\n    }).then((response) => {\n      switch(response.can_download_pdf) {\n        case WEBSITE_LIMIT_STATUSES.SHOW_PROMO_BANNER:   // cause of KAWD-209 we do not get this status no more\n          // const $monetizationModal = $(MODALS.MONETIZATION);\n          // $monetizationModal.modal('show');\n\n          startPdfDownload();\n          break;\n        case WEBSITE_LIMIT_STATUSES.DENIED:\n          dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE);\n          break;\n        case WEBSITE_LIMIT_STATUSES.ALLOWED:\n          startPdfDownload();\n          break;\n      }\n    }, (error) => {\n      // eslint-disable-next-line no-console\n      console.error('Worksheet download status check request is failed', error);\n    });\n};\n\nexport const handleCompleteOnline = (goToCompleteOnlineInTgc = () => {}) => {\n  $.ajax({\n      url: ENDPOINT.WORKSHEET_CHECK_STATUS,\n      method: 'GET'\n    }).then((response) => {\n      switch(response.can_download_pdf) {\n        case WEBSITE_LIMIT_STATUSES.SHOW_PROMO_BANNER:  // cause of KAWD-209 we do not get this status no more\n          // const $monetizationModal = $(MODALS.MONETIZATION);\n          // $monetizationModal.modal('show');\n\n          goToCompleteOnlineInTgc();\n          break;\n        case WEBSITE_LIMIT_STATUSES.DENIED:\n          dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE);\n          break;\n        case WEBSITE_LIMIT_STATUSES.ALLOWED:\n          goToCompleteOnlineInTgc();\n          break;\n      }\n    }, (error) => {\n      // eslint-disable-next-line no-console\n      console.error('Worksheet download status check request is failed', error);\n    });\n};\n\nexport const redirectToCompleteOnlineInTGC = (slug, queryParams) => {\n  if (!slug) return;\n  const baseUrl = `/worksheets-check/${slug}/?${GET_PARAMS.REDIRECT_TO_TGC}=true&${GET_PARAMS.SHOW_TGC_ONBOARDING}=true`;\n  window.location = `${baseUrl}${queryParams ? `&${queryParams}` : ''}`;\n};\n\nexport const getPageUrlName = () => {\n  const result = $('body').attr('data-url');\n  if (result) return result;\n\n  return null;\n};\n\nexport const addActivityToClassroom = ({\n  activities = [],\n  utm\n}) => {\n  const searchParams = new URLSearchParams({\n    activities: JSON.stringify(activities),\n  });\n\n  // remove search params with empty string in value\n  const keysForDel = [];\n  searchParams.forEach((value, key) => {if (value === '') keysForDel.push(key);});\n  keysForDel.forEach(key => {searchParams.delete(key);});\n\n  let params = searchParams.toString() ? `?${searchParams.toString()}` : '';\n  if (utm) params = `${params}&${utm}`;\n\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/${params}`;\n};\n\nexport const addSkilledWorksheetsToClassroom = ({\n  activityId,\n  gradeId,\n  utm\n}) => {\n  const searchParams = new URLSearchParams({\n    showSkilledWorksheetModal: 'true',\n    skilledWorksheetSubjectId: activityId,\n    gradeId: gradeId\n  });\n\n  if (utm) {\n    // Remove leading '?' if present\n    const cleanUtm = utm.startsWith('?') ? utm.substring(1) : utm;\n    const utmParams = new URLSearchParams(cleanUtm);\n    utmParams.forEach((value, key) => {\n      searchParams.append(key, value);\n    });\n  }\n\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/?${searchParams.toString()}`;\n};\n\nexport const createClassroom = ({utm = ''}) => {\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/${utm ? utm : ''}`;\n};\n\nexport const showJoinKidsAcademyModal = ({\n  type = JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.DEFAULT,\n  title = 'Join Kids Academy for Free',\n  checkStorage = true,\n  teacherQueryParams = '',\n  parentQueryParams = '',\n  target,\n}) => {\n  const modalWasShown = JSON.parse(localStorage\n    .getItem(LOCAL_STORAGE_KEYS.JOIN_KIDSACADEMY_FOR_FREE));\n\n  if (modalWasShown && checkStorage) return;\n\n  // GA\n  let analyticEventType = 'Init_PopUp_KA_COM';\n  if (type === JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.COMPLETE_ONLINE) {\n    analyticEventType = 'ComleteOnline_PopUp';\n  }\n  if (type === JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.GAME) {\n    analyticEventType = 'StartGame_PopUp';\n  }\n  ga('send', 'event', analyticEventType, 'Show', 'Load');\n\n  const $joinKidsacademyForFreeModal = $(MODALS.JOIN_KA_FOR_FREE_MODAL);\n\n  $('[data-selector=\"join-kidsacademy-for-free-modal-title\"]').html(title);\n\n  const teacher = $('[data-selector=\"join-kidsacademy-teacher\"]');\n  const parent = $('[data-selector=\"join-kidsacademy-parent\"]');\n  const student = $('[data-selector=\"join-kidsacademy-student\"]');\n\n  const initialTeacherHref = teacher.attr('href');\n  const initialParentHref = parent.attr('href');\n  const initialTarget = teacher.attr('target');\n\n  if (target) {\n    teacher.attr('target', target);\n    parent.attr('target', target);\n  }\n\n  if(teacherQueryParams) teacher.attr('href', `${initialTeacherHref}&${teacherQueryParams}`);\n\n  if(parentQueryParams) parent.attr('href', `${initialParentHref}&${parentQueryParams}`);\n\n  $($joinKidsacademyForFreeModal).on('hidden.bs.modal', () => {\n    teacher.attr('href', initialTeacherHref);\n    parent.attr('href', initialParentHref);\n\n    teacher.attr('target', initialTarget);\n    parent.attr('target', initialTarget);\n\n    ga('send', 'event', analyticEventType, 'Close', 'Click');\n  });\n\n  $(teacher).on('click', () => {\n    ga('send', 'event', analyticEventType, '1-Teacher', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $(parent).on('click', () => {\n    ga('send', 'event', analyticEventType, '2-Parent', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $(student).on('click', () => {\n    ga('send', 'event', analyticEventType, '3-Student', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $joinKidsacademyForFreeModal.modal('show');\n\n  localStorage.setItem(\n    LOCAL_STORAGE_KEYS.JOIN_KIDSACADEMY_FOR_FREE,\n    JSON.stringify({isFinished: true})\n  );\n};\n\nexport const completeOnlineButtonHandler = ({ event, classroomUtms = {}, urlHandler = URLS.WORKSHEET_CHECK }) => {\n  const target = $(event.currentTarget);\n  const slug = target.attr('data-slug');\n  const gradeId = target.attr('data-grade-id');\n  const categorySlug = target.attr('data-category-slug');\n  const activityId = target.attr('data-activity-id');\n  const activityContentType = target.attr('data-activity-content-type');\n\n  // not auth > show modal\n  if (!window.isAuthenticated) {\n    event.preventDefault();\n    showJoinKidsAcademyModal({ type: JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.COMPLETE_ONLINE, checkStorage: false });\n    return;\n  }\n\n  // NO subscription teacher > classroom\n  if (window.accountType === ACCOUNT_TYPES.SCHOOL_ADMIN && window.lmsSubscriptionStatus !== 0) {\n    event.preventDefault();\n    addActivityToClassroom({\n      activities: [{ categorySlug, gradeId, activityId, activityContentType }],\n      utmSource: classroomUtms ? classroomUtms.utmSource : '',\n      utmMedium: classroomUtms ? classroomUtms.utmMedium : '',\n      utmContent: classroomUtms ? classroomUtms.utmContent : '',\n    });\n    return;\n  }\n\n  // NO subscription NOT teacher > .com/tg\n  if (window.accountType !== ACCOUNT_TYPES.SCHOOL_ADMIN && !window.hasValidParentSubscription) {\n    event.preventDefault();\n    window.location = HTTPS_PREFIX() + window.COM_DOMAIN_NAME + URLS.TG_ONLINE;\n    return;\n  }\n\n  // user with subscription\n  if (window.hasValidParentSubscription || window.lmsSubscriptionStatus === 0) {\n    event.preventDefault();\n    window.location = urlHandler(slug);\n  }\n};\n\nexport const redirectToTgcWithOpenWorksheetParams = ({worksheetId, utm, skipOnboarding = true}) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = worksheetId && `?${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=true&${GET_PARAMS.WORKSHEET_ID}=${worksheetId}&${GET_PARAMS.SKIP_ONBOARDING}=${String(skipOnboarding)}`;\n\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  window.location = `${page}${params}&${utm}`;\n};\n\nexport const redirectToTgcWithOpenActivityParams = ({activityId, activityType, utm}) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = activityType && activityId && `?${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=${activityType}_${activityId}&${GET_PARAMS.SKIP_ONBOARDING}=true`;\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  window.location = `${page}${params}&${utm}`;\n};\n\nexport const redirectToTgcWithOpenLessonParams = ({ gradeId, subjectId, lessonId, utm, getParams = false }) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = gradeId && subjectId && lessonId && `${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=lesson_${lessonId}&${GET_PARAMS.GRADE}=${gradeId}&${GET_PARAMS.SUBJECT}=${subjectId}&${GET_PARAMS.SKIP_ONBOARDING}=true`;\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  if (getParams) return { page, params };\n\n  window.location = `${page}?${params}&${utm}`;\n};\n\nexport const handleCompleteOnlineListener = (e, queryParams) => {\n  e.preventDefault();\n\n  const worksheetId = $(e.currentTarget).attr('data-activity-id');\n  const worksheetSlug = $(e.currentTarget).attr('data-slug');\n\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_ID, worksheetId);\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_SLUG, worksheetSlug);\n  storage.set(LOCAL_STORAGE_KEYS.PLACEMENT, PLACEMENTS.WORKSHEET_LIST_PAGE);\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC);\n\n  redirectToCompleteOnlineInTGC(worksheetSlug, queryParams);\n};\n\nexport const updateWorksheetDownloadCount = (shouldDownloadBeCounted = false) => {\n  // download count/limit\n  let count = 0;\n\n  if (storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT)) {\n    count = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT);\n  }\n\n  if (shouldDownloadBeCounted) {\n    count = parseInt(count) + 1;\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT, count);\n  }\n\n  // last download date\n  let isAbleToDownload = false;\n\n  let worksheetLastDownloadDate = null;\n  if (storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE)) {\n    worksheetLastDownloadDate = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE);\n  }\n\n  const nowTimestamp = Date.now();\n  const worksheetLastDownloadTimestamp = parseInt(worksheetLastDownloadDate);\n  const oneDayInMilliseconds = 86400000;\n  if ((nowTimestamp - worksheetLastDownloadTimestamp) > oneDayInMilliseconds) {\n    // reset count/limit if one day already passed from the last download\n    count = 1;\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT, count);\n    isAbleToDownload = true;\n  }\n  if (shouldDownloadBeCounted) {\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE, nowTimestamp);\n  }\n\n  return {count, isAbleToDownload};\n};\n\n/**\n * @param e {Event}\n * @param type {String}\n * @param $button {jQuery}\n */\nexport const downloadWorksheetHandler = (e, type, $button) => {\n  if (e) e.preventDefault();\n\n  const crClassName =  '_cr';\n  const tgClassName = '_tg';\n\n  let $target = null;\n  if (e) $target = $(e.currentTarget);\n  if ($button) $target = $button;\n\n  if (!$target) return;\n\n  const utm = $target.attr('data-utm');\n  const worksheetId = $target.attr('data-id');\n  const btnDataSelectorValue = $target.attr('data-selector');\n\n  // HAS subscription\n  if (window.hasValidParentSubscription) {\n    if (type === WORKSHEET_ACTION_TYPES.DOWNLOAD) {\n      dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n      updateWorksheetDownloadCount(true);\n      return;\n    }\n\n    if (type === WORKSHEET_ACTION_TYPES.COMPLETE_ONLINE || type === WORKSHEET_ACTION_TYPES.LEARN_ONLINE) {\n      const worksheetSlug = $(e.currentTarget).attr('data-slug');\n      window.location = `/worksheets-check/${worksheetSlug}`;\n      return;\n    }\n  }\n\n  // NO subscription COMPLETE ONLINE / LEARN ONLINE btns\n  if (type === WORKSHEET_ACTION_TYPES.COMPLETE_ONLINE || type === WORKSHEET_ACTION_TYPES.LEARN_ONLINE) {\n    redirectToTgcWithOpenActivityParams({activityId: worksheetId, activityType: 'worksheet', utm});\n    return;\n  }\n\n  // NO subscription DOWNLOAD\n  if (type === WORKSHEET_ACTION_TYPES.DOWNLOAD) {\n    const {count, isAbleToDownload} = updateWorksheetDownloadCount(false);\n\n    // Authenticated\n    if (window.isLoggedIn) {\n      if (+count < 2 || isAbleToDownload) {\n        // download worksheet\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n        updateWorksheetDownloadCount(true);\n        return;\n      }\n\n      if (+count >= 2 || !isAbleToDownload) {\n        // show modal with plans depends on type of user, if no type then show CR plan\n        if (window.websiteAccountType === 'parent') {\n          // show TG plan modal with 2 plans\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).modal('show');\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).removeClass(crClassName);\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(tgClassName);\n        } else if (window.websiteAccountType === 'teacher' || window.websiteAccountType === 'student' || true) {\n          // show CR plan modal with 2 plans\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).modal('show');\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).removeClass(tgClassName);\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(crClassName);\n        }\n        return;\n      }\n      return;\n    }\n\n    // NOT Authenticated\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).attr('data-worksheet-id', worksheetId);\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).attr('data-worksheet-selector', btnDataSelectorValue);\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).modal('show');\n\n    ga('send', 'event', 'New-sign-up', 'New-sign-up-load', 'Load');\n  }\n};\n\nexport const isWorksheetCheckPage = () => {\n  if (window.location.href.indexOf(URLS.WORKSHEET_CHECK_BASE) > -1) return true;\n  return false;\n};\n\nexport const showSignUpModal = ({isPromo, planSlug, isEbloxAdded = false}) => {\n  // prepare WEBSITE_SIGN_UP_MODAL texts and buttons\n  $('[data-selector=\"learning-resources-registration-title\"]').html('Try Kids Academy Premium!');\n\n  const subtitle = $('[data-selector=\"learning-resources-registration-subtitle\"]');\n  subtitle.html('Enter your email and password to create an account.');\n  subtitle.addClass('modal-subtitle');\n\n  $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n  $('[data-selector=\"social-btn-login\"]').hide();\n\n  // add attr to show purchase modal after user signed-up in WEBSITE_SIGN_UP_MODAL modal\n  if (isPromo) {\n    $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-promo-plans-slug', planSlug);\n    if (isEbloxAdded) $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-eblox', 'true');\n  } else {\n    $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-slug', planSlug);\n  }\n\n  // show auth modal\n  $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n};\n\nexport const debounce = (func, timeout = 300) => {\n    let timer;\n    return (...args) => {\n      clearTimeout(timer);\n      timer = setTimeout(() => { func.apply(this, args); }, timeout);\n    };\n  };\n\n  export const isWebGamesPage = () => {\n    if ($('[data-selector=\"web-games\"]').length) return true;\n    return false;\n  };\n","import {\n  ENDPOINT,\n  FEEDBACK_TYPES\n} from '../config';\nimport {\n  toggleButtonLoading,\n  getBrowser\n} from '../utils';\n\n$(function () {\n  const $contactUsForm = $('[data-selector=\"contact-us-form\"]');\n  const contactUsFormSubmitBtn = '[data-selector=\"contact-us-form-submit\"]';\n  const $contactUsFormSubmitBtn = $(contactUsFormSubmitBtn);\n  const $contactUsModal = $('#contactUsModal');\n  const $contactUsSuccessModal = $('#contactUsSuccess');\n  const $contactUsErrorModal = $('#contactUsError');\n  const formValidation = $contactUsForm.parsley();\n\n  const clearFields = function () {\n    const $inputs = $contactUsForm.find('input');\n    const $textareas = $contactUsForm.find('textarea');\n    const $selects = $contactUsForm.find('select');\n\n    $selects.val('');\n    $textareas.val('');\n    $inputs.val('');\n  };\n\nconst showSuccessModal = function() {\n    $contactUsSuccessModal.modal('show');\n  };\n\n  const showErrorModal = function() {\n    $contactUsErrorModal.modal('show');\n  };\n\n  const hideContactUsModal = function() {\n    $contactUsModal.modal('hide');\n    formValidation.reset();\n    clearFields();\n  };\n\n  const getContactFormData = function() {\n    const formDataArr = $contactUsForm.serializeArray();\n    const data = {};\n\n    formDataArr.forEach(function (item) {\n      data[item.name] = item.value;\n    });\n\n    data.feedback_type = FEEDBACK_TYPES.REQUEST;\n    data.device_page = window.location.href;\n    data.device_browser = getBrowser();\n    data.device_os = navigator.platform;\n    data.previous_page = document.referrer;\n    data.time = new Date();\n    data.screen_resolution = screen.width + 'x' + screen.height;\n\n    return data;\n  };\n\n  const submitForm = function() {\n    const data = getContactFormData();\n    toggleButtonLoading($contactUsFormSubmitBtn, true);\n\n    $.ajax({\n      url: ENDPOINT.FEEDBACK,\n      type: 'POST',\n      contentType: 'application/json',\n      data: JSON.stringify(data)\n    })\n      .then(function () {\n        toggleButtonLoading($contactUsFormSubmitBtn, false);\n        hideContactUsModal();\n        showSuccessModal();\n      }, function () {\n        toggleButtonLoading($contactUsFormSubmitBtn, false);\n        hideContactUsModal();\n        showErrorModal();\n      });\n  };\n\n  $(document)\n    .on('click', contactUsFormSubmitBtn, function (e) {\n      if (!formValidation.isValid()) return;\n      e.preventDefault();\n      submitForm();\n    });\n\n  $contactUsModal.on('hidden.bs.modal', function () {\n    if (typeof formValidation.reset == 'function') {\n      formValidation.reset();\n      $('body').removeClass('_issue-report');\n      clearFields();\n    }\n  });\n});\n","import Qs from 'qs';\nimport Cookies from 'js-cookie';\nimport {\n  deleteUrlParam,\n  getUrlParam,\n  showJoinKidsAcademyModal,\n  storage,\n  downloadWorksheetHandler\n} from '../utils';\nimport {\n  GET_PARAMS,\n  LOCAL_STORAGE_KEYS,\n  MODALS,\n  WEBSITE_CUSTOM_EVENTS,\n  WORKSHEET_ACTION_TYPES,\n  // MOBILE_WIDTH\n} from '../config';\nimport toastr from 'toastr/toastr';\n\n\nconst isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\nif (isIE11) $('body').addClass('_ie11');\n\nconst showAdsBannerModal = () => {\n  const adsBannerModal = $('[data-selector=\"ads-banner-modal\"]:not(.inline-monetization)');\n  const adsBannerModalClose = $('[data-selector=\"ads-banner-modal-close\"]');\n\n  if(!adsBannerModal) return;\n\n  adsBannerModal.modal('show');\n\n  $(adsBannerModalClose).on('click', () => { adsBannerModal.modal('hide'); });\n};\n\nconst reloadHtmxAdsBanners = () => {\n  const ads = document.querySelectorAll('[hx-get]');\n  ads.forEach((item) => { htmx.process(item); });\n};\n\ndocument.addEventListener('adsBannerModalLoaded', showAdsBannerModal);\ndocument.addEventListener(WEBSITE_CUSTOM_EVENTS.RELOAD_HTMX_ADS_BANNERS, reloadHtmxAdsBanners);\n\n$(document).ready(function () {\n  // const startWorksheetDownload = () => {\n  //   // start download process\n  //   const pdfLink = $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W_DATA).attr('data-href');\n  //   function downloadURI(uri, name) {\n  //     const link = document.createElement(\"a\");\n  //     link.download = name; // <- name instead of 'name'\n  //     link.href = uri;\n  //     link.click();\n  //     link.remove();\n  //   }\n  //\n  //   downloadURI(pdfLink, 'worksheet.pdf');\n  // };\n\n  const data = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TO_DOWNLOAD_DATA, true);\n  if (data) {\n    const worksheetId = data.split('_')[0];\n    const selector = data.split('_')[1];\n\n    const $worksheetItem = worksheetId && selector ? $(`[data-selector=\"${selector}\"][data-id=\"${worksheetId}\"]`) : null;\n\n    if ($worksheetItem) {\n      setTimeout(() => {\n        downloadWorksheetHandler(null, WORKSHEET_ACTION_TYPES.DOWNLOAD, $worksheetItem);\n      }, 1);\n    }\n  }\n\n  // ui notification settings\n  toastr.options = {\n    'closeButton': true,\n    'debug': false,\n    'newestOnTop': true,\n    'progressBar': true,\n    'positionClass': 'toast-top-right',\n    'preventDuplicates': false,\n    'onclick': null,\n    'showDuration': '300',\n    'hideDuration': '10000',\n    'timeOut': '5000',\n    'extendedTimeOut': '7000',\n    'showEasing': 'swing',\n    'hideEasing': 'linear',\n    'showMethod': 'fadeIn',\n    'hideMethod': 'fadeOut'\n  };\n\n  if (window.parentSubscriptionPastDueUntil) {\n    const showModalDelay = 2000;\n\n    setTimeout(function () {\n      $('#updatePaymentMethodModal').modal('show');\n    }, showModalDelay);\n  }\n\n  // show ads free modal by url get param\n  const adFreeGetParamValue = getUrlParam(GET_PARAMS.AD_FREE_MODAL);\n  if (adFreeGetParamValue === 'true') $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n\n  $('#logInModal').on('hidden.bs.modal', function () {\n    deleteUrlParam(GET_PARAMS.MAKE_REDIRECT);\n  });\n\n  const signUpPageUrl = '/sign-up/';\n  const parentSignUpUrl = '/sign-up/?type=parent';\n  const teacherSignUpUrl = '/sign-up/?type=teacher';\n\n  const parentSignUpModal = 'signUpParentModal';\n  const teacherSignUpModal = 'signUpTeacherModal';\n  const signUpModal = 'signUpModal';\n\n  const parentSignUpModalHash = '#signUpModal';\n  const teacherSignUpModalHash = '#signUpTeacherModal';\n\n  /**\n   * Do some redirects to make old links works after remove sign up modal and add sign up page\n   */\n  function doRedirectsOnPageLoad() {\n    if (window.location.pathname === signUpPageUrl) return;\n\n    if (window.role === 'teacher') {\n      window.location = teacherSignUpUrl;\n      return;\n    }\n\n    if (typeof Qs === 'undefined') return;\n    if (!Qs) return;\n    if (typeof Qs.parse !== 'function') return;\n\n    const queryObject = Qs.parse(location.search.substr(1));\n\n    if (queryObject.email && queryObject.email.length\n      && queryObject.modal === parentSignUpModal) {\n      window.location = parentSignUpUrl + '&email=' + queryObject.email + '&step=2';\n      return;\n    }\n\n    switch(queryObject.modal) {\n      case parentSignUpModal:\n        window.location = parentSignUpUrl;\n        break;\n\n      case teacherSignUpModal:\n        window.location = teacherSignUpUrl;\n        break;\n\n      case signUpModal:\n        window.location = parentSignUpUrl;\n        break;\n    }\n  }\n\n  /**\n   *  Handle change url hash to make old links works after remove sign up modal and add sign up page\n   */\n  $(window).on('hashchange', function () {\n    switch (window.location.hash) {\n      case parentSignUpModalHash:\n        window.location = parentSignUpUrl;\n        break;\n\n      case teacherSignUpModalHash:\n        window.location = teacherSignUpUrl;\n        break;\n    }\n  });\n\n  $.ajaxSetup({\n    cache: false,\n    beforeSend: function (xhr) {\n      const csrfToken = Cookies.get('csrftoken');\n      xhr.setRequestHeader('X-CSRFToken', csrfToken);\n    }\n  });\n\n  navigator.sayswho = (function () {\n    // TODO move to utils\n    const N = navigator.appName, ua = navigator.userAgent;\n    let tem;\n    let M = ua.match(/(opera|chrome|safari|firefox|msie)\\/?\\s*(\\.?\\d+(\\.\\d+)*)/i);\n    if (M && (tem = ua.match(/version\\/([\\.\\d]+)/i)) != null) M[2] = tem[1];\n    M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];\n    return M;\n  })();\n  if (navigator.sayswho[0] == 'Firefox' && parseFloat(navigator.sayswho[1]) < 5) {\n    const pos = $('.menu .menu-blue').offset();\n    $('ul.menu li ul.dropdown-menu').css('top', '155px');\n    $('ul.menu li ul.dropdown-menu').css('left', (pos.left - 11) + 'px');\n  }\n\n  const width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n  if (width < 350) {\n    $('.menu-blue').find('.js-title').text('WORKSHEETS');\n  } else {\n    $('.menu-blue').find('.js-title').text('FREE WORKSHEETS');\n  }\n\n  /**\n   * For IE 6-9\n   * set banner image url for simple img tag, shows banner image\n   */\n  const handleMainBannerImageLoad = function () {\n    const browserName = navigator.sayswho[0];\n    const browserVersion = navigator.sayswho[1];\n\n    if (browserName === 'MSIE' && browserVersion === '6.0'\n      || browserName === 'MSIE' && browserVersion === '7.0'\n      || browserName === 'MSIE' && browserVersion === '9.0'\n    ) {\n      const $mainBanner = $('[data-selector*=\"website-banner\"]');\n      const $mainBannerImg = $mainBanner.find('[data-selector*=\"banner-img-element\"]');\n      const mainBannerImgUrl = $mainBannerImg.first().attr('src');\n      const $pictureElement = $mainBanner.find('[data-selector*=\"banner-picture-elem\"]');\n      const $imgElementForIE = $mainBanner.find('[data-selector*=\"banner-ie-image\"]');\n\n      $pictureElement.hide();\n      $imgElementForIE.attr('src', mainBannerImgUrl);\n      $imgElementForIE.show();\n    }\n  };\n\n\n  doRedirectsOnPageLoad();\n  handleMainBannerImageLoad();\n});\n\n\nwindow.selectParentTab = function () {\n  const openParentSignUpUrl = '/sign-up/?accountType=0';\n  window.location = openParentSignUpUrl;\n};\n\nwindow.selectTeacherTab = function () {\n  const openTeacherSignUpUrl = '/sign-up/?accountType=1';\n  window.location = openTeacherSignUpUrl;\n};\n\n\n/***\n *  polyfill of `Array.prototype.find` for IE 11\n */\nif (!Array.prototype.find) {\n  Array.prototype.find = function(predicate) {\n    if (this == null) {\n      throw new TypeError('Array.prototype.find called on null or undefined');\n    }\n    if (typeof predicate !== 'function') {\n      throw new TypeError('predicate must be a function');\n    }\n    const list = Object(this);\n    const length = list.length >>> 0;\n    const thisArg = arguments[1];\n    let value;\n\n    for (let i = 0; i < length; i++) {\n      value = list[i];\n      if (predicate.call(thisArg, value, i, list)) {\n        return value;\n      }\n    }\n    return undefined;\n  };\n}\n\n/***\n *  polyfill of `Array.prototype.findIndex` for IE 11\n */\nArray.prototype.findIndex = Array.prototype.findIndex || function(callback) {\n  if (this === null) {\n    throw new TypeError('Array.prototype.findIndex called on null or undefined');\n  } else if (typeof callback !== 'function') {\n    throw new TypeError('callback must be a function');\n  }\n  const list = Object(this);\n  // Makes sures is always has an positive integer as length.\n  const length = list.length >>> 0;\n  const thisArg = arguments[1];\n  for (let i = 0; i < length; i++) {\n    if ( callback.call(thisArg, list[i], i, list) ) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Hide bottom adsense\n */\n$(document).on('click', '[data-selector=\"bottom-adsense-close\"]', () => {\n  const $bottomAdsense = $('[data-selector=\"bottom-adsense\"]');\n  const $footer = $('[data-selector=\"footer\"]');\n  $bottomAdsense.hide();\n  $footer.removeClass('_has-adsense');\n});\n\n\n// document.addEventListener('DOMContentLoaded', function (_) {\n  // const DESKTOP = 'desktop';\n  // const MOBILE = 'mobile';\n  // const adsenseTypeAttr = 'data-adsense-type';\n  //\n  // const desktopAdsense = `[${adsenseTypeAttr}=\"${DESKTOP}\"]`;\n  // const mobileAdsense = `[${adsenseTypeAttr}=\"${MOBILE}\"]`;\n  // const $desktopAdsense = $(desktopAdsense);\n  // const $mobileAdsense = $(mobileAdsense);\n  //\n  // if (window.innerWidth <= MOBILE_WIDTH) {\n  //   // mobile\n  //   $desktopAdsense.each((_, elem) => {\n  //     elem.parentElement && elem.parentElement.removeChild(elem);\n  //   });\n  // } else {\n  //   // desktop\n  //   $mobileAdsense.each((_, elem) => {\n  //     elem.parentElement && elem.parentElement.removeChild(elem);\n  //   });\n  // }\n// });\n\nif ($('[data-url=\"ad-free-subscription\"]').length) {\n  ga('send', 'event', 'Add_free_subscriptions', 'Show', 'Load');\n\n  const $plansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n  $plansModal.find('.close.custom-modal__close').hide();\n\n\n  $plansModal.modal({backdrop: 'static', keyboard: false});\n  $plansModal.modal('show');\n}\n\n\n(function () {\n/**\n * add/remove mobile filter grey overlay on learning resources pages\n */\nconst mobileFilterOverlay = '[data-selector=\"mobile-filter-overlay\"]';\nconst filterCloseBtn = '#filter-inner-close';\nconst filterOpenBtn = '#filters-mob-open';\n\n$(document)\n  .on('click', mobileFilterOverlay, () => {\n    $(filterCloseBtn).trigger('click');\n    $(mobileFilterOverlay).fadeOut();\n  })\n  .on('click', filterCloseBtn, () => {\n    $(mobileFilterOverlay).fadeOut();\n  })\n  .on('click', filterOpenBtn, () => {\n    const overlay = `<span style=\"position: fixed;\n                                  z-index: 2;\n                                  background: rgb(0 0 0 / 35%);\n                                  top: 0;\n                                  right: 0;\n                                  left: 0;\n                                  bottom: 0;\"\n                                  data-selector=\"mobile-filter-overlay\"\n                                  ></span>`;\n    $('body').append(overlay);\n  });\n}());\n\n\nconst homeJoinKidsAcademyModalButton = '[data-selector=\"show-join-kids-academy-modal\"]';\n$(document).on('click', homeJoinKidsAcademyModalButton, (e) => {\n  e.preventDefault();\n  showJoinKidsAcademyModal({ checkStorage: false });\n});\n","import {\n  ACCOUNT_TYPES_STRING,\n  ENDPOINT,\n  GET_PARAMS,\n  RESPONSE_CODES,\n  SUBJECTS,\n  URLS,\n  PROMO_LANDINGS_URLS,\n  ERROR_CODES,\n  LOCAL_STORAGE_KEYS,\n  MODALS,\n} from '../config';\nimport {\n  fixPlusSymbolInProvidedEmail,\n  getUrlParam,\n  deleteUrlParam,\n  replaceEmailWithLink,\n  toggleButtonLoading,\n  isFormValid,\n  isWebGamesPage,\n  storage,\n} from '../utils';\n\n\n$(document).ready(function () {\n  const $loginPage = $('[data-selector=\"log-in-page\"]');\n  const $logInModal = $('[data-selector=\"log-in-modal\"]');\n  const $kindsAcademyCom = $('[data-selector=\"kidsacademy-com-static\"]');\n\n  if (!$loginPage.length && !$logInModal.length && !$kindsAcademyCom.length) return;\n\n  const noRedirectAttrName = 'data-no-redirect';\n\n  const schoolLoginForm = '[data-selector=\"school-login-form\"]';\n  const familyLoginForm = '[data-selector=\"family-login-form\"]';\n\n  const specialInputSelector = '[data-selector=\"login-special-input\"]';\n  const loginEmailInput = '[data-selector=\"login-email-input\"]';\n  const loginPasswordInput = '[data-selector=\"login-password-input\"]';\n  const loginSubmitBtn = '[data-selector=\"login-submit-btn\"]';\n  const $loginError = tabId => $(`[data-selector=\"${tabId}-login-error\"]`);\n\n  const resetForm = '[data-selector=\"reset-form\"]';\n  const $resetForm = $(resetForm);\n  const resetSubmit = '[data-selector=\"reset-submit\"]';\n\n  const $mainMenuNavbar = $('[data-selector=\"main-menu-navbar\"]');\n  const $mainMenuDropdown = $('[data-selector=\"main-menu-dropdown\"]');\n  const menuResizeBreakpoint = '991px';\n\n  const $appDropdownToggle = $('[data-selector=\"app-dropdown-toggle\"]');\n  const $appDropdownMenu =  $('[data-selector=\"app-dropdown-menu\"]');\n  const $appDropdown = $('[data-selector=\"app-dropdown\"]');\n\n  const onPageLoad = () => {\n    openTabByGetParam();\n    setEmailFromGetParam();\n    initLoginTooltip();\n    handleLoginRedirectError();\n  };\n\n  const openTabByGetParam = () => {\n    const accountType = getUrlParam(GET_PARAMS.ACCOUNT_TYPE);\n    const $tabToOpen = $(`[data-tab=\"${accountType}\"]`);\n    $tabToOpen.tab('show');\n  };\n\n  const setEmailFromGetParam = () => {\n    const providedEmail = getUrlParam(GET_PARAMS.EMAIL);\n    if(!providedEmail) return;\n\n    const $familyEmailInput = $(loginEmailInput);\n    $familyEmailInput.each((_, elem) => {\n      $(elem).val(fixPlusSymbolInProvidedEmail(providedEmail));\n    });\n  };\n\n  const handleLoginRedirectError = () => {\n    const url = new URL(window.location.href);\n    const tabId = url.searchParams.get(GET_PARAMS.ACCOUNT_TYPE);\n    const error = url.searchParams.get(GET_PARAMS.ERROR);\n\n    if (tabId && tabId.length && error && error.length) {\n      const text = replaceEmailWithLink(error);\n      $loginError(tabId).html(text).show();\n    }\n  };\n\n  const resetParsleyErrors = () => {\n    $(familyLoginForm).each((_, form) => $(form).parsley().reset());\n    $(schoolLoginForm).each((_, form) => $(form).parsley().reset());\n  };\n\n  // init clever tooltip for login (login modal, login page)\n  const initLoginTooltip = () => {\n    $('[data-toggle=\"tooltip\"]').tooltip({\n      placement: 'auto bottom',\n      container: 'body'\n    });\n  };\n\n  const toggleFormLoading = ($form, isLoading) => {\n    const $submitBtn = $form.find(loginSubmitBtn);\n    toggleButtonLoading($submitBtn, isLoading);\n  };\n\n  const hideLoginFormError = () => {\n    $loginError(ACCOUNT_TYPES_STRING.PARENT).hide();\n    $loginError(ACCOUNT_TYPES_STRING.TEACHER).hide();\n  };\n\n  //handle form submit request errors\n  const handleLoginError = (error, $errorBlock, tabName) => {\n    if (error.redirect_url) {\n      window.location.href = error.redirect_url;\n      return;\n    }\n\n    $loginError(tabName).hide();\n    let errorMessage = '';\n\n    if (error && error.error && error.error_code) {\n      if (error.error_code === ERROR_CODES.HAS_NO_SCHOOL_DISTRICT) {\n        window.location.pathname = URLS.SIGN_UP_TEACHER;\n        return;\n\n      } else if (error.error_code === ERROR_CODES.AUTH_STUDENT_USER) {\n        errorMessage = `Website login is for teachers and administrators only.\n                        Students need to log on in the\n                        apps: <a href=\"/apps\">Click here for download links</a>`;\n\n      } else if (error.error.indexOf('contact support') > -1) {\n        let subject = SUBJECTS[RESPONSE_CODES[error.error_code]];\n        if (!subject) subject = '';\n        errorMessage = error.error.replace(\n          'contact support',\n          `<a href=\"mailto:info@kidsacademy.mobi?subject=${subject}\">contact support</a>`\n        );\n\n      } else {\n        errorMessage = 'Email or password is invalid';\n      }\n\n      $errorBlock.html(errorMessage);\n      $errorBlock.show();\n    }\n  };\n\n  const getActivePointAppDropdownMenu = () => {\n    const $curURL = document.location.pathname;\n    $appDropdownMenu.children().each(function() {\n      const $linkHref = $(this).find('a').attr('href');\n      if ($curURL.indexOf($linkHref) > -1 && $curURL.length === $linkHref.length) {\n\t\t\t  $(this).addClass('active');\n\t\t  } else {\n        $(this).removeClass('active');\n      }\n    });\n  };\n\n  const initAppsDropdown = () => {\n    const $curURL = document.location.pathname;\n    const $appLinkHref = $appDropdown.find('a').attr('href');\n\n    if ($curURL.indexOf($appLinkHref) > -1) {\n      $appDropdown.addClass('open');\n      $appDropdownMenu.show();\n    }\n  };\n\n  // handle family login form submit\n  $(document)\n    .on('submit', familyLoginForm, (e) => {\n      e.preventDefault();\n\n      const $form = $(e.target).closest(familyLoginForm);\n\n      // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n      const hiddenInputVal = $form.find(specialInputSelector).val();\n      if (hiddenInputVal) return;\n\n      const email = $form.find(loginEmailInput).val();\n      const password = $form.find(loginPasswordInput).val();\n      const $errorBlock = $form.find($loginError(ACCOUNT_TYPES_STRING.PARENT));\n      const loginParsleyForm = $form.parsley();\n\n      loginParsleyForm.validate();\n      if (!loginParsleyForm.isValid()) return;\n\n      hideLoginFormError();\n      toggleFormLoading($form, true);\n\n      ga('send', 'event', 'Button', 'Login', 'Parent');\n\n      $.ajax({\n        url: ENDPOINT.USER_LOGIN,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify({\n          username: email,\n          password: password\n        })\n      }).then((response) => {\n        if (response && response.error_code) {\n          handleLoginError(response, $errorBlock, ACCOUNT_TYPES_STRING.PARENT);\n          return;\n        }\n        if (window.fwdUrl) {\n          window.location.href = window.fwdUrl;\n          return;\n        }\n\n        if (isWebGamesPage()) {\n          // only for web games page\n          storage.set(LOCAL_STORAGE_KEYS.SHOW_WEB_GAMES_SUBSCRIPTION_MODAL, true);\n          return window.location.reload();\n        }\n\n        let coupon = getUrlParam(GET_PARAMS.COUPON);\n        const nextParam = getUrlParam(GET_PARAMS.NEXT);\n\n        if(!coupon && nextParam) {\n          const nextUrl = new URL(window.origin + nextParam);\n          coupon = new URLSearchParams(nextUrl.search).get(GET_PARAMS.COUPON);\n        }\n\n        const couponGetParam = coupon ? `${GET_PARAMS.COUPON}=${coupon}` : '';\n\n        // for users who logged in from modal on lp promo pages (worksheets, reading, math)\n        if (PROMO_LANDINGS_URLS.indexOf(location.pathname) > -1) {\n          if (response.has_parent_subscription) {\n            window.location = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_SUCCESS}`;\n            return;\n          }\n\n          // reload the page if user doesnt has parent subscription\n          // (do not redirect user from current page)\n          window.location.reload();\n          return;\n        }\n\n        // if user logged in from promo subscription section\n        // (button that opens login modal and set GET_PARAMS.MAKE_REDIRECT param to url\n        // is in the error message in subscription-promo-payment)\n        if (getUrlParam(GET_PARAMS.MAKE_REDIRECT)) {\n          if (response.has_parent_subscription) {\n            window.location.href = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_SUCCESS}`;\n            return;\n          }\n\n          if (couponGetParam) {\n            const nextPath = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_PLANS}`;\n            window.location.href = `${nextPath}?${couponGetParam}`;\n            return;\n          }\n\n          // Don't redirect from page with promo subscription section\n          // in case user doesn't have any active subscriptions\n          if (!response.has_parent_subscription) {\n            deleteUrlParam(GET_PARAMS.MAKE_REDIRECT);\n            window.location.reload();\n            return;\n          }\n        }\n\n        if (response && response.redirect_url) {\n          const emailParam = `email=${btoa(email)}`;\n          const getParams = couponGetParam ? `?${couponGetParam}&${emailParam}` : `?${emailParam}`;\n          window.location.href = response.redirect_url + getParams;\n        }\n      }, (error) => {\n        toggleFormLoading($form, false);\n        handleLoginError(JSON.parse(error.responseText), $errorBlock, ACCOUNT_TYPES_STRING.PARENT);\n      });\n    })\n    // handle school login form submit\n    .on('submit', schoolLoginForm, (e) => {\n      e.preventDefault();\n\n      const $form = $(e.target).closest(schoolLoginForm);\n      // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n      const hiddenInputVal = $form.find(specialInputSelector).val();\n      if (hiddenInputVal) return;\n\n      const noNeedToRedirectFlag = $logInModal.attr(noRedirectAttrName) === 'true';\n      const username = $form.find(loginEmailInput).val();\n      const password = $form.find(loginPasswordInput).val();\n      const $errorBlock = $loginError(ACCOUNT_TYPES_STRING.TEACHER);\n      const loginParsleyForm = $form.parsley();\n\n      loginParsleyForm.validate();\n      if (!loginParsleyForm.isValid()) return;\n\n      hideLoginFormError();\n      toggleFormLoading($form, true);\n\n      ga('send', 'event', 'Button', 'Login', 'Teacher');\n\n      $.ajax({\n        url: ENDPOINT.USER_LOGIN,\n        method: 'POST',\n        contentType: 'application/json',\n        data: JSON.stringify({username: username, password: password})\n      }).then((response) => {\n        if (response && response.error_code) {\n          handleLoginError(response, $errorBlock, ACCOUNT_TYPES_STRING.TEACHER);\n          return;\n        }\n\n        if (noNeedToRedirectFlag) {\n          location.reload();\n          return;\n        }\n\n        if (window.URLSearchParams) {\n          const searchParams = new URLSearchParams(window.location.search);\n          if (searchParams.has(GET_PARAMS.NEXT)) {\n            window.location.href = searchParams.get(GET_PARAMS.NEXT);\n            return;\n          }\n        }\n\n        if (response && response.redirect_url) window.location.href = response.redirect_url;\n      }, (error) => {\n        toggleFormLoading($form, false);\n        handleLoginError(JSON.parse(error.responseText), $errorBlock, ACCOUNT_TYPES_STRING.TEACHER);\n      });\n    })\n    //trigger on tab change event\n    .on('click', '[data-toggle=\"tab\"]', () => {\n      resetParsleyErrors();\n      hideLoginFormError();\n    })\n    // password & pincode reset\n    .on('click', resetSubmit, () => {\n      isFormValid($resetForm);\n    });\n\n  $logInModal.on('show.bs.modal', resetParsleyErrors);\n\n  $logInModal.on('hide.bs.modal', (e) => $(e.currentTarget).attr(noRedirectAttrName, false));\n\n  $mainMenuNavbar\n    .on('show.bs.collapse', () => {\n      if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) {\n        $mainMenuDropdown.addClass('open');\n      }\n    })\n    .on('hidden.bs.collapse', () => $mainMenuDropdown.removeClass('open'));\n\n  $(window).resize(() => {\n    if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) {\n      $mainMenuDropdown.addClass('open');\n      $appDropdown.addClass('open');\n      return;\n    }\n\n    if (window.matchMedia(`(min-width: ${menuResizeBreakpoint})`).matches) {\n      $mainMenuDropdown.removeClass('open');\n      $appDropdown.removeClass('open');\n    }\n  });\n\n  $appDropdownToggle.on('click', (e) => {\n    e.preventDefault();\n\n    if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) return;\n\n    if (!$appDropdown.hasClass('open')) {\n      $appDropdown.addClass('open');\n    } else {\n      $appDropdown.removeClass('open');\n    }\n\n    $appDropdownMenu.slideToggle();\n  });\n\n  initAppsDropdown();\n  getActivePointAppDropdownMenu();\n  onPageLoad();\n});\n\n\n/* eslint-disable max-len */\n// prevent mouse wheel click on download worksheet btn click\n$(document).on('auxclick', '[data-selector=\"learning-resources-download\"], [data-selector=\"download-worksheet-link\"]', (e) => {\n  if (e.button === 1) e.preventDefault();\n});\n/* eslint-enable max-len */\n","import {scrollToHashedElement} from '../utils';\n\n$(document).ready(function () {\n  const mainBannerLinkSelector = '[data-selector=\"main-banner-link\"][href=\"/#go-to-home-offer\"]';\n\n  const scrollToHomeOfferSection = (e) => {\n    const hash = '#go-to-home-offer';\n\n    if (e && e.currentTarget.hash === hash // click to banner\n      || !e && location.hash === hash) {     // on page load\n\n      // do no reload the page if current page is home page\n      if (window.location.pathname === '' || window.location.pathname === '/') {\n        e && e.preventDefault();\n      }\n\n      scrollToHashedElement('#homepage-promo', {scrollTimeout: 0});\n    }\n  };\n\n  $(document)\n    .on('click', mainBannerLinkSelector, function () {\n      scrollToHashedElement('#homepage-promo', {scrollTimeout: 0});\n    });\n\n  setTimeout(scrollToHomeOfferSection, 500);\n});\n","import {\n  MODALS,\n  MIDDLE_WIDTH,\n  // SHOW_ADDS_FREE_MODAL_DELAY\n} from '../config';\nconst $document = $(document);\n\n$document.ready(function () {\n  const $header = $('[data-selector=\"header\"]');\n  if (!$header.length) return;\n\n  $('#show-tgc-paywall').on('click', () => {\n    $(MODALS.TGC_PAYWALL_MODAL_NEW).modal('show');\n  });\n\n  const addsFreeHeaderBtn = '[data-selector=\"add-free-header-btn\"]';\n  const addsFreeModalBtn = '[data-selector=\"add-free-modal-btn\"]';\n  const headerAppDropdownToggleBtn = '[data-selector=\"app-dropdown-toggle\"]';\n  const headerAppDropdownArrow = '[data-selector=\"header-app-dropdown-arrow\"]';\n  const headerDropdownList = '[data-selector=\"header-dropdown-list\"]';\n  const mainMenuDropdown = '[data-selector=\"main-menu-dropdown\"]';\n\n  const appDropdown = '[data-selector=\"app-dropdown\"]';\n  const appDropdownMenu = '[data-selector=\"app-dropdown-menu\"]';\n  let addsFreeModalBtnClicked = false;\n\n  $document\n    .on('click', headerAppDropdownToggleBtn, (e) => {\n      e.stopPropagation();\n      e.preventDefault();\n\n      if (window.innerWidth <= MIDDLE_WIDTH) {\n        const $btn = $(e.currentTarget);\n        $btn.find(headerAppDropdownArrow).toggleClass('_closed');\n\n        // toggle slide apps menu\n        const $appDropdownMenu = $btn.closest(appDropdown).find(appDropdownMenu);\n        $appDropdownMenu.slideToggle();\n\n        if (!$appDropdownMenu.length) {\n          const $headerDropdownList = $btn.closest(mainMenuDropdown).find(headerDropdownList);\n          $headerDropdownList.slideToggle();\n        }\n      }\n    })\n    .on('click', addsFreeHeaderBtn, () => {\n      ga('send', 'event', 'Ad-Free Click', 'Ad-Free Click', 'Click');\n      $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n    })\n    .on('click', addsFreeModalBtn, () => {\n      addsFreeModalBtnClicked = true;\n      ga('send', 'event', 'Adsence_PopUp', 'Ad-Free Click', 'Click');\n      $(MODALS.ADDS_FREE).modal('hide');\n    });\n\n  $(MODALS.ADDS_FREE).on('hidden.bs.modal', () => {\n    if (!addsFreeModalBtnClicked) return;\n    $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n  });\n\n  // setTimeout(() => {\n  //   const currentUrl = $('[data-url]').attr('data-url');\n  //   if (currentUrl !== 'sitemap') return;\n  //\n  //   $(MODALS.ADDS_FREE).modal('show');\n  //   ga('send', 'event', 'Adsence_PopUp', 'Show', 'Load');\n  // }, SHOW_ADDS_FREE_MODAL_DELAY);\n});\n","import {\n  SECONDS_PER_DAY,\n  SECONDS_PER_HOUR,\n  SECONDS_PER_MINUTE\n} from '../config';\n\n$(document).ready(() => {\n  const $timer = $('[data-selector=\"main-banner-timer\"]');\n  if (!$timer.length) return;\n\n  const timerExpiresAttr = 'data-expires';\n\n  //timer panel sections' attributes\n  const days = 'main-banner-timer-days';\n  const hours = 'main-banner-timer-hours';\n  const minutes = 'main-banner-timer-mins';\n  const seconds = 'main-banner-timer-secs';\n\n\n  const formatNumberForDisplay = (string) => {\n    return string.toLocaleString('en-US', {\n      minimumIntegerDigits: 2\n    });\n  };\n\n  const secondsToDhms = (seconds) => {\n    const fullDaysLeft = Math.floor(seconds / SECONDS_PER_DAY);\n    const hoursRemain = seconds % SECONDS_PER_DAY;\n    const fullHoursLeft = Math.floor(hoursRemain / SECONDS_PER_HOUR);\n    const minsRemain = hoursRemain % SECONDS_PER_HOUR;\n    const fullMinsLeft = Math.floor(minsRemain / SECONDS_PER_MINUTE);\n    const secondsLeft = minsRemain % SECONDS_PER_MINUTE;\n\n    return {\n      fullDaysLeft,\n      fullHoursLeft,\n      fullMinsLeft,\n      secondsLeft\n    };\n  };\n\n  const setTimerValue = ($timer, secondsInterval) => {\n    const {fullDaysLeft, fullHoursLeft, fullMinsLeft, secondsLeft} = secondsToDhms(secondsInterval);\n    const timerData = {\n        [days]: formatNumberForDisplay(fullDaysLeft),\n        [hours]: formatNumberForDisplay(fullHoursLeft),\n        [minutes]: formatNumberForDisplay(fullMinsLeft),\n        [seconds]: formatNumberForDisplay(secondsLeft)\n      };\n\n    for (const [timerSectionAttr, value] of Object.entries(timerData)) {\n      $timer.find(`[data-selector=${timerSectionAttr}]`).text(value);\n    }\n  };\n\n  const setTimer = ($timer, timerInterval) => {\n    let secondsLeft = Math.floor(timerInterval / 1000);\n\n    setTimerValue($timer, secondsLeft); // set timer immediately the first time to avoid delay\n    const countdown = setInterval(() => {\n      if (--secondsLeft <= 0) clearInterval(countdown);\n\n      setTimerValue($timer, secondsLeft);\n    }, 1000);\n  };\n\n  const dateDiffUTC = (dateFrom, dateUntil) => {\n    const dateFromToUTC = new Date(dateFrom.toUTCString());\n    const dateUntilToUTC = new Date(dateUntil.toUTCString());\n    return dateUntilToUTC - dateFromToUTC;\n  };\n\n  const handleTimerInit = (index, timerElement) => {\n    const $timer = $(timerElement);\n    const timerExpires = $timer.attr(timerExpiresAttr);\n    const timerExpiresDate = new Date(timerExpires);\n\n    const timerInterval = timerExpiresDate ? dateDiffUTC(new Date(), timerExpiresDate) : null;\n\n    !timerInterval || timerInterval <= 0\n      ? setTimerValue($timer, 0)\n      : setTimer($timer, timerInterval);\n  };\n\n  $timer.each(handleTimerInit.bind(this));\n});\n","import {isUiTestingMode} from '../utils';\n\n(function () {\n  if (isUiTestingMode()) return null;\n  if ($(['data-selector=\"tg-online\"']).length) return;\n\n  const options = {\n    innerHTML: '<div></div>',\n    className: 'go-to-top-btn',\n    offset: '20px',\n  };\n\n  options.offset = options.offset || '1rem';\n\n  const backTop = document.createElement('a');\n  backTop.href = '#top';\n  backTop.innerHTML = options.innerHTML || 'Back to Top';\n  backTop.id = options.id || '';\n  backTop.className = options.className || '';\n\n  backTop.style.position = 'fixed';\n  backTop.style.right = options.offset;\n  backTop.style.bottom = '-100px';\n  backTop.style['transition-property'] = 'bottom';\n\n  if (!options.transition) {\n    options.transition = {};\n  }\n\n  backTop.style['transition-duration'] = '800ms';\n  backTop.style['transition-timing-function'] = 'linear';\n\n  window.addEventListener('scroll', function () {\n    if (window.pageYOffset < 100) {\n      backTop.style.bottom = '-100px';\n    } else {\n      backTop.style.bottom = options.offset;\n    }\n  });\n\n  backTop.addEventListener('click', function(e) {\n    const $body = $('body, html');\n      $body.animate({\n        scrollTop :0\n      }, 500);\n\n    // Remove hash from URL:\n    history.pushState(\n      '',\n      document.title,\n      window.location.pathname + window.location.search\n    );\n    e.preventDefault();\n  });\n\n  document.body.appendChild(backTop);\n})();\n","import {\n  ENDPOINT,\n  GET_PARAMS\n} from '../config';\nimport Qs from 'qs';\nimport {deleteGetParamFromUrl} from '../utils';\n\n\n$(document).ready(function () {\n  const notification = '[data-selector=\"notification\"]';\n  const $notification = $(notification);\n  if (!$notification.length) return;\n\n  const headerUserDropDown = '[data-selector=\"header-user-dropdown\"]';\n\n  const notificationDropdownClose = '[data-selector=\"notification-close-btn\"]';\n  const notificationDropdownToggleBtn = '[data-selector=\"notification-toggle-btn\"]';\n  const $notificationDropdown = $('[data-selector=\"notification-dropdown\"]');\n  const notificationMarkAsRead = '[data-selector=\"notification-mark-all-as-read\"]';\n  const notificationMessageLink = '[data-selector=\"notification-message-link\"]';\n  const $notificationContainer = $('[data-selector=\"header-notification\"]');\n  const $notificationActiveIcon = $('[data-selector=\"notification-active-icon\"]');\n  const $notificationInActiveIcon = $('[data-selector=\"notification-inactive-icon\"]');\n\n  const accSettingsMessagesBtn = '[data-selector=\"account-settings-my-messages-btn\"]';\n  const $messagesContentList = $('[data-selector=\"messages-content-list\"]');\n  const messagePreviewText = '[data-selector=\"message-preview-text\"]';\n  const $messagePreviewList = $('[data-selector=\"message-preview-list\"]');\n  const messageIdDataAttr = 'data-message-id';\n  const allNotReaderMessageIdsDataAttr = 'data-all-messages-ids';\n  const markAllAsReadBtn = '[data-selector=\"messages-mark-all-as-read-btn\"]';\n  const messageBackBtn = '[data-selector=\"messages-back-btn\"]';\n  const $messageTopTitle = $('[data-selector=\"messages-top-title\"]');\n\n  const messageReadClassName = '_is-read';\n\n\n  const showMessageById = (messageId) => {\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n\n    $messagePreviewItem.click();\n  };\n\n  const markMessageAsReadOnUI = (messageId) => {\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n    const $headerMessageItem = $notificationContainer.find(currentMessageSelector);\n\n    $messagePreviewItem.addClass(messageReadClassName);\n    $headerMessageItem.addClass(messageReadClassName);\n  };\n\n  const openMessageOnPageLoad = () => {\n    const queryObject = Qs.parse(location.search.substr(1));\n    const messageId = queryObject[GET_PARAMS.MESSAGE_ID];\n    if (!messageId) return;\n\n    messageId.replace('/','');\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n    $messagePreviewItem.click();\n  };\n\n  const sendMessagesReadRequest = (messageIdsArray=null) => {\n    $.ajax({\n      url: ENDPOINT.NOTIFICATION_MARK_AS_READ,\n      type: 'POST',\n      contentType: 'application/json',\n      data: JSON.stringify({ids: messageIdsArray})\n    }).then((response) => {\n      if (!response.has_unread_messages) {\n        $(markAllAsReadBtn).hide();\n        $(notificationMarkAsRead).hide();\n        makeNotificationIconInactive();\n      }\n    });\n  };\n\n  const makeNotificationIconInactive = () => {\n    $notificationActiveIcon.hide();\n    $notificationInActiveIcon.show();\n  };\n\n  const updateUrlWithMessageIdGetParam = (messageId) => {\n    if (window.history.replaceState) {\n      // eslint-disable-next-line max-len\n      const newUrl = `${location.origin}${location.pathname}?${GET_PARAMS.MESSAGE_ID}=${messageId}/#my-messages`;\n      history.pushState({}, null, newUrl);\n    }\n  };\n\n\n  $(document)\n    // header \"mark all as read\" btn click\n    .on('click', notificationMarkAsRead, () => {\n      const notReadMessagesIdsArray = $notificationContainer\n                                        .attr(allNotReaderMessageIdsDataAttr)\n                                        .split(' ');\n      notReadMessagesIdsArray.splice(-1,1); // remove extra/empty array item (last)\n      notReadMessagesIdsArray.forEach((id) => {markMessageAsReadOnUI(id);});\n\n      sendMessagesReadRequest(null);\n      makeNotificationIconInactive();\n    })\n    // my account. message preview item click\n    .on('click', messagePreviewText, (e) => {\n      const $messageTextItem = $(e.currentTarget);\n      const messageId = $messageTextItem.attr(messageIdDataAttr);\n      const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n      const $messageContentItem = $messagesContentList.find(currentMessageSelector);\n      const $messageContentAllItems = $messagesContentList.find(`[${messageIdDataAttr}]`);\n\n      $messagePreviewList.hide();\n      $messageContentAllItems.hide();\n      $messageContentItem.show();\n      $(messageBackBtn).show();\n      $messageTopTitle.hide();\n      $(markAllAsReadBtn).hide();\n\n      if (!$messageTextItem.hasClass(messageReadClassName)) {\n        markMessageAsReadOnUI(messageId);\n        sendMessagesReadRequest([messageId]);\n      }\n\n      updateUrlWithMessageIdGetParam(messageId);\n    })\n    // header. message item click\n    .on('click', notificationMessageLink, (e) => {\n      // prevent page reload, and just show message\n      if ($(accSettingsMessagesBtn).length) {\n        e.preventDefault();\n        $(accSettingsMessagesBtn).click();\n        const $messageLink = $(e.currentTarget);\n        const messageId = $messageLink.attr(messageIdDataAttr);\n\n        if (!$messageLink.hasClass(messageReadClassName)) {\n          markMessageAsReadOnUI(messageId);\n          sendMessagesReadRequest([messageId]);\n        }\n\n        updateUrlWithMessageIdGetParam(messageId);\n        showMessageById(messageId);\n      }\n\n      $notificationDropdown.hide();\n    })\n    // header. dropdown hide btn\n    .on('click', notificationDropdownClose, () => {\n      $notificationDropdown.hide();\n    })\n    // header. dropdown show/hide btn click\n    .on('click', notificationDropdownToggleBtn, () => {\n      $notificationDropdown.toggle();\n    })\n    // click on any elem except notification dropdown to hide the dropdown\n    .on('click', (e) => {\n      e.stopPropagation();\n      if (!$(e.target).closest(notification).length) $notificationDropdown.hide();\n    })\n    // acc settings. \"mark all as read\" btn click\n    .on('click', markAllAsReadBtn, () => {\n      const messagePreviewItems = $(messagePreviewText);\n      const $notReadPreviewMessageItems = messagePreviewItems.not(`.${messageReadClassName}`);\n      const notReadMessagesIdsArray = [];\n\n      $notReadPreviewMessageItems.each((i, message) => {\n        notReadMessagesIdsArray.push($(message).attr(messageIdDataAttr));\n      });\n\n      notReadMessagesIdsArray.forEach((id) => {markMessageAsReadOnUI(id);});\n\n      sendMessagesReadRequest(null);\n      makeNotificationIconInactive();\n      $notificationDropdown.hide();\n      $(markAllAsReadBtn).html('');\n    })\n    // acc settings. my-messages nav btn click\n    .on('click', accSettingsMessagesBtn, () => {\n      $(messageBackBtn).click();\n      deleteGetParamFromUrl(GET_PARAMS.MESSAGE_ID);\n      ga('send', 'event', 'Account settings', 'Message Page', 'Visit');\n    })\n    // acc settings. back to messages preview btn click\n    .on('click', messageBackBtn, () => {\n      const $messageContentAllItems = $messagesContentList.find(`[${messageIdDataAttr}]`);\n      $messagePreviewList.show();\n      $messageContentAllItems.hide();\n      $(messageBackBtn).hide();\n      $messageTopTitle.show();\n      $(markAllAsReadBtn).show();\n      deleteGetParamFromUrl(GET_PARAMS.MESSAGE_ID);\n    })\n    .on('click', headerUserDropDown, () => {\n      $notificationDropdown.hide();\n    });\n\n  openMessageOnPageLoad();\n});\n","import {\n  CURRENCY,\n  ENDPOINT,\n  GET_PARAMS\n} from '../config';\n\n\nexport const toggleApplyCouponBtn = (couponInput, applyCouponBtn, couponBlockParams) => {\n  const { emptyCouponClass } = couponBlockParams;\n\n  if (couponInput.val()) {\n    applyCouponBtn.removeClass(emptyCouponClass);\n    return;\n  }\n\n  applyCouponBtn.addClass(emptyCouponClass);\n};\n\nexport const toggleCouponBlock = (couponBlock, toggleCouponBlockBtn, couponBlockParams) => {\n  const { activeClass, showCouponText, hideCouponText } = couponBlockParams;\n  // hide coupon block\n  if (couponBlock.hasClass(activeClass)) {\n    couponBlock.removeClass(activeClass);\n    toggleCouponBlockBtn.html(showCouponText);\n    couponBlock.hide();\n    return;\n  }\n\n  // show coupon block\n  couponBlock.show();\n  toggleCouponBlockBtn.html(hideCouponText);\n  couponBlock.addClass(activeClass);\n};\n\n// check is coupon a distributor code\nexport const doCheckIsCouponDistributorCode = (coupon) =>\n  $.ajax({\n    url: ENDPOINT.GIFT_CODE_VALIDATE,\n    contentType: 'application/json',\n    type: 'POST',\n    data: JSON.stringify({\n      code: coupon\n    })\n  });\n\nexport const handleDropinToken = (callback = () => {}, errorHandler = () => {}) => {\n  if (window.braintree_token) {\n    callback();\n    return null;\n  }\n\n  $.ajax({\n    url: ENDPOINT.GET_BRAINTREE_TOKEN,\n    contentType: 'application/json',\n    type: 'GET'\n  }).then((data) => {\n      window.braintree_token = data.token;\n      callback();\n    }, (err) => {\n      errorHandler(err);\n    });\n};\n\nexport const getSelectedOfferDetails = (selectedOffer, amountOff=0, planAttr, userEmail=null) => {\n  const { slug, offerPeriod, price, backUrl, offerPeriodDisplay } = planAttr;\n  const planPeriod = selectedOffer.attr(offerPeriod);\n  const planFullPrice = (selectedOffer.attr(price) / 100).toFixed(2);\n  const planPriceWithDiscount = (planFullPrice - amountOff).toFixed(2);\n  const planNewPrice = planPriceWithDiscount < 0 ? 0 : planPriceWithDiscount;\n  const planFormattedNewPrice = parseFloat(planNewPrice).toFixed(2);\n  const planSlug = selectedOffer.attr(slug);\n  const planBackUrl = userEmail\n    ? selectedOffer.attr(backUrl) + `?${GET_PARAMS.EMAIL}=${encodeURIComponent(userEmail)}`\n    : selectedOffer.attr(backUrl);\n  const planPeriodDisplay = selectedOffer.attr(offerPeriodDisplay) || planPeriod;\n\n  return {\n    planPeriod,\n    planFullPrice,\n    planFormattedNewPrice,\n    planSlug,\n    planBackUrl,\n    planPeriodDisplay\n  };\n};\n\nexport const getShippingPriceInCents = (shippingCountriesSelect) => {\n  const result = parseInt($(shippingCountriesSelect).find('option:selected').attr('data-price'));\n  return result;\n};\n\nconst getEbloxPriceInCents = () => {\n  const result = parseInt(ebloxAddonPrice);\n  return result;\n};\n\nexport const getTotalPricesInCents = (\n  planFullPriceInCents,\n  isTrialActive=false,\n  isEbloxAdded=false,\n  activeCoupon=false,\n  amountOff=0,\n  shippingCountriesSelect\n) => {\n  const mainSubscriptionPriceInCents = parseFloat(planFullPriceInCents);\n  let subscriptionPriceInCents = mainSubscriptionPriceInCents;\n  let ebloxAndShippingPriceInCents = 0;\n  let totalPriceInCents = 0;\n\n  if (isTrialActive) subscriptionPriceInCents = 0;\n\n  if (isEbloxAdded) {\n    ebloxAndShippingPriceInCents =\n      getShippingPriceInCents(shippingCountriesSelect) + getEbloxPriceInCents();\n  }\n\n  totalPriceInCents = subscriptionPriceInCents + ebloxAndShippingPriceInCents;\n\n  if (activeCoupon) {\n    const amountPriceInCents = parseFloat((amountOff * 100).toFixed());\n    const priceAfterDiscount = parseFloat((totalPriceInCents - amountPriceInCents).toFixed());\n    totalPriceInCents = priceAfterDiscount < 0 ? 0 : priceAfterDiscount;\n  }\n\n  const getPriceFor3ds = () => {\n    /* eslint-disable max-len */\n    const minCapFor3DSecureInCents = 1;\n    let threeDSecurePrice = mainSubscriptionPriceInCents + ebloxAndShippingPriceInCents;\n\n    if (activeCoupon) {\n      const amountPriceInCents = parseFloat((amountOff * 100).toFixed());\n      const threeDSecurePriceAfterDiscount = parseFloat((threeDSecurePrice - amountPriceInCents).toFixed());\n      // fix for 3d secure, we CAN NOT use 0 as price for 3d secure\n      threeDSecurePrice = threeDSecurePriceAfterDiscount <= 0 ? minCapFor3DSecureInCents : threeDSecurePriceAfterDiscount;\n    }\n\n    return threeDSecurePrice;\n    /* eslint-enable max-len */\n  };\n\n  const priceFor3DSecure = getPriceFor3ds();\n\n  return {totalPriceInCents, priceFor3DSecure};\n};\n\nexport const getCurrencyPrice = (priceInCents) => {\n  return `${CURRENCY}${(priceInCents / 100).toFixed(2).toString()}`;\n};\n\nexport const setCheckoutBtnTitle = ($button, isTrialActive, checkoutTextAttr) => {\n  if (isTrialActive) {\n    $button.html($button.attr(checkoutTextAttr.trial));\n    return;\n  }\n\n  $button.html($button.attr(checkoutTextAttr.noTrial));\n};\n\nexport const setDefaultOfferSubmitText = ($button, submitText='Subscribe') => {\n  if (submitText) $button.html(submitText);\n};\n\nexport const defineTrialMessagePlural = (trialDuration, unit='day') => {\n  return parseFloat(trialDuration) > 1\n    ? `${trialDuration}-${unit}s`\n    : `${trialDuration}-${unit}`;\n};\n","import {\n  braintreeDropinConfig,\n  capitalize,\n  getError,\n  getUserSources,\n  isFormValid,\n  isThreeDSecureCanceled,\n  threeDSecureConfig,\n  toggleButtonLoading\n} from '../utils';\nimport {\n  ACCOUNT_TYPES,\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  DROPIN_SCRIPT_URL,\n  ENDPOINT,\n  PURCHASE_STEP_TRIGGERED_ATTRIBUTE,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  WORKSHEET_DOWNLOAD_DELAY\n} from '../config';\nimport {\n  doCheckIsCouponDistributorCode,\n  getCurrencyPrice,\n  getSelectedOfferDetails,\n  getTotalPricesInCents,\n  handleDropinToken,\n  setCheckoutBtnTitle,\n  toggleApplyCouponBtn,\n  toggleCouponBlock\n} from '../payment/subscription.utils';\n\n$(document).ready(() => {\n  const monetizationPopupsSelector = '[data-selector=\"monetization-popup\"]';\n  const $monetizationPopups = $(monetizationPopupsSelector);\n  const $downloadBtn = $('[data-selector=\"download-worksheet-link\"]');\n  const isWorksheetDownloadAvailable = !!$downloadBtn.length;\n\n  const closePopupTextBtn = '[data-selector=monetization-popup-text-close]';\n  const downloadText = '[data-selector=\"monetization-popup-download-text\"]';\n  const downloadLink = '[data-selector=\"monetization-popup-download-link\"]';\n  const autoplayAttr = 'data-is-autoplay';\n  const isPopupAutoplay = $monetizationPopups.is(`[${autoplayAttr}]`);\n\n  // subscription details elements\n  const $planPeriod = $('[data-selector=\"monetization-popup-plan-period-value\"]');\n  const $planFullPrice = $('[data-selector=\"monetization-popup-plan-full-price-value\"]');\n  const $planTrialPeriod = $('[data-selector=\"monetization-popup-plan-trial-period-value\"]');\n  const $planDiscountRow = $('[data-selector=\"monetization-popup-plan-discount-row\"]');\n  const $planTrialRow = $('[data-selector=\"monetization-popup-plan-trial-row\"]');\n  const $planDiscount = $('[data-selector=\"monetization-popup-plan-discount-value\"]');\n  const $planTotalPrice = $('[data-selector=\"monetization-popup-plan-total-price-value\"]');\n  const $planRenewCondition = $('[data-selector=\"monetization-popup-plan-renew-condition\"]');\n\n  const section = {\n    first: 0,\n    second: 1\n  };\n\n  // plan attributes\n  const planAttr = {\n    isTrialRadioEnabled: 'data-is-trial-radio-enabled',\n    slug: 'data-slug',\n    trialDuration: 'data-trial-duration',\n    offerPeriod: 'data-offer-period',\n    price: 'data-price',\n    backUrl: 'data-offer-back-url',\n    offerPeriodDisplay: 'data-offer-period-display',\n    submitText: 'data-offer-submit',\n    isCouponEnabled: 'data-is-coupon-enabled'\n  };\n\n  // popup second kind\n  const $subscriptionStep = $('[data-selector=\"monetization-popup-subscription-step\"]');\n  const monetizationPopupContentSelector = '[data-selector=\"monetization-popup-content\"]';\n  const $monetizationPopupContent = $(monetizationPopupContentSelector);\n  const subscriptionStepClass = '_subscription-step';\n  const isSubscriptionKind = !!$subscriptionStep.length;\n\n  const braintreeDropinSelector = '[data-selector=\"dropin-container\"]';\n  const shippingCountriesSelect = '[data-selector=\"shipping-countries-select\"]';\n  const shippingFormItemSelect = '[data-selector=\"shipping-addon-form-item\"]';\n  const hiddenInputSelect = '[data-selector=\"monetization-popup-special-input\"]';\n\n  const $subscriptionError = $('[data-selector=\"monetization-popup-subscription-error\"]');\n  const $submitPaymentBtn = $('[data-selector=\"monetization-popup-submit-payment-btn\"]');\n\n  const popupHideHandler = () => {\n    $(closePopupTextBtn).hide();\n    $(downloadText).show();\n    $(downloadLink).hide();\n  };\n\n  const popupShownHandler = () => {\n    ga('send', 'event', 'TG_Banner', 'PopUp Shown', 'Click');\n\n    // do not start video if popup is of the 2nd type\n    // and was triggered with subscription step as opener\n    const isSubscriptionStep = $monetizationPopupContent.hasClass(subscriptionStepClass);\n\n    const $actionElementToShow =\n      isPopupAutoplay || !isWorksheetDownloadAvailable\n      ? $(closePopupTextBtn)\n      : $(downloadLink);\n\n    // show close popup btn\n    setTimeout(() => {\n      $(downloadText).hide();\n      $actionElementToShow.show();\n    }, isSubscriptionStep ? 0 : WORKSHEET_DOWNLOAD_DELAY);\n  };\n\n  $monetizationPopups.on('show.bs.modal', popupShownHandler);\n  $monetizationPopups.on('hide.bs.modal', popupHideHandler);\n\n  const defineFirstKind = () => {\n    //popup first kind\n    const $firstKindVideoStep = $('[data-selector=\"first-kind-video-step\"]');\n    const $firstKindPurchaseStep = $('[data-selector=\"first-kind-purchase-step\"]');\n    const firstKindPlan = '[data-selector=\"first-kind-plan\"]';\n    const firstKindGoToPaymentStepBtn = '[data-selector=\"first-kind-go-to-checkout-btn\"]';\n    const $firstKindGoToPaymentStepBtn = $(firstKindGoToPaymentStepBtn);\n    const $popupTransitionLoader = $('[data-selector=\"monetization-popup-transition-loader\"]');\n\n    const prevSectionButton = '[data-selector=\"first-kind-back-to-video-section-btn\"]';\n    const $prevSectionButton = $(prevSectionButton);\n\n    let $openModal = null;\n\n    const activeCoupon = null;\n    const amountOff = 0;\n\n    const isSpecialCouponApplied = false;\n    const specialCouponTrialDuration = null;\n    const isEbloxAdded = false;\n\n    const isTrialActive = () => {\n      if (!window.ableToGetTrial) return false;\n\n      const trialDuration = $openModal.find(firstKindPlan).attr(planAttr.trialDuration);\n      const isTrialDisabled = parseInt(trialDuration) === 0;\n      if (isTrialDisabled) return false;\n\n      return true;\n    };\n\n    const doSignUp = () => {\n      ga('send', 'event', 'Registration', 'Go', 'Parent');\n\n      $.ajax({\n        url: ENDPOINT.USER_PROFILE,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify({\n          account_type: ACCOUNT_TYPES.PARENT,\n          email: null,\n          need_to_login: true,\n          source: getUserSources('source'),\n          medium: getUserSources('medium'),\n          campaign: getUserSources('campaign'),\n          placement: getUserSources('placement')\n        })\n      }).then(() => {\n        window.isLoggedIn = true;\n        $.getScript(DROPIN_SCRIPT_URL, handleDropinToken(dropinTokenCallback));\n      }, (error) => {\n        toggleButtonLoading($firstKindGoToPaymentStepBtn, false);\n        toastr.error(getError(error), '', {timeOut: 3000});\n      });\n    };\n\n    const dropinTokenCallback = () => {\n      toggleButtonLoading($firstKindGoToPaymentStepBtn, false);\n      if (!$openModal) return;\n\n      preparePuschaseStep();\n    };\n\n    const selectSection = (sectionId) => {\n      if (sectionId === section.first) {\n        prepareFirstSectionUI();\n        // Remove an event listener set by braintree-creating function so as\n        // to prevent creating multiple event handlers in case of function call repeat\n        $submitPaymentBtn.off('click');\n        return;\n      }\n\n      if (sectionId === section.second) {\n        prepareSecondSectionUI();\n      }\n    };\n\n    const prepareFirstSectionUI = () => {\n      if ($openModal) {\n        $openModal.find(monetizationPopupContentSelector).removeClass(subscriptionStepClass);\n      }\n      $firstKindPurchaseStep.attr(PURCHASE_STEP_TRIGGERED_ATTRIBUTE, '');\n      $firstKindPurchaseStep.hide();\n      $firstKindVideoStep.show();\n      $subscriptionError.hide();\n      $submitPaymentBtn.hide();\n      $popupTransitionLoader.hide();\n      $(braintreeDropinSelector).html('');\n      $planRenewCondition.text('');\n    };\n\n    const prepareSecondSectionUI = () => {\n      $openModal.find(monetizationPopupContentSelector).addClass(subscriptionStepClass);\n      $firstKindPurchaseStep.attr(PURCHASE_STEP_TRIGGERED_ATTRIBUTE, 'true');\n      toggleButtonLoading($prevSectionButton, true);\n      $popupTransitionLoader.hide();\n      $firstKindVideoStep.hide();\n      $planDiscountRow.hide();\n      $planTrialRow.hide();\n      $planRenewCondition.hide();\n      $firstKindPurchaseStep.show();\n    };\n\n    const preparePuschaseStep = () => {\n      $submitPaymentBtn.hide();\n      selectSection(section.second);\n\n      const offer = $openModal.find(firstKindPlan);\n      const {\n        planPeriod,\n        planFullPrice,\n        planFormattedNewPrice,\n        planSlug,\n        planBackUrl,\n        planPeriodDisplay\n      } = getSelectedOfferDetails(offer, amountOff, planAttr);\n      const planTrialPeriod = (isSpecialCouponApplied && specialCouponTrialDuration)\n          ? specialCouponTrialDuration\n          : offer.attr(planAttr.trialDuration);\n      const isTrialEnabled = isTrialActive();\n\n      renderSelectedOfferDetails(\n        planPeriod,\n        planFullPrice,\n        planTrialPeriod,\n        planFormattedNewPrice,\n        planPeriodDisplay\n      );\n\n      const { totalPriceInCents, priceFor3DSecure } = getTotalPrices(isTrialEnabled);\n\n      setTotalPriceToUI(totalPriceInCents);\n\n      const $dropinContainer = $openModal.find(braintreeDropinSelector);\n      const dropinContainerId = '#' + $dropinContainer.attr('id');\n\n      initBraintreeDropin(\n        totalPriceInCents,\n        priceFor3DSecure,\n        planSlug,\n        planBackUrl,\n        isTrialEnabled,\n        dropinContainerId\n      );\n    };\n\n    const renderSelectedOfferDetails = (\n      planPeriod,\n      planFullPrice,\n      planTrialPeriod,\n      planFormattedNewPrice,\n      planPeriodDisplay\n    ) => {\n      $planPeriod.text(capitalize(planPeriodDisplay));\n      $planFullPrice.text(`${CURRENCY}${planFullPrice}`);\n\n      if (isTrialActive()) {\n        $planTrialPeriod.text(`${planTrialPeriod} days`);\n        $planTrialRow.show();\n        $planTotalPrice.text(`${CURRENCY}0.00`);\n\n        if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n          const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planFullPrice);\n          $planRenewCondition.html(text);\n        }\n\n        $planRenewCondition.show();\n      } else $planTotalPrice.text(`${CURRENCY}${planFormattedNewPrice}`);\n    };\n\n    const getTotalPrices = (isTrialEnabled) => {\n      const planFullPriceInCents = $openModal.find(firstKindPlan).attr(planAttr.price);\n      const totalPrices = getTotalPricesInCents(\n        planFullPriceInCents,\n        isTrialEnabled,\n        isEbloxAdded,\n        activeCoupon,\n        amountOff,\n        shippingCountriesSelect\n      );\n\n      return totalPrices;\n    };\n\n    const setTotalPriceToUI = (totalPriceInCents) => {\n      const currencyPrice = getCurrencyPrice(totalPriceInCents);\n      $planTotalPrice.html(currencyPrice);\n    };\n\n    const initBraintreeDropin = (\n      totalPriceInCents,\n      priceFor3DSecure,\n      slug,\n      backUrl,\n      isTrialEnabled,\n      dropinContainerId\n    ) => {\n      if (window.isBraintreeInitilazing) return;\n\n      if (braintree && $(dropinContainerId).length) {\n        const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n        const braintreeConf = braintreeDropinConfig(totalPriceInDollars, dropinContainerId);\n\n        const $dropinContainer = $(dropinContainerId);\n        const isDropinInited = !$dropinContainer.is(':empty');\n        if (isDropinInited) return;\n\n        window.isBraintreeInitilazing = true;\n\n        braintree.dropin.create(braintreeConf,\n          function (createErr, instance) {\n            if (createErr) {\n              // An error in the create call is likely due to\n              // incorrect configuration values or network issues.\n              // An appropriate error will be shown in the UI.\n\n              // eslint-disable-next-line no-console\n              console.error('dropin create error: ', createErr);\n              return;\n            }\n\n            if (instance.isPaymentMethodRequestable()) {\n              // This will be true if you generated the client token\n              // with a customer ID and there is a saved payment method\n              // available to tokenize with that customer.\n              $submitPaymentBtn.show();\n            }\n\n            $(prevSectionButton).hide();\n\n            instance.on('paymentMethodRequestable', () => {\n              $submitPaymentBtn.show();\n              $subscriptionError.hide();\n            });\n\n            instance.on('noPaymentMethodRequestable', () => {\n              $submitPaymentBtn.hide();\n              $subscriptionError.hide();\n            });\n\n            instance.on('paymentOptionSelected', () => {\n              $subscriptionError.hide();\n              if (instance.isPaymentMethodRequestable()) {\n                $submitPaymentBtn.show();\n                return;\n              }\n              $submitPaymentBtn.hide();\n            });\n\n            toggleButtonLoading($prevSectionButton, false);\n            toggleButtonLoading($submitPaymentBtn, false);\n\n            $submitPaymentBtn.click(() => {\n              // To prevent bot spamming we use solution from\n              // https://www.thryv.com/blog/honeypot-technique/\n              const $hiddenInput = $(hiddenInputSelect);\n              const hiddenInputVal = $hiddenInput.val();\n              if (hiddenInputVal) return;\n\n              if (isEbloxAdded && !isFormValid($(shippingFormItemSelect))) return;\n\n              $subscriptionError.hide();\n              $prevSectionButton.hide();\n              toggleButtonLoading($submitPaymentBtn, true);\n\n              const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n              const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n              instance.requestPaymentMethod({\n                threeDSecure: threeDSecureConf\n              }, function (requestPaymentMethodErr, payload) {\n                if (requestPaymentMethodErr) {\n                  // eslint-disable-next-line no-console\n                  console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n                  $subscriptionError.text(requestPaymentMethodErr.message);\n                  $subscriptionError.show();\n                  $prevSectionButton.show();\n                  toggleButtonLoading($submitPaymentBtn, false);\n                  return;\n                }\n\n                if (isThreeDSecureCanceled(payload)) {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                  $subscriptionError.show();\n                  toggleButtonLoading($submitPaymentBtn, false);\n                  $prevSectionButton.show();\n                  return;\n                }\n\n                // Submit payload.nonce to your server\n                $.post(ENDPOINT.BUY_SUBSCRIPTION, {\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  discount_id: activeCoupon,\n                  source: 'main-flow-offer',\n                  trial_enabled: isTrialEnabled // always make trial if it's available\n                })\n                  .then((response) => {\n                    triggerGAEventOnCheckout();\n                    triggerAnalyticsOnCheckout(response, slug, backUrl);\n                  }, (errorResponse) => {\n                    instance.clearSelectedPaymentMethod();\n                    $subscriptionError.text('');\n                    $subscriptionError.append(getError(errorResponse));\n                    $subscriptionError.show();\n\n                    toggleButtonLoading($submitPaymentBtn, false);\n                  });\n              });\n            });\n          });\n      }\n    };\n\n    const triggerGAEventOnCheckout = () => {\n      if (isTrialActive()) {\n        ga('send', 'event', 'Trial', 'Started', 'Parent');\n      } else {\n        ga('send', 'event', 'Subscription', 'Started', 'Parent');\n      }\n    };\n\n    const triggerAnalyticsOnCheckout = (response, slug, backUrl) => {\n      window.location = backUrl;\n    };\n\n    $(document)\n      .on('click', firstKindGoToPaymentStepBtn, (e) => {\n        ga('send', 'event', 'TG_Banner', 'Plan Link', 'Click');\n\n        $openModal = $(e.target).closest(monetizationPopupsSelector);\n        toggleButtonLoading($firstKindGoToPaymentStepBtn, true);\n        if (!window.isLoggedIn) {\n          doSignUp();\n        } else {\n          $.getScript(DROPIN_SCRIPT_URL, handleDropinToken(dropinTokenCallback));\n        }\n      })\n      .on('click', prevSectionButton, () => {\n        selectSection(section.first);\n      });\n\n    $monetizationPopups.on('hide.bs.modal', () => {\n      prepareFirstSectionUI();\n      $openModal = null;\n    });\n  };\n\n  const defineSubscriptionStep = () => {\n    if (!isSubscriptionKind) return;\n\n    let $openModal = null;\n\n    const popupDialogSelector = '[data-selector=\"monetization-popup-dialog\"]';\n    const subscriptionFirstStepClass = '_subscription-first-step';\n    const $videoStep = $('[data-selector=\"monetization-popup-video-step\"]');\n    const goToSubscriptionStepSelector = '[data-selector=\"go-to-subscription-step-btn\"]';\n\n    const checkoutTextAttr = {\n      trial: 'data-trial-text',\n      noTrial: 'data-no-trial-text'\n    };\n    const $firstSection = $('[data-selector=\"1-subscription-step-monetization-popup\"]');\n    const $secondSection = $('[data-selector=\"2-subscription-step-monetization-popup\"]');\n\n    // subscription block (first step)\n    const planInput = '[data-selector=\"monetization-popup-subscription-plan-input\"]';\n    const selectedPlanInput = `${planInput}:checked`;\n    const goToPaymentStepBtn = '[data-selector=\"monetization-popup-go-to-checkout-btn\"]';\n    const $goToPaymentStepBtn = $(goToPaymentStepBtn);\n    const prevSectionButton = '[data-selector=\"monetization-popup-back-to-first-section-btn\"]';\n    const $prevSectionButton = $(prevSectionButton);\n\n    // coupon\n    const toggleCouponBlockBtn = '[data-selector=\"monetization-popup-toggle-coupon-block-btn\"]';\n    const $toggleCouponBlockBtn = $(toggleCouponBlockBtn);\n    const $couponBlock = $('[data-selector=\"monetization-popup-coupon-block\"]');\n    const $couponInputSection = $('[data-selector=\"monetization-popup-coupon-input-section\"]');\n    const couponForm = '[data-selector=\"monetization-popup-coupon-form\"]';\n    const $couponForm = $(couponForm);\n    const couponInput = '[data-selector=\"monetization-popup-enter-coupon-input\"]';\n    const $couponInput = $couponForm.find(couponInput);\n    const applyCoupon = '[data-selector=\"monetization-popup-apply-coupon-btn\"]';\n    const $applyCoupon = $couponForm.find(applyCoupon);\n    const $couponError = $('[data-selector=\"monetization-popup-coupon-error\"]');\n    const removeCoupon = '[data-selector=\"monetization-popup-remove-coupon-btn\"]';\n    const $removeCoupon = $couponForm.find(removeCoupon);\n    const $couponMessage = $couponForm.find('[data-selector=\"monetization-popup-coupon-message\"]');\n    const $licenseActivationCodeModal = $('#licenseActivationCode');\n    const couponBlockParams = {\n      activeClass: '_active',\n      emptyCouponClass: '_empty',\n      showCouponText: 'Enter coupon code',\n      hideCouponText: 'Hide coupon code'\n    };\n    let activeCoupon = null;\n    let amountOff = 0;\n\n    let isSpecialCouponApplied = false;\n    let specialCouponTrialDuration = null;\n    let removedSubscriptions = [];\n    const isEbloxAdded = false;\n\n\n    const doCheckForPreselectedPlan = () => {\n      $monetizationPopups.each((index, element) => {\n        const $popupPlanInput = $(element).find(planInput);\n        if ($popupPlanInput.is(':checked')) return;\n\n        $popupPlanInput.first().prop('checked', true);\n      });\n    };\n\n    const toggleIsCouponInputSection = () => {\n      const isCouponInputAvailable = $(selectedPlanInput).attr(planAttr.isCouponEnabled) === 'True';\n      isCouponInputAvailable ? $couponInputSection.show() : $couponInputSection.hide();\n    };\n\n    const setCheckoutBtnTitleNew = () => {\n      const checkoutBtnTitle = $(selectedPlanInput).attr(planAttr.submitText);\n      $goToPaymentStepBtn.text(checkoutBtnTitle);\n    };\n\n    const initFirstSectionUI = () => {\n      toggleIsCouponInputSection();\n      toggleApplyCouponBtn($couponInput, $applyCoupon, couponBlockParams);\n      setCheckoutBtnTitleNew();\n    };\n\n    const onSubscriptionStepLoad = () => {\n      doCheckForPreselectedPlan();\n      initFirstSectionUI();\n    };\n\n    const isTrialActive = () => {\n      if (!window.ableToGetTrial) return false;\n\n      if (isSpecialCouponApplied) return true;\n\n      const trialDuration = $openModal.find(selectedPlanInput).attr(planAttr.trialDuration);\n      const isTrialDisabled = parseInt(trialDuration) === 0;\n      if (isTrialDisabled) return false;\n\n      if (activeCoupon) return false;\n\n      return true;\n    };\n\n    const checkCouponApplicability = () => {\n      const planSlug = $(selectedPlanInput).attr(planAttr.slug);\n      const itemIndex = removedSubscriptions.indexOf(planSlug);\n      const isInvalid = removedSubscriptions[itemIndex];\n\n      if (isInvalid) {\n        $goToPaymentStepBtn.prop('disabled', true);\n        $couponError.show();\n      } else {\n        $goToPaymentStepBtn.prop('disabled', false);\n        $couponError.hide();\n      }\n\n      return !isInvalid;\n    };\n\n    const clearComponentVariables = () => {\n      activeCoupon = null;\n      amountOff = 0;\n      isSpecialCouponApplied = false;\n      specialCouponTrialDuration = null;\n      removedSubscriptions = [];\n    };\n\n    const prepareFirstSectionUI = () => {\n      const isSecondKindSubscriptionStep = $subscriptionStep.is(':visible');\n\n      if (isSecondKindSubscriptionStep) {\n        $openModal.find(popupDialogSelector).addClass(subscriptionFirstStepClass);\n      }\n\n      $secondSection.attr(PURCHASE_STEP_TRIGGERED_ATTRIBUTE, '');\n      $secondSection.hide();\n      $firstSection.show();\n      $subscriptionError.hide();\n      $submitPaymentBtn.hide();\n      $(braintreeDropinSelector).html('');\n      $planRenewCondition.text('');\n    };\n\n    const prepareSecondSectionUI = () => {\n      $openModal.find(popupDialogSelector).removeClass(subscriptionFirstStepClass);\n      $secondSection.attr(PURCHASE_STEP_TRIGGERED_ATTRIBUTE, 'true');\n      toggleButtonLoading($prevSectionButton, true);\n      $firstSection.hide();\n      $planDiscountRow.hide();\n      $planTrialRow.hide();\n      $planRenewCondition.hide();\n      $secondSection.show();\n    };\n\n    const selectSection = (sectionId) => {\n      if (sectionId === section.first) {\n        prepareFirstSectionUI();\n        // Remove an event listener set by braintree-creating function so as\n        // to prevent creating multiple event handlers in case of function call repeat\n        $submitPaymentBtn.off('click');\n        return;\n      }\n\n      if (sectionId === section.second) {\n        prepareSecondSectionUI();\n      }\n    };\n\n    const doSignUp = () => {\n      ga('send', 'event', 'Registration', 'Go', 'Parent');\n\n      $.ajax({\n        url: ENDPOINT.USER_PROFILE,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify({\n          account_type: ACCOUNT_TYPES.PARENT,\n          email: null,\n          need_to_login: true,\n          source: getUserSources('source'),\n          medium: getUserSources('medium'),\n          campaign: getUserSources('campaign'),\n          placement: getUserSources('placement')\n        })\n      }).then(() => {\n        window.isLoggedIn = true;\n        $.getScript(DROPIN_SCRIPT_URL, handleDropinToken(dropinTokenCallback));\n      }, (error) => {\n        toggleButtonLoading($goToPaymentStepBtn, false);\n        toastr.error(getError(error), '', {timeOut: 3000});\n      });\n    };\n\n    const dropinTokenCallback = () => {\n      toggleButtonLoading($goToPaymentStepBtn, false);\n      if (!$openModal) return;\n\n      prepareSecondStep();\n    };\n\n    const prepareSecondStep = () => {\n      $submitPaymentBtn.hide();\n      selectSection(section.second);\n\n      const offer = $openModal.find(selectedPlanInput);\n      const {\n        planPeriod,\n        planFullPrice,\n        planFormattedNewPrice,\n        planSlug,\n        planBackUrl,\n        planPeriodDisplay\n      } = getSelectedOfferDetails(offer, amountOff, planAttr);\n      const planTrialPeriod = (isSpecialCouponApplied && specialCouponTrialDuration)\n          ? specialCouponTrialDuration\n          : offer.attr(planAttr.trialDuration);\n      const isTrialEnabled = isTrialActive();\n\n      renderSelectedOfferDetails(\n        planPeriod,\n        planFullPrice,\n        planTrialPeriod,\n        planFormattedNewPrice,\n        planPeriodDisplay\n      );\n\n      const { totalPriceInCents, priceFor3DSecure } = getTotalPrices(isTrialEnabled);\n\n      setTotalPriceToUI(totalPriceInCents);\n\n      const $dropinContainer = $openModal.find(braintreeDropinSelector);\n      const dropinContainerId = '#' + $dropinContainer.attr('id');\n\n      initBraintreeDropin(\n        totalPriceInCents,\n        priceFor3DSecure,\n        planSlug,\n        planBackUrl,\n        isTrialEnabled,\n        dropinContainerId\n      );\n    };\n\n    const renderSelectedOfferDetails = (\n      planPeriod,\n      planFullPrice,\n      planTrialPeriod,\n      planFormattedNewPrice,\n      planPeriodDisplay\n    ) => {\n      $planPeriod.text(capitalize(planPeriodDisplay));\n      $planFullPrice.text(`${CURRENCY}${planFullPrice}`);\n\n      if (activeCoupon && amountOff > 0) {\n        $planDiscount.text(`${CURRENCY}${amountOff}`);\n        $planDiscountRow.show();\n      }\n\n      if (isTrialActive()) {\n        $planTrialPeriod.text(`${planTrialPeriod} days`);\n        $planTrialRow.show();\n        $planTotalPrice.text(`${CURRENCY}0.00`);\n\n        if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n          const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planFullPrice);\n          $planRenewCondition.html(text);\n        }\n\n        $planRenewCondition.show();\n      } else $planTotalPrice.text(`${CURRENCY}${planFormattedNewPrice}`);\n    };\n\n    const getTotalPrices = (isTrialEnabled) => {\n      const planFullPriceInCents = $openModal.find(selectedPlanInput).attr(planAttr.price);\n      const totalPrices = getTotalPricesInCents(\n        planFullPriceInCents,\n        isTrialEnabled,\n        isEbloxAdded,\n        activeCoupon,\n        amountOff,\n        shippingCountriesSelect\n      );\n\n      return totalPrices;\n    };\n\n    const setTotalPriceToUI = (totalPriceInCents) => {\n      const currencyPrice = getCurrencyPrice(totalPriceInCents);\n      $planTotalPrice.html(currencyPrice);\n    };\n\n    const initBraintreeDropin = (\n      totalPriceInCents,\n      priceFor3DSecure,\n      slug,\n      backUrl,\n      isTrialEnabled,\n      dropinContainerId\n    ) => {\n      if (braintree && $(dropinContainerId).length) {\n        const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n        const braintreeConf = braintreeDropinConfig(totalPriceInDollars, dropinContainerId);\n\n        const $dropinContainer = $(dropinContainerId);\n        const isDropinInited = !$dropinContainer.is(':empty');\n        if (isDropinInited) return;\n\n        braintree.dropin.create(braintreeConf,\n          function (createErr, instance) {\n            if (createErr) {\n              // An error in the create call is likely due to\n              // incorrect configuration values or network issues.\n              // An appropriate error will be shown in the UI.\n\n              // eslint-disable-next-line no-console\n              console.error('dropin create error: ', createErr);\n              return;\n            }\n\n            if (instance.isPaymentMethodRequestable()) {\n              // This will be true if you generated the client token\n              // with a customer ID and there is a saved payment method\n              // available to tokenize with that customer.\n              $submitPaymentBtn.show();\n            }\n\n            instance.on('paymentMethodRequestable', () => {\n              $submitPaymentBtn.show();\n              $subscriptionError.hide();\n            });\n\n            instance.on('noPaymentMethodRequestable', () => {\n              $submitPaymentBtn.hide();\n              $subscriptionError.hide();\n            });\n\n            instance.on('paymentOptionSelected', () => {\n              $subscriptionError.hide();\n              if (instance.isPaymentMethodRequestable()) {\n                $submitPaymentBtn.show();\n                return;\n              }\n              $submitPaymentBtn.hide();\n            });\n\n            toggleButtonLoading($prevSectionButton, false);\n            toggleButtonLoading($submitPaymentBtn, false);\n\n            $submitPaymentBtn.click(() => {\n              // To prevent bot spamming we use solution from\n              // https://www.thryv.com/blog/honeypot-technique/\n              const $hiddenInput = $(hiddenInputSelect);\n              const hiddenInputVal = $hiddenInput.val();\n              if (hiddenInputVal) return;\n\n              if (isEbloxAdded && !isFormValid($(shippingFormItemSelect))) return;\n\n              $subscriptionError.hide();\n              $prevSectionButton.hide();\n              toggleButtonLoading($submitPaymentBtn, true);\n              triggerAnalyticsSubmit(slug, totalPriceInDollars);\n\n              const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n              const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n              instance.requestPaymentMethod({\n                threeDSecure: threeDSecureConf\n              }, function (requestPaymentMethodErr, payload) {\n                if (requestPaymentMethodErr) {\n                  // eslint-disable-next-line no-console\n                  console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n                  $subscriptionError.text(requestPaymentMethodErr.message);\n                  $subscriptionError.show();\n                  $prevSectionButton.show();\n                  toggleButtonLoading($submitPaymentBtn, false);\n                  return;\n                }\n\n                if (isThreeDSecureCanceled(payload)) {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                  $subscriptionError.show();\n                  toggleButtonLoading($submitPaymentBtn, false);\n                  $prevSectionButton.show();\n                  return;\n                }\n\n                // Submit payload.nonce to your server\n                $.post(ENDPOINT.BUY_SUBSCRIPTION, {\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  discount_id: activeCoupon,\n                  source: 'main-flow-offer',\n                  trial_enabled: isTrialEnabled // always make trial if it's available\n                })\n                  .then((response) => {\n                    triggerGAEventOnCheckout();\n                    triggerAnalyticsOnCheckout(response, slug, backUrl);\n                  }, (errorResponse) => {\n                    instance.clearSelectedPaymentMethod();\n                    $subscriptionError.text('');\n                    $subscriptionError.append(getError(errorResponse));\n                    $subscriptionError.show();\n\n                    toggleButtonLoading($submitPaymentBtn, false);\n                  });\n              });\n            });\n          });\n      }\n    };\n\n    const triggerAnalyticsSubmit = () => {\n      ga('send', 'event', 'Registration_flow', 'SubmitPayment', 'step7');\n    };\n\n    const triggerGAEventOnCheckout = () => {\n      if (isTrialActive()) {\n        ga('send', 'event', 'Trial', 'Started', 'Parent');\n      } else {\n        ga('send', 'event', 'Subscription', 'Started', 'Parent');\n      }\n    };\n\n    const triggerAnalyticsOnCheckout = (response, slug, backUrl) => {\n      window.location = backUrl;\n    };\n\n    $(document)\n      .on('click', goToSubscriptionStepSelector, () => {\n        $openModal.find(popupDialogSelector).addClass(subscriptionFirstStepClass);\n        $videoStep.hide();\n        $openModal.find(monetizationPopupContentSelector).addClass(subscriptionStepClass);\n        $subscriptionStep.show();\n      })\n      // on change plan\n      .on('change', planInput, () => {\n        toggleIsCouponInputSection();\n        setCheckoutBtnTitleNew();\n        checkCouponApplicability();\n      })\n      // on change coupon input value\n      .on('input', couponInput, () => {\n        $couponInput.parsley().reset();\n        toggleApplyCouponBtn($couponInput, $applyCoupon, couponBlockParams);\n      })\n      // apply coupon\n      .on('click', applyCoupon, (e) => {\n        e.preventDefault();\n        // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n        const hiddenInputVal =\n          $('[data-selector=\"monetization-popup-coupon-check-special-input\"]').val();\n        if (hiddenInputVal) return;\n\n        if (!isFormValid($couponForm)) return;\n\n        const coupon = $couponInput.val().trim();\n        $couponError.hide();\n\n        if (coupon) {\n          toggleButtonLoading($applyCoupon, true);\n\n          // check is coupon a distributor code\n          doCheckIsCouponDistributorCode(coupon)\n            .then(() => {\n              toggleButtonLoading($applyCoupon, false);\n              $licenseActivationCodeModal.modal('show');\n            }, () => {\n              toggleButtonLoading($applyCoupon, false);\n            });\n\n          $.post(ENDPOINT.COUPON_VALIDATE, {\n            coupon: coupon\n          }).then((response) => {\n            toggleButtonLoading($applyCoupon, false);\n\n            activeCoupon = coupon;\n            amountOff = response.amount_off;\n            removedSubscriptions = response.exclude_subscriptions;\n            isSpecialCouponApplied = response.has_trial;\n            specialCouponTrialDuration = response.trial_duration;\n\n            const isCouponValid = checkCouponApplicability();\n            $applyCoupon.prop('disabled', false);\n            $couponInput.parsley().removeError('coupon');\n            $couponInput.prop('disabled', true);\n            $applyCoupon.hide();\n            $removeCoupon.show();\n            $couponMessage.html(response.description);\n            $couponMessage.show();\n\n            if (isCouponValid) ga('send', 'event', 'Button', 'CouponApplied', 'Parent');\n\n            setCheckoutBtnTitle($goToPaymentStepBtn, isTrialActive(), checkoutTextAttr);\n          }, (error) => {\n            toggleButtonLoading($applyCoupon, false);\n\n            activeCoupon = null;\n            $couponMessage.empty();\n            $couponMessage.hide();\n            const errorObject = JSON.parse(error.responseText);\n\n            if (errorObject.error) {\n              $couponInput.parsley().removeError('coupon');\n              $couponInput.parsley().addError('coupon', {\n                message: errorObject.error\n              });\n            }\n          });\n        }\n      })\n      // remove coupon applied to the selected plan\n      .on('click', removeCoupon, (e) => {\n        e.preventDefault();\n\n        clearComponentVariables();\n        $couponInput.parsley().reset();\n        $couponInput.prop('disabled', false);\n        $couponInput.val('');\n        $applyCoupon.show();\n        $removeCoupon.hide();\n        $couponMessage.empty();\n        $couponMessage.hide();\n        checkCouponApplicability();\n      })\n      // show/hide apply coupon form\n      .on('click', toggleCouponBlockBtn, (e) => {\n        e.preventDefault();\n        toggleCouponBlock($couponBlock, $toggleCouponBlockBtn, couponBlockParams);\n      })\n      // go to first step (select plan)\n      .on('click', prevSectionButton, () => {\n        selectSection(section.first);\n      })\n      // go to second step (checkout)\n      .on('click', goToPaymentStepBtn, (e) => {\n        e.preventDefault();\n        toggleButtonLoading($goToPaymentStepBtn, true);\n        if (!window.isLoggedIn) {\n          doSignUp();\n        } else {\n          $.getScript(DROPIN_SCRIPT_URL, handleDropinToken(dropinTokenCallback));\n        }\n      });\n\n    $monetizationPopups.on('show.bs.modal', (e) => {\n      $openModal = $(e.target).closest(monetizationPopupsSelector);\n    });\n    $monetizationPopups.on('hide.bs.modal', () => {\n      prepareFirstSectionUI();\n      $openModal = null;\n    });\n\n    onSubscriptionStepLoad();\n  };\n\n  defineFirstKind();\n  defineSubscriptionStep();\n});\n","import toastr from 'toastr/toastr';\n\nimport {\n  toggleButtonLoading,\n  storage\n} from '../utils';\n\nimport {\n  ENDPOINT,\n  SUBSCRIPTION_POPUP,\n  LOCAL_STORAGE_KEYS,\n  MAILING_LISTS\n} from '../config';\n\n$(document).ready( () => {\n\n  if (window.isLoggedIn) return;\n  if (storage.get(LOCAL_STORAGE_KEYS.IS_BLOG_SUBSCRIBED, 'true')) return;\n\n  const $blogSubscriptionPopup = $('[data-selector=\"blog-subscription-popup\"]');\n  if (!$blogSubscriptionPopup.length) return;\n\n  const $blogSubscriptionPopupSubscribe = $('[data-selector=\"blog-subscription-popup-subscribe\"]');\n  const $blogSubscriptionPopupSuccess = $('[data-selector=\"blog-subscription-popup-success\"]');\n  const blogSubscriptionPopupSubmit = '[data-selector=\"blog-subscription-popup-submit\"]';\n  const $blogSubscriptionPopupSubmit = $(blogSubscriptionPopupSubmit);\n  const $blogSubscriptionPopupForm = $('[data-selector=\"blog-subscription-popup-form\"]');\n  const $blogSubscriptionPopupInput = $('[data-selector=\"blog-subscription-popup-input\"]');\n\n  const currentDate = () => {\n    const d = new Date();\n    const currDate = d.getDate();\n    let currMonth = d.getMonth() + 1;\n    if (currMonth < 10) currMonth = '0' + currMonth;\n    const currYear = d.getFullYear();\n\n    return `${currYear}-${currMonth}-${currDate}`;\n  };\n\n  const setPopupDisplayParams = () => {\n    const popupLastDisplayDate = storage.get(LOCAL_STORAGE_KEYS.POPUP_LAST_DISPLAY_DATE);\n    const isPopupDisplayRepeat = popupLastDisplayDate === currentDate();\n\n    if (isPopupDisplayRepeat) {\n      const popupDisplayCounter =\n        storage.get(LOCAL_STORAGE_KEYS.SUBSCRIPTION_POPUP_DISPLAY_COUNTER);\n      const isPopupDisplayLimitReached = popupDisplayCounter >= SUBSCRIPTION_POPUP.DISPLAY_LIMIT;\n\n      if (isPopupDisplayLimitReached) {\n        return;\n      } else {\n        showPopup(SUBSCRIPTION_POPUP.SECOND_DISPLAY_DELAY, popupDisplayCounter);\n      }\n    } else {\n      showPopup(SUBSCRIPTION_POPUP.DEFAULT_DELAY);\n    }\n  };\n\n  const showPopup = (delay, counter = 0) => {\n    setTimeout( () => {\n      $blogSubscriptionPopup.modal('show');\n\n      storage.set(LOCAL_STORAGE_KEYS.POPUP_LAST_DISPLAY_DATE, currentDate());\n      storage.set(LOCAL_STORAGE_KEYS.SUBSCRIPTION_POPUP_DISPLAY_COUNTER, ++counter);\n    }, delay);\n  };\n\n  const submitSubscriptionForm = () => {\n    const blogSubscriptionPopupFormParsley = $blogSubscriptionPopupForm.parsley();\n\n    if (!blogSubscriptionPopupFormParsley.isValid()) {\n      blogSubscriptionPopupFormParsley.validate();\n      return;\n    }\n\n    ga('send', 'event', 'Blog_New_Subscriber', 'Subscribe Button', 'Click');\n\n    toggleButtonLoading($blogSubscriptionPopupSubmit, true);\n    const subscribeEmail = $blogSubscriptionPopupInput.val().trim();\n\n    $.ajax({\n      url: ENDPOINT.USER_SUBSCRIBE,\n      type: 'POST',\n      contentType: 'application/json',\n      data: JSON.stringify({\n        list_name: MAILING_LISTS.BLOG_POPUP,\n        email_address: subscribeEmail,\n        REF_LANDIN: window.location.href\n      })\n    })\n      .then(() => {\n        storage.set(LOCAL_STORAGE_KEYS.IS_BLOG_SUBSCRIBED, 'true');\n        toggleButtonLoading($blogSubscriptionPopupSubmit, false);\n        $blogSubscriptionPopupSubscribe.hide();\n        $blogSubscriptionPopupSuccess.show();\n      }, () => {\n        toggleButtonLoading($blogSubscriptionPopupSubmit, false);\n        $blogSubscriptionPopup.modal('hide');\n\n        // TODO add support for spanish lang\n        toastr.warning('Something went wrong. Please contact us.');\n      });\n  };\n\n  setPopupDisplayParams();\n\n  $(document)\n    .on('click', blogSubscriptionPopupSubmit, (e) => {\n      e.preventDefault();\n      submitSubscriptionForm();\n    });\n});\n","import {\n  braintreeDropinConfig,\n  deleteUrlParam,\n  getError,\n  isThreeDSecureCanceled,\n  processingPlurals,\n  threeDSecureConfig,\n  toggleButtonLoading,\n  toggleMarkWorksheetAsDone,\n  toggleAddWorksheetToFavorite,\n  dispatchCustomEvent,\n  storage,\n  getUrlParam,\n  deleteGetParamFromUrl,\n  redirectToCompleteOnlineInTGC,\n  getBrowser,\n  handleCompleteOnline,\n  redirectToTgcWithOpenWorksheetParams,\n  showSignUpModal\n} from '../utils';\nimport {\n  LOCAL_STORAGE_KEYS,\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  DROPIN_SCRIPT_URL,\n  ENDPOINT,\n  GET_PARAMS,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  MODALS,\n  WORKSHEET_ACTIONS,\n  WEBSITE_CUSTOM_EVENTS,\n  IS_DOWNLOAD_WORKSHEET_FLOW\n} from '../config';\nimport {\n  handleDropinToken\n} from '../payment/subscription.utils';\n\n\n$(document).ready(() => {\n  const $websitePlansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n  if (!$websitePlansModal) return;\n\n  let isSuccessStepShown = false;\n\n  const adFreeSubscription = '[data-url=\"ad-free-subscription\"]';\n\n  const freePlanBtn = '[data-selector=\"website-plans-modal-free-plan-btn\"]';\n  const planBtn = '[data-selector=\"website-plans-modal-go-to-checkout-btn\"]';\n\n  const braintreeDropin = '#website-plans-dropin-container';\n  let braintreeDropinInstance = {};\n\n  const $plansContainer = $('[data-selector=\"website-plans-modal-plans\"]');\n  const $purchaseContainer = $('[data-selector=\"website-plans-modal-purchase\"]');\n  const backToPlansBtn = '[data-selector=\"website-plans-modal-back-btn\"]';\n  const $backToPlansBtn = $(backToPlansBtn);\n\n  const $websitePlansModalTitle = $('[data-selector=\"website-plans-modal-title\"]');\n  const successModalTitle = 'Welcome to Kids Academy Premium!';\n  const defaultModalTitle = 'Try Kids Academy Premium!';\n  const limitModalTitle = 'You\\'ve reached your daily download limit!';\n  let isTwoPlansModal = false;\n\n  $websitePlansModalTitle.html(defaultModalTitle);\n  const isWebsitePlansModalShow = storage.get(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL, true);\n  if (isWebsitePlansModalShow === 'true') {\n    // show plans modal with 3 plans\n    $websitePlansModal.modal('show');\n    ga('send', 'event', 'Monetization3_Three_Plans', 'PopUp_Shown', 'Load');\n    isTwoPlansModal = false;\n  }\n\n  const goToPaymentBtn = '[data-selector=\"go-to-payment-btn\"]';\n  const $goToPaymentBtn = $(goToPaymentBtn);\n  const submitPaymentBtn = '[data-selector=\"website-plans-modal-pay-btn\"]';\n  const $submitPaymentBtn = $websitePlansModal.find(submitPaymentBtn);\n  const $subscriptionError = $websitePlansModal.find('[data-selector=\"subscription-error\"]');\n\n  const $buySubscriptionSuccessStep = $('[data-selector=\"buy-subscription-success\"]');\n  const $subtitle = $('[data-selector=\"website-plans-modal-subtitle\"]');\n\n  const trialDurationAttr = 'data-trial-duration';\n  const priceAttr = 'data-price';\n  const redirectAttr = 'data-redirect';\n  const slugAttr = 'data-slug';\n  const periodAttr = 'data-period';\n\n  const planPeriodDisplayAttr = 'data-period-display';\n\n  const successStepActive = '_success-step-active';\n\n  const $planPeriod = $websitePlansModal.find('[data-selector=\"plan-period-value\"]');\n  const $fullPrice = $websitePlansModal.find('[data-selector=\"plan-full-price-value\"]');\n  const $trialValue = $websitePlansModal.find('[data-selector=\"plan-trial-period-value\"]');\n  const $trialRow = $websitePlansModal.find('[data-selector=\"plan-trial-row\"]');\n  const $todayPrice = $websitePlansModal.find('[data-selector=\"plan-total-price-value\"]');\n  const $renewCondition = $websitePlansModal.find('[data-selector=\"plan-renew-condition\"]');\n  const twoPlansClassName = '_two-plans';\n\n  const $plansModalLoading = $('[data-selector=\"website-plans-modal-loading\"]');\n  const $plansModalContent = $('[data-selector=\"website-plans-modal-content\"]');\n\n  const toggleWebsitePlansLoading = (isLoading) => {\n    if (isLoading) {\n      $plansModalLoading.show();\n      $plansModalContent.css('height', '400px');\n    } else {\n      $plansModalLoading.hide();\n      $plansModalContent.attr('style', '');\n    }\n  };\n\n  const showWebsitePlansNoFreePopup = ({isLoading, isDefaultTitle}) => {\n    toggleWebsitePlansLoading(isLoading);\n\n    // show plans modal with 2 plans\n    $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n    $plansContainer.addClass(twoPlansClassName);\n    $subtitle.show();\n    $websitePlansModalTitle.html(limitModalTitle);\n    if (isDefaultTitle) $websitePlansModalTitle.html(defaultModalTitle);\n    isTwoPlansModal = true;\n\n    const worksheetAction = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION);\n    if (worksheetAction === WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC) {\n      $websitePlansModalTitle.html(defaultModalTitle);\n    }\n\n    ga('send', 'event', 'Monetization3_Two_Plans', 'PopUp_Shown', 'Load');\n\n    ga('send', 'event', 'Worksheets_Pay_Acc', 'PopUp shown', 'Click');\n  };\n\n  const onPageLoad = () => {\n    const isWebsitePlansModalShow = getUrlParam(GET_PARAMS.DOWNLOAD_POPUP_LIMIT) === 'true';\n\n    // show plans modal first step\n    if (window.isLoggedIn\n    && !window.HAS_PARENT_SUBSCRIPTION\n    && window.isWebsitePlans > 0\n    && isWebsitePlansModalShow) {\n      showWebsitePlansNoFreePopup();\n    }\n\n    // show plans modal purchase step\n    // eslint-disable-next-line max-len\n    const purchaseShow = storage.get(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE) === 'true';\n    if (purchaseShow\n     && !window.HAS_PARENT_SUBSCRIPTION\n     && window.isWebsitePlansExists > 0\n     && window.isLoggedIn\n     && window.isSignUpComplete) {\n\n      $websitePlansModalTitle.html(defaultModalTitle);\n      const planSlug = storage.get(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG);\n      showWebsitePlansNoFreePopup({isLoading: true, isDefaultTitle: true});\n\n      if (planSlug) {\n        const $button = $(`[data-slug=\"${planSlug}\"]`);\n        const planPrice = $button.attr(priceAttr);\n\n        $.getScript(DROPIN_SCRIPT_URL, function() {\n          // Скрипт загружен, даем 1.5 секунды на инициализацию window.braintree\n          setTimeout(() => {\n            // Проверка на всякий случай\n            if (!window.braintree) {\n              console.error('Braintree still not initialized after 1.5s');\n              goToPaymentErrorHandler($button);\n              return;\n            }\n\n            handleDropinToken(\n              () => {dropinTokenCallback(planPrice, planSlug, $button);},\n              (err) => goToPaymentErrorHandler($button, err)\n            );\n          }, 1500);\n        });\n      }\n    }\n  };\n\n  document\n    .addEventListener(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE, () => {\n      showWebsitePlansNoFreePopup();\n      storage.delete(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION);\n    }, false);\n\n  const renderSecondStepUI = ($button) => {\n    $plansContainer.hide();\n    $purchaseContainer.show();\n    $subtitle.hide();\n\n    toggleButtonLoading($button, false);\n\n    const price = $button.attr(priceAttr);\n    const trialDuration = parseInt($button.attr(trialDurationAttr));\n    const planPeriodDisplay = $button.attr(planPeriodDisplayAttr);\n    const planPeriod = $button.attr(periodAttr);\n\n    const planPriceString = (price / 100).toFixed(2);\n    /* eslint-disable max-len */\n    const trialDurationString = processingPlurals(trialDuration, `${trialDuration} day`, `${trialDuration} days`);\n    /* eslint-enable max-len */\n\n    $planPeriod.html(planPeriodDisplay);\n    $fullPrice.html(`${CURRENCY}${planPriceString}`);\n\n    if (trialDuration === 0) {\n      $trialRow.hide();\n      $todayPrice.html(`${CURRENCY}${planPriceString}`);\n    } else {\n      $trialRow.show();\n      $trialValue.html(trialDurationString);\n      $todayPrice.html(`${CURRENCY}0.00`);\n\n      if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n        const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planPriceString);\n        $renewCondition.html(text);\n      }\n    }\n  };\n\n  const initBraintreeDropin = (totalPriceInCents, priceFor3DSecure, slug, redirect) => {\n    if (braintree && $(braintreeDropin).length) {\n      const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n      const braintreeConf = braintreeDropinConfig(totalPriceInDollars, braintreeDropin);\n\n      braintree.dropin.create(braintreeConf,\n        function (createErr, instance) {\n        braintreeDropinInstance = instance;\n          if (createErr) {\n            // An error in the create call is likely due to\n            // incorrect configuration values or network issues.\n            // An appropriate error will be shown in the UI.\n\n            $subscriptionError.html(\n              `${createErr.message}\n               <br>${CUSTOM_MESSAGE.BRAINTREE_CREATE_ERROR}`\n            );\n            $subscriptionError.show();\n            toggleButtonLoading($goToPaymentBtn, false);\n            // eslint-disable-next-line no-console\n            console.error('dropin create error: ', createErr);\n            return;\n          }\n\n          toggleButtonLoading($backToPlansBtn, false);\n\n          if (instance.isPaymentMethodRequestable()) {\n            // This will be true if you generated the client token\n            // with a customer ID and there is a saved payment method\n            // available to tokenize with that customer.\n            $submitPaymentBtn.show();\n          }\n\n          instance.on('paymentMethodRequestable', () => {\n            $submitPaymentBtn.show();\n            $subscriptionError.hide();\n          });\n\n          instance.on('noPaymentMethodRequestable', () => {\n            $submitPaymentBtn.hide();\n            $subscriptionError.hide();\n          });\n\n          instance.on('paymentOptionSelected', () => {\n            $subscriptionError.hide();\n            $submitPaymentBtn.show();\n          });\n\n          toggleButtonLoading($goToPaymentBtn, false);\n          toggleButtonLoading($submitPaymentBtn, false);\n\n          $submitPaymentBtn.click(() => {\n            $backToPlansBtn.hide();\n            $subscriptionError.hide();\n            toggleButtonLoading($submitPaymentBtn, true);\n\n            const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n            const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n            instance.requestPaymentMethod({\n              threeDSecure: threeDSecureConf\n            }, function (requestPaymentMethodErr, payload) {\n              if (requestPaymentMethodErr) {\n                // eslint-disable-next-line no-console\n                console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n\n                $subscriptionError.text(requestPaymentMethodErr.message);\n                $subscriptionError.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                $backToPlansBtn.show();\n                return;\n              }\n\n              if (isThreeDSecureCanceled(payload)) {\n                instance.clearSelectedPaymentMethod();\n                $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                $subscriptionError.show();\n                $backToPlansBtn.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                return;\n              }\n\n              $.ajax({\n                url: ENDPOINT.BUY_SUBSCRIPTION,\n                type: 'POST',\n                contentType: 'application/json',\n                data: JSON.stringify({\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  source: 'website-offer'\n                })\n              })\n                .then(() => {\n                  ga('send', 'event', 'Worksheets_Pay_Acc', 'Subscribe_Button', 'Click');\n\n                  $purchaseContainer.hide();\n                  $websitePlansModalTitle.html(successModalTitle);\n                  $buySubscriptionSuccessStep.show();\n                  $(MODALS.WEBSITE_PLANS_MODAL).addClass(successStepActive);\n\n                  isSuccessStepShown = true;\n                  ga('send', 'event', 'Monetization3_Pay_OK', 'PopUp_Shown', 'Load');\n\n                  deleteUrlParam(GET_PARAMS.DOWNLOAD_POPUP_LIMIT);\n\n                  const actionType = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, true);\n                  const worksheetId = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ID, true);\n                  const worksheetSlug = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_SLUG, true);\n\n                  switch (actionType) {\n                    case WORKSHEET_ACTIONS.MARK_AS_DONE:\n                      toggleMarkWorksheetAsDone(worksheetId, true);\n                      break;\n                    case WORKSHEET_ACTIONS.ADD_TO_FAVORITE:\n                      toggleAddWorksheetToFavorite(worksheetId, true);\n                      break;\n                    case WORKSHEET_ACTIONS.INIT_WORKSHEET_DOWNLOAD:\n                      toggleMarkWorksheetAsDone(worksheetId, true);\n                      dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n                      break;\n                    case WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC:\n                      const goToOnlineWorksheet = () => {\n                        toggleMarkWorksheetAsDone(worksheetId, true, () => {\n                          toggleMarkWorksheetAsDone(worksheetId, true);\n                        });\n                        redirectToCompleteOnlineInTGC(worksheetSlug);\n                      };\n\n                      handleCompleteOnline(goToOnlineWorksheet);\n                      break;\n                  }\n\n                  deleteGetParamFromUrl(GET_PARAMS.DOWNLOAD_POPUP_LIMIT);\n\n                  if(redirect) window.location = redirect;\n                }, (errorResp) => {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text('');\n                  $subscriptionError.append(getError(errorResp));\n                  $subscriptionError.show();\n                  $backToPlansBtn.show();\n\n                  toggleButtonLoading($submitPaymentBtn, false);\n                });\n            });\n          });\n        });\n    }\n  };\n\n  const isTrialEnabled = ($button) => {\n    if (!window.ableToGetTrial) return false;\n\n    const trialDuration = $button.attr(trialDurationAttr);\n    const isTrialDisabled = parseInt(trialDuration) === 0;\n    if (isTrialDisabled) return false;\n\n    return true;\n  };\n\n  const getTotalPriceInCents = ($button) => {\n    const priceInCents = $button.attr(priceAttr);\n    let totalPriceInCents = priceInCents;\n    const priceFor3DSecure = priceInCents;\n\n    if (isTrialEnabled($button)) totalPriceInCents = 0;\n\n    return {totalPriceInCents, priceFor3DSecure};\n  };\n\n  const goToPaymentErrorHandler = ($button) => {\n    toastr.error('Something went wrong, please contact us!', '', {timeOut: 3000});\n    toggleButtonLoading($button, false);\n  };\n\n  const dropinTokenCallback = (planPrice, planSlug, $button) => {\n    storage.delete(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG);\n    storage.delete(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE);\n\n    if (!window.braintree) {\n      goToPaymentErrorHandler($button);\n      return;\n    }\n\n    const redirect = $button.attr(redirectAttr);\n\n    renderSecondStepUI($button);\n\n    const {totalPriceInCents, priceFor3DSecure} = getTotalPriceInCents($button);\n    initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, redirect);\n\n    toggleWebsitePlansLoading(false);\n  };\n\n  const onDismissPlansModal = () => {\n    const actionType = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, true);\n    const worksheetId = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ID, true);\n\n    switch (actionType) {\n      case WORKSHEET_ACTIONS.MARK_AS_DONE:\n        toggleMarkWorksheetAsDone(worksheetId, true);\n        break;\n      case WORKSHEET_ACTIONS.ADD_TO_FAVORITE:\n        toggleAddWorksheetToFavorite(worksheetId, true);\n        break;\n      case WORKSHEET_ACTIONS.INIT_WORKSHEET_DOWNLOAD:\n        toggleMarkWorksheetAsDone(worksheetId, true);\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n        break;\n    }\n\n    $websitePlansModal.modal('hide');\n  };\n\n  $(document)\n    .on('click', freePlanBtn, () => {\n      // KA-183\n      const $websitePlansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n      if ($websitePlansModal.hasClass(IS_DOWNLOAD_WORKSHEET_FLOW)) {\n        const worksheetId = $websitePlansModal.attr('data-worksheet-id');\n        const worksheetUtm = $websitePlansModal.attr('data-worksheet-utm') || '';\n\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n\n        $websitePlansModal.modal('hide');\n\n        const isSafariBrowser = getBrowser().toLowerCase().includes('safari');\n\n        if (isSafariBrowser) return;\n\n        redirectToTgcWithOpenWorksheetParams({\n          worksheetId: worksheetId,\n          utm: worksheetUtm,\n          skipOnboarding: false\n        });\n\n        return;\n      }\n\n      if ($(adFreeSubscription).length) {\n        ga('send', 'event', 'Add_free_subscriptions', 'Limited_access', 'Click');\n\n        if (document.referrer) window.location = document.referrer;\n        window.location = window.location.origin;\n        return;\n      }\n\n      onDismissPlansModal();\n      ga('send', 'event', 'Monetization3_Three_Plans', 'Free_Plan', 'Click');\n    })\n    .on('click', backToPlansBtn, () => {\n      $plansContainer.show();\n      $submitPaymentBtn.hide();\n      $purchaseContainer.hide();\n      $subscriptionError.hide();\n\n      braintreeDropinInstance.teardown((err) => {\n        // eslint-disable-next-line no-console\n        if (err) { console.error('An error occurred during teardown:', err); }\n        $(braintreeDropin).empty();\n      });\n    })\n    .on('click', planBtn, (e) => {\n      const $button = $(e.target);\n      const planPrice = $button.attr(priceAttr);\n      const planSlug = $button.attr(slugAttr);\n\n      toggleButtonLoading($button, true);\n      toggleButtonLoading($backToPlansBtn, true);\n\n      if (!$(adFreeSubscription).length) {\n        if (isTwoPlansModal) {\n          if (planPrice === '10000') {\n            ga('send', 'event', 'Monetization3_Two_Plans', 'Plan_10', 'Click');\n          } else {\n            ga('send', 'event', 'Monetization3_Two_Plans', 'Plan_1_99', 'Click');\n          }\n        } else {\n          if (planPrice === '10000') {\n            ga('send', 'event', 'Monetization3_Three_Plans', 'Plan_10', 'Click');\n          } else {\n            ga('send', 'event', 'Monetization3_Three_Plans', 'Plan_1_99', 'Click');\n          }\n        }\n      }\n\n      if (!window.isSignUpComplete) {\n        $(MODALS.WEBSITE_PLANS_MODAL).modal('hide');\n        showSignUpModal({planSlug});\n      } else {\n        $.getScript(DROPIN_SCRIPT_URL, function() {\n          // Скрипт загружен, даем 1.5 секунды на инициализацию window.braintree\n          setTimeout(() => {\n            // Проверка на всякий случай\n            if (!window.braintree) {\n              console.error('Braintree still not initialized after 1.5s');\n              goToPaymentErrorHandler($button);\n              return;\n            }\n\n            handleDropinToken(\n              () => {dropinTokenCallback(planPrice, planSlug, $button);},\n              (err) => goToPaymentErrorHandler($button, err)\n            );\n          }, 1500);\n        });\n      }\n    });\n\n    $(MODALS.WEBSITE_PLANS_MODAL).on('hidden.bs.modal', () => {\n      toggleButtonLoading($(planBtn), false);\n\n      // look at downloadWorksheetHandler at kidsacademy/kidsacademy/static/js/utils.js\n      // eslint-disable-next-line max-len\n      if ($(MODALS.WEBSITE_PLANS_MODAL).hasClass(IS_DOWNLOAD_WORKSHEET_FLOW) && $(MODALS.WEBSITE_PLANS_MODAL).hasClass(successStepActive)) {\n        $(MODALS.WEBSITE_PLANS_MODAL).removeClass(IS_DOWNLOAD_WORKSHEET_FLOW);\n\n        if (isSuccessStepShown && window.isSignUpComplete === false) {\n          $('[data-selector=\"learning-resources-registration-title\"]').html('Complete sign-up!');\n          $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n          $('[data-selector=\"social-btn-login\"]').hide();\n          $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n        }\n\n        return;\n      }\n\n      onDismissPlansModal();\n      $websitePlansModalTitle.html(defaultModalTitle);\n      $plansContainer.removeClass(twoPlansClassName);\n      $subtitle.hide();\n\n      if (isTwoPlansModal) {\n        ga('send', 'event', 'Monetization3_Two_Plans', 'Close', 'Click');\n      } else {\n        ga('send', 'event', 'Monetization3_Three_Plans', 'Close', 'Click');\n      }\n\n      if (isSuccessStepShown && window.isSignUpComplete === false) {\n        $('[data-selector=\"learning-resources-registration-title\"]').html('Complete sign-up!');\n        $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n        $('[data-selector=\"social-btn-login\"]').hide();\n        $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n        return;\n      }\n\n      if (isSuccessStepShown) {\n        document.location.reload();\n      }\n    });\n\n    onPageLoad();\n});\n","import {\n  braintreeDropinConfig,\n  getError,\n  isThreeDSecureCanceled,\n  processingPlurals,\n  threeDSecureConfig,\n  toggleButtonLoading,\n} from '../utils';\nimport {\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  DROPIN_SCRIPT_URL,\n  ENDPOINT,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  MODALS\n} from '../config';\nimport {\n  handleDropinToken\n} from '../payment/subscription.utils';\n\n\n$(document).ready(() => {\n  const $websitePlansModal = $(MODALS.WEBSITE_CR_TG_PLANS_MODAL);\n  if (!$websitePlansModal.length) return;\n\n  let isSuccessStepShown = false;\n\n  const planBtn = '[data-selector=\"free-worksheet-plans-modal-go-to-checkout-btn\"]';\n\n  const braintreeDropin = '#website-plans-cr-tg-dropin-container';\n  let braintreeDropinInstance = {};\n\n  const $plansContainer = $('[data-selector=\"website-plans-modal-plans\"]');\n  const $purchaseContainer = $('[data-selector=\"website-plans-modal-purchase\"]');\n  const backToPlansBtn = '[data-selector=\"website-plans-modal-back-btn\"]';\n  const $backToPlansBtn = $(backToPlansBtn);\n\n  const $websitePlansModalTitle = $('[data-selector=\"free-website-plans-modal-title\"]');\n\n  const goToPaymentBtn = '[data-selector=\"go-to-payment-btn\"]';\n  const $goToPaymentBtn = $(goToPaymentBtn);\n  const submitPaymentBtn = '[data-selector=\"website-plans-modal-pay-btn\"]';\n  const $submitPaymentBtn = $websitePlansModal.find(submitPaymentBtn);\n  const $subscriptionError = $websitePlansModal.find('[data-selector=\"subscription-error\"]');\n\n  const $buySubscriptionSuccessStep = $('[data-selector=\"buy-subscription-success\"]');\n  const $subtitle = $('[data-selector=\"website-plans-modal-subtitle\"]');\n  const successModalTitle = 'Welcome to Kids Academy Premium!';\n  const paymentStepTitle = 'Try Kids Academy Premium!';\n\n  const trialDurationAttr = 'data-trial-duration';\n  const priceAttr = 'data-price';\n  const redirectAttr = 'data-redirect';\n  const slugAttr = 'data-slug';\n  const periodAttr = 'data-period';\n\n  const planPeriodDisplayAttr = 'data-period-display';\n  const successStepActive = '_success-step-active';\n\n  const $planPeriod = $websitePlansModal.find('[data-selector=\"plan-period-value\"]');\n  const $fullPrice = $websitePlansModal.find('[data-selector=\"plan-full-price-value\"]');\n  const $trialValue = $websitePlansModal.find('[data-selector=\"plan-trial-period-value\"]');\n  const $trialRow = $websitePlansModal.find('[data-selector=\"plan-trial-row\"]');\n  const $todayPrice = $websitePlansModal.find('[data-selector=\"plan-total-price-value\"]');\n  const $renewCondition = $websitePlansModal.find('[data-selector=\"plan-renew-condition\"]');\n\n  const $plansModalLoading = $('[data-selector=\"website-plans-modal-loading\"]');\n  const $plansModalContent = $('[data-selector=\"website-plans-modal-content\"]');\n\n  const toggleWebsitePlansLoading = (isLoading) => {\n    if (isLoading) {\n      $plansModalLoading.show();\n      $plansModalContent.css('height', '400px');\n    } else {\n      $plansModalLoading.hide();\n      $plansModalContent.attr('style', '');\n    }\n  };\n\n  const renderSecondStepUI = ($button) => {\n    $plansContainer.hide();\n    $purchaseContainer.show();\n    $subtitle.hide();\n\n    toggleButtonLoading($button, false);\n    $websitePlansModalTitle.html(paymentStepTitle);\n\n    const price = $button.attr(priceAttr);\n    const trialDuration = parseInt($button.attr(trialDurationAttr));\n    const planPeriodDisplay = $button.attr(planPeriodDisplayAttr);\n    const planPeriod = $button.attr(periodAttr);\n\n    const planPriceString = (price / 100).toFixed(2);\n    /* eslint-disable max-len */\n    const trialDurationString = processingPlurals(trialDuration, `${trialDuration} day`, `${trialDuration} days`);\n    /* eslint-enable max-len */\n\n    $planPeriod.html(planPeriodDisplay);\n    $fullPrice.html(`${CURRENCY}${planPriceString}`);\n\n    if (trialDuration === 0) {\n      $trialRow.hide();\n      $todayPrice.html(`${CURRENCY}${planPriceString}`);\n    } else {\n      $trialRow.show();\n      $trialValue.html(trialDurationString);\n      $todayPrice.html(`${CURRENCY}0.00`);\n\n      if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n        const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planPriceString);\n        $renewCondition.html(text);\n      }\n    }\n  };\n\n  const initBraintreeDropin = (totalPriceInCents, priceFor3DSecure, slug) => {\n    if (braintree && $(braintreeDropin).length) {\n      const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n      const braintreeConf = braintreeDropinConfig(totalPriceInDollars, braintreeDropin);\n\n      braintree.dropin.create(braintreeConf,\n        function (createErr, instance) {\n        braintreeDropinInstance = instance;\n          if (createErr) {\n            // An error in the create call is likely due to\n            // incorrect configuration values or network issues.\n            // An appropriate error will be shown in the UI.\n\n            $subscriptionError.html(\n              `${createErr.message}\n               <br>${CUSTOM_MESSAGE.BRAINTREE_CREATE_ERROR}`\n            );\n            $subscriptionError.show();\n            toggleButtonLoading($goToPaymentBtn, false);\n            // eslint-disable-next-line no-console\n            console.error('dropin create error: ', createErr);\n            return;\n          }\n\n          toggleButtonLoading($backToPlansBtn, false);\n\n          if (instance.isPaymentMethodRequestable()) {\n            // This will be true if you generated the client token\n            // with a customer ID and there is a saved payment method\n            // available to tokenize with that customer.\n            $submitPaymentBtn.show();\n          }\n\n          instance.on('paymentMethodRequestable', () => {\n            $submitPaymentBtn.show();\n            $subscriptionError.hide();\n          });\n\n          instance.on('noPaymentMethodRequestable', () => {\n            $submitPaymentBtn.hide();\n            $subscriptionError.hide();\n          });\n\n          instance.on('paymentOptionSelected', () => {\n            $subscriptionError.hide();\n            $submitPaymentBtn.show();\n          });\n\n          toggleButtonLoading($goToPaymentBtn, false);\n          toggleButtonLoading($submitPaymentBtn, false);\n\n          $submitPaymentBtn.click(() => {\n            $backToPlansBtn.hide();\n            $subscriptionError.hide();\n            toggleButtonLoading($submitPaymentBtn, true);\n\n            const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n            const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n            instance.requestPaymentMethod({\n              threeDSecure: threeDSecureConf\n            }, function (requestPaymentMethodErr, payload) {\n              if (requestPaymentMethodErr) {\n                // eslint-disable-next-line no-console\n                console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n\n                $subscriptionError.text(requestPaymentMethodErr.message);\n                $subscriptionError.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                $backToPlansBtn.show();\n                return;\n              }\n\n              if (isThreeDSecureCanceled(payload)) {\n                instance.clearSelectedPaymentMethod();\n                $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                $subscriptionError.show();\n                $backToPlansBtn.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                return;\n              }\n\n              $.ajax({\n                url: ENDPOINT.BUY_SUBSCRIPTION,\n                type: 'POST',\n                contentType: 'application/json',\n                data: JSON.stringify({\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  source: 'website-offer'\n                })\n              })\n                .then(() => {\n                  $purchaseContainer.hide();\n                  $websitePlansModalTitle.html(successModalTitle);\n                  $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(successStepActive);\n                  $buySubscriptionSuccessStep.show();\n                  isSuccessStepShown = true;\n                }, (errorResp) => {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text('');\n                  $subscriptionError.append(getError(errorResp));\n                  $subscriptionError.show();\n                  $backToPlansBtn.show();\n\n                  toggleButtonLoading($submitPaymentBtn, false);\n                });\n            });\n          });\n        });\n    }\n  };\n\n  const isTrialEnabled = ($button) => {\n    if (!window.ableToGetTrial) return false;\n\n    const trialDuration = $button.attr(trialDurationAttr);\n    const isTrialDisabled = parseInt(trialDuration) === 0;\n    if (isTrialDisabled) return false;\n\n    return true;\n  };\n\n  const getTotalPriceInCents = ($button) => {\n    const priceInCents = $button.attr(priceAttr);\n    let totalPriceInCents = priceInCents;\n    const priceFor3DSecure = priceInCents;\n\n    if (isTrialEnabled($button)) totalPriceInCents = 0;\n\n    return {totalPriceInCents, priceFor3DSecure};\n  };\n\n  const goToPaymentErrorHandler = ($button) => {\n    toastr.error('Something went wrong, please contact us!', '', {timeOut: 3000});\n    toggleButtonLoading($button, false);\n  };\n\n  const dropinTokenCallback = (planPrice, planSlug, $button) => {\n    if (!window.braintree) {\n      goToPaymentErrorHandler($button);\n      return;\n    }\n\n    const redirect = $button.attr(redirectAttr);\n    renderSecondStepUI($button);\n\n    const {totalPriceInCents, priceFor3DSecure} = getTotalPriceInCents($button);\n    initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, redirect);\n\n    toggleWebsitePlansLoading(false);\n  };\n\n  $(document)\n    .on('click', backToPlansBtn, () => {\n      $plansContainer.show();\n      $submitPaymentBtn.hide();\n      $purchaseContainer.hide();\n      $subscriptionError.hide();\n\n      braintreeDropinInstance.teardown((err) => {\n        // eslint-disable-next-line no-console\n        if (err) { console.error('An error occurred during teardown:', err); }\n        $(braintreeDropin).empty();\n      });\n    })\n    .on('click', planBtn, (e) => {\n      const $button = $(e.target);\n      const planPrice = $button.attr(priceAttr);\n      const planSlug = $button.attr(slugAttr);\n\n      toggleButtonLoading($button, true);\n      toggleButtonLoading($backToPlansBtn, true);\n\n      $.getScript(\n        DROPIN_SCRIPT_URL,\n        // eslint-disable-next-line max-len\n        handleDropinToken(\n          () => {dropinTokenCallback(planPrice, planSlug, $button);},\n          goToPaymentErrorHandler\n        )\n      );\n    });\n\n    $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).on('hidden.bs.modal', () => {\n      if (isSuccessStepShown) document.location.reload();\n    });\n});\n","import {\n  initGoogleRecaptcha,\n  toggleButtonLoading,\n  getUserSources,\n  storage,\n  isWebGamesPage\n} from '../utils';\nimport {\n  ACCOUNT_TYPES,\n  ENDPOINT,\n  LOCAL_STORAGE_KEYS,\n  MODALS\n} from '../config';\n\n\n$(document).ready(function () {\n  const termsCheckbox = '[data-selector=\"terms-condition-checkbox\"]';\n  const formSubmitBtn = '[data-selector=\"modal-registration-form-submit-btn\"]';\n  const $formError = $('[data-selector=\"modal-registration-form-submit-error\"]');\n  const learningResourcesModal = '#learning-resources-registration';\n  const $registrationModalSubmitBtn = $(formSubmitBtn);\n  const $termsCheckbox = $(termsCheckbox);\n  const modalRegistrationFormEmailInput = '[data-selector=\"modal-registration-form-email-input\"]';\n  const websiteSignUpPswInput = '[data-selector=\"modal-registration-form-password-input\"]';\n  const loginSpecialInput = '[data-selector=\"login-special-input\"]';\n  const modalRegistrationForm = '[data-selector=\"modal-registration-form\"]';\n\n  let googleCaptchaToken = null;\n\n  const onRecaptchaExpire = () => {\n    googleCaptchaToken = null;\n  };\n\n  const getPayload = () => {\n    const email = $(modalRegistrationFormEmailInput).val();\n    const password = $(websiteSignUpPswInput).val();\n    const placement = storage.get(LOCAL_STORAGE_KEYS.PLACEMENT, true);\n\n    // TODO add captcha data to payload\n\n    const payload = {\n      account_type: ACCOUNT_TYPES.PARENT,\n      email: email,\n      password: password,\n      source: getUserSources('source'),\n      medium: getUserSources('medium'),\n      campaign: getUserSources('campaign'),\n      placement: placement ? placement : ''\n    };\n\n    const websiteAccountType = storage.get(LOCAL_STORAGE_KEYS.WEBSITE_ACCOUNT_TYPE, true);\n    if (websiteAccountType) payload.website_account_type = websiteAccountType;\n\n    return payload;\n  };\n\n  const loadRecaptcha = (isChecked) => {\n    initGoogleRecaptcha((token) => {\n      $formError.hide();\n      ga('send', 'event', 'Registration_flow', 'Capcha', 'step3');\n      googleCaptchaToken = token;\n      if (isChecked) {\n        $(formSubmitBtn).attr('disabled', !isChecked);\n      }\n    }, onRecaptchaExpire);\n  };\n\n  $(document)\n    // submit website sign up modal\n    .on('click', formSubmitBtn, function (e) {\n      e.preventDefault();\n\n      const $regForm = $(e.target).closest(learningResourcesModal).find(modalRegistrationForm);\n      const hiddenInputVal = $regForm.find(loginSpecialInput).val();\n      if (hiddenInputVal) return;\n\n      if (!isWebGamesPage() && !googleCaptchaToken) {\n        $formError.html('Please complete the CAPTCHA');\n        $formError.show();\n        return;\n      }\n\n      const parsleyForm = $regForm.parsley();\n\n      if (!parsleyForm.isValid() || !$termsCheckbox.is(':checked')) {\n        parsleyForm.validate();\n        return;\n      }\n\n      ga('send', 'event', 'Registration', 'EmailWorksheets', 'Parent');\n      toggleButtonLoading($registrationModalSubmitBtn, true);\n\n      $.ajax({\n        url: ENDPOINT.USER_PROFILE,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify(getPayload())\n      }).then(() => {\n          if (isWebGamesPage()) {\n            // only for web games page\n            storage.set(LOCAL_STORAGE_KEYS.SHOW_WEB_GAMES_SUBSCRIPTION_MODAL, true);\n          } else {\n            const websitePlanSlug = $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-slug');\n            const promoPlanSlug = $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-promo-plans-slug');\n            const isEbloxAdded = !!$(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-eblox');\n\n            if (promoPlanSlug && promoPlanSlug.length) {\n              storage.set(LOCAL_STORAGE_KEYS.SHOW_PROMO_PLANS_MODAL_PURCHASE, true);\n              storage.set(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_EBLOX_ADDED, isEbloxAdded);\n            } else if (websitePlanSlug && websitePlanSlug.length) {\n              storage.set(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE, true);\n              storage.set(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG, websitePlanSlug);\n            } else {\n              storage.set(LOCAL_STORAGE_KEYS.CHECK_AVAILABILITY_OF_PDF, true);\n            }\n          }\n\n          $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('hide');\n          // we need to reload the page to show correct user interface (user is logged in)\n          document.location.reload(true);\n        }, (errorResponse) => {\n          toggleButtonLoading($registrationModalSubmitBtn, false);\n          const error = JSON.parse(errorResponse.responseText);\n          $formError.html(error.error);\n          $formError.show();\n        });\n    })\n    .on('change', termsCheckbox, function () {\n      const isChecked = $(this).is(':checked');\n\n      if (isWebGamesPage()) {\n        $(formSubmitBtn).attr('disabled', !isChecked);\n      } else {\n        if (googleCaptchaToken) {$(formSubmitBtn).attr('disabled', !isChecked);}\n        loadRecaptcha(isChecked);\n      }\n    });\n});\n","import {ENDPOINT} from '../config.js';\nimport {\n  isFormValid,\n  toggleButtonLoading\n} from '../utils';\n\n$(document).ready(function () {\n  const storytimeTextAdsense = '[data-selector=\"storytime-text-adsense\"]';\n  const hidePlaceholderClass = '_no-placeholder';\n  const activeClassName = '_active';\n  const $socialIconRow = $('#social-icon-row');\n  const $socialTable = $('#social-table');\n  const $window = $(window);\n  const $story = $('#story');\n  const likeButton = '#like-set';\n  const commentContainer = '#comments-container';\n  const commentSent = '#comment-sent';\n  const commentSentHide = '#comment-sent-hide';\n  const commentTextarea = '#comment-text';\n  const commentNameInput = '#comment-name';\n  const commentSendButton = '#submit-comment';\n  const commentInputError = '#comment-invalid-name';\n  const commentTextareaError = '#comment-invalid-text';\n  const categoryDropDownContent = '#dropdown-content';\n  const categoryDropDownTitle = '#category-dropdown-title';\n  const categoryDropdown = '#category-dropdown';\n  const commentDeleteClass = '.comment-delete';\n  const likeCountSelector = '#like-count';\n  const likeSetSelector = '#like-set';\n\n  const categoryItem = '.story-time-top__item';\n  const categoryLink = '.story-time-top__item-text';\n\n  const commentsList = '.story-time-comments__comment-list';\n  const readMoreBtn = '.story-time-comments__read-more-btn';\n\n  let requestSent = false;\n\n  const toggleCategoryDropdown = function (event) {\n    const $dropDown = $(event.target).closest(categoryDropdown);\n    const $dropDownContent = $dropDown.find(categoryDropDownContent);\n    const activeClass = '_active';\n\n    if ($dropDown.hasClass(activeClass)) {\n      $dropDown.removeClass(activeClass);\n      $dropDownContent.hide();\n    } else {\n      $dropDownContent.show();\n      $dropDown.addClass(activeClass);\n    }\n  };\n\n  const loadComments = function () {\n    if (!window.storytimeId) return;\n\n    $.ajax({\n      url: '/api/storytime/' + window.storytimeId + '/comments/',\n      type: 'GET',\n      headers: {Accept: 'text/html'},\n      success: function (commentsHTML) {\n        const $commentsContainer = $(commentContainer);\n        $commentsContainer.html(commentsHTML);\n\n        $(commentNameInput).focus(function () {\n          $(commentInputError).hide();\n        });\n\n        $(commentTextarea).focus(function () {\n          $(commentTextareaError).hide();\n        });\n      }\n    });\n  };\n\n  const changeLikesForArticle = (e) => {\n    const $currentBlogPost = $(e.target).closest('div[data-id]');\n    const $likeButton = $currentBlogPost.find(likeSetSelector);\n    const $likeCount = $currentBlogPost.find(likeCountSelector);\n    const storyTimeId = $currentBlogPost.attr('data-id');\n    const activeCassName = '_active';\n\n    if (!requestSent) {\n      requestSent = true;\n\n      if ($likeButton.hasClass(activeCassName)) {\n        // remove like\n        $likeButton.removeClass(activeCassName);\n        $likeCount.text(parseInt($likeCount.html()) - 1);\n      } else {\n        // add like\n        $likeButton.addClass(activeCassName);\n        $likeCount.text(parseInt($likeCount.html()) + 1);\n      }\n\n      //update like state on server\n      $.ajax({\n        url: ENDPOINT.BLOG_LIKE,\n        type: 'POST',\n        data: JSON.stringify({storytime: storyTimeId}),\n        contentType: 'application/json',\n        success: () => {\n          requestSent = false;\n        },\n        error: () => {\n          requestSent = false;\n        }\n      });\n    }\n  };\n\n  const setSocialButtonsPosition = function () {\n    if ($socialTable && $socialTable.length && $story && $story.length) {\n      $socialTable.css('left', $story.offset().left / 2 - 5);\n    }\n  };\n\n  const setSocialButtonsVisibility = function () {\n    if (!$socialIconRow.offset()) return;\n\n    const scroll = $window.scrollTop();\n    const windowHeight = window.innerHeight;\n    const socialIconPosition = $socialIconRow.offset().top;\n\n    if (scroll === 0 || (scroll + windowHeight - 100) > socialIconPosition) {\n      if ($socialTable.is(':visible')) {\n        $socialTable.fadeOut();\n      }\n    } else {\n      if ($socialTable.is(':hidden')) {\n        $socialTable.fadeIn();\n      }\n    }\n  };\n\n  const setActiveCategoryToDropdownTitle = function () {\n    const selectedCategory = $(categoryDropDownContent)\n                              .find(categoryItem + '.' + activeClassName)\n                              .find(categoryLink);\n    $(categoryDropDownTitle).text(selectedCategory.text());\n  };\n\n  const hideAdsenseForLoggedInUsers = () => {\n    if (window.isLoggedIn || window.hasValidParentSubscription) $(storytimeTextAdsense).hide();\n  };\n\n  // Init\n  loadComments();\n  setSocialButtonsPosition();\n  setActiveCategoryToDropdownTitle();\n  hideAdsenseForLoggedInUsers();\n\n  // Bind events\n  $(document)\n    // submit comment\n    .on('click', commentSendButton, (e) => {\n      e.preventDefault();\n      const $commentForm = $('[data-selector=\"comment-form\"]');\n      if (!isFormValid($commentForm)) return;\n\n      const name = $.trim($(commentNameInput).val());\n      const commentText = $.trim($(commentTextarea).val());\n\n      toggleButtonLoading($(commentSendButton), true);\n\n      $.ajax({\n        url: ENDPOINT.COMMENT,\n        type: 'POST',\n        data: JSON.stringify({\n          author_name: name,\n          storytime: window.storytimeId,\n          text: commentText\n        }),\n        contentType: 'application/json',\n        success: function () {\n          toggleButtonLoading($(commentSendButton), false);\n          $(commentSent).fadeIn();\n\n          $(commentNameInput).val('');\n          $(commentTextarea).val('');\n          $(commentTextarea).removeClass(hidePlaceholderClass);\n        },\n        error: function () {\n          toggleButtonLoading($(commentSendButton), false);\n          // TODO add error notification if needed\n        }\n      });\n    })\n\n    // delete comment\n    .on('click', commentDeleteClass, function (e) {\n      e.preventDefault();\n\n      const $target = e.currentTarget;\n      const commentId = $($target.closest('.comment')).data('id');\n\n      $.ajax({\n        url: '/api/comment/' + commentId + '/',\n        type: 'DELETE',\n        success: function () {\n          loadComments();\n        }\n      });\n    })\n\n    // hide comment sent info block\n    .on('click', commentSentHide, function (e) {\n      e.preventDefault();\n      const $commentSentBlock = $(e.target).closest(commentSent);\n\n      $commentSentBlock.fadeOut('slow', function () {\n        loadComments();\n      });\n    })\n\n    // on comment change\n    .on('change', commentTextarea, function (e) {\n      const $textarea = $(e.target);\n      const textareaVal = $textarea.val();\n\n      if (textareaVal.length) {\n        $textarea.addClass(hidePlaceholderClass);\n      } else {\n        $textarea.removeClass(hidePlaceholderClass);\n      }\n    })\n\n    // like click\n    .on('click', likeButton, function (e) {\n      changeLikesForArticle(e);\n    })\n\n    // toggle dropdown\n    .on('click', categoryDropDownTitle, function (e) {\n      toggleCategoryDropdown(e);\n    })\n\n    // read more btn click\n    .on('click', readMoreBtn, function (e) {\n      $(commentsList).removeClass('_more-than-two');\n      $(e.target).hide();\n    });\n\n  $window\n    .scroll(function () {\n      setSocialButtonsVisibility();\n    })\n    .resize(function () {\n      setSocialButtonsPosition();\n      setSocialButtonsVisibility();\n    });\n});\n","import {URLS, WEBSITE_CUSTOM_EVENTS} from '../config';\n\nconst MOBILE_WIDTH = 710;\n\n$(document).ready(function () {\n  const activeClassName = '_active';\n  const openClassName = '_open';\n  const dataSlugAttr = 'data-slug';\n\n  // spinner\n  const spinnerSelector = '[data-selector=\"spinner\"]';\n\n  // title\n  const metaTitleAttr = 'data-meta-title';\n  const mainTitleAttr = 'data-title';\n  const mainTitleElem = '[data-selector=\"main-title\"]';\n\n  // categories\n  const categoryItemBtn = '[data-selector=\"category-toggle\"]';\n  const categoryItem = '[data-selector=\"categories-list-item\"]';\n  const articleContainer = '[data-selector=\"article-container\"]';\n  const relatedLinksContainer = '[data-selector=\"related-links\"]';\n  const breadcrumbs = '[data-selector=\"material-details-breadcrumbs\"]';\n\n  const buildUrl = ($currentCategoryItem) => {\n    let url = URLS.LEARNING_MATERIALS;\n    const subSubjectSlug = $currentCategoryItem.attr(dataSlugAttr);\n    url += subSubjectSlug + '/';\n    return url;\n  };\n\n  const updateArticle = (url, updatePageUrl=true) => {\n    $(spinnerSelector).show();\n\n    $.ajax({\n      type: 'GET',\n      url: url,\n      contentType: 'text/partial_html',\n      data: {\n        // The `partial` parameter helps to build a unique URL for a partial page.\n        // The server will use the URL to fetch a page from the cache.\n        partial: true,\n      },\n      cache: true,\n      success: (data) => {\n        const $newPage = $('<div>').html(data);\n\n        const newBreadcrumbs = $newPage.find(breadcrumbs).html();\n        const $breadcrumbs = $(breadcrumbs);\n        $breadcrumbs.html(newBreadcrumbs);\n\n        const newArticle = $newPage.find(articleContainer).html();\n        const $article = $(articleContainer);\n        $article.html(newArticle);\n\n        const $relatedLinks = $(relatedLinksContainer);\n        const newRelatedLinks = $newPage.find(relatedLinksContainer);\n        if ($relatedLinks.length) {\n          $relatedLinks.html(newRelatedLinks.html());\n          $relatedLinks.show();\n        } else {\n          $relatedLinks.hide();\n        }\n\n        // update main and page titles\n        const newTitle = $newPage.find(articleContainer).attr(mainTitleAttr);\n        const newMetaTitle = $newPage.find(articleContainer).attr(metaTitleAttr);\n\n        $(mainTitleElem).html(newTitle); // update title\n        document.title = newMetaTitle; // update page title\n\n        document.dispatchEvent(new CustomEvent(WEBSITE_CUSTOM_EVENTS.RELOAD_HTMX_ADS_BANNERS));\n\n        $(spinnerSelector).hide();\n      },\n      error: () => $(spinnerSelector).hide()\n    });\n\n    if (updatePageUrl && window.history && typeof window.history.pushState === 'function') {\n      window.history.pushState(null, null, url);\n    }\n  };\n\n  // Bind events\n  $(document)\n    // arrow click\n    .on('click', categoryItemBtn, (e) => {\n      e.stopPropagation();\n\n      const deviceWidth = (window.innerWidth > 0) ? window.innerWidth : screen.width;\n      if (deviceWidth > MOBILE_WIDTH) return;\n\n      const $currentCategoryItem = $(e.currentTarget).closest(categoryItem);\n\n      if ($currentCategoryItem.hasClass(openClassName)) {\n        const $innerItems = $currentCategoryItem.find(categoryItem);\n        $innerItems.removeClass(openClassName);\n\n        $currentCategoryItem.children(categoryItem).removeClass(openClassName);\n        $currentCategoryItem.removeClass(openClassName);\n        return;\n      }\n\n      $currentCategoryItem.children(categoryItem).addClass(openClassName);\n      $currentCategoryItem.addClass(openClassName);\n    })\n    // category title click\n    .on('click', categoryItem, (e) => {\n      e.stopPropagation();\n\n      const $currentCategoryItem = $(e.currentTarget);\n      $(categoryItem).removeClass(activeClassName);\n\n      $currentCategoryItem.addClass(activeClassName);\n      $currentCategoryItem.parents(categoryItem).addClass(activeClassName);\n\n      const url = buildUrl($currentCategoryItem);\n      updateArticle(url);\n    });\n});\n","// vendor\nimport 'bootstrap';\nimport 'parsleyjs';\nimport 'slick-carousel/slick/slick';\n\nimport objectFitImages from 'object-fit-images';\nobjectFitImages($('[data-selector=\"ofi-image\"]'));\n\n// components\nimport './components/parsley-validators';\nimport './components/contact-us-form';\nimport './components/main';\nimport './components/menu';\nimport './components/homepage';\nimport './components/header';\nimport './components/main-banner';\nimport './components/main-banner-timer';\nimport './components/go-to-top-btn';\nimport './components/my-messages';\nimport './components/monetization-popup';\nimport './components/blog-subscription-popup';\nimport './components/website-plans-modal';\nimport './components/website-cr-tg-plans-modal';\nimport './components/website-sign-up-modal';\n\nimport './website/storytime';\nimport './website/storytime-advertising';\nimport './website/material-detail';\n"],"sourceRoot":""}