{"version":3,"sources":["webpack://kidsacademy/./static/js/config.js","webpack://kidsacademy/./static/js/utils.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/hasOwnProperty shorthand","webpack://kidsacademy/./static/js/kidsacademy-com-static.js"],"names":["ENDPOINT","USER_PROFILE","USER_RESET_PASSWORD","BUY_SUBSCRIPTION_APP","BUY_SUBSCRIPTION","UPGRADE_SUBSCRIPTION","COUPON_VALIDATE","UPDATE_PAYMENT_METHOD","BUY_PRODUCT","GET_BRAINTREE_TOKEN","GIFT_CODE_VALIDATE","GIFT_CODE_REDEEM","GIFT_PURCHASE","USER_LOGIN","WAIT_LIST","SET_PASSWORD","TEACHER_SIGN_UP","KID_PROFILE_CREATE","LMS_SUBSCRIPTION","FEEDBACK","FEEDBACK_V2","BLOG_LIKE","COMMENT","WORKSHEET_RATING","QUIZ_RATING","INVOICE_PAYMENT","GET_KIDS_REPORT_DATA","offset","GET_KID_REPORT_DATA","params","kidId","GET_COURSE_DETAILS","courseId","MARK_AS_DONE","id","ADD_TO_FAVORITE","CANCEL_SUBSCRIPTION","merchant","window","NOTIFICATION_MARK_AS_READ","USER_SUBSCRIBE","WORKSHEETS_PDF_STATUS","WORKSHEET_CHECK_STATUS","GET_SKILLED_WORKSHEET","CLASSROOM_JOIN","CLASSROOM_CODE_CHECK","CLASSROOM_CREATE","CLASSROOM_START","CLASSROOM_UPDATE","CLASSROOM_ADD_ACTIVITY","classroomId","WEBSITE_WORKSHEETS","WEBSITE_DRILLS","GET_SUBJECTS_FOR_FILTER","ADD_TASK_TO_SUBJECT","WEBSITE_VIDEOS","WEBSITE_GAMES","WEBSITE_ONLINE_GAMES","WEBSITE_QUIZZES","WEBSITE_LESSONS","SUBJECT_CATEGORIES_MAPPING","SUBJECTS_GRADE_EXCLUDING","LOCAL_STORAGE_KEYS","PASSED_SKILLED_WORKSHEET_LIST","WORKSHEET_LAST_DOWNLOAD_DATE","WORKSHEET_TRY_DOWNLOADED_COUNT","WORKSHEET_ID","WORKSHEET_SLUG","WORKSHEET_TO_DOWNLOAD_DATA","WORKSHEET_ACTION","PLACEMENT","WEBSITE_ACCOUNT_TYPE","PARTNER_COUPON_CODE","IS_UI_TESTING_MODE","IS_SOUND_MUTED","IS_BLOG_SUBSCRIBED","POPUP_LAST_DISPLAY_DATE","SUBSCRIPTION_POPUP_DISPLAY_COUNTER","IS_SHOW_STEP_PROGRESS_BAR","SHOW_WEBSITE_PLANS_MODAL","SHOW_WEBSITE_PLANS_MODAL_PURCHASE","SHOW_PROMO_PLANS_MODAL_PURCHASE","WEBSITE_PLANS_MODAL_PLAN_SLUG","WEBSITE_PLANS_MODAL_EBLOX_ADDED","CHECK_AVAILABILITY_OF_PDF","SHOW_WEB_GAMES_SUBSCRIPTION_MODAL","JOIN_KIDSACADEMY_FOR_FREE","JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE","GAME","COMPLETE_ONLINE","DEFAULT","MAILING_LISTS","BLOG_POPUP","TGC_LIST","MODALS","FREE_SIGN_UP_FOR_DOWNLOAD_W","ACCOUNT_TYPE_MODAL","WEBSITE_SIGN_UP_MODAL","WEBSITE_QUESTION_FAVOURITES_MODAL","WEBSITE_PLANS_MODAL","WEBSITE_CR_TG_PLANS_MODAL","WEBSITE_QUESTION_DONE_MODAL","MONETIZATION","ADDS_FREE","WORKSHEET_IMAGE_POPUP","WORKSHEET_IMAGE_POPUP_ID","QUIZ_IMAGE_POPUP","TGC_SUBSCRIPTION_POPUP","WEB_TGC_PAYWALL_POPUP","WEB_APP_PAYWALL_POPUP","WEB_TGC_LOGIN_MODAL","WEB_TGC_RESET_PASSWORD_MODAL","TGC_PAYWALL_MODAL_NEW","JOIN_KA_FOR_FREE_MODAL","SUBSCRIPTION_PROMO_MODAL","toggleButtonLoading","$button","isLoading","callback","length","width","attr","html","css","style","removeProperty","storage","set","key","value","localStorage","setItem","get","isDelete","result","getItem","removeItem","delete","showJoinKidsAcademyModal","type","title","checkStorage","teacherQueryParams","parentQueryParams","target","JSON","parse","analyticEventType","ga","$joinKidsacademyForFreeModal","$","teacher","parent","student","initialTeacherHref","initialParentHref","initialTarget","on","modal","stringify","isFinished","$container","listener","previousToast","toastId","toastType","toastr","clear","$toastElement","clearOptions","options","getOptions","getContainer","clearToast","toastsToClear","children","i","clearContainer","remove","removeToast","error","message","optionsOverride","notify","iconClass","iconClasses","info","subscribe","success","version","warning","create","containerId","addClass","positionClass","appendTo","createContainer","force","hideMethod","duration","hideDuration","easing","hideEasing","complete","publish","args","map","extend","preventDuplicates","shouldExit","intervalId","$titleElement","$messageElement","$progressElement","$closeElement","closeHtml","progressBar","hideEta","maxHideTime","response","state","startTime","Date","toastClass","suffix","escapeHtml","append","titleClass","setTitle","messageClass","setMessage","closeButton","closeClass","prepend","progressClass","rtl","newestOnTop","ariaValue","setAria","hide","showMethod","showDuration","showEasing","onShown","timeOut","setTimeout","hideToast","parseFloat","getTime","setInterval","updateProgress","closeOnHover","hover","stickAround","delayedHideToast","onclick","tapToDismiss","click","event","stopPropagation","undefined","cancelBubble","onCloseClick","debug","console","log","source","replace","override","method","closeMethod","closeDuration","closeEasing","clearTimeout","onHidden","endTime","extendedTimeOut","stop","percentage","is","module","exports","jQuery","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdD","Error","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","call","document","ready","$tgcSubscriptionPopup","$tgcSubscriptionPopupSubscribe","$tgcSubscriptionPopupSuccess","tgcSubscriptionPopupSubmit","$tgcSubscriptionPopupSubmit","$tgcSubscriptionPopupForm","$tgcSubscriptionPopupInput","e","preventDefault","tgcSubscriptionPopupFormParsley","parsley","isValid","validate","subscribeEmail","val","trim","ajax","url","contentType","data","list_name","email_address","REF_LANDIN","location","href","then","show","submitSubscriptionForm"],"mappings":"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","file":"kidsacademy-com-static_js.js","sourcesContent":["/* 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","/*\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](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__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","import {storage, toggleButtonLoading, showJoinKidsAcademyModal} from './utils';\nimport {ENDPOINT, LOCAL_STORAGE_KEYS, MAILING_LISTS} from './config';\nimport toastr from 'toastr';\n\nconst $document = $(document);\n\n$document.ready(function () {\n  const $kaComStaticPage = $('[data-selector=\"kidsacademy-com-static\"]');\n  if (!$kaComStaticPage.length) return;\n\n  const showPopupBtn = '[data-selector=\"show-popup\"]';\n  const $tgcSubscriptionPopup = $('[data-selector=\"tgc-subscription-popup\"]');\n  const $tgcSubscriptionPopupSubscribe = $('[data-selector=\"tgc-subscription-popup-subscribe\"]');\n  const $tgcSubscriptionPopupSuccess = $('[data-selector=\"tgc-subscription-popup-success\"]');\n  const tgcSubscriptionPopupSubmit = '[data-selector=\"tgc-subscription-popup-submit\"]';\n  const $tgcSubscriptionPopupSubmit = $(tgcSubscriptionPopupSubmit);\n  const $tgcSubscriptionPopupForm = $('[data-selector=\"tgc-subscription-popup-form\"]');\n  const $tgcSubscriptionPopupInput = $('[data-selector=\"tgc-subscription-popup-input\"]');\n\n  setTimeout(() => {\n    showJoinKidsAcademyModal({});\n  }, 4000);\n\n  const submitSubscriptionForm = () => {\n    const tgcSubscriptionPopupFormParsley = $tgcSubscriptionPopupForm.parsley();\n\n    if (!tgcSubscriptionPopupFormParsley.isValid()) {\n      tgcSubscriptionPopupFormParsley.validate();\n      return;\n    }\n\n    toggleButtonLoading($tgcSubscriptionPopupSubmit, true);\n    const subscribeEmail = $tgcSubscriptionPopupInput.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.TGC_LIST,\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($tgcSubscriptionPopupSubmit, false);\n        $tgcSubscriptionPopupSubscribe.hide();\n        $tgcSubscriptionPopupSuccess.show();\n      }, () => {\n        toggleButtonLoading($tgcSubscriptionPopupSubmit, false);\n        $tgcSubscriptionPopup.modal('hide');\n\n        // TODO add support for spanish lang\n        toastr.warning('Something went wrong. Please contact us.');\n      });\n  };\n\n  $(document)\n    .on('click', tgcSubscriptionPopupSubmit, (e) => {\n      e.preventDefault();\n      submitSubscriptionForm();\n    })\n    .on('click', showPopupBtn, () => {\n      $tgcSubscriptionPopup.modal('show');\n    });\n});\n"],"sourceRoot":""}