{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/knockout/build/output/knockout-latest.js","webpack:///./app/js/base.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/js/APIHelper.js","webpack:///./node_modules/knockout-postbox/build/knockout-postbox.js","webpack:///./app/components/organisms/shopping-cart/shopping-cart-storage.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/filter.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./app/js/analytics-ecommerce.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./app/js/constants/authorization.js","webpack:///./node_modules/lodash/find.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_copyObject.js","webpack:///./node_modules/lodash/keysIn.js","webpack:///./app/js/utils/text.js","webpack:///./node_modules/lodash/_baseIteratee.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/_baseEach.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./app/components/knockout/calculator/calculator-tracking.js","webpack:///./app/js/constants/hours.js","webpack:///./app/js/utils/storage.js","webpack:///./node_modules/lodash/_baseFor.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_cloneArrayBuffer.js","webpack:///./node_modules/lodash/_getPrototype.js","webpack:///./app/js/search-postal-code.js","webpack:///./node_modules/lodash/cloneDeep.js","webpack:///./node_modules/lodash/_castFunction.js","webpack:///./app/components/atoms/form/form-dropdown/form-dropdown.js","webpack:///./app/js/utils/hash-helper.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/_baseForOwn.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_isStrictComparable.js","webpack:///./node_modules/lodash/_matchesStrictComparable.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/hasIn.js","webpack:///./node_modules/lodash/_assignMergeValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_cloneBuffer.js","webpack:///./node_modules/lodash/_cloneTypedArray.js","webpack:///./node_modules/lodash/_copyArray.js","webpack:///./node_modules/lodash/_initCloneObject.js","webpack:///./node_modules/lodash/_safeGet.js","webpack:///./node_modules/lodash/_createAssigner.js","webpack:///./node_modules/lodash/_baseRest.js","webpack:///./node_modules/lodash/_overRest.js","webpack:///./node_modules/lodash/_setToString.js","webpack:///./node_modules/lodash/_isIterateeCall.js","webpack:///./app/js/constants/registration-page-type.js","webpack:///./node_modules/lodash/_createAggregator.js","webpack:///./node_modules/lodash/_arrayEach.js","webpack:///./node_modules/lodash/_getSymbolsIn.js","webpack:///./node_modules/lodash/_baseFlatten.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./app/js/constants/membership-type.js","webpack:///./app/js/constants/article-access-level.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./app/components/knockout/media-tile/media-tile.js","webpack:///./node_modules/enquire.js/src/index.js","webpack:///./node_modules/enquire.js/src/Util.js","webpack:///./app/js/newmain.js","webpack:///./app/js/vendor/bootstrap-datepicker.min.js","webpack:///./app/js/vendor/jquery-ui.min.js","webpack:///./app/js/polyfills/array.prototype.find.js","webpack:///./app/js/polyfills/array.prototype.some.js","webpack:///./node_modules/scrolltofixed/jquery-scrolltofixed.js","webpack:///./node_modules/dotdotdot/src/js/jquery.dotdotdot.js","webpack:///./node_modules/jquery.cookie/jquery.cookie.js","webpack:///./node_modules/jquery.easing/jquery.easing.js","webpack:///./node_modules/selectize/dist/js/selectize.js","webpack:///./node_modules/sifter/sifter.js","webpack:///./node_modules/microplugin/src/microplugin.js","webpack:///./app/components/knockout/register-components.js","webpack:///./app/components/knockout/calculator/calculator.js","webpack:///./node_modules/lodash/_baseFilter.js","webpack:///./node_modules/lodash/_createBaseFor.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/_createBaseEach.js","webpack:///./node_modules/lodash/_baseMatches.js","webpack:///./node_modules/lodash/_baseIsMatch.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///./node_modules/lodash/_getMatchData.js","webpack:///./node_modules/lodash/_baseMatchesProperty.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_baseHasIn.js","webpack:///./node_modules/lodash/_hasPath.js","webpack:///./node_modules/lodash/property.js","webpack:///./node_modules/lodash/_baseProperty.js","webpack:///./node_modules/lodash/_basePropertyDeep.js","webpack:///./node_modules/lodash/merge.js","webpack:///./node_modules/lodash/_baseMerge.js","webpack:///./node_modules/lodash/_baseMergeDeep.js","webpack:///./node_modules/lodash/_baseCreate.js","webpack:///./node_modules/lodash/isArrayLikeObject.js","webpack:///./node_modules/lodash/isPlainObject.js","webpack:///./node_modules/lodash/toPlainObject.js","webpack:///./node_modules/lodash/_baseKeysIn.js","webpack:///./node_modules/lodash/_nativeKeysIn.js","webpack:///./node_modules/lodash/_apply.js","webpack:///./node_modules/lodash/_baseSetToString.js","webpack:///./node_modules/lodash/constant.js","webpack:///./node_modules/lodash/_shortOut.js","webpack:///./app/components/knockout/calculator/calculator.template","webpack:///./app/components/knockout/calculator/oppdateringskalkulator/oppdateringskalkulator.js","webpack:///./app/components/knockout/calculator/oppdateringskalkulator/oppdateringskalkulator.template","webpack:///./app/components/knockout/calculator/manglerkurs/manglerkurs.js","webpack:///./app/components/knockout/calculator/manglerkurs/manglerkurs.template","webpack:///./app/components/knockout/calculator/timestatus/timestatus.js","webpack:///./app/components/knockout/calculator/timestatus/timestatus.template","webpack:///./app/components/knockout/calculator/bar/calculator-bar.js","webpack:///./app/components/knockout/calculator/bar/calculator-util.js","webpack:///./app/components/knockout/calculator/bar/calculator-bar.template","webpack:///./app/components/knockout/calculator/courses/calculator-course.js","webpack:///./app/components/knockout/calculator/courses/calculator-course.template","webpack:///./app/components/knockout/calculator/courses/calculator-courses.js","webpack:///./app/components/knockout/calculator/courses/calculator-courses.template","webpack:///./app/components/knockout/calculator/extended/extended-course.js","webpack:///./node_modules/lodash/unescape.js","webpack:///./node_modules/lodash/_unescapeHtmlChar.js","webpack:///./node_modules/lodash/_basePropertyOf.js","webpack:///./app/components/knockout/calculator/extended/extended-course.template","webpack:///./app/components/knockout/calculator/extended/extended-leave.js","webpack:///./app/components/knockout/calculator/extended/extended-leave.template","webpack:///./app/components/knockout/calculator/notifier/notifier.js","webpack:///./app/components/knockout/calculator/notifier/notifier.template","webpack:///./app/components/knockout/calculator/timeunit/timeunit.js","webpack:///./app/components/knockout/calculator/timeunit/timeunit.template","webpack:///./app/components/knockout/calculator/timeunits/timeunits.js","webpack:///./app/js/constants/hours-color.js","webpack:///./app/components/knockout/calculator/timeunits/timeunits.template","webpack:///./app/components/knockout/calculator/year/calculator-year.js","webpack:///./app/components/knockout/calculator/year/calculator-year.template","webpack:///./app/components/knockout/calculator/years/calculator-years.js","webpack:///./node_modules/lodash/assign.js","webpack:///./app/components/knockout/calculator/years/calculator-years.template","webpack:///./app/components/knockout/registration/pages/registration-pages.js","webpack:///./app/components/knockout/registration/pages/registration-pages.template","webpack:///./app/components/knockout/registration/page/registration-personal-info.js","webpack:///./app/components/knockout/registration/page/registration-personal-info.template","webpack:///./app/components/knockout/registration/page/registration-info-member.js","webpack:///./app/components/knockout/registration/page/registration-info-member.template","webpack:///./app/components/knockout/registration/page/registration-employer.js","webpack:///./app/components/knockout/registration/page/registration-employer.template","webpack:///./app/components/knockout/registration/page/registration-confirmation.js","webpack:///./app/js/constants/signup-type.js","webpack:///./node_modules/lodash/partition.js","webpack:///./node_modules/lodash/_arrayAggregator.js","webpack:///./node_modules/lodash/_baseAggregator.js","webpack:///./app/components/knockout/registration/page/registration-confirmation.template","webpack:///./app/components/knockout/registration/page/registration-enroll.js","webpack:///./app/components/knockout/registration/page/registration-enroll.template","webpack:///./app/components/knockout/registration/page/registration-agency.js","webpack:///./app/components/knockout/registration/page/registration-agency.template","webpack:///./app/components/knockout/registration/page/registration-insurance.js","webpack:///./app/components/knockout/registration/page/registration-insurance.template","webpack:///./app/components/knockout/registration/page/registration-end.js","webpack:///./app/components/knockout/registration/page/registration-end.template","webpack:///./app/components/knockout/external-course/external-course.js","webpack:///./node_modules/lodash/_baseClone.js","webpack:///./node_modules/lodash/_baseAssign.js","webpack:///./node_modules/lodash/_baseAssignIn.js","webpack:///./node_modules/lodash/_copySymbols.js","webpack:///./node_modules/lodash/_copySymbolsIn.js","webpack:///./node_modules/lodash/_getAllKeysIn.js","webpack:///./node_modules/lodash/_initCloneArray.js","webpack:///./node_modules/lodash/_initCloneByTag.js","webpack:///./node_modules/lodash/_cloneDataView.js","webpack:///./node_modules/lodash/_cloneRegExp.js","webpack:///./node_modules/lodash/_cloneSymbol.js","webpack:///./node_modules/lodash/isMap.js","webpack:///./node_modules/lodash/_baseIsMap.js","webpack:///./node_modules/lodash/isSet.js","webpack:///./node_modules/lodash/_baseIsSet.js","webpack:///./app/components/knockout/external-course/external-course.template","webpack:///./app/components/knockout/course-instructors/course-instructors.js","webpack:///./node_modules/lodash/sortBy.js","webpack:///./node_modules/lodash/_isFlattenable.js","webpack:///./node_modules/lodash/_baseOrderBy.js","webpack:///./node_modules/lodash/_baseMap.js","webpack:///./node_modules/lodash/_baseSortBy.js","webpack:///./node_modules/lodash/_compareMultiple.js","webpack:///./node_modules/lodash/_compareAscending.js","webpack:///./node_modules/lodash/groupBy.js","webpack:///./node_modules/lodash/forIn.js","webpack:///./app/js/utils/chunk.js","webpack:///./app/components/knockout/course-instructors/course-instructors.template","webpack:///./app/components/knockout/bureau-employee-list/employee-list/employee-list.js","webpack:///./app/components/knockout/bureau-employee-list/employee-list/employee-list.template","webpack:///./app/components/knockout/bureau-employee-list/add-employee-modal/add-employee-modal.js","webpack:///./app/components/knockout/bureau-employee-list/add-employee-modal/add-employee-modal.template","webpack:///./app/components/knockout/bureau-insurances/bureau-insurances.js","webpack:///./node_modules/lodash/_createFind.js","webpack:///./node_modules/lodash/findIndex.js","webpack:///./node_modules/lodash/_baseFindIndex.js","webpack:///./node_modules/lodash/toInteger.js","webpack:///./node_modules/lodash/toFinite.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./app/components/knockout/bureau-insurances/bureau-insurances.template","webpack:///./app/components/knockout/calendar/calendar.js","webpack:///./app/components/knockout/calendar/calendar.template","webpack:///./app/components/knockout/find-accountants/find-accountants.js","webpack:///./app/components/knockout/find-accountants/find-accountants.template","webpack:///./app/components/knockout/pagination/pagination.js","webpack:///./app/components/knockout/pagination/pagination.template","webpack:///./app/components/knockout/add-participant-box/add-participant-box.js","webpack:///./app/components/knockout/add-participant-box/add-participant-box.template","webpack:///./app/components/knockout/choose-agency/choose-agency.js","webpack:///./app/components/knockout/choose-agency/choose-agency.template","webpack:///./app/components/knockout/create-employee/create-employee.js","webpack:///./app/components/knockout/create-employee/create-employee.template","webpack:///./app/components/knockout/article-block/article-block.js","webpack:///./app/components/knockout/article-block/article-block.template","webpack:///./app/components/knockout/article-block-full/article-block-full.js","webpack:///./app/components/knockout/article-block-full/article-block-full.template","webpack:///./app/components/knockout/blocks/product-block/product-block.js","webpack:///./app/components/knockout/blocks/product-block/product-block.template","webpack:///./app/components/knockout/course-block/course-block.js","webpack:///./app/components/knockout/course-block/course-block.template","webpack:///./app/components/knockout/marketing-teaser-tile/marketing-teaser-tile.js","webpack:///./app/components/knockout/marketing-teaser-tile/marketing-teaser-tile.template","webpack:///./app/components/knockout/form/form-checkbox-list/form-checkbox-list.js","webpack:///./app/components/knockout/form/form-checkbox-list/form-checkbox-list.template","webpack:///./app/components/knockout/form/form-multiselect/form-multiselect.js","webpack:///./node_modules/lodash/each.js","webpack:///./node_modules/lodash/forEach.js","webpack:///./app/components/knockout/form/form-multiselect/form-multiselect.template","webpack:///./app/components/knockout/form/form-multiselect-simple/form-multiselect-simple.js","webpack:///./app/components/knockout/form/form-multiselect-simple/form-multiselect-simple.template","webpack:///./app/components/knockout/form/form-selected-list/form-selected-list.js","webpack:///./app/components/knockout/form/form-selected-list/form-selected-list.template","webpack:///./app/components/knockout/admin-tool-user-management/admin-tool-user-management.js","webpack:///./app/components/knockout/admin-tool-user-management/admin-tool-user-management.template","webpack:///./app/components/knockout/file-list/file-list.js","webpack:///./app/components/knockout/file-list/file-list.template","webpack:///./app/components/knockout/message/message.js","webpack:///./app/components/knockout/message/message.template","webpack:///./app/components/knockout/my-courses-page/my-courses-page.js","webpack:///./app/components/knockout/my-courses-page/my-courses-page.template","webpack:///./app/components/knockout/my-courses-page/my-planned-courses/my-planned-courses.js","webpack:///./app/components/knockout/my-courses-page/my-planned-courses/my-planned-courses.template","webpack:///./app/components/knockout/my-courses-page/my-completed-courses/my-completed-courses.js","webpack:///./node_modules/lodash/forOwn.js","webpack:///./app/components/knockout/my-courses-page/my-completed-courses/my-completed-courses.template","webpack:///./app/components/knockout/my-courses-page/courses-list-item/courses-list-item.js","webpack:///./app/js/utils/date.js","webpack:///./app/components/knockout/my-courses-page/courses-list-item/courses-list-item.template","webpack:///./app/components/knockout/course-registration-overview/course-registration-overview.js","webpack:///./app/components/knockout/course-registration-overview/course-registration-overview.template","webpack:///./app/components/knockout/course-registration-overview/course-overview-list/course-overview-list.js","webpack:///./app/components/knockout/course-registration-overview/course-overview-list/course-overview-list.template","webpack:///./app/components/knockout/course-registration-participants/course-registration-participants.js","webpack:///./app/components/knockout/course-registration-participants/course-registration-participants.template","webpack:///./app/components/knockout/course-registration-participants/course-participants-list/course-participants-list.js","webpack:///./app/components/knockout/course-registration-participants/course-participants-list/course-participants-list.template","webpack:///./app/components/knockout/course-registration-participants/participant-details-modal/participant-details-modal.js","webpack:///./app/components/knockout/course-registration-participants/participant-details-modal/participant-details-modal.template","webpack:///./app/components/knockout/course-registration-participants/course-registration-feedback-box/course-registration-feedback-box.js","webpack:///./app/components/knockout/course-registration-participants/course-registration-feedback-box/course-registration-feedback-box.template","webpack:///./app/components/knockout/course-registration-participants/sequence-details-block/sequence-details-block.js","webpack:///./app/components/knockout/course-registration-participants/sequence-details-block/sequence-details-block.template","webpack:///./app/components/knockout/report-page/report-page.js","webpack:///./app/components/knockout/report-page/report-page.template","webpack:///./app/components/knockout/search-block/search-block.js","webpack:///./app/components/knockout/search-block/search-block.template","webpack:///./app/js/knockout-components.js","webpack:///./app/components/knockout/article-list/index.js","webpack:///./app/components/knockout/article-list/article-list.js","webpack:///./app/js/utils/scrolling-element.js","webpack:///./node_modules/lodash/now.js","webpack:///./app/components/knockout/article-list/article-list.template","webpack:///./app/components/knockout/checkout-course-list/index.js","webpack:///./app/components/knockout/checkout-course-list/checkout-course-list.js","webpack:///./app/components/knockout/checkout-course-list/checkout-course-list.template","webpack:///./app/components/knockout/checkout-overview-page/index.js","webpack:///./app/components/knockout/checkout-overview-page/checkout-overview-page.js","webpack:///./node_modules/lodash/pick.js","webpack:///./node_modules/lodash/_basePick.js","webpack:///./node_modules/lodash/_basePickBy.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_flatRest.js","webpack:///./node_modules/lodash/flatten.js","webpack:///./app/components/knockout/checkout-overview-page/checkout-overview-page.template","webpack:///./app/components/knockout/choose-payer/index.js","webpack:///./app/components/knockout/choose-payer/choose-payer.js","webpack:///./app/components/knockout/choose-payer/choose-payer.template","webpack:///./app/components/knockout/date-time-list/index.js","webpack:///./app/components/knockout/date-time-list/date-time-list.js","webpack:///./app/components/knockout/date-time-list/date-time-list.template","webpack:///./app/components/knockout/digital-signing-order-form/index.js","webpack:///./app/components/knockout/digital-signing-order-form/digital-signing-order-form.js","webpack:///./app/components/knockout/digital-signing-order-form/digital-signing-order-form.template","webpack:///./app/components/knockout/happenings/index.js","webpack:///./app/components/knockout/happenings/happening-list-item.js","webpack:///./app/components/knockout/happenings/happening-list-item.template","webpack:///./app/components/knockout/loader/index.js","webpack:///./app/components/knockout/loader/loader.js","webpack:///./app/components/knockout/loader/loader.template","webpack:///./app/components/knockout/media-tile/index.js","webpack:///./app/components/knockout/media-tile/media-list-item.template","webpack:///./app/components/knockout/media-tile/media-tile.template","webpack:///./app/components/knockout/my-courses-block/index.js","webpack:///./app/components/knockout/my-courses-block/my-courses-block.js","webpack:///./app/components/knockout/my-courses-block/my-courses-block.template","webpack:///./app/components/knockout/purchase-button/index.js","webpack:///./app/components/knockout/purchase-button/purchase-button.js","webpack:///./app/components/knockout/purchase-button/purchase-button.template","webpack:///./app/components/knockout/quick-purchase-button/index.js","webpack:///./app/components/knockout/quick-purchase-button/quick-purchase-button.js","webpack:///./app/components/knockout/quick-purchase-button/quick-purchase-button.template","webpack:///./app/components/knockout/read-more-popup/index.js","webpack:///./app/components/knockout/read-more-popup/read-more-popup.js","webpack:///./app/components/knockout/read-more-popup/read-more-popup.template","webpack:///./app/components/knockout/register-continue-button/index.js","webpack:///./app/components/knockout/register-continue-button/register-continue-button.js","webpack:///./app/components/knockout/register-continue-button/register-continue-button.template","webpack:///./app/components/knockout/shopping-cart/index.js","webpack:///./app/components/knockout/shopping-cart/shopping-cart.js","webpack:///./app/components/knockout/shopping-cart/shopping-cart.template","webpack:///./app/components/knockout/submit-button/index.js","webpack:///./app/components/knockout/submit-button/submit-button.js","webpack:///./app/components/knockout/submit-button/submit-button.template","webpack:///./app/components/knockout/tooltip/index.js","webpack:///./app/components/knockout/tooltip/tooltip.js","webpack:///./app/components/knockout/tooltip/tooltip.template","webpack:///./app/components/knockout/video-course-receipt/index.js","webpack:///./app/components/knockout/video-course-receipt/video-course-receipt.js","webpack:///./app/components/knockout/video-course-receipt/video-course-receipt.template","webpack:///./app/components/knockout/youtube-video/index.js","webpack:///./app/components/knockout/youtube-video/youtube-video.js","webpack:///./app/components/knockout/youtube-video/youtube-video.template","webpack:///./app/components/knockout/binding-handlers.js","webpack:///./app/components/knockout/extenders.js","webpack:///./app/js/atomic-components.js","webpack:///./app/components/molecules/accordion-list/accordion-list.js","webpack:///./app/components/molecules/accordion-list/parent-accordion-list.js","webpack:///./app/components/atoms/form/form-select/form-select.js","webpack:///./app/components/molecules/frontpage-campaign/frontpage-campaign.js","webpack:///./app/components/molecules/list-view-toggler/list-view-toggler.js","webpack:///./app/components/molecules/filter-course/filter-course.js","webpack:///./app/components/molecules/course/course-row-location/course-row-location.js","webpack:///./app/components/molecules/discipline-interests/discipline-interests.js","webpack:///./app/components/molecules/block/block-unauthorized/block-unauthorized.js","webpack:///./app/components/molecules/profile/profile-employer/profile-employer.js","webpack:///./app/components/molecules/profile/profile-header/profile-header.js","webpack:///./app/components/molecules/profile/profile-bureau-subscriptions/profile-bureau-subscriptions.js","webpack:///./app/components/molecules/profile/profile-bureau-insurances-changes/profile-bureau-insurances-changes.js","webpack:///./app/components/molecules/search-postal-code/search-postal-code.js","webpack:///./app/components/molecules/filter-links/filter-links.js","webpack:///./app/components/molecules/course/course-facts-block/course-facts-block.js","webpack:///./app/components/molecules/user-profile-block/user-profile-block.js","webpack:///./app/components/organisms/footer/footer.js","webpack:///./app/components/organisms/header/header-main/header-main.js","webpack:///./app/components/organisms/header/header-sub/header-sub.js","webpack:///./app/components/organisms/course/course-list/course-list.js","webpack:///./app/components/organisms/course/courses-list/courses-list.js","webpack:///./app/components/organisms/course/course-instructors/course-instructors.js","webpack:///./app/components/organisms/tiny-course-list/tiny-course-list.js","webpack:///./app/components/organisms/block-list/block-list.js","webpack:///./app/components/organisms/block-article/block-article.js","webpack:///./app/components/organisms/block-magazine/block-magazine.js","webpack:///./app/components/organisms/sponsors/sponsors-block/sponsors-block.js","webpack:///./app/components/organisms/disciplines/disciplines-article-search/disciplines-article-search.js","webpack:///./app/components/organisms/calculator-simple/calculator-simple.js","webpack:///./node_modules/enquire.js/src/MediaQueryDispatch.js","webpack:///./node_modules/enquire.js/src/MediaQuery.js","webpack:///./node_modules/enquire.js/src/QueryHandler.js","webpack:///./app/components/organisms/calculator/calculator.js","webpack:///./app/components/organisms/find-accountants/find-accountants.js","webpack:///./app/components/organisms/profile/profile-bureau/profile-bureau-employee-list/profile-bureau-employee-list.js","webpack:///./app/components/organisms/overview-page/overview-page.js","webpack:///./app/components/organisms/search-content/search-content.js","webpack:///./app/components/organisms/login-reset/login-reset.js","webpack:///./app/components/organisms/admin-tool-user-management/admin-tool-user-management.js","webpack:///./app/components/organisms/organization-employee-list/organization-employee-list.js","webpack:///./app/components/organisms/registration-page/registration-page.js","webpack:///./app/components/organisms/marketing-teaser-tile/marketing-teaser-tile.js","webpack:///./app/components/organisms/my-courses-page/my-courses-page.js","webpack:///./app/components/organisms/course-registration-overview/course-registration-overview.js","webpack:///./app/components/organisms/course-registration-participants/course-registration-participants.js","webpack:///./app/components/organisms/report-page/report-page.js","webpack:///./app/components/organisms/search-block/search-block.js","webpack:///./app/components/organisms/happenings/happening-list.js","webpack:///./app/components/molecules/filter-happening/filter-happening.js","webpack:///./app/components/organisms/call-to-action/call-to-action.js","webpack:///./app/js/toggle-content.js","webpack:///./app/js/enquire-init.js","webpack:///./app/js/error-tracking.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","A","this","eval","w","document","R","navigator","v","jQuery","H","JSON","S","T","K","a","W","X","b","setTimeout","Y","clearTimeout","Z","pc","gb","qc","aa","ba","qd","e","ra","Qb","mb","uc","I","J","da","$c","Ja","gd","f","g","split","length","L","version","options","deferUpdates","useOnlyNativeEvents","foreachHidesDestroyed","__proto__","match","q","D","Na","join","Array","h","k","test","userAgent","MouseEvents","propertychange","createElement","getElementsByTagName","innerHTML","Jc","indexOf","Lb","Pa","splice","shift","wc","push","Mb","jb","Nb","apply","bc","Ba","extend","setPrototypeOf","Ab","P","Ga","Tb","firstChild","removeNode","Yb","la","ownerDocument","appendChild","oa","Ca","cloneNode","va","Xc","nodeType","parentNode","insertBefore","Ua","nextSibling","Zc","setAttribute","selected","Db","trim","toString","replace","Ud","substring","vd","contains","compareDocumentPosition","Sb","documentElement","kd","tagName","toLowerCase","Ac","onError","arguments","Gc","B","addEventListener","attachEvent","Error","za","detachEvent","on","Fb","type","createEvent","dispatchEvent","initEvent","click","fireEvent","trigger","O","Eb","classList","className","baseVal","Bb","createTextNode","data","Ad","Yc","charCodeAt","mergeAttributes","style","zoom","wd","width","Pd","Da","Zd","$d","Lc","concat","Nd","parse","Function","hc","stringify","Od","params","includeFields","action","display","method","body","submitter","submit","removeChild","slice","Date","getTime","set","Ub","clear","cleanExternalData","childNodes","1","8","9","yb","u","G","cleanData","thead","tbody","tfoot","tr","td","th","option","optgroup","ua","parseHTML","clean","parentWindow","defaultView","innerShiv","lastChild","Md","parentElement","fc","html","Xb","Math","random","bd","cd","Uc","nodeValue","ud","Kd","na","scheduler","MutationObserver","observe","attributes","toggle","onreadystatechange","zb","cancel","resetForTesting","Sd","Ta","throttle","throttleEvaluation","$","read","write","rateLimit","timeout","Hb","ub","deferred","notifySubscribers","notify","equalityComparer","undefined","number","string","ic","lc","mc","Ib","fb","Jb","qb","U","change","sc","subscribe","hb","Qa","Gb","Wa","ed","xc","end","ob","Dd","nc","sb","rc","Bd","fn","Qc","pop","cc","od","pd","fd","qa","Va","Ya","Yd","ta","ya","xa","F","Ma","Za","Nc","Ha","trackArrayChanges","remove","removeAll","destroy","_destroy","destroyAll","sorted","sort","reversed","reverse","zc","Pc","Pb","Ob","sparse","status","index","min","max","Kc","nb","ka","Xa","ha","sa","rb","jc","wb","Wc","owner","disposeWhenNodeIsRemoved","Sa","disposeWhen","Rb","V","Ic","C","pure","deferEvaluation","ea","ja","Ka","Vb","La","Ia","Jd","Rd","Hc","zd","yd","N","Oc","Fd","xb","RegExp","String","Number","Boolean","save","toJSON","keys","values","ad","constructor","Wd","ma","Promise","M","__ko__hasDomDataOptionValue__","$b","getAttributeNode","specified","text","selectedIndex","cb","size","x","unknown","substr","Ra","wa","ac","vb","getBindingHandler","preprocess","valueAccessors","bindingParams","Id","eb","createComment","ul","ol","Ea","Vc","Wb","Cd","Vd","Sc","ga","nd","nodeHasBindings","getAttribute","j","getComponentNameForNode","getBindings","getBindingsString","parseBindingsString","tc","getBindingAccessors","message","instance","z","Tc","node","yc","kb","Kb","preprocessNode","bindingContextForDescendants","hd","context","Zb","has","Ec","pa","Cb","ca","after","Mc","init","update","$data","controlsDescendantBindings","shouldBindDescendants","fa","script","textarea","template","$parents","$root","ko","$rawData","dataDependency","exportDependencies","createChildContext","as","noChildContext","$parentContext","$parent","unshift","sd","Cc","Fa","notifyImmediately","Td","ib","ld","Oa","vc","Dc","synchronous","definition","Gd","loaders","suppressLoaderExceptions","Bc","oc","viewModel","content","DocumentFragment","require","Xd","register","tb","unregister","Fc","getConfig","loadComponent","loadTemplate","element","HTMLElement","getElementById","loadViewModel","dd","$raw","component","createDocumentFragment","dispose","createViewModel","templateNodes","$component","$componentTemplateNodes","koDescendantsComplete","attr","lookupNamespaceURI","removeAttributeNS","removeAttribute","setAttributeNS","checked","uniqueName","checkedValue","__ko__cssValue","css","enable","disabled","disable","event","preventDefault","returnValue","cancelBubble","stopPropagation","foreach","Rc","includeDestroyed","afterAdd","beforeRemove","afterRender","beforeMove","afterMove","templateEngine","hasfocus","__ko_hasfocusUpdating","activeElement","__ko_hasfocusLastValue","focus","blur","hasFocus","let","Q","multiple","scrollTop","ec","abs","selectedOptions","setProperty","toUpperCase","isNaN","parseFloat","opera","parseInt","textInput","y","propertyName","textinput","rd","using","autocomplete","form","visible","hidden","renderTemplateSource","createJavaScriptEvaluatorBlock","makeTemplateSource","ia","renderTemplate","isTemplateRewritten","allowTemplateRewriting","rewriteTemplate","kc","xd","Ld","md","nodeName","ab","nodes","lb","jd","bb","previousSibling","gc","dc","Qd","$index","ifnot","moved","dontLimitMoves","Aa","pb","_countWaitingForRemove","E","Ed","$a","Hd","tmpl","tag","open","koBindingContext","templateOptions","appendTo","fragments","addTemplate","ko_code","ko_with","close","Base","afterInit","global","factory","window","noGlobal","arr","class2type","hasOwn","support","selector","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","isArrayLike","obj","isWindow","jquery","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","first","eq","last","len","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","expando","isReady","error","msg","noop","isNumeric","realStringObj","isEmptyObject","globalEval","code","indirect","head","camelCase","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","proxy","tmp","args","now","iterator","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","push_native","list","booleans","whitespace","identifier","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","fromCharCode","unloadHandler","els","seed","nid","nidselect","groups","newSelector","newContext","exec","id","getElementsByClassName","qsa","toSelector","testContext","querySelectorAll","qsaError","cache","cacheLength","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","parent","doc","top","getById","getElementsByName","find","filter","attrId","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","bp","expr","elements","val","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","selectors","createPseudo","relative","dir","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","innerText","lang","elemLang","hash","location","href","tabIndex","radio","checkbox","file","password","image","reset","tokens","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","risSimple","winnow","qualifier","not","self","rootjQuery","root","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","sibling","targets","closest","pos","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","readyList","rnotwhite","completed","removeEventListener","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","empty","lock","fireWith","Deferred","func","tuples","state","promise","always","fail","then","fns","newDefer","tuple","returned","progress","resolve","reject","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","notifyWith","resolveWith","readyWait","holdReady","hold","wait","triggerHandler","off","readyState","doScroll","access","chainable","emptyGet","raw","bulk","acceptData","Data","uid","initial","writable","configurable","prop","stored","camel","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isHidden","el","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","unit","cssNumber","initialInUnit","rcheckableType","rtagName","rscriptType","wrapMap","col","_default","getAll","setGlobalEval","refElements","colgroup","caption","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","htmlPrefilter","checkClone","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","types","one","origFn","handleObjIn","eventHandle","events","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","fix","handlerQueue","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","sel","button","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","clientTop","originalEvent","fixHook","Event","load","noBubble","beforeunload","isDefaultPrevented","defaultPrevented","timeStamp","isSimulated","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","before","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","defaultDisplay","rmargin","rnumnonpx","getStyles","view","opener","getComputedStyle","swap","old","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelMarginRight","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","pixelMarginRightVal","reliableMarginLeftVal","container","computeStyleTests","cssText","divStyle","marginLeft","marginRight","backgroundClip","clearCloneStyle","pixelPosition","boxSizingReliable","reliableMarginLeft","reliableMarginRight","marginDiv","rdisplayswap","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","Tween","easing","cssHooks","opacity","cssProps","origName","isFinite","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","propHooks","run","percent","eased","duration","step","fx","linear","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","tick","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","propFilter","timer","anim","complete","tweener","oldfire","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","bool","propName","attrNames","propFix","rfocusable","rclickable","removeProp","tabindex","rclass","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","rspaces","valHooks","optionSet","rfocusMorph","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","simulate","hover","fnOver","fnOut","focusin","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","abort","statusText","finalText","success","crossDomain","host","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","getClientRects","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","responseType","responseText","binary","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","getWindow","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","andSelf","_jQuery","_$","noConflict","APIHelper","jsonIndex","post","Accept","disposeTopicSubscription","existingSubscribe","subscriptions","subId","subscribable","topicCache","serializer","publish","topic","serialized","initializeWithLatestValue","subscription","existingDispose","defaultComparer","newValue","cacheItem","publishOn","skipInitialOrEqualityComparer","skipInitialPublish","postboxSubs","subs","stopPublishingOn","subscribeTo","initializeWithLatestValueOrTransform","transform","isWriteableObservable","unsubscribeFrom","syncWith","postbox","analytics","cart","user","cartKey","updateTopic","emptyCart","getCart","storeCart","findCourseInCart","addParticipantToCourseNoStore","addParticipantsToCourse","areDatesOverlapping","newShoppingCart","localStorage","setItem","courses","payer","agency","courseId","participant","course","courseParticipant","AktorId","Name","Member","MembershipType","createCourseParticipant","participantId","participants","findParticipantInCourse","noStore","fromDate1","toDate1","fromDate2","toDate2","fromDate1Ms","toDate1Ms","fromDate2Ms","toDate2Ms","getItem","parsedCart","addCourseToCart","pageTypeName","existingCourse","cartCourse","AuditorCredits","AuthorizationCredits","AuthorizationType","AccountantCredits","createCartCourse","productAddedToCart","removeCourseFromCart","productRemovedFromCart","Key","isCourseAlreadyAdded","addParticipantToCourse","addParticipantsToCourses","EventType","removeParticipantFromCourse","removeOverlappingCoursesForParticipants","updateParticipantTopic","ToDate","overlappingParticipants","registerOverlappingCoursesForParticipants","resetOverlappingCoursesForParticipants","replaceAgency","newAgency","updateAgency","isAgencySet","replacePayer","newPayer","regnskapnorge","shoppingCart","arrayFilter","baseFilter","baseIteratee","predicate","freeGlobal","freeSelf","isLength","dataLayer","eventCallback","catalogListId","mapCourse","hours","Hours","Heading","price","PriceNonMember","category","variant","EventTypeText","metric1","dimension1","City","mapCart","product","quantity","checkFilter","coursesShown","courseList","skip","take","ecommerce","impressions","vocationEventCoursesShown","vocationEventName","productClickedFromCatalog","fromList","actionField","products","Url","trackProductClick","productMouseDownEvent","trackProductClickWithoutCallBack","earlybird","coupon","shoppingCartCheckedOut","redirectUrl","optionText","checkout","purchaseFinished","transactionId","purchase","productViewed","detail","Analytics","arrayLikeKeys","baseKeys","baseIsNative","getValue","ACCOUNTANT","AUDITOR","createFind","getRawTag","objectToString","symToStringTag","assignValue","baseAssignValue","customizer","isNew","baseKeysIn","txt","baseMatches","baseMatchesProperty","identity","other","baseGetTag","isObjectLike","isSymbol","baseForOwn","baseEach","createBaseEach","baseIsArguments","objectProto","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","Buffer","isBuffer","reIsUint","Ctor","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","entries","__data__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","entry","array","nativeCreate","getNative","isKeyable","DataView","Map","Set","WeakMap","toSource","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","castPath","toKey","path","isKey","stringToPath","objValue","CalculatorTracking","eventType","currentYear","isCurrentPeriod","calendarPeriod","calculatorCalendarPeriod","calculatorCalendarState","calculatorCategory","calculatorCategoryState","calculatorCategoryFilter","page","CartObject","courseListPageNumber","courseListPosition","courseExpandState","currentPage","coursePaginationCategory","coursePaginationCurrentPage","extendedPageType","extendedApiVersion","extendedState","listName","itemsPerPage","impressionList","impression","DONE","PLANNED","SHOPPING","EMPTY","DONEUNSTRUCTURED","RNStorage","storageKey","item","useSessionStorage","sessionStorage","removeItem","baseFor","createBaseFor","webpackPolyfill","deprecate","paths","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","freeProcess","process","binding","isObject","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","reIsDeepProp","reIsPlainProp","Uint8Array","arrayBuffer","byteLength","getPrototype","overArg","getPrototypeOf","CitySearch","postalCodeEl","postalCityObs","$postalCodeEl","keyup","getInputText","$postalCodeInput","searchForCity","baseClone","CLONE_DEEP_FLAG","FormDropdown","$mobileDropdowns","globalPadding","dataId","filterTopic","validHashes","fromDate","toDate","searchTerm","place","role","year","decodeHash","dictionary","pair","decodeURIComponent","getHashValue","setHashValue","currentHash","separator","hashString","encodeHash","getListener","ignoreInitialValue","obs","observable","getDateListener","updateFilters","correctedFromDate","correctedToDate","city","authorizationCreditPk","order","onhashchange","resIndex","iteratee","baseTimes","isIndex","inherited","isArr","isArg","isBuff","isType","skipIndexes","funcToString","baseIsEqualDeep","baseIsEqual","bitmask","stack","SetCache","arraySome","cacheHas","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","baseGetAllKeys","arrayPush","keysFunc","symbolsFunc","srcValue","baseGet","baseToString","baseHasIn","hasPath","allocUnsafe","buffer","isDeep","cloneArrayBuffer","typedArray","byteOffset","baseCreate","isPrototype","baseRest","isIterateeCall","assigner","sources","guard","overRest","setToString","nativeMax","otherArgs","baseSetToString","shortOut","PERSONAL_INFO","PERSONAL_STATUS","EMPLOYER","ENROLL","AGENCY","INSURANCE","CONFIRMATION","END","arrayAggregator","baseAggregator","initializer","accumulator","getSymbolsIn","isFlattenable","baseFlatten","depth","isStrict","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","valueOf","isBinary","PERSONMEMBER","AGENCYMEMBER","NONMEMBER","ALL","LOGGEDIN","MEMBERS","toNumber","nativeMin","lastArgs","lastThis","maxWait","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","texts","hasRNFri","hasRNFriProduct","netCourse","onsiteCourse","showRNFriButton","FreeOfChargeWithRnFri","quickPurchaseOnlineCourse","ImageUrl","isPurchased","isQuickPurchased","showCart","ShowCart","truncateClass","pureComputed","availability","Status","getAvailability","Availability","courseType","GetCourseType","authorizationCredits","filterAuthorizationType","addToCart","ev","trackAndRedirect","trackAndRedirectMousedown","MediaQueryDispatch","$triggerVal","$targetPos","triggerVal","$target","$overlay","popupHandler","marginBottom","dotdotdot","ellipsis","fallbackToLetter","watch","cookie","scroll","scrollCookie","removeCookie","UTC","getFullYear","getMonth","getDate","_process_options","dates","viewDate","defaultViewDate","focusDate","isInline","isInput","hasInput","picker","_buildEvents","_attachEvents","rtl","viewMode","startView","calendarWeeks","_allow_update","setStartDate","_o","startDate","setEndDate","endDate","setDaysOfWeekDisabled","daysOfWeekDisabled","setDatesDisabled","datesDisabled","fillDow","fillMonths","showMode","language","minViewMode","multidate","multidateSeparator","weekStart","weekEnd","parseFormat","format","_local_to_utc","_zero_time","parseDate","orientation","month","day","showOnFocus","_events","_secondaryEvents","_applyEvents","_unapplyEvents","keydown","paste","_focused_from","immediateUpdates","date","resize","mousedown","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","_utc_to_local","formatDate","enableOnReadonly","msMaxTouchPoints","disableTouchKeyboard","forceParse","setValue","datepicker","clipboardData","getData","setDate","getTimezoneOffset","_zero_utc_time","getUTCFullYear","getUTCMonth","getUTCDate","getDates","getUTCDates","clearDates","autoclose","setDates","setUTCDates","setUTCDate","getFormattedDate","updateNavArrows","outerWidth","outerHeight","right","zIndex","fill","daysMin","monthsShort","setRange","range","getClassNames","todayHighlight","getUTCDay","today","en","months","todayBtn","clearBtn","getDaysInMonth","beforeShowDay","enabled","tooltip","beforeShowMonth","modes","navStep","moveMonth","moveYear","_setDate","setUTCMonth","setUTCFullYear","_toggle_multidate","toggleActive","dateWithinRange","keyboardNavigation","ctrlKey","shiftKey","clsName","inputs","dateUpdated","pickers","updateDates","updateRanges","updating","defaults","locale_opts","Constructor","days","daysShort","navFnc","isLeapYear","validParts","nonpunctuation","separators","yyyy","yy","MM","mm","DD","headTemplate","contTemplate","footTemplate","DPGlobal","ui","widget","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","widgetEventPrefix","widgetName","widgetFullName","bridge","charAt","_init","defaultElement","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_create","_setOptionDisabled","_getCreateEventData","_removeClass","_setOptions","_setOption","_setOptionClasses","_classes","_toggleClass","_addClass","_off","_delay","_hoverable","_focusable","focusout","effect","effects","round","scrollbarWidth","clientWidth","getScrollInfo","isDocument","scrollWidth","scrollHeight","getWithinInfo","of","within","collision","at","my","marginTop","targetWidth","targetHeight","elemWidth","elemHeight","collisionPosition","collisionWidth","collisionHeight","horizontal","vertical","important","fit","flip","flipfit","disableSelection","enableSelection","BACKSPACE","COMMA","DELETE","DOWN","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","scrollParent","uniqueId","removeUniqueId","ie","distance","_mouseInit","_mouseDown","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","documentMode","altKey","metaKey","ignoreMissingWhich","_mouseDrag","_mouseStop","plugin","plugins","safeBlur","mouse","addClasses","axis","connectToSortable","containment","cursor","cursorAt","grid","helper","iframeFix","refreshPositions","revert","revertDuration","scope","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","drag","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_blurActiveElement","_getHandle","_blockFrames","iframeBlocks","_unblockFrames","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","dragStart","margins","_getParentOffset","_getRelativeOffset","_convertPositionTo","_uiHash","drop","dropped","dragStop","handleElement","helperProportions","bottom","_isRootNode","relativeContainer","cancelHelperRemoval","sortables","sortable","isOver","_storedCSS","placeholder","_helper","_intersectsWith","containerCache","_parent","currentItem","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","snapElements","items","snapping","release","snapItem","_zIndex","draggable","accept","greedy","tolerance","activate","deactivate","out","over","isover","isout","proportions","_addToManager","droppables","_splice","_activate","_addActiveClass","_deactivate","_removeActiveClass","_over","_addHoverClass","_out","_removeHoverClass","_drop","droppable","intersect","absolute","greedyChild","uiBackCompat","hoverClass","activeClass","alsoResize","animateDuration","animateEasing","aspectRatio","autoHide","ghost","handles","maxHeight","minHeight","_num","_isNumber","_hasScroll","_aspectRatio","originalElement","_proportionallyResizeElements","resizable","elementIsWrapper","originalResizeStyle","_proportionallyResize","_setupHandles","_handles","resizing","_removeHandles","se","sw","ne","nw","_renderAxis","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","_change","_updatePrevProperties","_updateVirtualBoundaries","_updateRatio","_respectSize","_updateCache","_applyChanges","prevPosition","prevSize","_vBoundaries","_getPaddingPlusBorderDimensions","outerDimensions","elementOffset","containerElement","containerOffset","containerPosition","parentData","containerSize","innerHeight","innerWidth","autoRefresh","selecting","unselected","unselecting","dragged","refresh","elementPos","selectees","$element","startselected","opos","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","beforeStop","receive","_isOverAxis","_isFloating","reverting","_refreshItems","_removeCurrentsFromItems","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","containers","dragging","lastPositionAbs","_intersectsWithPointer","direction","_intersectsWithSides","_rearrange","_contactContainers","_noFinalSort","_getItemsAsjQuery","connected","attribute","expression","forcePointerForContainers","floating","_getDragVerticalDirection","_getDragHorizontalDirection","_connectWith","toleranceElement","custom","refreshContainers","_createTrPlaceholder","counter","sender","icons","submenu","menus","activeMenu","mouseHandled","previousFilter","collapseAll","_closeOnDocumentClick","_keydown","previousPage","nextPage","_move","previous","collapse","filterTimer","_filterMenuItems","_isDivider","_itemRole","menu","listbox","_scrollIntoView","_close","_startOpening","_open","isFirstItem","isLastItem","autoFocus","minLength","search","requestIndex","pending","isMultiLine","_isContentEditable","valueMethod","isNewMenu","_keyEvent","_value","term","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_initSource","_appendTo","menufocus","liveRegion","menuselect","_isEventTargetInWidget","_closeOnClickOutside","_search","cancelSearch","_response","__response","_normalize","_suggest","label","_renderMenu","_resizeMenu","_renderItemData","_renderItem","escapeRegex","messages","noResults","some","fun","isScrollToFixed","ScrollToFixed","$el","originalOffsetTop","originalZIndex","isReset","offsetTop","offsetLeft","originalOffsetLeft","lastOffsetLeft","spacer","getLimit","limit","isFixed","isAbsolute","isUnfixed","setFixed","cssOptions","getMarginTop","dontSetWidth","baseClassName","setAbsolute","removeOffsets","setUnfixed","setLeft","checkScroll","wasReset","offsets","postPosition","windowResize","windowScroll","requestAnimationFrame","defaultOptions","preFixed","postFixed","preUnfixed","postUnfixed","preAbsolute","postAbsolute","fixed","unfixed","spacerClass","scrollToFixed","undef","debug","$dot","bind_events","getTrueInnerHeight","orgContent","$inr","trunc","conf","afterElement","$elem","$elements","isTruncated","$e","$i","getTextContent","space","textArr","midPos","startPos","endPos","floor","setTextContent","$w","afterLength","findLastTextNode","addEllipsis","ellipsisElement","unwatch","unbind_events","$window","_wWidth","_wHeight","dotId","windowResizeFix","watchInt","watchOrg","getSizes","watchNew","lastCharacter","defaultArrays","noEllipsis","getElement","_orgHtml","str","_orgText","getPrevNode","$top","excludeCurrent","pluses","encode","config","stringifyCookieValue","converter","parseCookieValue","expires","setTime","toUTCString","domain","secure","cookies","jswing","pow","sqrt","sin","c1","c2","c4","c5","bounceOut","n1","d1","def","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","Sifter","MicroPlugin","highlight","regex","spannode","middlebit","splitText","middleclone","removeHighlight","normalize","MicroEvent","fct","mixin","destObject","IS_MAC","KEY_CMD","KEY_CTRL","SUPPORTS_VALIDITY_API","validity","isset","hash_key","escape_html","hook","called","debounce_events","event_args","getSelection","selectionStart","selectionEnd","createRange","selLen","moveStart","Selectize","$input","selectize","computedStyle","currentStyle","tagType","eventNS","highlightedValue","isBlurring","isOpen","isDisabled","isRequired","isInvalid","isLocked","isFocused","isInputHidden","isSetup","isShiftDown","isCmdDown","isCtrlDown","ignoreFocus","ignoreBlur","ignoreHover","hasOptions","currentResults","lastValue","caretPos","loading","loadedSearches","$activeOption","$activeItems","optgroups","userOptions","renderCache","onSearchChange","loadThrottle","sifter","diacritics","registerOption","registerOptionGroup","maxItems","hideSelected","initializePlugins","setupCallbacks","setupTemplates","explanation","console","group","groupEnd","$wrapper","$control","$control_input","$dropdown","$dropdown_content","$dropdown_parent","inputMode","classes_plugins","inputId","$document","wrapperClass","inputClass","dropdownParent","dropdownClass","dropdownContentClass","copyClassesToDropdown","names","splitOn","delimiter","delimiterEscaped","onOptionHover","onOptionSelect","onItemSelect","child","currentWidth","printable","character","force","$testInput","whiteSpace","$from","$to","transferStyles","measureString","autoGrow","onMouseDown","onClick","onKeyDown","onKeyUp","onKeyPress","positionDropdown","onBlur","onFocus","onPaste","revertSettings","$children","refreshState","updateOriginalInput","refreshItems","updatePlaceholder","onChange","preload","field_label","labelField","field_optgroup","optgroupLabelField","templates","escape","render","callbacks","setActiveItem","isFull","pastedText","splitInput","createItem","selectAll","$next","getAdjacentOption","setActiveOption","$prev","advanceSelection","selectOnTab","deleteSelection","refreshOptions","wasFocused","showInput","openOnFocus","setTextboxValue","setCaret","createOnBlur","closeAfterSelect","lastQuery","addItem","getOption","loadingClass","addOption","silent","addItems","$item","eventName","begin","$last","hideInput","$option","height_menu","height_item","scroll_top","scroll_bottom","scrollDuration","getScoreFunction","query","getSearchOptions","sortField","field","fields","searchField","conjunction","searchConjunction","nesting","calculateScore","score","triggerDropdown","groups_order","option_html","html_children","has_create_option","$active","$active_before","$create","active_before","maxOptions","optgroupField","lockOptgroupOrder","$order","dom","canCreate","addPrecedence","valueField","optgroupValueField","addOptionGroup","removeOptionGroup","clearOptionGroups","updateOption","$item_new","value_new","index_item","cache_items","cache_options","order_old","removeOption","clearOptions","getElementWithValue","$options","$els","isPending","control","value_next","wasFull","insertAtCaret","persist","caret","unlock","output","refreshValidityState","refreshClasses","invalid","option_select","$option_select","$tail","onDelete","tail","valueLength","advanceCaret","$adj","$child","templateName","disabledField","clearCache","createFilter","allowEmptyOption","settings_user","attr_data","field_value","field_disabled","field_optgroup_label","field_optgroup_value","tag_name","settings_element","optionsMap","readData","addGroup","$optgroup","init_select","data_raw","init_textbox","define","title","headerClass","titleRowClass","labelClass","closeClass","$dropdown_header","equalizeWidth","equalizeHeight","getScrollbarWidth","equalizeSizes","height_max","width_last","width_parent","$optgroups","thisRef","html_container","html_element","render_item","multiClose","singleClose","words","escape_regex","DIACRITICS","is_array","forEach","token_count","prepareSearch","field_count","scoreValue","scoreObject","getattr","sum","getSortFunction","fields_count","multiplier","multipliers","get_field","implicit_score","sort_empty","cmp","option_fields","option_sort","option_sort_empty","total","fn_sort","fn_score","asciifold","chunk","foreignletters","lookup","regexp","foreignletter","Interface","requested","loaded","utils","loadPlugin","vArg","koComponent","components","Cart","AUTHORIZATION_TYPE","decodeHtml","CalculatorRN","mobileSize","mobileView","actorId","showRequirementWarningsAllYear","API","api","links","isRNFriProduct","calculatorInfoText","calculatorPreviousYearInfoText","descriptionCourseStudyStatus","timestatus","titleCourseStudyStatus","manglerKurs","missingCourseTitle","description","missingCourseDescription","forwardLink","findCoursesLink","forwardLinkText","findCourseLinkText","$htmlBody","categories","observableArray","startAuth","authorizedAccountant","calculatorType","changeInAuthorizationType","showCalculatorType","authorizedAuditor","showLeaveBlock","showAddCourse","showCalculatorDescription","currentStartYear","currentEndYear","categoriesEndYear","activeModal","modalTitle","modalText","totalDoneHours","totalRequiredHours","calculatorExtendedCourse","calculatorExtendedLeave","activeBar","periodStartYears","getPeriods","authorizationDate","showAuthorizationDate","getCategories","downloadFileUrl","periodReportUrl","periods","startYears","startYearDate","Start","authDate","authDateString","URL","parameters","platform","categoryHours","EndYear","handleCategories","Categories","totalPlannedHoursCategories","requiredHoursCurrentCategory","Requirement","PlannedHoursFromCurrentCategory","CategoryKey","TotalHoursDone","TotalStructuredHoursDone","TotalUnstructuredHoursDone","DoneStructuredHoursFromCurrentCategory","DoneUnstructuredHoursFromCurrentCategory","ShowMissingHoursError","showMissingHoursError","UpdateCounter","Shopping","RemainingHours","valueHasMutated","showHoursType","doneHours","requiredHours","previousYear","indexOfCurrentStartYear","previousStartYear","trackYearChange","nextYear","nextStartYear","toggleAddCourse","trackCloseExtendedPages","scrollToTarget","trackExtendedPages","toggleLeaveBlock","toggleCalculatorDescription","toggleBars","closeModal","changeCalculatorType","fromRight","iterable","nativeObjectToString","isOwn","unmasked","typedArrayTags","nativeKeys","eachFunc","baseIsMatch","getMatchData","matchesStrictComparable","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","assocIndexOf","pairs","LARGE_ARRAY_SIZE","isMasked","reIsHostCtor","funcProto","reIsNative","coreJsData","maskSrcKey","IE_PROTO","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","getMapData","equalArrays","equalByTag","equalObjects","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","setCacheAdd","setCacheHas","mapToArray","setToArray","symbolProto","symbolValueOf","convert","stacked","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","isStrictComparable","hasIn","memoizeCapped","rePropName","reEscapeChar","quote","subString","memoize","resolver","memoized","Cache","arrayMap","symbolToString","hasFunc","baseProperty","basePropertyDeep","baseMerge","createAssigner","srcIndex","assignMergeValue","baseMergeDeep","keysIn","safeGet","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArrayLikeObject","toPlainObject","mergeFunc","isCommon","isTyped","objectCreate","proto","objectCtorString","copyObject","nativeKeysIn","isProto","constant","nativeNow","lastCalled","stamp","Oppdateringskalkulator","extendedText","isInSimpleCalculator","oldPeriod","periodCounter","isLoading","getPeriodTotal","startYear","endYear","dataSet","MAX_HOURS","MAX_STRUCTURED_HOURS","MAX_UNSTRUCTURED_HOURS","structuredHoursDone","unstructuredHoursDone","maxUnstructuredHoursDone","hoursPlanned","hoursShopping","hoursMissing","shopping","changeInPeriod","startProgressBar","updateShopping","newCart","setHoursShopping","credit","arrayFirst","periodTotal","RequirementStructured","TotalHoursPlanned","RequirementHoursMainCategories","TotalHoursFromMainCategories","RequirementPerMainCategoryCovered","RequirementMainCategoriesCovered","YearTotals","Year","createDataSet","typeNumber","color","backgroundColor","Timestatus","hoursCompleted","hoursTotal","isExpanded","requirementHoursFromMainCategories","hoursFromMainCategories","requirementHoursFromMainCategoriesCovered","requirementHoursPerMainCategoryCovered","requirementHoursFromMainCategoriesText","requirementHoursPerMainCategoryText","toggleExpanded","categorizeProgress","userProgress","regnskapsforer","remainingDays","currentDate","timeDiff","ceil","getRemainingDaysForCurrentYear","startingPointsRegnskap","startingPointsRevisor","calculateY","degree","startingPoint","polynomialInterpolation","y_values","extraEffortStatusDescription","approvedStatusDescription","deadlineStatusDescription","aheadStatusDescription","wellOnWayStatusDescription","missingStatusDescription","warningStatusDescription","criticalStatusDescription","partiallyApprovedStatusDescription","requirementHoursFromMainCategoriesCoveredText","requirementHoursFromMainCategoriesNotCoveredText","requirementHoursPerMainCategoryCoveredText","requirementHoursPerMainCategoryNotCoveredText","HOURS_TYPE","CalculatorUtil","CalculatorBar","updateData","localShoppingHours","doneHoursFromCurrentCategory","doneUnstructuredHoursFromCurrentCategory","plannedHoursFromCurrentCategory","totalHoursDone","hoursToAdd","firstEmptyIndex","firstSubEmptyIndex","firstOtherEmptyIndex","newYear","periodClicked","BLOCKS_OTHER_AMOUNT","updateCounterLock","changeInPeriodLock","updateAllHours","isSpecialBar","timeMissingClass","blocks","newIndex","animateHours","calculatedHours","calculateHours","addHoursToBlock","main","hourSettings","tmpBlocks","classType","unitType","doneUnstructuredHours","plannedHours","shoppingHours","expandable","$calculator","trackCategoryExpanded","$expanded","$calculatorDetail","scrollTarget","CalculatorCourse","planned","cartObject","isRNFri","Course","filteredCredits","ActiveAuthorizationCredits","purchased","FromDate","dateFormatted","ApprovedDate","approvedDate","approvedDateFormatted","$expandable","buyCourse","trackCourseExpanded","CalculatorCourses","currentFilter","totalItems","currentYearChange","activePeriod","pages","plannedCourses","completedCourses","getRecommendedCourses","getPlannedCourses","getCompletedCourses","changeFilter","trackCategoryFilter","recommendedCourses","TotalItems","Items","trackCourseList","prevPage","trackCoursesPagination","changePage","unescape","CategoryInput","required","ExtendedCourse","preAnswers","isChangeInYear","addOrUpdateCallback","isEditingCourse","removeCourseCallback","extendedCourseTitle","validationTimer","courseTitle","courseOrganizer","courseDate","fieldsUpdate","validationStatus","originalCategories","categoriesAccountant","categoriesAuditor","hoursDone","period","authorizationType","isSelfStudy","requiredFields","fillPreAnswers","sequencePk","isValid","hasError","answers","organizer","dateSplit","createCategories","validateFields","clearFields","isSuccessful","submitCourse","Title","Organizer","Credits","IsSelfStudy","CourseKey","tmpVal","tmpHours","oldFromDate","newFromDate","addOrUpdateExternalCourse","addedYear","tmpDate","updateCourseValues","startValidationTimer","removeCourse","delete","removeCourseApi","triggerNonStructuredHoursPopup","nonStructuredHoursTitle","nonStructuredHoursDescription","unescapeHtmlChar","reEscapedHtml","reHasEscapedHtml","basePropertyOf","LeaveListItem","showInputLeave","AbsenceKey","leaveYear","storedLeaveYear","ExtendedLeave","absenceLink","deletableItem","newLeaveText","leaveItems","getLeave","toggleChangeLeave","submitChangeLeave","addOrUpdateLeave","cancelChangeLeave","askDelete","openModal","deleteAbsence","addOrUpdateAbsence","absenceKey","confirmModal","addLeave","newLeave","getAbsence","Notifier","showSumOfHours","showShortVersion","sumOfRemainingHours","bookKeeping","hoursRequirement","hoursRequirementStructured","categoriesWithRemainingHours","showNotification","determineShowNotification","difference","tmpCategories","findCategoriesWithRemainingHours","calculateRemainingHoursForCategories","MissingHoursFromCurrentCategory","HOURS_COLOR","TimeUnits","timeDone","timePlanned","timeRequired","timeMissing","missing","createTimeUnits","TimeUnit","rowNumber","rowIndex","isHalf","background","amount","hasHalfHour","CalculatorYear","hasLeave","Leave","yearLength","typeDisplay","excludeTimeunits","totalUnstructuredHoursDone","totalHoursPlanned","doneUnstructured","totalHours","totalUnstructuredHours","hoursDisplay","addHoursForYear","oldValue","triggerInfoPopup","assign","CalculatorYears","testIndex","startActiveIndex","maxYear","staticAllYears","tmpYear","Active","fullPeriod","showFuture","showDocumentationDate","documentWidth","periodLength","containerWidth","visualPeriod","firstPeriod","visualPeriodChange","documentationDate","nextHours","setIndex","periodIndex","newArr","tmpItem","PAGE_TYPE","PAGE_NAMES","registrationPage","personalInfo","personalStatus","employer","applicant","insurance","confirmation","SIGNUP_TYPE","person","RegistrationPages","$body","STEP","PERSONAL","AUTHORIZATION","signuptype","errorMessages","steps","headerSteps","currentsignuptype","stepHistory","regData","parsedRegData","setHeaderSteps","currentStep","mainContainer","setHash","trackStep","tmpArr","storeValues","storeValuesForStep","stepType","lastUpdated","saveStep","triggerModal","calculateHeight","newHeight","oldStep","addInputControlForPage","inputFields","tmpNewField","removeInputControlForPage","addSteps","signupType","trackRegistrationSent","previousStep","nextStep","nextStepSkip","SearchPostalCode","RegistrationPersonalInfo","componentActive","currentInputField","activateComponent","deactivateComponent","alreadyUserInformation","modalUsers","modalUserConfirmation","searchQuery","hasSearched","resultOption","isExistingUserMember","IsMember","IsAgencyLeaderMember","isExistingUserStudentOrTraineeMemberAndSignUpTypePerson","IsStudentOrTraineeMember","searchPerson","getPersonById","givenName","requiredFieldEmpty","surname","birthNumber","wrongNumberOfDigitsSocialSecurityNumber","NotANumber","invalidSocialSecurityNumber","isValidPersonNumber","mobileNumber","invalidPhoneNumber","email","invalidEmail","emailWork","postCareOf","postAddress","postalCode","notANumber","wrongNumberOfDigitsPostalCode","postalPlace","isBureauMemberOfRn","populateInputFromStore","searchPostalCode","afterMarkupRender","submitForm","store","emailPrivate","createStoreObject","retObj","validateInputOnStep","checkIfExistingUser","getPersonExists","modalNextStep","RegistrationInfoMember","showBureauMemberText","positionLevelTmp","positionLevelOptions","positionLevel","itemFromListNotChosen","workTitle","otherRoles","recruiter","wrongNumberOfDigitsMembershipNumber","isStudentOrTrainee","newVal","adjustSteps","studentTraineeLocationId","studentTraineeLocation","studentTraineeEndDate","studentTraineeLocationEmpty","studentLocationTmp","studentLocations","yearArray","studentTraineeEndDateTmp","studentMonthAndDay","infoMember","setPositionLevelList","setStudentLocations","setYearArray","getPositionLevelList","getStudentLocations","newData","Value","fiveYearsArr","RegistrationEmployer","isSearching","hasGottenResults","showWarningNextWithoutData","validSearchResults","invalidEmployer","searchOrganization","getAgency","infoEmployer","partition","RegistrationConfirmation","noActorId","isSubmitting","invoiceAgencyName","agencies","bureauConnections","registrationConfirmation","requiredBoxUnchecked","showInvoiceSection","showInsuranceSection","showInsuranceBought","showInsuranceExternal","showTermsAndConditions","invoiceOptions","noAlternativeChosen","invoiceEmail","allData","checkedBureauConnections","matchingIndex","infoAgency","enroll","externalInsuranceId","setAgencies","getAgenciesForPerson","modifiedAgencies","checkExistingAgencies","agencyPartitions","getAllIndexes","indexes","removedAgencyConnectionsIndices","removedAgencyConnections","paySelf","agencyId","removeAssociatedAgencies","NewAgency","PaySelf","infoSummary","registrationPath","currentPath","toggleTermsAndConditions","submitData","postSignupSummary","studentandpractice","createAggregator","RegistrationEnroll","isRnMember","$isMember","$isNotMember","hasPersonNext","RegistrationAgency","inputFieldsVisit","inputFieldsInvoice","showContactInformation","showInvoiceAccordion","showAddressAccordion","marketingName","headCount","invalidDecimalNumber","registeredAuditor","co","postalAddress","populateInputFromApi","isMember","phone","website","visitCo","visitAddress","visitPostalCode","visitPostalPlace","invoiceCo","invoiceAddress","invoicePostalCode","invoicePostalPlace","getAgencies","wrongNumberOfDigitsOrganizationNumber","searchPostalPlaceEl","visitPostalPlaceEl","invoicePostalPlaceEl","addressPostalCode","$visitAddress","$invoiceAddress","Email","OfficePhone","Website","MarketName","PostalCareOf","PostalAddress","PostalPostCode","PostalCity","StreetCareOf","StreetAddress","StreetPostCode","StreetCity","BillingCareOf","BillingAddress","BillingPostCode","BillingCity","Employees","InvoiceEmail","tmpAgency","ApprovedAuditor","toggleAddressAccordion","toggleInvoiceAccordion","updateContactInformation","RegistrationInsurance","showAboutProfessionInsurance","showAboutCrimeInsurance","crimeInsuranceConfirmation","hasInsurance","toggleUploadInsurance","uploadInsuranceText","externalInsuranceFileName","professionInsuranceId","hasCrimeInsurance","criminalInsuranceId","totalSalaryCost","professionInsurances","criminalInsurances","invalidSalaryCost","$hasInsurance","$buyInsurance","$fileInput","insuranceFile","files","getHeadCountFromAgency","getProfessionInsurances","getCriminalInsurances","uploadClick","fileElem","uploadInsurance","postInsuranceDocument","uploadSubmit","handleFiles","storeObj","InsuranceId","toggleAboutProfessionInsurance","toggleAboutCrimeInsurance","RegistrationEnd","showSuccess","showFail","cloneDeep","ExternalCourse","tmpCategory","editCourseEl","showEditCourse","toggleEditCourse","editCourse","arrayEach","baseAssign","baseAssignIn","copySymbols","copySymbolsIn","getAllKeysIn","initCloneArray","initCloneByTag","isMap","isSet","cloneableTags","isFlat","isFunc","subValue","cloneDataView","cloneRegExp","cloneSymbol","dataView","reFlags","lastIndex","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","sortBy","groupBy","forIn","CourseInstructors","instructorsData","sortFirstName","maxItemsPerPage","amountOfItems","instructors","totalInstructors","instructorsSortedFirst","instructorsSortedLast","instructor","pagesSortedFirst","pagesSortedLast","groupedSortedFirst","_groupSortedList","groupedSortedLast","instructorsAZ","_formatForKnockout","instructorsZA","instructorsList","activeList","sortedList","groupByLastName","retArray","groupedList","asc","setListItemHeight","listItems","setListsItemHeight","lists","loopList","baseOrderBy","iteratees","spreadableSymbol","isConcatSpreadable","baseMap","baseSortBy","compareMultiple","orders","comparer","compareAscending","objCriteria","criteria","othCriteria","ordersLength","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","castFunction","chunkSize","Employee","removed","isDeleting","BureauEmployees","aktorId","agencyaktorid","employeeArr","employeeList","dropdownTitle","hasSubordinateOffices","ableToFetchMore","agencyData","AgencyData","agencyDataReady","agencyList","hasNoSubordinateOffices","deleteEmployee","endAgencyConnectionForPersonUrl","AgencyAktorId","getPageData","setAgencyData","List","getAllEmployeesForAllAgenciesInChain","employee","setEmployeeData","updateEmployeeList","tempData","deleteEmployeeFromAgency","toggleModal","AddEmployeeModal","agencyAktorId","registerNewUser","showErrorMessage","hasUpdatedSuccessfully","errorText","successText","searchMobileNumber","searchEmail","modalEl","querySelector","validateForm","personExistsUrl","addSelectedUser","userAktorId","connectPersonToAgencyUrl","formatData","createUserUrl","FirstName","LastName","Phone","connectToAgency","closeCallback","hideSuccessMessage","hideErrorMessage","BureauInsurances","aktorIdAgency","hasExternalInsurance","hasProfessionInsuranceFromChainOffice","hasCrimeInsuranceFromChainOffice","hasProfessionInsurance","hasCriminalInsurance","showCrimeInsurance","shouldShowCrimeInsurance","showProfessionInsuranceCheckbox","showCrimeInsuranceCheckbox","professionInsuranceValueIsSelected","AktorIdAgency","HeadCounts","ProfessionInsuranceId","CriminalInsuranceId","TotalSalaryCost","InsuranceSumProfessionInsurance","InsuranceSumCrimeInsurance","isLoadingUpdate","isSuccessfulUpdate","updateText","isLoadingProfessionInsurances","threshold","professionInsuranceConfirmation","updateRequestSent","getExistingData","getInsuranceInformation","setExistingData","getCrimeInsurances","tempProfId","createStoreObj","closeUpdateRequestSent","updateInsurances","totalSalaryCostErrorText","addOrUpdateInsuranceAndEmployees","findIndexFunc","fromIndex","baseFindIndex","toInteger","toFinite","remainder","trimmedEndIndex","reTrimStart","reWhitespace","MONTH_NAME","CalendarRN","calendarList","currentMonth","getArticleCalendar","monthName","changeMonth","tmpMonth","articleCalendar","FindAccountantsRN","accountantsHitText","accountantList","accountantFilteredList","showClearQuery","infoWindow","markers","numberOfShowingAccountants","clickedOnAccountant","marker","getPosition","setContent","panTo","setZoom","getAccountants","filteredItems","includes","clearQuery","bindingHandlers","googleMap","mapDiv","valueAccessor","allBindingsAccessor","mapData","google","maps","center","lat","lng","InfoWindow","disableAutoPan","Marker","LatLng","Latitude","Longitude","addListener","markersOnSamePosition","MarkerClusterer","imagePath","maxZoom","accountants","Pagination","toStart","toEnd","Model","addNewEmployeeEndpoint","usersHaveAlreadyBoughtCourseEndpoint","usersHaveAlreadyBoughtOnlineCourseEndpoint","usersHaveAlreadyBoughtProgramEndpoint","activePopup","togglePopup","hasBoughtCourseEndpoint","hasBoughtOnlineCourseEndpoint","hasBoughtProgramEndpoint","usersHaveAlreadyBoughtOverlappingCourseEndpoint","hasOverlappingCourse","hasOverlappingCourseInCart","hasBoughtCourseIsChecked","hasBoughtProgramIsChecked","hasBoughtOnlineCourseIsChecked","hasOverlappingCourseIsChecked","showEmployees","disableCheckbox","hasBoughtCourse","hasBoughtProgram","checkedEmployees","addToAll","hasBoughtOnlineCourse","setCheckedEmployees","tmpCheckedEmployees","checkedEmployee","addParticipants","employeesToAdd","hasOverlap","showList","toggleAddParticipant","showCreateButton","showCreateDialog","toggleCreateDialog","addNewEmployee","employeeIds","selectedAgency","postHasBoughtCourse","Users","SequencePk","postHasBoughtOnlineCourse","postHasBoughtProgram","ProgramKey","employeeListSub","foundInList","MultipleAgenciesForUser","createAgencyEndpoint","searchAgencyEndpoint","chosenAgency","chooseAgency","createAgency","createAgencyToggle","toggleAgencyPane","isAlreadyMember","organizationNumber","searchedAgencyName","orgNo","agencyName","AvailableAgencies","CreatedAgency","chosenAgencyInAgencyList","memberCannotConnectToMemberAgency","membershipForm","missingAgencyOrgNr","AgencyIsMember","OrgNo","agencyEndpoint","states","currentState","transitions","multipleAgenciesForUser","addEmployeeEndpoint","closeDialog","firstName","lastName","validateField","addEmployee","getAgencyId","errorCreateEmployee","MEMBERSHIPTYPE","ACCESSLEVEL","article","AccessLevel","membershipType","CourseBlock","excludeImage","shortDescription","ShortDescription","MediaListModel","videoId","VideoId","userHasPurchasedCourseUrl","UserHasPurchasedCourseUrl","_IsPurchasedLocal","IsPurchased","inCart","apiPurchased","isAddedToMyCourses","availabilityText","AvailabilityText","eventTypeIconString","credits","filterCredits","GetTruncateCssClasses","IsRNFriProduct","userHasPurchasedCourse","CheckboxList","checkedCallback","emptyListEvent","updateListEvent","clearFiltersEvent","checkedOptions","findOptions","updateList","newOptions","chkOption","MultiSelect","removeItemEvent","isActive","removeParent","hasChildrenSelected","toggleMultiSelect","MultiSelectSimple","SelectedList","containerClass","AdminToolUserManagement","aktorID","aktorIDError","showResetPasswordBtn","showResultInRed","hasResult","unlockUserMessage","userUnlocked","validateNumber","onlyNumbers","createEpiUser","hideResetPasswordBtnOnChange","sendAPICall","createEpiUserFromCRMUserUrl","Message","Result","Username","GeneratedPassword","IsLocked","serverresult","messageError","resetPassword","unlockUser","unlockUserUrl","IsSuccess","ErrorMessage","FileList","fileList","isRemoving","removeFileCallback","removeFileUrl","isAbleToRemoveFile","removeIsDisabled","removeDisabled","removeFeedback","isMessageOpen","removeFile","tmpFileList","QcDelete","fileId","isObservable","extraClassNames","MyCoursesPage","tabType","switchTab","MyPlannedCourses","plannedCoursesIntroText","isModalActive","showFetchAllCourses","activeIndex","watchNewNetCourseUrl","selectedSequenceId","activeCourse","setActiveCourse","plannedCoursesUrl","getAllCourses","confirmCancellation","cancelSequenceRegistrationUrl","SequencePK","RegistrationKey","forOwn","MyCompletedCourses","completedCoursesIntroText","selectedCourseFilter","selectedOrganizer","organizers","toggleAddExternalCourseButtonText","addExternalCourse","showAddExternalCourse","hideSelect","selects","getCourses","toggleAddExternalCourse","$extendedCourse","getUncompletedCourses","toggleState","completedCoursesUrl","handleCoursesSuccess","expiredButUncompletedCoursesUrl","addedExternalCourse","modifySpecificCourse","indexInCourses","indexInOrganizers","updatedCourse","tmpCoursesList","courseToBeModified","organizersPerYear","CourseTitle","updateFilterOrganizers","tmpResponse","tmpOrganizersMap","tmpOrganizers","Courses","organizersToRemove","organizersToAdd","previousOrganizers","previousOrganizer","po","tmpOrganizer","organizerToRemove","organizerToAdd","listType","dateUtil","CoursesListItem","isHistorical","helpPageReferenceLink","helpPageReference","helpPageReferenceText","questionAboutCourseCompletionText","termsAndConditionsLink","termsAndConditionsPageReference","termsAndConditionsText","termsAndConditionsPageReferenceText","expirationViewDate","convertDateToNorwegianStyleString","ExpirationViewDate","documentation","Documentation","courseUrl","isNetCourse","IsNetCourse","shouldPromptUserForNewCourse","newVideoCourseIds","shouldVideoCoursePopUpBeShown","showVideoCoursePopUp","isProgram","isProgramOnline","programDateString","ProgramDateString","aboutText","aboutProgram","aboutCourse","descriptionLinkText","programDescription","courseDescription","isComplete","IsComplete","packageName","PackageName","soonToExpire","setHours","registrationKey","courseDiplomaBaseUrl","programRegistrationKeyYearPairs","expirationDateMidnight","ExpirationDate","expired","isClosedForCancellation","IsClosedForCancellation","isOnWaitingList","IsOnWaitingList","completedDate","CompletedDate","hoursType","CourseFromDateString","diplomas","courseDiplomaUrl","ProgramRegistrationKeyYearPairs","Item1","diploma","Item2","WebSite","deleteCourse","cancelCourse","expandItemDetails","startMultimediaCourse","getLaunchLinkMultimediaCourseUrl","launchLink","startCourse","featureSwitchSplashScreenHeading","featureSwitchSplashScreenText","SequenceId","watchNetCourseUrl","newDate","getTimeStringFromDate","getHours","minutes","getMinutes","CourseRegistrationOverview","CourseOverviewList","navigation","getSequencesLink","sequence","getUrlSequencesBase","errorMessage","noSequencesFound","sequences","filterFromDate","getShortIsoDate","checkDatesOrder","filterToDate","getSequences","numberOfSequences","numberOfShowingSequences","sequencesFilterOptions","selectedFilterSequence","courseAdminOptions","selectedCourseAdmin","filteredSequences","filterSequences","activeSort","listHeaders","createSubscribersForSelectedFilters","updateLocalStorage","createSubscribersForSelectedCourseAdmin","filterSequence","courseAdmin","storeItem","applyStoredFilters","sortKey","getApiFriendlyIsoDate","baseUrl","Sequence","CourseAdmin","addOptions","responseJSON","filteredList","sequenceFilter","adminFilter","sortSequences","header","currentSorting","compareAsc","compareDesc","CourseRegistrationParticipants","MANUAL_CONFIRMATION_REQUIRED","POLLING_TIMEOUT_PARTICIPANTS","POLLING_TIMEOUT_ANONYMOUS_PARTICIPANTS","POLLING_CURRENTREQ_PARTICIPANTS","POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS","CourseParticipantsList","enableAutoUpdate","successMessage","hasSuccess","isIE","isEdge","StyleMedia","infoMessage","isLoadingSequenceInfo","isAnonLoading","updateOptions","enableBatchEditMode","selectedParticipantsToEdit","checkAllParticipants","numberOfSelectedParticipants","sequenceInfo","showMoreSequences","incomingParticipants","anonymousParticipants","incomingAnonymousParticipants","noParticipantsFound","noAnonsFound","getSequenceInfo","getParticipants","getAnonymousParticipants","getParticipantsInIntervals","getAnonymousParticipantsInIntervals","numberOfParticipants","numberOfShowingParticipants","numberOfShowingAnonymousParticipants","numberOfAnonymousParticipants","numberOfMissingStartTime","Attendance","CheckInTime","numberOfMissingEndTime","CheckOutTime","hasMoreSequences","SequencesSameDay","meetingDateFilterOptions","selectedFilterMeetingDate","participantFilterOptions","anonymousParticipantsFilterOptions","selectedFilterParticipant","selectedFilterAnonymousParticipants","filteredParticipants","filterParticipants","filteredAnonymousParticipants","filterAnonymousParticipants","postOnKey","updateParticipantLists","onMobileNumberChange","postMobileNumber","onCheckInTimeChange","attendance","postCheckInTime","onCheckOutTimeChange","postCheckOutTime","makeParticipantPropertiesObservables","ParticipantIsLoading","MobileNumber","getTimeFromDate","StatusTexts","ApprovedHours","toLocaleString","filterParticipant","anonymousListHeaders","compareMobileNumbers","anon","IsRegisteredUser","getPostMobileNumberUrl","SavedData","Participant","oldday","AttendancePk","UpdateApprovedHours","approvedHours","ParticipantActorId","QcPost","getPostCheckInTimeUrl","thatDay","thisDay","DayInSequence","getPostCheckOutTimeUrl","getSequenceInfoUrl","getUrlParticipantsBase","ParticipantMobileNumber","incomingParticipant","participantOnlyLocally","existingParticipant","existingId","participantOnlyInIncoming","incomingId","existingAktorId","incomingAktorId","existingParticipantDay","incomingParticipantDay","getPostParticipantUrl","postParticipant","queryString","SequenceFk","getNorwegianDate","addAnonOptions","participantFilter","filteredAnonymousParticipantsList","anonymousParticipantsFilter","MobilePhone","getCurrentTime","sortParticipants","sortAnonymousParticipants","ParticipantDetailsModal","postUrl","hasErrors","confirmChanges","Comment","CourseRegistrationFeedbackBox","closeError","ReportPage","reports","hasSelectedReport","reportsOptions","selectedReport","addReportsOptions","hotels","lecturers","showCourseId","showSequenceId","showEventId","showHotelPicker","showLecturerPicker","showDateFrom","showDateTo","reportUrl","sequenceId","eventId","hotelOptions","selectedHotel","lecturerOptions","selectedLecturer","getShortDate","updateUrl","report","reportName","ReportTypeName","updateReportFields","currentReport","ApiUrl","HotelList","LecturerList","addHotelOptions","addLecturerOptions","OptionalCourseId","OptionalSequenceId","OptionalEventId","RequiresCourseId","RequiresSequenceId","RequiresEventId","RequiresHotelList","RequiresLecturerList","RequiresFromDate","RequiresToDate","hotelList","hotel","lecturerList","lecturer","formatDateToIsoDate","newdate","datesplit","findLecturer","findHotel","qs","CoursePlacePk","LecturerPK","SearchBlockModel","selectedPlaceEl","selectedPlaceObj","BaseUrl","searchLabel","Labels","SearchLabel","courseTypeLabel","CourseTypeLabel","courseUpdateLabel","CourseUpdateLabel","coursePlaceLabel","CoursePlaceLabel","showCoursesLabel","ShowCoursesLabel","selectedPlace","selectedUpdate","selectedCourse","accountantOptions","showAll","accountant","financial_statement","skatteavgiftsrett","accounting","corporate_law","placesDropdown","CoursePlaces","courseTypes","CourseTypes","goToFilteredCourses","hashEncodedUrl","applyBindings","scrollingElement","debounce","listEndpoint","currentPost","takeMore","articleListItem","currentScrollPosition","currentFilters","defaultFilters","activeArticlesAmount","currentRelevanceSorting","articleList","Skip","Take","SortOnRelevance","articles","afterListRender","getMoreArticles","totalDiscounts","totalPrice","totalPriceIncVat","totalFoodVat","totalAccommodationVat","totalOnlineCourseVat","endpoints","readonly","userHasAlreadyBoughtCourse","userHasAlreadyBoughtOnlineCourse","userHasAlreadyBoughtProgram","removeParticipant","memberHasDiscount","originalPrice","getPrice","deleteItemText","deleteBundle","deleteProgram","pick","paymentMethod","summary","prices","discounts","currentUser","alreadyAddedUser","usersUnPublishedCourses","Total","acceptTermsForPrograms","requiredField","summaryLink","paymentMethodLink","HasClickedOrderButton","coursesSelected","submitButtonDisabled","encodeCart","cartViewModel","Discounts","OriginalPrice","discount","getPriceForParticipant","ActualPrice","mapCourseList","ParticipantActorIds","EmployerActorId","PayerActorId","showTermsForProgram","getPrices","coursesWithParticipants","PricesAndDiscounts","TotalPrice","TotalDiscounts","TotalPriceIncVat","TotalFoodVat","TotalAccommodationVat","TotalOnlineCourseVat","previousCourseList","canClickButton","courselist","missingCourses","missingParticipants","goToPayment","goToSummary","orderButton","hasOverlappingSequencesInPackages","overlappingSequencesCheck","overlappingSequencesInPackages","employees","previousCourse","hasAlreadyBoughtCourse","usersHaveAlreadyBoughtCourse","hasAlreadyBoughtCourses","hasAlreadyBoughtOnlineCourse","usersHaveAlreadyBoughtOnlineCourse","hasAlreadyBoughtProgram","usersHaveAlreadyBoughtProgram","hasAlreadyBoughtPrograms","hasAlreadyBoughtOnlineCourses","hasAccessToCourses","sequenceKeys","getSequencesPublishedStatus","SequenceKeys","basePick","flatRest","basePickBy","baseSet","nested","flatten","MissingField","isEmailField","validationMethods","summaryUrl","payerList","chosenPayerId","hideInLists","referenceNo","backLink","billingAddress","billingPostCode","billingCity","necessaryFields","missingFields","dataUpdated","validatePayer","payerId","missingPayerInfo","missingPayer","distinctParticipants","GetDistinctParticipants","setValidation","updatePayerInformation","updateBillingInformationForAgency","personData","updateBillingInformationForEmployee","fillNecessaryFields","setMissingFields","tmpFields","updatePayerInCart","getEmployee","HideInLists","ReferenceNo","currentPayer","showTime","DigitalSigningOrderForm","model","checkedAgencies","Agencies","Checked","tokenKey","apiEndpoint","ApiEndpoint","User","blockId","BlockId","formTextTop","FormTextTop","formTextMiddle","FormTextMiddle","formTextBottom","FormTextBottom","consentText","FormConsentText","successUrl","SuccessRedirectUrl","ErrorText","notAgencyAdminText","NotAgencyAdminText","showErrorText","checkedConsent","checkedNotDisabledAgencies","chkAgencyId","Disabled","formSubmittable","labelTextForAgency","onSubmit","consent","Success","categoryName","labels","Loader","triggerLoading","MyCoursesBlock","numberOfOnlineCourses","numberOfRegularCourses","getNumberOfPlannedCourses","numberOfPlannedCoursesUrl","addedText","isCompact","isInArticle","notifyChangeInCategory","buttonText","readMore","isVisible","continuePurchaseText","continuePurchaseUrl","continueText","continueUrl","courseCatalogUrl","calculatorPageUrl","showCalculatorLink","showCalculator","isCalculatorAvailableForUser","deleteCourseIfEnter","updateVisualizationInMenu","wHeight","$shoppingCart","mainHeaderHeight","SubmitButton","closeButtonText","RatingItem","icon","isSelected","sequenceKey","hasRated","comment","selectedItems","showError","ratingList","updateRating","arrayForEach","ratingItem","itemList","postChanges","rateValue","ratingValue","ratingComment","reload","log","stopButtonText","videoUrl","thumbnailUrl","videoIsPlaying","playVideo","stopVideo","_dragged","dynamicHeight","parentClass","enterkey","allBindings","fadeVisible","useElement","domNodeDisposal","addDisposeCallback","allBinidingsAccessor","toggleVar","numeric","integer","decimal","datepickerSettings","oldDates","noFutureDates","dragOptions","unwrapObservable","dropOptions","defaultValidationMessages","isNumber","isEmail","isNotOnlyWhitespace","isOptional","isDecimalNumber","isCheckedOff","isValidCalculatorHour","isPositiveNumber","isLargerThan","isMinLength","isNotEmpty","PersonNumber","isRNPassword","isEqualTo","extenders","requiredMethods","validateAsync","rm","validationMessage","validate","AccordionList","ParentAccordionList","FormSelect","FrontPageCarousel","ListViewToggler","FilterCourse","RegularCourse","DisciplineInterests","BlockUnauthorized","ProfileEmployer","ProfileHeader","ProfileBureauSubscriptions","ProfileBureauInsurancesChanges","FilterLinks","CourseFactsBlock","UserProfileBlock","Footer","HeaderMain","HeaderSub","CourseList","CoursesList","TinyCourseList","BlockList","BlockArticle","BlockMagazine","SponsorBlock","DisciplineArticleSearch","CalculatorSimple","Calculator","FindAccountants","ProfileBureauEmployeeList","OverviewPage","SearchContent","LoginReset","EmployeeList","RegistrationPage","MarketingTeaserTile","SearchBlock","HappeningList","FilterHappening","CallToAction","$toggler","handleAccordionToggle","clickCallback","$container","$this","accordionList","$listEl","$chosenEl","selectedValue","$slide","$indicator","$slideId","$nextBtn","$prevBtn","numberSlides","timeInterval","intervalObj","stopAutoSlider","setStateIndicator","$currentId","$indicators","showNextSlide","$activeSlide","$activeId","$indicatorW","setPosIndicators","toggleVal","$listView","$tileView","hashHelper","OrderElement","orderObservable","CourseFilters","initEndpoint","hasher","selectedUpdateEl","selectedUpdateObj","bookkeeping","auditorOptions","auditor","revision","tax","valuation","selectedType","selectedAuthorization","ordering","initialPlaceValue","initialUpdateValue","coursePlacesArr","coursePlaces","showAccountant","showAuditor","orderElements","resetFilters","changeAuthorizationType","currentlySelectedPlace","RegionList","CityList","filterModel","removeApi","verifyCancelCourse","FilterInterest","CategoryName","getCheckedCategoryKeysFromKO","koCategories","getFilters","FilterInterests","BlockModel","BlockUnAuthorized","EmployersModel","employers","indexedEmployers","indexEmployers","currentEmployerName","currentEmployer","chooseCompany","showSearchQuery","toggleSearchQuery","addAgencyConnectionUrl","addEmployer","addChosenEmployer","chosenEmployer","_getIndexOfCurrentEmployer","verifyRemoveEmployer","endAgencyConnectionUrl","companyName","orgNr","address","removeEmployer","tmpEmployer","PasswordModal","closeModalFunc","oldPassword","newPassword","confirmPassword","validationText","$passwordModal","changePassword","$passwordBtn","$passwordModalClose","BureauSubscriptionItem","contact","BureauSubscriptionList","totalSubscriptions","totalPages","emptySubscription","activeSubscription","modalActive","deleteModal","BureauSubscription","editItem","editSubscription","askRemoveSubscription","addSubscription","cancelRemove","$bureauSubscriptions","BureanInsurancesChanges","$bureauInsurances","$codeEl","codeEl","$cityEl","cityEl","$postalCodes","tab","tabNumber","$allTabs","$activeTabs","FooterViewModel","HeaderViewModel","$header","hoverDelay","whitespaceRightOfMenu","keepSubMenuOpen","menuIsHovered","submenuIsHovered","me","toggleItem","mainHeader","menuItems","menuItemsContent","menuItemContent","removeOpenState","$searchButtonItem","$searchButtonDesktop","$searchField","HeaderSubViewModel","listModel","currentPageLocal","maxItemsForCurrentQuery","showTextAboutFindingNetCourses","changeFilterToOnlineCourses","tileView","toggleTileView","toggleListView","selectedPage","additionalFilters","$externalCourse","InstructorList","courseListArray","courseIsPurchased","$blockToTruncate","calculateHeightForTruncate","blockToTruncate","blockMagazine","$blocks","updateHeights","getContentMaxHeight","matchHeights","block","lines","$heading","headingLineHeight","getLineHeight","textLineHeight","headingLineCount","heightMax","blockHeight","$carousel","$inner","$items","itemWidth","transitionEnabled","isAnimating","autoRotate","transition","setNewPosition","rotate","SponsorsBlock","categoryList","yearList","years","getYearList","activeQuery","tags","searchTag","doSelectize","currentRelevanceSortingClick","relevanceSort","categoriesChecked","checkedCategories","request","hits","ArticleSearch","enquire","small","unmatch","showTypes","authorizationAccountant","authorizationAuditor","SimpleCalculatorViewModel","$simpleCalculator","MediaQuery","Util","matchMedia","queries","browserIsIncapable","shouldDegrade","isUnconditional","addHandler","removeHandler","QueryHandler","mql","listener","assess","constuctor","qh","equals","removeListener","deferSetup","initialised","CalculatorModule","FindAccountantsModule","$findAccountants","bureauList","$overviewPage","overview","SEARCH_TYPES","SEARCH","SORT_TYPES","SORT","SearchComponent","SearchPage","dataSearch","searchInput","resultBlock","articleResults","courseResults","productResults","tabTotalResults","totalResults","currentSort","searchValue","showResults","hasNoResults","handleSearchInput","getParamsFromHash","newPage","constructSearchParams","createHash","TotalArticleResults","TotalCourseResults","TotalProductResults","CourseResults","ArticleResults","ProductResults","getSearchParameterFromHash","queryParams","handleFilterClick","srcElement","handleSortClick","searchPage","$admin","OrganizationEmployeeList","$listItems","$height","$registrationPage","applyBindingsForElement","$myCoursesPage","$courseRegistrationOverview","$courseRegistrationParticipants","$reportPage","$searchBlock","happeningListModel","currentRequest","searchBaseUrl","origin","happeningList","pageSize","selectedFilters","urlSearchParams","URLSearchParams","searchUrl","queryStr","happenings","$happeningList","HappeningFilters","updateAndPublishFilter","$typeSelect","$placeSelect","placeText","happeningFilterModel","$togglerMenu","$mainMenuMob","$searchContainerMob","$searchContainer","$searchFieldMob","equalHeightTiles","medium","large","doEqualHeightTiles","$tile","$textArea","tallest","textHeight"],"mappings":"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","file":"newmain.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 106);\n","/*!\n * Knockout JavaScript library v3.5.1\n * (c) The Knockout.js team - http://knockoutjs.com/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n\n(function() {(function(n){var A=this||(0,eval)(\"this\"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||\"undefined\"===typeof jQuery||(v=jQuery);(function(n){\"function\"===typeof define&&define.amd?define([\"exports\",\"require\"],n):\"object\"===typeof exports&&\"object\"===typeof module?n(module.exports||exports):n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);\nd=a.a.setTimeout(b,c)}}function Z(a,c){c&&\"change\"!==c?\"beforeChange\"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a=\"undefined\"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split(\".\"),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version=\"3.5.1\";a.b(\"version\",\na.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(\" \")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h=\"function\"===typeof Symbol,m={},k={};m[R&&/Firefox\\/2/i.test(R.userAgent)?\n\"KeyboardEvent\":\"UIEvents\"]=[\"keyup\",\"keydown\",\"keypress\"];m.MouseEvents=\"click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\".split(\" \");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement(\"div\"),c=b.getElementsByTagName(\"i\");b.innerHTML=\"\\x3c!--[if gt IE \"+ ++a+\"]><i></i><![endif]--\\x3e\",c[0];);return 4<a?a:n}(),q=/\\S+/g,t;return{Jc:[\"authenticity_token\",/^__RequestVerificationToken(_.*)?$/],\nD:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:\"function\"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,\nb,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=\nb.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement(\"div\"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],\nl=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute(\"selected\",b):a.selected=b},Db:function(a){return null===a||a===n?\"\":a.trim?\na.trim():a.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")},Ud:function(a,b){a=a||\"\";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&\na.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||\"function\"!=typeof b.addEventListener)if(\"undefined\"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f=\"on\"+c;b.attachEvent(f,\nk);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error(\"Browser doesn't support addEventListener or attachEvent\");else b.addEventListener(c,e,!1);else t||(t=\"function\"==typeof v(b).on?\"on\":\"bind\"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error(\"element must be a DOM node when calling triggerEvent\");var d;\"input\"===a.a.R(b)&&b.type&&\"click\"==c.toLowerCase()?(d=b.type,d=\"checkbox\"==d||\"radio\"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if(\"function\"==typeof w.createEvent)if(\"function\"==\ntypeof b.dispatchEvent)d=w.createEvent(k[c]||\"HTMLEvents\"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error(\"The supplied element doesn't support dispatchEvent\");else if(d&&b.click)b.click();else if(\"undefined\"!=typeof b.fireEvent)b.fireEvent(\"on\"+c);else throw Error(\"Browser doesn't support triggering events\");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&(\"object\"===typeof b.classList?\n(l=b.classList[d?\"add\":\"remove\"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):\"string\"===typeof b.className.baseVal?e(b.className,\"baseVal\",c,d):e(b,\"className\",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d=\"\";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'\"]/g,function(a){return\"&#\"+a.charCodeAt(0)+\";\"});a.mergeAttributes(w.createElement(\"<input name='\"+\nc+\"'/>\"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName(\"input\")).concat(a.a.la(b.getElementsByTagName(\"textarea\"))),\ne=\"string\"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return\"string\"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function(\"return \"+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\");\nreturn H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if(\"object\"==typeof c&&\"form\"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement(\"form\");p.style.display=\"none\";p.action=f;p.method=\"post\";for(var q in d)c=w.createElement(\"input\"),c.type=\"hidden\",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement(\"input\");\nc.type=\"hidden\";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b(\"utils\",a.a);a.b(\"utils.arrayForEach\",a.a.D);a.b(\"utils.arrayFirst\",a.a.Lb);a.b(\"utils.arrayFilter\",a.a.jb);a.b(\"utils.arrayGetDistinctValues\",a.a.wc);a.b(\"utils.arrayIndexOf\",a.a.A);a.b(\"utils.arrayMap\",a.a.Mb);a.b(\"utils.arrayPushAll\",a.a.Nb);a.b(\"utils.arrayRemoveItem\",a.a.Pa);a.b(\"utils.cloneNodes\",a.a.Ca);a.b(\"utils.createSymbolOrString\",\na.a.Da);a.b(\"utils.extend\",a.a.extend);a.b(\"utils.fieldsIncludedWithJsonPost\",a.a.Jc);a.b(\"utils.getFormFields\",a.a.Lc);a.b(\"utils.objectMap\",a.a.Ga);a.b(\"utils.peekObservable\",a.a.bc);a.b(\"utils.postJson\",a.a.Od);a.b(\"utils.parseJson\",a.a.Nd);a.b(\"utils.registerEventHandler\",a.a.B);a.b(\"utils.stringifyJson\",a.a.hc);a.b(\"utils.range\",a.a.Pd);a.b(\"utils.toggleDomNodeCssClass\",a.a.Eb);a.b(\"utils.triggerEvent\",a.a.Fb);a.b(\"utils.unwrapObservable\",a.a.f);a.b(\"utils.objectForEach\",a.a.P);a.b(\"utils.addOrRemoveItem\",\na.a.Na);a.b(\"utils.setTextContent\",a.a.Bb);a.b(\"unwrap\",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c=\"__ko__\"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||\"null\"===f||!d[f]){if(!e)return n;f=a[c]=\"ko\"+b++;d[f]=\n{}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b(\"utils.domData\",a.a.g);a.b(\"utils.domData.clear\",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);\nd===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if(\"function\"!=typeof c)throw Error(\"Callback must be a function\");b(a,!0).push(c)},yb:function(c,\nd){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName(\"*\")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&\"function\"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b(\"cleanNode\",a.oa);a.b(\"removeNode\",a.removeNode);a.b(\"utils.domNodeDisposal\",a.a.K);a.b(\"utils.domNodeDisposal.addDisposeCallback\",\na.a.K.za);a.b(\"utils.domNodeDisposal.removeDisposeCallback\",a.a.K.yb);(function(){var b=[0,\"\",\"\"],c=[1,\"<table>\",\"</table>\"],d=[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],e=[1,\"<select multiple='multiple'>\",\"</select>\"],f={thead:c,tbody:c,tfoot:c,tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;\nl.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement(\"div\"),t;t=(p=p.match(/^(?:\\x3c!--.*?--\\x3e\\s*?)*?<([a-z]+)[\\s>]/))&&f[p[1]]||b;p=t[0];t=\"ignored<div>\"+t[1]+c+t[2]+\"</div>\";\"function\"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,\nc);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if(\"string\"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b(\"utils.parseHtmlFragment\",a.a.ua);a.b(\"utils.setHtml\",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],\ne)}var c={};return{Xb:function(a){if(\"function\"!=typeof a)throw Error(\"You can only pass a function to ko.memoization.memoize()\");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return\"\\x3c!--[ko_memo:\"+b+\"]--\\x3e\"},bd:function(a,b){var f=c[a];if(f===n)throw Error(\"Couldn't find any memo with ID \"+a+\". Perhaps it's already been unmemoized.\");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=\n[];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue=\"\";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\\[ko_memo\\:(.*?)\\]$/))?a[1]:null}}}();a.b(\"memoization\",a.aa);a.b(\"memoization.memoize\",a.aa.Xb);a.b(\"memoization.unmemoize\",a.aa.bd);a.b(\"memoization.parseMemoText\",a.aa.Uc);a.b(\"memoization.unmemoizeDomNodeAndDescendants\",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=\n++c){h=f;a.a.Gc(Error(\"'Too much recursion' after processing \"+c+\" task groups.\"));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement(\"div\");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle(\"foo\")}}(c):d=w&&\"onreadystatechange\"in w.createElement(\"script\")?function(a){var b=w.createElement(\"script\");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);\nb=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b(\"tasks\",a.na);a.b(\"tasks.schedule\",a.na.zb);a.b(\"tasks.runEarly\",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},\nc)}})},rateLimit:function(a,c){var d,e,f;\"number\"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f=\"function\"==typeof e?e:\"notifyWhenChangesStop\"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error(\"The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.\");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,\"dirty\")}finally{f=\n!1}}}}))},notify:function(a,c){a.equalityComparer=\"always\"==c?null:K}};var W={undefined:1,\"boolean\":1,number:1,string:1};a.b(\"extenders\",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,\"dispose\",this.s);a.L(this,\"disposeWhenNodeIsRemoved\",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};\na.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||\"change\";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||\"change\";\"change\"===c&&this.Gb();if(this.Wa(c)){var d=\"change\"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},\nDd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,\"beforeChange\"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},\nBd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){\"dirty\"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return\"[object Object]\"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];\"function\"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,\"init\",D.qb);a.L(D,\"subscribe\",D.subscribe);a.L(D,\"extend\",D.extend);a.L(D,\"getSubscriptionsCount\",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,\nFunction.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&\"function\"==typeof a.subscribe&&\"function\"==typeof a.notifySubscribers};a.b(\"subscribable\",a.T);a.b(\"isSubscribable\",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error(\"Only subscribable things can act as dependencies\");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},\nVa:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b(\"computedContext\",a.S);a.b(\"computedContext.getDependenciesCount\",a.S.qa);a.b(\"computedContext.getDependencies\",a.S.Va);a.b(\"computedContext.isInitial\",a.S.Ya);a.b(\"computedContext.registerDependency\",a.S.cc);a.b(\"ignoreDependencies\",a.Yd=a.u.G);var I=a.a.Da(\"_latestValue\");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;\na.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],\"spectate\");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],\"beforeChange\")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma=\"__ko_proto__\";F[G]=a.ta;a.O=function(b){if((b=\"function\"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error(\"Invalid object that looks like an observable; possibly from another Knockout instance\");\nreturn!!b};a.Za=function(b){return\"function\"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b(\"observable\",a.ta);a.b(\"isObservable\",a.O);a.b(\"isWriteableObservable\",a.Za);a.b(\"isWritableObservable\",a.Za);a.b(\"observable.fn\",F);a.L(F,\"peek\",F.v);a.L(F,\"valueHasMutated\",F.xa);a.L(F,\"valueWillMutate\",F.ya);a.Ha=function(b){b=b||[];if(\"object\"!=typeof b||!(\"length\"in b))throw Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\");b=a.ta(b);a.a.Ab(b,\na.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error(\"Array modified during remove; cannot remove item\");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=\na.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);\nreturn a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D(\"pop push reverse shift sort splice unshift\".split(\" \"),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D([\"slice\"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&\"function\"==typeof b.remove&&\"function\"==\ntypeof b.push};a.b(\"observableArray\",a.Ha);a.b(\"isObservableArray\",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa(\"arrayChange\")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,\"arrayChange\")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,\"spectate\"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&\"object\"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,\nk,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);\"arrayChange\"===a&&d()};b.hb=function(a){p&&p.call(b,a);\"arrayChange\"!==a||b.Wa(\"arrayChange\")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case \"push\":h=p;case \"unshift\":for(c=0;c<g;c++)l(\"added\",d[c],h+c);break;case \"pop\":h=p-1;case \"shift\":p&&l(\"deleted\",b[h],h);break;case \"splice\":c=Math.min(Math.max(0,0>d[0]?p+d[0]:\nd[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l(\"deleted\",b[c],c)),c<g&&U.push(l(\"added\",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da(\"_state\");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if(\"function\"===typeof f)f.apply(g.nb,arguments);else throw Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\");return this}g.ra||\na.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}\"object\"===typeof b?d=b:(d=d||{},b&&(d.read=b));if(\"function\"!=typeof d.read)throw Error(\"Pass a function that returns the value of the ko.computed\");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc=\"function\"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):\nd.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&\nc===this)throw Error(\"A 'pure' computed must not be called recursively\");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,\"dirty\"),d=a.subscribe(this.Rd,\nthis);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,\nod:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,\"beforeChange\"),c.X=f,this.notifySubscribers(c.X,\"spectate\"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,\"awake\");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},\nub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&\"change\"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=\n0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,\"awake\")}},hb:function(b){var c=this[r];c.ra||\"change\"!=b||this.Wa(\"change\")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,\"asleep\"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){\"change\"!=\na&&\"beforeChange\"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return\"function\"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b(\"computed\",a.o);a.b(\"dependentObservable\",a.o);a.b(\"isComputed\",a.Oc);a.b(\"isPureComputed\",a.Fd);a.b(\"computed.fn\",C);a.L(C,\"peek\",C.v);a.L(C,\"dispose\",C.s);a.L(C,\"isActive\",C.ja);a.L(C,\"getDependenciesCount\",C.qa);a.L(C,\"getDependencies\",C.Va);a.xb=function(b,c){if(\"function\"===typeof b)return a.o(b,\nc,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b(\"pureComputed\",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if(\"object\"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case \"boolean\":case \"number\":case \"string\":case \"function\":h[c]=d;break;case \"object\":case \"undefined\":var l=g.get(d);h[c]=l!==\nn?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);\"function\"==typeof a.toJSON&&b(\"toJSON\")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error(\"When calling ko.toJS, pass the object you want to convert.\");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,\nb);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b(\"toJS\",a.ad);a.b(\"toJSON\",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:\"always\"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return\"function\"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b(\"when\",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case \"option\":return!0===b.__ko__hasDomDataOptionValue__?\na.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode(\"value\")&&b.getAttributeNode(\"value\").specified?b.value:b.text:b.value;case \"select\":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case \"option\":\"string\"===typeof c?(a.a.g.set(b,a.c.options.$b,n),\"__ko__hasDomDataOptionValue__\"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value=\"number\"===\ntypeof c?c:\"\");break;case \"select\":if(\"\"===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||\"\"===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c=\"\";b.value=c}}}})();a.b(\"selectExtensions\",a.w);a.b(\"selectExtensions.readValue\",a.w.M);a.b(\"selectExtensions.writeValue\",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,\n-1));b+=\"\\n,\";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join(\"\")}:{unknown:p||q.join(\"\")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B=\"/\"):40===u||123===u||91===u?++h:\n41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error(\"Unbalanced parentheses, braces, or brackets\");}return c}var c=[\"true\",\"false\",\"null\",\"undefined\"],d=/^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i,e=RegExp(\"\\\"(?:\\\\\\\\.|[^\\\"])*\\\"|'(?:\\\\\\\\.|[^'])*'|`(?:\\\\\\\\.|[^`])*`|/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/|//.*\\n|/(?:\\\\\\\\.|[^/])+/w*|[^\\\\s:,/][^,\\\"'`{}()/:[\\\\]]*[^\\\\s,\\\"'`{}()/:[\\\\]]|[^\\\\s]\",\"g\"),f=/[\\])\"'A-Za-z0-9_$]+$/,g={\"in\":1,\"return\":1,\"typeof\":1},\nh={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?\"Object(\"+k[1]+\")\"+k[2]:f),k=f;k&&q.push(\"'\"+(\"string\"==typeof h[b]?h[b]:b)+\"':function(_z){\"+f+\"=_z}\")}g&&(e=\"function(){return \"+e+\" }\");p.push(\"'\"+b+\"':\"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B=\"string\"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,\na.value)});q.length&&l(\"_ko_property_writers\",\"{\"+q.join(\",\")+\" }\");return p.join(\",\")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get(\"_ko_property_writers\"))&&b[d])b[d](e)}}}();a.b(\"expressionRewriting\",a.m);a.b(\"expressionRewriting.bindingRewriteValidators\",a.m.Ra);a.b(\"expressionRewriting.parseObjectLiteral\",a.m.ac);a.b(\"expressionRewriting.preProcessBindings\",a.m.vb);a.b(\"expressionRewriting._twoWayBindings\",\na.m.wa);a.b(\"jsonExpressionRewriting\",a.m);a.b(\"jsonExpressionRewriting.insertPropertyAccessorsIntoJson\",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error(\"Cannot find closing comment tag to match: \"+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?\n0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&\"\\x3c!--test--\\x3e\"===w.createComment(\"test\").text,g=f?/^\\x3c!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*--\\x3e$/:/^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/,h=f?/^\\x3c!--\\s*\\/ko\\s*--\\x3e$/:/^\\s*\\/ko\\s*$/,m={ul:!0,ol:!0},k=\"__ko_matchedEndComment__\";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=\nc.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error(\"Found invalid end comment, as the first child of \"+\na);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error(\"Found end comment without a matching opening comment, as child of \"+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=\ng:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b(\"virtualElements\",a.h);a.b(\"virtualElements.allowedBindings\",a.h.ea);a.b(\"virtualElements.emptyNode\",a.h.Ea);a.b(\"virtualElements.insertAfter\",a.h.Wb);a.b(\"virtualElements.prepend\",a.h.Vc);a.b(\"virtualElements.setDomNodeChildren\",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=\nb.getAttribute(\"data-bind\")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute(\"data-bind\");case 8:return a.h.Vd(b);default:return null}},\nparseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||\"\"),h;if(!(h=f[g])){var m,k=\"with($context){with($data||{}){return{\"+a.m.vb(b,e)+\"}}}\";m=new Function(\"$context\",\"$element\",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message=\"Unable to parse bindings.\\nBindings value: \"+b+\"\\nMessage: \"+l.message,l;}}});a.ga.instance=new a.ga})();a.b(\"bindingProvider\",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=\nd;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return\"function\"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);\nd=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error(\"Cannot combine the following bindings, because they have a cyclic dependency: \"+e.join(\", \"));\nca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error(\"You cannot apply bindings multiple times to the same element.\");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&\"function\"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():\ng,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error(\"The binding '\"+\nf+\"' cannot be used with virtual elements\");try{\"function\"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error(\"Multiple bindings (\"+u+\" and \"+f+\") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\");u=f}}),\"function\"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding \"'+f+\": \"+g[f]+'\"\\nMessage: '+k.message,\nk;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da(\"_subscribable\"),x=a.a.Da(\"_ancestorBindingInfo\"),B=a.a.Da(\"_dataDependency\");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=\nb,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p=\"function\"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&\"object\"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f=\"function\"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,\nthis,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,\"function\"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=\nnull,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:\"childrenComplete\",pa:\"descendantsComplete\",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error(\"descendantsComplete event not supported for bindings on this node\");\n},Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error(\"ko.applyBindings: could not find document.body; has the document been loaded?\");\n}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b(\"bindingHandlers\",a.c);a.b(\"bindingEvent\",a.i);a.b(\"bindingEvent.subscribe\",a.i.subscribe);a.b(\"bindingEvent.startPossiblyAsyncContentBinding\",a.i.Cb);a.b(\"applyBindings\",a.vc);a.b(\"applyBindingsToDescendants\",a.Oa);\na.b(\"applyBindingAccessorsToNode\",a.ib);a.b(\"applyBindingsToNode\",a.ld);a.b(\"contextFor\",a.Dc);a.b(\"dataFor\",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e(\"getConfig\",[a],function(c){c?e(\"loadComponent\",[a,c],function(a){b(a,\nc)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error(\"Component loaders must supply values by invoking the callback, not by returning values synchronously.\");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):\na.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b(\"components\",a.j);a.b(\"components.get\",a.j.get);a.b(\"components.clearCachedDefinition\",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc(\"loadTemplate\",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc(\"loadViewModel\",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if(\"function\"===typeof b)d(function(a){return new b(a)});\nelse if(\"function\"===typeof b[m])d(b[m]);else if(\"instance\"in b){var e=b.instance;d(function(){return e})}else\"viewModel\"in b?c(a,b.viewModel,d):a(\"Unknown viewModel value: \"+b)}function d(b){switch(a.a.R(b)){case \"script\":return a.a.ua(b.text);case \"textarea\":return a.a.ua(b.value);case \"template\":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){\"string\"===typeof b.require?\nT||A.require?(T||A.require)([b.require],function(a){a&&\"object\"===typeof a&&a.Xd&&a[\"default\"]&&(a=a[\"default\"]);c(a)}):a(\"Uses require, but no AMD loader is present\"):c(b)}function g(a){return function(b){throw Error(\"Component '\"+a+\"': \"+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error(\"Invalid configuration for \"+b);if(a.j.tb(b))throw Error(\"Component \"+b+\" is already registered\");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];\na.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if(\"string\"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if(\"string\"===typeof c){var h=w.getElementById(c);h?f(d(h)):b(\"Cannot find element with ID \"+c)}else b(\"Unknown element type: \"+\nc);else b(\"Unknown template value: \"+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m=\"createViewModel\";a.b(\"components.register\",a.j.register);a.b(\"components.isRegistered\",a.j.tb);a.b(\"components.unregister\",a.j.unregister);a.b(\"components.defaultLoader\",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute(\"params\");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,\nfunction(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,\"$raw\")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf(\"-\")||\"[object HTMLUnknownElement]\"==\"\"+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the \"component\" binding on a custom element matching a component');\nvar m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error(\"Component '\"+b+\"' has no template\");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,\nb,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;\"function\"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;\"string\"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error(\"No component name specified\");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error(\"Unknown component '\"+h+\"'\");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});\nd=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={\"class\":\"className\",\"for\":\"htmlFor\"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(\":\"),g=\"lookupNamespaceURI\"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===\nd||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));\"name\"===c&&a.a.Yc(b,h?\"\":d)})}};(function(){a.c.checked={after:[\"value\",\"attr\"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,\nd,\"checked\",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has(\"checkedValue\"))return a.a.f(d.get(\"checkedValue\"));if(q)return d.has(\"value\")?a.a.f(d.get(\"value\")):b.value}),h=\"checkbox\"==b.type,m=\"radio\"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,\"click\",e);a.o(f,null,{l:b});\nk=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c[\"class\"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&\"object\"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c[\"class\"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute(\"disabled\"):d||b.disabled||(b.disabled=!0)}};a.c.disable=\n{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){\"string\"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+\"Bubble\")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);\nif(!d||\"number\"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=\n!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if(\"activeElement\"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,\"hasfocus\",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,\"focus\",f);a.a.B(b,\"focusin\",f);a.a.B(b,\"blur\",g);a.a.B(b,\"focusout\",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===\nd||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?\"focusin\":\"focusout\"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus=\"hasfocus\";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get(\"as\");var u=h.get(\"noChildContext\");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=\n\"render\"==h.get(\"completeOn\"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext(\"function\"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b(\"if\");b(\"ifnot\",!1,!0);b(\"with\",!0)})();a.c.let={init:function(b,\nc,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if(\"select\"!==a.a.R(b))throw Error(\"options binding applies only to SELECT elements\");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return\"function\"==d?b(a):\"string\"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=\n0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,\"change\"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get(\"valueAllowUnset\")&&d.has(\"value\"),p=d.get(\"optionsIncludeDestroyed\");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&(\"undefined\"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has(\"optionsCaption\")&&(k=a.a.f(d.get(\"optionsCaption\")),null!==\nk&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has(\"optionsAfterRender\")&&\"function\"==typeof d.get(\"optionsAfterRender\")&&(k=function(b,c){g(0,c);a.u.G(d.get(\"optionsAfterRender\"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement(\"option\");c===Q?(a.a.Bb(e,d.get(\"optionsCaption\")),a.w.cb(e,n)):(g=f(c,d.get(\"optionsValue\"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get(\"optionsText\"),g),\na.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,\"change\"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName(\"option\"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,\"selectedOptions\",\nf)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&\"number\"==typeof d.length&&a.a.D(b.getElementsByTagName(\"option\"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if(\"select\"!=a.a.R(b))throw Error(\"selectedOptions binding applies only to SELECT elements\");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,\"change\",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||\n{});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d=\"\";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+\"px\")}})}};a.c.submit={init:function(b,c,d,e,f){if(\"function\"!=typeof c())throw Error(\"The value for a submit binding must be a function\");a.a.B(b,\"submit\",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?\na.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\\/([^ ]+)$/)))||b(c.match(/Chrome\\/([^ ]+)/))||(e=b(c.match(/Version\\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||\n(g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,\"selectionchange\",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d=\"\";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,\n4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,\"textInput\",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l(\"keypress\",z);11>g&&l(\"propertychange\",function(a){y||\"value\"!==a.propertyName||A(a)});8==g&&(l(\"keyup\",z),l(\"keydown\",z));p&&(p(b,A),l(\"dragend\",r));(!g||9<=g)&&l(\"input\",A);5>e&&\"textarea\"===a.a.R(b)?(l(\"keydown\",r),l(\"paste\",r),l(\"cut\",r)):11>d?l(\"keydown\",r):4>f?(l(\"DOMAutoComplete\",z),l(\"dragdrop\",z),l(\"drop\",z)):h&&\"number\"===b.type&&l(\"keydown\",r);l(\"change\",\nz);l(\"blur\",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c(\"textInput\",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d=\"ko_unique_\"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has(\"as\")&&(g={as:d.get(\"as\"),noChildContext:d.get(\"noChildContext\")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f=\"input\"==\ne;if(!f||\"checkbox\"!=b.type&&\"radio\"!=b.type){var g=[],h=d.get(\"valueUpdate\"),m=!1,k=null;h&&(\"string\"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,\"change\"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,\"value\",f)};!a.a.W||!f||\"text\"!=b.type||\"off\"==b.autocomplete||b.form&&\"off\"==b.form.autocomplete||-1!=a.a.A(g,\"propertychange\")||(a.a.B(b,\"propertychange\",function(){m=!0}),a.a.B(b,\"focus\",function(){m=!1}),a.a.B(b,\"blur\",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,\"after\")&&\n(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&\"file\"==b.type?function(){var d=a.a.f(c());null===d||d===n||\"\"===d?b.value=\"\":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)\"select\"===e?(g=d.get(\"valueAllowUnset\"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if(\"select\"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get(\"valueAllowUnset\")?p():l():(a.a.B(b,\"change\",l),q=a.o(p,null,{l:b}))},\nnull,{notifyImmediately:!0})}else a.a.B(b,\"change\",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e=\"none\"!=b.style.display;d&&!e?b.style.display=\"\":!d&&e&&(b.style.display=\"none\")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})(\"click\");\na.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error(\"Override renderTemplateSource\");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error(\"Override createJavaScriptEvaluatorBlock\");};a.ca.prototype.makeTemplateSource=function(b,c){if(\"string\"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error(\"Cannot find template with ID \"+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error(\"Unknown template type: \"+b);};a.ca.prototype.renderTemplate=\nfunction(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data(\"isRewritten\")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data(\"isRewritten\",!0)};a.b(\"templateEngine\",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,\nl)){var p=m[l];if(\"function\"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error(\"This template engine does not support the '\"+l+\"' binding within its templates\");}}d=\"ko.__tr_ambtns(function($context,$element){return(function(){return{ \"+a.m.vb(b,{valueAccessors:!0})+\" } })()},'\"+d.toLowerCase()+\"')\";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\\d*)(?:\\s+(?!data-bind\\s*=\\s*)[a-z0-9\\-]+(?:=(?:\\\"[^\\\"]*\\\"|\\'[^\\']*\\'|[^>]*))?)*\\s+)data-bind\\s*=\\s*([\"'])([\\s\\S]*?)\\3/gi,\nd=/\\x3c!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*--\\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,\"\\x3c!-- ko --\\x3e\",\"#comment\",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b(\"__tr_ambtns\",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=\na.a.R(b);this.ab=\"script\"===c?1:\"textarea\"===c?2:\"template\"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?\"text\":2===this.ab?\"value\":\"innerHTML\";if(0==arguments.length)return this.F[b];var c=arguments[0];\"innerHTML\"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+\"_\";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;\nif(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text(\"\");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,\nc,{bb:arguments[0]})};a.b(\"templateSources\",a.C);a.b(\"templateSources.domElement\",a.C.F);a.b(\"templateSources.anonymousTemplate\",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):\n(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if(\"number\"!=typeof f.length||0<f.length&&\"number\"!=typeof f[0].nodeType)throw Error(\"Template engine must return an array of DOM nodes\");n=!1;switch(e){case \"replaceChildren\":a.h.va(b,\nf);n=!0;break;case \"replaceNode\":a.a.Xc(b,f);n=!0;break;case \"ignoreTargetNode\":break;default:throw Error(\"Unknown renderMode: \"+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||\"$data\"]]),\"replaceChildren\"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():\"function\"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error(\"templateEngine must inherit from ko.templateEngine\");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==\nn)throw Error(\"Set a template engine before calling renderTemplate\");t=t||\"replaceChildren\";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);\"replaceNode\"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&\"replaceNode\"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,\"replaceNode\")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}\nfunction r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+\"Index\"]=c)}});var d=f(b,a,v);return e(h,\"ignoreTargetNode\",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];\"undefined\"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||\n!a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,\"arrayChange\");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if(\"string\"==typeof d||\"name\"in d)a.h.Ea(b);else if(\"nodes\"in d){d=d.nodes||[];if(a.O(d))throw Error('The \"nodes\" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=\na.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error(\"Anonymous template defined, but no template content was provided\");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;\"string\"==typeof c?c={}:(g=\"name\"in c?c.name:b,\"if\"in c&&(d=a.a.f(c[\"if\"])),d&&\"ifnot\"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));\"foreach\"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,\"data\"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),\ne=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&\"function\"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,\"name\")?null:\"This template engine does not support anonymous templates nested within its templates\"};a.h.ea.template=!0})();a.b(\"setTemplateEngine\",a.gc);a.b(\"renderTemplate\",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===\nm.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):\n(--q,--l,g.sparse||h.push({status:\"retained\",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e=\"boolean\"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,\"added\",\"deleted\",e):b(d,a,\"deleted\",\"added\",e)}}();a.b(\"utils.compareArrays\",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});\nreturn{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];\"undefined\"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=\na.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case \"deleted\":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case \"added\":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,\nh.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);\nq(h.afterAdd,F)}})();a.b(\"utils.setDomNodeChildrenFromArrayMapping\",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b(\"nativeTemplateEngine\",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf(\"__\"))return 2}catch(a){}return 1}();\nthis.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\");var h=b.data(\"precompiled\");h||(h=b.text()||\"\",h=v.template(null,\"{{ko_with $item.koBindingContext}}\"+h+\"{{/ko_with}}\"),b.data(\"precompiled\",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement(\"div\"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return\"{{ko_code ((function() { return \"+\na+\" })()) }}\"};this.addTemplate=function(a,b){w.write(\"<script type='text/html' id='\"+a+\"'>\"+b+\"\\x3c/script>\")};0<a&&(v.tmpl.tag.ko_code={open:\"__.push($1 || '');\"},v.tmpl.tag.ko_with={open:\"with($1) {\",close:\"} \"})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b(\"jqueryTmplTemplateEngine\",a.$a)})()})})();})();\n","function Base() {}\r\n\r\nBase.prototype.init = function() {};\r\nBase.prototype.afterInit = function() {};\r\nBase.prototype.destroy = function() {};\r\n\r\nmodule.exports = Base;\r\n","/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n","var $ = require('jquery');\r\n\r\nvar noop = function() {};\r\nvar APIHelper = {};\r\n/**\r\n * @param url: Can be a normal url or a path to a JSON file.\r\n * @param success: The callback function for when the request succeeds.\r\n * @param fail: The callback function for when the request has failed.\r\n **/\r\nAPIHelper.get = function(url, success, fail) {\r\n  // If these callbacks are undefined, set them to a no operation function.\r\n  success = success || noop;\r\n  fail = fail || noop;\r\n  var jsonIndex = url.indexOf('.json');\r\n  // If the url is to a JSON file.\r\n  if (jsonIndex !== -1) {\r\n    // Only use the url up (and including) the .json extension.\r\n    // If we're using a json file we don't need parameters.\r\n    $.getJSON(url.substring(0, jsonIndex + 5), success).fail(fail);\r\n  }\r\n  // Else it is an API call.\r\n  else {\r\n    $.get({ url: url, cache: false, success: success }).fail(fail);\r\n  }\r\n};\r\n/**\r\n * @param url: Can be a normal url or a path to a JSON file.\r\n * @param success: The callback function for when the request succeeds.\r\n * @param fail: The callback function for when the request has failed.\r\n * @param always: The callback function that should always be called regardless of outcome.\r\n **/\r\nAPIHelper.post = function(url, data, success, fail, always) {\r\n  // If these callbacks are undefined, set them to a no operation function.\r\n  success = success || noop;\r\n  fail = fail || noop;\r\n  always = always || noop;\r\n  var jsonIndex = url.indexOf('.json');\r\n  // If the url is to a JSON file.\r\n  if (jsonIndex !== -1) {\r\n    $.getJSON(url.substring(0, jsonIndex + 5), success).fail(fail);\r\n  } else {\r\n    $.post(url, data, success)\r\n      .fail(fail)\r\n      .always(always);\r\n  }\r\n};\r\n\r\nAPIHelper.delete = function(url, data, success, fail) {\r\n  // If these callbacks are undefined, set them to a no operation function.\r\n  success = success || noop;\r\n  fail = fail || noop;\r\n  var jsonIndex = url.indexOf('.json');\r\n  // If the url is to a JSON file.\r\n  if (jsonIndex !== -1) {\r\n    $.getJSON(url.substring(0, jsonIndex + 5), success).fail(fail);\r\n  } else {\r\n    $.ajax({\r\n      url: url,\r\n      type: 'DELETE',\r\n      success: success,\r\n      error: fail\r\n    });\r\n  }\r\n};\r\n\r\nAPIHelper.QcDelete = function(url, data, success, fail) {\r\n  success = success || noop;\r\n  fail = fail || noop;\r\n  var jsonIndex = url.indexOf('.json');\r\n  // If the url is to a JSON file.\r\n  if (jsonIndex !== -1) {\r\n    $.getJSON(url.substring(0, jsonIndex + 5), success).fail(fail);\r\n  } else {\r\n    $.ajax({\r\n      url: url,\r\n      type: 'DELETE',\r\n      success: success,\r\n      error: fail,\r\n      contentType: 'application/json',\r\n      data: JSON.stringify(data),\r\n      dataType: 'json',\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nAPIHelper.QcPost = function(url, data, success, fail) {\r\n  success = success || noop;\r\n  fail = fail || noop;\r\n  var jsonIndex = url.indexOf('.json');\r\n  // If the url is to a JSON file.\r\n  if (jsonIndex !== -1) {\r\n    $.getJSON(url.substring(0, jsonIndex + 5), success).fail(fail);\r\n  } else {\r\n    $.ajax({\r\n      url: url,\r\n      type: 'POST',\r\n      success: success,\r\n      error: fail,\r\n      contentType: 'application/json',\r\n      data: JSON.stringify(data),\r\n      dataType: 'json',\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nmodule.exports = APIHelper;\r\n","// knockout-postbox 0.5.2 | (c) 2015 Ryan Niemeyer |  http://www.opensource.org/licenses/mit-license\n;(function(factory) {\n    //CommonJS\n    if (typeof require === \"function\" && typeof exports === \"object\" && typeof module === \"object\") {\n        factory(require(\"knockout\"), exports);\n    //AMD\n    } else if (typeof define === \"function\" && define.amd) {\n        define([\"knockout\", \"exports\"], factory);\n    //normal script tag\n    } else {\n        factory(ko, ko.postbox = {});\n    }\n}(function(ko, exports, undefined) {\n    var disposeTopicSubscription, existingSubscribe,\n\t\tsubscriptions = {},\n\t\tsubId = 1;\n\n\texports.subscriptions = subscriptions;\n\n    //create a global postbox that supports subscribing/publishing\n    ko.subscribable.call(exports);\n\n    //keep a cache of the latest value and subscribers\n    exports.topicCache = {};\n\n    //allow customization of the function used to serialize values for the topic cache\n    exports.serializer = ko.toJSON;\n\n    //wrap notifySubscribers passing topic first and caching latest value\n    exports.publish = function(topic, value) {\n        if (topic) {\n            //keep the value and a serialized version for comparison\n            exports.topicCache[topic] = {\n                value: value,\n                serialized: exports.serializer(value)\n            };\n            exports.notifySubscribers(value, topic);\n        }\n    };\n\n    //provide a subscribe API for the postbox that takes in the topic as first arg\n    existingSubscribe = exports.subscribe;\n    exports.subscribe = function(topic, action, target, initializeWithLatestValue) {\n        var subscription, current, existingDispose;\n\n        if (topic) {\n            if (typeof target === \"boolean\") {\n                initializeWithLatestValue = target;\n                target = undefined;\n            }\n\n            subscription = existingSubscribe.call(exports, action, target, topic);\n\t\t\tsubscription.subId = ++subId;\n\t\t\tsubscriptions[ subId ] = subscription;\n\n            if (initializeWithLatestValue) {\n                current = exports.topicCache[topic];\n\n                if (current !== undefined) {\n                    action.call(target, current.value);\n                }\n            }\n\n\t\t\texistingDispose = subscription.dispose;\n\t\t\tsubscription.dispose = function() {\n\t\t\t\tdelete subscriptions[subscription.subId];\n\t\t\t\texistingDispose.call(subscription);\n\t\t\t};\n\n            return subscription;\n        }\n    };\n\n\t//clean up all subscriptions and references\n\texports.reset = function() {\n\t\tvar subscription;\n\n\t\tfor (var id in subscriptions) {\n\t\t\tif (subscriptions.hasOwnProperty(id)) {\n\t\t\t\tsubscription = subscriptions[id];\n\n\t\t\t\tif (subscription && typeof subscription.dispose === \"function\") {\n\t\t\t\t\tsubscription.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\texports.topicCache = {};\n\t};\n\n    //by default publish when the previous cached value does not equal the new value\n    exports.defaultComparer = function(newValue, cacheItem) {\n        return cacheItem && exports.serializer(newValue) === cacheItem.serialized;\n    };\n\n    //augment observables/computeds with the ability to automatically publish updates on a topic\n    ko.subscribable.fn.publishOn = function(topic, skipInitialOrEqualityComparer, equalityComparer) {\n        var skipInitialPublish, subscription, existingDispose;\n\n        if (topic) {\n            //allow passing the equalityComparer as the second argument\n            if (typeof skipInitialOrEqualityComparer === \"function\") {\n                equalityComparer = skipInitialOrEqualityComparer;\n            } else {\n                skipInitialPublish = skipInitialOrEqualityComparer;\n            }\n\n            equalityComparer = equalityComparer || exports.defaultComparer;\n\n            //remove any existing subs\n            disposeTopicSubscription.call(this, topic, \"publishOn\");\n\n            //keep a reference to the subscription, so we can stop publishing\n            subscription = this.subscribe(function(newValue) {\n\t\t\t\tif (!equalityComparer.call(this, newValue, exports.topicCache[topic])) {\n\t\t\t\t\texports.publish(topic, newValue);\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\t//track the subscription in case of a reset\n\t\t\tsubscription.id = ++subId;\n\t\t\tsubscriptions[subId] = subscription;\n\n\t\t\t//ensure that we cleanup pointers to subscription on dispose\n\t\t\texistingDispose = subscription.dispose;\n\t\t\tsubscription.dispose = function() {\n\t\t\t\tdelete this.postboxSubs[topic].publishOn;\n\t\t\t\tdelete subscriptions[subscription.id];\n\n\t\t\t\texistingDispose.call(subscription);\n\t\t\t}.bind(this);\n\n\t\t\tthis.postboxSubs[topic].publishOn = subscription;\n\n            //do an initial publish\n            if (!skipInitialPublish) {\n                exports.publish(topic, this());\n            }\n        }\n\n        return this;\n    };\n\n    //handle disposing a subscription used to publish or subscribe to a topic\n    disposeTopicSubscription = function(topic, type) {\n        var subs = this.postboxSubs = this.postboxSubs || {};\n        subs[topic] = subs[topic] || {};\n\n        if (subs[topic][type]) {\n            subs[topic][type].dispose();\n        }\n    };\n\n    //discontinue automatically publishing on a topic\n    ko.subscribable.fn.stopPublishingOn = function(topic) {\n        disposeTopicSubscription.call(this, topic, \"publishOn\");\n\n        return this;\n    };\n\n    //augment observables/computeds to automatically be updated by notifications on a topic\n    ko.subscribable.fn.subscribeTo = function(topic, initializeWithLatestValueOrTransform, transform) {\n        var initializeWithLatestValue, current, callback, subscription, existingDispose,\n            self = this;\n\n        //allow passing the filter as the second argument\n        if (typeof initializeWithLatestValueOrTransform === \"function\") {\n            transform = initializeWithLatestValueOrTransform;\n        } else {\n            initializeWithLatestValue = initializeWithLatestValueOrTransform;\n        }\n\n        if (topic && ko.isWriteableObservable(this)) {\n            //remove any existing subs\n            disposeTopicSubscription.call(this, topic, \"subscribeTo\");\n\n            //if specified, apply a filter function in the subscription\n            callback = function(newValue) {\n                self(transform ? transform.call(self, newValue) : newValue);\n            };\n\n\t\t\t////keep a reference to the subscription, so we can unsubscribe, if necessary\n\t\t\tsubscription = exports.subscribe(topic, callback);\n\t\t\tthis.postboxSubs[topic].subscribeTo = subscription;\n\n\t\t\t//ensure that we cleanup pointers to subscription on dispose\n\t\t\texistingDispose = subscription.dispose;\n\t\t\tsubscription.dispose = function() {\n\t\t\t\tdelete this.postboxSubs[topic].subscribeTo;\n\t\t\t\texistingDispose.call(subscription);\n\t\t\t}.bind(this);\n\n            if (initializeWithLatestValue) {\n                current = exports.topicCache[topic];\n\n                if (current !== undefined) {\n                    callback(current.value);\n                }\n            }\n        }\n\n        return this;\n    };\n\n    //discontinue receiving updates on a topic\n    ko.subscribable.fn.unsubscribeFrom = function(topic) {\n        disposeTopicSubscription.call(this, topic, \"subscribeTo\");\n\n        return this;\n    };\n\n    // both subscribe and publish on the same topic\n    //   -allows the ability to sync an observable/writeable computed/observableArray between view models\n    //   -subscribeTo should really not use a filter function, as it would likely cause infinite recursion\n    ko.subscribable.fn.syncWith = function(topic, initializeWithLatestValue, skipInitialOrEqualityComparer, equalityComparer) {\n        this.subscribeTo(topic, initializeWithLatestValue).publishOn(topic, skipInitialOrEqualityComparer, equalityComparer);\n\n        return this;\n    };\n\n    ko.postbox = exports;\n}));\n","var ko = require('knockout'),\r\n  analytics = require('_js/analytics-ecommerce'),\r\n  filter = require('lodash/filter'),\r\n  merge = require('lodash/merge');\r\nrequire('knockout-postbox');\r\n\r\nvar CartVersion = 2;\r\n\r\nvar shoppingCart = function() {\r\n  var cartKey = 'shoppingCart';\r\n  var updateTopic = 'shoppingCartUpdated';\r\n\r\n  var emptyCart = function() {\r\n    localStorage.setItem(cartKey, '');\r\n\r\n    var emptyCart = {\r\n      owner: window.username,\r\n      version: CartVersion,\r\n      courses: [],\r\n      payer: undefined,\r\n      agency: undefined\r\n    };\r\n    ko.postbox.publish(updateTopic, emptyCart);\r\n    return emptyCart;\r\n  };\r\n\r\n  var getCart = function() {\r\n    var cart = localStorage.getItem(cartKey);\r\n    if (cart === undefined || cart === null || cart === '') return emptyCart();\r\n\r\n    var parsedCart = JSON.parse(cart);\r\n\r\n    if (parsedCart.version !== CartVersion) return emptyCart();\r\n\r\n    return parsedCart;\r\n  };\r\n\r\n  var storeCart = function(cart) {\r\n    localStorage.setItem(cartKey, JSON.stringify(cart));\r\n    ko.postbox.publish(updateTopic, getCart());\r\n  };\r\n\r\n  var validateCartOwner = function() {\r\n    // Checks if current cart is actually owned by logged in user\r\n    // Sets user as owner if logging in during the process\r\n    var cart = getCart();\r\n\r\n    var user = window.username;\r\n    if (cart.owner === '') {\r\n      cart.owner = user;\r\n      storeCart(cart);\r\n    } else if (cart.owner !== user) {\r\n      emptyCart();\r\n      ko.postbox.publish(updateTopic, getCart());\r\n    }\r\n  };\r\n\r\n  var findCourseInCart = function(cart, courseId) {\r\n    for (var x = 0; x < cart.courses.length; x++) {\r\n      if (cart.courses[x].Id === courseId) {\r\n        return cart.courses[x];\r\n      }\r\n    }\r\n    return undefined;\r\n  };\r\n\r\n  var createCartCourse = function(course) {\r\n    course.participants = [];\r\n    course.AuditorCredits = filter(course.AuthorizationCredits, {\r\n      AuthorizationType: 2\r\n    });\r\n    course.AccountantCredits = filter(course.AuthorizationCredits, {\r\n      AuthorizationType: 1\r\n    });\r\n    return course;\r\n  };\r\n\r\n  var createCourseParticipant = function(participant) {\r\n    return {\r\n      AktorId: participant.AktorId,\r\n      Name: participant.Name,\r\n      Member: participant.MembershipType === 1\r\n    };\r\n  };\r\n\r\n  var findParticipantInCourse = function(course, participantId) {\r\n    for (var x = 0; x < course.participants.length; x++) {\r\n      if (course.participants[x].AktorId === participantId) {\r\n        return course.participants[x];\r\n      }\r\n    }\r\n    return undefined;\r\n  };\r\n\r\n  var addCourseToCart = function(course, pageTypeName) {\r\n    var cart = getCart();\r\n    var existingCourse = findCourseInCart(cart, course.Id);\r\n\r\n    if (existingCourse === undefined) {\r\n      var cartCourse = createCartCourse(course);\r\n\r\n      analytics.productAddedToCart(course, 0, undefined, pageTypeName);\r\n      cart.courses.push(cartCourse);\r\n\r\n      storeCart(cart);\r\n\r\n      return cartCourse;\r\n    }\r\n    return existingCourse;\r\n  };\r\n\r\n  var removeCourseFromCart = function(courseId) {\r\n    var cart = getCart();\r\n\r\n    var course = findCourseInCart(cart, courseId);\r\n    var index = cart.courses\r\n      .map(function(c) {\r\n        return c.Id;\r\n      })\r\n      .indexOf(courseId);\r\n    if (index > -1) {\r\n      cart.courses.splice(index, 1);\r\n\r\n      var participants = course.participants.length;\r\n      analytics.productRemovedFromCart(course, participants);\r\n      ko.postbox.publish('removeCourse', course);\r\n      ko.postbox.publish('removeCourseWithKey', course.Key);\r\n      // ko.postbox.publish(updateTopic, getCart());\r\n      storeCart(cart);\r\n    }\r\n  };\r\n\r\n  var addParticipantToCourseNoStore = function(cart, courseId, participant) {\r\n    var course = findCourseInCart(cart, courseId);\r\n    if (course !== undefined) {\r\n      var courseParticipant = createCourseParticipant(participant);\r\n      var existingParticipant = findParticipantInCourse(\r\n        course,\r\n        courseParticipant.AktorId\r\n      );\r\n      if (existingParticipant === undefined) {\r\n        course.participants.push(courseParticipant);\r\n        //analytics.productAddedToCart(course, 1);\r\n      }\r\n    }\r\n    return cart;\r\n  };\r\n  var addParticipantToCourse = function(courseId, participant) {\r\n    var cart = getCart();\r\n    cart = addParticipantToCourseNoStore(cart, courseId, participant);\r\n    storeCart(cart);\r\n  };\r\n\r\n  var addParticipantsToCourse = function(\r\n    courseId,\r\n    participants,\r\n    cart,\r\n    noStore\r\n  ) {\r\n    cart = cart || getCart();\r\n\r\n    for (var i = 0; i < participants.length; i++) {\r\n      cart = addParticipantToCourseNoStore(cart, courseId, participants[i]);\r\n    }\r\n\r\n    if (!noStore) storeCart(cart);\r\n    return cart;\r\n  };\r\n\r\n  var addParticipantsToCourses = function(courses, participants) {\r\n    var cart = getCart();\r\n    for (var x = 0; x < courses.length; x++) {\r\n      if (courses[x].EventType == 6) {\r\n        cart = addParticipantsToCourse(\r\n          courses[x].Key,\r\n          participants,\r\n          cart,\r\n          true\r\n        );\r\n      } else {\r\n        cart = addParticipantsToCourse(courses[x].Id, participants, cart, true);\r\n      }\r\n    }\r\n    storeCart(cart);\r\n  };\r\n\r\n  var removeParticipantFromCourse = function(courseId, participantId) {\r\n    var cart = getCart();\r\n    var course = findCourseInCart(cart, courseId);\r\n    if (course !== undefined) {\r\n      var index = course.participants\r\n        .map(function(p) {\r\n          return p.AktorId;\r\n        })\r\n        .indexOf(participantId);\r\n      if (index > -1) {\r\n        course.participants.splice(index, 1);\r\n\r\n        analytics.productRemovedFromCart(course, 1);\r\n        storeCart(cart);\r\n        return;\r\n      } else {\r\n        return;\r\n      }\r\n    }\r\n    throw 'Unknown course';\r\n  };\r\n\r\n  var isCourseAlreadyAdded = function(courseId) {\r\n    var cart = getCart();\r\n    var course = findCourseInCart(cart, courseId);\r\n    return course !== undefined;\r\n  };\r\n\r\n  var updateAgency = function(newAgency) {\r\n    var cart = getCart();\r\n\r\n    // Will only update agency if newAgency.AktorId matches cart.agency.AktorId.\r\n    if (newAgency && newAgency.AktorId === cart.agency.AktorId) {\r\n      storeCart(merge({}, cart, { agency: newAgency }));\r\n    }\r\n  };\r\n  var replaceAgency = function(newAgency) {\r\n    var cart = getCart();\r\n    if (\r\n      cart.agency === undefined ||\r\n      newAgency === undefined ||\r\n      newAgency.AktorId !== cart.agency.AktorId\r\n    ) {\r\n      cart.agency = newAgency;\r\n      //Warning, this removes all participants\r\n      for (var i = 0; i < cart.courses.length; i++) {\r\n        var course = cart.courses[i];\r\n        analytics.productRemovedFromCart(course, course.participants.length);\r\n        course.participants = [];\r\n      }\r\n\r\n      storeCart(cart);\r\n    }\r\n  };\r\n\r\n  var isAgencySet = function() {\r\n    var cart = getCart();\r\n    return (\r\n      cart.agency !== undefined &&\r\n      cart.agency.AktorId !== undefined &&\r\n      cart.agency.AktorId !== ''\r\n    );\r\n  };\r\n\r\n  var replacePayer = function(newPayer) {\r\n    var cart = getCart();\r\n    cart.payer = newPayer;\r\n    storeCart(cart);\r\n  };\r\n\r\n  var areDatesOverlapping = function(fromDate1, toDate1, fromDate2, toDate2) {\r\n    // If any dates are 'falsy' the dates are not set. That means they are not overlapping.\r\n    if (!fromDate1 || !toDate1 || !fromDate2 || !toDate2) {\r\n      return false;\r\n    }\r\n    var fromDate1Ms = new Date(fromDate1).getTime(),\r\n      toDate1Ms = new Date(toDate1).getTime(),\r\n      fromDate2Ms = new Date(fromDate2).getTime(),\r\n      toDate2Ms = new Date(toDate2).getTime();\r\n\r\n    // If start date s\r\n    return (\r\n      (fromDate1Ms >= fromDate2Ms && fromDate1Ms < toDate2Ms) ||\r\n      (toDate1Ms <= toDate2Ms && toDate1Ms > fromDate2Ms)\r\n    );\r\n  };\r\n\r\n  var resetOverlappingCoursesForParticipants = function(\r\n    updateParticipantTopic\r\n  ) {\r\n    var cart = getCart();\r\n    for (var i = 0; i < cart.courses.length; i++) {\r\n      cart.courses[i].overlappingParticipants = {};\r\n      // cart.courses[i].participants = []; // commented out this line because summary page was missing all course participants\r\n    }\r\n    storeCart(cart);\r\n    if (updateParticipantTopic) {\r\n      ko.postbox.publish(updateParticipantTopic, cart.courses);\r\n    }\r\n  };\r\n\r\n  var removeOverlappingCoursesForParticipants = function(\r\n    courseId,\r\n    participants,\r\n    updateParticipantTopic\r\n  ) {\r\n    var cart = getCart();\r\n    var course = findCourseInCart(cart, courseId);\r\n    for (var i = 0; i < cart.courses.length; i++) {\r\n      // Skip the course we are attempting to add participants to.\r\n      if (cart.courses[i].Id === courseId) {\r\n        continue;\r\n      }\r\n      // Loop through all the participants we want to add.\r\n      for (var k = 0; k < participants.length; k++) {\r\n        // If dates are overlapping we want to give an error message connected to this participant.\r\n        if (\r\n          areDatesOverlapping(\r\n            course.Date,\r\n            course.ToDate,\r\n            cart.courses[i].Date,\r\n            cart.courses[i].ToDate\r\n          )\r\n        ) {\r\n          delete cart.courses[i].overlappingParticipants[\r\n            participants[k].AktorId\r\n          ];\r\n        }\r\n      }\r\n    }\r\n    if (updateParticipantTopic) {\r\n      // Store the updated cart in localstorage without triggering the cart update topic.\r\n      localStorage.setItem(cartKey, JSON.stringify(cart));\r\n      ko.postbox.publish(updateParticipantTopic, cart.courses);\r\n    }\r\n  };\r\n\r\n  var registerOverlappingCoursesForParticipants = function(\r\n    courseId,\r\n    participants,\r\n    updateParticipantTopic\r\n  ) {\r\n    var cart = getCart();\r\n    var course = findCourseInCart(cart, courseId);\r\n    for (var i = 0; i < cart.courses.length; i++) {\r\n      // Skip the course we are attempting to add participants to.\r\n      if (cart.courses[i].Id === courseId) {\r\n        continue;\r\n      }\r\n      // Loop through all the participants we want to add.\r\n      for (var k = 0; k < participants.length; k++) {\r\n        // If dates are overlapping we want to give an error message connected to this participant.\r\n        if (\r\n          areDatesOverlapping(\r\n            course.Date,\r\n            course.ToDate,\r\n            cart.courses[i].Date,\r\n            cart.courses[i].ToDate\r\n          )\r\n        ) {\r\n          // Only create an empty set if it does not exist.\r\n          if (typeof cart.courses[i].overlappingParticipants === 'undefined') {\r\n            cart.courses[i].overlappingParticipants = {};\r\n          }\r\n          cart.courses[i].overlappingParticipants[participants[k].AktorId] =\r\n            participants[k];\r\n        }\r\n      }\r\n    }\r\n    if (updateParticipantTopic) {\r\n      // Store the updated cart in localstorage without triggering the cart update topic.\r\n      localStorage.setItem(cartKey, JSON.stringify(cart));\r\n      ko.postbox.publish(updateParticipantTopic, cart.courses);\r\n    }\r\n  };\r\n\r\n  validateCartOwner();\r\n  ko.postbox.publish(updateTopic, getCart());\r\n\r\n  return {\r\n    addCourseToCart: addCourseToCart,\r\n    removeCourseFromCart: removeCourseFromCart,\r\n    isCourseAlreadyAdded: isCourseAlreadyAdded,\r\n    findCourseInCart: findCourseInCart,\r\n    addParticipantToCourse: addParticipantToCourse,\r\n    addParticipantsToCourse: addParticipantsToCourse,\r\n    addParticipantsToCourses: addParticipantsToCourses,\r\n    removeParticipantFromCourse: removeParticipantFromCourse,\r\n    removeOverlappingCoursesForParticipants: removeOverlappingCoursesForParticipants,\r\n    registerOverlappingCoursesForParticipants: registerOverlappingCoursesForParticipants,\r\n    resetOverlappingCoursesForParticipants: resetOverlappingCoursesForParticipants,\r\n\r\n    replaceAgency: replaceAgency, //Removes all participants\r\n    updateAgency: updateAgency, // Updates agency without removing participants\r\n    isAgencySet: isAgencySet,\r\n\r\n    replacePayer: replacePayer,\r\n\r\n    emptyCart: emptyCart,\r\n    getCart: getCart,\r\n\r\n    updateTopic: updateTopic\r\n  };\r\n};\r\n\r\nvar newShoppingCart = shoppingCart();\r\nwindow.regnskapnorge.shoppingCart = newShoppingCart;\r\nmodule.exports = newShoppingCart;\r\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var arrayFilter = require('./_arrayFilter'),\n    baseFilter = require('./_baseFilter'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","function Analytics() {\r\n  var dataLayer = window.dataLayer;\r\n\r\n  if (!dataLayer.hasOwnProperty('push')) {\r\n    //GTM was not loaded correctly\r\n    //Create pass through function for callbacks\r\n    dataLayer.push = function(params) {\r\n      if (params.eventCallback) {\r\n        params.eventCallback();\r\n      }\r\n    };\r\n  }\r\n\r\n  var catalogListId = 'Kurskatalog';\r\n\r\n  var mapCourse = function(course) {\r\n    var hours = 0;\r\n    if (course.AuthorizationCredits) {\r\n      for (var i = 0; i < course.AuthorizationCredits.length; i++) {\r\n        hours += course.AuthorizationCredits[i].Hours;\r\n      }\r\n    }\r\n    return {\r\n      name: course.Heading,\r\n      id: course.Id,\r\n      price: course.PriceNonMember,\r\n      category: '', //TODO,\r\n      variant: course.EventTypeText,\r\n      metric1: hours * 60 * 60,\r\n      dimension1: course.City\r\n    };\r\n  };\r\n\r\n  var mapCart = function(cart) {\r\n    var list = [];\r\n    for (var i = 0; i < cart.courses.length; i++) {\r\n      var course = cart.courses[i];\r\n      var product = mapCourse(course);\r\n      product.quantity = course.participants.length;\r\n\r\n      list.push(product);\r\n    }\r\n\r\n    return list;\r\n  };\r\n\r\n  var checkFilter = function(key, value) {\r\n    switch (key) {\r\n      case 'eventType':\r\n        switch (value) {\r\n          case '1':\r\n            return ' Type=Stedlig,';\r\n          case '2':\r\n            return ' Type=Fagdag,';\r\n          case '3':\r\n            return ' Type=Nettkurs,';\r\n          default:\r\n            return '';\r\n        }\r\n\r\n      case 'role':\r\n        switch (value) {\r\n          case '1':\r\n            return ' Rolle=Regnskapsfører,';\r\n          case '2':\r\n            return ' Rolle=Revisor,';\r\n          default:\r\n            return '';\r\n        }\r\n\r\n      case 'city':\r\n        return ' Sted=' + value + ',';\r\n\r\n      case 'order':\r\n        switch (value) {\r\n          case '1':\r\n            return ' Sortering=Dato,';\r\n          case '2':\r\n            return ' Sortering=Sted,';\r\n          case '3':\r\n            return ' Sortering=Kursnavn,';\r\n          default:\r\n            return '';\r\n        }\r\n\r\n      case 'authorizationCreditPk':\r\n        switch (value) {\r\n          case '1':\r\n            return ' Oppdatering=Finansregnskap med bokføring,';\r\n          case '2':\r\n            return ' Oppdatering=Bokføring,';\r\n          case '3':\r\n            return ' Oppdatering=Skatte- og avgiftsrett,';\r\n          case '4':\r\n            return ' Oppdatering=Regnskapsføring,';\r\n          case '5':\r\n            return ' Oppdatering=Foretaksrett,';\r\n          case '8':\r\n            return ' Oppdatering=Revisjon,';\r\n          case '9':\r\n            return ' Oppdatering=Etikk,';\r\n          case '10':\r\n            return ' Oppdatering=Skatt,';\r\n          case '11':\r\n            return ' Oppdatering=Regnskap,';\r\n          case '12' || '6':\r\n            return ' Oppdatering=Annet,';\r\n          default:\r\n            return '';\r\n        }\r\n\r\n      case 'fromDate':\r\n        return ' Fra=' + value + ',';\r\n\r\n      case 'toDate':\r\n        return ' Til=' + value + ',';\r\n\r\n      case 'name':\r\n        return ' q=' + value + ',';\r\n\r\n      default:\r\n        return 'Alle,';\r\n    }\r\n  };\r\n\r\n  var trackShownCourses = function(courseList, filters) {\r\n    var list = [];\r\n    if (catalogListId !== 'Kurskatalog') {\r\n      catalogListId = 'Kurskatalog';\r\n    }\r\n    for (var k in filters) {\r\n      if (k !== 'skip' && k !== 'take' && filters[k]) {\r\n        catalogListId += checkFilter(k, filters[k]);\r\n      }\r\n    }\r\n    catalogListId += ' Side=' + (filters.skip / filters.take + 1);\r\n\r\n    for (var i = 0; i < courseList.length; i++) {\r\n      var product = mapCourse(courseList[i]);\r\n      product.position = i + 1;\r\n      product.list = catalogListId;\r\n      list.push(product);\r\n    }\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        impressions: list\r\n      },\r\n      event: 'productListPushed'\r\n    });\r\n  };\r\n\r\n  var trackVocationEventCoursesShown = function(vocationEventName, courseList) {\r\n    var list = [];\r\n    for (var i = 0; i < courseList.length; i++) {\r\n      var product = mapCourse(courseList[i]);\r\n      product.position = i + 1;\r\n      product.list = vocationEventName;\r\n      list.push(product);\r\n    }\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        impressions: list\r\n      },\r\n      event: 'vocationEventProductListViewed'\r\n    });\r\n  };\r\n\r\n  var trackProductClick = function(course, fromList) {\r\n    var product = mapCourse(course);\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        click: {\r\n          actionField: { list: fromList },\r\n          products: [product]\r\n        }\r\n      },\r\n      eventCallback: function() {\r\n        document.location = course.Url;\r\n      },\r\n      event: 'productClick'\r\n    });\r\n  };\r\n\r\n  var trackProductClickWithoutCallBack = function(course, fromList) {\r\n    var product = mapCourse(course);\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        click: {\r\n          actionField: { list: fromList },\r\n          products: [product]\r\n        }\r\n      },\r\n      event: 'productClick'\r\n    });\r\n  };\r\n\r\n  var trackAddToCart = function(course, quantity, earlybird, pageTypeName) {\r\n    var product = mapCourse(course);\r\n    product.quantity = quantity;\r\n    product.list = pageTypeName || catalogListId;\r\n\r\n    if (earlybird) product.coupon = 'earlybird';\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        add: {\r\n          products: [product]\r\n        }\r\n      },\r\n      event: 'addToCart'\r\n    });\r\n  };\r\n\r\n  var trackRemoveFromCart = function(course, quantity) {\r\n    if (quantity === 0) return;\r\n\r\n    var product = mapCourse(course);\r\n    product.quantity = quantity || 1;\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        remove: [product]\r\n      },\r\n      event: 'removeFromCart'\r\n    });\r\n  };\r\n\r\n  var trackCheckoutStep = function(step, cart, redirectUrl, option) {\r\n    var products = mapCart(cart);\r\n    var optionText = option || '';\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        checkout: {\r\n          actionField: { step: step, option: optionText },\r\n          products: products\r\n        }\r\n      },\r\n      eventCallback: function() {\r\n        document.location = redirectUrl;\r\n      },\r\n      event: 'checkoutStep' + step + 'Pushed'\r\n    });\r\n  };\r\n\r\n  var trackTransaction = function(transactionId, cart) {\r\n    var products = mapCart(cart);\r\n\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        purchase: {\r\n          actionField: {\r\n            id: transactionId\r\n          },\r\n          products: products\r\n        }\r\n      },\r\n      event: 'transactionComplete'\r\n    });\r\n  };\r\n\r\n  var trackProductView = function(course) {\r\n    var product = mapCourse(course);\r\n    dataLayer.push({\r\n      ecommerce: {\r\n        detail: {\r\n          actionField: {},\r\n          products: [product]\r\n        }\r\n      },\r\n      event: 'productViewed'\r\n    });\r\n  };\r\n\r\n  return {\r\n    coursesShown: trackShownCourses /* List of Courses */,\r\n    vocationEventCoursesShown: trackVocationEventCoursesShown,\r\n    productClickedFromCatalog: function(course) {\r\n      /* Single course */\r\n      trackProductClick(course, catalogListId);\r\n    },\r\n    productMouseDownEvent: function(course) {\r\n      trackProductClickWithoutCallBack(course, catalogListId);\r\n    },\r\n    productAddedToCart: trackAddToCart /* Single course, quantity, earlybird */,\r\n    productRemovedFromCart: trackRemoveFromCart /* Single Course, quantity */,\r\n    shoppingCartCheckedOut: trackCheckoutStep /* stepNumber, shopping cart, redirectUrl, option (e.g. Visa/Invoice) */,\r\n    purchaseFinished: trackTransaction /* transactionId, cart */,\r\n    productViewed: trackProductView /* single course */\r\n  };\r\n}\r\nvar analytics = Analytics();\r\nwindow.regnskapnorge.analytics = analytics;\r\nmodule.exports = analytics;\r\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var AUTHORIZATION_TYPE = {\r\n  ACCOUNTANT: 1,\r\n  AUDITOR: 2\r\n};\r\n\r\nmodule.exports = AUTHORIZATION_TYPE;\r\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","function decodeHtml(html) {\r\n  var txt = document.createElement('textarea');\r\n  txt.innerHTML = html;\r\n  return txt.value;\r\n}\r\n\r\nmodule.exports = decodeHtml;\r\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var CalculatorTracking = {};\r\n\r\nCalculatorTracking.trackYearChange = function(\r\n  eventType,\r\n  currentYear,\r\n  isCurrentPeriod\r\n) {\r\n  var calendarPeriod = isCurrentPeriod ? 'thisYear' : 'previousYears';\r\n  window.dataLayer.push({\r\n    calculatorCalendarPeriod: calendarPeriod,\r\n    calculatorCalendarState: eventType,\r\n    event: 'changeCalculatorPeriod'\r\n  });\r\n};\r\n\r\nCalculatorTracking.trackCategoryExpanded = function(category, state) {\r\n  window.dataLayer.push({\r\n    calculatorCategory: category,\r\n    calculatorCategoryState: state,\r\n    event: 'categoryExpand'\r\n  });\r\n};\r\n\r\nCalculatorTracking.trackCategoryFilter = function(category, filter) {\r\n  filter = parseInt(filter, 10);\r\n  if (filter === 1) {\r\n    window.dataLayer.push({\r\n      calculatorCategoryFilter: category,\r\n      calculatorCategoryState: 'Anbefalte kurs',\r\n      event: 'categoryFilter'\r\n    });\r\n  } else if (filter === 2) {\r\n    window.dataLayer.push({\r\n      calculatorCategoryFilter: category,\r\n      calculatorCategoryState: 'Påmeldte kurs/historikk',\r\n      event: 'categoryFilter'\r\n    });\r\n  } else {\r\n    /* NOTHING TODO HERE */\r\n  }\r\n};\r\n\r\nCalculatorTracking.trackCourseExpanded = function(\r\n  course,\r\n  state,\r\n  page,\r\n  position\r\n) {\r\n  if (state === 'expand') {\r\n    window.regnskapnorge.analytics.productViewed(course.CartObject);\r\n  }\r\n  window.dataLayer.push({\r\n    courseListPageNumber: page,\r\n    courseListPosition: position,\r\n    courseExpandState: state,\r\n    event: 'courseExpand'\r\n  });\r\n};\r\n\r\nCalculatorTracking.trackCoursesPagination = function(\r\n  category,\r\n  currentPage,\r\n  state\r\n) {\r\n  window.dataLayer.push({\r\n    coursePaginationCategory: category,\r\n    coursePaginationCurrentPage: currentPage,\r\n    // 'coursePaginationState': state,\r\n    event: 'calculatorCourses' + state\r\n  });\r\n};\r\n\r\nCalculatorTracking.trackExtendedPages = function(type, action, state) {\r\n  window.dataLayer.push({\r\n    extendedPageType: type,\r\n    extendedApiVersion: action,\r\n    extendedState: state,\r\n    event: 'expandExtended'\r\n  });\r\n};\r\n\r\nCalculatorTracking.trackCloseExtendedPages = function(type, action) {\r\n  window.dataLayer.push({\r\n    extendedPageType: type,\r\n    extendedApiVersion: action,\r\n    event: 'closeExtended'\r\n  });\r\n};\r\n\r\n// expanded-course: virtuell page\r\n\r\nCalculatorTracking.trackCourseList = function(\r\n  listName,\r\n  courseList,\r\n  page,\r\n  itemsPerPage\r\n) {\r\n  var impressionList = [];\r\n  for (var i = 0; i < courseList.length; i++) {\r\n    var course = courseList[i].CartObject;\r\n    var hours = 0;\r\n    if (course.AuthorizationCredits) {\r\n      for (var j = 0; j < course.AuthorizationCredits.length; j++) {\r\n        hours += course.AuthorizationCredits[j].Hours;\r\n      }\r\n    }\r\n\r\n    var impression = {\r\n      name: course.Heading,\r\n      id: course.Id,\r\n      price: course.PriceNonMember,\r\n      variant: course.EventTypeText,\r\n      metric1: hours * 60 * 60,\r\n      dimension1: course.City,\r\n      position: i + page * itemsPerPage,\r\n      list: 'Kurskalkulator - ' + listName + ' Side=' + (page + 1)\r\n    };\r\n\r\n    impressionList.push(impression);\r\n  }\r\n\r\n  window.dataLayer.push({\r\n    ecommerce: {\r\n      impressions: impressionList\r\n    },\r\n    event: 'courseCalculatorProductsViewed'\r\n  });\r\n};\r\n\r\nmodule.exports = CalculatorTracking;\r\n","var HOURS_TYPE = {\r\n  DONE: 0, // Hours the user has already spent, i.e. already been to the courses.\r\n  PLANNED: 1, // Hours that the user plans to spend, i.e. user payed for course, but the course is not yet done.\r\n  SHOPPING: 2, // Hours the user has put in basket, i.e. user has not purchased these courses yet.\r\n  EMPTY: 3, // An empty slot which should be filled, but has yet to be filled.\r\n  DONEUNSTRUCTURED: 4 // Unstructured hours the user has already spent, i.e. already done self studies.\r\n};\r\n\r\nmodule.exports = HOURS_TYPE;\r\n","var RNStorage = {};\r\n\r\n/**\r\n * Stores an item in localStorage/sessionStorage with the specified key.\r\n * @param {String} storageKey - The key to identify the stored item.\r\n * @param {Object} item - A JSON object to store in localstorage.\r\n * @param {bool} [useSessionStorage=false] - Use session storage (default false).\r\n */\r\nRNStorage.storeItem = function(storageKey, item, useSessionStorage) {\r\n  if (!useSessionStorage) {\r\n    localStorage.setItem(storageKey, JSON.stringify(item));\r\n  } else {\r\n    sessionStorage.setItem(storageKey, JSON.stringify(item));\r\n  }\r\n};\r\n\r\n/**\r\n * Removes an item in localStorage/sessionStorage with the specified key.\r\n * @param {String} storageKey - The key to identify the stored item.\r\n * @param {bool} [useSessionStorage=false] - Use session storage (default false).\r\n */\r\nRNStorage.removeItem = function(storageKey, useSessionStorage) {\r\n  if (!useSessionStorage) {\r\n    localStorage.removeItem(storageKey);\r\n  } else {\r\n    sessionStorage.removeItem(storageKey);\r\n  }\r\n};\r\n\r\n/**\r\n * Gets an item from localStorage/sessionStorage with the specified key.\r\n * @param {String} storageKey - The key to identify the stored item.\r\n * @param {bool} [useSessionStorage=false] - Use session storage (default false).\r\n * @returns {Object} - Returns the item with the specified key (or null if no item exists).\r\n */\r\nRNStorage.getItem = function(storageKey, useSessionStorage) {\r\n  if (!useSessionStorage) {\r\n    return localStorage.getItem(storageKey);\r\n  } else {\r\n    return sessionStorage.getItem(storageKey);\r\n  }\r\n};\r\n\r\nmodule.exports = RNStorage;\r\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","function CitySearch(postalCodeEl, postalCityObs) {\r\n  this.$postalCodeEl = postalCodeEl;\r\n  this.postalCityObs = postalCityObs;\r\n}\r\n\r\nCitySearch.prototype.init = function() {\r\n  var self = this;\r\n  self.$postalCodeEl.keyup(function() {\r\n    self.getInputText();\r\n  });\r\n};\r\n\r\nCitySearch.prototype.getInputText = function() {\r\n  var self = this;\r\n  if (self.$postalCodeInput.val().length === 4) {\r\n    self.searchForCity(self.$postalCodeInput.val());\r\n  }\r\n};\r\n\r\nCitySearch.prototype.searchForCity = function(num) {\r\n  if (num === undefined || num === null) {\r\n    return;\r\n  }\r\n  if (num.length !== 4) {\r\n    return;\r\n  }\r\n  var self = this;\r\n\r\n  $.getJSON(\r\n    'https://fraktguide.bring.no/fraktguide/postalCode.json?pnr=' +\r\n      num +\r\n      '&callback=?',\r\n    function(data) {\r\n      self.postalCityObs(data.result);\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = CitySearch;\r\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var Base = require('_js/base');\r\n\r\nfunction FormDropdown() {}\r\n\r\nFormDropdown.prototype = new Base();\r\n\r\nFormDropdown.prototype.init = function() {\r\n  $('.form-dropdown-wrapper').on('click', function(event) {\r\n    $(this).toggleClass('active');\r\n    event.stopPropagation();\r\n  });\r\n\r\n  // Adjust the styling of the dropdown on mobile.\r\n  var $mobileDropdownsContainer = $('.form-dropdown-wrapper.dropdown-mobile');\r\n  var $mobileDropdowns = $mobileDropdownsContainer.find('.dropdown');\r\n  var globalPadding = 12;\r\n  // Only listen to window resize if we find some mobile dropdowns.\r\n  if ($mobileDropdowns.get(0) !== 'undefined') {\r\n    $(window).on('resize', function() {\r\n      $mobileDropdowns.css({\r\n        'max-width': $(this).width() - globalPadding * 2,\r\n        'min-width': $(this).width() - globalPadding * 2\r\n      });\r\n    });\r\n  }\r\n};\r\n\r\nFormDropdown.prototype.start = function(dataId, container) {\r\n  $(container).on('click', dataId, function(event) {\r\n    $(this)\r\n      .parent()\r\n      .toggleClass('active');\r\n    event.stopPropagation();\r\n  });\r\n};\r\nmodule.exports = FormDropdown;\r\n","var $ = require('jquery'),\r\n  ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nvar hashHelper = function(filterTopic) {\r\n  var self = this;\r\n\r\n  self.validHashes = {\r\n    fromDate: 'fra',\r\n    toDate: 'til',\r\n    searchTerm: 'q',\r\n    place: 'sted',\r\n    update: 'oppdatering',\r\n    sort: 'sortering',\r\n    type: 'type',\r\n    role: 'rolle',\r\n    year: 'aar',\r\n    category: 'kategori',\r\n    page: 'side'\r\n  };\r\n\r\n  var decodeHash = function(hash) {\r\n    hash = hash.replace('#', '');\r\n    var elements = hash.split('&');\r\n    var dictionary = {};\r\n    for (var x = 0; x < elements.length; x++) {\r\n      var pair = elements[x].split('=');\r\n      if (pair.length == 2) {\r\n        dictionary[pair[0]] = window.decodeURIComponent(pair[1]);\r\n      }\r\n    }\r\n    return dictionary;\r\n  };\r\n\r\n  var encodeHash = function(hash) {\r\n    if ($.isEmptyObject(hash)) return '_';\r\n\r\n    var separator = '';\r\n    var hashString = '';\r\n    for (var el in hash) {\r\n      if (hash.hasOwnProperty(el)) {\r\n        hashString += separator + el + '=' + hash[el];\r\n        separator = '&';\r\n      }\r\n    }\r\n    return '#' + hashString;\r\n  };\r\n\r\n  self.getHashValue = function(key) {\r\n    var currentHash = decodeHash(location.hash);\r\n    return currentHash[key];\r\n  };\r\n\r\n  self.setHashValue = function(key, value) {\r\n    var currentHash = decodeHash(location.hash);\r\n\r\n    if (value === undefined || value === '') {\r\n      delete currentHash[key];\r\n    } else {\r\n      currentHash[key] = value;\r\n    }\r\n    location.hash = encodeHash(currentHash);\r\n  };\r\n\r\n  self.getListener = function(key, defaultValue, ignoreInitialValue) {\r\n    var obs = ignoreInitialValue\r\n      ? ko.observable()\r\n      : ko.observable(self.getHashValue(key) || defaultValue);\r\n    obs.subscribe(function(newValue) {\r\n      if (parseInt(newValue, 10) === -1) {\r\n        self.setHashValue(key, undefined);\r\n      } else {\r\n        if (newValue !== self.getHashValue(key)) {\r\n          self.setHashValue(key, newValue);\r\n        }\r\n      }\r\n    });\r\n    return obs;\r\n  };\r\n\r\n  self.getDateListener = function(key) {\r\n    var obs = ko.observable(new Date(parseInt(self.getHashValue(key))));\r\n    obs.subscribe(function(val) {\r\n      if (val === undefined) {\r\n        self.setHashValue(key, val);\r\n        return;\r\n      }\r\n      var time = val.getTime();\r\n      if (isNaN(time)) return;\r\n      self.setHashValue(key, time);\r\n    });\r\n    return obs;\r\n  };\r\n\r\n  var updateFilters = function() {\r\n    var hash = decodeHash(location.hash);\r\n\r\n    var fromDate = parseInt(hash[self.validHashes.fromDate]);\r\n    var toDate = parseInt(hash[self.validHashes.toDate]);\r\n    var correctedFromDate = isNaN(fromDate) ? '' : new Date(fromDate).toJSON();\r\n    var correctedToDate = isNaN(toDate) ? '' : new Date(toDate).toJSON();\r\n    ko.postbox.publish(filterTopic, {\r\n      name: hash[self.validHashes.searchTerm],\r\n      city: hash[self.validHashes.place],\r\n      authorizationCreditPk: hash[self.validHashes.update],\r\n      order: hash[self.validHashes.sort],\r\n      eventType: hash[self.validHashes.type],\r\n      role: hash[self.validHashes.role],\r\n      fromDate: correctedFromDate,\r\n      toDate: correctedToDate,\r\n      year: hash[self.validHashes.year],\r\n      category: hash[self.validHashes.category],\r\n      page: hash[self.validHashes.page]\r\n    });\r\n  };\r\n  updateFilters();\r\n  window.onhashchange = updateFilters;\r\n};\r\n\r\nmodule.exports = hashHelper;\r\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var PAGE_TYPE = {\r\n  PERSONAL_INFO: 'registration-personal-info',\r\n  PERSONAL_STATUS: 'registration-info-member',\r\n  EMPLOYER: 'registration-employer',\r\n  ENROLL: 'registration-enroll',\r\n  AGENCY: 'registration-agency',\r\n  INSURANCE: 'registration-insurance',\r\n  CONFIRMATION: 'registration-confirmation',\r\n  END: 'registration-end'\r\n};\r\n\r\nmodule.exports = PAGE_TYPE;\r\n","var arrayAggregator = require('./_arrayAggregator'),\n    baseAggregator = require('./_baseAggregator'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nmodule.exports = createAggregator;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var MEMBERSHIPTYPE = {\r\n  PERSONMEMBER: 1,\r\n  AGENCYMEMBER: 2,\r\n  NONMEMBER: 3\r\n};\r\n\r\nmodule.exports = MEMBERSHIPTYPE;\r\n","var ARTICLEACCESSLEVEL = {\r\n  ALL: 0,\r\n  LOGGEDIN: 1,\r\n  MEMBERS: 2\r\n};\r\n\r\nmodule.exports = ARTICLEACCESSLEVEL;\r\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","//This viewmodel is by both media-list-item and media-tile. Be careful!\r\nvar ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  analytics = require('_js/analytics-ecommerce');\r\n\r\nfunction getAvailability(availability) {\r\n  if (!availability) return '';\r\n\r\n  switch (availability.Status) {\r\n    case 1:\r\n      return 'open';\r\n    case 2:\r\n      return 'few';\r\n    case 3:\r\n    case 4:\r\n      return 'full';\r\n  }\r\n}\r\n\r\nfunction GetCourseType(courseType) {\r\n  switch (courseType) {\r\n    case 2:\r\n      return 'icon-fagdag';\r\n    case 3:\r\n      return 'icon-screen';\r\n    case 4:\r\n      return 'icon-fagdag'; //Utenlandskurs\r\n    case 5:\r\n      return 'icon-bundle';\r\n    case 6:\r\n      return 'icon-program';\r\n    default:\r\n      return 'icon-globe';\r\n  }\r\n}\r\n\r\nfunction MediaListModel(params) {\r\n  var self = this;\r\n  self.item = params.item;\r\n  self.texts = params.texts;\r\n  self.hasRNFri = params.hasRNFriProduct === 'True' ? true : false;\r\n\r\n  var netCourse = self.item.EventType === 3;\r\n  var onsiteCourse = self.item.EventType === 1;\r\n  var showRNFriButton =\r\n    (self.hasRNFri && netCourse) ||\r\n    (self.hasRNFri && onsiteCourse && self.item.FreeOfChargeWithRnFri);\r\n\r\n  self.hasRNFriProduct = showRNFriButton;\r\n  self.quickPurchaseOnlineCourse = params.quickPurchaseOnlineCourse;\r\n  //This is a temporary way to show image\r\n  self.image = 'url(' + self.item.ImageUrl + ')';\r\n  self.isPurchased = ko.observable(\r\n    cart.findCourseInCart(cart.getCart(), self.item.Id) ? true : false\r\n  );\r\n  self.isQuickPurchased = ko.observable(false);\r\n  self.courseId = null;\r\n  self.showCart = self.item.ShowCart;\r\n  self.truncateClass = ko.pureComputed(function() {\r\n    return 'truncate short';\r\n  });\r\n\r\n  //Dynamic CSS classes\r\n  self.availability = getAvailability(self.item.Availability);\r\n\r\n  self.eventType = GetCourseType(self.item.EventType);\r\n\r\n  self.authorizationCredits = self.item.AuthorizationCredits;\r\n\r\n  self.filterAuthorizationType = ko\r\n    .observable('1')\r\n    .subscribeTo('filterAuthorizationTypeUpdated', true);\r\n\r\n  self.addToCart = function(el, ev) {\r\n    ev.preventDefault();\r\n\r\n    self.courseId = self.item.Id;\r\n    cart.addCourseToCart(self.item);\r\n    self.isPurchased(true);\r\n  };\r\n\r\n  self.trackAndRedirect = function() {\r\n    analytics.productClickedFromCatalog(self.item);\r\n  };\r\n\r\n  self.trackAndRedirectMousedown = function(data, event) {\r\n    if (event.which === 2) {\r\n      analytics.productMouseDownEvent(self.item);\r\n      window.open(data.Url, '_blank');\r\n      return;\r\n    }\r\n    if (event.which === 3) {\r\n      analytics.productMouseDownEvent(self.item);\r\n    }\r\n  };\r\n\r\n  // Lytt til changes på handlekurven. Hvis element er fjernet som matcher denne IDen\r\n  ko.postbox.subscribe(\r\n    'removeCourse',\r\n    function(course) {\r\n      if (course.Id === this.courseId) {\r\n        this.isPurchased(false);\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nmodule.exports = MediaListModel;\r\n","var MediaQueryDispatch = require('./MediaQueryDispatch');\nmodule.exports = new MediaQueryDispatch();\n","/**\n * Helper function for iterating over a collection\n *\n * @param collection\n * @param fn\n */\nfunction each(collection, fn) {\n    var i      = 0,\n        length = collection.length,\n        cont;\n\n    for(i; i < length; i++) {\n        cont = fn(collection[i], i);\n        if(cont === false) {\n            break; //allow early exit\n        }\n    }\n}\n\n/**\n * Helper function for determining whether target object is an array\n *\n * @param target the object under test\n * @return {Boolean} true if array, false otherwise\n */\nfunction isArray(target) {\n    return Object.prototype.toString.apply(target) === '[object Array]';\n}\n\n/**\n * Helper function for determining whether target object is a function\n *\n * @param target the object under test\n * @return {Boolean} true if function, false otherwise\n */\nfunction isFunction(target) {\n    return typeof target === 'function';\n}\n\nmodule.exports = {\n    isFunction : isFunction,\n    isArray : isArray,\n    each : each\n};\n","var $ = require('jquery');\r\nwindow.jQuery = $;\r\nwindow.$ = window.jQuery;\r\n\r\nvar RNStorage = require('_utils/storage');\r\n\r\nrequire('./vendor/bootstrap-datepicker.min');\r\nrequire('./vendor/jquery-ui.min');\r\n\r\nrequire('./polyfills/array.prototype.find');\r\nrequire('./polyfills/array.prototype.some');\r\n\r\nvar ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nrequire('scrolltofixed');\r\nrequire('dotdotdot');\r\nrequire('jquery.cookie');\r\nrequire('jquery.easing');\r\nrequire('selectize');\r\n\r\nwindow.regnskapnorge = {};\r\n\r\n// Registers components manually.\r\n// TODO: Whenever working with a feature that touches one of these components, remove it from register-components if possible and add an index.js file instead. For some components, this will require moving a template from a .cshtml file to a .template file.\r\nrequire('../components/knockout/register-components');\r\n\r\n// Generated file. Imports all index.js files from 'app/components/knockout'. Not all components have an index.js file because the people who worked on this project before preferred to have a manually maintained list of components (register-components.js).\r\nrequire('./knockout-components');\r\n\r\nrequire('../components/knockout/binding-handlers');\r\nrequire('../components/knockout/extenders');\r\n\r\n// Imports all javascript files from atoms, molecules and organisms folders, except for two component (below)\r\nrequire('./atomic-components');\r\n\r\nrequire('./toggle-content');\r\n\r\nrequire('./enquire-init');\r\nrequire('./error-tracking');\r\n\r\n// Remove storage for filters in KK if the user is not logged in.\r\nif (\r\n  window.username === undefined ||\r\n  window.username === null ||\r\n  window.username.length === 0\r\n) {\r\n  RNStorage.removeItem('committeeFilters');\r\n}\r\n\r\n$('[data-scroll-trigger]').on('click', function(e) {\r\n  e.preventDefault();\r\n  var $this = $(this),\r\n    $triggerVal = $this.data('scroll-trigger'),\r\n    $target = $(\"[data-scroll-target='\" + $triggerVal + \"']\"),\r\n    $targetPos = $target.offset().top;\r\n\r\n  animateScroll($targetPos);\r\n});\r\n\r\nfunction animateScroll(pos) {\r\n  $('html, body').animate(\r\n    {\r\n      scrollTop: pos\r\n    },\r\n    500\r\n  );\r\n}\r\n\r\nfunction popupHandler(triggerVal) {\r\n  var $target = $(\"[data-popup-target='\" + triggerVal + \"']\");\r\n  var $overlay = $('.overlay-popup');\r\n\r\n  if (!$target.hasClass('is-visible')) {\r\n    $target.addClass('is-visible');\r\n    $overlay.addClass('is-visible');\r\n  } else {\r\n    $target.removeClass('is-visible');\r\n    $overlay.removeClass('is-visible');\r\n  }\r\n}\r\n//toggle mobile menu\r\n$('[data-trigger-popup]').on('click', function(e) {\r\n  e.preventDefault();\r\n  var $this = $(this),\r\n    triggerVal = $this.data('trigger-popup');\r\n\r\n  popupHandler(triggerVal);\r\n});\r\n\r\n// hide ErrorMessage\r\n$('#common-error-message .error-message-close').click(function() {\r\n  $(this)\r\n    .parent()\r\n    .addClass('hidden');\r\n});\r\n\r\n// hide WarningMessage\r\n$('.message.is-warning .message-close').click(function() {\r\n  $(this)\r\n    .parent()\r\n    .addClass('hidden');\r\n});\r\n\r\n// add Css To ErrorMessage If Breadcrumbs\r\nif ($('.breadcrumb').length && $('#common-error-message').length) {\r\n  $('#common-error-message')[0].style.top = '75px';\r\n  $('#common-error-message')[0].style.marginBottom = '25px';\r\n}\r\n\r\n$(document).ready(function() {\r\n  $(window).on('load resize', function() {\r\n    $('.truncate').dotdotdot({\r\n      ellipsis: '... ',\r\n      wrap: 'word',\r\n      fallbackToLetter: true,\r\n      watch: true\r\n    });\r\n  });\r\n});\r\n\r\n// Publishes message that main content has been clicked. Used by e.g. menu to determine when to close\r\n// open menu items.\r\n$('.main-content').on('click', function() {\r\n  ko.postbox.publish('maincontent', 'click');\r\n});\r\n// Have to do the same for the menu overlay because this covers everything when search field is active.\r\n$('.menu-overlay').on('click', function() {\r\n  ko.postbox.publish('maincontent', 'click');\r\n});\r\n\r\n// Listen to submits on forms with the post method.\r\n$('form[method=\"post\"]').on('submit', function() {\r\n  $.cookie(\r\n    'form_submitted',\r\n    JSON.stringify({\r\n      scroll: $(window).scrollTop(),\r\n      url: window.location.toString()\r\n    })\r\n  );\r\n});\r\n\r\nvar scrollCookie = $.cookie('form_submitted');\r\n// Check if a cookie has been set due to a form post.\r\nif (scrollCookie) {\r\n  var cookie = JSON.parse(scrollCookie);\r\n  // See if the cookie url is within the current url.\r\n  // We only want to scroll when the post method was to the same page.\r\n  if (window.location.toString() === cookie.url) {\r\n    // Have to use a timeout here. Otherwise it won't scroll.\r\n    // TODO: Find a better solution.\r\n    window.setTimeout(function() {\r\n      $(window).scrollTop(cookie.scroll);\r\n    }, 1);\r\n  }\r\n  $.removeCookie('form_submitted');\r\n}\r\n","/*!\r\n * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)\r\n *\r\n * Copyright 2012 Stefan Petre\r\n * Improvements by Andrew Rowls\r\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\r\n */\r\n!function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(a){return function(){return this[a].apply(this,arguments)}}function g(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp(\"^\"+c.toLowerCase()+\"([A-Z])\");c=new RegExp(\"^\"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function h(b){var c={};if(p[b]||(b=b.split(\"-\")[0],p[b])){var d=p[b];return a.each(o,function(a,b){b in d&&(c[b]=d[b])}),c}}var i=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;d>c;c++)if(this[c].valueOf()===b)return c;return-1},remove:function(a){this.splice(a,1)},replace:function(b){b&&(a.isArray(b)||(b=[b]),this.clear(),this.push.apply(this,b))},clear:function(){this.length=0},copy:function(){var a=new i;return a.replace(this),a}};return function(){var c=[];return c.push.apply(c,arguments),a.extend(c,b),c}}(),j=function(b,c){this._process_options(c),this.dates=new i,this.viewDate=this.o.defaultViewDate,this.focusDate=null,this.element=a(b),this.isInline=!1,this.isInput=this.element.is(\"input\"),this.component=this.element.hasClass(\"date\")?this.element.find(\".add-on, .input-group-addon, .btn\"):!1,this.hasInput=this.component&&this.element.find(\"input\").length,this.component&&0===this.component.length&&(this.component=!1),this.picker=a(q.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass(\"datepicker-inline\").appendTo(this.element):this.picker.addClass(\"datepicker-dropdown dropdown-menu\"),this.o.rtl&&this.picker.addClass(\"datepicker-rtl\"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find(\"tfoot .today, tfoot .clear\").attr(\"colspan\",function(a,b){return parseInt(b)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.setDatesDisabled(this.o.datesDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};j.prototype={constructor:j,_process_options:function(e){this._o=a.extend({},this._o,e);var f=this.o=a.extend({},this._o),g=f.language;switch(p[g]||(g=g.split(\"-\")[0],p[g]||(g=n.language)),f.language=g,f.startView){case 2:case\"decade\":f.startView=2;break;case 1:case\"year\":f.startView=1;break;default:f.startView=0}switch(f.minViewMode){case 1:case\"months\":f.minViewMode=1;break;case 2:case\"years\":f.minViewMode=2;break;default:f.minViewMode=0}f.startView=Math.max(f.startView,f.minViewMode),f.multidate!==!0&&(f.multidate=Number(f.multidate)||!1,f.multidate!==!1&&(f.multidate=Math.max(0,f.multidate))),f.multidateSeparator=String(f.multidateSeparator),f.weekStart%=7,f.weekEnd=(f.weekStart+6)%7;var h=q.parseFormat(f.format);if(f.startDate!==-1/0&&(f.startDate=f.startDate?f.startDate instanceof Date?this._local_to_utc(this._zero_time(f.startDate)):q.parseDate(f.startDate,h,f.language):-1/0),1/0!==f.endDate&&(f.endDate=f.endDate?f.endDate instanceof Date?this._local_to_utc(this._zero_time(f.endDate)):q.parseDate(f.endDate,h,f.language):1/0),f.daysOfWeekDisabled=f.daysOfWeekDisabled||[],a.isArray(f.daysOfWeekDisabled)||(f.daysOfWeekDisabled=f.daysOfWeekDisabled.split(/[,\\s]*/)),f.daysOfWeekDisabled=a.map(f.daysOfWeekDisabled,function(a){return parseInt(a,10)}),f.datesDisabled=f.datesDisabled||[],!a.isArray(f.datesDisabled)){var i=[];i.push(q.parseDate(f.datesDisabled,h,f.language)),f.datesDisabled=i}f.datesDisabled=a.map(f.datesDisabled,function(a){return q.parseDate(a,h,f.language)});var j=String(f.orientation).toLowerCase().split(/\\s+/g),k=f.orientation.toLowerCase();if(j=a.grep(j,function(a){return/^auto|left|right|top|bottom$/.test(a)}),f.orientation={x:\"auto\",y:\"auto\"},k&&\"auto\"!==k)if(1===j.length)switch(j[0]){case\"top\":case\"bottom\":f.orientation.y=j[0];break;case\"left\":case\"right\":f.orientation.x=j[0]}else k=a.grep(j,function(a){return/^left|right$/.test(a)}),f.orientation.x=k[0]||\"auto\",k=a.grep(j,function(a){return/^top|bottom$/.test(a)}),f.orientation.y=k[0]||\"auto\";else;if(f.defaultViewDate){var l=f.defaultViewDate.year||(new Date).getFullYear(),m=f.defaultViewDate.month||0,o=f.defaultViewDate.day||1;f.defaultViewDate=c(l,m,o)}else f.defaultViewDate=d();f.showOnFocus=f.showOnFocus!==b?f.showOnFocus:!0},_events:[],_secondaryEvents:[],_applyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(d=b,e=a[f][1]):3===a[f].length&&(d=a[f][1],e=a[f][2]),c.on(e,d)},_unapplyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(e=b,d=a[f][1]):3===a[f].length&&(e=a[f][1],d=a[f][2]),c.off(d,e)},_buildEvents:function(){var b={keyup:a.proxy(function(b){-1===a.inArray(b.keyCode,[27,37,39,38,40,32,13,9])&&this.update()},this),keydown:a.proxy(this.keydown,this),paste:a.proxy(this.paste,this)};this.o.showOnFocus===!0&&(b.focus=a.proxy(this.show,this)),this.isInput?this._events=[[this.element,b]]:this.component&&this.hasInput?this._events=[[this.element.find(\"input\"),b],[this.component,{click:a.proxy(this.show,this)}]]:this.element.is(\"div\")?this.isInline=!0:this._events=[[this.element,{click:a.proxy(this.show,this)}]],this._events.push([this.element,\"*\",{blur:a.proxy(function(a){this._focused_from=a.target},this)}],[this.element,{blur:a.proxy(function(a){this._focused_from=a.target},this)}]),this.o.immediateUpdates&&this._events.push([this.element,{\"changeYear changeMonth\":a.proxy(function(a){this.update(a.date)},this)}]),this._secondaryEvents=[[this.picker,{click:a.proxy(this.click,this)}],[a(window),{resize:a.proxy(this.place,this)}],[a(document),{mousedown:a.proxy(function(b){this.element.is(b.target)||this.element.find(b.target).length||this.picker.is(b.target)||this.picker.find(b.target).length||a(this.picker).hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(b,c){var d=c||this.dates.get(-1),e=this._utc_to_local(d);this.element.trigger({type:b,date:e,dates:a.map(this.dates,this._utc_to_local),format:a.proxy(function(a,b){0===arguments.length?(a=this.dates.length-1,b=this.o.format):\"string\"==typeof a&&(b=a,a=this.dates.length-1),b=b||this.o.format;var c=this.dates.get(a);return q.formatDate(c,b,this.o.language)},this)})},show:function(){return this.element.attr(\"readonly\")&&this.o.enableOnReadonly===!1?void 0:(this.isInline||this.picker.appendTo(this.o.container),this.place(),this.picker.show(),this._attachSecondaryEvents(),this._trigger(\"show\"),(window.navigator.msMaxTouchPoints||\"ontouchstart\"in document)&&this.o.disableTouchKeyboard&&a(this.element).blur(),this)},hide:function(){return this.isInline?this:this.picker.is(\":visible\")?(this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find(\"input\").val())&&this.setValue(),this._trigger(\"hide\"),this):this},remove:function(){return this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date,this},paste:function(b){var c;if(b.originalEvent.clipboardData&&b.originalEvent.clipboardData.types&&-1!==a.inArray(\"text/plain\",b.originalEvent.clipboardData.types))c=b.originalEvent.clipboardData.getData(\"text/plain\");else{if(!window.clipboardData)return;c=window.clipboardData.getData(\"Text\")}this.setDate(c),this.update(),b.preventDefault()},_utc_to_local:function(a){return a&&new Date(a.getTime()+6e4*a.getTimezoneOffset())},_local_to_utc:function(a){return a&&new Date(a.getTime()-6e4*a.getTimezoneOffset())},_zero_time:function(a){return a&&new Date(a.getFullYear(),a.getMonth(),a.getDate())},_zero_utc_time:function(a){return a&&new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()))},getDates:function(){return a.map(this.dates,this._utc_to_local)},getUTCDates:function(){return a.map(this.dates,function(a){return new Date(a)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){var a=this.dates.get(-1);return\"undefined\"!=typeof a?new Date(a):null},clearDates:function(){var a;this.isInput?a=this.element:this.component&&(a=this.element.find(\"input\")),a&&a.val(\"\").change(),this.update(),this._trigger(\"changeDate\"),this.o.autoclose&&this.hide()},setDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,b),this._trigger(\"changeDate\"),this.setValue(),this},setUTCDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,a.map(b,this._utc_to_local)),this._trigger(\"changeDate\"),this.setValue(),this},setDate:f(\"setDates\"),setUTCDate:f(\"setUTCDates\"),setValue:function(){var a=this.getFormattedDate();return this.isInput?this.element.val(a).change():this.component&&this.element.find(\"input\").val(a).change(),this},getFormattedDate:function(c){c===b&&(c=this.o.format);var d=this.o.language;return a.map(this.dates,function(a){return q.formatDate(a,c,d)}).join(this.o.multidateSeparator)},setStartDate:function(a){return this._process_options({startDate:a}),this.update(),this.updateNavArrows(),this},setEndDate:function(a){return this._process_options({endDate:a}),this.update(),this.updateNavArrows(),this},setDaysOfWeekDisabled:function(a){return this._process_options({daysOfWeekDisabled:a}),this.update(),this.updateNavArrows(),this},setDatesDisabled:function(a){this._process_options({datesDisabled:a}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return this;var b=this.picker.outerWidth(),c=this.picker.outerHeight(),d=10,e=a(this.o.container).width(),f=a(this.o.container).height(),g=a(this.o.container).scrollTop(),h=a(this.o.container).offset(),i=[];this.element.parents().each(function(){var b=a(this).css(\"z-index\");\"auto\"!==b&&0!==b&&i.push(parseInt(b))});var j=Math.max.apply(Math,i)+10,k=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),m=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),n=k.left-h.left,o=k.top-h.top;this.picker.removeClass(\"datepicker-orient-top datepicker-orient-bottom datepicker-orient-right datepicker-orient-left\"),\"auto\"!==this.o.orientation.x?(this.picker.addClass(\"datepicker-orient-\"+this.o.orientation.x),\"right\"===this.o.orientation.x&&(n-=b-m)):k.left<0?(this.picker.addClass(\"datepicker-orient-left\"),n-=k.left-d):n+b>e?(this.picker.addClass(\"datepicker-orient-right\"),n=k.left+m-b):this.picker.addClass(\"datepicker-orient-left\");var p,q,r=this.o.orientation.y;if(\"auto\"===r&&(p=-g+o-c,q=g+f-(o+l+c),r=Math.max(p,q)===q?\"top\":\"bottom\"),this.picker.addClass(\"datepicker-orient-\"+r),\"top\"===r?o+=l:o-=c+parseInt(this.picker.css(\"padding-top\")),this.o.rtl){var s=e-(n+m);this.picker.css({top:o,right:s,zIndex:j})}else this.picker.css({top:o,left:n,zIndex:j});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data(\"date\")||this.element.find(\"input\").val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return q.parseDate(a,this.o.format,this.o.language)},this)),c=a.grep(c,a.proxy(function(a){return a<this.o.startDate||a>this.o.endDate||!a},this),!0),this.dates.replace(c),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),d?this.setValue():c.length&&String(b)!==String(this.dates)&&this._trigger(\"changeDate\"),!this.dates.length&&b.length&&this._trigger(\"clearDate\"),this.fill(),this},fillDow:function(){var a=this.o.weekStart,b=\"<tr>\";if(this.o.calendarWeeks){this.picker.find(\".datepicker-days thead tr:first-child .datepicker-switch\").attr(\"colspan\",function(a,b){return parseInt(b)+1});var c='<th class=\"cw\">&#160;</th>';b+=c}for(;a<this.o.weekStart+7;)b+='<th class=\"dow\">'+p[this.o.language].daysMin[a++%7]+\"</th>\";b+=\"</tr>\",this.picker.find(\".datepicker-days thead\").append(b)},fillMonths:function(){for(var a=\"\",b=0;12>b;)a+='<span class=\"month\">'+p[this.o.language].monthsShort[b++]+\"</span>\";this.picker.find(\".datepicker-months td\").html(a)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],d=this.viewDate.getUTCFullYear(),f=this.viewDate.getUTCMonth(),g=new Date;return b.getUTCFullYear()<d||b.getUTCFullYear()===d&&b.getUTCMonth()<f?c.push(\"old\"):(b.getUTCFullYear()>d||b.getUTCFullYear()===d&&b.getUTCMonth()>f)&&c.push(\"new\"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push(\"focused\"),this.o.todayHighlight&&b.getUTCFullYear()===g.getFullYear()&&b.getUTCMonth()===g.getMonth()&&b.getUTCDate()===g.getDate()&&c.push(\"today\"),-1!==this.dates.contains(b)&&c.push(\"active\"),(b.valueOf()<this.o.startDate||b.valueOf()>this.o.endDate||-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekDisabled))&&c.push(\"disabled\"),this.o.datesDisabled.length>0&&a.grep(this.o.datesDisabled,function(a){return e(b,a)}).length>0&&c.push(\"disabled\",\"disabled-date\"),this.range&&(b>this.range[0]&&b<this.range[this.range.length-1]&&c.push(\"range\"),-1!==a.inArray(b.valueOf(),this.range)&&c.push(\"selected\")),c},fill:function(){var d,e=new Date(this.viewDate),f=e.getUTCFullYear(),g=e.getUTCMonth(),h=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,i=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,j=1/0!==this.o.endDate?this.o.endDate.getUTCFullYear():1/0,k=1/0!==this.o.endDate?this.o.endDate.getUTCMonth():1/0,l=p[this.o.language].today||p.en.today||\"\",m=p[this.o.language].clear||p.en.clear||\"\";if(!isNaN(f)&&!isNaN(g)){this.picker.find(\".datepicker-days thead .datepicker-switch\").text(p[this.o.language].months[g]+\" \"+f),this.picker.find(\"tfoot .today\").text(l).toggle(this.o.todayBtn!==!1),this.picker.find(\"tfoot .clear\").text(m).toggle(this.o.clearBtn!==!1),this.updateNavArrows(),this.fillMonths();var n=c(f,g-1,28),o=q.getDaysInMonth(n.getUTCFullYear(),n.getUTCMonth());n.setUTCDate(o),n.setUTCDate(o-(n.getUTCDay()-this.o.weekStart+7)%7);var r=new Date(n);r.setUTCDate(r.getUTCDate()+42),r=r.valueOf();for(var s,t=[];n.valueOf()<r;){if(n.getUTCDay()===this.o.weekStart&&(t.push(\"<tr>\"),this.o.calendarWeeks)){var u=new Date(+n+(this.o.weekStart-n.getUTCDay()-7)%7*864e5),v=new Date(Number(u)+(11-u.getUTCDay())%7*864e5),w=new Date(Number(w=c(v.getUTCFullYear(),0,1))+(11-w.getUTCDay())%7*864e5),x=(v-w)/864e5/7+1;t.push('<td class=\"cw\">'+x+\"</td>\")}if(s=this.getClassNames(n),s.push(\"day\"),this.o.beforeShowDay!==a.noop){var y=this.o.beforeShowDay(this._utc_to_local(n));y===b?y={}:\"boolean\"==typeof y?y={enabled:y}:\"string\"==typeof y&&(y={classes:y}),y.enabled===!1&&s.push(\"disabled\"),y.classes&&(s=s.concat(y.classes.split(/\\s+/))),y.tooltip&&(d=y.tooltip)}s=a.unique(s),t.push('<td class=\"'+s.join(\" \")+'\"'+(d?' title=\"'+d+'\"':\"\")+\">\"+n.getUTCDate()+\"</td>\"),d=null,n.getUTCDay()===this.o.weekEnd&&t.push(\"</tr>\"),n.setUTCDate(n.getUTCDate()+1)}this.picker.find(\".datepicker-days tbody\").empty().append(t.join(\"\"));var z=this.picker.find(\".datepicker-months\").find(\"th:eq(1)\").text(f).end().find(\"span\").removeClass(\"active\");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===f&&z.eq(b.getUTCMonth()).addClass(\"active\")}),(h>f||f>j)&&z.addClass(\"disabled\"),f===h&&z.slice(0,i).addClass(\"disabled\"),f===j&&z.slice(k+1).addClass(\"disabled\"),this.o.beforeShowMonth!==a.noop){var A=this;a.each(z,function(b,c){if(!a(c).hasClass(\"disabled\")){var d=new Date(f,b,1),e=A.o.beforeShowMonth(d);e===!1&&a(c).addClass(\"disabled\")}})}t=\"\",f=10*parseInt(f/10,10);var B=this.picker.find(\".datepicker-years\").find(\"th:eq(1)\").text(f+\"-\"+(f+9)).end().find(\"td\");f-=1;for(var C,D=a.map(this.dates,function(a){return a.getUTCFullYear()}),E=-1;11>E;E++)C=[\"year\"],-1===E?C.push(\"old\"):10===E&&C.push(\"new\"),-1!==a.inArray(f,D)&&C.push(\"active\"),(h>f||f>j)&&C.push(\"disabled\"),t+='<span class=\"'+C.join(\" \")+'\">'+f+\"</span>\",f+=1;B.html(t)}},updateNavArrows:function(){if(this._allow_update){var a=new Date(this.viewDate),b=a.getUTCFullYear(),c=a.getUTCMonth();switch(this.viewMode){case 0:this.picker.find(\".prev\").css(this.o.startDate!==-1/0&&b<=this.o.startDate.getUTCFullYear()&&c<=this.o.startDate.getUTCMonth()?{visibility:\"hidden\"}:{visibility:\"visible\"}),this.picker.find(\".next\").css(1/0!==this.o.endDate&&b>=this.o.endDate.getUTCFullYear()&&c>=this.o.endDate.getUTCMonth()?{visibility:\"hidden\"}:{visibility:\"visible\"});break;case 1:case 2:this.picker.find(\".prev\").css(this.o.startDate!==-1/0&&b<=this.o.startDate.getUTCFullYear()?{visibility:\"hidden\"}:{visibility:\"visible\"}),this.picker.find(\".next\").css(1/0!==this.o.endDate&&b>=this.o.endDate.getUTCFullYear()?{visibility:\"hidden\"}:{visibility:\"visible\"})}}},click:function(b){b.preventDefault();var d,e,f,g=a(b.target).closest(\"span, td, th\");if(1===g.length)switch(g[0].nodeName.toLowerCase()){case\"th\":switch(g[0].className){case\"datepicker-switch\":this.showMode(1);break;case\"prev\":case\"next\":var h=q.modes[this.viewMode].navStep*(\"prev\"===g[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,h),this._trigger(\"changeMonth\",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,h),1===this.viewMode&&this._trigger(\"changeYear\",this.viewDate)}this.fill();break;case\"today\":var i=new Date;i=c(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0),this.showMode(-2);var j=\"linked\"===this.o.todayBtn?null:\"view\";this._setDate(i,j);break;case\"clear\":this.clearDates()}break;case\"span\":g.hasClass(\"disabled\")||(this.viewDate.setUTCDate(1),g.hasClass(\"month\")?(f=1,e=g.parent().find(\"span\").index(g),d=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(e),this._trigger(\"changeMonth\",this.viewDate),1===this.o.minViewMode?(this._setDate(c(d,e,f)),this.showMode()):this.showMode(-1)):(f=1,e=0,d=parseInt(g.text(),10)||0,this.viewDate.setUTCFullYear(d),this._trigger(\"changeYear\",this.viewDate),2===this.o.minViewMode&&this._setDate(c(d,e,f)),this.showMode(-1)),this.fill());break;case\"td\":g.hasClass(\"day\")&&!g.hasClass(\"disabled\")&&(f=parseInt(g.text(),10)||1,d=this.viewDate.getUTCFullYear(),e=this.viewDate.getUTCMonth(),g.hasClass(\"old\")?0===e?(e=11,d-=1):e-=1:g.hasClass(\"new\")&&(11===e?(e=0,d+=1):e+=1),this._setDate(c(d,e,f)))}this.picker.is(\":visible\")&&this._focused_from&&a(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),-1!==b?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):this.o.multidate===!1?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),\"number\"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&\"date\"!==b||this._toggle_multidate(a&&new Date(a)),b&&\"view\"!==b||(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&\"view\"===b||this._trigger(\"changeDate\");var c;this.isInput?c=this.element:this.component&&(c=this.element.find(\"input\")),c&&c.change(),!this.o.autoclose||b&&\"date\"!==b||this.hide()},moveMonth:function(a,c){if(!a)return b;if(!c)return a;var d,e,f=new Date(a.valueOf()),g=f.getUTCDate(),h=f.getUTCMonth(),i=Math.abs(c);if(c=c>0?1:-1,1===i)e=-1===c?function(){return f.getUTCMonth()===h}:function(){return f.getUTCMonth()!==d},d=h+c,f.setUTCMonth(d),(0>d||d>11)&&(d=(d+12)%12);else{for(var j=0;i>j;j++)f=this.moveMonth(f,c);d=f.getUTCMonth(),f.setUTCDate(g),e=function(){return d!==f.getUTCMonth()}}for(;e();)f.setUTCDate(--g),f.setUTCMonth(d);return f},moveYear:function(a,b){return this.moveMonth(a,12*b)},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(\":visible\"))return void((40===a.keyCode||27===a.keyCode)&&this.show());var b,c,e,f=!1,g=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;b=37===a.keyCode?-1:1,a.ctrlKey?(c=this.moveYear(this.dates.get(-1)||d(),b),e=this.moveYear(g,b),this._trigger(\"changeYear\",this.viewDate)):a.shiftKey?(c=this.moveMonth(this.dates.get(-1)||d(),b),e=this.moveMonth(g,b),this._trigger(\"changeMonth\",this.viewDate)):(c=new Date(this.dates.get(-1)||d()),c.setUTCDate(c.getUTCDate()+b),e=new Date(g),e.setUTCDate(g.getUTCDate()+b)),this.dateWithinRange(e)&&(this.focusDate=this.viewDate=e,this.setValue(),this.fill(),a.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;b=38===a.keyCode?-1:1,a.ctrlKey?(c=this.moveYear(this.dates.get(-1)||d(),b),e=this.moveYear(g,b),this._trigger(\"changeYear\",this.viewDate)):a.shiftKey?(c=this.moveMonth(this.dates.get(-1)||d(),b),e=this.moveMonth(g,b),this._trigger(\"changeMonth\",this.viewDate)):(c=new Date(this.dates.get(-1)||d()),c.setUTCDate(c.getUTCDate()+7*b),e=new Date(g),e.setUTCDate(g.getUTCDate()+7*b)),this.dateWithinRange(e)&&(this.focusDate=this.viewDate=e,this.setValue(),this.fill(),a.preventDefault());break;case 32:break;case 13:g=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(g),f=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(\":visible\")&&(a.preventDefault(),\"function\"==typeof a.stopPropagation?a.stopPropagation():a.cancelBubble=!0,this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(f){this._trigger(this.dates.length?\"changeDate\":\"clearDate\");var h;this.isInput?h=this.element:this.component&&(h=this.element.find(\"input\")),h&&h.change()}},showMode:function(a){a&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+a))),this.picker.children(\"div\").hide().filter(\".datepicker-\"+q.modes[this.viewMode].clsName).css(\"display\",\"block\"),this.updateNavArrows()}};var k=function(b,c){this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,m.call(a(this.inputs),c).on(\"changeDate\",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a(b).data(\"datepicker\")}),this.updateDates()};k.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},dateUpdated:function(b){if(!this.updating){this.updating=!0;var c=a(b.target).data(\"datepicker\"),d=c.getUTCDate(),e=a.inArray(b.target,this.inputs),f=e-1,g=e+1,h=this.inputs.length;if(-1!==e){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b.setUTCDate(d)}),d<this.dates[f])for(;f>=0&&d<this.dates[f];)this.pickers[f--].setUTCDate(d);else if(d>this.dates[g])for(;h>g&&d>this.dates[g];)this.pickers[g++].setUTCDate(d);this.updateDates(),delete this.updating}}},remove:function(){a.map(this.pickers,function(a){a.remove()}),delete this.element.data().datepicker}};var l=a.fn.datepicker,m=function(c){var d=Array.apply(null,arguments);d.shift();var e;return this.each(function(){var f=a(this),i=f.data(\"datepicker\"),l=\"object\"==typeof c&&c;if(!i){var m=g(this,\"date\"),o=a.extend({},n,m,l),p=h(o.language),q=a.extend({},n,p,m,l);if(f.hasClass(\"input-daterange\")||q.inputs){var r={inputs:q.inputs||f.find(\"input\").toArray()};f.data(\"datepicker\",i=new k(this,a.extend(q,r)))}else f.data(\"datepicker\",i=new j(this,q))}return\"string\"==typeof c&&\"function\"==typeof i[c]&&(e=i[c].apply(i,d),e!==b)?!1:void 0}),e!==b?e:this};a.fn.datepicker=m;var n=a.fn.datepicker.defaults={autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:\"mm/dd/yyyy\",keyboardNavigation:!0,language:\"en\",minViewMode:0,multidate:!1,multidateSeparator:\",\",orientation:\"auto\",rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,container:\"body\",immediateUpdates:!1},o=a.fn.datepicker.locale_opts=[\"format\",\"rtl\",\"weekStart\"];a.fn.datepicker.Constructor=j;var p=a.fn.datepicker.dates={en:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],daysMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],today:\"Today\",clear:\"Clear\"}},q={modes:[{clsName:\"days\",navFnc:\"Month\",navStep:1},{clsName:\"months\",navFnc:\"FullYear\",navStep:1},{clsName:\"years\",navFnc:\"FullYear\",navStep:10}],isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0},getDaysInMonth:function(a,b){return[31,q.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,parseFormat:function(a){var b=a.replace(this.validParts,\"\\x00\").split(\"\\x00\"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error(\"Invalid date format.\");return{separators:b,parts:c}},parseDate:function(d,e,f){function g(){var a=this.slice(0,m[k].length),b=m[k].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!d)return b;if(d instanceof Date)return d;\"string\"==typeof e&&(e=q.parseFormat(e));var h,i,k,l=/([\\-+]\\d+)([dmwy])/,m=d.match(/([\\-+]\\d+)([dmwy])/g);if(/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(d)){for(d=new Date,k=0;k<m.length;k++)switch(h=l.exec(m[k]),i=parseInt(h[1]),h[2]){case\"d\":d.setUTCDate(d.getUTCDate()+i);break;case\"m\":d=j.prototype.moveMonth.call(j.prototype,d,i);break;case\"w\":d.setUTCDate(d.getUTCDate()+7*i);break;case\"y\":d=j.prototype.moveYear.call(j.prototype,d,i)}return c(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),0,0,0)}m=d&&d.match(this.nonpunctuation)||[],d=new Date;var n,o,r={},s=[\"yyyy\",\"yy\",\"M\",\"MM\",\"m\",\"mm\",\"d\",\"dd\"],t={yyyy:function(a,b){return a.setUTCFullYear(b)},yy:function(a,b){return a.setUTCFullYear(2e3+b)},m:function(a,b){if(isNaN(a))return a;for(b-=1;0>b;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!==b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};t.M=t.MM=t.mm=t.m,t.dd=t.d,d=c(d.getFullYear(),d.getMonth(),d.getDate(),0,0,0);var u=e.parts.slice();if(m.length!==u.length&&(u=a(u).filter(function(b,c){return-1!==a.inArray(c,s)}).toArray()),m.length===u.length){var v;for(k=0,v=u.length;v>k;k++){if(n=parseInt(m[k],10),h=u[k],isNaN(n))switch(h){case\"MM\":o=a(p[f].months).filter(g),n=a.inArray(o[0],p[f].months)+1;break;case\"M\":o=a(p[f].monthsShort).filter(g),n=a.inArray(o[0],p[f].monthsShort)+1}r[h]=n}var w,x;for(k=0;k<s.length;k++)x=s[k],x in r&&!isNaN(r[x])&&(w=new Date(d),t[x](w,r[x]),isNaN(w)||(d=w))}return d},formatDate:function(b,c,d){if(!b)return\"\";\"string\"==typeof c&&(c=q.parseFormat(c));var e={d:b.getUTCDate(),D:p[d].daysShort[b.getUTCDay()],DD:p[d].days[b.getUTCDay()],m:b.getUTCMonth()+1,M:p[d].monthsShort[b.getUTCMonth()],MM:p[d].months[b.getUTCMonth()],yy:b.getUTCFullYear().toString().substring(2),yyyy:b.getUTCFullYear()};e.dd=(e.d<10?\"0\":\"\")+e.d,e.mm=(e.m<10?\"0\":\"\")+e.m,b=[];for(var f=a.extend([],c.separators),g=0,h=c.parts.length;h>=g;g++)f.length&&b.push(f.shift()),b.push(e[c.parts[g]]);return b.join(\"\")},headTemplate:'<thead><tr><th class=\"prev\">&#171;</th><th colspan=\"5\" class=\"datepicker-switch\"></th><th class=\"next\">&#187;</th></tr></thead>',contTemplate:'<tbody><tr><td colspan=\"7\"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'};q.template='<div class=\"datepicker\"><div class=\"datepicker-days\"><table class=\" table-condensed\">'+q.headTemplate+\"<tbody></tbody>\"+q.footTemplate+'</table></div><div class=\"datepicker-months\"><table class=\"table-condensed\">'+q.headTemplate+q.contTemplate+q.footTemplate+'</table></div><div class=\"datepicker-years\"><table class=\"table-condensed\">'+q.headTemplate+q.contTemplate+q.footTemplate+\"</table></div></div>\",a.fn.datepicker.DPGlobal=q,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=l,this},a.fn.datepicker.version=\"1.4.1-dev\",a(document).on(\"focus.datepicker.data-api click.datepicker.data-api\",'[data-provide=\"datepicker\"]',function(b){var c=a(this);c.data(\"datepicker\")||(b.preventDefault(),m.call(c,\"show\"))}),a(function(){m.call(a('[data-provide=\"datepicker-inline\"]'))})}(window.jQuery);\r\n","/*! jQuery UI - v1.12.0 - 2016-09-13\r\n* http://jqueryui.com\r\n* Includes: widget.js, position.js, data.js, disable-selection.js, keycode.js, scroll-parent.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/autocomplete.js, widgets/menu.js, widgets/mouse.js\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version=\"1.12.0\";var e=0,i=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,\"events\"),s&&s.remove&&t(n).triggerHandler(\"remove\")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(\".\")[0];e=e.split(\".\")[1];var h=l+\"-\"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[\":\"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var s,n,o=i.call(arguments,1),a=0,r=o.length;r>a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a=\"string\"==typeof o,r=i.call(arguments,1),l=this;return a?this.each(function(){var i,s=t.data(this,n);return\"instance\"===o?(l=s,!1):s?t.isFunction(s[o])&&\"_\"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error(\"no such method '\"+o+\"' for \"+e+\" widget instance\"):t.error(\"cannot call methods on \"+e+\" prior to initialization; \"+\"attempted to call method '\"+o+\"'\")}):(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"<div>\",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if(\"string\"==typeof e)if(a={},s=e.split(\".\"),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return\"classes\"===t&&this._setOptionClasses(e),this.options[t]=e,\"disabled\"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+\"-disabled\",null,!!t),t&&(this._removeClass(this.hoverable,null,\"ui-state-hover\"),this._removeClass(this.focusable,null,\"ui-state-focus\"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),e.keys&&i(e.keys.match(/\\S+/g)||[],!0),e.extra&&i(e.extra.match(/\\S+/g)||[]),s.join(\" \")},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s=\"boolean\"==typeof s?s:i;var n=\"string\"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;\"boolean\"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass(\"ui-state-disabled\")?(\"string\"==typeof a?o[a]:a).apply(o,arguments):void 0}\"string\"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\\w:-]*)\\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return(\"string\"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,\"ui-state-hover\")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,\"ui-state-hover\")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,\"ui-state-focus\")},focusout:function(e){this._removeClass(t(e.currentTarget),null,\"ui-state-focus\")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:\"fadeIn\",hide:\"fadeOut\"},function(e,i){t.Widget.prototype[\"_\"+e]=function(s,n,o){\"string\"==typeof n&&(n={effect:n});var a,r=n?n===!0||\"number\"==typeof n?i:n.effect||i:e;n=n||{},\"number\"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o,a=Math.max,r=Math.abs,l=Math.round,h=/left|center|right/,c=/top|center|bottom/,u=/[\\+\\-]\\d+(\\.[\\d]+)?%?/,d=/^\\w+/,p=/%$/,f=t.fn.position;o=function(){var e=t(\"<div>\").css(\"position\",\"absolute\").appendTo(\"body\").offset({top:1.5,left:1.5}),i=1.5===e.offset().top;return e.remove(),o=function(){return i},i},t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),o=s.children()[0];return t(\"body\").append(s),e=o.offsetWidth,s.css(\"overflow\",\"scroll\"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?\"\":e.element.css(\"overflow-x\"),s=e.isWindow||e.isDocument?\"\":e.element.css(\"overflow-y\"),n=\"scroll\"===i||\"auto\"===i&&e.width<e.element[0].scrollWidth,o=\"scroll\"===s||\"auto\"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=t.extend({},n);var p,g,m,_,v,b,y=t(n.of),w=t.position.getWithinInfo(n.within),k=t.position.getScrollInfo(w),x=(n.collision||\"flip\").split(\" \"),C={};return b=s(y),y[0].preventDefault&&(n.at=\"left top\"),g=b.width,m=b.height,_=b.offset,v=t.extend({},_),t.each([\"my\",\"at\"],function(){var t,e,i=(n[this]||\"\").split(\" \");1===i.length&&(i=h.test(i[0])?i.concat([\"center\"]):c.test(i[0])?[\"center\"].concat(i):[\"center\",\"center\"]),i[0]=h.test(i[0])?i[0]:\"center\",i[1]=c.test(i[1])?i[1]:\"center\",t=u.exec(i[0]),e=u.exec(i[1]),C[this]=[t?t[0]:0,e?e[0]:0],n[this]=[d.exec(i[0])[0],d.exec(i[1])[0]]}),1===x.length&&(x[1]=x[0]),\"right\"===n.at[0]?v.left+=g:\"center\"===n.at[0]&&(v.left+=g/2),\"bottom\"===n.at[1]?v.top+=m:\"center\"===n.at[1]&&(v.top+=m/2),p=e(C.at,g,m),v.left+=p[0],v.top+=p[1],this.each(function(){var s,h,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=i(this,\"marginLeft\"),b=i(this,\"marginTop\"),D=u+f+i(this,\"marginRight\")+k.width,T=d+b+i(this,\"marginBottom\")+k.height,I=t.extend({},v),M=e(C.my,c.outerWidth(),c.outerHeight());\"right\"===n.my[0]?I.left-=u:\"center\"===n.my[0]&&(I.left-=u/2),\"bottom\"===n.my[1]?I.top-=d:\"center\"===n.my[1]&&(I.top-=d/2),I.left+=M[0],I.top+=M[1],o()||(I.left=l(I.left),I.top=l(I.top)),s={marginLeft:f,marginTop:b},t.each([\"left\",\"top\"],function(e,i){t.ui.position[x[e]]&&t.ui.position[x[e]][i](I,{targetWidth:g,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:s,collisionWidth:D,collisionHeight:T,offset:[p[0]+M[0],p[1]+M[1]],my:n.my,at:n.at,within:w,elem:c})}),n.using&&(h=function(t){var e=_.left-I.left,i=e+g-u,s=_.top-I.top,o=s+m-d,l={target:{element:y,left:_.left,top:_.top,width:g,height:m},element:{element:c,left:I.left,top:I.top,width:u,height:d},horizontal:0>i?\"left\":e>0?\"right\":\"center\",vertical:0>o?\"top\":s>0?\"bottom\":\"middle\"};u>g&&g>r(e+i)&&(l.horizontal=\"center\"),d>m&&m>r(s+o)&&(l.vertical=\"middle\"),l.important=a(r(e),r(i))>a(r(s),r(o))?\"horizontal\":\"vertical\",n.using.call(this,t,l)}),c.offset(t.extend(I,{using:h}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-o-n;e.collisionWidth>o?l>0&&0>=h?(i=t.left+l+e.collisionWidth-o-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+o-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=a(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,o=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-o-n;e.collisionHeight>o?l>0&&0>=h?(i=t.top+l+e.collisionHeight-o-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+o-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=a(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,a=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-a-l,d=\"left\"===e.my[0]?-e.elemWidth:\"right\"===e.my[0]?e.elemWidth:0,p=\"left\"===e.at[0]?e.targetWidth:\"right\"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-a-o,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,a=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-a-l,d=\"top\"===e.my[1],p=d?-e.elemHeight:\"bottom\"===e.my[1]?e.elemHeight:0,f=\"top\"===e.at[1]?e.targetHeight:\"bottom\"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-a-o,(0>s||r(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>r(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[\":\"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.on(t+\".ui-disableSelection\",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(\".ui-disableSelection\")}}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.scrollParent=function(e){var i=this.css(\"position\"),s=\"absolute\"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&\"static\"===e.css(\"position\")?!1:n.test(e.css(\"overflow\")+e.css(\"overflow-y\")+e.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&t(this).removeAttr(\"id\")})}}),t.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase());var s=!1;t(document).on(\"mouseup\",function(){s=!1}),t.widget(\"ui.mouse\",{version:\"1.12.0\",options:{cancel:\"input, textarea, button, select, option\",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on(\"mousedown.\"+this.widgetName,function(t){return e._mouseDown(t)}).on(\"click.\"+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+\".preventClickEvent\")?(t.removeData(i.target,e.widgetName+\".preventClickEvent\"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!s){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,n=1===e.which,o=\"string\"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return n&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+\".preventClickEvent\")&&t.removeData(e.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).on(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),e.preventDefault(),s=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,s=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&\"body\"!==e.nodeName.toLowerCase()&&t(e).trigger(\"blur\")},t.widget(\"ui.draggable\",t.ui.mouse,{version:\"1.12.0\",widgetEventPrefix:\"drag\",options:{addClasses:!0,appendTo:\"parent\",axis:!1,connectToSortable:!1,containment:!1,cursor:\"auto\",cursorAt:!1,grid:!1,handle:!1,helper:\"original\",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:\"default\",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:\"both\",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){\"original\"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass(\"ui-draggable\"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(\".ui-draggable-dragging\")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this._blurActiveElement(e),this.helper||i.disabled||t(e.target).closest(\".ui-resizable-handle\").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blockFrames(i.iframeFix===!0?\"iframe\":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t(\"<div>\").css(\"position\",\"absolute\").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);this._getHandle(e)&&s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,\"ui-draggable-dragging\"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css(\"position\"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return\"fixed\"===t(this).css(\"position\")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger(\"start\",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo(\"absolute\"),!i){var s=this._uiHash();if(this._trigger(\"drag\",e,s)===!1)return this._mouseUp(new t.Event(\"mouseup\",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+\"px\",this.helper[0].style.top=this.position.top+\"px\",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),\"invalid\"===this.options.revert&&!s||\"valid\"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger(\"stop\",e)!==!1&&i._clear()}):this._trigger(\"stop\",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger(\"focus\"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(\".ui-draggable-dragging\")?this._mouseUp(new t.Event(\"mouseup\",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,\"ui-draggable-handle\")},_removeHandleClassName:function(){this._removeClass(this.handleElement,\"ui-draggable-handle\")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):\"clone\"===i.helper?this.element.clone().removeAttr(\"id\"):this.element;return n.parents(\"body\").length||n.appendTo(\"parent\"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css(\"position\"))||n.css(\"position\",\"absolute\"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css(\"position\"))||(this.element[0].style.position=\"relative\")},_adjustOffsetFromHelper:function(e){\"string\"==typeof e&&(e=e.split(\" \")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),\"left\"in e&&(this.offset.click.left=e.left+this.margins.left),\"right\"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),\"top\"in e&&(this.offset.click.top=e.top+this.margins.top),\"bottom\"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:e.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css(\"marginLeft\"),10)||0,top:parseInt(this.element.css(\"marginTop\"),10)||0,right:parseInt(this.element.css(\"marginRight\"),10)||0,bottom:parseInt(this.element.css(\"marginBottom\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?\"window\"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):\"document\"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):(\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css(\"overflow\")),this.containment=[(parseInt(i.css(\"borderLeftWidth\"),10)||0)+(parseInt(i.css(\"paddingLeft\"),10)||0),(parseInt(i.css(\"borderTopWidth\"),10)||0)+(parseInt(i.css(\"paddingTop\"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css(\"borderRightWidth\"),10)||0)-(parseInt(i.css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css(\"borderBottomWidth\"),10)||0)-(parseInt(i.css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i=\"absolute\"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),\"y\"===a.axis&&(l=this.originalPageX),\"x\"===a.axis&&(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,\"ui-draggable-dragging\"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo(\"absolute\"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add(\"draggable\",\"connectToSortable\",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable(\"instance\");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger(\"activate\",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css(\"position\"),top:t.placeholder.css(\"top\"),left:t.placeholder.css(\"left\")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger(\"deactivate\",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data(\"ui-sortable-item\",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger(\"toSortable\",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger(\"out\",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger(\"fromSortable\",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()\r\n}))})}}),t.ui.plugin.add(\"draggable\",\"cursor\",{start:function(e,i,s){var n=t(\"body\"),o=s.options;n.css(\"cursor\")&&(o._cursor=n.css(\"cursor\")),n.css(\"cursor\",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t(\"body\").css(\"cursor\",n._cursor)}}),t.ui.plugin.add(\"draggable\",\"opacity\",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css(\"opacity\")&&(o._opacity=n.css(\"opacity\")),n.css(\"opacity\",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css(\"opacity\",n._opacity)}}),t.ui.plugin.add(\"draggable\",\"scroll\",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&\"HTML\"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&\"HTML\"!==a.tagName?(n.axis&&\"x\"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&\"y\"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&\"x\"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&\"y\"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add(\"draggable\",\"snap\",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||\":data(ui-draggable)\":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,l,h,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)l=s.snapElements[d].left-s.margins.left,h=l+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,l-g>_||m>h+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):(\"inner\"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(l-_),r=g>=Math.abs(h-m),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo(\"relative\",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h}).left)),p=n||o||a||r,\"outer\"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(l-m),r=g>=Math.abs(h-_),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo(\"relative\",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add(\"draggable\",\"stack\",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css(\"zIndex\"),10)||0)-(parseInt(t(i).css(\"zIndex\"),10)||0)});a.length&&(n=parseInt(t(a[0]).css(\"zIndex\"),10)||0,t(a).each(function(e){t(this).css(\"zIndex\",n+e)}),this.css(\"zIndex\",n+a.length))}}),t.ui.plugin.add(\"draggable\",\"zIndex\",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css(\"zIndex\")&&(o._zIndex=n.css(\"zIndex\")),n.css(\"zIndex\",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css(\"zIndex\",n._zIndex)}}),t.ui.draggable,t.widget(\"ui.droppable\",{version:\"1.12.0\",widgetEventPrefix:\"drop\",options:{accept:\"*\",addClasses:!0,greedy:!1,scope:\"default\",tolerance:\"intersect\",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass(\"ui-droppable\")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if(\"accept\"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if(\"scope\"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger(\"activate\",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger(\"deactivate\",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger(\"over\",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger(\"out\",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,o=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function(){var i=t(this).droppable(\"instance\");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&n(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(o=!0,!1):void 0}),o?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger(\"drop\",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass(\"ui-droppable-hover\")},_removeHoverClass:function(){this._removeClass(\"ui-droppable-hover\")},_addActiveClass:function(){this._addClass(\"ui-droppable-active\")},_removeActiveClass:function(){this._removeClass(\"ui-droppable-active\")}});var n=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,l=a+e.helperProportions.height,h=i.offset.left,c=i.offset.top,u=h+i.proportions().width,d=c+i.proportions().height;switch(s){case\"fit\":return o>=h&&u>=r&&a>=c&&d>=l;case\"intersect\":return o+e.helperProportions.width/2>h&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>l-e.helperProportions.height/2;case\"pointer\":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,h,i.proportions().width);case\"touch\":return(a>=c&&d>=a||l>=c&&d>=l||c>a&&l>d)&&(o>=h&&u>=o||r>=h&&u>=r||h>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{\"default\":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(\":data(ui-droppable)\").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible=\"none\"!==o[s].element.css(\"display\"),o[s].visible&&(\"mousedown\"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&n(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil(\"body\").on(\"scroll.droppable\",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,o,a,r=n(e,this,this.options.tolerance,i),l=!r&&this.isover?\"isout\":r&&!this.isover?\"isover\":null;l&&(this.options.greedy&&(o=this.options.scope,a=this.element.parents(\":data(ui-droppable)\").filter(function(){return t(this).droppable(\"instance\").options.scope===o}),a.length&&(s=t(a[0]).droppable(\"instance\"),s.greedyChild=\"isover\"===l)),s&&\"isover\"===l&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[l]=!0,this[\"isout\"===l?\"isover\":\"isout\"]=!1,this[\"isover\"===l?\"_over\":\"_out\"].call(this,i),s&&\"isout\"===l&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil(\"body\").off(\"scroll.droppable\"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget(\"ui.droppable\",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget(\"ui.resizable\",t.ui.mouse,{version:\"1.12.0\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,classes:{\"ui-resizable-se\":\"ui-icon ui-icon-gripsmall-diagonal-se\"},containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if(\"hidden\"===t(e).css(\"overflow\"))return!1;var s=i&&\"left\"===i?\"scrollLeft\":\"scrollTop\",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass(\"ui-resizable\"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\"),marginLeft:this.originalElement.css(\"marginLeft\")},this.element.css(e),this.originalElement.css(\"margin\",0),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on(\"mouseenter\",function(){i.disabled||(s._removeClass(\"ui-resizable-autohide\"),s._handles.show())}).on(\"mouseleave\",function(){i.disabled||s.resizing||(s._addClass(\"ui-resizable-autohide\"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData(\"resizable\").removeData(\"ui-resizable\").off(\".resizable\").find(\".ui-resizable-handle\").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")}).insertAfter(e),e.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case\"handles\":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=t(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),s=this.handles.split(\",\"),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n=\"ui-resizable-\"+e,o=t(\"<div>\"),this._addClass(o,\"ui-resizable-handle \"+n),o.css({zIndex:a.zIndex}),this.handles[e]=\".ui-resizable-\"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=[\"padding\",/ne|nw|n/.test(i)?\"Top\":/se|sw|s/.test(i)?\"Bottom\":/^e$/.test(i)?\"Right\":\"Left\"].join(\"\"),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.on(\"mouseover\",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:\"se\")}),a.autoHide&&(this._handles.hide(),this._addClass(\"ui-resizable-autohide\"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css(\"left\")),s=this._num(this.helper.css(\"top\")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio=\"number\"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(\".ui-resizable-\"+this.axis).css(\"cursor\"),t(\"body\").css(\"cursor\",\"auto\"===n?this.axis+\"-resize\":n),this._addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,l=this._change[o];return this._updatePrevProperties(),l?(i=l.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate(\"resize\",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger(\"resize\",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,l,h=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],\"left\")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css(\"left\"))+(c.position.left-c.originalPosition.left)||null,l=parseFloat(c.element.css(\"top\"))+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t(\"body\").css(\"cursor\",\"auto\"),this._removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+\"px\"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),\"sw\"===s&&(t.left=e.left+(i.width-t.width),t.top=null),\"nw\"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&c&&(t.top=l-e.minHeight),n&&c&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css(\"borderTopWidth\"),t.css(\"borderRightWidth\"),t.css(\"borderBottomWidth\"),t.css(\"borderLeftWidth\")],n=[t.css(\"paddingTop\"),t.css(\"paddingRight\"),t.css(\"paddingBottom\"),t.css(\"paddingLeft\")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t(\"<div style='overflow:hidden;'></div>\"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++i.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),\"resize\"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add(\"resizable\",\"animate\",{stop:function(e){var i=t(this).resizable(\"instance\"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],\"left\")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseFloat(i.element.css(\"left\"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css(\"top\"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css(\"width\")),height:parseFloat(i.element.css(\"height\")),top:parseFloat(i.element.css(\"top\")),left:parseFloat(i.element.css(\"left\"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate(\"resize\",e)}})}}),t.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var e,i,s,n,o,a,r,l=t(this).resizable(\"instance\"),h=l.options,c=l.element,u=h.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(l.containerElement=t(d),/document/.test(u)||u===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(t,s){i[t]=l._num(e.css(\"padding\"+s))}),l.containerOffset=e.offset(),l.containerPosition=e.position(),l.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=l.containerOffset,n=l.containerSize.height,o=l.containerSize.width,a=l._hasScroll(d,\"left\")?d.scrollWidth:o,r=l._hasScroll(d)?d.scrollHeight:n,l.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable(\"instance\"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css(\"position\"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?l.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css(\"position\")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-l.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-l.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable(\"instance\"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css(\"position\"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css(\"position\"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h})}}),t.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data(\"ui-resizable-alsoresize\",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css(\"left\")),top:parseFloat(e.css(\"top\"))})})},resize:function(e,i){var s=t(this).resizable(\"instance\"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data(\"ui-resizable-alsoresize\"),n={},o=e.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData(\"ui-resizable-alsoresize\")}}),t.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,\"ui-resizable-ghost\"),t.uiBackCompat!==!1&&\"string\"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var e,i=t(this).resizable(\"instance\"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l=\"number\"==typeof s.grid?[s.grid,s.grid]:s.grid,h=l[0]||1,c=l[1]||1,u=Math.round((n.width-o.width)/h)*h,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=l,_&&(p+=h),v&&(f+=c),g&&(p-=h),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-h)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-h>0?(i.size.width=p,i.position.left=a.left-u):(p=h-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget(\"ui.selectable\",t.ui.mouse,{version:\"1.12.0\",options:{appendTo:\"body\",autoRefresh:!0,distance:0,filter:\"*\",tolerance:\"touch\",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass(\"ui-selectable\"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,\"ui-selectee\"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,\"selectable-item\",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass(\"ui-selected\"),selecting:i.hasClass(\"ui-selecting\"),unselecting:i.hasClass(\"ui-unselecting\")})})},this.refresh(),this._mouseInit(),this.helper=t(\"<div>\"),this._addClass(this.helper,\"ui-selectable-helper\")},_destroy:function(){this.selectees.removeData(\"selectable-item\"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger(\"start\",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(\".ui-selected\").each(function(){var s=t.data(this,\"selectable-item\");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,\"ui-selected\"),s.selected=!1,i._addClass(s.$element,\"ui-unselecting\"),s.unselecting=!0,i._trigger(\"unselecting\",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,\"selectable-item\");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass(\"ui-selected\"),i._removeClass(n.$element,s?\"ui-unselecting\":\"ui-selected\")._addClass(n.$element,s?\"ui-selecting\":\"ui-unselecting\"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger(\"selecting\",e,{selecting:n.element}):i._trigger(\"unselecting\",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,\"selectable-item\"),h=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,\"touch\"===n.tolerance?h=!(c.left>r||o>c.right||c.top>l||a>c.bottom):\"fit\"===n.tolerance&&(h=c.left>o&&r>c.right&&c.top>a&&l>c.bottom),h?(i.selected&&(s._removeClass(i.$element,\"ui-selected\"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,\"ui-unselecting\"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,\"ui-selecting\"),i.selecting=!0,s._trigger(\"selecting\",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,\"ui-selecting\"),i.selecting=!1,s._addClass(i.$element,\"ui-selected\"),i.selected=!0):(s._removeClass(i.$element,\"ui-selecting\"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,\"ui-unselecting\"),i.unselecting=!0),s._trigger(\"unselecting\",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,\"ui-selected\"),i.selected=!1,s._addClass(i.$element,\"ui-unselecting\"),i.unselecting=!0,s._trigger(\"unselecting\",e,{unselecting:i.element})))))\r\n}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(\".ui-unselecting\",this.element[0]).each(function(){var s=t.data(this,\"selectable-item\");i._removeClass(s.$element,\"ui-unselecting\"),s.unselecting=!1,s.startselected=!1,i._trigger(\"unselected\",e,{unselected:s.element})}),t(\".ui-selecting\",this.element[0]).each(function(){var s=t.data(this,\"selectable-item\");i._removeClass(s.$element,\"ui-selecting\")._addClass(s.$element,\"ui-selected\"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger(\"selected\",e,{selected:s.element})}),this._trigger(\"stop\",e),this.helper.remove(),!1}}),t.widget(\"ui.sortable\",t.ui.mouse,{version:\"1.12.0\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css(\"float\"))||/inline|table-cell/.test(t.css(\"display\"))},_create:function(){this.containerCache={},this._addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(\".ui-sortable-handle\"),\"ui-sortable-handle\"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,\"ui-sortable-handle\")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||\"static\"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+\"-item\")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+\"-item\")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find(\"*\").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&\"auto\"!==a.cursor&&(o=this.document.find(\"body\"),this.storedCursor=o.css(\"cursor\"),o.css(\"cursor\",a.cursor),this.storedStylesheet=t(\"<style>*{ cursor: \"+a.cursor+\" !important; }</style>\").appendTo(o)),a.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",a.opacity)),a.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",a.zIndex)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger(\"activate\",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,\"ui-sortable-helper\"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo(\"absolute\"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo(\"absolute\"),this.options.axis&&\"y\"===this.options.axis||(this.helper[0].style.left=this.position.left+\"px\"),this.options.axis&&\"x\"===this.options.axis||(this.helper[0].style.top=this.position.top+\"px\"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?\"next\":\"prev\"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&(\"semi-dynamic\"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger(\"change\",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger(\"sort\",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&\"x\"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&\"y\"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),\"original\"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger(\"out\",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||\"id\")||\"\").match(e.expression||/(.+)[\\-=_](.+)/);i&&s.push((e.key||i[1]+\"[]\")+\"=\"+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+\"=\"),s.join(\"&\")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||\"id\")||\"\")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u=\"x\"===this.options.axis||s+h>r&&l>s+h,d=\"y\"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>t[this.floating?\"width\":\"height\"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&l>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?\"right\"===i||\"down\"===e?2:1:e&&(\"down\"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?\"right\"===n&&i||\"left\"===n&&!i:s&&(\"down\"===s&&e||\"up\"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?\"down\":\"up\")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?\"right\":\"left\")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(s=h.length-1;s>=0;s--)for(o=t(h[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),s=l.length-1;s>=0;s--)l[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,h=r.length;h>s;s++)l=t(r[s]),l.data(this.widgetName+\"-item\",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?\"x\"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t(\"<\"+s+\">\",e.document[0]);return e._addClass(n,\"ui-sortable-placeholder\",i||e.currentItem[0].className)._removeClass(n,\"ui-sortable-helper\"),\"tbody\"===s?e._createTrPlaceholder(e.currentItem.find(\"tr\").eq(0),t(\"<tr>\",e.document[0]).appendTo(n)):\"tr\"===s?e._createTrPlaceholder(e.currentItem,n):\"img\"===s&&n.attr(\"src\",e.currentItem.attr(\"src\")),i||n.css(\"visibility\",\"hidden\"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css(\"paddingTop\")||0,10)-parseInt(e.currentItem.css(\"paddingBottom\")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css(\"paddingLeft\")||0,10)-parseInt(e.currentItem.css(\"paddingRight\")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(\"<td>&#160;</td>\",s.document[0]).attr(\"colspan\",t(this).attr(\"colspan\")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger(\"out\",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger(\"over\",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?\"left\":\"top\",r=c?\"width\":\"height\",u=c?\"pageX\":\"pageY\",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(l=this.items[s].item.offset()[a],h=!1,e[u]-l>this.items[s][r]/2&&(h=!0),n>Math.abs(e[u]-l)&&(n=Math.abs(e[u]-l),o=this.items[s],this.direction=h?\"up\":\"down\"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger(\"over\",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger(\"change\",e,this._uiHash()),this.containers[p]._trigger(\"change\",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger(\"over\",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):\"clone\"===i.helper?this.currentItem.clone():this.currentItem;return s.parents(\"body\").length||t(\"parent\"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){\"string\"==typeof e&&(e=e.split(\" \")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),\"left\"in e&&(this.offset.click.left=e.left+this.margins.left),\"right\"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),\"top\"in e&&(this.offset.click.top=e.top+this.margins.top),\"bottom\"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:e.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),(\"document\"===n.containment||\"window\"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s=\"hidden\"!==t(e).css(\"overflow\"),this.containment=[i.left+(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)+(parseInt(t(e).css(\"paddingLeft\"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css(\"borderTopWidth\"),10)||0)+(parseInt(t(e).css(\"paddingTop\"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)-(parseInt(t(e).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css(\"borderTopWidth\"),10)||0)-(parseInt(t(e).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s=\"absolute\"===e?1:-1,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)(\"auto\"===this._storedCSS[s]||\"static\"===this._storedCSS[s])&&(this._storedCSS[s]=\"\");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger(\"receive\",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger(\"update\",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger(\"remove\",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger(\"receive\",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger(\"update\",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i(\"deactivate\",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i(\"out\",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,e||this._trigger(\"beforeStop\",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger(\"stop\",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget(\"ui.menu\",{version:\"1.12.0\",defaultElement:\"<ul>\",delay:300,options:{icons:{submenu:\"ui-icon-caret-1-e\"},items:\"> *\",menus:\"ul\",position:{my:\"left top\",at:\"right top\"},role:\"menu\",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass(\"ui-menu\",\"ui-widget ui-widget-content\"),this._on({\"mousedown .ui-menu-item\":function(t){t.preventDefault()},\"click .ui-menu-item\":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(\".ui-state-disabled\").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(\".ui-menu\").length?this.expand(e):!this.element.is(\":focus\")&&s.closest(\".ui-menu\").length&&(this.element.trigger(\"focus\",[!0]),this.active&&1===this.active.parents(\".ui-menu\").length&&clearTimeout(this.timer)))},\"mouseenter .ui-menu-item\":function(e){if(!this.previousFilter){var i=t(e.target).closest(\".ui-menu-item\"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(\".ui-state-active\"),null,\"ui-state-active\"),this.focus(e,s))}},mouseleave:\"collapseAll\",\"mouseleave .ui-menu\":\"collapseAll\",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:\"_keydown\"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(\".ui-menu-item\").removeAttr(\"role aria-disabled\"),i=e.children(\".ui-menu-item-wrapper\").removeUniqueId().removeAttr(\"tabIndex role aria-haspopup\");this.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeAttr(\"role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex\").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data(\"ui-menu-submenu-caret\")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move(\"first\",\"first\",e);break;case t.ui.keyCode.END:this._move(\"last\",\"last\",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(\".ui-state-disabled\")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||\"\",n=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(\".ui-menu-item\"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(\".ui-state-disabled\")&&(this.active.children(\"[aria-haspopup='true']\").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass(\"ui-menu-icons\",null,!!this.element.find(\".ui-icon\").length),s=l.filter(\":not(.ui-menu)\").hide().attr({role:this.options.role,\"aria-hidden\":\"true\",\"aria-expanded\":\"false\"}).each(function(){var e=t(this),i=e.prev(),s=t(\"<span>\").data(\"ui-menu-submenu-caret\",!0);a._addClass(s,\"ui-menu-icon\",\"ui-icon \"+r),i.attr(\"aria-haspopup\",\"true\").prepend(s),e.attr(\"aria-labelledby\",i.attr(\"id\"))}),this._addClass(s,\"ui-menu\",\"ui-widget ui-widget-content ui-front\"),e=l.add(this.element),i=e.find(this.options.items),i.not(\".ui-menu-item\").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,\"ui-menu-divider\",\"ui-widget-content\")}),n=i.not(\".ui-menu-item, .ui-menu-divider\"),o=n.children().not(\".ui-menu\").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,\"ui-menu-item\")._addClass(o,\"ui-menu-item-wrapper\"),i.filter(\".ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:\"menuitem\",listbox:\"option\"}[this.options.role]},_setOption:function(t,e){if(\"icons\"===t){var i=this.element.find(\".ui-menu-icon\");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr(\"aria-disabled\",t+\"\"),this._toggleClass(null,\"ui-state-disabled\",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&\"focus\"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(\".ui-menu-item-wrapper\"),this._addClass(s,null,\"ui-state-active\"),this.options.role&&this.element.attr(\"aria-activedescendant\",s.attr(\"id\")),n=this.active.parent().closest(\".ui-menu-item\").children(\".ui-menu-item-wrapper\"),this._addClass(n,null,\"ui-state-active\"),t&&\"keydown\"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(\".ui-menu\"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger(\"focus\",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],\"borderTopWidth\"))||0,s=parseFloat(t.css(this.activeMenu[0],\"paddingTop\"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(\".ui-menu-item-wrapper\"),null,\"ui-state-active\"),this._trigger(\"blur\",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),\"true\"===t.attr(\"aria-hidden\")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(\".ui-menu\").not(e.parents(\".ui-menu\")).hide().attr(\"aria-hidden\",\"true\"),e.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\",\"true\").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(\".ui-menu\"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(\".ui-state-active\"),null,\"ui-state-active\"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(\".ui-menu\").hide().attr(\"aria-hidden\",\"true\").attr(\"aria-expanded\",\"false\")\r\n},_closeOnDocumentClick:function(e){return!t(e.target).closest(\".ui-menu\").length},_isDivider:function(t){return!/[^\\-\\u2014\\u2013\\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(\".ui-menu-item\",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(\".ui-menu \").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move(\"next\",\"first\",t)},previous:function(t){this._move(\"prev\",\"last\",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(\".ui-menu-item\").length},isLastItem:function(){return this.active&&!this.active.nextAll(\".ui-menu-item\").length},_move:function(t,e,i){var s;this.active&&(s=\"first\"===t||\"last\"===t?this.active[\"first\"===t?\"prevAll\":\"nextAll\"](\".ui-menu-item\").eq(-1):this.active[t+\"All\"](\".ui-menu-item\").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(\".ui-menu-item\").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?\"last\":\"first\"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(\".ui-menu-item\").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop(\"scrollHeight\")},select:function(e){this.active=this.active||t(e.target).closest(\".ui-menu-item\");var i={item:this.active};this.active.has(\".ui-menu\").length||this.collapseAll(e,!0),this._trigger(\"select\",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\"),s=RegExp(\"^\"+i,\"i\");return this.activeMenu.find(this.options.items).filter(\".ui-menu-item\").filter(function(){return s.test(t.trim(t(this).children(\".ui-menu-item-wrapper\").text()))})}}),t.widget(\"ui.autocomplete\",{version:\"1.12.0\",defaultElement:\"<input>\",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o=\"textarea\"===n,a=\"input\"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?\"val\":\"text\"],this.isNewMenu=!0,this._addClass(\"ui-autocomplete-input\"),this.element.attr(\"autocomplete\",\"off\"),this._on(this.element,{keydown:function(n){if(this.element.prop(\"readOnly\"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move(\"previousPage\",n);break;case o.PAGE_DOWN:e=!0,this._move(\"nextPage\",n);break;case o.UP:e=!0,this._keyEvent(\"previous\",n);break;case o.DOWN:e=!0,this._keyEvent(\"next\",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(\":visible\")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(\":visible\"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move(\"previousPage\",s);break;case n.PAGE_DOWN:this._move(\"nextPage\",s);break;case n.UP:this._keyEvent(\"previous\",s);break;case n.DOWN:this._keyEvent(\"next\",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t(\"<ul>\").appendTo(this._appendTo()).menu({role:null}).hide().menu(\"instance\"),this._addClass(this.menu.element,\"ui-autocomplete\",\"ui-front\"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger(\"focus\")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one(\"mousemove\",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data(\"ui-autocomplete-item\"),!1!==this._trigger(\"focus\",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr(\"aria-label\")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t(\"<div>\").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data(\"ui-autocomplete-item\"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger(\"focus\"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger(\"select\",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t(\"<div>\",{role:\"status\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,\"ui-helper-hidden-accessible\"),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr(\"autocomplete\"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),\"source\"===t&&this._initSource(),\"appendTo\"===t&&this.menu.element.appendTo(this._appendTo()),\"disabled\"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(\".ui-front, dialog\")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):\"string\"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:\"json\",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(\":visible\"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger(\"search\",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass(\"ui-autocomplete-loading\"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass(\"ui-autocomplete-loading\")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger(\"response\",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger(\"open\")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,\"mousedown\"),this.menu.element.is(\":visible\")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger(\"close\",t))},_change:function(t){this.previous!==this._value()&&this._trigger(\"change\",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return\"string\"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:\"_closeOnClickOutside\"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width(\"\").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data(\"ui-autocomplete-item\",e)},_renderItem:function(e,i){return t(\"<li>\").append(t(\"<div>\").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(\":visible\")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(\":visible\"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop(\"contentEditable\");return\"inherit\"===e?this._isContentEditable(t.parent()):\"true\"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),\"i\");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget(\"ui.autocomplete\",t.ui.autocomplete,{options:{messages:{noResults:\"No search results.\",results:function(t){return t+(t>1?\" results are\":\" result is\")+\" available, use up and down arrow keys to navigate.\"}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t(\"<div>\").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete});","if (typeof Array.prototype.find === 'undefined') {\r\n  Array.prototype.find = function(callback, thisArg) {\r\n    for (var i = 0; i < this.length; i++) {\r\n      if (callback.call(thisArg || window, this[i], i, this)) return this[i];\r\n    }\r\n    return undefined;\r\n  };\r\n}\r\n","// Production steps of ECMA-262, Edition 5, 15.4.4.17\r\n// Reference: http://es5.github.io/#x15.4.4.17\r\nif (!Array.prototype.some) {\r\n  Array.prototype.some = function(fun, thisArg) {\r\n    'use strict';\r\n\r\n    if (this == null) {\r\n      throw new TypeError('Array.prototype.some called on null or undefined');\r\n    }\r\n\r\n    if (typeof fun !== 'function') {\r\n      throw new TypeError();\r\n    }\r\n\r\n    var t = Object(this);\r\n    var len = t.length >>> 0;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      if (i in t && fun.call(thisArg, t[i], i, t)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  };\r\n}\r\n","/*\n * ScrollToFixed\n * https://github.com/bigspotteddog/ScrollToFixed\n * \n * Copyright (c) 2011 Joseph Cava-Lynch\n * MIT license\n */\n(function($) {\n    $.isScrollToFixed = function(el) {\n        return !!$(el).data('ScrollToFixed');\n    };\n\n    $.ScrollToFixed = function(el, options) {\n        // To avoid scope issues, use 'base' instead of 'this' to reference this\n        // class from internal events and functions.\n        var base = this;\n\n        // Access to jQuery and DOM versions of element.\n        base.$el = $(el);\n        base.el = el;\n\n        // Add a reverse reference to the DOM object.\n        base.$el.data('ScrollToFixed', base);\n\n        // A flag so we know if the scroll has been reset.\n        var isReset = false;\n\n        // The element that was given to us to fix if scrolled above the top of\n        // the page.\n        var target = base.$el;\n\n        var position;\n        var originalPosition;\n        var originalOffsetTop;\n        var originalZIndex;\n\n        // The offset top of the element when resetScroll was called. This is\n        // used to determine if we have scrolled past the top of the element.\n        var offsetTop = 0;\n\n        // The offset left of the element when resetScroll was called. This is\n        // used to move the element left or right relative to the horizontal\n        // scroll.\n        var offsetLeft = 0;\n        var originalOffsetLeft = -1;\n\n        // This last offset used to move the element horizontally. This is used\n        // to determine if we need to move the element because we would not want\n        // to do that for no reason.\n        var lastOffsetLeft = -1;\n\n        // This is the element used to fill the void left by the target element\n        // when it goes fixed; otherwise, everything below it moves up the page.\n        var spacer = null;\n\n        var spacerClass;\n\n        var className;\n\n        // Capture the original offsets for the target element. This needs to be\n        // called whenever the page size changes or when the page is first\n        // scrolled. For some reason, calling this before the page is first\n        // scrolled causes the element to become fixed too late.\n        function resetScroll() {\n            // Set the element to it original positioning.\n            target.trigger('preUnfixed.ScrollToFixed');\n            setUnfixed();\n            target.trigger('unfixed.ScrollToFixed');\n\n            // Reset the last offset used to determine if the page has moved\n            // horizontally.\n            lastOffsetLeft = -1;\n\n            // Capture the offset top of the target element.\n            offsetTop = target.offset().top;\n\n            // Capture the offset left of the target element.\n            offsetLeft = target.offset().left;\n\n            // If the offsets option is on, alter the left offset.\n            if (base.options.offsets) {\n                offsetLeft += (target.offset().left - target.position().left);\n            }\n\n            if (originalOffsetLeft == -1) {\n                originalOffsetLeft = offsetLeft;\n            }\n\n            position = target.css('position');\n\n            // Set that this has been called at least once.\n            isReset = true;\n\n            if (base.options.bottom != -1) {\n                target.trigger('preFixed.ScrollToFixed');\n                setFixed();\n                target.trigger('fixed.ScrollToFixed');\n            }\n        }\n\n        function getLimit() {\n            var limit = base.options.limit;\n            if (!limit) return 0;\n\n            if (typeof(limit) === 'function') {\n                return limit.apply(target);\n            }\n            return limit;\n        }\n\n        // Returns whether the target element is fixed or not.\n        function isFixed() {\n            return position === 'fixed';\n        }\n\n        // Returns whether the target element is absolute or not.\n        function isAbsolute() {\n            return position === 'absolute';\n        }\n\n        function isUnfixed() {\n            return !(isFixed() || isAbsolute());\n        }\n\n        // Sets the target element to fixed. Also, sets the spacer to fill the\n        // void left by the target element.\n        function setFixed() {\n            // Only fix the target element and the spacer if we need to.\n            if (!isFixed()) {\n                // Set the spacer to fill the height and width of the target\n                // element, then display it.\n                spacer.css({\n                    'display' : target.css('display'),\n                    'width' : target.outerWidth(true),\n                    'height' : target.outerHeight(true),\n                    'float' : target.css('float')\n                });\n\n                // Set the target element to fixed and set its width so it does\n                // not fill the rest of the page horizontally. Also, set its top\n                // to the margin top specified in the options.\n\n                cssOptions={\n                    'z-index' : base.options.zIndex,\n                    'position' : 'fixed',\n                    'top' : base.options.bottom == -1?getMarginTop():'',\n                    'bottom' : base.options.bottom == -1?'':base.options.bottom,\n                    'margin-left' : '0px'\n                }\n                if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); };\n\n                target.css(cssOptions);\n                \n                target.addClass(base.options.baseClassName);\n                \n                if (base.options.className) {\n                    target.addClass(base.options.className);\n                }\n\n                position = 'fixed';\n            }\n        }\n\n        function setAbsolute() {\n\n            var top = getLimit();\n            var left = offsetLeft;\n\n            if (base.options.removeOffsets) {\n                left = '';\n                top = top - offsetTop;\n            }\n\n            cssOptions={\n              'position' : 'absolute',\n              'top' : top,\n              'left' : left,\n              'margin-left' : '0px',\n              'bottom' : ''\n            }\n            if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); };\n\n            target.css(cssOptions);\n\n            position = 'absolute';\n        }\n\n        // Sets the target element back to unfixed. Also, hides the spacer.\n        function setUnfixed() {\n            // Only unfix the target element and the spacer if we need to.\n            if (!isUnfixed()) {\n                lastOffsetLeft = -1;\n\n                // Hide the spacer now that the target element will fill the\n                // space.\n                spacer.css('display', 'none');\n\n                // Remove the style attributes that were added to the target.\n                // This will reverse the target back to the its original style.\n                target.css({\n                    'z-index' : originalZIndex,\n                    'width' : '',\n                    'position' : originalPosition,\n                    'left' : '',\n                    'top' : originalOffsetTop,\n                    'margin-left' : ''\n                });\n\n                target.removeClass('scroll-to-fixed-fixed');\n\n                if (base.options.className) {\n                    target.removeClass(base.options.className);\n                }\n\n                position = null;\n            }\n        }\n\n        // Moves the target element left or right relative to the horizontal\n        // scroll position.\n        function setLeft(x) {\n            // Only if the scroll is not what it was last time we did this.\n            if (x != lastOffsetLeft) {\n                // Move the target element horizontally relative to its original\n                // horizontal position.\n                target.css('left', offsetLeft - x);\n\n                // Hold the last horizontal position set.\n                lastOffsetLeft = x;\n            }\n        }\n\n        function getMarginTop() {\n            var marginTop = base.options.marginTop;\n            if (!marginTop) return 0;\n\n            if (typeof(marginTop) === 'function') {\n                return marginTop.apply(target);\n            }\n            return marginTop;\n        }\n\n        // Checks to see if we need to do something based on new scroll position\n        // of the page.\n        function checkScroll() {\n            if (!$.isScrollToFixed(target)) return;\n            var wasReset = isReset;\n\n            // If resetScroll has not yet been called, call it. This only\n            // happens once.\n            if (!isReset) {\n                resetScroll();\n            } else if (isUnfixed()) {\n                // if the offset has changed since the last scroll,\n                // we need to get it again.\n\n                // Capture the offset top of the target element.\n                offsetTop = target.offset().top;\n\n                // Capture the offset left of the target element.\n                offsetLeft = target.offset().left;\n            }\n\n            // Grab the current horizontal scroll position.\n            var x = $(window).scrollLeft();\n\n            // Grab the current vertical scroll position.\n            var y = $(window).scrollTop();\n\n            // Get the limit, if there is one.\n            var limit = getLimit();\n\n            // If the vertical scroll position, plus the optional margin, would\n            // put the target element at the specified limit, set the target\n            // element to absolute.\n            if (base.options.minWidth && $(window).width() < base.options.minWidth) {\n                if (!isUnfixed() || !wasReset) {\n                    postPosition();\n                    target.trigger('preUnfixed.ScrollToFixed');\n                    setUnfixed();\n                    target.trigger('unfixed.ScrollToFixed');\n                }\n            } else if (base.options.maxWidth && $(window).width() > base.options.maxWidth) {\n                if (!isUnfixed() || !wasReset) {\n                    postPosition();\n                    target.trigger('preUnfixed.ScrollToFixed');\n                    setUnfixed();\n                    target.trigger('unfixed.ScrollToFixed');\n                }\n            } else if (base.options.bottom == -1) {\n                // If the vertical scroll position, plus the optional margin, would\n                // put the target element at the specified limit, set the target\n                // element to absolute.\n                if (limit > 0 && y >= limit - getMarginTop()) {\n                    if (!isAbsolute() || !wasReset) {\n                        postPosition();\n                        target.trigger('preAbsolute.ScrollToFixed');\n                        setAbsolute();\n                        target.trigger('unfixed.ScrollToFixed');\n                    }\n                // If the vertical scroll position, plus the optional margin, would\n                // put the target element above the top of the page, set the target\n                // element to fixed.\n                } else if (y >= offsetTop - getMarginTop()) {\n                    if (!isFixed() || !wasReset) {\n                        postPosition();\n                        target.trigger('preFixed.ScrollToFixed');\n\n                        // Set the target element to fixed.\n                        setFixed();\n\n                        // Reset the last offset left because we just went fixed.\n                        lastOffsetLeft = -1;\n\n                        target.trigger('fixed.ScrollToFixed');\n                    }\n                    // If the page has been scrolled horizontally as well, move the\n                    // target element accordingly.\n                    setLeft(x);\n                } else {\n                    // Set the target element to unfixed, placing it where it was\n                    // before.\n                    if (!isUnfixed() || !wasReset) {\n                        postPosition();\n                        target.trigger('preUnfixed.ScrollToFixed');\n                        setUnfixed();\n                        target.trigger('unfixed.ScrollToFixed');\n                    }\n                }\n            } else {\n                if (limit > 0) {\n                    if (y + $(window).height() - target.outerHeight(true) >= limit - (getMarginTop() || -getBottom())) {\n                        if (isFixed()) {\n                            postPosition();\n                            target.trigger('preUnfixed.ScrollToFixed');\n\n                            if (originalPosition === 'absolute') {\n                                setAbsolute();\n                            } else {\n                                setUnfixed();\n                            }\n\n                            target.trigger('unfixed.ScrollToFixed');\n                        }\n                    } else {\n                        if (!isFixed()) {\n                            postPosition();\n                            target.trigger('preFixed.ScrollToFixed');\n                            setFixed();\n                        }\n                        setLeft(x);\n                        target.trigger('fixed.ScrollToFixed');\n                    }\n                } else {\n                    setLeft(x);\n                }\n            }\n        }\n\n        function getBottom() {\n            if (!base.options.bottom) return 0;\n            return base.options.bottom;\n        }\n\n        function postPosition() {\n            var position = target.css('position');\n\n            if (position == 'absolute') {\n                target.trigger('postAbsolute.ScrollToFixed');\n            } else if (position == 'fixed') {\n                target.trigger('postFixed.ScrollToFixed');\n            } else {\n                target.trigger('postUnfixed.ScrollToFixed');\n            }\n        }\n\n        var windowResize = function(event) {\n            // Check if the element is visible before updating it's position, which\n            // improves behavior with responsive designs where this element is hidden.\n            if(target.is(':visible')) {\n                isReset = false;\n                checkScroll();\n            }\n        }\n\n        var windowScroll = function(event) {\n            (!!window.requestAnimationFrame) ? requestAnimationFrame(checkScroll) : checkScroll();\n        }\n\n        // From: http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED\n        var isPositionFixedSupported = function() {\n            var container = document.body;\n\n            if (document.createElement && container && container.appendChild && container.removeChild) {\n                var el = document.createElement('div');\n\n                if (!el.getBoundingClientRect) return null;\n\n                el.innerHTML = 'x';\n                el.style.cssText = 'position:fixed;top:100px;';\n                container.appendChild(el);\n\n                var originalHeight = container.style.height,\n                originalScrollTop = container.scrollTop;\n\n                container.style.height = '3000px';\n                container.scrollTop = 500;\n\n                var elementTop = el.getBoundingClientRect().top;\n                container.style.height = originalHeight;\n\n                var isSupported = (elementTop === 100);\n                container.removeChild(el);\n                container.scrollTop = originalScrollTop;\n\n                return isSupported;\n            }\n\n            return null;\n        }\n\n        var preventDefault = function(e) {\n            e = e || window.event;\n            if (e.preventDefault) {\n                e.preventDefault();\n            }\n            e.returnValue = false;\n        }\n\n        // Initializes this plugin. Captures the options passed in, turns this\n        // off for devices that do not support fixed position, adds the spacer,\n        // and binds to the window scroll and resize events.\n        base.init = function() {\n            // Capture the options for this plugin.\n            base.options = $.extend({}, $.ScrollToFixed.defaultOptions, options);\n\n            originalZIndex = target.css('z-index')\n\n            // Turn off this functionality for devices that do not support it.\n            // if (!(base.options && base.options.dontCheckForPositionFixedSupport)) {\n            //     var fixedSupported = isPositionFixedSupported();\n            //     if (!fixedSupported) return;\n            // }\n\n            // Put the target element on top of everything that could be below\n            // it. This reduces flicker when the target element is transitioning\n            // to fixed.\n            base.$el.css('z-index', base.options.zIndex);\n\n            // Create a spacer element to fill the void left by the target\n            // element when it goes fixed.\n            spacer = $('<div />');\n\n            position = target.css('position');\n            originalPosition = target.css('position');\n\n            originalOffsetTop = target.css('top');\n\n            // Place the spacer right after the target element.\n            if (isUnfixed()) base.$el.after(spacer);\n\n            // Reset the target element offsets when the window is resized, then\n            // check to see if we need to fix or unfix the target element.\n            $(window).bind('resize.ScrollToFixed', windowResize);\n\n            // When the window scrolls, check to see if we need to fix or unfix\n            // the target element.\n            $(window).bind('scroll.ScrollToFixed', windowScroll);\n\n            // For touch devices, call checkScroll directlly rather than\n            // rAF wrapped windowScroll to animate the element\n            if ('ontouchmove' in window) {\n              $(window).bind('touchmove.ScrollToFixed', checkScroll);\n            }\n\n            if (base.options.preFixed) {\n                target.bind('preFixed.ScrollToFixed', base.options.preFixed);\n            }\n            if (base.options.postFixed) {\n                target.bind('postFixed.ScrollToFixed', base.options.postFixed);\n            }\n            if (base.options.preUnfixed) {\n                target.bind('preUnfixed.ScrollToFixed', base.options.preUnfixed);\n            }\n            if (base.options.postUnfixed) {\n                target.bind('postUnfixed.ScrollToFixed', base.options.postUnfixed);\n            }\n            if (base.options.preAbsolute) {\n                target.bind('preAbsolute.ScrollToFixed', base.options.preAbsolute);\n            }\n            if (base.options.postAbsolute) {\n                target.bind('postAbsolute.ScrollToFixed', base.options.postAbsolute);\n            }\n            if (base.options.fixed) {\n                target.bind('fixed.ScrollToFixed', base.options.fixed);\n            }\n            if (base.options.unfixed) {\n                target.bind('unfixed.ScrollToFixed', base.options.unfixed);\n            }\n\n            if (base.options.spacerClass) {\n                spacer.addClass(base.options.spacerClass);\n            }\n\n            target.bind('resize.ScrollToFixed', function() {\n                spacer.height(target.height());\n            });\n\n            target.bind('scroll.ScrollToFixed', function() {\n                target.trigger('preUnfixed.ScrollToFixed');\n                setUnfixed();\n                target.trigger('unfixed.ScrollToFixed');\n                checkScroll();\n            });\n\n            target.bind('detach.ScrollToFixed', function(ev) {\n                preventDefault(ev);\n\n                target.trigger('preUnfixed.ScrollToFixed');\n                setUnfixed();\n                target.trigger('unfixed.ScrollToFixed');\n\n                $(window).unbind('resize.ScrollToFixed', windowResize);\n                $(window).unbind('scroll.ScrollToFixed', windowScroll);\n\n                target.unbind('.ScrollToFixed');\n\n                //remove spacer from dom\n                spacer.remove();\n\n                base.$el.removeData('ScrollToFixed');\n            });\n\n            // Reset everything.\n            windowResize();\n        };\n\n        // Initialize the plugin.\n        base.init();\n    };\n\n    // Sets the option defaults.\n    $.ScrollToFixed.defaultOptions = {\n        marginTop : 0,\n        limit : 0,\n        bottom : -1,\n        zIndex : 1000,\n        baseClassName: 'scroll-to-fixed-fixed'\n    };\n\n    // Returns enhanced elements that will fix to the top of the page when the\n    // page is scrolled.\n    $.fn.scrollToFixed = function(options) {\n        return this.each(function() {\n            (new $.ScrollToFixed(this, options));\n        });\n    };\n})(jQuery);\n","/*\r\n *\tjQuery dotdotdot 1.7.0\r\n *\r\n *\tCopyright (c) Fred Heusschen\r\n *\twww.frebsite.nl\r\n *\r\n *\tPlugin website:\r\n *\tdotdotdot.frebsite.nl\r\n *\r\n *\tLicensed under the MIT license.\r\n *\thttp://en.wikipedia.org/wiki/MIT_License\r\n */\r\n\r\n(function( $, undef )\r\n{\r\n\tif ( $.fn.dotdotdot )\r\n\t{\r\n\t\treturn;\r\n\t}\r\n\r\n\t$.fn.dotdotdot = function( o )\r\n\t{\r\n\t\tif ( this.length == 0 )\r\n\t\t{\r\n\t\t\t$.fn.dotdotdot.debug( 'No element found for \"' + this.selector + '\".' );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( this.length > 1 )\r\n\t\t{\r\n\t\t\treturn this.each(\r\n\t\t\t\tfunction()\r\n\t\t\t\t{\r\n\t\t\t\t\t$(this).dotdotdot( o );\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\r\n\t\tvar $dot = this;\r\n\r\n\t\tif ( $dot.data( 'dotdotdot' ) )\r\n\t\t{\r\n\t\t\t$dot.trigger( 'destroy.dot' );\r\n\t\t}\r\n\r\n\t\t$dot.data( 'dotdotdot-style', $dot.attr( 'style' ) || '' );\r\n\t\t$dot.css( 'word-wrap', 'break-word' );\r\n\t\tif ($dot.css( 'white-space' ) === 'nowrap')\r\n\t\t{\r\n\t\t\t$dot.css( 'white-space', 'normal' );\r\n\t\t}\r\n\r\n\t\t$dot.bind_events = function()\r\n\t\t{\r\n\t\t\t$dot.bind(\r\n\t\t\t\t'update.dot',\r\n\t\t\t\tfunction( e, c )\r\n\t\t\t\t{\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t\topts.maxHeight = ( typeof opts.height == 'number' )\r\n\t\t\t\t\t\t? opts.height\r\n\t\t\t\t\t\t: getTrueInnerHeight( $dot );\r\n\r\n\t\t\t\t\topts.maxHeight += opts.tolerance;\r\n\r\n\t\t\t\t\tif ( typeof c != 'undefined' )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( typeof c == 'string' || c instanceof HTMLElement )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t \t\tc = $('<div />').append( c ).contents();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( c instanceof $ )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\torgContent = c;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$inr = $dot.wrapInner( '<div class=\"dotdotdot\" />' ).children();\r\n\t\t\t\t\t$inr.contents()\r\n\t\t\t\t\t\t.detach()\r\n\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.append( orgContent.clone( true ) )\r\n\t\t\t\t\t\t.find( 'br' )\r\n\t\t\t\t\t\t.replaceWith( '  <br />  ' )\r\n\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.css({\r\n\t\t\t\t\t\t\t'height'\t: 'auto',\r\n\t\t\t\t\t\t\t'width'\t\t: 'auto',\r\n\t\t\t\t\t\t\t'border'\t: 'none',\r\n\t\t\t\t\t\t\t'padding'\t: 0,\r\n\t\t\t\t\t\t\t'margin'\t: 0\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar after = false,\r\n\t\t\t\t\t\ttrunc = false;\r\n\r\n\t\t\t\t\tif ( conf.afterElement )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tafter = conf.afterElement.clone( true );\r\n\t\t\t\t\t    after.show();\r\n\t\t\t\t\t\tconf.afterElement.detach();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( test( $inr, opts ) )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( opts.wrap == 'children' )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttrunc = children( $inr, opts, after );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttrunc = ellipsis( $inr, $dot, $inr, opts, after );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$inr.replaceWith( $inr.contents() );\r\n\t\t\t\t\t$inr = null;\r\n\r\n\t\t\t\t\tif ( $.isFunction( opts.callback ) )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\topts.callback.call( $dot[ 0 ], trunc, orgContent );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconf.isTruncated = trunc;\r\n\t\t\t\t\treturn trunc;\r\n\t\t\t\t}\r\n\r\n\t\t\t).bind(\r\n\t\t\t\t'isTruncated.dot',\r\n\t\t\t\tfunction( e, fn )\r\n\t\t\t\t{\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t\tif ( typeof fn == 'function' )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfn.call( $dot[ 0 ], conf.isTruncated );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn conf.isTruncated;\r\n\t\t\t\t}\r\n\r\n\t\t\t).bind(\r\n\t\t\t\t'originalContent.dot',\r\n\t\t\t\tfunction( e, fn )\r\n\t\t\t\t{\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t\tif ( typeof fn == 'function' )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfn.call( $dot[ 0 ], orgContent );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn orgContent;\r\n\t\t\t\t}\r\n\r\n\t\t\t).bind(\r\n\t\t\t\t'destroy.dot',\r\n\t\t\t\tfunction( e )\r\n\t\t\t\t{\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t\t$dot.unwatch()\r\n\t\t\t\t\t\t.unbind_events()\r\n\t\t\t\t\t\t.contents()\r\n\t\t\t\t\t\t.detach()\r\n\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.append( orgContent )\r\n\t\t\t\t\t\t.attr( 'style', $dot.data( 'dotdotdot-style' ) || '' )\r\n\t\t\t\t\t\t.data( 'dotdotdot', false );\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\treturn $dot;\r\n\t\t};\t//\t/bind_events\r\n\r\n\t\t$dot.unbind_events = function()\r\n\t\t{\r\n\t\t\t$dot.unbind('.dot');\r\n\t\t\treturn $dot;\r\n\t\t};\t//\t/unbind_events\r\n\r\n\t\t$dot.watch = function()\r\n\t\t{\r\n\t\t\t$dot.unwatch();\r\n\t\t\tif ( opts.watch == 'window' )\r\n\t\t\t{\r\n\t\t\t\tvar $window = $(window),\r\n\t\t\t\t\t_wWidth = $window.width(),\r\n\t\t\t\t\t_wHeight = $window.height();\r\n\r\n\t\t\t\t$window.bind(\r\n\t\t\t\t\t'resize.dot' + conf.dotId,\r\n\t\t\t\t\tfunction()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( _wWidth != $window.width() || _wHeight != $window.height() || !opts.windowResizeFix )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t_wWidth = $window.width();\r\n\t\t\t\t\t\t\t_wHeight = $window.height();\r\n\r\n\t\t\t\t\t\t\tif ( watchInt )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tclearInterval( watchInt );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\twatchInt = setTimeout(\r\n\t\t\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t$dot.trigger( 'update.dot' );\r\n\t\t\t\t\t\t\t\t}, 100\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\twatchOrg = getSizes( $dot );\r\n\t\t\t\twatchInt = setInterval(\r\n\t\t\t\t\tfunction()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( $dot.is( ':visible' ) )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar watchNew = getSizes( $dot );\r\n\t\t\t\t\t\t\tif ( watchOrg.width  != watchNew.width ||\r\n\t\t\t\t\t\t\t\t watchOrg.height != watchNew.height )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t$dot.trigger( 'update.dot' );\r\n\t\t\t\t\t\t\t\twatchOrg = watchNew;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 500\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn $dot;\r\n\t\t};\r\n\t\t$dot.unwatch = function()\r\n\t\t{\r\n\t\t\t$(window).unbind( 'resize.dot' + conf.dotId );\r\n\t\t\tif ( watchInt )\r\n\t\t\t{\r\n\t\t\t\tclearInterval( watchInt );\r\n\t\t\t}\r\n\t\t\treturn $dot;\r\n\t\t};\r\n\r\n\t\tvar\torgContent\t= $dot.contents(),\r\n\t\t\topts \t\t= $.extend( true, {}, $.fn.dotdotdot.defaults, o ),\r\n\t\t\tconf\t\t= {},\r\n\t\t\twatchOrg\t= {},\r\n\t\t\twatchInt\t= null,\r\n\t\t\t$inr\t\t= null;\r\n\r\n\r\n\t\tif ( !( opts.lastCharacter.remove instanceof Array ) )\r\n\t\t{\r\n\t\t\topts.lastCharacter.remove = $.fn.dotdotdot.defaultArrays.lastCharacter.remove;\r\n\t\t}\r\n\t\tif ( !( opts.lastCharacter.noEllipsis instanceof Array ) )\r\n\t\t{\r\n\t\t\topts.lastCharacter.noEllipsis = $.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis;\r\n\t\t}\r\n\r\n\r\n\t\tconf.afterElement\t= getElement( opts.after, $dot );\r\n\t\tconf.isTruncated\t= false;\r\n\t\tconf.dotId\t\t\t= dotId++;\r\n\r\n\r\n\t\t$dot.data( 'dotdotdot', true )\r\n\t\t\t.bind_events()\r\n\t\t\t.trigger( 'update.dot' );\r\n\r\n\t\tif ( opts.watch )\r\n\t\t{\r\n\t\t\t$dot.watch();\r\n\t\t}\r\n\r\n\t\treturn $dot;\r\n\t};\r\n\r\n\r\n\t//\tpublic\r\n\t$.fn.dotdotdot.defaults = {\r\n\t\t'ellipsis'\t\t\t: '... ',\r\n\t\t'wrap'\t\t\t\t: 'word',\r\n\t\t'fallbackToLetter'\t: true,\r\n\t\t'lastCharacter'\t\t: {},\r\n\t\t'tolerance'\t\t\t: 0,\r\n\t\t'callback'\t\t\t: null,\r\n\t\t'after'\t\t\t\t: null,\r\n\t\t'height'\t\t\t: null,\r\n\t\t'watch'\t\t\t\t: false,\r\n\t\t'windowResizeFix'\t: true\r\n\t};\r\n\t$.fn.dotdotdot.defaultArrays = {\r\n\t\t'lastCharacter'\t\t: {\r\n\t\t\t'remove'\t\t\t: [ ' ', '\\u3000', ',', ';', '.', '!', '?' ],\r\n\t\t\t'noEllipsis'\t\t: []\r\n\t\t}\r\n\t};\r\n\t$.fn.dotdotdot.debug = function( msg ) {};\r\n\r\n\r\n\t//\tprivate\r\n\tvar dotId = 1;\r\n\r\n\tfunction children( $elem, o, after )\r\n\t{\r\n\t\tvar $elements \t= $elem.children(),\r\n\t\t\tisTruncated\t= false;\r\n\r\n\t\t$elem.empty();\r\n\r\n\t\tfor ( var a = 0, l = $elements.length; a < l; a++ )\r\n\t\t{\r\n\t\t\tvar $e = $elements.eq( a );\r\n\t\t\t$elem.append( $e );\r\n\t\t\tif ( after )\r\n\t\t\t{\r\n\t\t\t\t$elem.append( after );\r\n\t\t\t}\r\n\t\t\tif ( test( $elem, o ) )\r\n\t\t\t{\r\n\t\t\t\t$e.remove();\r\n\t\t\t\tisTruncated = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif ( after )\r\n\t\t\t\t{\r\n\t\t\t\t\tafter.detach();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn isTruncated;\r\n\t}\r\n\tfunction ellipsis( $elem, $d, $i, o, after )\r\n\t{\r\n\t\tvar isTruncated\t= false;\r\n\r\n\t\t//\tDon't put the ellipsis directly inside these elements\r\n\t\tvar notx = 'table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style';\r\n\r\n\t\t//\tDon't remove these elements even if they are after the ellipsis\r\n\t\tvar noty = 'script, .dotdotdot-keep';\r\n\r\n\t\t$elem\r\n\t\t\t.contents()\r\n\t\t\t.detach()\r\n\t\t\t.each(\r\n\t\t\t\tfunction()\r\n\t\t\t\t{\r\n\r\n\t\t\t\t\tvar e\t= this,\r\n\t\t\t\t\t\t$e\t= $(e);\r\n\r\n\t\t\t\t\tif ( typeof e == 'undefined' || ( e.nodeType == 3 && $.trim( e.data ).length == 0 ) )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( $e.is( noty ) )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$elem.append( $e );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( isTruncated )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$elem.append( $e );\r\n\t\t\t\t\t\tif ( after )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t$elem[ $elem.is( notx ) ? 'after' : 'append' ]( after );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( test( $i, o ) )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ( e.nodeType == 3 ) // node is TEXT\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tisTruncated = ellipsisElement( $e, $d, $i, o, after );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tisTruncated = ellipsis( $e, $d, $i, o, after );\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ( !isTruncated )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t$e.detach();\r\n\t\t\t\t\t\t\t\tisTruncated = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( !isTruncated )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ( after )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tafter.detach();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\treturn isTruncated;\r\n\t}\r\n\tfunction ellipsisElement( $e, $d, $i, o, after )\r\n\t{\r\n\t\tvar e = $e[ 0 ];\r\n\r\n\t\tif ( !e )\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar txt\t\t\t= getTextContent( e ),\r\n\t\t\tspace\t\t= ( txt.indexOf(' ') !== -1 ) ? ' ' : '\\u3000',\r\n\t\t\tseparator\t= ( o.wrap == 'letter' ) ? '' : space,\r\n\t\t\ttextArr\t\t= txt.split( separator ),\r\n\t\t\tposition \t= -1,\r\n\t\t\tmidPos\t\t= -1,\r\n\t\t\tstartPos\t= 0,\r\n\t\t\tendPos\t\t= textArr.length - 1;\r\n\r\n\r\n\t\t//\tOnly one word\r\n\t\tif ( o.fallbackToLetter && startPos == 0 && endPos == 0 )\r\n\t\t{\r\n\t\t\tseparator\t= '';\r\n\t\t\ttextArr\t\t= txt.split( separator );\r\n\t\t\tendPos\t\t= textArr.length - 1;\r\n\t\t}\r\n\r\n\t\twhile ( startPos <= endPos && !( startPos == 0 && endPos == 0 ) )\r\n\t\t{\r\n\t\t\tvar m = Math.floor( ( startPos + endPos ) / 2 );\r\n\t\t\tif ( m == midPos )\r\n\t\t\t{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tmidPos = m;\r\n\r\n\t\t\tsetTextContent( e, textArr.slice( 0, midPos + 1 ).join( separator ) + o.ellipsis );\r\n\r\n\t\t\tif ( !test( $i, o ) )\r\n\t\t\t{\r\n\t\t\t\tposition = midPos;\r\n\t\t\t\tstartPos = midPos;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tendPos = midPos;\r\n\r\n\t\t\t\t//\tFallback to letter\r\n\t\t\t\tif (o.fallbackToLetter && startPos == 0 && endPos == 0 )\r\n\t\t\t\t{\r\n\t\t\t\t\tseparator\t= '';\r\n\t\t\t\t\ttextArr\t\t= textArr[ 0 ].split( separator );\r\n\t\t\t\t\tposition\t= -1;\r\n\t\t\t\t\tmidPos\t\t= -1;\r\n\t\t\t\t\tstartPos\t= 0;\r\n\t\t\t\t\tendPos\t\t= textArr.length - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( position != -1 && !( textArr.length == 1 && textArr[ 0 ].length == 0 ) )\r\n\t\t{\r\n\t\t\ttxt = addEllipsis( textArr.slice( 0, position + 1 ).join( separator ), o );\r\n\t\t\tsetTextContent( e, txt );\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar $w = $e.parent();\r\n\t\t\t$e.detach();\r\n\r\n\t\t\tvar afterLength = ( after && after.closest($w).length ) ? after.length : 0;\r\n\r\n\t\t\tif ( $w.contents().length > afterLength )\r\n\t\t\t{\r\n\t\t\t\te = findLastTextNode( $w.contents().eq( -1 - afterLength ), $d );\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\te = findLastTextNode( $w, $d, true );\r\n\t\t\t\tif ( !afterLength )\r\n\t\t\t\t{\r\n\t\t\t\t\t$w.detach();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( e )\r\n\t\t\t{\r\n\t\t\t\ttxt = addEllipsis( getTextContent( e ), o );\r\n\t\t\t\tsetTextContent( e, txt );\r\n\t\t\t\tif ( afterLength && after )\r\n\t\t\t\t{\r\n\t\t\t\t\t$(e).parent().append( after );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\tfunction test( $i, o )\r\n\t{\r\n\t\treturn $i.innerHeight() > o.maxHeight;\r\n\t}\r\n\tfunction addEllipsis( txt, o )\r\n\t{\r\n\t\twhile( $.inArray( txt.slice( -1 ), o.lastCharacter.remove ) > -1 )\r\n\t\t{\r\n\t\t\ttxt = txt.slice( 0, -1 );\r\n\t\t}\r\n\t\tif ( $.inArray( txt.slice( -1 ), o.lastCharacter.noEllipsis ) < 0 )\r\n\t\t{\r\n\t\t\ttxt += o.ellipsis;\r\n\t\t}\r\n\t\treturn txt;\r\n\t}\r\n\tfunction getSizes( $d )\r\n\t{\r\n\t\treturn {\r\n\t\t\t'width'\t: $d.innerWidth(),\r\n\t\t\t'height': $d.innerHeight()\r\n\t\t};\r\n\t}\r\n\tfunction setTextContent( e, content )\r\n\t{\r\n\t\tif ( e.innerText )\r\n\t\t{\r\n\t\t\te.innerText = content;\r\n\t\t}\r\n\t\telse if ( e.nodeValue )\r\n\t\t{\r\n\t\t\te.nodeValue = content;\r\n\t\t}\r\n\t\telse if (e.textContent)\r\n\t\t{\r\n\t\t\te.textContent = content;\r\n\t\t}\r\n\r\n\t}\r\n\tfunction getTextContent( e )\r\n\t{\r\n\t\tif ( e.innerText )\r\n\t\t{\r\n\t\t\treturn e.innerText;\r\n\t\t}\r\n\t\telse if ( e.nodeValue )\r\n\t\t{\r\n\t\t\treturn e.nodeValue;\r\n\t\t}\r\n\t\telse if ( e.textContent )\r\n\t\t{\r\n\t\t\treturn e.textContent;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t}\r\n\tfunction getPrevNode( n )\r\n\t{\r\n\t\tdo\r\n\t\t{\r\n\t\t\tn = n.previousSibling;\r\n\t\t}\r\n\t\twhile ( n && n.nodeType !== 1 && n.nodeType !== 3 );\r\n\r\n\t\treturn n;\r\n\t}\r\n\tfunction findLastTextNode( $el, $top, excludeCurrent )\r\n\t{\r\n\t\tvar e = $el && $el[ 0 ], p;\r\n\t\tif ( e )\r\n\t\t{\r\n\t\t\tif ( !excludeCurrent )\r\n\t\t\t{\r\n\t\t\t\tif ( e.nodeType === 3 )\r\n\t\t\t\t{\r\n\t\t\t\t\treturn e;\r\n\t\t\t\t}\r\n\t\t\t\tif ( $.trim( $el.text() ) )\r\n\t\t\t\t{\r\n\t\t\t\t\treturn findLastTextNode( $el.contents().last(), $top );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tp = getPrevNode( e );\r\n\t\t\twhile ( !p )\r\n\t\t\t{\r\n\t\t\t\t$el = $el.parent();\r\n\t\t\t\tif ( $el.is( $top ) || !$el.length )\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tp = getPrevNode( $el[0] );\r\n\t\t\t}\r\n\t\t\tif ( p )\r\n\t\t\t{\r\n\t\t\t\treturn findLastTextNode( $(p), $top );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tfunction getElement( e, $i )\r\n\t{\r\n\t\tif ( !e )\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif ( typeof e === 'string' )\r\n\t\t{\r\n\t\t\te = $(e, $i);\r\n\t\t\treturn ( e.length )\r\n\t\t\t\t? e\r\n\t\t\t\t: false;\r\n\t\t}\r\n\t\treturn !e.jquery\r\n\t\t\t? false\r\n\t\t\t: e;\r\n\t}\r\n\tfunction getTrueInnerHeight( $el )\r\n\t{\r\n\t\tvar h = $el.innerHeight(),\r\n\t\t\ta = [ 'paddingTop', 'paddingBottom' ];\r\n\r\n\t\tfor ( var z = 0, l = a.length; z < l; z++ )\r\n\t\t{\r\n\t\t\tvar m = parseInt( $el.css( a[ z ] ), 10 );\r\n\t\t\tif ( isNaN( m ) )\r\n\t\t\t{\r\n\t\t\t\tm = 0;\r\n\t\t\t}\r\n\t\t\th -= m;\r\n\t\t}\r\n\t\treturn h;\r\n\t}\r\n\r\n\r\n\t//\toverride jQuery.html\r\n\tvar _orgHtml = $.fn.html;\r\n\t$.fn.html = function( str )\r\n\t{\r\n\t\tif ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) )\r\n\t\t{\r\n\t\t\treturn this.trigger( 'update', [ str ] );\r\n\t\t}\r\n\t\treturn _orgHtml.apply( this, arguments );\r\n\t};\r\n\r\n\r\n\t//\toverride jQuery.text\r\n\tvar _orgText = $.fn.text;\r\n\t$.fn.text = function( str )\r\n\t{\r\n\t\tif ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) )\r\n\t\t{\r\n\t\t\tstr = $( '<div />' ).text( str ).html();\r\n\t\t\treturn this.trigger( 'update', [ str ] );\r\n\t\t}\r\n\t\treturn _orgText.apply( this, arguments );\r\n\t};\r\n\r\n\r\n})( jQuery );\r\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","/*\n * jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/\n * Open source under the BSD License.\n * Copyright © 2008 George McGinley Smith\n * All rights reserved.\n * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE\n*/\n\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['jquery'], function ($) {\n\t\t\treturn factory($);\n\t\t});\n\t} else if (typeof module === \"object\" && typeof module.exports === \"object\") {\n\t\texports = factory(require('jquery'));\n\t} else {\n\t\tfactory(jQuery);\n\t}\n})(function($){\n\n// Preserve the original jQuery \"swing\" easing as \"jswing\"\n$.easing.jswing = $.easing.swing;\n\nvar pow = Math.pow,\n\tsqrt = Math.sqrt,\n\tsin = Math.sin,\n\tcos = Math.cos,\n\tPI = Math.PI,\n\tc1 = 1.70158,\n\tc2 = c1 * 1.525,\n\tc3 = c1 + 1,\n\tc4 = ( 2 * PI ) / 3,\n\tc5 = ( 2 * PI ) / 4.5;\n\n// x is the fraction of animation progress, in the range 0..1\nfunction bounceOut(x) {\n\tvar n1 = 7.5625,\n\t\td1 = 2.75;\n\tif ( x < 1/d1 ) {\n\t\treturn n1*x*x;\n\t} else if ( x < 2/d1 ) {\n\t\treturn n1*(x-=(1.5/d1))*x + 0.75;\n\t} else if ( x < 2.5/d1 ) {\n\t\treturn n1*(x-=(2.25/d1))*x + 0.9375;\n\t} else {\n\t\treturn n1*(x-=(2.625/d1))*x + 0.984375;\n\t}\n}\n\n$.extend( $.easing,\n{\n\tdef: 'easeOutQuad',\n\tswing: function (x) {\n\t\treturn $.easing[$.easing.def](x);\n\t},\n\teaseInQuad: function (x) {\n\t\treturn x * x;\n\t},\n\teaseOutQuad: function (x) {\n\t\treturn 1 - ( 1 - x ) * ( 1 - x );\n\t},\n\teaseInOutQuad: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t2 * x * x :\n\t\t\t1 - pow( -2 * x + 2, 2 ) / 2;\n\t},\n\teaseInCubic: function (x) {\n\t\treturn x * x * x;\n\t},\n\teaseOutCubic: function (x) {\n\t\treturn 1 - pow( 1 - x, 3 );\n\t},\n\teaseInOutCubic: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t4 * x * x * x :\n\t\t\t1 - pow( -2 * x + 2, 3 ) / 2;\n\t},\n\teaseInQuart: function (x) {\n\t\treturn x * x * x * x;\n\t},\n\teaseOutQuart: function (x) {\n\t\treturn 1 - pow( 1 - x, 4 );\n\t},\n\teaseInOutQuart: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t8 * x * x * x * x :\n\t\t\t1 - pow( -2 * x + 2, 4 ) / 2;\n\t},\n\teaseInQuint: function (x) {\n\t\treturn x * x * x * x * x;\n\t},\n\teaseOutQuint: function (x) {\n\t\treturn 1 - pow( 1 - x, 5 );\n\t},\n\teaseInOutQuint: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t16 * x * x * x * x * x :\n\t\t\t1 - pow( -2 * x + 2, 5 ) / 2;\n\t},\n\teaseInSine: function (x) {\n\t\treturn 1 - cos( x * PI/2 );\n\t},\n\teaseOutSine: function (x) {\n\t\treturn sin( x * PI/2 );\n\t},\n\teaseInOutSine: function (x) {\n\t\treturn -( cos( PI * x ) - 1 ) / 2;\n\t},\n\teaseInExpo: function (x) {\n\t\treturn x === 0 ? 0 : pow( 2, 10 * x - 10 );\n\t},\n\teaseOutExpo: function (x) {\n\t\treturn x === 1 ? 1 : 1 - pow( 2, -10 * x );\n\t},\n\teaseInOutExpo: function (x) {\n\t\treturn x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?\n\t\t\tpow( 2, 20 * x - 10 ) / 2 :\n\t\t\t( 2 - pow( 2, -20 * x + 10 ) ) / 2;\n\t},\n\teaseInCirc: function (x) {\n\t\treturn 1 - sqrt( 1 - pow( x, 2 ) );\n\t},\n\teaseOutCirc: function (x) {\n\t\treturn sqrt( 1 - pow( x - 1, 2 ) );\n\t},\n\teaseInOutCirc: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :\n\t\t\t( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;\n\t},\n\teaseInElastic: function (x) {\n\t\treturn x === 0 ? 0 : x === 1 ? 1 :\n\t\t\t-pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );\n\t},\n\teaseOutElastic: function (x) {\n\t\treturn x === 0 ? 0 : x === 1 ? 1 :\n\t\t\tpow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;\n\t},\n\teaseInOutElastic: function (x) {\n\t\treturn x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?\n\t\t\t-( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :\n\t\t\tpow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;\n\t},\n\teaseInBack: function (x) {\n\t\treturn c3 * x * x * x - c1 * x * x;\n\t},\n\teaseOutBack: function (x) {\n\t\treturn 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );\n\t},\n\teaseInOutBack: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :\n\t\t\t( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;\n\t},\n\teaseInBounce: function (x) {\n\t\treturn 1 - bounceOut( 1 - x );\n\t},\n\teaseOutBounce: bounceOut,\n\teaseInOutBounce: function (x) {\n\t\treturn x < 0.5 ?\n\t\t\t( 1 - bounceOut( 1 - 2 * x ) ) / 2 :\n\t\t\t( 1 + bounceOut( 2 * x - 1 ) ) / 2;\n\t}\n});\n\n});\n","/**\n * selectize.js (v0.12.6)\n * Copyright (c) 2013–2015 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n/*jshint curly:false */\n/*jshint browser:true */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery','sifter','microplugin'], factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory(require('jquery'), require('sifter'), require('microplugin'));\n\t} else {\n\t\troot.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin);\n\t}\n}(this, function($, Sifter, MicroPlugin) {\n\t'use strict';\n\n\tvar highlight = function($element, pattern) {\n\t\tif (typeof pattern === 'string' && !pattern.length) return;\n\t\tvar regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;\n\t\n\t\tvar highlight = function(node) {\n\t\t\tvar skip = 0;\n\t\t\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t\t\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\t\t\tif (node.nodeType === 3) {\n\t\t\t\tvar pos = node.data.search(regex);\n\t\t\t\tif (pos >= 0 && node.data.length > 0) {\n\t\t\t\t\tvar match = node.data.match(regex);\n\t\t\t\t\tvar spannode = document.createElement('span');\n\t\t\t\t\tspannode.className = 'highlight';\n\t\t\t\t\tvar middlebit = node.splitText(pos);\n\t\t\t\t\tvar endbit = middlebit.splitText(match[0].length);\n\t\t\t\t\tvar middleclone = middlebit.cloneNode(true);\n\t\t\t\t\tspannode.appendChild(middleclone);\n\t\t\t\t\tmiddlebit.parentNode.replaceChild(spannode, middlebit);\n\t\t\t\t\tskip = 1;\n\t\t\t\t}\n\t\t\t} \n\t\t\t// Recurse element node, looking for child text nodes to highlight, unless element \n\t\t\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\t\t\telse if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' )) {\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; ++i) {\n\t\t\t\t\ti += highlight(node.childNodes[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn skip;\n\t\t};\n\t\n\t\treturn $element.each(function() {\n\t\t\thighlight(this);\n\t\t});\n\t};\n\t\n\t/**\n\t * removeHighlight fn copied from highlight v5 and\n\t * edited to remove with() and pass js strict mode\n\t */\n\t$.fn.removeHighlight = function() {\n\t\treturn this.find(\"span.highlight\").each(function() {\n\t\t\tthis.parentNode.firstChild.nodeName;\n\t\t\tvar parent = this.parentNode;\n\t\t\tparent.replaceChild(this.firstChild, this);\n\t\t\tparent.normalize();\n\t\t}).end();\n\t};\n\t\n\t\n\tvar MicroEvent = function() {};\n\tMicroEvent.prototype = {\n\t\ton: function(event, fct){\n\t\t\tthis._events = this._events || {};\n\t\t\tthis._events[event] = this._events[event] || [];\n\t\t\tthis._events[event].push(fct);\n\t\t},\n\t\toff: function(event, fct){\n\t\t\tvar n = arguments.length;\n\t\t\tif (n === 0) return delete this._events;\n\t\t\tif (n === 1) return delete this._events[event];\n\t\n\t\t\tthis._events = this._events || {};\n\t\t\tif (event in this._events === false) return;\n\t\t\tthis._events[event].splice(this._events[event].indexOf(fct), 1);\n\t\t},\n\t\ttrigger: function(event /* , args... */){\n\t\t\tthis._events = this._events || {};\n\t\t\tif (event in this._events === false) return;\n\t\t\tfor (var i = 0; i < this._events[event].length; i++){\n\t\t\t\tthis._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * Mixin will delegate all MicroEvent.js function in the destination object.\n\t *\n\t * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent\n\t *\n\t * @param {object} the object which will support MicroEvent\n\t */\n\tMicroEvent.mixin = function(destObject){\n\t\tvar props = ['on', 'off', 'trigger'];\n\t\tfor (var i = 0; i < props.length; i++){\n\t\t\tdestObject.prototype[props[i]] = MicroEvent.prototype[props[i]];\n\t\t}\n\t};\n\t\n\tvar IS_MAC        = /Mac/.test(navigator.userAgent);\n\t\n\tvar KEY_A         = 65;\n\tvar KEY_COMMA     = 188;\n\tvar KEY_RETURN    = 13;\n\tvar KEY_ESC       = 27;\n\tvar KEY_LEFT      = 37;\n\tvar KEY_UP        = 38;\n\tvar KEY_P         = 80;\n\tvar KEY_RIGHT     = 39;\n\tvar KEY_DOWN      = 40;\n\tvar KEY_N         = 78;\n\tvar KEY_BACKSPACE = 8;\n\tvar KEY_DELETE    = 46;\n\tvar KEY_SHIFT     = 16;\n\tvar KEY_CMD       = IS_MAC ? 91 : 17;\n\tvar KEY_CTRL      = IS_MAC ? 18 : 17;\n\tvar KEY_TAB       = 9;\n\t\n\tvar TAG_SELECT    = 1;\n\tvar TAG_INPUT     = 2;\n\t\n\t// for now, android support in general is too spotty to support validity\n\tvar SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('input').validity;\n\t\n\t\n\tvar isset = function(object) {\n\t\treturn typeof object !== 'undefined';\n\t};\n\t\n\t/**\n\t * Converts a scalar to its best string representation\n\t * for hash keys and HTML attribute values.\n\t *\n\t * Transformations:\n\t *   'str'     -> 'str'\n\t *   null      -> ''\n\t *   undefined -> ''\n\t *   true      -> '1'\n\t *   false     -> '0'\n\t *   0         -> '0'\n\t *   1         -> '1'\n\t *\n\t * @param {string} value\n\t * @returns {string|null}\n\t */\n\tvar hash_key = function(value) {\n\t\tif (typeof value === 'undefined' || value === null) return null;\n\t\tif (typeof value === 'boolean') return value ? '1' : '0';\n\t\treturn value + '';\n\t};\n\t\n\t/**\n\t * Escapes a string for use within HTML.\n\t *\n\t * @param {string} str\n\t * @returns {string}\n\t */\n\tvar escape_html = function(str) {\n\t\treturn (str + '')\n\t\t\t.replace(/&/g, '&amp;')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;')\n\t\t\t.replace(/\"/g, '&quot;');\n\t};\n\t\n\t/**\n\t * Escapes \"$\" characters in replacement strings.\n\t *\n\t * @param {string} str\n\t * @returns {string}\n\t */\n\tvar escape_replace = function(str) {\n\t\treturn (str + '').replace(/\\$/g, '$$$$');\n\t};\n\t\n\tvar hook = {};\n\t\n\t/**\n\t * Wraps `method` on `self` so that `fn`\n\t * is invoked before the original method.\n\t *\n\t * @param {object} self\n\t * @param {string} method\n\t * @param {function} fn\n\t */\n\thook.before = function(self, method, fn) {\n\t\tvar original = self[method];\n\t\tself[method] = function() {\n\t\t\tfn.apply(self, arguments);\n\t\t\treturn original.apply(self, arguments);\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `method` on `self` so that `fn`\n\t * is invoked after the original method.\n\t *\n\t * @param {object} self\n\t * @param {string} method\n\t * @param {function} fn\n\t */\n\thook.after = function(self, method, fn) {\n\t\tvar original = self[method];\n\t\tself[method] = function() {\n\t\t\tvar result = original.apply(self, arguments);\n\t\t\tfn.apply(self, arguments);\n\t\t\treturn result;\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `fn` so that it can only be invoked once.\n\t *\n\t * @param {function} fn\n\t * @returns {function}\n\t */\n\tvar once = function(fn) {\n\t\tvar called = false;\n\t\treturn function() {\n\t\t\tif (called) return;\n\t\t\tcalled = true;\n\t\t\tfn.apply(this, arguments);\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `fn` so that it can only be called once\n\t * every `delay` milliseconds (invoked on the falling edge).\n\t *\n\t * @param {function} fn\n\t * @param {int} delay\n\t * @returns {function}\n\t */\n\tvar debounce = function(fn, delay) {\n\t\tvar timeout;\n\t\treturn function() {\n\t\t\tvar self = this;\n\t\t\tvar args = arguments;\n\t\t\twindow.clearTimeout(timeout);\n\t\t\ttimeout = window.setTimeout(function() {\n\t\t\t\tfn.apply(self, args);\n\t\t\t}, delay);\n\t\t};\n\t};\n\t\n\t/**\n\t * Debounce all fired events types listed in `types`\n\t * while executing the provided `fn`.\n\t *\n\t * @param {object} self\n\t * @param {array} types\n\t * @param {function} fn\n\t */\n\tvar debounce_events = function(self, types, fn) {\n\t\tvar type;\n\t\tvar trigger = self.trigger;\n\t\tvar event_args = {};\n\t\n\t\t// override trigger method\n\t\tself.trigger = function() {\n\t\t\tvar type = arguments[0];\n\t\t\tif (types.indexOf(type) !== -1) {\n\t\t\t\tevent_args[type] = arguments;\n\t\t\t} else {\n\t\t\t\treturn trigger.apply(self, arguments);\n\t\t\t}\n\t\t};\n\t\n\t\t// invoke provided function\n\t\tfn.apply(self, []);\n\t\tself.trigger = trigger;\n\t\n\t\t// trigger queued events\n\t\tfor (type in event_args) {\n\t\t\tif (event_args.hasOwnProperty(type)) {\n\t\t\t\ttrigger.apply(self, event_args[type]);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * A workaround for http://bugs.jquery.com/ticket/6696\n\t *\n\t * @param {object} $parent - Parent element to listen on.\n\t * @param {string} event - Event name.\n\t * @param {string} selector - Descendant selector to filter by.\n\t * @param {function} fn - Event handler.\n\t */\n\tvar watchChildEvent = function($parent, event, selector, fn) {\n\t\t$parent.on(event, selector, function(e) {\n\t\t\tvar child = e.target;\n\t\t\twhile (child && child.parentNode !== $parent[0]) {\n\t\t\t\tchild = child.parentNode;\n\t\t\t}\n\t\t\te.currentTarget = child;\n\t\t\treturn fn.apply(this, [e]);\n\t\t});\n\t};\n\t\n\t/**\n\t * Determines the current selection within a text input control.\n\t * Returns an object containing:\n\t *   - start\n\t *   - length\n\t *\n\t * @param {object} input\n\t * @returns {object}\n\t */\n\tvar getSelection = function(input) {\n\t\tvar result = {};\n\t\tif ('selectionStart' in input) {\n\t\t\tresult.start = input.selectionStart;\n\t\t\tresult.length = input.selectionEnd - result.start;\n\t\t} else if (document.selection) {\n\t\t\tinput.focus();\n\t\t\tvar sel = document.selection.createRange();\n\t\t\tvar selLen = document.selection.createRange().text.length;\n\t\t\tsel.moveStart('character', -input.value.length);\n\t\t\tresult.start = sel.text.length - selLen;\n\t\t\tresult.length = selLen;\n\t\t}\n\t\treturn result;\n\t};\n\t\n\t/**\n\t * Copies CSS properties from one element to another.\n\t *\n\t * @param {object} $from\n\t * @param {object} $to\n\t * @param {array} properties\n\t */\n\tvar transferStyles = function($from, $to, properties) {\n\t\tvar i, n, styles = {};\n\t\tif (properties) {\n\t\t\tfor (i = 0, n = properties.length; i < n; i++) {\n\t\t\t\tstyles[properties[i]] = $from.css(properties[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tstyles = $from.css();\n\t\t}\n\t\t$to.css(styles);\n\t};\n\t\n\t/**\n\t * Measures the width of a string within a\n\t * parent element (in pixels).\n\t *\n\t * @param {string} str\n\t * @param {object} $parent\n\t * @returns {int}\n\t */\n\tvar measureString = function(str, $parent) {\n\t\tif (!str) {\n\t\t\treturn 0;\n\t\t}\n\t\n\t\tif (!Selectize.$testInput) {\n\t\t\tSelectize.$testInput = $('<span />').css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: -99999,\n\t\t\t\tleft: -99999,\n\t\t\t\twidth: 'auto',\n\t\t\t\tpadding: 0,\n\t\t\t\twhiteSpace: 'pre'\n\t\t\t}).appendTo('body');\n\t\t}\n\t\n\t\tSelectize.$testInput.text(str);\n\t\n\t\ttransferStyles($parent, Selectize.$testInput, [\n\t\t\t'letterSpacing',\n\t\t\t'fontSize',\n\t\t\t'fontFamily',\n\t\t\t'fontWeight',\n\t\t\t'textTransform'\n\t\t]);\n\t\n\t\treturn Selectize.$testInput.width();\n\t};\n\t\n\t/**\n\t * Sets up an input to grow horizontally as the user\n\t * types. If the value is changed manually, you can\n\t * trigger the \"update\" handler to resize:\n\t *\n\t * $input.trigger('update');\n\t *\n\t * @param {object} $input\n\t */\n\tvar autoGrow = function($input) {\n\t\tvar currentWidth = null;\n\t\n\t\tvar update = function(e, options) {\n\t\t\tvar value, keyCode, printable, placeholder, width;\n\t\t\tvar shift, character, selection;\n\t\t\te = e || window.event || {};\n\t\t\toptions = options || {};\n\t\n\t\t\tif (e.metaKey || e.altKey) return;\n\t\t\tif (!options.force && $input.data('grow') === false) return;\n\t\n\t\t\tvalue = $input.val();\n\t\t\tif (e.type && e.type.toLowerCase() === 'keydown') {\n\t\t\t\tkeyCode = e.keyCode;\n\t\t\t\tprintable = (\n\t\t\t\t\t(keyCode >= 48 && keyCode <= 57)  || // 0-9\n\t\t\t\t\t(keyCode >= 65 && keyCode <= 90)   || // a-z\n\t\t\t\t\t(keyCode >= 96 && keyCode <= 111)  || // numpad 0-9, numeric operators\n\t\t\t\t\t(keyCode >= 186 && keyCode <= 222) || // semicolon, equal, comma, dash, etc.\n\t\t\t\t\tkeyCode === 32 // space\n\t\t\t\t);\n\t\n\t\t\t\tif (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) {\n\t\t\t\t\tselection = getSelection($input[0]);\n\t\t\t\t\tif (selection.length) {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start) + value.substring(selection.start + selection.length);\n\t\t\t\t\t} else if (keyCode === KEY_BACKSPACE && selection.start) {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start - 1) + value.substring(selection.start + 1);\n\t\t\t\t\t} else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start) + value.substring(selection.start + 1);\n\t\t\t\t\t}\n\t\t\t\t} else if (printable) {\n\t\t\t\t\tshift = e.shiftKey;\n\t\t\t\t\tcharacter = String.fromCharCode(e.keyCode);\n\t\t\t\t\tif (shift) character = character.toUpperCase();\n\t\t\t\t\telse character = character.toLowerCase();\n\t\t\t\t\tvalue += character;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tplaceholder = $input.attr('placeholder');\n\t\t\tif (!value && placeholder) {\n\t\t\t\tvalue = placeholder;\n\t\t\t}\n\t\n\t\t\twidth = measureString(value, $input) + 4;\n\t\t\tif (width !== currentWidth) {\n\t\t\t\tcurrentWidth = width;\n\t\t\t\t$input.width(width);\n\t\t\t\t$input.triggerHandler('resize');\n\t\t\t}\n\t\t};\n\t\n\t\t$input.on('keydown keyup update blur', update);\n\t\tupdate();\n\t};\n\t\n\tvar domToString = function(d) {\n\t\tvar tmp = document.createElement('div');\n\t\n\t\ttmp.appendChild(d.cloneNode(true));\n\t\n\t\treturn tmp.innerHTML;\n\t};\n\t\n\tvar logError = function(message, options){\n\t\tif(!options) options = {};\n\t\tvar component = \"Selectize\";\n\t\n\t\tconsole.error(component + \": \" + message)\n\t\n\t\tif(options.explanation){\n\t\t\t// console.group is undefined in <IE11\n\t\t\tif(console.group) console.group();\n\t\t\tconsole.error(options.explanation);\n\t\t\tif(console.group) console.groupEnd();\n\t\t}\n\t}\n\t\n\t\n\tvar Selectize = function($input, settings) {\n\t\tvar key, i, n, dir, input, self = this;\n\t\tinput = $input[0];\n\t\tinput.selectize = self;\n\t\n\t\t// detect rtl environment\n\t\tvar computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;\n\t\tdir = dir || $input.parents('[dir]:first').attr('dir') || '';\n\t\n\t\t// setup default state\n\t\t$.extend(self, {\n\t\t\torder            : 0,\n\t\t\tsettings         : settings,\n\t\t\t$input           : $input,\n\t\t\ttabIndex         : $input.attr('tabindex') || '',\n\t\t\ttagType          : input.tagName.toLowerCase() === 'select' ? TAG_SELECT : TAG_INPUT,\n\t\t\trtl              : /rtl/i.test(dir),\n\t\n\t\t\teventNS          : '.selectize' + (++Selectize.count),\n\t\t\thighlightedValue : null,\n\t\t\tisBlurring       : false,\n\t\t\tisOpen           : false,\n\t\t\tisDisabled       : false,\n\t\t\tisRequired       : $input.is('[required]'),\n\t\t\tisInvalid        : false,\n\t\t\tisLocked         : false,\n\t\t\tisFocused        : false,\n\t\t\tisInputHidden    : false,\n\t\t\tisSetup          : false,\n\t\t\tisShiftDown      : false,\n\t\t\tisCmdDown        : false,\n\t\t\tisCtrlDown       : false,\n\t\t\tignoreFocus      : false,\n\t\t\tignoreBlur       : false,\n\t\t\tignoreHover      : false,\n\t\t\thasOptions       : false,\n\t\t\tcurrentResults   : null,\n\t\t\tlastValue        : '',\n\t\t\tcaretPos         : 0,\n\t\t\tloading          : 0,\n\t\t\tloadedSearches   : {},\n\t\n\t\t\t$activeOption    : null,\n\t\t\t$activeItems     : [],\n\t\n\t\t\toptgroups        : {},\n\t\t\toptions          : {},\n\t\t\tuserOptions      : {},\n\t\t\titems            : [],\n\t\t\trenderCache      : {},\n\t\t\tonSearchChange   : settings.loadThrottle === null ? self.onSearchChange : debounce(self.onSearchChange, settings.loadThrottle)\n\t\t});\n\t\n\t\t// search system\n\t\tself.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\t\n\t\t// build options table\n\t\tif (self.settings.options) {\n\t\t\tfor (i = 0, n = self.settings.options.length; i < n; i++) {\n\t\t\t\tself.registerOption(self.settings.options[i]);\n\t\t\t}\n\t\t\tdelete self.settings.options;\n\t\t}\n\t\n\t\t// build optgroup table\n\t\tif (self.settings.optgroups) {\n\t\t\tfor (i = 0, n = self.settings.optgroups.length; i < n; i++) {\n\t\t\t\tself.registerOptionGroup(self.settings.optgroups[i]);\n\t\t\t}\n\t\t\tdelete self.settings.optgroups;\n\t\t}\n\t\n\t\t// option-dependent defaults\n\t\tself.settings.mode = self.settings.mode || (self.settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof self.settings.hideSelected !== 'boolean') {\n\t\t\tself.settings.hideSelected = self.settings.mode === 'multi';\n\t\t}\n\t\n\t\tself.initializePlugins(self.settings.plugins);\n\t\tself.setupCallbacks();\n\t\tself.setupTemplates();\n\t\tself.setup();\n\t};\n\t\n\t// mixins\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\t\n\tMicroEvent.mixin(Selectize);\n\t\n\tif(typeof MicroPlugin !== \"undefined\"){\n\t\tMicroPlugin.mixin(Selectize);\n\t}else{\n\t\tlogError(\"Dependency MicroPlugin is missing\",\n\t\t\t{explanation:\n\t\t\t\t\"Make sure you either: (1) are using the \\\"standalone\\\" \"+\n\t\t\t\t\"version of Selectize, or (2) require MicroPlugin before you \"+\n\t\t\t\t\"load Selectize.\"}\n\t\t);\n\t}\n\t\n\t\n\t// methods\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\t\n\t$.extend(Selectize.prototype, {\n\t\n\t\t/**\n\t\t * Creates all elements and sets up event bindings.\n\t\t */\n\t\tsetup: function() {\n\t\t\tvar self      = this;\n\t\t\tvar settings  = self.settings;\n\t\t\tvar eventNS   = self.eventNS;\n\t\t\tvar $window   = $(window);\n\t\t\tvar $document = $(document);\n\t\t\tvar $input    = self.$input;\n\t\n\t\t\tvar $wrapper;\n\t\t\tvar $control;\n\t\t\tvar $control_input;\n\t\t\tvar $dropdown;\n\t\t\tvar $dropdown_content;\n\t\t\tvar $dropdown_parent;\n\t\t\tvar inputMode;\n\t\t\tvar timeout_blur;\n\t\t\tvar timeout_focus;\n\t\t\tvar classes;\n\t\t\tvar classes_plugins;\n\t\t\tvar inputId;\n\t\n\t\t\tinputMode         = self.settings.mode;\n\t\t\tclasses           = $input.attr('class') || '';\n\t\n\t\t\t$wrapper          = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);\n\t\t\t$control          = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);\n\t\t\t$control_input    = $('<input type=\"text\" autocomplete=\"off\" />').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);\n\t\t\t$dropdown_parent  = $(settings.dropdownParent || $wrapper);\n\t\t\t$dropdown         = $('<div>').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent);\n\t\t\t$dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);\n\t\n\t\t\tif(inputId = $input.attr('id')) {\n\t\t\t\t$control_input.attr('id', inputId + '-selectized');\n\t\t\t\t$(\"label[for='\"+inputId+\"']\").attr('for', inputId + '-selectized');\n\t\t\t}\n\t\n\t\t\tif(self.settings.copyClassesToDropdown) {\n\t\t\t\t$dropdown.addClass(classes);\n\t\t\t}\n\t\n\t\t\t$wrapper.css({\n\t\t\t\twidth: $input[0].style.width\n\t\t\t});\n\t\n\t\t\tif (self.plugins.names.length) {\n\t\t\t\tclasses_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\t\t$wrapper.addClass(classes_plugins);\n\t\t\t\t$dropdown.addClass(classes_plugins);\n\t\t\t}\n\t\n\t\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {\n\t\t\t\t$input.attr('multiple', 'multiple');\n\t\t\t}\n\t\n\t\t\tif (self.settings.placeholder) {\n\t\t\t\t$control_input.attr('placeholder', settings.placeholder);\n\t\t\t}\n\t\n\t\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\t\tif (!self.settings.splitOn && self.settings.delimiter) {\n\t\t\t\tvar delimiterEscaped = self.settings.delimiter.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\t\tself.settings.splitOn = new RegExp('\\\\s*' + delimiterEscaped + '+\\\\s*');\n\t\t\t}\n\t\n\t\t\tif ($input.attr('autocorrect')) {\n\t\t\t\t$control_input.attr('autocorrect', $input.attr('autocorrect'));\n\t\t\t}\n\t\n\t\t\tif ($input.attr('autocapitalize')) {\n\t\t\t\t$control_input.attr('autocapitalize', $input.attr('autocapitalize'));\n\t\t\t}\n\t\t\t$control_input[0].type = $input[0].type;\n\t\n\t\t\tself.$wrapper          = $wrapper;\n\t\t\tself.$control          = $control;\n\t\t\tself.$control_input    = $control_input;\n\t\t\tself.$dropdown         = $dropdown;\n\t\t\tself.$dropdown_content = $dropdown_content;\n\t\n\t\t\t$dropdown.on('mouseenter mousedown click', '[data-disabled]>[data-selectable]', function(e) { e.stopImmediatePropagation(); });\n\t\t\t$dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); });\n\t\t\t$dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); });\n\t\t\twatchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); });\n\t\t\tautoGrow($control_input);\n\t\n\t\t\t$control.on({\n\t\t\t\tmousedown : function() { return self.onMouseDown.apply(self, arguments); },\n\t\t\t\tclick     : function() { return self.onClick.apply(self, arguments); }\n\t\t\t});\n\t\n\t\t\t$control_input.on({\n\t\t\t\tmousedown : function(e) { e.stopPropagation(); },\n\t\t\t\tkeydown   : function() { return self.onKeyDown.apply(self, arguments); },\n\t\t\t\tkeyup     : function() { return self.onKeyUp.apply(self, arguments); },\n\t\t\t\tkeypress  : function() { return self.onKeyPress.apply(self, arguments); },\n\t\t\t\tresize    : function() { self.positionDropdown.apply(self, []); },\n\t\t\t\tblur      : function() { return self.onBlur.apply(self, arguments); },\n\t\t\t\tfocus     : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },\n\t\t\t\tpaste     : function() { return self.onPaste.apply(self, arguments); }\n\t\t\t});\n\t\n\t\t\t$document.on('keydown' + eventNS, function(e) {\n\t\t\t\tself.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey'];\n\t\t\t\tself.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey'];\n\t\t\t\tself.isShiftDown = e.shiftKey;\n\t\t\t});\n\t\n\t\t\t$document.on('keyup' + eventNS, function(e) {\n\t\t\t\tif (e.keyCode === KEY_CTRL) self.isCtrlDown = false;\n\t\t\t\tif (e.keyCode === KEY_SHIFT) self.isShiftDown = false;\n\t\t\t\tif (e.keyCode === KEY_CMD) self.isCmdDown = false;\n\t\t\t});\n\t\n\t\t\t$document.on('mousedown' + eventNS, function(e) {\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\t// prevent events on the dropdown scrollbar from causing the control to blur\n\t\t\t\t\tif (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// blur on click outside\n\t\t\t\t\tif (!self.$control.has(e.target).length && e.target !== self.$control[0]) {\n\t\t\t\t\t\tself.blur(e.target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t$window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() {\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tself.positionDropdown.apply(self, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$window.on('mousemove' + eventNS, function() {\n\t\t\t\tself.ignoreHover = false;\n\t\t\t});\n\t\n\t\t\t// store original children and tab index so that they can be\n\t\t\t// restored when the destroy() method is called.\n\t\t\tthis.revertSettings = {\n\t\t\t\t$children : $input.children().detach(),\n\t\t\t\ttabindex  : $input.attr('tabindex')\n\t\t\t};\n\t\n\t\t\t$input.attr('tabindex', -1).hide().after(self.$wrapper);\n\t\n\t\t\tif ($.isArray(settings.items)) {\n\t\t\t\tself.setValue(settings.items);\n\t\t\t\tdelete settings.items;\n\t\t\t}\n\t\n\t\t\t// feature detect for the validation API\n\t\t\tif (SUPPORTS_VALIDITY_API) {\n\t\t\t\t$input.on('invalid' + eventNS, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.isInvalid = true;\n\t\t\t\t\tself.refreshState();\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\tself.updateOriginalInput();\n\t\t\tself.refreshItems();\n\t\t\tself.refreshState();\n\t\t\tself.updatePlaceholder();\n\t\t\tself.isSetup = true;\n\t\n\t\t\tif ($input.is(':disabled')) {\n\t\t\t\tself.disable();\n\t\t\t}\n\t\n\t\t\tself.on('change', this.onChange);\n\t\n\t\t\t$input.data('selectize', self);\n\t\t\t$input.addClass('selectized');\n\t\t\tself.trigger('initialize');\n\t\n\t\t\t// preload options\n\t\t\tif (settings.preload === true) {\n\t\t\t\tself.onSearchChange('');\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Sets up default rendering functions.\n\t\t */\n\t\tsetupTemplates: function() {\n\t\t\tvar self = this;\n\t\t\tvar field_label = self.settings.labelField;\n\t\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\t\n\t\t\tvar templates = {\n\t\t\t\t'optgroup': function(data) {\n\t\t\t\t\treturn '<div class=\"optgroup\">' + data.html + '</div>';\n\t\t\t\t},\n\t\t\t\t'optgroup_header': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'option': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"option\">' + escape(data[field_label]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'item': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"item\">' + escape(data[field_label]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'option_create': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tself.settings.render = $.extend({}, templates, self.settings.render);\n\t\t},\n\t\n\t\t/**\n\t\t * Maps fired events to callbacks provided\n\t\t * in the settings used when creating the control.\n\t\t */\n\t\tsetupCallbacks: function() {\n\t\t\tvar key, fn, callbacks = {\n\t\t\t\t'initialize'      : 'onInitialize',\n\t\t\t\t'change'          : 'onChange',\n\t\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t\t'clear'           : 'onClear',\n\t\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t\t'type'            : 'onType',\n\t\t\t\t'load'            : 'onLoad',\n\t\t\t\t'focus'           : 'onFocus',\n\t\t\t\t'blur'            : 'onBlur'\n\t\t\t};\n\t\n\t\t\tfor (key in callbacks) {\n\t\t\t\tif (callbacks.hasOwnProperty(key)) {\n\t\t\t\t\tfn = this.settings[callbacks[key]];\n\t\t\t\t\tif (fn) this.on(key, fn);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the main control element\n\t\t * has a click event.\n\t\t *\n\t\t * @param {object} e\n\t\t * @return {boolean}\n\t\t */\n\t\tonClick: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\t// necessary for mobile webkit devices (manual focus triggering\n\t\t\t// is ignored unless invoked within a click event)\n\t    // also necessary to reopen a dropdown that has been closed by\n\t    // closeAfterSelect\n\t\t\tif (!self.isFocused || !self.isOpen) {\n\t\t\t\tself.focus();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the main control element\n\t\t * has a mouse down event.\n\t\t *\n\t\t * @param {object} e\n\t\t * @return {boolean}\n\t\t */\n\t\tonMouseDown: function(e) {\n\t\t\tvar self = this;\n\t\t\tvar defaultPrevented = e.isDefaultPrevented();\n\t\t\tvar $target = $(e.target);\n\t\n\t\t\tif (self.isFocused) {\n\t\t\t\t// retain focus by preventing native handling. if the\n\t\t\t\t// event target is the input it should not be modified.\n\t\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t\tif (e.target !== self.$control_input[0]) {\n\t\t\t\t\tif (self.settings.mode === 'single') {\n\t\t\t\t\t\t// toggle dropdown\n\t\t\t\t\t\tself.isOpen ? self.close() : self.open();\n\t\t\t\t\t} else if (!defaultPrevented) {\n\t\t\t\t\t\tself.setActiveItem(null);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// give control focus\n\t\t\t\tif (!defaultPrevented) {\n\t\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\t\tself.focus();\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the value of the control has been changed.\n\t\t * This should propagate the event to the original DOM\n\t\t * input / select element.\n\t\t */\n\t\tonChange: function() {\n\t\t\tthis.$input.trigger('change');\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> paste.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonPaste: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isFull() || self.isInputHidden || self.isLocked) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If a regex or string is included, this will split the pasted\n\t\t\t// input and create Items for each separate value\n\t\t\tif (self.settings.splitOn) {\n\t\n\t\t\t\t// Wait for pasted text to be recognized in value\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar pastedText = self.$control_input.val();\n\t\t\t\t\tif(!pastedText.match(self.settings.splitOn)){ return }\n\t\n\t\t\t\t\tvar splitInput = $.trim(pastedText).split(self.settings.splitOn);\n\t\t\t\t\tfor (var i = 0, n = splitInput.length; i < n; i++) {\n\t\t\t\t\t\tself.createItem(splitInput[i]);\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keypress.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyPress: function(e) {\n\t\t\tif (this.isLocked) return e && e.preventDefault();\n\t\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\t\tif (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) {\n\t\t\t\tthis.createItem();\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keydown.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyDown: function(e) {\n\t\t\tvar isInput = e.target === this.$control_input[0];\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) {\n\t\t\t\tif (e.keyCode !== KEY_TAB) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase KEY_A:\n\t\t\t\t\tif (self.isCmdDown) {\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_N:\n\t\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\t\tcase KEY_DOWN:\n\t\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\t\tself.open();\n\t\t\t\t\t} else if (self.$activeOption) {\n\t\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t\tvar $next = self.getAdjacentOption(self.$activeOption, 1);\n\t\t\t\t\t\tif ($next.length) self.setActiveOption($next, true, true);\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_P:\n\t\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\t\tcase KEY_UP:\n\t\t\t\t\tif (self.$activeOption) {\n\t\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t\tvar $prev = self.getAdjacentOption(self.$activeOption, -1);\n\t\t\t\t\t\tif ($prev.length) self.setActiveOption($prev, true, true);\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_RETURN:\n\t\t\t\t\tif (self.isOpen && self.$activeOption) {\n\t\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_LEFT:\n\t\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_RIGHT:\n\t\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_TAB:\n\t\t\t\t\tif (self.settings.selectOnTab && self.isOpen && self.$activeOption) {\n\t\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\t\n\t\t\t\t\t\t// Default behaviour is to jump to the next field, we only want this\n\t\t\t\t\t\t// if the current field doesn't accept any more entries\n\t\t\t\t\t\tif (!self.isFull()) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_BACKSPACE:\n\t\t\t\tcase KEY_DELETE:\n\t\t\t\t\tself.deleteSelection(e);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keyup.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyUp: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) return e && e.preventDefault();\n\t\t\tvar value = self.$control_input.val() || '';\n\t\t\tif (self.lastValue !== value) {\n\t\t\t\tself.lastValue = value;\n\t\t\t\tself.onSearchChange(value);\n\t\t\t\tself.refreshOptions();\n\t\t\t\tself.trigger('type', value);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the user-provide option provider / loader.\n\t\t *\n\t\t * Note: this function is debounced in the Selectize\n\t\t * constructor (by `settings.loadThrottle` milliseconds)\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tonSearchChange: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar fn = self.settings.load;\n\t\t\tif (!fn) return;\n\t\t\tif (self.loadedSearches.hasOwnProperty(value)) return;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tself.load(function(callback) {\n\t\t\t\tfn.apply(self, [value, callback]);\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> focus.\n\t\t *\n\t\t * @param {object} e (optional)\n\t\t * @returns {boolean}\n\t\t */\n\t\tonFocus: function(e) {\n\t\t\tvar self = this;\n\t\t\tvar wasFocused = self.isFocused;\n\t\n\t\t\tif (self.isDisabled) {\n\t\t\t\tself.blur();\n\t\t\t\te && e.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (self.ignoreFocus) return;\n\t\t\tself.isFocused = true;\n\t\t\tif (self.settings.preload === 'focus') self.onSearchChange('');\n\t\n\t\t\tif (!wasFocused) self.trigger('focus');\n\t\n\t\t\tif (!self.$activeItems.length) {\n\t\t\t\tself.showInput();\n\t\t\t\tself.setActiveItem(null);\n\t\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t\t}\n\t\n\t\t\tself.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> blur.\n\t\t *\n\t\t * @param {object} e\n\t\t * @param {Element} dest\n\t\t */\n\t\tonBlur: function(e, dest) {\n\t\t\tvar self = this;\n\t\t\tif (!self.isFocused) return;\n\t\t\tself.isFocused = false;\n\t\n\t\t\tif (self.ignoreFocus) {\n\t\t\t\treturn;\n\t\t\t} else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {\n\t\t\t\t// necessary to prevent IE closing the dropdown when the scrollbar is clicked\n\t\t\t\tself.ignoreBlur = true;\n\t\t\t\tself.onFocus(e);\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar deactivate = function() {\n\t\t\t\tself.close();\n\t\t\t\tself.setTextboxValue('');\n\t\t\t\tself.setActiveItem(null);\n\t\t\t\tself.setActiveOption(null);\n\t\t\t\tself.setCaret(self.items.length);\n\t\t\t\tself.refreshState();\n\t\n\t\t\t\t// IE11 bug: element still marked as active\n\t\t\t\tdest && dest.focus && dest.focus();\n\t\n\t\t\t\tself.isBlurring = false;\n\t\t\t\tself.ignoreFocus = false;\n\t\t\t\tself.trigger('blur');\n\t\t\t};\n\t\n\t\t\tself.isBlurring = true;\n\t\t\tself.ignoreFocus = true;\n\t\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\t\tself.createItem(null, false, deactivate);\n\t\t\t} else {\n\t\t\t\tdeactivate();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user rolls over\n\t\t * an option in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonOptionHover: function(e) {\n\t\t\tif (this.ignoreHover) return;\n\t\t\tthis.setActiveOption(e.currentTarget, false);\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user clicks on an option\n\t\t * in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonOptionSelect: function(e) {\n\t\t\tvar value, $target, $option, self = this;\n\t\n\t\t\tif (e.preventDefault) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\n\t\t\t$target = $(e.currentTarget);\n\t\t\tif ($target.hasClass('create')) {\n\t\t\t\tself.createItem(null, function() {\n\t\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvalue = $target.attr('data-value');\n\t\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\t\tself.lastQuery = null;\n\t\t\t\t\tself.setTextboxValue('');\n\t\t\t\t\tself.addItem(value);\n\t\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t} else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) {\n\t\t\t\t\t\tself.setActiveOption(self.getOption(value));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user clicks on an item\n\t\t * that has been selected.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonItemSelect: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) return;\n\t\t\tif (self.settings.mode === 'multi') {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.setActiveItem(e.currentTarget, e);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the provided method that provides\n\t\t * results to a callback---which are then added\n\t\t * as options to the control.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tload: function(fn) {\n\t\t\tvar self = this;\n\t\t\tvar $wrapper = self.$wrapper.addClass(self.settings.loadingClass);\n\t\n\t\t\tself.loading++;\n\t\t\tfn.apply(self, [function(results) {\n\t\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\t\tif (results && results.length) {\n\t\t\t\t\tself.addOption(results);\n\t\t\t\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\t\t\t\t}\n\t\t\t\tif (!self.loading) {\n\t\t\t\t\t$wrapper.removeClass(self.settings.loadingClass);\n\t\t\t\t}\n\t\t\t\tself.trigger('load', results);\n\t\t\t}]);\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the input field of the control to the specified value.\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tsetTextboxValue: function(value) {\n\t\t\tvar $input = this.$control_input;\n\t\t\tvar changed = $input.val() !== value;\n\t\t\tif (changed) {\n\t\t\t\t$input.val(value).triggerHandler('update');\n\t\t\t\tthis.lastValue = value;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the value of the control. If multiple items\n\t\t * can be selected (e.g. <select multiple>), this returns\n\t\t * an array. If only one item can be selected, this\n\t\t * returns a string.\n\t\t *\n\t\t * @returns {mixed}\n\t\t */\n\t\tgetValue: function() {\n\t\t\tif (this.tagType === TAG_SELECT && this.$input.attr('multiple')) {\n\t\t\t\treturn this.items;\n\t\t\t} else {\n\t\t\t\treturn this.items.join(this.settings.delimiter);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Resets the selected items to the given value.\n\t\t *\n\t\t * @param {mixed} value\n\t\t */\n\t\tsetValue: function(value, silent) {\n\t\t\tvar events = silent ? [] : ['change'];\n\t\n\t\t\tdebounce_events(this, events, function() {\n\t\t\t\tthis.clear(silent);\n\t\t\t\tthis.addItems(value, silent);\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the selected item.\n\t\t *\n\t\t * @param {object} $item\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tsetActiveItem: function($item, e) {\n\t\t\tvar self = this;\n\t\t\tvar eventName;\n\t\t\tvar i, idx, begin, end, item, swap;\n\t\t\tvar $last;\n\t\n\t\t\tif (self.settings.mode === 'single') return;\n\t\t\t$item = $($item);\n\t\n\t\t\t// clear the active selection\n\t\t\tif (!$item.length) {\n\t\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\t\tself.$activeItems = [];\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.showInput();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// modify selection\n\t\t\teventName = e && e.type.toLowerCase();\n\t\n\t\t\tif (eventName === 'mousedown' && self.isShiftDown && self.$activeItems.length) {\n\t\t\t\t$last = self.$control.children('.active:last');\n\t\t\t\tbegin = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$last[0]]);\n\t\t\t\tend   = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$item[0]]);\n\t\t\t\tif (begin > end) {\n\t\t\t\t\tswap  = begin;\n\t\t\t\t\tbegin = end;\n\t\t\t\t\tend   = swap;\n\t\t\t\t}\n\t\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\t\titem = self.$control[0].childNodes[i];\n\t\t\t\t\tif (self.$activeItems.indexOf(item) === -1) {\n\t\t\t\t\t\t$(item).addClass('active');\n\t\t\t\t\t\tself.$activeItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t} else if ((eventName === 'mousedown' && self.isCtrlDown) || (eventName === 'keydown' && this.isShiftDown)) {\n\t\t\t\tif ($item.hasClass('active')) {\n\t\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t\t$item.removeClass('active');\n\t\t\t\t} else {\n\t\t\t\t\tself.$activeItems.push($item.addClass('active')[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\t\tself.$activeItems = [$item.addClass('active')[0]];\n\t\t\t}\n\t\n\t\t\t// ensure control has focus\n\t\t\tself.hideInput();\n\t\t\tif (!this.isFocused) {\n\t\t\t\tself.focus();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the selected item in the dropdown menu\n\t\t * of available options.\n\t\t *\n\t\t * @param {object} $object\n\t\t * @param {boolean} scroll\n\t\t * @param {boolean} animate\n\t\t */\n\t\tsetActiveOption: function($option, scroll, animate) {\n\t\t\tvar height_menu, height_item, y;\n\t\t\tvar scroll_top, scroll_bottom;\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.$activeOption) self.$activeOption.removeClass('active');\n\t\t\tself.$activeOption = null;\n\t\n\t\t\t$option = $($option);\n\t\t\tif (!$option.length) return;\n\t\n\t\t\tself.$activeOption = $option.addClass('active');\n\t\n\t\t\tif (scroll || !isset(scroll)) {\n\t\n\t\t\t\theight_menu   = self.$dropdown_content.height();\n\t\t\t\theight_item   = self.$activeOption.outerHeight(true);\n\t\t\t\tscroll        = self.$dropdown_content.scrollTop() || 0;\n\t\t\t\ty             = self.$activeOption.offset().top - self.$dropdown_content.offset().top + scroll;\n\t\t\t\tscroll_top    = y;\n\t\t\t\tscroll_bottom = y - height_menu + height_item;\n\t\n\t\t\t\tif (y + height_item > height_menu + scroll) {\n\t\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_bottom}, animate ? self.settings.scrollDuration : 0);\n\t\t\t\t} else if (y < scroll) {\n\t\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_top}, animate ? self.settings.scrollDuration : 0);\n\t\t\t\t}\n\t\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Selects all items (CTRL + A).\n\t\t */\n\t\tselectAll: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.settings.mode === 'single') return;\n\t\n\t\t\tself.$activeItems = Array.prototype.slice.apply(self.$control.children(':not(input)').addClass('active'));\n\t\t\tif (self.$activeItems.length) {\n\t\t\t\tself.hideInput();\n\t\t\t\tself.close();\n\t\t\t}\n\t\t\tself.focus();\n\t\t},\n\t\n\t\t/**\n\t\t * Hides the input element out of view, while\n\t\t * retaining its focus.\n\t\t */\n\t\thideInput: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tself.setTextboxValue('');\n\t\t\tself.$control_input.css({opacity: 0, position: 'absolute', left: self.rtl ? 10000 : -10000});\n\t\t\tself.isInputHidden = true;\n\t\t},\n\t\n\t\t/**\n\t\t * Restores input visibility.\n\t\t */\n\t\tshowInput: function() {\n\t\t\tthis.$control_input.css({opacity: 1, position: 'relative', left: 0});\n\t\t\tthis.isInputHidden = false;\n\t\t},\n\t\n\t\t/**\n\t\t * Gives the control focus.\n\t\t */\n\t\tfocus: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.isDisabled) return;\n\t\n\t\t\tself.ignoreFocus = true;\n\t\t\tself.$control_input[0].focus();\n\t\t\twindow.setTimeout(function() {\n\t\t\t\tself.ignoreFocus = false;\n\t\t\t\tself.onFocus();\n\t\t\t}, 0);\n\t\t},\n\t\n\t\t/**\n\t\t * Forces the control out of focus.\n\t\t *\n\t\t * @param {Element} dest\n\t\t */\n\t\tblur: function(dest) {\n\t\t\tthis.$control_input[0].blur();\n\t\t\tthis.onBlur(null, dest);\n\t\t},\n\t\n\t\t/**\n\t\t * Returns a function that scores an object\n\t\t * to show how good of a match it is to the\n\t\t * provided query.\n\t\t *\n\t\t * @param {string} query\n\t\t * @param {object} options\n\t\t * @return {function}\n\t\t */\n\t\tgetScoreFunction: function(query) {\n\t\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t\t},\n\t\n\t\t/**\n\t\t * Returns search options for sifter (the system\n\t\t * for scoring and sorting results).\n\t\t *\n\t\t * @see https://github.com/brianreavis/sifter.js\n\t\t * @return {object}\n\t\t */\n\t\tgetSearchOptions: function() {\n\t\t\tvar settings = this.settings;\n\t\t\tvar sort = settings.sortField;\n\t\t\tif (typeof sort === 'string') {\n\t\t\t\tsort = [{field: sort}];\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tfields      : settings.searchField,\n\t\t\t\tconjunction : settings.searchConjunction,\n\t\t\t\tsort        : sort,\n\t\t\t\tnesting     : settings.nesting\n\t\t\t};\n\t\t},\n\t\n\t\t/**\n\t\t * Searches through available options and returns\n\t\t * a sorted array of matches.\n\t\t *\n\t\t * Returns an object containing:\n\t\t *\n\t\t *   - query {string}\n\t\t *   - tokens {array}\n\t\t *   - total {int}\n\t\t *   - items {array}\n\t\t *\n\t\t * @param {string} query\n\t\t * @returns {object}\n\t\t */\n\t\tsearch: function(query) {\n\t\t\tvar i, value, score, result, calculateScore;\n\t\t\tvar self     = this;\n\t\t\tvar settings = self.settings;\n\t\t\tvar options  = this.getSearchOptions();\n\t\n\t\t\t// validate user-provided result scoring function\n\t\t\tif (settings.score) {\n\t\t\t\tcalculateScore = self.settings.score.apply(this, [query]);\n\t\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\t\tthrow new Error('Selectize \"score\" setting must be a function that returns a function');\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// perform search\n\t\t\tif (query !== self.lastQuery) {\n\t\t\t\tself.lastQuery = query;\n\t\t\t\tresult = self.sifter.search(query, $.extend(options, {score: calculateScore}));\n\t\t\t\tself.currentResults = result;\n\t\t\t} else {\n\t\t\t\tresult = $.extend(true, {}, self.currentResults);\n\t\t\t}\n\t\n\t\t\t// filter out selected items\n\t\t\tif (settings.hideSelected) {\n\t\t\t\tfor (i = result.items.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (self.items.indexOf(hash_key(result.items[i].id)) !== -1) {\n\t\t\t\t\t\tresult.items.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t},\n\t\n\t\t/**\n\t\t * Refreshes the list of available options shown\n\t\t * in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {boolean} triggerDropdown\n\t\t */\n\t\trefreshOptions: function(triggerDropdown) {\n\t\t\tvar i, j, k, n, groups, groups_order, option, option_html, optgroup, optgroups, html, html_children, has_create_option;\n\t\t\tvar $active, $active_before, $create;\n\t\n\t\t\tif (typeof triggerDropdown === 'undefined') {\n\t\t\t\ttriggerDropdown = true;\n\t\t\t}\n\t\n\t\t\tvar self              = this;\n\t\t\tvar query             = $.trim(self.$control_input.val());\n\t\t\tvar results           = self.search(query);\n\t\t\tvar $dropdown_content = self.$dropdown_content;\n\t\t\tvar active_before     = self.$activeOption && hash_key(self.$activeOption.attr('data-value'));\n\t\n\t\t\t// build markup\n\t\t\tn = results.items.length;\n\t\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t\t}\n\t\n\t\t\t// render and group available options individually\n\t\t\tgroups = {};\n\t\t\tgroups_order = [];\n\t\n\t\t\tfor (i = 0; i < n; i++) {\n\t\t\t\toption      = self.options[results.items[i].id];\n\t\t\t\toption_html = self.render('option', option);\n\t\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\t\toptgroups   = $.isArray(optgroup) ? optgroup : [optgroup];\n\t\n\t\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\t\toptgroup = optgroups[j];\n\t\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\t\toptgroup = '';\n\t\t\t\t\t}\n\t\t\t\t\tif (!groups.hasOwnProperty(optgroup)) {\n\t\t\t\t\t\tgroups[optgroup] = document.createDocumentFragment();\n\t\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t\t}\n\t\t\t\t\tgroups[optgroup].appendChild(option_html);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// sort optgroups\n\t\t\tif (this.settings.lockOptgroupOrder) {\n\t\t\t\tgroups_order.sort(function(a, b) {\n\t\t\t\t\tvar a_order = self.optgroups[a].$order || 0;\n\t\t\t\t\tvar b_order = self.optgroups[b].$order || 0;\n\t\t\t\t\treturn a_order - b_order;\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\t// render optgroup headers & join groups\n\t\t\thtml = document.createDocumentFragment();\n\t\t\tfor (i = 0, n = groups_order.length; i < n; i++) {\n\t\t\t\toptgroup = groups_order[i];\n\t\t\t\tif (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].childNodes.length) {\n\t\t\t\t\t// render the optgroup header and options within it,\n\t\t\t\t\t// then pass it to the wrapper template\n\t\t\t\t\thtml_children = document.createDocumentFragment();\n\t\t\t\t\thtml_children.appendChild(self.render('optgroup_header', self.optgroups[optgroup]));\n\t\t\t\t\thtml_children.appendChild(groups[optgroup]);\n\t\n\t\t\t\t\thtml.appendChild(self.render('optgroup', $.extend({}, self.optgroups[optgroup], {\n\t\t\t\t\t\thtml: domToString(html_children),\n\t\t\t\t\t\tdom:  html_children\n\t\t\t\t\t})));\n\t\t\t\t} else {\n\t\t\t\t\thtml.appendChild(groups[optgroup]);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t$dropdown_content.html(html);\n\t\n\t\t\t// highlight matching terms inline\n\t\t\tif (self.settings.highlight) {\n\t\t\t\t$dropdown_content.removeHighlight();\n\t\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\t\tfor (i = 0, n = results.tokens.length; i < n; i++) {\n\t\t\t\t\t\thighlight($dropdown_content, results.tokens[i].regex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// add \"selected\" class to selected options\n\t\t\tif (!self.settings.hideSelected) {\n\t\t\t\tfor (i = 0, n = self.items.length; i < n; i++) {\n\t\t\t\t\tself.getOption(self.items[i]).addClass('selected');\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// add create option\n\t\t\thas_create_option = self.canCreate(query);\n\t\t\tif (has_create_option) {\n\t\t\t\t$dropdown_content.prepend(self.render('option_create', {input: query}));\n\t\t\t\t$create = $($dropdown_content[0].childNodes[0]);\n\t\t\t}\n\t\n\t\t\t// activate\n\t\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\t\tif (self.hasOptions) {\n\t\t\t\tif (results.items.length > 0) {\n\t\t\t\t\t$active_before = active_before && self.getOption(active_before);\n\t\t\t\t\tif ($active_before && $active_before.length) {\n\t\t\t\t\t\t$active = $active_before;\n\t\t\t\t\t} else if (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\t\t\t$active = self.getOption(self.items[0]);\n\t\t\t\t\t}\n\t\t\t\t\tif (!$active || !$active.length) {\n\t\t\t\t\t\tif ($create && !self.settings.addPrecedence) {\n\t\t\t\t\t\t\t$active = self.getAdjacentOption($create, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$active = $dropdown_content.find('[data-selectable]:first');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$active = $create;\n\t\t\t\t}\n\t\t\t\tself.setActiveOption($active);\n\t\t\t\tif (triggerDropdown && !self.isOpen) { self.open(); }\n\t\t\t} else {\n\t\t\t\tself.setActiveOption(null);\n\t\t\t\tif (triggerDropdown && self.isOpen) { self.close(); }\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Adds an available option. If it already exists,\n\t\t * nothing will happen. Note: this does not refresh\n\t\t * the options list dropdown (use `refreshOptions`\n\t\t * for that).\n\t\t *\n\t\t * Usage:\n\t\t *\n\t\t *   this.addOption(data)\n\t\t *\n\t\t * @param {object|array} data\n\t\t */\n\t\taddOption: function(data) {\n\t\t\tvar i, n, value, self = this;\n\t\n\t\t\tif ($.isArray(data)) {\n\t\t\t\tfor (i = 0, n = data.length; i < n; i++) {\n\t\t\t\t\tself.addOption(data[i]);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif (value = self.registerOption(data)) {\n\t\t\t\tself.userOptions[value] = true;\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.trigger('option_add', value, data);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Registers an option to the pool of options.\n\t\t *\n\t\t * @param {object} data\n\t\t * @return {boolean|string}\n\t\t */\n\t\tregisterOption: function(data) {\n\t\t\tvar key = hash_key(data[this.settings.valueField]);\n\t\t\tif (typeof key === 'undefined' || key === null || this.options.hasOwnProperty(key)) return false;\n\t\t\tdata.$order = data.$order || ++this.order;\n\t\t\tthis.options[key] = data;\n\t\t\treturn key;\n\t\t},\n\t\n\t\t/**\n\t\t * Registers an option group to the pool of option groups.\n\t\t *\n\t\t * @param {object} data\n\t\t * @return {boolean|string}\n\t\t */\n\t\tregisterOptionGroup: function(data) {\n\t\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\t\t\tif (!key) return false;\n\t\n\t\t\tdata.$order = data.$order || ++this.order;\n\t\t\tthis.optgroups[key] = data;\n\t\t\treturn key;\n\t\t},\n\t\n\t\t/**\n\t\t * Registers a new optgroup for options\n\t\t * to be bucketed into.\n\t\t *\n\t\t * @param {string} id\n\t\t * @param {object} data\n\t\t */\n\t\taddOptionGroup: function(id, data) {\n\t\t\tdata[this.settings.optgroupValueField] = id;\n\t\t\tif (id = this.registerOptionGroup(data)) {\n\t\t\t\tthis.trigger('optgroup_add', id, data);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Removes an existing option group.\n\t\t *\n\t\t * @param {string} id\n\t\t */\n\t\tremoveOptionGroup: function(id) {\n\t\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\t\tdelete this.optgroups[id];\n\t\t\t\tthis.renderCache = {};\n\t\t\t\tthis.trigger('optgroup_remove', id);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Clears all existing option groups.\n\t\t */\n\t\tclearOptionGroups: function() {\n\t\t\tthis.optgroups = {};\n\t\t\tthis.renderCache = {};\n\t\t\tthis.trigger('optgroup_clear');\n\t\t},\n\t\n\t\t/**\n\t\t * Updates an option available for selection. If\n\t\t * it is visible in the selected items or options\n\t\t * dropdown, it will be re-rendered automatically.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {object} data\n\t\t */\n\t\tupdateOption: function(value, data) {\n\t\t\tvar self = this;\n\t\t\tvar $item, $item_new;\n\t\t\tvar value_new, index_item, cache_items, cache_options, order_old;\n\t\n\t\t\tvalue     = hash_key(value);\n\t\t\tvalue_new = hash_key(data[self.settings.valueField]);\n\t\n\t\t\t// sanity checks\n\t\t\tif (value === null) return;\n\t\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\t\tif (typeof value_new !== 'string') throw new Error('Value must be set in option data');\n\t\n\t\t\torder_old = self.options[value].$order;\n\t\n\t\t\t// update references\n\t\t\tif (value_new !== value) {\n\t\t\t\tdelete self.options[value];\n\t\t\t\tindex_item = self.items.indexOf(value);\n\t\t\t\tif (index_item !== -1) {\n\t\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.$order = data.$order || order_old;\n\t\t\tself.options[value_new] = data;\n\t\n\t\t\t// invalidate render cache\n\t\t\tcache_items = self.renderCache['item'];\n\t\t\tcache_options = self.renderCache['option'];\n\t\n\t\t\tif (cache_items) {\n\t\t\t\tdelete cache_items[value];\n\t\t\t\tdelete cache_items[value_new];\n\t\t\t}\n\t\t\tif (cache_options) {\n\t\t\t\tdelete cache_options[value];\n\t\t\t\tdelete cache_options[value_new];\n\t\t\t}\n\t\n\t\t\t// update the item if it's selected\n\t\t\tif (self.items.indexOf(value_new) !== -1) {\n\t\t\t\t$item = self.getItem(value);\n\t\t\t\t$item_new = $(self.render('item', data));\n\t\t\t\tif ($item.hasClass('active')) $item_new.addClass('active');\n\t\t\t\t$item.replaceWith($item_new);\n\t\t\t}\n\t\n\t\t\t// invalidate last query because we might have updated the sortField\n\t\t\tself.lastQuery = null;\n\t\n\t\t\t// update dropdown contents\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.refreshOptions(false);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Removes a single option.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\tremoveOption: function(value, silent) {\n\t\t\tvar self = this;\n\t\t\tvalue = hash_key(value);\n\t\n\t\t\tvar cache_items = self.renderCache['item'];\n\t\t\tvar cache_options = self.renderCache['option'];\n\t\t\tif (cache_items) delete cache_items[value];\n\t\t\tif (cache_options) delete cache_options[value];\n\t\n\t\t\tdelete self.userOptions[value];\n\t\t\tdelete self.options[value];\n\t\t\tself.lastQuery = null;\n\t\t\tself.trigger('option_remove', value);\n\t\t\tself.removeItem(value, silent);\n\t\t},\n\t\n\t\t/**\n\t\t * Clears all options.\n\t\t */\n\t\tclearOptions: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tself.loadedSearches = {};\n\t\t\tself.userOptions = {};\n\t\t\tself.renderCache = {};\n\t\t\tvar options = self.options;\n\t\t\t$.each(self.options, function(key, value) {\n\t\t\t\tif(self.items.indexOf(key) == -1) {\n\t\t\t\t\tdelete options[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.options = self.sifter.items = options;\n\t\t\tself.lastQuery = null;\n\t\t\tself.trigger('option_clear');\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the option\n\t\t * matching the given value.\n\t\t *\n\t\t * @param {string} value\n\t\t * @returns {object}\n\t\t */\n\t\tgetOption: function(value) {\n\t\t\treturn this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the next or\n\t\t * previous selectable option.\n\t\t *\n\t\t * @param {object} $option\n\t\t * @param {int} direction  can be 1 for next or -1 for previous\n\t\t * @return {object}\n\t\t */\n\t\tgetAdjacentOption: function($option, direction) {\n\t\t\tvar $options = this.$dropdown.find('[data-selectable]');\n\t\t\tvar index    = $options.index($option) + direction;\n\t\n\t\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t\t},\n\t\n\t\t/**\n\t\t * Finds the first element with a \"data-value\" attribute\n\t\t * that matches the given value.\n\t\t *\n\t\t * @param {mixed} value\n\t\t * @param {object} $els\n\t\t * @return {object}\n\t\t */\n\t\tgetElementWithValue: function(value, $els) {\n\t\t\tvalue = hash_key(value);\n\t\n\t\t\tif (typeof value !== 'undefined' && value !== null) {\n\t\t\t\tfor (var i = 0, n = $els.length; i < n; i++) {\n\t\t\t\t\tif ($els[i].getAttribute('data-value') === value) {\n\t\t\t\t\t\treturn $($els[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn $();\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the item\n\t\t * matching the given value.\n\t\t *\n\t\t * @param {string} value\n\t\t * @returns {object}\n\t\t */\n\t\tgetItem: function(value) {\n\t\t\treturn this.getElementWithValue(value, this.$control.children());\n\t\t},\n\t\n\t\t/**\n\t\t * \"Selects\" multiple items at once. Adds them to the list\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\taddItems: function(values, silent) {\n\t\t\tthis.buffer = document.createDocumentFragment();\n\t\n\t\t\tvar childNodes = this.$control[0].childNodes;\n\t\t\tfor (var i = 0; i < childNodes.length; i++) {\n\t\t\t\tthis.buffer.appendChild(childNodes[i]);\n\t\t\t}\n\t\n\t\t\tvar items = $.isArray(values) ? values : [values];\n\t\t\tfor (var i = 0, n = items.length; i < n; i++) {\n\t\t\t\tthis.isPending = (i < n - 1);\n\t\t\t\tthis.addItem(items[i], silent);\n\t\t\t}\n\t\n\t\t\tvar control = this.$control[0];\n\t\t\tcontrol.insertBefore(this.buffer, control.firstChild);\n\t\n\t\t\tthis.buffer = null;\n\t\t},\n\t\n\t\t/**\n\t\t * \"Selects\" an item. Adds it to the list\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\taddItem: function(value, silent) {\n\t\t\tvar events = silent ? [] : ['change'];\n\t\n\t\t\tdebounce_events(this, events, function() {\n\t\t\t\tvar $item, $option, $options;\n\t\t\t\tvar self = this;\n\t\t\t\tvar inputMode = self.settings.mode;\n\t\t\t\tvar i, active, value_next, wasFull;\n\t\t\t\tvalue = hash_key(value);\n\t\n\t\t\t\tif (self.items.indexOf(value) !== -1) {\n\t\t\t\t\tif (inputMode === 'single') self.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\t\n\t\t\t\t$item = $(self.render('item', self.options[value]));\n\t\t\t\twasFull = self.isFull();\n\t\t\t\tself.items.splice(self.caretPos, 0, value);\n\t\t\t\tself.insertAtCaret($item);\n\t\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\t\tself.refreshState();\n\t\t\t\t}\n\t\n\t\t\t\tif (self.isSetup) {\n\t\t\t\t\t$options = self.$dropdown_content.find('[data-selectable]');\n\t\n\t\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\t\tif (!self.isPending) {\n\t\t\t\t\t\t$option = self.getOption(value);\n\t\t\t\t\t\tvalue_next = self.getAdjacentOption($option, 1).attr('data-value');\n\t\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t\t\tif (value_next) {\n\t\t\t\t\t\t\tself.setActiveOption(self.getOption(value_next));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\t\tif (!$options.length || self.isFull()) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\t\tself.positionDropdown();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tself.updatePlaceholder();\n\t\t\t\t\tself.trigger('item_add', value, $item);\n\t\n\t\t\t\t\tif (!self.isPending) {\n\t\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Removes the selected item matching\n\t\t * the provided value.\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tremoveItem: function(value, silent) {\n\t\t\tvar self = this;\n\t\t\tvar $item, i, idx;\n\t\n\t\t\t$item = (value instanceof $) ? value : self.getItem(value);\n\t\t\tvalue = hash_key($item.attr('data-value'));\n\t\t\ti = self.items.indexOf(value);\n\t\n\t\t\tif (i !== -1) {\n\t\t\t\t$item.remove();\n\t\t\t\tif ($item.hasClass('active')) {\n\t\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t}\n\t\n\t\t\t\tself.items.splice(i, 1);\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\t\t\tself.removeOption(value, silent);\n\t\t\t\t}\n\t\n\t\t\t\tif (i < self.caretPos) {\n\t\t\t\t\tself.setCaret(self.caretPos - 1);\n\t\t\t\t}\n\t\n\t\t\t\tself.refreshState();\n\t\t\t\tself.updatePlaceholder();\n\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\tself.positionDropdown();\n\t\t\t\tself.trigger('item_remove', value, $item);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the `create` method provided in the\n\t\t * selectize options that should provide the data\n\t\t * for the new item, given the user input.\n\t\t *\n\t\t * Once this completes, it will be added\n\t\t * to the item list.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} [triggerDropdown]\n\t\t * @param {function} [callback]\n\t\t * @return {boolean}\n\t\t */\n\t\tcreateItem: function(input, triggerDropdown) {\n\t\t\tvar self  = this;\n\t\t\tvar caret = self.caretPos;\n\t\t\tinput = input || $.trim(self.$control_input.val() || '');\n\t\n\t\t\tvar callback = arguments[arguments.length - 1];\n\t\t\tif (typeof callback !== 'function') callback = function() {};\n\t\n\t\t\tif (typeof triggerDropdown !== 'boolean') {\n\t\t\t\ttriggerDropdown = true;\n\t\t\t}\n\t\n\t\t\tif (!self.canCreate(input)) {\n\t\t\t\tcallback();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tself.lock();\n\t\n\t\t\tvar setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {\n\t\t\t\tvar data = {};\n\t\t\t\tdata[self.settings.labelField] = input;\n\t\t\t\tdata[self.settings.valueField] = input;\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\tvar create = once(function(data) {\n\t\t\t\tself.unlock();\n\t\n\t\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\t\tif (typeof value !== 'string') return callback();\n\t\n\t\t\t\tself.setTextboxValue('');\n\t\t\t\tself.addOption(data);\n\t\t\t\tself.setCaret(caret);\n\t\t\t\tself.addItem(value);\n\t\t\t\tself.refreshOptions(triggerDropdown && self.settings.mode !== 'single');\n\t\t\t\tcallback(data);\n\t\t\t});\n\t\n\t\t\tvar output = setup.apply(this, [input, create]);\n\t\t\tif (typeof output !== 'undefined') {\n\t\t\t\tcreate(output);\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t},\n\t\n\t\t/**\n\t\t * Re-renders the selected item lists.\n\t\t */\n\t\trefreshItems: function() {\n\t\t\tthis.lastQuery = null;\n\t\n\t\t\tif (this.isSetup) {\n\t\t\t\tthis.addItem(this.items);\n\t\t\t}\n\t\n\t\t\tthis.refreshState();\n\t\t\tthis.updateOriginalInput();\n\t\t},\n\t\n\t\t/**\n\t\t * Updates all state-dependent attributes\n\t\t * and CSS classes.\n\t\t */\n\t\trefreshState: function() {\n\t\t\tthis.refreshValidityState();\n\t\t\tthis.refreshClasses();\n\t\t},\n\t\n\t\t/**\n\t\t * Update the `required` attribute of both input and control input.\n\t\t *\n\t\t * The `required` property needs to be activated on the control input\n\t\t * for the error to be displayed at the right place. `required` also\n\t\t * needs to be temporarily deactivated on the input since the input is\n\t\t * hidden and can't show errors.\n\t\t */\n\t\trefreshValidityState: function() {\n\t\t\tif (!this.isRequired) return false;\n\t\n\t\t\tvar invalid = !this.items.length;\n\t\n\t\t\tthis.isInvalid = invalid;\n\t\t\tthis.$control_input.prop('required', invalid);\n\t\t\tthis.$input.prop('required', !invalid);\n\t\t},\n\t\n\t\t/**\n\t\t * Updates all state-dependent CSS classes.\n\t\t */\n\t\trefreshClasses: function() {\n\t\t\tvar self     = this;\n\t\t\tvar isFull   = self.isFull();\n\t\t\tvar isLocked = self.isLocked;\n\t\n\t\t\tself.$wrapper\n\t\t\t\t.toggleClass('rtl', self.rtl);\n\t\n\t\t\tself.$control\n\t\t\t\t.toggleClass('focus', self.isFocused)\n\t\t\t\t.toggleClass('disabled', self.isDisabled)\n\t\t\t\t.toggleClass('required', self.isRequired)\n\t\t\t\t.toggleClass('invalid', self.isInvalid)\n\t\t\t\t.toggleClass('locked', isLocked)\n\t\t\t\t.toggleClass('full', isFull).toggleClass('not-full', !isFull)\n\t\t\t\t.toggleClass('input-active', self.isFocused && !self.isInputHidden)\n\t\t\t\t.toggleClass('dropdown-active', self.isOpen)\n\t\t\t\t.toggleClass('has-options', !$.isEmptyObject(self.options))\n\t\t\t\t.toggleClass('has-items', self.items.length > 0);\n\t\n\t\t\tself.$control_input.data('grow', !isFull && !isLocked);\n\t\t},\n\t\n\t\t/**\n\t\t * Determines whether or not more items can be added\n\t\t * to the control without exceeding the user-defined maximum.\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFull: function() {\n\t\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t\t},\n\t\n\t\t/**\n\t\t * Refreshes the original <select> or <input>\n\t\t * element to reflect the current state.\n\t\t */\n\t\tupdateOriginalInput: function(opts) {\n\t\t\tvar i, n, options, label, self = this;\n\t\t\topts = opts || {};\n\t\n\t\t\tif (self.tagType === TAG_SELECT) {\n\t\t\t\toptions = [];\n\t\t\t\tfor (i = 0, n = self.items.length; i < n; i++) {\n\t\t\t\t\tlabel = self.options[self.items[i]][self.settings.labelField] || '';\n\t\t\t\t\toptions.push('<option value=\"' + escape_html(self.items[i]) + '\" selected=\"selected\">' + escape_html(label) + '</option>');\n\t\t\t\t}\n\t\t\t\tif (!options.length && !this.$input.attr('multiple')) {\n\t\t\t\t\toptions.push('<option value=\"\" selected=\"selected\"></option>');\n\t\t\t\t}\n\t\t\t\tself.$input.html(options.join(''));\n\t\t\t} else {\n\t\t\t\tself.$input.val(self.getValue());\n\t\t\t\tself.$input.attr('value',self.$input.val());\n\t\t\t}\n\t\n\t\t\tif (self.isSetup) {\n\t\t\t\tif (!opts.silent) {\n\t\t\t\t\tself.trigger('change', self.$input.val());\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Shows/hide the input placeholder depending\n\t\t * on if there items in the list already.\n\t\t */\n\t\tupdatePlaceholder: function() {\n\t\t\tif (!this.settings.placeholder) return;\n\t\t\tvar $input = this.$control_input;\n\t\n\t\t\tif (this.items.length) {\n\t\t\t\t$input.removeAttr('placeholder');\n\t\t\t} else {\n\t\t\t\t$input.attr('placeholder', this.settings.placeholder);\n\t\t\t}\n\t\t\t$input.triggerHandler('update', {force: true});\n\t\t},\n\t\n\t\t/**\n\t\t * Shows the autocomplete dropdown containing\n\t\t * the available options.\n\t\t */\n\t\topen: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\t\tself.focus();\n\t\t\tself.isOpen = true;\n\t\t\tself.refreshState();\n\t\t\tself.$dropdown.css({visibility: 'hidden', display: 'block'});\n\t\t\tself.positionDropdown();\n\t\t\tself.$dropdown.css({visibility: 'visible'});\n\t\t\tself.trigger('dropdown_open', self.$dropdown);\n\t\t},\n\t\n\t\t/**\n\t\t * Closes the autocomplete dropdown menu.\n\t\t */\n\t\tclose: function() {\n\t\t\tvar self = this;\n\t\t\tvar trigger = self.isOpen;\n\t\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.hideInput();\n\t\n\t\t\t\t// Do not trigger blur while inside a blur event,\n\t\t\t\t// this fixes some weird tabbing behavior in FF and IE.\n\t\t\t\t// See #1164\n\t\t\t\tif (!self.isBlurring) {\n\t\t\t\t\tself.$control_input.blur(); // close keyboard on iOS\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tself.isOpen = false;\n\t\t\tself.$dropdown.hide();\n\t\t\tself.setActiveOption(null);\n\t\t\tself.refreshState();\n\t\n\t\t\tif (trigger) self.trigger('dropdown_close', self.$dropdown);\n\t\t},\n\t\n\t\t/**\n\t\t * Calculates and applies the appropriate\n\t\t * position of the dropdown.\n\t\t */\n\t\tpositionDropdown: function() {\n\t\t\tvar $control = this.$control;\n\t\t\tvar offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();\n\t\t\toffset.top += $control.outerHeight(true);\n\t\n\t\t\tthis.$dropdown.css({\n\t\t\t\twidth : $control[0].getBoundingClientRect().width,\n\t\t\t\ttop   : offset.top,\n\t\t\t\tleft  : offset.left\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Resets / clears all selected items\n\t\t * from the control.\n\t\t *\n\t\t * @param {boolean} silent\n\t\t */\n\t\tclear: function(silent) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (!self.items.length) return;\n\t\t\tself.$control.children(':not(input)').remove();\n\t\t\tself.items = [];\n\t\t\tself.lastQuery = null;\n\t\t\tself.setCaret(0);\n\t\t\tself.setActiveItem(null);\n\t\t\tself.updatePlaceholder();\n\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\tself.refreshState();\n\t\t\tself.showInput();\n\t\t\tself.trigger('clear');\n\t\t},\n\t\n\t\t/**\n\t\t * A helper method for inserting an element\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {object} $el\n\t\t */\n\t\tinsertAtCaret: function($el) {\n\t\t\tvar caret = Math.min(this.caretPos, this.items.length);\n\t\t\tvar el = $el[0];\n\t\t\tvar target = this.buffer || this.$control[0];\n\t\n\t\t\tif (caret === 0) {\n\t\t\t\ttarget.insertBefore(el, target.firstChild);\n\t\t\t} else {\n\t\t\t\ttarget.insertBefore(el, target.childNodes[caret]);\n\t\t\t}\n\t\n\t\t\tthis.setCaret(caret + 1);\n\t\t},\n\t\n\t\t/**\n\t\t * Removes the current selected item(s).\n\t\t *\n\t\t * @param {object} e (optional)\n\t\t * @returns {boolean}\n\t\t */\n\t\tdeleteSelection: function(e) {\n\t\t\tvar i, n, direction, selection, values, caret, option_select, $option_select, $tail;\n\t\t\tvar self = this;\n\t\n\t\t\tdirection = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1;\n\t\t\tselection = getSelection(self.$control_input[0]);\n\t\n\t\t\tif (self.$activeOption && !self.settings.hideSelected) {\n\t\t\t\toption_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value');\n\t\t\t}\n\t\n\t\t\t// determine items that will be removed\n\t\t\tvalues = [];\n\t\n\t\t\tif (self.$activeItems.length) {\n\t\t\t\t$tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first'));\n\t\t\t\tcaret = self.$control.children(':not(input)').index($tail);\n\t\t\t\tif (direction > 0) { caret++; }\n\t\n\t\t\t\tfor (i = 0, n = self.$activeItems.length; i < n; i++) {\n\t\t\t\t\tvalues.push($(self.$activeItems[i]).attr('data-value'));\n\t\t\t\t}\n\t\t\t\tif (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\t\tif (direction < 0 && selection.start === 0 && selection.length === 0) {\n\t\t\t\t\tvalues.push(self.items[self.caretPos - 1]);\n\t\t\t\t} else if (direction > 0 && selection.start === self.$control_input.val().length) {\n\t\t\t\t\tvalues.push(self.items[self.caretPos]);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// allow the callback to abort\n\t\t\tif (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// perform removal\n\t\t\tif (typeof caret !== 'undefined') {\n\t\t\t\tself.setCaret(caret);\n\t\t\t}\n\t\t\twhile (values.length) {\n\t\t\t\tself.removeItem(values.pop());\n\t\t\t}\n\t\n\t\t\tself.showInput();\n\t\t\tself.positionDropdown();\n\t\t\tself.refreshOptions(true);\n\t\n\t\t\t// select previous option\n\t\t\tif (option_select) {\n\t\t\t\t$option_select = self.getOption(option_select);\n\t\t\t\tif ($option_select.length) {\n\t\t\t\t\tself.setActiveOption($option_select);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t},\n\t\n\t\t/**\n\t\t * Selects the previous / next item (depending\n\t\t * on the `direction` argument).\n\t\t *\n\t\t * > 0 - right\n\t\t * < 0 - left\n\t\t *\n\t\t * @param {int} direction\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tadvanceSelection: function(direction, e) {\n\t\t\tvar tail, selection, idx, valueLength, cursorAtEdge, $tail;\n\t\t\tvar self = this;\n\t\n\t\t\tif (direction === 0) return;\n\t\t\tif (self.rtl) direction *= -1;\n\t\n\t\t\ttail = direction > 0 ? 'last' : 'first';\n\t\t\tselection = getSelection(self.$control_input[0]);\n\t\n\t\t\tif (self.isFocused && !self.isInputHidden) {\n\t\t\t\tvalueLength = self.$control_input.val().length;\n\t\t\t\tcursorAtEdge = direction < 0\n\t\t\t\t\t? selection.start === 0 && selection.length === 0\n\t\t\t\t\t: selection.start === valueLength;\n\t\n\t\t\t\tif (cursorAtEdge && !valueLength) {\n\t\t\t\t\tself.advanceCaret(direction, e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$tail = self.$control.children('.active:' + tail);\n\t\t\t\tif ($tail.length) {\n\t\t\t\t\tidx = self.$control.children(':not(input)').index($tail);\n\t\t\t\t\tself.setActiveItem(null);\n\t\t\t\t\tself.setCaret(direction > 0 ? idx + 1 : idx);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Moves the caret left / right.\n\t\t *\n\t\t * @param {int} direction\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tadvanceCaret: function(direction, e) {\n\t\t\tvar self = this, fn, $adj;\n\t\n\t\t\tif (direction === 0) return;\n\t\n\t\t\tfn = direction > 0 ? 'next' : 'prev';\n\t\t\tif (self.isShiftDown) {\n\t\t\t\t$adj = self.$control_input[fn]();\n\t\t\t\tif ($adj.length) {\n\t\t\t\t\tself.hideInput();\n\t\t\t\t\tself.setActiveItem($adj);\n\t\t\t\t\te && e.preventDefault();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.setCaret(self.caretPos + direction);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Moves the caret to the specified index.\n\t\t *\n\t\t * @param {int} i\n\t\t */\n\t\tsetCaret: function(i) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.settings.mode === 'single') {\n\t\t\t\ti = self.items.length;\n\t\t\t} else {\n\t\t\t\ti = Math.max(0, Math.min(self.items.length, i));\n\t\t\t}\n\t\n\t\t\tif(!self.isPending) {\n\t\t\t\t// the input must be moved by leaving it in place and moving the\n\t\t\t\t// siblings, due to the fact that focus cannot be restored once lost\n\t\t\t\t// on mobile webkit devices\n\t\t\t\tvar j, n, fn, $children, $child;\n\t\t\t\t$children = self.$control.children(':not(input)');\n\t\t\t\tfor (j = 0, n = $children.length; j < n; j++) {\n\t\t\t\t\t$child = $($children[j]).detach();\n\t\t\t\t\tif (j <  i) {\n\t\t\t\t\t\tself.$control_input.before($child);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.$control.append($child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tself.caretPos = i;\n\t\t},\n\t\n\t\t/**\n\t\t * Disables user input on the control. Used while\n\t\t * items are being asynchronously created.\n\t\t */\n\t\tlock: function() {\n\t\t\tthis.close();\n\t\t\tthis.isLocked = true;\n\t\t\tthis.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Re-enables user input on the control.\n\t\t */\n\t\tunlock: function() {\n\t\t\tthis.isLocked = false;\n\t\t\tthis.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Disables user input on the control completely.\n\t\t * While disabled, it cannot receive focus.\n\t\t */\n\t\tdisable: function() {\n\t\t\tvar self = this;\n\t\t\tself.$input.prop('disabled', true);\n\t\t\tself.$control_input.prop('disabled', true).prop('tabindex', -1);\n\t\t\tself.isDisabled = true;\n\t\t\tself.lock();\n\t\t},\n\t\n\t\t/**\n\t\t * Enables the control so that it can respond\n\t\t * to focus and user input.\n\t\t */\n\t\tenable: function() {\n\t\t\tvar self = this;\n\t\t\tself.$input.prop('disabled', false);\n\t\t\tself.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex);\n\t\t\tself.isDisabled = false;\n\t\t\tself.unlock();\n\t\t},\n\t\n\t\t/**\n\t\t * Completely destroys the control and\n\t\t * unbinds all event listeners so that it can\n\t\t * be garbage collected.\n\t\t */\n\t\tdestroy: function() {\n\t\t\tvar self = this;\n\t\t\tvar eventNS = self.eventNS;\n\t\t\tvar revertSettings = self.revertSettings;\n\t\n\t\t\tself.trigger('destroy');\n\t\t\tself.off();\n\t\t\tself.$wrapper.remove();\n\t\t\tself.$dropdown.remove();\n\t\n\t\t\tself.$input\n\t\t\t\t.html('')\n\t\t\t\t.append(revertSettings.$children)\n\t\t\t\t.removeAttr('tabindex')\n\t\t\t\t.removeClass('selectized')\n\t\t\t\t.attr({tabindex: revertSettings.tabindex})\n\t\t\t\t.show();\n\t\n\t\t\tself.$control_input.removeData('grow');\n\t\t\tself.$input.removeData('selectize');\n\t\n\t\t\tif (--Selectize.count == 0 && Selectize.$testInput) {\n\t\t\t\tSelectize.$testInput.remove();\n\t\t\t\tSelectize.$testInput = undefined;\n\t\t\t}\n\t\n\t\t\t$(window).off(eventNS);\n\t\t\t$(document).off(eventNS);\n\t\t\t$(document.body).off(eventNS);\n\t\n\t\t\tdelete self.$input[0].selectize;\n\t\t},\n\t\n\t\t/**\n\t\t * A helper method for rendering \"item\" and\n\t\t * \"option\" templates, given the data.\n\t\t *\n\t\t * @param {string} templateName\n\t\t * @param {object} data\n\t\t * @returns {string}\n\t\t */\n\t\trender: function(templateName, data) {\n\t\t\tvar value, id, label;\n\t\t\tvar html = '';\n\t\t\tvar cache = false;\n\t\t\tvar self = this;\n\t\t\tvar regex_tag = /^[\\t \\r\\n]*<([a-z][a-z0-9\\-_]*(?:\\:[a-z][a-z0-9\\-_]*)?)/i;\n\t\n\t\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\t\tvalue = hash_key(data[self.settings.valueField]);\n\t\t\t\tcache = !!value;\n\t\t\t}\n\t\n\t\t\t// pull markup from cache if it exists\n\t\t\tif (cache) {\n\t\t\t\tif (!isset(self.renderCache[templateName])) {\n\t\t\t\t\tself.renderCache[templateName] = {};\n\t\t\t\t}\n\t\t\t\tif (self.renderCache[templateName].hasOwnProperty(value)) {\n\t\t\t\t\treturn self.renderCache[templateName][value];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// render markup\n\t\t\thtml = $(self.settings.render[templateName].apply(this, [data, escape_html]));\n\t\n\t\t\t// add mandatory attributes\n\t\t\tif (templateName === 'option' || templateName === 'option_create') {\n\t\t\t\tif (!data[self.settings.disabledField]) {\n\t\t\t\t\thtml.attr('data-selectable', '');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (templateName === 'optgroup') {\n\t\t\t\tid = data[self.settings.optgroupValueField] || '';\n\t\t\t\thtml.attr('data-group', id);\n\t\t\t\tif(data[self.settings.disabledField]) {\n\t\t\t\t\thtml.attr('data-disabled', '');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\t\thtml.attr('data-value', value || '');\n\t\t\t}\n\t\n\t\t\t// update cache\n\t\t\tif (cache) {\n\t\t\t\tself.renderCache[templateName][value] = html[0];\n\t\t\t}\n\t\n\t\t\treturn html[0];\n\t\t},\n\t\n\t\t/**\n\t\t * Clears the render cache for a template. If\n\t\t * no template is given, clears all render\n\t\t * caches.\n\t\t *\n\t\t * @param {string} templateName\n\t\t */\n\t\tclearCache: function(templateName) {\n\t\t\tvar self = this;\n\t\t\tif (typeof templateName === 'undefined') {\n\t\t\t\tself.renderCache = {};\n\t\t\t} else {\n\t\t\t\tdelete self.renderCache[templateName];\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Determines whether or not to display the\n\t\t * create item prompt, given a user input.\n\t\t *\n\t\t * @param {string} input\n\t\t * @return {boolean}\n\t\t */\n\t\tcanCreate: function(input) {\n\t\t\tvar self = this;\n\t\t\tif (!self.settings.create) return false;\n\t\t\tvar filter = self.settings.createFilter;\n\t\t\treturn input.length\n\t\t\t\t&& (typeof filter !== 'function' || filter.apply(self, [input]))\n\t\t\t\t&& (typeof filter !== 'string' || new RegExp(filter).test(input))\n\t\t\t\t&& (!(filter instanceof RegExp) || filter.test(input));\n\t\t}\n\t\n\t});\n\t\n\t\n\tSelectize.count = 0;\n\tSelectize.defaults = {\n\t\toptions: [],\n\t\toptgroups: [],\n\t\n\t\tplugins: [],\n\t\tdelimiter: ',',\n\t\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\t\tpersist: true,\n\t\tdiacritics: true,\n\t\tcreate: false,\n\t\tcreateOnBlur: false,\n\t\tcreateFilter: null,\n\t\thighlight: true,\n\t\topenOnFocus: true,\n\t\tmaxOptions: 1000,\n\t\tmaxItems: null,\n\t\thideSelected: null,\n\t\taddPrecedence: false,\n\t\tselectOnTab: false,\n\t\tpreload: false,\n\t\tallowEmptyOption: false,\n\t\tcloseAfterSelect: false,\n\t\n\t\tscrollDuration: 60,\n\t\tloadThrottle: 300,\n\t\tloadingClass: 'loading',\n\t\n\t\tdataAttr: 'data-data',\n\t\toptgroupField: 'optgroup',\n\t\tvalueField: 'value',\n\t\tlabelField: 'text',\n\t\tdisabledField: 'disabled',\n\t\toptgroupLabelField: 'label',\n\t\toptgroupValueField: 'value',\n\t\tlockOptgroupOrder: false,\n\t\n\t\tsortField: '$order',\n\t\tsearchField: ['text'],\n\t\tsearchConjunction: 'and',\n\t\n\t\tmode: null,\n\t\twrapperClass: 'selectize-control',\n\t\tinputClass: 'selectize-input',\n\t\tdropdownClass: 'selectize-dropdown',\n\t\tdropdownContentClass: 'selectize-dropdown-content',\n\t\n\t\tdropdownParent: null,\n\t\n\t\tcopyClassesToDropdown: true,\n\t\n\t\t/*\n\t\tload                 : null, // function(query, callback) { ... }\n\t\tscore                : null, // function(search) { ... }\n\t\tonInitialize         : null, // function() { ... }\n\t\tonChange             : null, // function(value) { ... }\n\t\tonItemAdd            : null, // function(value, $item) { ... }\n\t\tonItemRemove         : null, // function(value) { ... }\n\t\tonClear              : null, // function() { ... }\n\t\tonOptionAdd          : null, // function(value, data) { ... }\n\t\tonOptionRemove       : null, // function(value) { ... }\n\t\tonOptionClear        : null, // function() { ... }\n\t\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\t\tonOptionGroupRemove  : null, // function(id) { ... }\n\t\tonOptionGroupClear   : null, // function() { ... }\n\t\tonDropdownOpen       : null, // function($dropdown) { ... }\n\t\tonDropdownClose      : null, // function($dropdown) { ... }\n\t\tonType               : null, // function(str) { ... }\n\t\tonDelete             : null, // function(values) { ... }\n\t\t*/\n\t\n\t\trender: {\n\t\t\t/*\n\t\t\titem: null,\n\t\t\toptgroup: null,\n\t\t\toptgroup_header: null,\n\t\t\toption: null,\n\t\t\toption_create: null\n\t\t\t*/\n\t\t}\n\t};\n\t\n\t\n\t$.fn.selectize = function(settings_user) {\n\t\tvar defaults             = $.fn.selectize.defaults;\n\t\tvar settings             = $.extend({}, defaults, settings_user);\n\t\tvar attr_data            = settings.dataAttr;\n\t\tvar field_label          = settings.labelField;\n\t\tvar field_value          = settings.valueField;\n\t\tvar field_disabled       = settings.disabledField;\n\t\tvar field_optgroup       = settings.optgroupField;\n\t\tvar field_optgroup_label = settings.optgroupLabelField;\n\t\tvar field_optgroup_value = settings.optgroupValueField;\n\t\n\t\t/**\n\t\t * Initializes selectize from a <input type=\"text\"> element.\n\t\t *\n\t\t * @param {object} $input\n\t\t * @param {object} settings_element\n\t\t */\n\t\tvar init_textbox = function($input, settings_element) {\n\t\t\tvar i, n, values, option;\n\t\n\t\t\tvar data_raw = $input.attr(attr_data);\n\t\n\t\t\tif (!data_raw) {\n\t\t\t\tvar value = $.trim($input.val() || '');\n\t\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\t\tvalues = value.split(settings.delimiter);\n\t\t\t\tfor (i = 0, n = values.length; i < n; i++) {\n\t\t\t\t\toption = {};\n\t\t\t\t\toption[field_label] = values[i];\n\t\t\t\t\toption[field_value] = values[i];\n\t\t\t\t\tsettings_element.options.push(option);\n\t\t\t\t}\n\t\t\t\tsettings_element.items = values;\n\t\t\t} else {\n\t\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\t\tfor (i = 0, n = settings_element.options.length; i < n; i++) {\n\t\t\t\t\tsettings_element.items.push(settings_element.options[i][field_value]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t\t * Initializes selectize from a <select> element.\n\t\t *\n\t\t * @param {object} $input\n\t\t * @param {object} settings_element\n\t\t */\n\t\tvar init_select = function($input, settings_element) {\n\t\t\tvar i, n, tagName, $children, order = 0;\n\t\t\tvar options = settings_element.options;\n\t\t\tvar optionsMap = {};\n\t\n\t\t\tvar readData = function($el) {\n\t\t\t\tvar data = attr_data && $el.attr(attr_data);\n\t\t\t\tif (typeof data === 'string' && data.length) {\n\t\t\t\t\treturn JSON.parse(data);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tvar addOption = function($option, group) {\n\t\t\t\t$option = $($option);\n\t\n\t\t\t\tvar value = hash_key($option.val());\n\t\t\t\tif (!value && !settings.allowEmptyOption) return;\n\t\n\t\t\t\t// if the option already exists, it's probably been\n\t\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t\t// existing option so that it's rendered in both places.\n\t\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t\t} else if (!$.isArray(arr)) {\n\t\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar option             = readData($option) || {};\n\t\t\t\toption[field_label]    = option[field_label] || $option.text();\n\t\t\t\toption[field_value]    = option[field_value] || value;\n\t\t\t\toption[field_disabled] = option[field_disabled] || $option.prop('disabled');\n\t\t\t\toption[field_optgroup] = option[field_optgroup] || group;\n\t\n\t\t\t\toptionsMap[value] = option;\n\t\t\t\toptions.push(option);\n\t\n\t\t\t\tif ($option.is(':selected')) {\n\t\t\t\t\tsettings_element.items.push(value);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tvar addGroup = function($optgroup) {\n\t\t\t\tvar i, n, id, optgroup, $options;\n\t\n\t\t\t\t$optgroup = $($optgroup);\n\t\t\t\tid = $optgroup.attr('label');\n\t\n\t\t\t\tif (id) {\n\t\t\t\t\toptgroup = readData($optgroup) || {};\n\t\t\t\t\toptgroup[field_optgroup_label] = id;\n\t\t\t\t\toptgroup[field_optgroup_value] = id;\n\t\t\t\t\toptgroup[field_disabled] = $optgroup.prop('disabled');\n\t\t\t\t\tsettings_element.optgroups.push(optgroup);\n\t\t\t\t}\n\t\n\t\t\t\t$options = $('option', $optgroup);\n\t\t\t\tfor (i = 0, n = $options.length; i < n; i++) {\n\t\t\t\t\taddOption($options[i], id);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tsettings_element.maxItems = $input.attr('multiple') ? null : 1;\n\t\n\t\t\t$children = $input.children();\n\t\t\tfor (i = 0, n = $children.length; i < n; i++) {\n\t\t\t\ttagName = $children[i].tagName.toLowerCase();\n\t\t\t\tif (tagName === 'optgroup') {\n\t\t\t\t\taddGroup($children[i]);\n\t\t\t\t} else if (tagName === 'option') {\n\t\t\t\t\taddOption($children[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\treturn this.each(function() {\n\t\t\tif (this.selectize) return;\n\t\n\t\t\tvar instance;\n\t\t\tvar $input = $(this);\n\t\t\tvar tag_name = this.tagName.toLowerCase();\n\t\t\tvar placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');\n\t\t\tif (!placeholder && !settings.allowEmptyOption) {\n\t\t\t\tplaceholder = $input.children('option[value=\"\"]').text();\n\t\t\t}\n\t\n\t\t\tvar settings_element = {\n\t\t\t\t'placeholder' : placeholder,\n\t\t\t\t'options'     : [],\n\t\t\t\t'optgroups'   : [],\n\t\t\t\t'items'       : []\n\t\t\t};\n\t\n\t\t\tif (tag_name === 'select') {\n\t\t\t\tinit_select($input, settings_element);\n\t\t\t} else {\n\t\t\t\tinit_textbox($input, settings_element);\n\t\t\t}\n\t\n\t\t\tinstance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));\n\t\t});\n\t};\n\t\n\t$.fn.selectize.defaults = Selectize.defaults;\n\t$.fn.selectize.support = {\n\t\tvalidity: SUPPORTS_VALIDITY_API\n\t};\n\t\n\t\n\tSelectize.define('drag_drop', function(options) {\n\t\tif (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n\t\tif (this.settings.mode !== 'multi') return;\n\t\tvar self = this;\n\t\n\t\tself.lock = (function() {\n\t\t\tvar original = self.lock;\n\t\t\treturn function() {\n\t\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\t\tif (sortable) sortable.disable();\n\t\t\t\treturn original.apply(self, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tself.unlock = (function() {\n\t\t\tvar original = self.unlock;\n\t\t\treturn function() {\n\t\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\t\tif (sortable) sortable.enable();\n\t\t\t\treturn original.apply(self, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tself.setup = (function() {\n\t\t\tvar original = self.setup;\n\t\t\treturn function() {\n\t\t\t\toriginal.apply(this, arguments);\n\t\n\t\t\t\tvar $control = self.$control.sortable({\n\t\t\t\t\titems: '[data-value]',\n\t\t\t\t\tforcePlaceholderSize: true,\n\t\t\t\t\tdisabled: self.isLocked,\n\t\t\t\t\tstart: function(e, ui) {\n\t\t\t\t\t\tui.placeholder.css('width', ui.helper.css('width'));\n\t\t\t\t\t\t$control.css({overflow: 'visible'});\n\t\t\t\t\t},\n\t\t\t\t\tstop: function() {\n\t\t\t\t\t\t$control.css({overflow: 'hidden'});\n\t\t\t\t\t\tvar active = self.$activeItems ? self.$activeItems.slice() : null;\n\t\t\t\t\t\tvar values = [];\n\t\t\t\t\t\t$control.children('[data-value]').each(function() {\n\t\t\t\t\t\t\tvalues.push($(this).attr('data-value'));\n\t\t\t\t\t\t});\n\t\t\t\t\t\tself.setValue(values);\n\t\t\t\t\t\tself.setActiveItem(active);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t})();\n\t\n\t});\n\t\n\tSelectize.define('dropdown_header', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions = $.extend({\n\t\t\ttitle         : 'Untitled',\n\t\t\theaderClass   : 'selectize-dropdown-header',\n\t\t\ttitleRowClass : 'selectize-dropdown-header-title',\n\t\t\tlabelClass    : 'selectize-dropdown-header-label',\n\t\t\tcloseClass    : 'selectize-dropdown-header-close',\n\t\n\t\t\thtml: function(data) {\n\t\t\t\treturn (\n\t\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t\t'<a href=\"javascript:void(0)\" class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t'</div>'\n\t\t\t\t);\n\t\t\t}\n\t\t}, options);\n\t\n\t\tself.setup = (function() {\n\t\t\tvar original = self.setup;\n\t\t\treturn function() {\n\t\t\t\toriginal.apply(self, arguments);\n\t\t\t\tself.$dropdown_header = $(options.html(options));\n\t\t\t\tself.$dropdown.prepend(self.$dropdown_header);\n\t\t\t};\n\t\t})();\n\t\n\t});\n\t\n\tSelectize.define('optgroup_columns', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions = $.extend({\n\t\t\tequalizeWidth  : true,\n\t\t\tequalizeHeight : true\n\t\t}, options);\n\t\n\t\tthis.getAdjacentOption = function($option, direction) {\n\t\t\tvar $options = $option.closest('[data-group]').find('[data-selectable]');\n\t\t\tvar index    = $options.index($option) + direction;\n\t\n\t\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t\t};\n\t\n\t\tthis.onKeyDown = (function() {\n\t\t\tvar original = self.onKeyDown;\n\t\t\treturn function(e) {\n\t\t\t\tvar index, $option, $options, $optgroup;\n\t\n\t\t\t\tif (this.isOpen && (e.keyCode === KEY_LEFT || e.keyCode === KEY_RIGHT)) {\n\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t$optgroup = this.$activeOption.closest('[data-group]');\n\t\t\t\t\tindex = $optgroup.find('[data-selectable]').index(this.$activeOption);\n\t\n\t\t\t\t\tif(e.keyCode === KEY_LEFT) {\n\t\t\t\t\t\t$optgroup = $optgroup.prev('[data-group]');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$optgroup = $optgroup.next('[data-group]');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t$options = $optgroup.find('[data-selectable]');\n\t\t\t\t\t$option  = $options.eq(Math.min($options.length - 1, index));\n\t\t\t\t\tif ($option.length) {\n\t\t\t\t\t\tthis.setActiveOption($option);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\treturn original.apply(this, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tvar getScrollbarWidth = function() {\n\t\t\tvar div;\n\t\t\tvar width = getScrollbarWidth.width;\n\t\t\tvar doc = document;\n\t\n\t\t\tif (typeof width === 'undefined') {\n\t\t\t\tdiv = doc.createElement('div');\n\t\t\t\tdiv.innerHTML = '<div style=\"width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;\"><div style=\"width:1px;height:100px;\"></div></div>';\n\t\t\t\tdiv = div.firstChild;\n\t\t\t\tdoc.body.appendChild(div);\n\t\t\t\twidth = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;\n\t\t\t\tdoc.body.removeChild(div);\n\t\t\t}\n\t\t\treturn width;\n\t\t};\n\t\n\t\tvar equalizeSizes = function() {\n\t\t\tvar i, n, height_max, width, width_last, width_parent, $optgroups;\n\t\n\t\t\t$optgroups = $('[data-group]', self.$dropdown_content);\n\t\t\tn = $optgroups.length;\n\t\t\tif (!n || !self.$dropdown_content.width()) return;\n\t\n\t\t\tif (options.equalizeHeight) {\n\t\t\t\theight_max = 0;\n\t\t\t\tfor (i = 0; i < n; i++) {\n\t\t\t\t\theight_max = Math.max(height_max, $optgroups.eq(i).height());\n\t\t\t\t}\n\t\t\t\t$optgroups.css({height: height_max});\n\t\t\t}\n\t\n\t\t\tif (options.equalizeWidth) {\n\t\t\t\twidth_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();\n\t\t\t\twidth = Math.round(width_parent / n);\n\t\t\t\t$optgroups.css({width: width});\n\t\t\t\tif (n > 1) {\n\t\t\t\t\twidth_last = width_parent - width * (n - 1);\n\t\t\t\t\t$optgroups.eq(n - 1).css({width: width_last});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\tif (options.equalizeHeight || options.equalizeWidth) {\n\t\t\thook.after(this, 'positionDropdown', equalizeSizes);\n\t\t\thook.after(this, 'refreshOptions', equalizeSizes);\n\t\t}\n\t\n\t\n\t});\n\t\n\tSelectize.define('remove_button', function(options) {\n\t\toptions = $.extend({\n\t\t\t\tlabel     : '&times;',\n\t\t\t\ttitle     : 'Remove',\n\t\t\t\tclassName : 'remove',\n\t\t\t\tappend    : true\n\t\t\t}, options);\n\t\n\t\t\tvar singleClose = function(thisRef, options) {\n\t\n\t\t\t\toptions.className = 'remove-single';\n\t\n\t\t\t\tvar self = thisRef;\n\t\t\t\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\t\n\t\t\t\t/**\n\t\t\t\t * Appends an element as a child (with raw HTML).\n\t\t\t\t *\n\t\t\t\t * @param {string} html_container\n\t\t\t\t * @param {string} html_element\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tvar append = function(html_container, html_element) {\n\t\t\t\t\treturn $('<span>').append(html_container)\n\t\t\t\t\t\t.append(html_element);\n\t\t\t\t};\n\t\n\t\t\t\tthisRef.setup = (function() {\n\t\t\t\t\tvar original = self.setup;\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\t// override the item rendering method to add the button to each\n\t\t\t\t\t\tif (options.append) {\n\t\t\t\t\t\t\tvar id = $(self.$input.context).attr('id');\n\t\t\t\t\t\t\tvar selectizer = $('#'+id);\n\t\n\t\t\t\t\t\t\tvar render_item = self.settings.render.item;\n\t\t\t\t\t\t\tself.settings.render.item = function(data) {\n\t\t\t\t\t\t\t\treturn append(render_item.apply(thisRef, arguments), html);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\toriginal.apply(thisRef, arguments);\n\t\n\t\t\t\t\t\t// add event listener\n\t\t\t\t\t\tthisRef.$control.on('click', '.' + options.className, function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (self.isLocked) return;\n\t\n\t\t\t\t\t\t\tself.clear();\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t};\n\t\t\t\t})();\n\t\t\t};\n\t\n\t\t\tvar multiClose = function(thisRef, options) {\n\t\n\t\t\t\tvar self = thisRef;\n\t\t\t\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\t\n\t\t\t\t/**\n\t\t\t\t * Appends an element as a child (with raw HTML).\n\t\t\t\t *\n\t\t\t\t * @param {string} html_container\n\t\t\t\t * @param {string} html_element\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tvar append = function(html_container, html_element) {\n\t\t\t\t\tvar pos = html_container.search(/(<\\/[^>]+>\\s*)$/);\n\t\t\t\t\treturn html_container.substring(0, pos) + html_element + html_container.substring(pos);\n\t\t\t\t};\n\t\n\t\t\t\tthisRef.setup = (function() {\n\t\t\t\t\tvar original = self.setup;\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\t// override the item rendering method to add the button to each\n\t\t\t\t\t\tif (options.append) {\n\t\t\t\t\t\t\tvar render_item = self.settings.render.item;\n\t\t\t\t\t\t\tself.settings.render.item = function(data) {\n\t\t\t\t\t\t\t\treturn append(render_item.apply(thisRef, arguments), html);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\toriginal.apply(thisRef, arguments);\n\t\n\t\t\t\t\t\t// add event listener\n\t\t\t\t\t\tthisRef.$control.on('click', '.' + options.className, function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (self.isLocked) return;\n\t\n\t\t\t\t\t\t\tvar $item = $(e.currentTarget).parent();\n\t\t\t\t\t\t\tself.setActiveItem($item);\n\t\t\t\t\t\t\tif (self.deleteSelection()) {\n\t\t\t\t\t\t\t\tself.setCaret(self.items.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t};\n\t\t\t\t})();\n\t\t\t};\n\t\n\t\t\tif (this.settings.mode === 'single') {\n\t\t\t\tsingleClose(this, options);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tmultiClose(this, options);\n\t\t\t}\n\t});\n\t\n\t\n\tSelectize.define('restore_on_backspace', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions.text = options.text || function(option) {\n\t\t\treturn option[this.settings.labelField];\n\t\t};\n\t\n\t\tthis.onKeyDown = (function() {\n\t\t\tvar original = self.onKeyDown;\n\t\t\treturn function(e) {\n\t\t\t\tvar index, option;\n\t\t\t\tif (e.keyCode === KEY_BACKSPACE && this.$control_input.val() === '' && !this.$activeItems.length) {\n\t\t\t\t\tindex = this.caretPos - 1;\n\t\t\t\t\tif (index >= 0 && index < this.items.length) {\n\t\t\t\t\t\toption = this.options[this.items[index]];\n\t\t\t\t\t\tif (this.deleteSelection(e)) {\n\t\t\t\t\t\t\tthis.setTextboxValue(options.text.apply(this, [option]));\n\t\t\t\t\t\t\tthis.refreshOptions(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn original.apply(this, arguments);\n\t\t\t};\n\t\t})();\n\t});\n\t\n\n\treturn Selectize;\n}));","/**\n * sifter.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.Sifter = factory();\n\t}\n}(this, function() {\n\n\t/**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t * @constructor\n\t * @param {array|object} items\n\t * @param {object} items\n\t */\n\tvar Sifter = function(items, settings) {\n\t\tthis.items = items;\n\t\tthis.settings = settings || {diacritics: true};\n\t};\n\n\t/**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t * @param {string} query\n\t * @returns {array}\n\t */\n\tSifter.prototype.tokenize = function(query) {\n\t\tquery = trim(String(query || '').toLowerCase());\n\t\tif (!query || !query.length) return [];\n\n\t\tvar i, n, regex, letter;\n\t\tvar tokens = [];\n\t\tvar words = query.split(/ +/);\n\n\t\tfor (i = 0, n = words.length; i < n; i++) {\n\t\t\tregex = escape_regex(words[i]);\n\t\t\tif (this.settings.diacritics) {\n\t\t\t\tfor (letter in DIACRITICS) {\n\t\t\t\t\tif (DIACRITICS.hasOwnProperty(letter)) {\n\t\t\t\t\t\tregex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttokens.push({\n\t\t\t\tstring : words[i],\n\t\t\t\tregex  : new RegExp(regex, 'i')\n\t\t\t});\n\t\t}\n\n\t\treturn tokens;\n\t};\n\n\t/**\n\t * Iterates over arrays and hashes.\n\t *\n\t * ```\n\t * this.iterator(this.items, function(item, id) {\n\t *    // invoked for each item\n\t * });\n\t * ```\n\t *\n\t * @param {array|object} object\n\t */\n\tSifter.prototype.iterator = function(object, callback) {\n\t\tvar iterator;\n\t\tif (is_array(object)) {\n\t\t\titerator = Array.prototype.forEach || function(callback) {\n\t\t\t\tfor (var i = 0, n = this.length; i < n; i++) {\n\t\t\t\t\tcallback(this[i], i, this);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\titerator = function(callback) {\n\t\t\t\tfor (var key in this) {\n\t\t\t\t\tif (this.hasOwnProperty(key)) {\n\t\t\t\t\t\tcallback(this[key], key, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\titerator.apply(object, [callback]);\n\t};\n\n\t/**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @param {object|string} search\n\t * @param {object} options (optional)\n\t * @returns {function}\n\t */\n\tSifter.prototype.getScoreFunction = function(search, options) {\n\t\tvar self, fields, tokens, token_count, nesting;\n\n\t\tself        = this;\n\t\tsearch      = self.prepareSearch(search, options);\n\t\ttokens      = search.tokens;\n\t\tfields      = search.options.fields;\n\t\ttoken_count = tokens.length;\n\t\tnesting     = search.options.nesting;\n\n\t\t/**\n\t\t * Calculates how close of a match the\n\t\t * given value is against a search token.\n\t\t *\n\t\t * @param {mixed} value\n\t\t * @param {object} token\n\t\t * @return {number}\n\t\t */\n\t\tvar scoreValue = function(value, token) {\n\t\t\tvar score, pos;\n\n\t\t\tif (!value) return 0;\n\t\t\tvalue = String(value || '');\n\t\t\tpos = value.search(token.regex);\n\t\t\tif (pos === -1) return 0;\n\t\t\tscore = token.string.length / value.length;\n\t\t\tif (pos === 0) score += 0.5;\n\t\t\treturn score;\n\t\t};\n\n\t\t/**\n\t\t * Calculates the score of an object\n\t\t * against the search query.\n\t\t *\n\t\t * @param {object} token\n\t\t * @param {object} data\n\t\t * @return {number}\n\t\t */\n\t\tvar scoreObject = (function() {\n\t\t\tvar field_count = fields.length;\n\t\t\tif (!field_count) {\n\t\t\t\treturn function() { return 0; };\n\t\t\t}\n\t\t\tif (field_count === 1) {\n\t\t\t\treturn function(token, data) {\n\t\t\t\t\treturn scoreValue(getattr(data, fields[0], nesting), token);\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn function(token, data) {\n\t\t\t\tfor (var i = 0, sum = 0; i < field_count; i++) {\n\t\t\t\t\tsum += scoreValue(getattr(data, fields[i], nesting), token);\n\t\t\t\t}\n\t\t\t\treturn sum / field_count;\n\t\t\t};\n\t\t})();\n\n\t\tif (!token_count) {\n\t\t\treturn function() { return 0; };\n\t\t}\n\t\tif (token_count === 1) {\n\t\t\treturn function(data) {\n\t\t\t\treturn scoreObject(tokens[0], data);\n\t\t\t};\n\t\t}\n\n\t\tif (search.options.conjunction === 'and') {\n\t\t\treturn function(data) {\n\t\t\t\tvar score;\n\t\t\t\tfor (var i = 0, sum = 0; i < token_count; i++) {\n\t\t\t\t\tscore = scoreObject(tokens[i], data);\n\t\t\t\t\tif (score <= 0) return 0;\n\t\t\t\t\tsum += score;\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(data) {\n\t\t\t\tfor (var i = 0, sum = 0; i < token_count; i++) {\n\t\t\t\t\tsum += scoreObject(tokens[i], data);\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @param {string|object} search\n\t * @param {object} options\n\t * @return function(a,b)\n\t */\n\tSifter.prototype.getSortFunction = function(search, options) {\n\t\tvar i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;\n\n\t\tself   = this;\n\t\tsearch = self.prepareSearch(search, options);\n\t\tsort   = (!search.query && options.sort_empty) || options.sort;\n\n\t\t/**\n\t\t * Fetches the specified sort field value\n\t\t * from a search result item.\n\t\t *\n\t\t * @param  {string} name\n\t\t * @param  {object} result\n\t\t * @return {mixed}\n\t\t */\n\t\tget_field = function(name, result) {\n\t\t\tif (name === '$score') return result.score;\n\t\t\treturn getattr(self.items[result.id], name, options.nesting);\n\t\t};\n\n\t\t// parse options\n\t\tfields = [];\n\t\tif (sort) {\n\t\t\tfor (i = 0, n = sort.length; i < n; i++) {\n\t\t\t\tif (search.query || sort[i].field !== '$score') {\n\t\t\t\t\tfields.push(sort[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the \"$score\" field is implied to be the primary\n\t\t// sort field, unless it's manually specified\n\t\tif (search.query) {\n\t\t\timplicit_score = true;\n\t\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\t\tif (fields[i].field === '$score') {\n\t\t\t\t\timplicit_score = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (implicit_score) {\n\t\t\t\tfields.unshift({field: '$score', direction: 'desc'});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\t\tif (fields[i].field === '$score') {\n\t\t\t\t\tfields.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmultipliers = [];\n\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\tmultipliers.push(fields[i].direction === 'desc' ? -1 : 1);\n\t\t}\n\n\t\t// build function\n\t\tfields_count = fields.length;\n\t\tif (!fields_count) {\n\t\t\treturn null;\n\t\t} else if (fields_count === 1) {\n\t\t\tfield = fields[0].field;\n\t\t\tmultiplier = multipliers[0];\n\t\t\treturn function(a, b) {\n\t\t\t\treturn multiplier * cmp(\n\t\t\t\t\tget_field(field, a),\n\t\t\t\t\tget_field(field, b)\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(a, b) {\n\t\t\t\tvar i, result, a_value, b_value, field;\n\t\t\t\tfor (i = 0; i < fields_count; i++) {\n\t\t\t\t\tfield = fields[i].field;\n\t\t\t\t\tresult = multipliers[i] * cmp(\n\t\t\t\t\t\tget_field(field, a),\n\t\t\t\t\t\tget_field(field, b)\n\t\t\t\t\t);\n\t\t\t\t\tif (result) return result;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t * @param {string} query\n\t * @param {object} options\n\t * @returns {object}\n\t */\n\tSifter.prototype.prepareSearch = function(query, options) {\n\t\tif (typeof query === 'object') return query;\n\n\t\toptions = extend({}, options);\n\n\t\tvar option_fields     = options.fields;\n\t\tvar option_sort       = options.sort;\n\t\tvar option_sort_empty = options.sort_empty;\n\n\t\tif (option_fields && !is_array(option_fields)) options.fields = [option_fields];\n\t\tif (option_sort && !is_array(option_sort)) options.sort = [option_sort];\n\t\tif (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];\n\n\t\treturn {\n\t\t\toptions : options,\n\t\t\tquery   : String(query || '').toLowerCase(),\n\t\t\ttokens  : this.tokenize(query),\n\t\t\ttotal   : 0,\n\t\t\titems   : []\n\t\t};\n\t};\n\n\t/**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t * The `options` parameter can contain:\n\t *\n\t *   - fields {string|array}\n\t *   - sort {array}\n\t *   - score {function}\n\t *   - filter {bool}\n\t *   - limit {integer}\n\t *\n\t * Returns an object containing:\n\t *\n\t *   - options {object}\n\t *   - query {string}\n\t *   - tokens {array}\n\t *   - total {int}\n\t *   - items {array}\n\t *\n\t * @param {string} query\n\t * @param {object} options\n\t * @returns {object}\n\t */\n\tSifter.prototype.search = function(query, options) {\n\t\tvar self = this, value, score, search, calculateScore;\n\t\tvar fn_sort;\n\t\tvar fn_score;\n\n\t\tsearch  = this.prepareSearch(query, options);\n\t\toptions = search.options;\n\t\tquery   = search.query;\n\n\t\t// generate result scoring function\n\t\tfn_score = options.score || self.getScoreFunction(search);\n\n\t\t// perform search and sort\n\t\tif (query.length) {\n\t\t\tself.iterator(self.items, function(item, id) {\n\t\t\t\tscore = fn_score(item);\n\t\t\t\tif (options.filter === false || score > 0) {\n\t\t\t\t\tsearch.items.push({'score': score, 'id': id});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tself.iterator(self.items, function(item, id) {\n\t\t\t\tsearch.items.push({'score': 1, 'id': id});\n\t\t\t});\n\t\t}\n\n\t\tfn_sort = self.getSortFunction(search, options);\n\t\tif (fn_sort) search.items.sort(fn_sort);\n\n\t\t// apply limits\n\t\tsearch.total = search.items.length;\n\t\tif (typeof options.limit === 'number') {\n\t\t\tsearch.items = search.items.slice(0, options.limit);\n\t\t}\n\n\t\treturn search;\n\t};\n\n\t// utilities\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tvar cmp = function(a, b) {\n\t\tif (typeof a === 'number' && typeof b === 'number') {\n\t\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t\t}\n\t\ta = asciifold(String(a || ''));\n\t\tb = asciifold(String(b || ''));\n\t\tif (a > b) return 1;\n\t\tif (b > a) return -1;\n\t\treturn 0;\n\t};\n\n\tvar extend = function(a, b) {\n\t\tvar i, n, k, object;\n\t\tfor (i = 1, n = arguments.length; i < n; i++) {\n\t\t\tobject = arguments[i];\n\t\t\tif (!object) continue;\n\t\t\tfor (k in object) {\n\t\t\t\tif (object.hasOwnProperty(k)) {\n\t\t\t\t\ta[k] = object[k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param  {Object}  obj     The root object to fetch property on\n\t * @param  {String}  name    The optionally dotted property name to fetch\n\t * @param  {Boolean} nesting Handle nesting or not\n\t * @return {Object}          The resolved property value\n\t */\n\tvar getattr = function(obj, name, nesting) {\n\t    if (!obj || !name) return;\n\t    if (!nesting) return obj[name];\n\t    var names = name.split(\".\");\n\t    while(names.length && (obj = obj[names.shift()]));\n\t    return obj;\n\t};\n\n\tvar trim = function(str) {\n\t\treturn (str + '').replace(/^\\s+|\\s+$|/g, '');\n\t};\n\n\tvar escape_regex = function(str) {\n\t\treturn (str + '').replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n\t};\n\n\tvar is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) {\n\t\treturn Object.prototype.toString.call(object) === '[object Array]';\n\t};\n\n\tvar DIACRITICS = {\n\t\t'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]',\n\t\t'b': '[b␢βΒB฿𐌁ᛒ]',\n\t\t'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]',\n\t\t'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]',\n\t\t'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]',\n\t\t'f': '[fƑƒḞḟ]',\n\t\t'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]',\n\t\t'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]',\n\t\t'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]',\n\t\t'j': '[jȷĴĵɈɉʝɟʲ]',\n\t\t'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]',\n\t\t'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]',\n\t\t'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]',\n\t\t'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]',\n\t\t'p': '[pṔṕṖṗⱣᵽƤƥᵱ]',\n\t\t'q': '[qꝖꝗʠɊɋꝘꝙq̃]',\n\t\t'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]',\n\t\t's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]',\n\t\t't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]',\n\t\t'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]',\n\t\t'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]',\n\t\t'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]',\n\t\t'x': '[xẌẍẊẋχ]',\n\t\t'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]',\n\t\t'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]'\n\t};\n\n\tvar asciifold = (function() {\n\t\tvar i, n, k, chunk;\n\t\tvar foreignletters = '';\n\t\tvar lookup = {};\n\t\tfor (k in DIACRITICS) {\n\t\t\tif (DIACRITICS.hasOwnProperty(k)) {\n\t\t\t\tchunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);\n\t\t\t\tforeignletters += chunk;\n\t\t\t\tfor (i = 0, n = chunk.length; i < n; i++) {\n\t\t\t\t\tlookup[chunk.charAt(i)] = k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar regexp = new RegExp('[' +  foreignletters + ']', 'g');\n\t\treturn function(str) {\n\t\t\treturn str.replace(regexp, function(foreignletter) {\n\t\t\t\treturn lookup[foreignletter];\n\t\t\t}).toLowerCase();\n\t\t};\n\t})();\n\n\n\t// export\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\treturn Sifter;\n}));\n\n","/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.MicroPlugin = factory();\n\t}\n}(this, function() {\n\tvar MicroPlugin = {};\n\n\tMicroPlugin.mixin = function(Interface) {\n\t\tInterface.plugins = {};\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {mixed} plugins\n\t\t */\n\t\tInterface.prototype.initializePlugins = function(plugins) {\n\t\t\tvar i, n, key;\n\t\t\tvar self  = this;\n\t\t\tvar queue = [];\n\n\t\t\tself.plugins = {\n\t\t\t\tnames     : [],\n\t\t\t\tsettings  : {},\n\t\t\t\trequested : {},\n\t\t\t\tloaded    : {}\n\t\t\t};\n\n\t\t\tif (utils.isArray(plugins)) {\n\t\t\t\tfor (i = 0, n = plugins.length; i < n; i++) {\n\t\t\t\t\tif (typeof plugins[i] === 'string') {\n\t\t\t\t\t\tqueue.push(plugins[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugins[i].name] = plugins[i].options;\n\t\t\t\t\t\tqueue.push(plugins[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (queue.length) {\n\t\t\t\tself.require(queue.shift());\n\t\t\t}\n\t\t};\n\n\t\tInterface.prototype.loadPlugin = function(name) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t};\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t * @param {string} name\n\t\t */\n\t\tInterface.prototype.require = function(name) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {function} fn\n\t\t */\n\t\tInterface.define = function(name, fn) {\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t};\n\t};\n\n\tvar utils = {\n\t\tisArray: Array.isArray || function(vArg) {\n\t\t\treturn Object.prototype.toString.call(vArg) === '[object Array]';\n\t\t}\n\t};\n\n\treturn MicroPlugin;\n}));","var ko = require('knockout');\r\n\r\n// NOTE: At the bottom of this file, every component in koComponents is registered\r\n\r\nvar koComponents = [\r\n  // Calculator\r\n  {\r\n    name: 'calculator',\r\n    viewModel: require('./calculator/calculator.js'),\r\n    template: require('./calculator/calculator.template')\r\n  },\r\n  {\r\n    name: 'oppdateringskalkulator',\r\n    viewModel: require('./calculator/oppdateringskalkulator/oppdateringskalkulator.js'),\r\n    template: require('./calculator/oppdateringskalkulator/oppdateringskalkulator.template')\r\n  },\r\n  {\r\n    name: 'manglerkurs',\r\n    viewModel: require('./calculator/manglerkurs/manglerkurs.js'),\r\n    template: require('./calculator/manglerkurs/manglerkurs.template')\r\n  },\r\n  {\r\n    name: 'timestatus',\r\n    viewModel: require('./calculator/timestatus/timestatus.js'),\r\n    template: require('./calculator/timestatus/timestatus.template')\r\n  },\r\n  {\r\n    name: 'calculator-bar',\r\n    viewModel: require('./calculator/bar/calculator-bar.js'),\r\n    template: require('./calculator/bar/calculator-bar.template')\r\n  },\r\n  {\r\n    name: 'calculator-course',\r\n    viewModel: require('./calculator/courses/calculator-course.js'),\r\n    template: require('./calculator/courses/calculator-course.template')\r\n  },\r\n  {\r\n    name: 'calculator-courses',\r\n    viewModel: require('./calculator/courses/calculator-courses.js'),\r\n    template: require('./calculator/courses/calculator-courses.template')\r\n  },\r\n  {\r\n    name: 'calculator-extended-course',\r\n    viewModel: require('./calculator/extended/extended-course.js'),\r\n    template: require('./calculator/extended/extended-course.template')\r\n  },\r\n  {\r\n    name: 'calculator-extended-leave',\r\n    viewModel: require('./calculator/extended/extended-leave.js'),\r\n    template: require('./calculator/extended/extended-leave.template')\r\n  },\r\n  {\r\n    name: 'calculator-notifier',\r\n    viewModel: require('./calculator/notifier/notifier.js'),\r\n    template: require('./calculator/notifier/notifier.template')\r\n  },\r\n  {\r\n    name: 'calculator-timeunit',\r\n    viewModel: require('./calculator/timeunit/timeunit.js'),\r\n    template: require('./calculator/timeunit/timeunit.template')\r\n  },\r\n  {\r\n    name: 'calculator-timeunits',\r\n    viewModel: require('./calculator/timeunits/timeunits.js'),\r\n    template: require('./calculator/timeunits/timeunits.template')\r\n  },\r\n  {\r\n    name: 'calculator-year',\r\n    viewModel: require('./calculator/year/calculator-year.js'),\r\n    template: require('./calculator/year/calculator-year.template')\r\n  },\r\n  {\r\n    name: 'calculator-years',\r\n    viewModel: require('./calculator/years/calculator-years.js'),\r\n    template: require('./calculator/years/calculator-years.template')\r\n  },\r\n\r\n  // Registration\r\n  {\r\n    name: 'registration-pages',\r\n    viewModel: require('./registration/pages/registration-pages.js'),\r\n    template: require('./registration/pages/registration-pages.template')\r\n  },\r\n  {\r\n    name: 'registration-personal-info',\r\n    viewModel: require('./registration/page/registration-personal-info.js'),\r\n    template: require('./registration/page/registration-personal-info.template')\r\n  },\r\n  {\r\n    name: 'registration-info-member',\r\n    viewModel: require('./registration/page/registration-info-member.js'),\r\n    template: require('./registration/page/registration-info-member.template')\r\n  },\r\n  {\r\n    name: 'registration-employer',\r\n    viewModel: require('./registration/page/registration-employer.js'),\r\n    template: require('./registration/page/registration-employer.template')\r\n  },\r\n  {\r\n    name: 'registration-confirmation',\r\n    viewModel: require('./registration/page/registration-confirmation.js'),\r\n    template: require('./registration/page/registration-confirmation.template')\r\n  },\r\n  {\r\n    name: 'registration-enroll',\r\n    viewModel: require('./registration/page/registration-enroll.js'),\r\n    template: require('./registration/page/registration-enroll.template')\r\n  },\r\n  {\r\n    name: 'registration-agency',\r\n    viewModel: require('./registration/page/registration-agency.js'),\r\n    template: require('./registration/page/registration-agency.template')\r\n  },\r\n  {\r\n    name: 'registration-insurance',\r\n    viewModel: require('./registration/page/registration-insurance.js'),\r\n    template: require('./registration/page/registration-insurance.template')\r\n  },\r\n  {\r\n    name: 'registration-end',\r\n    viewModel: require('./registration/page/registration-end.js'),\r\n    template: require('./registration/page/registration-end.template')\r\n  },\r\n\r\n  // Misc\r\n  {\r\n    name: 'external-course',\r\n    viewModel: require('./external-course/external-course.js'),\r\n    template: require('./external-course/external-course.template')\r\n  },\r\n  {\r\n    name: 'course-instructors',\r\n    viewModel: require('./course-instructors/course-instructors.js'),\r\n    template: require('./course-instructors/course-instructors.template')\r\n  },\r\n  {\r\n    name: 'bureau-employee-list',\r\n    viewModel: require('./bureau-employee-list/employee-list/employee-list.js'),\r\n    template: require('./bureau-employee-list/employee-list/employee-list.template')\r\n  },\r\n  {\r\n    name: 'bureau-employee-list-modal',\r\n    viewModel: require('./bureau-employee-list/add-employee-modal/add-employee-modal.js'),\r\n    template: require('./bureau-employee-list/add-employee-modal/add-employee-modal.template')\r\n  },\r\n  {\r\n    name: 'bureau-insurances',\r\n    viewModel: require('./bureau-insurances/bureau-insurances.js'),\r\n    template: require('./bureau-insurances/bureau-insurances.template')\r\n  },\r\n  {\r\n    name: 'calendar',\r\n    viewModel: require('./calendar/calendar.js'),\r\n    template: require('./calendar/calendar.template')\r\n  },\r\n  {\r\n    name: 'find-accountants',\r\n    viewModel: require('./find-accountants/find-accountants.js'),\r\n    template: require('./find-accountants/find-accountants.template')\r\n  },\r\n  {\r\n    name: 'pagination',\r\n    viewModel: require('./pagination/pagination.js'),\r\n    template: require('./pagination/pagination.template')\r\n  },\r\n  {\r\n    name: 'add-participant-box',\r\n    viewModel: require('./add-participant-box/add-participant-box.js'),\r\n    template: require('./add-participant-box/add-participant-box.template')\r\n  },\r\n  {\r\n    name: 'choose-agency',\r\n    viewModel: require('./choose-agency/choose-agency.js'),\r\n    template: require('./choose-agency/choose-agency.template')\r\n  },\r\n  {\r\n    name: 'create-employee',\r\n    viewModel: require('./create-employee/create-employee.js'),\r\n    template: require('./create-employee/create-employee.template')\r\n  },\r\n  {\r\n    name: 'article-block',\r\n    viewModel: require('./article-block/article-block.js'),\r\n    template: require('./article-block/article-block.template')\r\n  },\r\n  {\r\n    name: 'article-block-full',\r\n    viewModel: require('./article-block-full/article-block-full.js'),\r\n    template: require('./article-block-full/article-block-full.template')\r\n  },\r\n  {\r\n    name: 'product-block',\r\n    viewModel: require('./blocks/product-block/product-block.js'),\r\n    template: require('./blocks/product-block/product-block.template')\r\n  },\r\n  {\r\n    name: 'course-block',\r\n    viewModel: require('./course-block/course-block.js'),\r\n    template: require('./course-block/course-block.template')\r\n  },\r\n  {\r\n    name: 'marketing-teaser-tile',\r\n    viewModel: require('./marketing-teaser-tile/marketing-teaser-tile.js'),\r\n    template: require('./marketing-teaser-tile/marketing-teaser-tile.template')\r\n  },\r\n  {\r\n    name: 'form-checkbox-list',\r\n    viewModel: require('./form/form-checkbox-list/form-checkbox-list.js'),\r\n    template: require('./form/form-checkbox-list/form-checkbox-list.template')\r\n  },\r\n  {\r\n    name: 'form-multiselect',\r\n    viewModel: require('./form/form-multiselect/form-multiselect.js'),\r\n    template: require('./form/form-multiselect/form-multiselect.template')\r\n  },\r\n  {\r\n    name: 'form-multiselect-simple',\r\n    viewModel: require('./form/form-multiselect-simple/form-multiselect-simple.js'),\r\n    template: require('./form/form-multiselect-simple/form-multiselect-simple.template')\r\n  },\r\n  {\r\n    name: 'form-selected-list',\r\n    viewModel: require('./form/form-selected-list/form-selected-list.js'),\r\n    template: require('./form/form-selected-list/form-selected-list.template')\r\n  },\r\n  {\r\n    name: 'admin-tool-user-management',\r\n    viewModel: require('./admin-tool-user-management/admin-tool-user-management.js'),\r\n    template: require('./admin-tool-user-management/admin-tool-user-management.template')\r\n  },\r\n  {\r\n    name: 'file-list',\r\n    viewModel: require('./file-list/file-list.js'),\r\n    template: require('./file-list/file-list.template')\r\n  },\r\n  {\r\n    name: 'message',\r\n    viewModel: require('./message/message.js'),\r\n    template: require('./message/message.template')\r\n  },\r\n  {\r\n    name: 'my-courses-page',\r\n    viewModel: require('./my-courses-page/my-courses-page.js'),\r\n    template: require('./my-courses-page/my-courses-page.template')\r\n  },\r\n  {\r\n    name: 'my-planned-courses',\r\n    viewModel: require('./my-courses-page/my-planned-courses/my-planned-courses.js'),\r\n    template: require('./my-courses-page/my-planned-courses/my-planned-courses.template')\r\n  },\r\n  {\r\n    name: 'my-completed-courses',\r\n    viewModel: require('./my-courses-page/my-completed-courses/my-completed-courses.js'),\r\n    template: require('./my-courses-page/my-completed-courses/my-completed-courses.template')\r\n  },\r\n  {\r\n    name: 'courses-list-item',\r\n    viewModel: require('./my-courses-page/courses-list-item/courses-list-item.js'),\r\n    template: require('./my-courses-page/courses-list-item/courses-list-item.template')\r\n  },\r\n  {\r\n    name: 'course-registration-overview',\r\n    viewModel: require('./course-registration-overview/course-registration-overview.js'),\r\n    template: require('./course-registration-overview/course-registration-overview.template')\r\n  },\r\n  {\r\n    name: 'course-overview-list',\r\n    viewModel: require('./course-registration-overview/course-overview-list/course-overview-list.js'),\r\n    template: require('./course-registration-overview/course-overview-list/course-overview-list.template')\r\n  },\r\n  {\r\n    name: 'course-registration-participants',\r\n    viewModel: require('./course-registration-participants/course-registration-participants.js'),\r\n    template: require('./course-registration-participants/course-registration-participants.template')\r\n  },\r\n  {\r\n    name: 'course-participants-list',\r\n    viewModel: require('./course-registration-participants/course-participants-list/course-participants-list.js'),\r\n    template: require('./course-registration-participants/course-participants-list/course-participants-list.template')\r\n  },\r\n  {\r\n    name: 'participant-details-modal',\r\n    viewModel: require('./course-registration-participants/participant-details-modal/participant-details-modal.js'),\r\n    template: require('./course-registration-participants/participant-details-modal/participant-details-modal.template')\r\n  },\r\n  {\r\n    name: 'course-registration-feedback-box',\r\n    viewModel: require('./course-registration-participants/course-registration-feedback-box/course-registration-feedback-box.js'),\r\n    template: require('./course-registration-participants/course-registration-feedback-box/course-registration-feedback-box.template')\r\n  },\r\n  {\r\n    name: 'sequence-details-block',\r\n    viewModel: require('./course-registration-participants/sequence-details-block/sequence-details-block.js'),\r\n    template: require('./course-registration-participants/sequence-details-block/sequence-details-block.template')\r\n  },\r\n  {\r\n    name: 'report-page',\r\n    viewModel: require('./report-page/report-page.js'),\r\n    template: require('./report-page/report-page.template')\r\n  },\r\n  {\r\n    name: 'search-block',\r\n    viewModel: require('./search-block/search-block.js'),\r\n    template: require('./search-block/search-block.template')\r\n  }\r\n];\r\n\r\n// Register all the knockout components:\r\nkoComponents.forEach(function(koComponent) {\r\n  ko.components.register(koComponent.name, {\r\n    viewModel: koComponent.viewModel,\r\n    template: koComponent.template\r\n  });\r\n});\r\n","var ko = require('knockout'),\r\n  Cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization'),\r\n  CalculatorTracking = require('./calculator-tracking'),\r\n  decodeHtml = require('_utils/text');\r\n\r\nrequire('knockout-postbox');\r\n\r\nvar MONTH_TYPE = {\r\n  NOVEMBER: 10,\r\n  DECEMBER: 11\r\n};\r\n\r\nfunction CalculatorRN(params) {\r\n  var self = this;\r\n  // Set up listeners to resize event so that we can tell if it's a mobile\r\n  // view or not.\r\n  this.mobileSize = ko.observable('large').subscribeTo('resize', true);\r\n  this.mobileView = ko.computed(function() {\r\n    if (self.mobileSize() === 'small') {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  });\r\n  this.params = params;\r\n  this.actorId = params.actorId;\r\n  this.showRequirementWarningsAllYear = ko.observable(\r\n    params.showRequirementWarningsAllYear\r\n  );\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.isRNFriProduct = params.isRNFriProduct;\r\n  this.calculatorInfoText = decodeHtml(params.texts.calculatorInfoText);\r\n  this.calculatorPreviousYearInfoText = decodeHtml(\r\n    params.texts.calculatorPreviousYearInfoText\r\n  );\r\n  this.descriptionCourseStudyStatus = ko.observable('');\r\n  this.data = {\r\n    timestatus: {\r\n      title: decodeHtml(this.texts.titleCourseStudyStatus),\r\n      texts: this.texts\r\n    },\r\n    manglerKurs: {\r\n      title: this.texts.missingCourseTitle,\r\n      description: decodeHtml(this.texts.missingCourseDescription),\r\n      forwardLink: this.links.findCoursesLink,\r\n      forwardLinkText: this.texts.findCourseLinkText\r\n    }\r\n  };\r\n}\r\n\r\nCalculatorRN.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.$htmlBody = $('html, body');\r\n  this.categories = ko.observableArray([]).syncWith('categories', true);\r\n\r\n  // If authorizedAccountant is set, we set the calculator type to accountent. Else we set it to auditor.\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  this.calculatorType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  // Used by the API call methods to detect if it was triggered by the user switching authorization type.\r\n  this.changeInAuthorizationType = false;\r\n\r\n  this.showCalculatorType = ko.observable(false);\r\n  // Only show the accountant and auditor tabs if the user is both types.\r\n  if (window.authorizedAccountant && window.authorizedAuditor) {\r\n    this.showCalculatorType(true);\r\n  }\r\n\r\n  this.showLeaveBlock = ko.observable(false);\r\n  this.showAddCourse = ko.observable(false);\r\n  this.showCalculatorDescription = this.mobileView()\r\n    ? ko.observable(false)\r\n    : ko.observable(true);\r\n  this.currentStartYear = ko\r\n    .observable(0)\r\n    .subscribeTo('currentStartYear', true);\r\n  this.currentEndYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n  this.categoriesEndYear = ko.observable(0);\r\n  this.currentYear = ko.observable(0);\r\n  this.activeModal = ko.observable(false);\r\n  this.modalTitle = ko.observable('');\r\n  this.modalText = ko.observable('');\r\n  this.totalDoneHours = ko.observable(0);\r\n  this.totalRequiredHours = ko.observable(0);\r\n  this.calculatorExtendedCourse = $('.calculator-extended-course');\r\n  this.calculatorExtendedLeave = $('.calculator-extended-leave');\r\n  // Which of the current bars / categories is expanded (if any).\r\n  this.activeBar = ko.observable();\r\n  this.periodStartYears = ko.observableArray();\r\n  this.getPeriods();\r\n\r\n  this.authorizationDate = ko.observable();\r\n  this.showAuthorizationDate = ko.observable(false);\r\n  // Get the categories needed for the calculator bars.\r\n  this.getCategories();\r\n  // Check if user changes from accountant to auditor.\r\n  this.calculatorType.subscribe(function(value) {\r\n    this.changeInAuthorizationType = true;\r\n    this.getCategories();\r\n    this.getPeriods();\r\n  }, this);\r\n\r\n  // Listen to change in current year and fetch the appropriate year.\r\n  this.currentYear.subscribe(function() {\r\n    this.getCategories();\r\n  }, this);\r\n\r\n  this.downloadFileUrl = ko.computed(function() {\r\n    return (\r\n      this.API.periodReportUrl +\r\n      '/' +\r\n      this.currentStartYear() +\r\n      '?authorizationType=' +\r\n      encodeURIComponent(this.calculatorType()) +\r\n      (this.actorId ? '&actorId=' + encodeURIComponent(this.actorId) : '')\r\n    );\r\n  }, this);\r\n\r\n  // When there is change in absence we want to get the categories (with hours),\r\n  // because the period may affect the categories.\r\n  ko.postbox.subscribe(\r\n    'changeInAbsence',\r\n    function() {\r\n      this.getCategories();\r\n    }.bind(this)\r\n  );\r\n  ko.postbox.subscribe(\r\n    'changeInCategoryRequirement',\r\n    function() {\r\n      this.getCategories();\r\n    }.bind(this)\r\n  );\r\n  // Listen to modal/popup requests.\r\n  ko.postbox.subscribe(\r\n    'openPopup',\r\n    function(value) {\r\n      this.activeModal(!this.activeModal());\r\n      this.modalTitle(value.modalTitle);\r\n      this.modalText(value.modalText);\r\n    }.bind(this)\r\n  );\r\n\r\n  // Listen to when a uses buys a course (or rather, when a user adds it to the shopping cart).\r\n  ko.postbox.subscribe(\r\n    'buyCourse',\r\n    function(course) {\r\n      Cart.addCourseToCart(course);\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nCalculatorRN.prototype.getPeriods = function() {\r\n  var url =\r\n    this.API.periods +\r\n    '?authorizationType=' +\r\n    encodeURIComponent(this.calculatorType());\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      var startYears = [];\r\n      for (var i = 0; i < response.length; i++) {\r\n        var startYearDate = new Date(response[i].Start);\r\n        startYears.push(startYearDate.getFullYear());\r\n      }\r\n      this.periodStartYears(startYears);\r\n      var authDate = new Date(response[0].Start);\r\n      var authDateString =\r\n        '' +\r\n        authDate.getDate() +\r\n        '.' +\r\n        (authDate.getUTCMonth() + 1) +\r\n        '.' +\r\n        authDate.getFullYear();\r\n      this.authorizationDate(authDateString);\r\n      this.showAuthorizationDate(startYears.length === 1);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nCalculatorRN.prototype.getCategories = function() {\r\n  var url =\r\n    this.API.categoryHours +\r\n    '?authorizationType=' +\r\n    encodeURIComponent(this.calculatorType());\r\n\r\n  if (this.currentYear() !== 0) {\r\n    url = url + '&startYear=' + encodeURIComponent(this.currentYear());\r\n  }\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.categoriesEndYear(response.EndYear);\r\n      this.handleCategories(response.Categories);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nCalculatorRN.prototype.handleCategories = function(categories) {\r\n  var totalDoneHours = 0,\r\n    totalRequiredHours = 0,\r\n    i = 0,\r\n    totalPlannedHoursCategories = 0,\r\n    requiredHoursCurrentCategory = 0;\r\n\r\n  if (this.changeInAuthorizationType || this.categories().length === 0) {\r\n    this.changeInAuthorizationType = false;\r\n\r\n    // We want to replace all the \"normal\" values with observables. This way we can detect changes\r\n    // and update the values in the child component without actually reloading the whole component.\r\n    for (i = 0; i < categories.length; i++) {\r\n      requiredHoursCurrentCategory = categories[i].Requirement;\r\n      totalPlannedHoursCategories +=\r\n        categories[i].PlannedHoursFromCurrentCategory;\r\n      categories[i].CategoryKey = categories[i].CategoryKey;\r\n      categories[i].TotalHoursDone = ko.observable(\r\n        categories[i].TotalStructuredHoursDone +\r\n          categories[i].TotalUnstructuredHoursDone\r\n      );\r\n      categories[i].DoneStructuredHoursFromCurrentCategory = ko.observable(\r\n        categories[i].DoneStructuredHoursFromCurrentCategory\r\n      );\r\n      categories[i].DoneUnstructuredHoursFromCurrentCategory = ko.observable(\r\n        categories[i].DoneUnstructuredHoursFromCurrentCategory\r\n      );\r\n      categories[i].PlannedHoursFromCurrentCategory = ko.observable(\r\n        categories[i].PlannedHoursFromCurrentCategory\r\n      );\r\n      categories[i].Requirement = ko.observable(requiredHoursCurrentCategory);\r\n      categories[i].ShowMissingHoursError = ko.observable(\r\n        this.showMissingHoursError(\r\n          categories[i].TotalHoursDone(),\r\n          requiredHoursCurrentCategory\r\n        )\r\n      );\r\n      categories[i].UpdateCounter = ko.observable(0);\r\n      totalDoneHours += categories[i].TotalHoursDone();\r\n      totalRequiredHours += requiredHoursCurrentCategory;\r\n      categories[i].Shopping = ko.observable(0);\r\n      categories[i].RemainingHours = ko.observable(\r\n        Math.max(\r\n          0,\r\n          categories[i].Requirement() -\r\n            categories[i].TotalHoursDone() -\r\n            categories[i].PlannedHoursFromCurrentCategory()\r\n        )\r\n      );\r\n    }\r\n    this.categories(categories);\r\n  } else {\r\n    // Only change the values since we already have the categories.\r\n    for (i = 0; i < this.categories().length; i++) {\r\n      requiredHoursCurrentCategory = categories[i].Requirement;\r\n      totalPlannedHoursCategories +=\r\n        categories[i].PlannedHoursFromCurrentCategory;\r\n\r\n      this.categories()[i].CategoryKey = categories[i].CategoryKey;\r\n      this.categories()[i].TotalHoursDone(\r\n        categories[i].TotalStructuredHoursDone +\r\n          categories[i].TotalUnstructuredHoursDone\r\n      );\r\n      this.categories()[i].DoneStructuredHoursFromCurrentCategory(\r\n        categories[i].DoneStructuredHoursFromCurrentCategory\r\n      );\r\n      this.categories()[i].DoneUnstructuredHoursFromCurrentCategory(\r\n        categories[i].DoneUnstructuredHoursFromCurrentCategory\r\n      );\r\n      this.categories()[i].PlannedHoursFromCurrentCategory(\r\n        categories[i].PlannedHoursFromCurrentCategory\r\n      );\r\n      this.categories()[i].Requirement(requiredHoursCurrentCategory);\r\n      this.categories()[i].ShowMissingHoursError(\r\n        this.showMissingHoursError(\r\n          this.categories()[i].TotalHoursDone(),\r\n          requiredHoursCurrentCategory\r\n        )\r\n      );\r\n      this.categories()[i].UpdateCounter(\r\n        this.categories()[i].UpdateCounter() + 1\r\n      );\r\n\r\n      totalDoneHours += this.categories()[i].TotalHoursDone();\r\n      totalRequiredHours += this.categories()[i].Requirement();\r\n      this.categories()[i].RemainingHours(\r\n        Math.max(\r\n          0,\r\n          this.categories()[i].Requirement() -\r\n            this.categories()[i].TotalHoursDone() -\r\n            this.categories()[i].PlannedHoursFromCurrentCategory()\r\n        )\r\n      );\r\n      this.categories()[i].Shopping(0);\r\n    }\r\n  }\r\n  ko.postbox.publish(\r\n    'totalPlannedHoursCategories',\r\n    totalPlannedHoursCategories\r\n  );\r\n  this.totalDoneHours(totalDoneHours);\r\n  this.totalRequiredHours(totalRequiredHours);\r\n  this.categories.valueHasMutated();\r\n};\r\n\r\nCalculatorRN.prototype.showHoursType = function(type) {\r\n  ko.postbox.publish('showHoursType', type);\r\n};\r\n\r\n//TODO: This is just a temporary fix\r\nCalculatorRN.prototype.showMissingHoursError = function(\r\n  doneHours,\r\n  requiredHours\r\n) {\r\n  /*var currentDateYear = new Date().getFullYear(),\r\n    currentDateMonth = new Date().getMonth();\r\n  return (\r\n    this.categoriesEndYear() === currentDateYear &&\r\n    doneHours < requiredHours &&\r\n    (currentDateMonth === MONTH_TYPE.NOVEMBER ||\r\n      currentDateMonth === MONTH_TYPE.DECEMBER ||\r\n      this.showRequirementWarningsAllYear())\r\n  );*/\r\n  return false;\r\n};\r\nCalculatorRN.prototype.previousYear = function() {\r\n  var indexOfCurrentStartYear = this.periodStartYears().indexOf(\r\n    this.currentStartYear()\r\n  );\r\n  var previousStartYear =\r\n    indexOfCurrentStartYear - 1 >= 0\r\n      ? this.periodStartYears()[indexOfCurrentStartYear - 1]\r\n      : this.currentStartYear();\r\n  this.currentYear(previousStartYear);\r\n  CalculatorTracking.trackYearChange(\r\n    'previousYear',\r\n    this.currentYear(),\r\n    this.currentEndYear() >= new Date().getFullYear()\r\n  );\r\n  ko.postbox.publish('currentYearChange', this.currentYear());\r\n  this.showAuthorizationDate(\r\n    indexOfCurrentStartYear - 1 === 0 || indexOfCurrentStartYear === 0\r\n  );\r\n};\r\n\r\nCalculatorRN.prototype.nextYear = function() {\r\n  var indexOfCurrentStartYear = this.periodStartYears().indexOf(\r\n    this.currentStartYear()\r\n  );\r\n  var nextStartYear =\r\n    indexOfCurrentStartYear + 1 < this.periodStartYears().length\r\n      ? this.periodStartYears()[indexOfCurrentStartYear + 1]\r\n      : this.currentStartYear();\r\n  this.currentYear(nextStartYear);\r\n  CalculatorTracking.trackYearChange(\r\n    'nextYear',\r\n    this.currentYear(),\r\n    this.currentEndYear() >= new Date().getFullYear()\r\n  );\r\n  ko.postbox.publish('currentYearChange', this.currentYear());\r\n  this.showAuthorizationDate(indexOfCurrentStartYear + 1 === 0);\r\n};\r\n\r\nCalculatorRN.prototype.toggleAddCourse = function() {\r\n  var self = this;\r\n  if (this.showAddCourse()) {\r\n    this.calculatorExtendedCourse.slideUp(250, 'easeOutQuad');\r\n    this.showAddCourse(false);\r\n    CalculatorTracking.trackCloseExtendedPages('course', 'addCourse');\r\n  } else {\r\n    this.calculatorExtendedLeave.slideUp(250, 'easeOutQuad', function() {\r\n      self.calculatorExtendedCourse.slideDown(250, 'easeOutQuad', function() {\r\n        var scrollToTarget = self.calculatorExtendedCourse.offset().top - 100;\r\n        self.$htmlBody.animate({ scrollTop: scrollToTarget + 'px' });\r\n      });\r\n      self.showAddCourse(true);\r\n      self.showLeaveBlock(false);\r\n      CalculatorTracking.trackExtendedPages('course', 'addCourse', 'expand');\r\n    });\r\n  }\r\n};\r\n\r\nCalculatorRN.prototype.toggleLeaveBlock = function() {\r\n  var self = this;\r\n  if (this.showLeaveBlock()) {\r\n    this.calculatorExtendedLeave.slideUp(250, 'easeOutQuad');\r\n    this.showLeaveBlock(false);\r\n    CalculatorTracking.trackCloseExtendedPages('absence', 'addEditAbsence');\r\n  } else {\r\n    this.calculatorExtendedCourse.slideUp(250, 'easeOutQuad', function() {\r\n      self.calculatorExtendedLeave.slideDown(250, 'easeOutQuad', function() {\r\n        // Get the position and subtract the padding.\r\n        var scrollToTarget = self.calculatorExtendedLeave.offset().top - 100;\r\n        self.$htmlBody.animate({ scrollTop: scrollToTarget + 'px' });\r\n      });\r\n      self.showLeaveBlock(true);\r\n      self.showAddCourse(false);\r\n\r\n      CalculatorTracking.trackExtendedPages(\r\n        'absence',\r\n        'addEditAbsence',\r\n        'expand'\r\n      );\r\n    });\r\n  }\r\n};\r\n\r\nCalculatorRN.prototype.toggleCalculatorDescription = function() {\r\n  this.showCalculatorDescription(!this.showCalculatorDescription());\r\n};\r\n\r\nCalculatorRN.prototype.toggleBars = function(index) {\r\n  this.activeBar(index);\r\n};\r\n\r\nCalculatorRN.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nCalculatorRN.prototype.changeCalculatorType = function(type) {\r\n  ko.postbox.publish('authorizationType', type);\r\n};\r\n\r\nmodule.exports = CalculatorRN;\r\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","module.exports = \"<div class=\\\"modal\\\" data-bind=\\\"useElement: true, css: {'is-active': activeModal}\\\">\\r\\n    <div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n    <div class=\\\"info-circle\\\">?</div>\\r\\n    <h2 data-bind=\\\"text: modalTitle\\\"></h2>\\r\\n    <p data-bind=\\\"text: modalText\\\">\\r\\n    </p>\\r\\n</div>\\r\\n\\r\\n<!-- ko if: showCalculatorType -->\\r\\n<div class=\\\"type-container\\\">\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <ul class=\\\"tabs\\\">\\r\\n                <li\\r\\n                    data-bind=\\\"click: function () { changeCalculatorType(1); }, css: { current: calculatorType() === 1 }\\\">\\r\\n                    <a href=\\\"\\\">Regnskapsfører</a>\\r\\n                </li>\\r\\n                <li\\r\\n                    data-bind=\\\"click: function () { changeCalculatorType(2); }, css: { current: calculatorType() === 2 }\\\">\\r\\n                    <a href=\\\"\\\">Revisor</a>\\r\\n                </li>\\r\\n            </ul>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n\\r\\n<div class=\\\"calculator-container\\\">\\r\\n    <!-- ko if: calculatorInfoText -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-10 small-12 calculator-info-container\\\">\\r\\n            <div class=\\\"message\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">\\r\\n                        <span>i</span>\\r\\n                    </div>\\r\\n                </div>\\r\\n                <div class=\\\"message-text\\\" data-bind=\\\"text: calculatorInfoText\\\">\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"splash-screen-container\\\">\\r\\n        <planned-hours params=\\\"data: $data\\\"></planned-hours>\\r\\n    </div>\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"title-boks-mobile\\\">\\r\\n            <h1>Min oppdatering</h1>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- ko if: mobileView -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12 small-12\\\">\\r\\n            <div class=\\\"calculator-mobile-period\\\">\\r\\n                <div class=\\\"row\\\">\\r\\n                    <a class=\\\"white calculator-download\\\" href=\\\"#\\\" alt=\\\"Skriv ut valgt periode til pdf\\\"\\r\\n                        data-bind=\\\"attr: { href: downloadFileUrl }\\\">Skriv\\r\\n                        ut valgt periode til pdf</a>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-period-navigation row\\\">\\r\\n                    <div class=\\\"columns small-2 small-offset-1 navigation-previous\\\">\\r\\n                        <a href=\\\"#\\\" class=\\\"btn btn-arrow-prev\\\" data-bind=\\\"click: previousYear\\\" data-action=\\\"prev\\\"\\r\\n                            data-label=\\\"calculator_period\\\">\\r\\n                            <span class=\\\"icon-arrow-full\\\"></span>\\r\\n                        </a>\\r\\n                    </div>\\r\\n                    <div class=\\\"columns small-6 navigation-title\\\">\\r\\n                        <h3\\r\\n                            data-bind=\\\"text: window.language.thisPeriod, visible: currentEndYear() >= new Date().getFullYear()\\\">\\r\\n                            Denne perioden</h3>\\r\\n                        <h3\\r\\n                            data-bind=\\\"text: window.language.earlierPeriod, visible: !(currentEndYear() >= new Date().getFullYear())\\\">\\r\\n                            Tidligere periode</h3>\\r\\n                    </div>\\r\\n                    <div class=\\\"columns small-2 navigation-next\\\">\\r\\n                        <a href=\\\"#\\\" class=\\\"btn btn-arrow-next\\\" data-bind=\\\"click: nextYear\\\" data-action=\\\"next\\\"\\r\\n                            data-label=\\\"calculator_period\\\">\\r\\n                            <span class=\\\"icon-arrow-full\\\"></span>\\r\\n                        </a>\\r\\n                    </div>\\r\\n                </div>\\r\\n\\r\\n                <div class=\\\"calculator-period-years row\\\">\\r\\n                    <calculator-years\\r\\n                        params=\\\"parent: $data, excludeTimeunits: false, showFuture: true, showDocumentationDate: true, authorizationDate: authorizationDate, showAuthorizationDate: showAuthorizationDate, mobileView: mobileView\\\"></calculator-years>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"calculator-overview grid-container\\\">\\r\\n        <!-- ko if:  currentEndYear() === 0 || currentEndYear() >= new Date().getFullYear() -->\\r\\n        <div class=\\\"grid-status\\\">\\r\\n            <div class=\\\"calculator-titleboks-container\\\">\\r\\n                <div class=\\\"title-boks grid-header\\\">\\r\\n                    <h1>Min oppdatering</h1>\\r\\n                </div>\\r\\n                <timestatus params=\\\"\\r\\n                    dropdownText: data.timestatus.dropdownText, \\r\\n                    title: data.timestatus.title, \\r\\n                    texts: texts, \\r\\n                    hoursTotal: data.timestatus.hoursTotal, \\r\\n                    hoursCompleted: data.timestatus.hoursCompleted, \\r\\n                    description: descriptionCourseStudyStatus(),\\r\\n                    backgroundColor: data.timestatus.backgroundColor\\r\\n                    \\\"></timestatus>\\r\\n            </div>\\r\\n        </div>\\r\\n\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: currentEndYear() != 0 && !(currentEndYear() >= new Date().getFullYear()) -->\\r\\n        <div class=\\\"grid-status calculator-info-container\\\">\\r\\n            <!-- ko if: calculatorPreviousYearInfoText-->\\r\\n            <div class=\\\"message warning\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">\\r\\n                        <span>i</span>\\r\\n                    </div>\\r\\n                </div>\\r\\n                <div class=\\\"message-text\\\" data-bind=\\\"text: calculatorPreviousYearInfoText\\\">\\r\\n                </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n        <!-- /ko -->\\r\\n        <div class=\\\"calculator-period-container grid-period\\\">\\r\\n            <!-- ko ifnot: mobileView -->\\r\\n            <div class=\\\"row\\\">\\r\\n                <div class=\\\"columns large-8 calculator-period-navigation\\\">\\r\\n                    <div class=\\\"columns large-2 navigation-previous\\\" data-bind=\\\"click: previousYear\\\" data-action=\\\"prev\\\"\\r\\n                        data-label=\\\"calculator_period_mobile\\\">\\r\\n                        <a href=\\\"#\\\" class=\\\"btn btn-arrow-prev\\\">\\r\\n                            <span class=\\\"icon-arrow-full\\\"></span>\\r\\n                        </a>\\r\\n                        <span class=\\\"navigation-prev-label\\\">Forrige</span>\\r\\n                    </div>\\r\\n                    <div class=\\\"columns large-6 navigation-title\\\">\\r\\n                        <h2 data-bind=\\\"text: currentStartYear() + ' - ' + currentEndYear()\\\">\\r\\n                        </h2>\\r\\n                    </div>\\r\\n                    <div class=\\\"columns large-2 navigation-next\\\" data-bind=\\\"click: nextYear\\\" data-action=\\\"next\\\"\\r\\n                        data-label=\\\"calculator_period_mobile\\\">\\r\\n                        <span class=\\\"navigation-next-label\\\">Neste</span>\\r\\n                        <a href=\\\"#\\\" class=\\\"btn btn-arrow-next\\\">\\r\\n                            <span class=\\\"icon-arrow-full\\\"></span>\\r\\n                        </a>\\r\\n                    </div>\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"calculator-period-years row\\\">\\r\\n                <calculator-years params=\\\"\\r\\n                    parent: $data, \\r\\n                    excludeTimeunits: false, \\r\\n                    showFuture: true, \\r\\n                    showDocumentationDate: true, \\r\\n                    authorizationDate: authorizationDate, \\r\\n                    showAuthorizationDate: showAuthorizationDate,\\r\\n                    downloadFileUrl: downloadFileUrl\\\">\\r\\n                </calculator-years>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- ko if:  currentEndYear() === 0 || currentEndYear() >= new Date().getFullYear() -->\\r\\n    <div class=\\\"calculator-overview grid-progress-container\\\">\\r\\n        <div class=\\\"grid-progress\\\">\\r\\n            <oppdateringskalkulator params=\\\"api: API\\\"></oppdateringskalkulator>\\r\\n        </div>\\r\\n        <div class=\\\"grid-course\\\">\\r\\n            <manglerkurs params=\\\" \\r\\n            title: data.manglerKurs.title,\\r\\n            description: data.manglerKurs.description,\\r\\n            forwardLink: data.manglerKurs.forwardLink,\\r\\n            forwardLinkText: data.manglerKurs.forwardLinkText\\\"></manglerkurs>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"calculator-details\\\">\\r\\n        <div class=\\\"row\\\">\\r\\n            <div class=\\\"calculator-details-labels large-12 columns\\\">\\r\\n                <div class=\\\"calculator-detail-box box-large\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title\\\">Timekategori</h4>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-box box-xlarge\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title\\\">Timeoversikt</h4>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-box box-medium\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title text-center\\\">Utført</h4>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-box box-small\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title hide-for-medium-up\\\">Anbefalinger</h4>\\r\\n                    <h4 class=\\\"calculator-detail-title hide-for-small-only\\\">Anbefalte kurs og historikk</h4>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n\\r\\n        <!-- ko foreach: categories -->\\r\\n        <div class=\\\"calculator-detail-container row \\\"\\r\\n            data-bind=\\\"component: { name:'calculator-bar', params: {data: $data, parent: $parent, 'mobileView': $parent.mobileView, isRNFriProduct: $parent.isRNFriProduct, order: $index }}, css: {'has-missing-hours': $data.ShowMissingHoursError}\\\">\\r\\n        </div>\\r\\n        <!-- /ko -->\\r\\n        <div class=\\\"row\\\">\\r\\n            <div class=\\\"calculator-details-labels large-12 columns\\\">\\r\\n                <div class=\\\"calculator-detail-total-box box-large\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title\\\">Sum</h4>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-total-box box-xlarge\\\"></div>\\r\\n                <div class=\\\"calculator-detail-total-box box-medium\\\">\\r\\n                    <div class=\\\"box-medium-done\\\">\\r\\n                        <span class=\\\"calculator-detail-title title-large text-center\\\"\\r\\n                            data-bind=\\\"text: totalDoneHours\\\"></span>\\r\\n                        <span class=\\\"calculator-detail-title title-large\\\">Av</span>\\r\\n                    </div>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-total-box box-small box-status\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title title-large text-center\\\" data-bind=\\\"text: totalRequiredHours\\\">\\r\\n                    </h4>\\r\\n                </div>\\r\\n                <div class=\\\"calculator-detail-total-box box-small\\\">\\r\\n                    <h4 class=\\\"calculator-detail-title\\\">Timer</h4>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"buttons-container spaced row\\\">\\r\\n        <div class=\\\"columns large-4 text-left\\\">\\r\\n            <a href=\\\"#\\\" class=\\\"white-link\\\"\\r\\n                data-bind=\\\"attr: {href: params.links.readMoreLink}, text: params.texts.readMoreLinkText\\\"></a>\\r\\n        </div>\\r\\n        <div class=\\\"columns large-8 text-right\\\">\\r\\n            <a href=\\\"#\\\" class=\\\"btn btn-calculator\\\" data-bind=\\\"click: toggleLeaveBlock\\\" data-action=\\\"toggle_add_leave\\\"\\r\\n                data-label=\\\"calculator_add_leave\\\">Legg til permisjon</a>\\r\\n            <a href=\\\"#\\\" class=\\\"btn btn-calculator\\\" data-bind=\\\"click: toggleAddCourse\\\" data-action=\\\"toggle_add_course\\\"\\r\\n                data-label=\\\"calculator_add_course\\\">Legg til kurs</a>\\r\\n            <a href=\\\"#\\\" class=\\\"btn btn-calculator primary\\\" data-bind=\\\"attr: {href: params.links.myCoursesLink}\\\">Mine\\r\\n                kurs</a>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"calculator-extended calculator-extended-course\\\"\\r\\n    data-bind=\\\"component: { name: 'calculator-extended-course', params: { api: API, absenceLink: params.absenceLink, parent: $data } }\\\">\\r\\n</div>\\r\\n<div class=\\\"calculator-extended calculator-extended-leave\\\"\\r\\n    data-bind=\\\"component: { name: 'calculator-extended-leave', params: { api: API, absenceLink: params.absenceLink, parent: $data } }\\\">\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization'),\r\n  Cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  filter = require('lodash/filter');\r\nrequire('knockout-postbox');\r\n\r\nfunction Oppdateringskalkulator(params) {\r\n  var self = this;\r\n  this.API = params.api;\r\n  this.title = 'Progresjon etterutdanning';\r\n  this.elements = ko.observableArray([]);\r\n  this.extendedText = params.extendedText;\r\n  this.isInSimpleCalculator = params.isInSimpleCalculator;\r\n  this.oldPeriod = {};\r\n  this.periodCounter = 0;\r\n  this.isLoading = ko.observable(true);\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  this.calculatorType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  this.calculatorType.subscribe(function() {\r\n    self.getPeriodTotal();\r\n    this.changeInAuthorizationType = true;\r\n  });\r\n  this.currentYear = ko.observable(0).subscribeTo('currentYearChange', true);\r\n  this.startYear = ko.observable(0).subscribeTo('currentStartYear', true);\r\n  this.endYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n  this.dataSet = ko.observableArray([]);\r\n  this.MAX_HOURS = ko.observable(80).syncWith('hoursRequirement');\r\n  this.MAX_STRUCTURED_HOURS = ko\r\n    .observable(60)\r\n    .syncWith('hoursRequirementStructured');\r\n  this.MAX_UNSTRUCTURED_HOURS = ko.observable(0);\r\n  this.structuredHoursDone = ko\r\n    .observable(0)\r\n    .syncWith('totalStructuredHoursDone', true);\r\n  this.unstructuredHoursDone = ko\r\n    .observable(0)\r\n    .syncWith('totalUnstructuredHoursDone', true);\r\n  this.maxUnstructuredHoursDone = ko.computed(function() {\r\n    return Math.min(\r\n      this.MAX_UNSTRUCTURED_HOURS(),\r\n      this.unstructuredHoursDone()\r\n    );\r\n  }, this);\r\n\r\n  this.hoursPlanned = ko.observable(0).syncWith('totalHoursPlanned', true);\r\n  this.hoursShopping = ko.observable(0).syncWith('totalHoursShopping', true);\r\n  this.categories = ko.observableArray([]).syncWith('categories', true);\r\n  this.hoursMissing = ko.computed(function() {\r\n    var val = 0,\r\n      shopping = 0;\r\n    if (this.categories().length > 0) {\r\n      for (var i = 0; i < this.categories().length; i++) {\r\n        shopping += Math.max(0, this.categories()[i].Shopping());\r\n      }\r\n    } else {\r\n      shopping = this.hoursShopping();\r\n    }\r\n\r\n    val =\r\n      this.MAX_HOURS() -\r\n      this.structuredHoursDone() -\r\n      this.maxUnstructuredHoursDone() -\r\n      this.hoursPlanned() -\r\n      shopping;\r\n\r\n    if (val < 0) {\r\n      val = 0;\r\n    }\r\n\r\n    return val;\r\n  }, this);\r\n  this.changeInPeriod = ko.computed(function() {\r\n    var val =\r\n      this.MAX_HOURS() -\r\n      this.MAX_STRUCTURED_HOURS() -\r\n      this.MAX_UNSTRUCTURED_HOURS() -\r\n      this.structuredHoursDone() -\r\n      this.unstructuredHoursDone() -\r\n      this.maxUnstructuredHoursDone() -\r\n      this.hoursPlanned() -\r\n      this.hoursShopping() -\r\n      this.hoursMissing();\r\n    return val;\r\n  }, this);\r\n\r\n  this.getPeriodTotal();\r\n  this.currentYear.subscribe(function() {\r\n    this.getPeriodTotal();\r\n  }, this);\r\n\r\n  this.startProgressBar();\r\n  this.changeInPeriod.subscribe(function() {\r\n    this.startProgressBar();\r\n  }, this);\r\n\r\n  // We have to use endYear as it is updated after startYear.\r\n  this.endYear.subscribe(function() {\r\n    this.updateShopping();\r\n  }, this);\r\n\r\n  ko.postbox.subscribe(\r\n    'changeInPeriod',\r\n    function() {\r\n      this.startProgressBar();\r\n    },\r\n    this,\r\n    true\r\n  );\r\n\r\n  ko.postbox.subscribe(\r\n    'changeInAbsence',\r\n    function() {\r\n      this.getPeriodTotal();\r\n    },\r\n    this,\r\n    true\r\n  );\r\n  ko.postbox.subscribe(\r\n    'shoppingCartUpdated',\r\n    function(newCart) {\r\n      var courses = newCart.courses;\r\n      if (courses.length > 0) {\r\n        this.setHoursShopping(courses);\r\n      } else {\r\n        this.hoursShopping(0);\r\n        this.categories().forEach(function(category) {\r\n          category.Shopping(0);\r\n        });\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nOppdateringskalkulator.prototype.updateShopping = function() {\r\n  var courses = Cart.getCart().courses;\r\n  if (courses.length > 0) {\r\n    this.setHoursShopping(courses);\r\n  } else {\r\n    this.hoursShopping(0);\r\n    this.categories().forEach(function(category) {\r\n      category.Shopping(0);\r\n    });\r\n  }\r\n};\r\n\r\nOppdateringskalkulator.prototype.setHoursShopping = function(courses) {\r\n  var hours = 0;\r\n  this.categories().forEach(function(category) {\r\n    category.Shopping(0);\r\n  });\r\n  courses.forEach(\r\n    function(course) {\r\n      var year;\r\n      // Check if date is defined. If it is not, we'll just set it to the current year.\r\n      if (course.Date === undefined || course.Date === null) {\r\n        year = new Date().getFullYear();\r\n      } else {\r\n        year = new Date(course.Date).getFullYear();\r\n      }\r\n      // We only want to update this component if the course year is equal to this year.\r\n      if (year >= this.startYear() && year <= this.endYear()) {\r\n        var filteredCredits = filter(course.AuthorizationCredits, {\r\n          AuthorizationType: this.calculatorType()\r\n        });\r\n        filteredCredits.forEach(\r\n          function(credit) {\r\n            hours += parseFloat(credit.Hours, 10);\r\n            var category = ko.utils.arrayFirst(this.categories(), function(\r\n              item\r\n            ) {\r\n              return item.CategoryKey == credit.CategoryKey;\r\n            });\r\n            if (category && category != null) {\r\n              category.Shopping(category.Shopping() + credit.Hours);\r\n            }\r\n          }.bind(this)\r\n        );\r\n      }\r\n    }.bind(this)\r\n  );\r\n\r\n  this.hoursShopping(hours);\r\n};\r\n\r\nOppdateringskalkulator.prototype.getPeriodTotal = function() {\r\n  var url =\r\n    this.API.periodTotal +\r\n    '?authorizationType=' +\r\n    encodeURIComponent(this.calculatorType());\r\n\r\n  if (this.currentYear() !== 0) {\r\n    url = url + '&startYear=' + encodeURIComponent(this.currentYear());\r\n  }\r\n\r\n  ko.postbox.publish('periodYearsLoading', true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      var maxUnstructuredHoursDone =\r\n        response.Requirement - response.RequirementStructured;\r\n      this.isLoading(false);\r\n      this.structuredHoursDone(response.TotalStructuredHoursDone);\r\n      this.unstructuredHoursDone(response.TotalUnstructuredHoursDone);\r\n      this.hoursPlanned(response.TotalHoursPlanned);\r\n      this.MAX_HOURS(response.Requirement);\r\n      this.MAX_STRUCTURED_HOURS(response.RequirementStructured);\r\n      this.MAX_UNSTRUCTURED_HOURS(maxUnstructuredHoursDone);\r\n      ko.postbox.publish('requirementHoursFromMainCategories', response.RequirementHoursMainCategories);\r\n      ko.postbox.publish('hoursFromMainCategories', response.TotalHoursFromMainCategories);\r\n      ko.postbox.publish('requirementHoursPerMainCategoryCovered', response.RequirementPerMainCategoryCovered);\r\n      ko.postbox.publish('requirementHoursFromMainCategoriesCovered', response.RequirementMainCategoriesCovered);\r\n      ko.postbox.publish('maxRequiredHours', response.Requirement);\r\n      \r\n      if (response.YearTotals.length > 0) {\r\n        ko.postbox.publish('currentStartYear', response.YearTotals[0].Year);\r\n        ko.postbox.publish(\r\n          'currentEndYear',\r\n          response.YearTotals[response.YearTotals.length - 1].Year\r\n        );\r\n        ko.postbox.publish(\r\n          'totalHoursDoneWithUnstructured',\r\n          response.TotalHoursDone\r\n        );\r\n        // See if the period has changed and in that case report the change.\r\n        if (JSON.stringify(response) !== JSON.stringify(this.oldPeriod)) {\r\n          ko.postbox.publish('changeInPeriod', ++this.periodCounter);\r\n        }\r\n        // Subscribers: calculator-years\r\n        ko.postbox.publish('periodYears', response.YearTotals);\r\n      }\r\n      ko.postbox.publish('periodYearsLoading', false);\r\n      this.oldPeriod = response;\r\n    }.bind(this),\r\n    function(response) {\r\n      this.isLoading(false);\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator-donut.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nOppdateringskalkulator.prototype.startProgressBar = function() {\r\n  var self = this;\r\n  this.dataSet(this.createDataSet());\r\n  this.elements = ko.computed(function() {\r\n    return self\r\n      .dataSet()\r\n      .map(function(item) {\r\n        if (item.hours === 0 && item.typeNumber === 4) return null;\r\n\r\n        var percent = (item.hours / self.MAX_HOURS()) * 100;\r\n        var color = item.color;\r\n\r\n        return {\r\n          title: item.title,\r\n          color: color,\r\n          style: {\r\n            backgroundColor: color,\r\n            width: percent + '%'\r\n          },\r\n          hours: item.hours,\r\n          type: item.typeNumber\r\n        };\r\n      })\r\n      .filter(Boolean);\r\n  });\r\n};\r\n\r\nOppdateringskalkulator.prototype.createDataSet = function() {\r\n  var data = null;\r\n  data = [\r\n    {\r\n      title: 'Gjennomførte kurstimer',\r\n      hours: this.structuredHoursDone(),\r\n      type: 'completed',\r\n      color: '#32CBCB',\r\n      typeNumber: 0\r\n    },\r\n    {\r\n      title: 'Ikke-strukturerte timer',\r\n      hours: this.maxUnstructuredHoursDone(),\r\n      type: 'doneUnstructured',\r\n      color: '#0098CB',\r\n      typeNumber: 4\r\n    },\r\n    {\r\n      title: 'Påmeldte timer',\r\n      hours: this.hoursPlanned(),\r\n      type: 'registered',\r\n      color: '#FF6532',\r\n      typeNumber: 1\r\n    },\r\n    {\r\n      title: 'Timer i handlekurven',\r\n      hours: this.hoursShopping(),\r\n      type: 'inShoppingCart',\r\n      color: '#FECB2F',\r\n      typeNumber: 2\r\n    },\r\n    {\r\n      title: 'Manglende timer',\r\n      hours: this.hoursMissing(),\r\n      type: 'missing',\r\n      color: '#CBCBCB',\r\n      typeNumber: 3\r\n    }\r\n  ];\r\n\r\n  return data;\r\n};\r\n\r\nmodule.exports = Oppdateringskalkulator;\r\n","module.exports = \"<!-- ko if: isLoading -->\\r\\n<div class=\\\"row\\\">\\r\\n  <div class=\\\"columns large-12 loader-height\\\">\\r\\n    <div class=\\\"loader-container\\\">\\r\\n      <div class=\\\"loader is-loading\\\"></div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n<!-- ko ifnot: isLoading -->\\r\\n<div class=\\\"infographic-wrapper\\\">\\r\\n  <div class=\\\"infographic-content\\\">\\r\\n    <h2 class=\\\"infographic-title\\\" data-bind=\\\"text: title\\\"></h2>\\r\\n    <!-- ko if: elements().length === 0 -->\\r\\n    <p>Ingenting å vise</p>\\r\\n    <!-- /ko -->\\r\\n    <div class=\\\"infographic-category-wrapper\\\" data-bind=\\\"foreach: elements\\\">\\r\\n      <div class=\\\"category-item\\\">\\r\\n        <!-- ko component: {name: 'calculator-timeunit', params: {type: type}} --><!-- /ko -->\\r\\n        <p class=\\\"category-row-text\\\"\\r\\n          data-bind=\\\"text: hours +'t ' + title, style: { fontSize: ($parent.elements().length <= 4 ? '16px' : '14px') }\\\">\\r\\n        </p>\\r\\n      </div>\\r\\n    </div>\\r\\n    <div class=\\\"horizontal-bar-chart-wrapper\\\">\\r\\n      <!-- ko foreach: elements -->\\r\\n      <!-- ko if: hours > 0 -->\\r\\n      <div class=\\\"item\\\" data-bind=\\\"style: style, attr: { title: title }\\\"></div>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n\"","var ko = require('knockout');\r\n\r\nvar ManglerKurs = function(params) {\r\n  var self = this;\r\n  self.title = params.title;\r\n  self.description = params.description;\r\n  self.forwardLink = params.forwardLink;\r\n  self.forwardLinkText = params.forwardLinkText;\r\n};\r\n\r\nmodule.exports = ManglerKurs;\r\n","module.exports = \"<!-- ko if: description -->\\r\\n<div class=\\\"course-wrapper\\\">\\r\\n  <div class=\\\"course-content\\\">\\r\\n    <h2 class=\\\"course-title\\\" data-bind=\\\"text: title\\\"></h2>\\r\\n    <p class=\\\"course-description\\\" data-bind=\\\"text: description\\\"></p>\\r\\n    <div class=\\\"course-link\\\">\\r\\n      <a data-bind=\\\"attr: { href: forwardLink}\\\" class=\\\"more-content-link\\\">\\r\\n        <span data-bind=\\\"text: forwardLinkText\\\"></span><span class=\\\"icon-arrow-full\\\"></span>\\r\\n      </a>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n<!-- /ko -->\"","var ko = require('knockout');\r\n\r\nvar Timestatus = function(params) {\r\n  var self = this;\r\n  self.title = params.title;\r\n  self.texts = params.texts;\r\n  self.hoursCompleted = ko\r\n    .observable(0)\r\n    .subscribeTo('totalHoursDoneWithUnstructured', true);\r\n  self.hoursTotal = ko.observable(80).subscribeTo('hoursRequirement', true);\r\n  self.currentStartYear = ko\r\n    .observable(0)\r\n    .subscribeTo('currentStartYear', true);\r\n  self.currentEndYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n  self.isExpanded = ko.observable(true);\r\n  self.description = ko.observable();\r\n  self.requirementHoursFromMainCategories = ko.observable(0)\r\n    .subscribeTo('requirementHoursFromMainCategories', true);\r\n  self.hoursFromMainCategories = ko.observable(0)\r\n    .subscribeTo('hoursFromMainCategories', true);\r\n  self.requirementHoursFromMainCategoriesCovered = ko.observable(false)\r\n    .subscribeTo('requirementHoursFromMainCategoriesCovered', true);\r\n  self.requirementHoursPerMainCategoryCovered = ko.observable(false)\r\n    .subscribeTo('requirementHoursPerMainCategoryCovered', true);\r\n  self.requirementHoursFromMainCategoriesText = ko.observable();\r\n  self.requirementHoursPerMainCategoryText = ko.observable();\r\n  self.color = ko.observable();\r\n  self.toggleExpanded = function() {\r\n    self.isExpanded(!this.isExpanded());\r\n  };\r\n  this.isLoading = ko.observable(true).subscribeTo('periodYearsLoading', true);\r\n\r\n  ko.postbox.subscribe(\r\n    'periodYearsLoading',\r\n    function(isLoading) {\r\n      if (!isLoading) this.categorizeProgress();\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nTimestatus.prototype.categorizeProgress = function() {\r\n  var userProgress = this.hoursCompleted(),\r\n    totalRequiredHours = this.hoursTotal(),\r\n    message = '',\r\n    color = '',\r\n    endYear = this.currentEndYear(),\r\n    daysInYear = 365,\r\n    regnskapsforer = totalRequiredHours === 80,\r\n    remainingDays = getRemainingDaysForCurrentYear(this.currentEndYear());\r\n  var startingPointsRegnskap = [70, 55, 35, 20];\r\n  var startingPointsRevisor = [105, 85, 60, 40];\r\n  function polynomialInterpolation(\r\n    userProgress,\r\n    totalRequiredHours,\r\n    startingPoint,\r\n    remainingDays,\r\n    degree\r\n  ) {\r\n    return (\r\n      startingPoint +\r\n      ((totalRequiredHours - startingPoint) / Math.pow(remainingDays, degree)) *\r\n        Math.pow(remainingDays - userProgress, degree)\r\n    );\r\n  }\r\n  function calculateY(userProgress, remainingDays, degree, index) {\r\n    var startingPoint = regnskapsforer\r\n      ? startingPointsRegnskap[index]\r\n      : startingPointsRevisor[index];\r\n\r\n    return polynomialInterpolation(\r\n      userProgress,\r\n      totalRequiredHours,\r\n      startingPoint,\r\n      remainingDays,\r\n      degree\r\n    );\r\n  }\r\n  function getRemainingDaysForCurrentYear(endYear) {\r\n    var currentDate = new Date();\r\n    var endDate = new Date(endYear, 11, 31);\r\n    var timeDiff = endDate.getTime() - currentDate.getTime();\r\n    var remainingDays = Math.ceil(timeDiff / (1000 * 3600 * 24));\r\n\r\n    return remainingDays;\r\n  }\r\n  var y_values = [\r\n    calculateY(userProgress, remainingDays, 2, 0),\r\n    calculateY(userProgress, remainingDays, 2, 1),\r\n    calculateY(userProgress, remainingDays, 3, 2),\r\n    calculateY(userProgress, remainingDays, 6, 3)\r\n  ];\r\n\r\n  if (userProgress >= totalRequiredHours + 20) {\r\n    message = this.texts.extraEffortStatusDescription;\r\n    color = '#02C065';\r\n  } else if (userProgress >= totalRequiredHours) {\r\n    message = this.texts.approvedStatusDescription;\r\n    color = '#02C065';\r\n  } else if (remainingDays > daysInYear) {\r\n    message = this.texts.deadlineStatusDescription;\r\n    color = '#FECB2F';\r\n  } else if (userProgress >= y_values[0]) {\r\n    message = this.texts.aheadStatusDescription;\r\n    color = '#FECB2F';\r\n  } else if (userProgress >= y_values[1]) {\r\n    message = this.texts.wellOnWayStatusDescription;\r\n    color = '#FECB2F';\r\n  } else if (userProgress >= y_values[2]) {\r\n    message = this.texts.missingStatusDescription;\r\n    color = '#FECB2F';\r\n  } else if (userProgress >= y_values[3]) {\r\n    message = this.texts.warningStatusDescription;\r\n    color = '#DF3232';\r\n  } else {\r\n    message = this.texts.criticalStatusDescription;\r\n    color = '#DF3232';\r\n  }\r\n\r\n  if (color === '#02C065' && !(this.requirementHoursFromMainCategoriesCovered() && this.requirementHoursPerMainCategoryCovered())) {\r\n    color = '#FECB2F';\r\n    message = this.texts.partiallyApprovedStatusDescription;\r\n  }\r\n\r\n  this.description(\r\n    message\r\n      .replace('{endYear}', endYear)\r\n      .replace('{totalRequiredHours}', totalRequiredHours)\r\n      .replace('{userProgress}', userProgress)\r\n      .replace('{remainingDays}', remainingDays)\r\n  );\r\n\r\n  this.color(color);\r\n\r\n  this.requirementHoursFromMainCategoriesText(\r\n    this.requirementHoursFromMainCategoriesCovered()\r\n      ? this.texts.requirementHoursFromMainCategoriesCoveredText\r\n      : this.texts.requirementHoursFromMainCategoriesNotCoveredText.replace(\"{hours}\", this.hoursFromMainCategories()).replace(\"{requirement}\", this.requirementHoursFromMainCategories()));\r\n\r\n  this.requirementHoursPerMainCategoryText(\r\n    this.requirementHoursPerMainCategoryCovered()\r\n      ? this.texts.requirementHoursPerMainCategoryCoveredText\r\n      : this.texts.requirementHoursPerMainCategoryNotCoveredText);\r\n};\r\n\r\nmodule.exports = Timestatus;\r\n","module.exports = \"<div class=\\\"timestatus-wrapper\\\">\\r\\n    <!-- ko if: isLoading -->\\r\\n    <div class=\\\"loader-container\\\">\\r\\n        <div class=\\\"loader is-loading\\\"></div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko ifnot: isLoading -->\\r\\n    <div class=\\\"timestatus-header-container\\\" data-bind=\\\"style: { backgroundColor: color }\\\">\\r\\n        <h3 class=\\\"timestatus-title\\\" data-bind=\\\"text: title\\\"></h3>\\r\\n        <div class=\\\"timestatus-label\\\">\\r\\n            <span data-bind=\\\"text: hoursCompleted\\\"></span>\\r\\n            <span>/</span>\\r\\n            <span data-bind=\\\"text: hoursTotal() + 't'\\\"></span>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"timestatus-content\\\">\\r\\n        <div class=\\\"timestatus-description\\\">\\r\\n            <p data-bind=\\\"html: description\\\"></p>\\r\\n        </div>\\r\\n        <!-- Hidden in version 1 \\r\\n            <div class=\\\"timestatus-more\\\">\\r\\n                <a data-bind=\\\"text: dropdownText, click: toggleExpanded\\\" style=\\\"text-decoration: underline;\\\"></a>\\r\\n                <p data-bind=\\\"style: { transform: isExpanded ? 'rotate(0.75turn)' : ''}\\\"><</p>\\r\\n                </div>\\r\\n            <div data-bind=\\\"visible: isExpanded\\\">\\r\\n                 ko foreach: texts\\r\\n                    <p class=\\\"item\\\" data-bind=\\\"text: $data\\\"></p>\\r\\n                /ko \\r\\n            </div>-->\\r\\n            <div class=\\\"timestatus-content-requirement-hours\\\">\\r\\n                <span data-bind=\\\"visible: requirementHoursFromMainCategoriesCovered()\\\">\\r\\n                    <i class=\\\"ph ph-check\\\" style=\\\"font-size: 24px; color: #02C065;\\\"></i>\\r\\n                </span>\\r\\n                <span data-bind=\\\"visible: !requirementHoursFromMainCategoriesCovered()\\\">\\r\\n                    <i class=\\\"ph ph-x\\\" style=\\\"font-size: 24px; color: #DF3232;\\\"></i>\\r\\n                </span><div class=\\\"mt-2\\\" data-bind=\\\"html: requirementHoursFromMainCategoriesText\\\"></div>\\r\\n            </div>\\r\\n            <div class=\\\"timestatus-content-requirement-hours\\\">\\r\\n                <span data-bind=\\\"visible: requirementHoursPerMainCategoryCovered()\\\">\\r\\n                    <i class=\\\"ph ph-check\\\" style=\\\"font-size: 24px; color: #02C065;\\\"></i>\\r\\n                </span><span data-bind=\\\"visible: !requirementHoursPerMainCategoryCovered()\\\">\\r\\n                    <i class=\\\"ph ph-x\\\" style=\\\"font-size: 24px; color: #DF3232;\\\"></i>\\r\\n                </span><div class=\\\"mt-2\\\" style=\\\"margin-top: 2px;\\\" data-bind=\\\"html: requirementHoursPerMainCategoryText\\\"></div>\\r\\n            </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n</div>\"","var ko = require('knockout'),\r\n  filter = require('lodash/filter'),\r\n  Cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  HOURS_TYPE = require('_js/constants/hours'),\r\n  CalculatorTracking = require('../calculator-tracking'),\r\n  CalculatorUtil = require('./calculator-util'),\r\n  decodeHtml = require('_utils/text');\r\nrequire('knockout-postbox');\r\n\r\nfunction CalculatorBar(params) {\r\n  var self = this;\r\n  this.title = params.data.Name;\r\n  this.showMissingHoursError = params.data.ShowMissingHoursError;\r\n  this.AuthorizationType = params.data.AuthorizationType;\r\n  this.parent = params.parent;\r\n  this.API = params.parent.API;\r\n  this.texts = params.parent.params.texts;\r\n  this.links = params.parent.links;\r\n  this.order = params.order();\r\n  this.isRNFriProduct = params.isRNFriProduct;\r\n  this.mobileSize = ko.observable('large').subscribeTo('resize', true);\r\n  this.mobileView = ko.computed(function() {\r\n    if (self.mobileSize() === 'medium') {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  });\r\n  this.CategoryKey = params.data.CategoryKey;\r\n  this.isExpanded = ko.observable(false);\r\n  this.hoursToAdd = ko.observable(0);\r\n  this.firstEmptyIndex = -1;\r\n  this.firstSubEmptyIndex = -1;\r\n  this.firstOtherEmptyIndex = -1;\r\n  this.startYear = ko.observable(0).subscribeTo('currentStartYear', true);\r\n  this.endYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n  this.changeInPeriod = ko.observable(0).subscribeTo('changeInPeriod', true);\r\n\r\n  this.newYear = ko.observable(0).subscribeTo('currentYearChange', true);\r\n  this.periodClicked = false;\r\n  // Will be triggered everytime the user has clicked the arrow buttons (change period).\r\n  this.newYear.subscribe(function() {\r\n    self.periodClicked = true;\r\n  });\r\n\r\n  this.BLOCKS_OTHER_AMOUNT = 0;\r\n\r\n  this.updateCounterLock = ko.observable(false);\r\n  this.changeInPeriodLock = ko.observable(false);\r\n  this.updateCounterLock.subscribe(function() {\r\n    if (self.updateCounterLock() && self.changeInPeriodLock()) {\r\n      self.updateCounterLock(false);\r\n      self.changeInPeriodLock(false);\r\n      self.periodClicked = false;\r\n      updateData();\r\n      updateShopping();\r\n      self.updateAllHours();\r\n    }\r\n  });\r\n  this.changeInPeriodLock.subscribe(function() {\r\n    if (self.updateCounterLock() && self.changeInPeriodLock()) {\r\n      self.updateCounterLock(false);\r\n      self.changeInPeriodLock(false);\r\n      self.periodClicked = false;\r\n      updateData();\r\n      updateShopping();\r\n      self.updateAllHours();\r\n    }\r\n  });\r\n\r\n  this.currentYear = new Date().getFullYear();\r\n  this.isSpecialBar = false;\r\n\r\n  // Just reassigning values. These params values are already observables.\r\n  this.totalHoursDone = ko.observable(params.data.TotalHoursDone());\r\n\r\n  this.doneHoursFromCurrentCategory = ko.observable(\r\n    params.data.DoneStructuredHoursFromCurrentCategory()\r\n  );\r\n  this.doneUnstructuredHoursFromCurrentCategory = ko.observable(\r\n    params.data.DoneUnstructuredHoursFromCurrentCategory()\r\n  );\r\n  this.plannedHoursFromCurrentCategory = ko.observable(\r\n    params.data.PlannedHoursFromCurrentCategory()\r\n  );\r\n  this.timeMissingClass = ko.computed(function() {\r\n    var isExpanded = self.isExpanded(),\r\n      timeClass = '';\r\n\r\n    if (isExpanded) {\r\n      timeClass = 'notification-black';\r\n    } else {\r\n      timeClass = 'notification-white';\r\n    }\r\n\r\n    return timeClass;\r\n  });\r\n\r\n  this.blocks = ko.observableArray([]);\r\n  // Triggered whenever we fetch categories from API and set new values in the observable.\r\n  params.data.UpdateCounter.subscribe(function() {\r\n    if (self.periodClicked) {\r\n      self.updateCounterLock(true);\r\n    } else {\r\n      updateData();\r\n      updateShopping();\r\n      self.updateAllHours();\r\n    }\r\n  });\r\n\r\n  function updateData() {\r\n    self.localShoppingHours(0);\r\n    self.doneHoursFromCurrentCategory(\r\n      params.data.DoneStructuredHoursFromCurrentCategory()\r\n    );\r\n    self.doneUnstructuredHoursFromCurrentCategory(\r\n      params.data.DoneUnstructuredHoursFromCurrentCategory()\r\n    );\r\n    self.plannedHoursFromCurrentCategory(\r\n      params.data.PlannedHoursFromCurrentCategory()\r\n    );\r\n\r\n    self.totalHoursDone(params.data.TotalHoursDone());\r\n  }\r\n\r\n  function updateShopping() {\r\n    var courses = Cart.getCart().courses;\r\n    if (courses.length > 0) {\r\n      self.setHoursShopping(courses);\r\n    }\r\n  }\r\n\r\n  this.parent.activeBar.subscribe(function(newIndex) {\r\n    if (self.order === newIndex) {\r\n      self.isExpanded(true);\r\n    } else {\r\n      self.isExpanded(false);\r\n    }\r\n  });\r\n\r\n  // We have to use changeInPeriod as it is updated after startYear.\r\n  this.changeInPeriod.subscribe(function() {\r\n    if (self.periodClicked) {\r\n      self.changeInPeriodLock(true);\r\n    } else {\r\n      updateData();\r\n      updateShopping();\r\n      self.updateAllHours();\r\n    }\r\n  }, this);\r\n\r\n  this.localShoppingHours = params.data.Shopping;\r\n\r\n  this.updateAllHours();\r\n\r\n  ko.postbox.subscribe(\r\n    'shoppingCartUpdated',\r\n    function(newCart) {\r\n      var courses = newCart.courses;\r\n      self.setHoursShopping(courses);\r\n      self.updateAllHours();\r\n    },\r\n    this,\r\n    true\r\n  );\r\n\r\n  ko.postbox.subscribe('externalCourseAdded', function() {}, this, true);\r\n\r\n  this.animateHours = function(elem, index) {\r\n    if (elem.nodeType === 1) {\r\n      window.setTimeout(function() {\r\n        $(elem).addClass('animate-in');\r\n      }, 50 * index);\r\n    }\r\n  };\r\n}\r\n\r\nCalculatorBar.prototype.updateAllHours = function() {\r\n  // 1: Get the calculated hours we should use for the visual representation.\r\n  var calculatedHours = this.calculateHours();\r\n  // 2: Update the main bar.\r\n  this.blocks(this.addHoursToBlock(calculatedHours.main));\r\n};\r\n\r\nCalculatorBar.prototype.calculateHours = function() {\r\n  return CalculatorUtil.calculateHours({\r\n    CategoryKey: this.CategoryKey,\r\n\r\n    doneHoursFromCurrentCategory: this.doneHoursFromCurrentCategory(),\r\n    doneUnstructuredHoursFromCurrentCategory: this.doneUnstructuredHoursFromCurrentCategory(),\r\n    plannedHoursFromCurrentCategory: this.plannedHoursFromCurrentCategory(),\r\n    localShoppingHours: this.localShoppingHours()\r\n  });\r\n};\r\n\r\nCalculatorBar.prototype.addHoursToBlock = function(hourSettings) {\r\n  var tmpBlocks = [];\r\n  tmpBlocks = tmpBlocks.concat({\r\n    classType: 'timeunit-' + HOURS_TYPE.DONE,\r\n    unitType: HOURS_TYPE.DONE,\r\n    hours: hourSettings.doneHours,\r\n    text: 't kurstimer'\r\n  });\r\n  tmpBlocks = tmpBlocks.concat({\r\n    classType: 'timeunit-' + HOURS_TYPE.DONEUNSTRUCTURED,\r\n    unitType: HOURS_TYPE.DONEUNSTRUCTURED,\r\n    hours: hourSettings.doneUnstructuredHours,\r\n    text: 't ikke-strukturerte'\r\n  });\r\n  tmpBlocks = tmpBlocks.concat({\r\n    classType: 'timeunit-' + HOURS_TYPE.PLANNED,\r\n    unitType: HOURS_TYPE.PLANNED,\r\n    hours: hourSettings.plannedHours,\r\n    text: 't påmeldt'\r\n  });\r\n  tmpBlocks = tmpBlocks.concat({\r\n    classType: 'timeunit-' + HOURS_TYPE.SHOPPING,\r\n    unitType: HOURS_TYPE.SHOPPING,\r\n    hours: hourSettings.shoppingHours,\r\n    text: 't i handlekurv'\r\n  });\r\n  return tmpBlocks;\r\n};\r\n\r\nCalculatorBar.prototype.setHoursShopping = function(courses) {\r\n  var hours = 0;\r\n  courses.forEach(\r\n    function(course) {\r\n      var year;\r\n      // Check if date is defined. If it is not, we'll just set it to the current year.\r\n      if (course.Date === undefined || course.Date === null) {\r\n        year = new Date().getFullYear();\r\n      } else {\r\n        year = new Date(course.Date).getFullYear();\r\n      }\r\n      // We only want to update this component if the course year is equal to this year.\r\n      if (year >= this.startYear() && year <= this.endYear()) {\r\n        var filteredCredits = filter(course.AuthorizationCredits, {\r\n          AuthorizationType: this.AuthorizationType\r\n        });\r\n        filteredCredits.forEach(\r\n          function(credit) {\r\n            if (credit.CategoryKey === this.CategoryKey) {\r\n              hours += parseFloat(credit.Hours, 10);\r\n            }\r\n          }.bind(this)\r\n        );\r\n      }\r\n    }.bind(this)\r\n  );\r\n\r\n  this.localShoppingHours(hours);\r\n};\r\n\r\nCalculatorBar.prototype.expand = function() {\r\n  var self = this;\r\n  // If we have the expanded class, we want to close the bar.\r\n  if (this.expandable.hasClass('expanded')) {\r\n    this.$element.removeClass('expanded');\r\n    this.expandable.slideUp(\r\n      250,\r\n      'easeOutQuad',\r\n      function() {\r\n        this.isExpanded(false);\r\n        this.expandable.removeClass('expanded');\r\n        this.siblings.removeClass('faded');\r\n        this.$calculator.removeClass('faded');\r\n      }.bind(this)\r\n    );\r\n    CalculatorTracking.trackCategoryExpanded(this.title, 'closeCategory');\r\n  }\r\n  // If not, we should expand it.\r\n  else {\r\n    this.isExpanded(true);\r\n    var $expanded = this.siblings.find('> .expandable');\r\n    var $calculatorDetail = this.siblings.find('> .calculator-detail');\r\n\r\n    this.$parent.removeClass('faded');\r\n\r\n    $expanded.removeClass('expanded');\r\n    $expanded.slideUp(250, 'easeOutQuad', function() {\r\n      $calculatorDetail.removeClass('expanded');\r\n    });\r\n\r\n    self.parent.toggleBars(self.order);\r\n    self.siblings.addClass('faded');\r\n    self.expandable.addClass('expanded');\r\n    self.$calculator.addClass('faded');\r\n\r\n    window.setTimeout(function() {\r\n      self.$element.addClass('expanded');\r\n      self.expandable.slideDown(250, 'easeOutQuad', function() {\r\n        var scrollTarget = self.$element.offset().top - 200;\r\n        self.$htmlBody.animate({ scrollTop: scrollTarget + 'px' });\r\n      });\r\n    }, 10);\r\n\r\n    CalculatorTracking.trackCategoryExpanded(this.title, 'expandCategory');\r\n  }\r\n};\r\n\r\nCalculatorBar.prototype.init = function(element) {\r\n  this.$htmlBody = $('html, body');\r\n  this.$element = $(element);\r\n  this.$parent = this.$element.parent();\r\n  this.expandable = this.$parent.find('> .expandable');\r\n  this.siblings = this.$parent.siblings();\r\n  this.$calculator = $('.calculator-container:first');\r\n};\r\n\r\nmodule.exports = CalculatorBar;\r\n","var CalculatorUtil = {};\r\n\r\nCalculatorUtil.calculateHours = function(params) {\r\n  var doneHours = params.doneHoursFromCurrentCategory,\r\n    doneUnstructuredHours = params.doneUnstructuredHoursFromCurrentCategory,\r\n    plannedHours = params.plannedHoursFromCurrentCategory,\r\n    localShoppingHours = params.localShoppingHours;\r\n\r\n  return {\r\n    main: {\r\n      doneHours: doneHours,\r\n      doneUnstructuredHours: doneUnstructuredHours,\r\n      plannedHours: plannedHours,\r\n      shoppingHours: localShoppingHours\r\n    }\r\n  };\r\n};\r\n\r\nmodule.exports = CalculatorUtil;\r\n","module.exports = \"<!--ko if: showMissingHoursError-->\\r\\n<div class=\\\"missing-hours-left-icon\\\">\\r\\n\\t<div class=\\\"info-circle\\\">\\r\\n\\t\\t<span>!</span>\\r\\n\\t</div>\\r\\n</div>\\r\\n<!-- /ko-->\\r\\n\\r\\n<div class=\\\"calculator-detail columns large-12\\\" data-bind=\\\"useElement: true, css: { special: isSpecialBar }\\\">\\r\\n\\t<div class=\\\"calculator-detail-header calculator-detail-box box-large\\\" data-bind=\\\"css: { special: isSpecialBar }\\\">\\r\\n\\t\\t<div class=\\\"calculator-detail-title-container\\\">\\r\\n\\t\\t\\t<h4 class=\\\"calculator-detail-title\\\" data-bind=\\\"text: title\\\"></h4>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\r\\n\\t<!-- ko ifnot: mobileView -->\\r\\n\\t<div class=\\\"hide-for-small-only timeunits-container calculator-detail-box box-xlarge\\\">\\r\\n\\t\\t<div class=\\\"timeunits\\\">\\r\\n\\t\\t\\t<div class=\\\"timeunits-content\\\">\\r\\n\\t\\t\\t\\t<!-- ko template: { foreach: blocks, afterAdd: animateHours } -->\\r\\n\\t\\t\\t\\t<!-- ko ifnot: hours == 0 -->\\r\\n\\t\\t\\t\\t<div class=\\\"timeunit-container-new\\\" data-bind=\\\"css: classType\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"timeunit\\\" data-bind=\\\"css: classType\\\">\\r\\n\\t\\t\\t\\t\\t\\t<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\"?>\\r\\n\\t\\t\\t\\t\\t\\t<svg width=\\\"15px\\\" height=\\\"15px\\\" viewBox=\\\"0 0 15 15\\\" version=\\\"1.1\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\txmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\txmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<title>Klokke</title>\\r\\n\\t\\t\\t\\t\\t\\t\\t<g id=\\\"\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tsketch:type=\\\"MSPage\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<g class=\\\"clock\\\" sketch:type=\\\"MSArtboardGroup\\\" fill=\\\"#FF6532\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<path\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\td=\\\"M7.5,0 C3.35785194,0 0,3.34972155 0,7.48184019 C0,11.6139588 3.35785194,14.9636804 7.5,14.9636804 C11.6421481,14.9636804 15,11.6139588 15,7.48184019 C15,3.34972155 11.6421481,0 7.5,0 L7.5,0 Z M12.148034,8.80750605 L6.46237864,8.80750605 L6.46237864,2.78451574 L7.99150485,2.78451574 L7.99150485,7.28208232 L12.148034,7.28208232 L12.148034,8.80750605 L12.148034,8.80750605 Z\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tid=\\\"Imported-Layers-Copy-173\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</g>\\r\\n\\t\\t\\t\\t\\t\\t\\t</g>\\r\\n\\t\\t\\t\\t\\t\\t</svg>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<span data-bind=\\\"text: hours + text\\\"></span>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<!-- /ko -->\\r\\n\\t<div class=\\\"time-done calculator-detail-box box-medium\\\">\\r\\n\\t\\t<span class=\\\"text-large\\\" data-bind=\\\"text: totalHoursDone()\\\"></span>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"calculator-detail-expand calculator-detail-box box-small\\\"\\r\\n\\t\\tdata-bind=\\\"click: expand, attr: { 'data-label': title }\\\" data-action=\\\"expand\\\">\\r\\n\\t\\t<span class=\\\"icon-arrow\\\" data-bind=\\\"css: { expanded: isExpanded}\\\">\\r\\n\\t\\t</span>\\r\\n\\t</div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"columns large-12 no-padding expandable\\\" data-bind=\\\"\\\">\\r\\n\\t<!-- ko if: isExpanded -->\\r\\n\\t<!-- ko component: { name:'calculator-courses', params: {parent: $data, links: links, api: API, isRNFriProduct: isRNFriProduct} } -->\\r\\n\\t<!-- /ko -->\\r\\n\\t<!-- /ko -->\\r\\n</div>\"","var ko = require('knockout'),\r\n  filter = require('lodash/filter'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  CalculatorTracking = require('../calculator-tracking');\r\nrequire('knockout-postbox');\r\n\r\nfunction CalculatorCourse(params) {\r\n  this.parent = params.parent.parent;\r\n  this.currentPage = params.parent.currentPage;\r\n  this.data = params.data;\r\n  this.API = params.api;\r\n  this.planned = params.planned;\r\n  this.completed = params.completed;\r\n  this.index = params.index;\r\n  var cartObject = this.data.CartObject;\r\n  var isRNFri = this.parent.isRNFriProduct;\r\n  var netCourse = cartObject.EventType === 3;\r\n  var onsiteCourse = cartObject.EventType === 1;\r\n  var showRNFriButton =\r\n    (isRNFri && netCourse) ||\r\n    (isRNFri && (onsiteCourse && cartObject.FreeOfChargeWithRnFri));\r\n  this.isRNFriProduct = showRNFriButton;\r\n  this.availability = getAvailability(this.data.Course.Availability);\r\n  this.quickPurchaseOnlineCourse = this.parent.API.quickPurchaseOnlineCourse;\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  // Listen to the authorization type (accountant or \"revisor\").\r\n  this.AuthorizationType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  // Filter the credits based on which authorization type to use.\r\n  this.filteredCredits = ko.computed(function() {\r\n    return filter(this.data.Course.ActiveAuthorizationCredits, {\r\n      AuthorizationType: this.AuthorizationType()\r\n    });\r\n  }, this);\r\n  this.purchased = ko.observable(\r\n    cart.findCourseInCart(cart.getCart(), this.data.CartObject.Id)\r\n      ? true\r\n      : false\r\n  );\r\n  this.isExpanded = ko.observable(false);\r\n  if (this.data.Course.FromDate !== null) {\r\n    var date = new Date(this.data.Course.FromDate);\r\n    this.dateFormatted =\r\n      '' +\r\n      date.getDate() +\r\n      '.' +\r\n      (date.getMonth() + 1) +\r\n      '.' +\r\n      date.getFullYear();\r\n  }\r\n\r\n  if (this.data.Course.ApprovedDate !== null) {\r\n    var approvedDate = new Date(this.data.Course.ApprovedDate);\r\n    this.approvedDateFormatted =\r\n      '' +\r\n      approvedDate.getDate() +\r\n      '.' +\r\n      (approvedDate.getMonth() + 1) +\r\n      '.' +\r\n      approvedDate.getFullYear();\r\n  }\r\n\r\n  ko.postbox.subscribe(\r\n    'removeCourseWithKey',\r\n    function(key) {\r\n      if (key === this.data.CartObject.Key) {\r\n        this.purchased(false);\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nCalculatorCourse.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.$expandable = $(this.$element.next('.expandable-course').get(0));\r\n};\r\n\r\nCalculatorCourse.prototype.buyCourse = function() {\r\n  ko.postbox.publish('buyCourse', this.data.CartObject);\r\n  this.purchased(true);\r\n};\r\n\r\nCalculatorCourse.prototype.expand = function() {\r\n  var self = this;\r\n  if (this.isExpanded()) {\r\n    this.$expandable.slideUp(250, 'easeOutQuad', function() {\r\n      self.isExpanded(!self.isExpanded());\r\n      CalculatorTracking.trackCourseExpanded(\r\n        self.data,\r\n        'close',\r\n        self.currentPage() + 1,\r\n        self.index + 1\r\n      );\r\n    });\r\n  } else {\r\n    self.isExpanded(!self.isExpanded());\r\n    this.$expandable.slideDown(250, 'easeOutQuad', function() {\r\n      CalculatorTracking.trackCourseExpanded(\r\n        self.data,\r\n        'expand',\r\n        self.currentPage() + 1,\r\n        self.index + 1\r\n      );\r\n    });\r\n  }\r\n};\r\n\r\nfunction getAvailability(availability) {\r\n  if (!availability) return '';\r\n\r\n  switch (availability.Status) {\r\n    case 1:\r\n      return 'open';\r\n    case 2:\r\n      return 'few';\r\n    case 3:\r\n    case 4:\r\n      return 'full';\r\n  }\r\n}\r\n\r\nmodule.exports = CalculatorCourse;\r\n","module.exports = \"<div class=\\\"white-item course-row row\\\" data-bind=\\\"useElement: true, css: { active: isExpanded }\\\">\\r\\n  <div class=\\\"course-row-header\\\">\\r\\n\\r\\n    <div class=\\\"courses-row-item course-item-intro\\\">\\r\\n      <span href=\\\"\\\" class=\\\"course-link\\\" data-bind=\\\"text: data.Course.Title, attr: { href: data.Url}\\\"></span>\\r\\n      <!-- ko ifnot: data.Organizer === null -->\\r\\n      <div href=\\\"\\\" class=\\\"course-link course-organizer\\\"\\r\\n        data-bind=\\\"text: window.language.courseOrganizer + ': ' + data.Organizer, attr: { href: data.Url}\\\"></div>\\r\\n      <!-- /ko -->\\r\\n    </div>\\r\\n\\r\\n    <!-- ko ifnot: data.Course.IsNetCourse -->\\r\\n    <div class=\\\"courses-row-item course-item-date\\\">\\r\\n      <div class=\\\"date\\\">\\r\\n        <span class=\\\" icon-22 icon-left icon-calendar\\\"></span>\\r\\n        <span>\\r\\n          <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": data.Course.DateList}} -->\\r\\n          <!-- /ko -->\\r\\n        </span>\\r\\n      </div>\\r\\n      <!-- ko ifnot: planned || completed -->\\r\\n      <a class=\\\"calendarLink\\\" href=\\\"\\\" data-bind=\\\"attr: { 'href': API.courseCalendarFileUrl + '/' + data.Course.Id}, text: window.language.addToCalendar\\\"></a>\\r\\n      <!-- /ko -->\\r\\n    </div>\\r\\n\\r\\n\\r\\n    <div class=\\\"courses-row-item course-item-location\\\">\\r\\n      <div class=\\\"location\\\">\\r\\n        <!-- ko ifnot: data.Course.City === \\\"\\\" -->\\r\\n        <span class=\\\"icon-22 icon-left icon-pin\\\"></span>\\r\\n        <span class=\\\"location-name\\\" data-bind=\\\"text: data.Course.City\\\"></span>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: data.Course.IsExternal -->\\r\\n        <span class=\\\"location-name\\\" data-bind=\\\"text: window.language.externalCourse\\\"></span>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: data.Course.CourseTypePK === 6 -->\\r\\n        <span class=\\\"icon-22 icon-left icon-program\\\"></span>\\r\\n        <span data-bind=\\\"text: window.language.program\\\"></span>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: data.Course.IsNetCourse -->\\r\\n    <!-- ko if: completed -->\\r\\n    <div class=\\\"courses-row-item course-item-date\\\">\\r\\n      <div class=\\\"date\\\">\\r\\n        <span class=\\\"icon-22 icon-left icon-calendar\\\"></span>\\r\\n        <span class=\\\"date-name\\\" data-bind=\\\"text: approvedDateFormatted\\\"></span>\\r\\n      </div>\\r\\n    </div>\\r\\n    <div class=\\\"courses-row-item course-item-web completed\\\">\\r\\n      <div class=\\\"date\\\">\\r\\n        <span class=\\\"icon-22 icon-left icon-screen\\\"></span>\\r\\n        <span data-bind=\\\"text: window.language.netCourse\\\"></span>\\r\\n      </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko ifnot: completed -->\\r\\n    <div class=\\\"courses-row-item course-item-web\\\">\\r\\n      <div class=\\\"date\\\">\\r\\n        <span class=\\\"icon-22 icon-left icon-screen\\\"></span>\\r\\n        <span data-bind=\\\"text: window.language.netCourse\\\"></span>\\r\\n      </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"courses-row-item course-item-hours\\\">\\r\\n      <div class=\\\"course-hours-list\\\">\\r\\n        <ul data-bind=\\\"foreach: filteredCredits\\\">\\r\\n          <li>\\r\\n            <div class=\\\"item-hour-title\\\">\\r\\n              <span data-bind=\\\"text: Name\\\"></span> <span data-bind=\\\"text: Hours\\\"></span>\\r\\n              <!-- ko component: {\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tname: 'calculator-timeunit',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tparams: { type: $parent.planned ? 1 : 0 }\\r\\n\\t\\t\\t\\t\\t\\t\\t} -->\\r\\n              <!-- /ko -->\\r\\n            </div>\\r\\n\\r\\n          </li>\\r\\n        </ul>\\r\\n      </div>\\r\\n    </div>\\r\\n\\r\\n    <!-- ko if: isRNFriProduct && !(planned || completed)-->\\r\\n    <div class=\\\"courses-row-item course-item-button quick-purchase\\\" data-quick-purchase-button data-bind=\\\"component: {\\r\\n          name: 'quick-purchase-button',\\r\\n              params: {\\r\\n                course: data.CartObject,\\r\\n                text: window.language.addToMyCourse,\\r\\n                addedText: window.language.addedToMyCourse,\\r\\n                quickPurchaseOnlineCourse: quickPurchaseOnlineCourse,\\r\\n                isCompact: false,\\r\\n                notify: true\\r\\n              }\\r\\n          }\\\">\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: !isRNFriProduct  && !(planned || completed)-->\\r\\n    <div class=\\\"courses-row-item course-item-button\\\">\\r\\n      <button type=\\\"button\\\" class=\\\"btn btn-shopping\\\"\\r\\n        data-bind=\\\"click: buyCourse, disable: purchased, css: { purchased: purchased }\\\">\\r\\n        <!-- ko ifnot: purchased -->\\r\\n        <span class=\\\"icon-cart\\\"></span>\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"visible: availability != 'full', text: window.language.addToCart\\\"></span>\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"visible: availability === 'full', html: window.language.addToWaitingList\\\"></span>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: purchased -->\\r\\n        <span class=\\\"icon-check\\\"></span>\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"text: window.language.addedToCart\\\"></span>\\r\\n        <!-- /ko -->\\r\\n      </button>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko ifnot: planned || completed -->\\r\\n    <div class=\\\"courses-row-item course-item-expander icon-expander\\\"\\r\\n      data-bind=\\\"click: expand, attr: { 'data-label': data.Course.Title }\\\" data-action=\\\"expand\\\">\\r\\n      <span class=\\\"icon-arrow\\\" data-bind=\\\"css: { expanded: isExpanded}\\\"></span>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n  </div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"expandable-course\\\" data-bind=\\\"css: { expanded: isExpanded}\\\">\\r\\n  <div class=\\\"course-info\\\">\\r\\n    <!-- ko if: data.Course.ImageUrl -->\\r\\n    <div class=\\\"image-div\\\" style=\\\"background-image: url();\\\"\\r\\n      data-bind=\\\"style: { backgroundImage: 'url(\\\\'' + data.Course.ImageUrl + '\\\\')' }\\\"></div>\\r\\n    <!-- /ko -->\\r\\n    <div data-bind=\\\"html: data.Course.LongDescription\\\">\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"course-instructors\\\" data-bind=\\\"foreach: data.Course.Lecturers\\\">\\r\\n    <div class=\\\"course-instructor-block row\\\">\\r\\n      <a href=\\\"\\\">\\r\\n        <div class=\\\"instructor-image-container columns large-12 medium-12 small-3\\\">\\r\\n          <img class=\\\"instructor-image \\\" data-bind=\\\"attr: { src: ImageUrl }\\\" />\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"instructor-text-container columns large-12 medium-12 small-6\\\">\\r\\n          <div class=\\\"instructor-name\\\">\\r\\n            <h3 data-bind=\\\"text: Name\\\"></h3>\\r\\n\\r\\n          </div>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"instructor-disciplines columns large-12 medium-12\\\">\\r\\n          <h4>Tittel:</h4>\\r\\n          <div data-bind=\\\"text: Title\\\"></div>\\r\\n        </div>\\r\\n      </a>\\r\\n    </div>\\r\\n    <div class=\\\"course-catalogue-link row\\\">\\r\\n      <div class=\\\"columns large-12\\\">\\r\\n        <a href=\\\"\\\" class=\\\"btn btn-transparent expanded btn-large-mobile right\\\"\\r\\n          data-bind=\\\"attr: { href: $parent.data.Url }, html: window.language.openCourseCatalog\\\"></a>\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  CalculatorTracking = require('../calculator-tracking');\r\n\r\nfunction CalculatorCourses(params) {\r\n  this.parent = params.parent;\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.isRNFriProduct = params.isRNFriProduct;\r\n  var self = this;\r\n  this.mobileSize = ko.observable('large').subscribeTo('resize', true);\r\n  this.mobileView = ko.computed(function() {\r\n    if (self.mobileSize() === 'small') {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  });\r\n\r\n  this.currentPage = ko.observable(0);\r\n  this.currentFilter = ko.observable(2);\r\n  this.totalItems = ko.observable(0);\r\n  this.itemsPerPage = 4;\r\n\r\n  // Currently not used because the filters are not supposed to be used.\r\n  this.location = ko.observable('');\r\n  this.courseType = ko.observable('');\r\n  this.CategoryKey = params.parent.CategoryKey;\r\n\r\n  // var currentYear = new Date().getFullYear();\r\n  this.currentYearChange = ko\r\n    .observable(0)\r\n    .subscribeTo('currentYearChange', true);\r\n  this.currentStartYear = ko\r\n    .observable(0)\r\n    .subscribeTo('currentStartYear', true);\r\n  this.currentEndYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n\r\n  var currentYear = new Date().getFullYear();\r\n  // Based on the year of the period, determine if it's the current period.\r\n  this.activePeriod = ko.computed(function() {\r\n    if (\r\n      currentYear >= this.currentYearChange() ||\r\n      currentYear <= this.currentEndYear()\r\n    ) {\r\n      this.currentFilter(2);\r\n      return true;\r\n    } else {\r\n      /*if (currentYear === this.currentEndYear()) {\r\n\t\t\treturn true;\r\n\t\t} */\r\n      this.currentFilter(2);\r\n      return false;\r\n    }\r\n  }, this);\r\n\r\n  this.pages = ko.computed(function() {\r\n    var pages = this.totalItems() / this.itemsPerPage;\r\n    if (pages < 1) {\r\n      pages = 1;\r\n    }\r\n    return Math.ceil(pages);\r\n  }, this);\r\n\r\n  this.isLoading = ko.observable(true);\r\n  this.courses = ko.observableArray([]);\r\n  this.plannedCourses = ko.observableArray([]);\r\n  this.completedCourses = ko.observableArray([]);\r\n\r\n  // Get the initial courses.\r\n  this.getRecommendedCourses({\r\n    skip: 0,\r\n    take: this.itemsPerPage\r\n  });\r\n\r\n  this.getPlannedCourses({\r\n    skip: 0,\r\n    take: this.itemsPerPage\r\n  });\r\n  this.getCompletedCourses({\r\n    skip: 0,\r\n    take: this.itemsPerPage\r\n  });\r\n\r\n  this.isExpanded = ko.observable(false);\r\n}\r\n\r\nCalculatorCourses.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nCalculatorCourses.prototype.expand = function() {\r\n  this.isExpanded(!this.isExpanded());\r\n};\r\n\r\nCalculatorCourses.prototype.changeFilter = function(filter) {\r\n  this.currentFilter(filter);\r\n  CalculatorTracking.trackCategoryFilter(this.parent.title, filter);\r\n};\r\n\r\nCalculatorCourses.prototype.getRecommendedCourses = function(params) {\r\n  var url =\r\n    this.API.recommendedCourses +\r\n    '?authorizationCredit=' +\r\n    encodeURIComponent(this.CategoryKey) +\r\n    '&skip=' +\r\n    encodeURIComponent(params.skip) +\r\n    '&take=' +\r\n    encodeURIComponent(params.take);\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.totalItems(response.TotalItems);\r\n      this.courses(response.Items);\r\n      CalculatorTracking.trackCourseList(\r\n        'Anbefalte Kurs',\r\n        this.courses(),\r\n        this.currentPage(),\r\n        this.itemsPerPage\r\n      );\r\n      this.isLoading(false);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      this.isLoading(false);\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator-courses.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nCalculatorCourses.prototype.getPlannedCourses = function() {\r\n  var url =\r\n    this.API.plannedCourses +\r\n    '?authorizationCredit=' +\r\n    encodeURIComponent(this.CategoryKey) +\r\n    '&skip=null' +\r\n    '&take=null';\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.plannedCourses(response.Items);\r\n      this.isLoading(false);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator-courses.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nCalculatorCourses.prototype.getCompletedCourses = function() {\r\n  var url =\r\n    this.API.completedCourses +\r\n    '?authorizationCredit=' +\r\n    encodeURIComponent(this.CategoryKey) +\r\n    '&startYear=' +\r\n    encodeURIComponent(this.currentStartYear()) +\r\n    '&endYear=' +\r\n    encodeURIComponent(this.currentEndYear()) +\r\n    '&skip=null' +\r\n    '&take=null';\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.completedCourses(response.Items);\r\n      this.isLoading(false);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator-courses.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nCalculatorCourses.prototype.prevPage = function() {\r\n  if (this.currentPage() > 0) {\r\n    this.currentPage(this.currentPage() - 1);\r\n    this.getRecommendedCourses({\r\n      skip: this.currentPage() * this.itemsPerPage,\r\n      take: this.itemsPerPage\r\n    });\r\n    CalculatorTracking.trackCoursesPagination(\r\n      this.parent.title,\r\n      this.currentPage() + 1,\r\n      'PreviousPage'\r\n    );\r\n  }\r\n};\r\n\r\nCalculatorCourses.prototype.nextPage = function() {\r\n  if (this.currentPage() + 1 < this.pages()) {\r\n    this.currentPage(this.currentPage() + 1);\r\n    this.getRecommendedCourses({\r\n      skip: this.currentPage() * this.itemsPerPage,\r\n      take: this.itemsPerPage\r\n    });\r\n    CalculatorTracking.trackCoursesPagination(\r\n      this.parent.title,\r\n      this.currentPage() + 1,\r\n      'NextPage'\r\n    );\r\n  }\r\n};\r\n\r\nCalculatorCourses.prototype.changePage = function(index) {\r\n  this.currentPage(index);\r\n  this.getRecommendedCourses({\r\n    skip: index * this.itemsPerPage,\r\n    take: this.itemsPerPage\r\n  });\r\n};\r\n\r\nmodule.exports = CalculatorCourses;\r\n","module.exports = \"<div class=\\\"calculator-courses-container\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\t<div class=\\\"calculator-tabs row\\\">\\r\\n\\t\\t<ul class=\\\"filter-tabs\\\">\\r\\n\\t\\t\\t<!-- ko if: activePeriod -->\\r\\n\\t\\t\\t\\t<li data-bind=\\\"css: {'is-current': currentFilter() === 1 }\\\">\\r\\n\\t\\t\\t\\t\\t<a href=\\\"\\\" class=\\\"\\\" data-bind=\\\"click: function () { this.changeFilter(1); }\\\">Anbefalte kurs</a>\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<li data-bind=\\\"css: {'is-current': currentFilter() === 2 }\\\">\\r\\n\\t\\t\\t\\t<a href=\\\"\\\" class=\\\"\\\" data-bind=\\\"click: function () { this.changeFilter(2); }\\\">Påmeldte kurs</a> <!--Removed data-bind because special characters were not supported-->\\r\\n\\t\\t\\t</li>\\r\\n\\t\\t\\t<li data-bind=\\\"css: {'is-current': currentFilter() === 3 }\\\">\\r\\n\\t\\t\\t\\t<a href=\\\"\\\" class=\\\"\\\" data-bind=\\\"click: function () { this.changeFilter(3); }\\\">Historikk</a> <!--Removed data-bind because special characters were not supported-->\\r\\n\\t\\t\\t</li>\\r\\n \\t\\t</ul>\\r\\n \\t</div>\\r\\n\\r\\n \\t<!-- ko if: activePeriod -->\\r\\n \\t<div class=\\\"calcualtor-courses-new\\\" data-bind=\\\"fadeVisible: currentFilter() === 1\\\">\\r\\n \\t\\t<div class=\\\"calculator-courses-header clearfix\\\">\\r\\n \\t\\t\\t<div class=\\\"course-header-filter\\\">\\r\\n \\t\\t\\t\\tViser <span class=\\\"\\\" data-bind=\\\"text: itemsPerPage\\\"></span> av\\r\\n \\t\\t\\t\\t<span class=\\\"\\\" data-bind=\\\"text: totalItems()\\\"></span>\\r\\n \\t\\t\\t\\ttreff\\r\\n \\t\\t\\t</div>\\r\\n \\t\\t</div>\\r\\n \\t\\t<div class=\\\"calculator-courses-items\\\" data-bind=\\\"foreach: courses\\\">\\r\\n \\t\\t<!-- ko ifnot: $parent.mobileView -->\\r\\n\\t\\t\\t<!-- ko component: { name: 'calculator-course', params: { index: $index(), parent: $parent, data: $data, api: $parent.API, completed: false, planned: false} }-->\\r\\n\\t \\t\\t<!-- /ko -->\\r\\n \\t\\t<!-- /ko -->\\r\\n\\r\\n \\t\\t<!-- ko if: $parent.mobileView -->\\r\\n \\t\\t\\t<div data-bind=\\\"component: {name: 'course-block', params: { index: $index(), parent: $parent, data: $data, excludeImage: true, completed: false, planned: false }}\\\">\\r\\n \\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n \\t\\t</div>\\r\\n \\t\\t<!-- ko if: isLoading -->\\r\\n \\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t \\t\\t\\t<div class=\\\"columns large-12 loader-height\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t \\t\\t\\t</div>\\r\\n \\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko ifnot: courses().length == 0 -->\\r\\n\\r\\n\\r\\n \\t\\t<div class=\\\"courses-footer-container clearfix\\\">\\r\\n \\t\\t\\t<div class=\\\"pagination\\\">\\r\\n \\t\\t\\t<span class=\\\"icon icon-arrow rotate-90\\\" data-bind=\\\"click: prevPage\\\"></span>\\r\\n \\t\\t\\t\\t<div class=\\\"pagination-pages\\\">\\r\\n \\t\\t\\t\\t\\t<span data-bind=\\\"text: (currentPage() + 1) + '/'\\\"></span>\\r\\n \\t\\t\\t\\t\\t<span data-bind=\\\"text: pages()\\\"></span>\\r\\n \\t\\t\\t\\t</div>\\r\\n \\t\\t\\t\\t<span class=\\\"icon-arrow rotate-reverse-90\\\" data-bind=\\\"click: nextPage\\\"></span>\\r\\n \\t\\t\\t</div>\\r\\n \\t\\t\\t<a href=\\\"\\\" class=\\\"btn btn-transparent btn-action btn-large-mobile right\\\" data-bind=\\\"css: { 'btn-bg-light': mobileView }, attr: { href: links.findCoursesLink } \\\">Til kurskatalogen</a>\\r\\n \\t\\t</div>\\r\\n \\t\\t<!-- /ko -->\\r\\n \\t</div>\\r\\n \\t<!-- /ko -->\\r\\n\\r\\n\\t<div class=\\\"calculator-courses-purchased calculator-courses-items\\\" data-bind=\\\"fadeVisible: currentFilter() === 2\\\">\\r\\n\\t\\t<!-- ko if: activePeriod -->\\r\\n\\t\\t\\t<div class=\\\"calculator-courses-active\\\">\\r\\n\\t\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t\\t<h3>Påmeldte kurs</h3> <!--Removed data-bind=\\\"text: window.language.registeredCourses\\\" because special characters were not supported-->\\r\\n\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t<!-- ko ifnot: mobileView -->\\r\\n\\t\\t\\t\\t\\t<!-- ko foreach: plannedCourses -->\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko component: { name: 'calculator-course', params: {parent: $parent.parent, data: $data, completed: false, planned: true} }-->\\r\\n\\t\\t \\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t<!-- ko if: mobileView -->\\r\\n\\t\\t\\t\\t\\t<!-- ko foreach: plannedCourses -->\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"component: {name: 'course-block', params: { parent: $parent.parent, data: $data, excludeImage: true, completed: false, planned: true }}\\\">\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n \\t\\t<!-- ko if: isLoading -->\\r\\n \\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t \\t\\t\\t<div class=\\\"columns large-12 loader-height\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t \\t\\t\\t</div>\\r\\n \\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n\\r\\n\\t<div class=\\\"calculator-courses-purchased calculator-courses-items\\\" data-bind=\\\"fadeVisible: currentFilter() === 3\\\">\\r\\n\\t\\t<div class=\\\"calculator-courses-history\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h3 data-bind=\\\"text: window.language.finishedCourses\\\">Historikk</h3>\\r\\n\\t\\t\\t</header>\\r\\n\\t\\t\\t<!-- ko ifnot: mobileView -->\\r\\n\\t\\t\\t\\t<!-- ko foreach: completedCourses -->\\r\\n\\t\\t\\t\\t\\t<!-- ko component: { name: 'calculator-course', params: {parent: $parent.parent, data: $data, completed: true, planned: false} }-->\\r\\n\\t \\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t<!-- ko if: mobileView -->\\r\\n\\t\\t\\t\\t<!-- ko foreach: completedCourses -->\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"component: {name: 'course-block', params: { parent: $parent.parent, data: $data, excludeImage: true, completed: true, planned: false }}\\\">\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- ko if: isLoading -->\\r\\n \\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t \\t\\t\\t<div class=\\\"columns large-12 loader-height\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t \\t\\t\\t</div>\\r\\n \\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  filter = require('lodash/filter'),\r\n  decodeHtml = require('_utils/text'),\r\n  unescape = require('lodash/unescape');\r\n\r\nvar AUTHORIZATION_TYPE = {\r\n  ACCOUNTANT: 1,\r\n  AUDITOR: 2\r\n};\r\n\r\nfunction CategoryInput(name, key, value) {\r\n  this.name = name;\r\n  this.key = key;\r\n  this.value = ko.observable(value).extend({\r\n    required: [\r\n      {\r\n        type: 'isValidCalculatorHour',\r\n        message: 'Det er kun gyldig med hele eller halve timer'\r\n      }\r\n    ]\r\n  });\r\n}\r\n\r\nCategoryInput.prototype.isValid = function() {\r\n  var isValid = true;\r\n  if (this.value.hasError()) {\r\n    isValid = false;\r\n  }\r\n  return isValid;\r\n};\r\n\r\nfunction ExtendedCourse(params) {\r\n  var self = this;\r\n  this.API = params.api;\r\n  this.parent = params.parent;\r\n  this.links = params.parent.links;\r\n  this.texts = params.parent.texts;\r\n  this.preAnswers = params.preAnswers;\r\n  this.isChangeInYear = ko.observable(false);\r\n  this.addOrUpdateCallback = params.addOrUpdateCallback\r\n    ? params.addOrUpdateCallback.bind(params.parent)\r\n    : undefined;\r\n\r\n  this.isEditingCourse = params.preAnswers ? true : false;\r\n  this.removeCourseCallback = params.removeCourseCallback\r\n    ? params.removeCourseCallback\r\n    : function() {};\r\n\r\n  if (this.isEditingCourse) {\r\n    this.extendedCourseTitle = ko.observable('Rediger kurs');\r\n  } else {\r\n    this.extendedCourseTitle = ko.observable('Legg til oppdateringstimer');\r\n  }\r\n\r\n  this.id = ko.observable(-1);\r\n  this.isLoading = ko.observable(false);\r\n  this.validationTimer = null;\r\n  // The input values.\r\n  this.courseTitle = ko.observable().extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }]\r\n  });\r\n  this.courseOrganizer = ko.observable().extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }]\r\n  });\r\n  this.courseDate = ko.observable().extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Du må fylle inn en dato' }]\r\n  });\r\n\r\n  this.fieldsUpdate = ko.computed(function() {\r\n    return self.courseTitle() + self.courseOrganizer() + self.courseDate();\r\n  });\r\n  this.fieldsUpdate.subscribe(function() {\r\n    if (self.validationTimer !== null) {\r\n      self.validationStatus('');\r\n      window.clearTimeout(self.validationTimer);\r\n    }\r\n  });\r\n\r\n  this.originalCategories = ko.observableArray([]);\r\n  this.categories = ko.observableArray([]);\r\n  this.categoriesAccountant = ko.observableArray([]);\r\n  this.categoriesAuditor = ko.observableArray([]);\r\n  // We need to know this when adding a new course. When we publish on this\r\n  // channel we have to send the total hours done, not just what we added.\r\n  this.hoursDone = ko.observable(0).syncWith('hoursDone', true);\r\n  this.currentYear = ko.observable(0).subscribeTo('currentYearChange', true);\r\n  this.period = ko.observableArray([]).subscribeTo('periodYears', true);\r\n\r\n  this.validationStatus = ko.observable('');\r\n\r\n  this.showAddCourse = ko.observable(false);\r\n  // Radio buttons: If we are an accountant or auditor.\r\n  this.authorizationType = ko.observable('1');\r\n  this.isSelfStudy = ko.observable('false');\r\n  // Listen to changes in the change of roles.\r\n  this.authorizationType.subscribe(function(value) {\r\n    if (parseInt(value, 10) === AUTHORIZATION_TYPE.ACCOUNTANT) {\r\n      this.categories(this.categoriesAccountant());\r\n    } else {\r\n      this.categories(this.categoriesAuditor());\r\n    }\r\n  }, this);\r\n\r\n  this.requiredFields = [\r\n    this.courseTitle,\r\n    this.courseOrganizer,\r\n    this.courseDate\r\n  ];\r\n\r\n  this.categories.subscribe(function() {\r\n    self.requiredFields = [\r\n      self.courseTitle,\r\n      self.courseOrganizer,\r\n      self.courseDate\r\n    ];\r\n    self.requiredFields.push.apply(self.requiredFields, self.categories());\r\n  });\r\n\r\n  if (params.preAnswers) {\r\n    this.originalCategories(params.preAnswers.categories);\r\n    this.fillPreAnswers(params.preAnswers);\r\n    this.id(params.preAnswers.sequencePk);\r\n  } else {\r\n    // Initally get the categories.\r\n    this.getCategories();\r\n  }\r\n}\r\n\r\nExtendedCourse.prototype.fillPreAnswers = function(answers) {\r\n  this.courseTitle(unescape(answers.title));\r\n  if (answers.organizer) {\r\n    this.courseOrganizer(unescape(answers.organizer));\r\n  }\r\n  if (answers.fromDate && answers.fromDate.length > 0) {\r\n    var dateSplit = answers.fromDate.split('.');\r\n    // New Date(year, month, day) - month January starts with value 0 so have to do dateSplit[1]-1.\r\n    this.courseDate(new Date(dateSplit[2], dateSplit[1] - 1, dateSplit[0]));\r\n  }\r\n  if (answers.isSelfStudy) {\r\n    this.isSelfStudy('true');\r\n  }\r\n  this.createCategories(answers.categories);\r\n};\r\n\r\nExtendedCourse.prototype.getCategories = function() {\r\n  APIHelper.get(\r\n    this.API.authorizationCredits,\r\n    function(response) {\r\n      this.createCategories(response);\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nExtendedCourse.prototype.createCategories = function(categories) {\r\n  // Map the response into an object where we can have observables on the input values.\r\n  this.categoriesAuditor(\r\n    ko.utils.arrayMap(filter(categories, { AuthorizationType: 2 }), function(\r\n      category\r\n    ) {\r\n      return new CategoryInput(\r\n        category.Name,\r\n        category.CategoryKey,\r\n        category.Hours\r\n      );\r\n    })\r\n  );\r\n  this.categoriesAccountant(\r\n    ko.utils.arrayMap(filter(categories, { AuthorizationType: 1 }), function(\r\n      category\r\n    ) {\r\n      return new CategoryInput(\r\n        category.Name,\r\n        category.CategoryKey,\r\n        category.Hours\r\n      );\r\n    })\r\n  );\r\n  // Default set it to Accountant\r\n  this.categories(this.categoriesAccountant());\r\n};\r\n\r\nExtendedCourse.prototype.validateFields = function(fields) {\r\n  var isValid = true;\r\n\r\n  for (var i = 0; i < fields.length; i++) {\r\n    if (fields[i] instanceof CategoryInput) {\r\n      // fields[i].value.hasError(!fields[i].isValid());\r\n      if (!fields[i].isValid()) {\r\n        isValid = false;\r\n      }\r\n    } else if (fields[i]() === undefined || fields[i]() === null) {\r\n      fields[i].hasError(true);\r\n    }\r\n    if (\r\n      !(fields[i] instanceof CategoryInput) &&\r\n      fields[i] &&\r\n      fields[i].hasError()\r\n    ) {\r\n      isValid = false;\r\n    }\r\n  }\r\n\r\n  return isValid;\r\n};\r\n\r\nExtendedCourse.prototype.clearFields = function() {\r\n  // I have to set courseTitle twice in order to ensure that the\r\n  // error message is shown on second attempt to register course.\r\n  this.courseTitle('');\r\n  this.courseTitle(null);\r\n  this.courseTitle.hasError(undefined);\r\n  this.courseTitle.isSuccessful(false);\r\n  this.courseOrganizer('');\r\n  this.courseOrganizer(null);\r\n  this.courseOrganizer.hasError(undefined);\r\n  this.courseOrganizer.isSuccessful(false);\r\n  this.courseDate('');\r\n  this.courseDate(undefined);\r\n  this.courseDate.hasError(undefined);\r\n  this.courseDate.isSuccessful(false);\r\n  this.isSelfStudy('false');\r\n\r\n  var categories = this.categoriesAccountant();\r\n  var i = 0;\r\n  for (i = 0; i < categories.length; i++) {\r\n    categories[i].value(0);\r\n  }\r\n  categories = this.categoriesAuditor();\r\n  i = 0;\r\n  for (i = 0; i < categories.length; i++) {\r\n    categories[i].value(0);\r\n  }\r\n};\r\n\r\nExtendedCourse.prototype.submitCourse = function() {\r\n  if (!this.validateFields(this.requiredFields)) {\r\n    this.validationStatus('errors');\r\n    return;\r\n  }\r\n\r\n  // Construct the payload for the post message.\r\n  var message = {\r\n    Title: this.courseTitle(),\r\n    Organizer: this.courseOrganizer(),\r\n    Date: new Date(this.courseDate()).toJSON(),\r\n    Credits: [],\r\n    IsSelfStudy: this.isSelfStudy()\r\n  };\r\n\r\n  if (this.parent && this.parent.course && this.parent.course.CourseKey > 0) {\r\n    message.CourseKey = this.parent.course.CourseKey;\r\n  }\r\n  var categories = this.categoriesAccountant();\r\n  var tmpHours = 0;\r\n  var i = 0,\r\n    j = 0;\r\n  var tmpVal;\r\n  for (i = 0; i < categories.length; i++, j++) {\r\n    tmpVal = categories[i].value();\r\n    if (typeof tmpVal === 'string') {\r\n      tmpVal = tmpVal.replace(',', '.');\r\n    }\r\n    tmpHours = parseFloat(tmpVal, 10);\r\n\r\n    message.Credits.push({\r\n      CategoryKey: categories[i].key,\r\n      Hours: isNaN(tmpHours) ? 0 : tmpHours\r\n    });\r\n    if (this.isEditingCourse) {\r\n      this.originalCategories()[j].Hours = tmpHours;\r\n    }\r\n  }\r\n\r\n  categories = this.categoriesAuditor();\r\n  i = 0;\r\n  for (i = 0; i < categories.length; i++, j++) {\r\n    tmpVal = categories[i].value();\r\n    if (typeof tmpVal === 'string') {\r\n      tmpVal = tmpVal.replace(',', '.');\r\n    }\r\n    tmpHours = parseFloat(tmpVal, 10);\r\n\r\n    message.Credits.push({\r\n      CategoryKey: categories[i].key,\r\n      Hours: isNaN(tmpHours) ? 0 : tmpHours\r\n    });\r\n    if (this.isEditingCourse) {\r\n      this.originalCategories()[j].Hours = tmpHours;\r\n    }\r\n  }\r\n\r\n  if (this.preAnswers) {\r\n    var dateSplit = this.preAnswers.fromDate.split('.');\r\n    var oldFromDate = new Date(dateSplit[2], dateSplit[1] - 1, dateSplit[0]);\r\n    var newFromDate = new Date(this.courseDate());\r\n    this.isChangeInYear =\r\n      oldFromDate.getFullYear() !== newFromDate.getFullYear();\r\n  }\r\n\r\n  this.isLoading(true);\r\n  APIHelper.post(\r\n    this.API.addOrUpdateExternalCourse,\r\n    message,\r\n    function() {\r\n      this.isLoading(false);\r\n\r\n      var addedYear = new Date(message.Date).getFullYear();\r\n      var periods = this.period();\r\n\r\n      // Only publish the hours to the display if the course is within the current period.\r\n      if (\r\n        periods.length !== 0 &&\r\n        addedYear >= periods[0].Year &&\r\n        addedYear <= periods[periods.length - 1].Year\r\n      ) {\r\n        ko.postbox.publish('changeInAbsence', {});\r\n      }\r\n      if (this.addOrUpdateCallback !== undefined) {\r\n        this.addOrUpdateCallback();\r\n      }\r\n      // We only want to clear the fields when we're adding new courses - incase the user\r\n      // will add more courses they don't have to manually remove each field.\r\n      if (!this.isEditingCourse) {\r\n        this.clearFields();\r\n      } else {\r\n        var tmpDate = new Date(this.courseDate());\r\n        this.parent.updateCourseValues({\r\n          title: message.Title,\r\n          organizer: message.Organizer,\r\n          fromDate:\r\n            '' +\r\n            tmpDate.getDate() +\r\n            '.' +\r\n            (tmpDate.getMonth() + 1) +\r\n            '.' +\r\n            tmpDate.getFullYear(),\r\n          categories: this.originalCategories()\r\n        });\r\n      }\r\n\r\n      this.validationStatus('success');\r\n      this.startValidationTimer();\r\n    }.bind(this),\r\n    function(response) {\r\n      this.isLoading(false);\r\n      this.validationStatus('errors');\r\n      this.startValidationTimer();\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: extended-course.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + this.API.addOrUpdateExternalCourse\r\n        ]\r\n      });\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nExtendedCourse.prototype.removeCourse = function() {\r\n  var self = this;\r\n  self.isLoading(true);\r\n  APIHelper.delete(\r\n    this.parent.API.removeCourseApi + '/' + this.parent.course.CourseKey,\r\n    undefined,\r\n    function() {\r\n      self.isLoading(false);\r\n      self.removeCourseCallback();\r\n    }\r\n  );\r\n};\r\n\r\nExtendedCourse.prototype.startValidationTimer = function() {\r\n  var self = this;\r\n  this.validationTimer = window.setTimeout(function() {\r\n    self.validationStatus('');\r\n    self.validationTimer = null;\r\n  }, 5000);\r\n};\r\n\r\nExtendedCourse.prototype.toggleAddCourse = function() {\r\n  this.showAddCourse(!this.showAddCourse());\r\n};\r\n\r\nExtendedCourse.prototype.triggerNonStructuredHoursPopup = function() {\r\n  ko.postbox.publish('openPopup', {\r\n    modalTitle: decodeHtml(this.texts.nonStructuredHoursTitle),\r\n    modalText: decodeHtml(this.texts.nonStructuredHoursDescription)\r\n  });\r\n};\r\n\r\nmodule.exports = ExtendedCourse;\r\n","var toString = require('./toString'),\n    unescapeHtmlChar = require('./_unescapeHtmlChar');\n\n/** Used to match HTML entities and HTML characters. */\nvar reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n    reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction unescape(string) {\n  string = toString(string);\n  return (string && reHasEscapedHtml.test(string))\n    ? string.replace(reEscapedHtml, unescapeHtmlChar)\n    : string;\n}\n\nmodule.exports = unescape;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map HTML entities to characters. */\nvar htmlUnescapes = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\n\n/**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\nvar unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\nmodule.exports = unescapeHtmlChar;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","module.exports = \"<div class=\\\"calculator-addcourse-container container-white\\\">\\r\\n\\t<div class=\\\"row\\\">\\r\\n\\t\\t<!-- ko if: typeof parent.toggleAddCourse !== 'undefined' -->\\r\\n\\t\\t<div class=\\\"close-container\\\" data-bind=\\\"click: parent.toggleAddCourse.bind(parent)\\\">\\r\\n\\t\\t\\t<div class=\\\"close\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t<h1 data-bind=\\\"text: extendedCourseTitle\\\"></h1>\\r\\n\\t\\t\\t</header>\\r\\n\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t<!-- ko if: isLoading -->\\r\\n\\t\\t\\t\\t<div class=\\\"loader-container centered-overlay\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6 small-12\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"course-about\\\" data-bind=\\\"css: { 'is-loading': isLoading }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h3>Om timene</h3>\\r\\n\\t\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"large-8 medium-10 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"false\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"checked: isSelfStudy, attr: { id: id() + '-status-option-self-study-1', name: 'calc-self-study-course-type-' + id() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio\\\" data-bind=\\\"attr: { for: id() + '-status-option-self-study-1' }\\\">Kurs</label>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row large-8 medium-10 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"true\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"checked: isSelfStudy, attr: { id: id() + '-status-option-self-study-2', name: 'calc-self-study-course-type-' + id() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio\\\" data-bind=\\\"attr: { for: id() + '-status-option-self-study-2' }\\\">Ikke-strukturerte timer</label>\\r\\n                            <span class=\\\"info-popup\\\" data-bind=\\\"visible: texts.nonStructuredHoursTitle, click: triggerNonStructuredHoursPopup\\\">?</span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row large-8 medium-10 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': courseTitle.hasError }\\\">Tittel*\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"value: courseTitle, valueUpdate: 'blur', css: { 'has-error': courseTitle.hasError, 'is-successful': courseTitle.isSuccessful }\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\taria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: courseTitle.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: courseTitle.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'no-height': !courseTitle.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: courseTitle.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: courseTitle.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row large-8 medium-10 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'has-error': courseOrganizer.hasError }\\\">Arrangør*\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"value: courseOrganizer, valueUpdate: 'blur', css: { 'has-error': courseOrganizer.hasError, 'is-successful': courseOrganizer.isSuccessful }\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\taria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { active: courseOrganizer.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: courseOrganizer.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'no-height': !courseOrganizer.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { active: courseOrganizer.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: courseOrganizer.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row large-6 medium-6 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': courseDate.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span>Ferdigstillelsesdato <span class=\\\"lowercase\\\">(Registrering frem i tid er ikke\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tmulig)</span></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"input-group\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"form-control\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"datepicker: courseDate, oldDates: true, noFutureDates: true, valueUpdate: 'blur', css: { 'has-error': courseDate.hasError, 'is-successful': courseDate.isSuccessful }\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { active: courseDate.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: courseDate.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"input-group-addon\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon icon-calendar\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'no-height': !courseDate.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: courseDate.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: courseDate.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: validationStatus().length > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"message\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'is-success': validationStatus() === 'success', 'is-error': validationStatus() === 'errors' }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"message-icon\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"info-circle\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: validationStatus() === 'errors' -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span>!</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: validationStatus() === 'success' -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"message-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: validationStatus() === 'errors' -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p>Det har opptstått feil ved lagring av kurset!</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: validationStatus() === 'success' -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: isChangeInYear -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p>Kurset er oppdatert. For å se kurset kategorisert i riktig år, vennligst oppdater\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tsiden.</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: isChangeInYear -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: id() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p>Kurset er oppdatert.</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: id() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p>Kurset er registrert. Du finner det under <a\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { href: links.myCoursesLink }\\\">Mine kurs</a></p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6 small-12\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"course-data\\\" data-bind=\\\"css: { 'is-loading': isLoading }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h3>Oppdateringstider</h3>\\r\\n\\t\\t\\t\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"1\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"checked: authorizationType, attr: { id: id() + '-status-option-1', name: 'calc-leave-type-' + id() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { for: id() + '-status-option-1' }\\\">Regnskapsfører</label>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"2\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"checked: authorizationType, attr: { id: id() + '-status-option-2', name: 'calc-leave-type-' + id() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { for: id() + '-status-option-2' }\\\">Revisor</label>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"course-data-hours\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<h3>Timer</h3>\\r\\n\\t\\t\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: categories\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': value.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" placeholder=\\\"\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: {id: $parent.id() + '-category-' + $index()}, value: value, valueUpdate: 'blur', css: { 'has-error': value.hasError, 'is-successful': value.isSuccessful }\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\taria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"visible: value, css: { active: value.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: value.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"css: { 'no-height': !value.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: value.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: value.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"actions-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: isEditingCourse -->\\r\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"click: removeCourse, disable: isLoading\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tSlett kurs\\r\\n\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"click: submitCourse, disable: isLoading\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: id() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tRediger kurs\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: id() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tLegg til kurs\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\nrequire('knockout-postbox');\r\n\r\nfunction LeaveListItem(params, api, parent) {\r\n  this.showInputLeave = ko.observable(false);\r\n  this.AbsenceKey = params.AbsenceKey;\r\n  this.leaveYear = ko.observable(params.Year);\r\n  this.storedLeaveYear = ko.observable(this.leaveYear());\r\n  this.API = api;\r\n  this.parent = parent;\r\n}\r\n\r\nLeaveListItem.prototype.toggleChangeLeave = function() {\r\n  this.showInputLeave(!this.showInputLeave());\r\n};\r\n\r\nLeaveListItem.prototype.submitChangeLeave = function() {\r\n  this.storedLeaveYear(this.leaveYear());\r\n  this.addOrUpdateLeave();\r\n  this.toggleChangeLeave();\r\n};\r\n\r\nLeaveListItem.prototype.cancelChangeLeave = function() {\r\n  this.leaveYear(this.storedLeaveYear());\r\n  this.toggleChangeLeave();\r\n};\r\n\r\nLeaveListItem.prototype.askDelete = function() {\r\n  this.parent.openModal(this);\r\n};\r\n\r\nLeaveListItem.prototype.deleteAbsence = function() {\r\n  var url = this.API.deleteAbsence + '?key=' + this.AbsenceKey;\r\n  APIHelper.post(\r\n    url,\r\n    null,\r\n    function() {\r\n      ko.postbox.publish('changeInAbsence', {});\r\n    },\r\n    null,\r\n    null\r\n  );\r\n\r\n  this.parent.leaveItems.remove(this);\r\n};\r\n\r\nLeaveListItem.prototype.addOrUpdateLeave = function(cb) {\r\n  var url = this.API.addOrUpdateAbsence + '?year=' + this.leaveYear();\r\n  if (this.AbsenceKey !== undefined) {\r\n    url += '&key=' + this.AbsenceKey;\r\n  }\r\n\r\n  APIHelper.post(\r\n    url,\r\n    null,\r\n    function(absenceKey) {\r\n      if (cb) {\r\n        cb(absenceKey);\r\n      }\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: extended-leave.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    },\r\n    null\r\n  );\r\n};\r\n\r\nfunction ExtendedLeave(params) {\r\n  this.API = params.api;\r\n  this.parent = params.parent;\r\n  this.links = this.parent.links;\r\n  this.absenceLink = params.absenceLink;\r\n  this.activeModal = ko.observable(false);\r\n  this.modalText = ko.observable(\r\n    'Er du sikker på at du vil slette denne permisjonen?'\r\n  );\r\n  this.modalTitle = ko.observable('');\r\n  this.deletableItem = ko.observable();\r\n\r\n  this.newLeaveText = ko.observable('');\r\n  this.leaveItems = ko.observableArray([]);\r\n\r\n  this.getLeave();\r\n}\r\n\r\nExtendedLeave.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nExtendedLeave.prototype.confirmModal = function() {\r\n  this.closeModal();\r\n  this.deletableItem().deleteAbsence();\r\n};\r\n\r\nExtendedLeave.prototype.openModal = function(item) {\r\n  this.activeModal(true);\r\n  this.deletableItem(item);\r\n};\r\n\r\nExtendedLeave.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nExtendedLeave.prototype.addLeave = function() {\r\n  var year = parseInt(this.newLeaveText(), 10);\r\n  var newLeave = new LeaveListItem({ Year: year }, this.API, this);\r\n  newLeave.addOrUpdateLeave(\r\n    function(absenceKey) {\r\n      if (absenceKey > 0) {\r\n        newLeave.AbsenceKey = absenceKey;\r\n        this.leaveItems.push(newLeave);\r\n        ko.postbox.publish('changeInAbsence', {});\r\n      } else {\r\n        // TODO: Give an error message if we did not receive an absenceKey.\r\n      }\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nExtendedLeave.prototype.getLeave = function() {\r\n  APIHelper.get(\r\n    this.API.getAbsence,\r\n    function(response) {\r\n      for (var i = 0; i < response.length; i++) {\r\n        this.leaveItems.push(new LeaveListItem(response[i], this.API, this));\r\n      }\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nmodule.exports = ExtendedLeave;\r\n","module.exports = \"<div class=\\\"calculator-leave-container container-white\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\t<div class=\\\"row\\\">\\r\\n\\t\\t<div class=\\\"close-container\\\" data-bind=\\\"click: parent.toggleLeaveBlock.bind(parent)\\\">\\r\\n\\t\\t\\t<div class=\\\"close\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"columns large-12 small-12\\\">\\r\\n\\t\\t\\t<div class=\\\"modal\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n\\t\\t\\t\\t<div class=\\\"info-circle\\\">?</div>\\r\\n\\t\\t\\t\\t<h2 data-bind=\\\"text: modalTitle\\\"></h2>\\r\\n\\t\\t\\t\\t<p data-bind=\\\"text: modalText\\\">\\r\\n\\t\\t\\t\\t</p>\\r\\n\\t\\t\\t\\t<div class=\\\"actions-container\\\">\\r\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: confirmModal\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tOk\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</button>\\r\\n\\r\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-white\\\" data-bind=\\\"click: closeModal\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tAvbryt\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<header class=\\\"description\\\">\\r\\n\\t\\t\\t\\t<h1>Permisjon</h1>\\r\\n\\t\\t\\t\\t<p>\\r\\n\\t\\t\\t\\t\\tHer får du en oversikt over dine permisjoner og muligheten til å legge til nye.\\r\\n\\t\\t\\t\\t</p>\\r\\n\\t\\t\\t\\t<p><a href=\\\"\\\" data-bind=\\\"attr: {href: links.absenceLink}\\\">Regelverket for permisjon finner du her</a></p>\\r\\n\\t\\t\\t</header>\\r\\n\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"calculator-leaves columns large-4 medium-12\\\">\\r\\n\\t\\t\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h3>Mine permisjoner</h3>\\r\\n\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"label-offset\\\"></div>\\r\\n\\t\\t\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko foreach: leaveItems -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<li class=\\\"clearfix\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"text-input\\\" data-bind=\\\"css: {active: showInputLeave}, textInput: leaveYear\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"text-label active\\\" data-bind=\\\"css: {active: !showInputLeave()}\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tPermisjon <span data-bind=\\\"text: storedLeaveYear\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: showInputLeave -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: askDelete\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tSlett\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: toggleChangeLeave\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tEndre\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: showInputLeave -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: cancelChangeLeave\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tAvbryt\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: submitChangeLeave\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tLagre\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"calculator-leave-add columns large-7 medium-12\\\">\\r\\n\\t\\t\\t\\t\\t<header class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h3>Ny permisjon</h3>\\r\\n\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span>År</span>\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"text-input\\\" data-bind=\\\"textInput: newLeaveText\\\"/>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: addLeave\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tLegg til ny permisjon\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t</div>\\r\\n      </div>\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  filter = require('lodash/filter'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization');\r\n\r\nfunction Notifier(params) {\r\n  var self = this;\r\n  self.API = params.api;\r\n\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  self.calculatorType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n\r\n  self.showSumOfHours = ko.observable(false);\r\n  self.showShortVersion = ko.observable(false);\r\n  self.sumOfRemainingHours = ko.observable(0);\r\n\r\n  // Used by the API call methods to detect if it was triggered by the user switching authorization type.\r\n  self.changeInAuthorizationType = false;\r\n\r\n  self.showCalculatorType = ko.observable(false);\r\n  // Only show the accountant and auditor tabs if the user is both types.\r\n  if (window.authorizedAccountant && window.authorizedAuditor) {\r\n    self.showCalculatorType(true);\r\n  }\r\n\r\n  self.categories = ko.observableArray([]);\r\n  if (params.categories === undefined) {\r\n    self.getCategories();\r\n    self.showShortVersion(true);\r\n    params.categories = ko.observableArray([]);\r\n  } else {\r\n    self.showShortVersion(false);\r\n    self.categories = params.categories;\r\n  }\r\n\r\n  self.bookKeeping = ko.observable(0);\r\n\r\n  self.hoursDone = ko.observable(0).syncWith('totalHoursDone', true);\r\n  self.unstructuredHoursDone = ko\r\n    .observable(0)\r\n    .syncWith('totalUnstructuredHoursDone', true);\r\n  self.hoursRequirement = ko.observable(0).syncWith('hoursRequirement', true);\r\n  self.hoursRequirementStructured = ko\r\n    .observable(0)\r\n    .syncWith('hoursRequirementStructured', true);\r\n\r\n  self.categoriesWithRemainingHours = ko.observableArray([]);\r\n  self.showNotification = ko.observable(false);\r\n\r\n  if (self.showShortVersion()) {\r\n    self.categories.subscribe(function() {\r\n      if (\r\n        params.categories === undefined ||\r\n        params.categories === null ||\r\n        params.categories.length === 0\r\n      ) {\r\n        params.categories(self.categories());\r\n      }\r\n      self.determineShowNotification(params.categories());\r\n    });\r\n  }\r\n  // I don't actually use this variable for anything other than detecting\r\n  // when there is a change in the four observables: hoursRequirement, hoursRequirementStructured, hoursDone, unstructuredHoursDone\r\n  self.difference = ko.computed(function() {\r\n    return (\r\n      self.hoursRequirementStructured() -\r\n      self.hoursDone() +\r\n      (self.hoursRequirement() -\r\n        self.hoursDone() -\r\n        self.unstructuredHoursDone())\r\n    );\r\n  });\r\n\r\n  // So when there is a change, we can calculate if we should show the notification.\r\n  self.difference.subscribe(function() {\r\n    self.determineShowNotification(params.categories());\r\n  });\r\n\r\n  // Initialize.\r\n  if (!self.showShortVersion()) {\r\n    self.determineShowNotification(params.categories());\r\n  }\r\n}\r\n\r\nNotifier.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\n// Calculates if we should show the notification or not and sets the showNotification observable accordingly.\r\nNotifier.prototype.determineShowNotification = function(categories) {\r\n  var tmpCategories = this.findCategoriesWithRemainingHours(categories);\r\n  this.categoriesWithRemainingHours(\r\n    this.calculateRemainingHoursForCategories(tmpCategories)\r\n  );\r\n  if (this.categoriesWithRemainingHours().length > 0)\r\n    if (this.hoursDone() > this.hoursRequirement()) {\r\n      // Has the user done more hours than is required?\r\n      // If we do have some categories that are still missing hours we want to show the notification.\r\n      if (this.categoriesWithRemainingHours().length > 0) {\r\n        this.showNotification(true);\r\n        if (\r\n          this.categoriesWithRemainingHours().length > 1 &&\r\n          this.showShortVersion()\r\n        ) {\r\n          this.showSumOfHours(true);\r\n          var sum = 0;\r\n          this.sumOfRemainingHours(sum);\r\n        }\r\n      } else {\r\n        this.showNotification(false);\r\n      }\r\n    } else {\r\n      this.showNotification(true);\r\n      if (\r\n        this.categoriesWithRemainingHours().length > 1 &&\r\n        this.showShortVersion()\r\n      ) {\r\n        this.showSumOfHours(true);\r\n        var hours = 0;\r\n        for (var j = 0; j < this.categoriesWithRemainingHours().length; j++) {\r\n          // We do not want the Bookkeeping subcategory to be included in the sum.\r\n          hours += this.categoriesWithRemainingHours()[\r\n            j\r\n          ].MissingHoursFromCurrentCategory();\r\n        }\r\n        this.sumOfRemainingHours(hours);\r\n      }\r\n    }\r\n  this.categoriesWithRemainingHours.valueHasMutated();\r\n};\r\n\r\n// Finds all the categories that have less hours than what is required.\r\nNotifier.prototype.findCategoriesWithRemainingHours = function(categories) {\r\n  categories = categories.slice(0);\r\n  return categories;\r\n};\r\n\r\nNotifier.prototype.calculateRemainingHoursForCategories = function(categories) {\r\n  return filter(categories, function(category) {\r\n    if (category.MissingHoursFromCurrentCategory) {\r\n      category.MissingHoursFromCurrentCategory(\r\n        category.Requirement - category.TotalHoursDone()\r\n      );\r\n    } else {\r\n      category.MissingHoursFromCurrentCategory = ko.observable(\r\n        category.Requirement - category.TotalHoursDone()\r\n      );\r\n    }\r\n\r\n    return category.MissingHoursFromCurrentCategory() > 0;\r\n  });\r\n};\r\n\r\nNotifier.prototype.getCategories = function() {\r\n  var url =\r\n    this.API.categoryHours +\r\n    '?authorizationType=' +\r\n    encodeURIComponent(this.calculatorType());\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      var categories = response.Categories;\r\n\r\n      if (this.changeInAuthorizationType || this.categories().length === 0) {\r\n        this.changeInAuthorizationType = false;\r\n        // We want to replace all the \"normal\" values with observables. This way we can detect changes\r\n        // and update the values in the child component without actually reloading the whole component.\r\n        for (var i = 0; i < categories.length; i++) {\r\n          categories[i].TotalHoursDone = ko.observable(\r\n            categories[i].TotalStructuredHoursDone +\r\n              categories[i].TotalUnstructuredHoursDone\r\n          );\r\n          categories[i].DoneStructuredHoursFromCurrentCategory = ko.observable(\r\n            categories[i].DoneStructuredHoursFromCurrentCategory\r\n          );\r\n          categories[\r\n            i\r\n          ].DoneUnstructuredHoursFromCurrentCategory = ko.observable(\r\n            categories[i].DoneUnstructuredHoursFromCurrentCategory\r\n          );\r\n          categories[i].PlannedHoursFromCurrentCategory = ko.observable(\r\n            categories[i].PlannedHoursFromCurrentCategory\r\n          );\r\n          categories[i].Requirement = ko.observable(categories[i].Requirement);\r\n          categories[i].UpdateCounter = ko.observable(0);\r\n        }\r\n        this.categories(categories);\r\n      } else {\r\n        // Only change the values since we already have the categories.\r\n        for (i = 0; i < this.categories().length; i++) {\r\n          this.categories()[i].TotalHoursDone(\r\n            categories[i].TotalStructuredHoursDone +\r\n              categories[i].TotalUnstructuredHoursDone\r\n          );\r\n          this.categories()[i].DoneStructuredHoursFromCurrentCategory(\r\n            categories[i].DoneStructuredHoursFromCurrentCategory\r\n          );\r\n          this.categories()[i].DoneUnstructuredHoursFromCurrentCategory(\r\n            categories[i].DoneUnstructuredHoursFromCurrentCategory\r\n          );\r\n          this.categories()[i].PlannedHoursFromCurrentCategory(\r\n            categories[i].PlannedHoursFromCurrentCategory\r\n          );\r\n          this.categories()[i].Requirement(categories[i].Requirement);\r\n          this.categories()[i].UpdateCounter(\r\n            this.categories()[i].UpdateCounter() + 1\r\n          );\r\n        }\r\n      }\r\n      this.categories.valueHasMutated();\r\n      // Could trigger get courses here if i get endYear in the categories.\r\n    }.bind(this),\r\n    function(response) {\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: notifier.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = Notifier;\r\n","module.exports = \"<!-- ko if: showNotification -->\\r\\n  <!-- ko if: showShortVersion && showSumOfHours -->\\r\\n    <div>\\r\\n      Du mangler <span class=\\\"notify-category-hour text-large notification-white\\\" data-bind=\\\"text: sumOfRemainingHours()\\\"></span> oppdateringstimer i ulike kategorier. Se Min Oppdatering for detaljer.\\r\\n    </div>\\r\\n  <!-- /ko -->\\r\\n  <!-- ko ifnot: showSumOfHours -->\\r\\n    <div><p>Du mangler fortsatt noen timer innenfor:</p></div>\\r\\n    <ul data-bind=\\\"foreach: categoriesWithRemainingHours\\\">\\r\\n\\t\\t  <li>\\r\\n\\t\\t\\t  <div class=\\\"columns large-6 small-12 no-padding\\\">\\r\\n\\t\\t\\t\\t  <h4 class=\\\"notify-category\\\" data-bind=\\\"text: Name\\\"></h4>\\r\\n\\t\\t\\t  </div>\\r\\n\\t\\t\\t  <div class=\\\"columns large-2 small-12 end\\\">\\r\\n\\t\\t\\t\\t  <span class=\\\"notify-category-hour text-large notification-white\\\" data-bind=\\\"text: '-' + MissingHoursFromCurrentCategory()\\\"></span>\\r\\n\\t\\t\\t  </div>\\r\\n\\t\\t  </li>\\r\\n\\t  </ul>\\r\\n  <!-- /ko -->\\r\\n<!-- /ko -->\"","function TimeUnit(params) {\r\n  var type = params.type || 0;\r\n  this.classType = 'timeunit-' + type;\r\n}\r\n\r\nmodule.exports = TimeUnit;\r\n","module.exports = \"<div class=\\\"timeunit\\\" data-bind=\\\"css: classType\\\">\\r\\n\\t<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\"?>\\r\\n\\t<svg width=\\\"15px\\\" height=\\\"15px\\\" viewBox=\\\"0 0 15 15\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\r\\n\\r\\n\\t\\t<title>Klokke</title>\\r\\n\\t\\t<defs></defs>\\r\\n\\t\\t<g id=\\\"\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\r\\n\\t\\t\\t<g class=\\\"clock\\\" sketch:type=\\\"MSArtboardGroup\\\" fill=\\\"#FF6532\\\">\\r\\n\\t\\t\\t\\t<path d=\\\"M7.5,0 C3.35785194,0 0,3.34972155 0,7.48184019 C0,11.6139588 3.35785194,14.9636804 7.5,14.9636804 C11.6421481,14.9636804 15,11.6139588 15,7.48184019 C15,3.34972155 11.6421481,0 7.5,0 L7.5,0 Z M12.148034,8.80750605 L6.46237864,8.80750605 L6.46237864,2.78451574 L7.99150485,2.78451574 L7.99150485,7.28208232 L12.148034,7.28208232 L12.148034,8.80750605 L12.148034,8.80750605 Z\\\" id=\\\"Imported-Layers-Copy-173\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\r\\n\\t\\t\\t</g>\\r\\n\\t\\t</g>\\r\\n\\t</svg>\\r\\n</div>\"","var ko = require('knockout'),\r\n  HOURS_TYPE = require('_js/constants/hours'),\r\n  HOURS_COLOR = require('_js/constants/hours-color');\r\n\r\nfunction TimeUnits(params) {\r\n  var currentYear = new Date().getFullYear();\r\n  this.year = params.year;\r\n  this.timeDone = ko.observable(params.hours.done);\r\n  this.timePlanned = ko.observable(params.hours.planned);\r\n  this.timeRequired = ko.observable(params.hours.required);\r\n\r\n  if (currentYear !== this.year) {\r\n    this.timeMissing = ko.observable(0);\r\n    this.shopping = ko.observable(0);\r\n    this.timeRequired(0);\r\n  } else {\r\n    this.shopping = ko.observable(params.hours.shopping);\r\n    this.timeMissing = ko.computed(function() {\r\n      // // Incase you have done more hours than required.\r\n      if (params.hours.missing < 0) {\r\n        return 0;\r\n      } else {\r\n        return params.hours.missing;\r\n      }\r\n    }, this);\r\n  }\r\n\r\n  this.blocks = ko.observableArray([]);\r\n\r\n  // Create the timeunits and add it to the visual blocks.\r\n  var arr = [].concat(\r\n    this.createTimeUnits(HOURS_TYPE.DONE, this.timeDone()),\r\n    this.createTimeUnits(HOURS_TYPE.PLANNED, this.timePlanned()),\r\n    this.createTimeUnits(HOURS_TYPE.SHOPPING, this.shopping()),\r\n    this.createTimeUnits(HOURS_TYPE.EMPTY, this.timeMissing())\r\n  );\r\n  this.blocks(arr);\r\n}\r\n\r\nTimeUnits.prototype.createTimeUnits = function(unitType, amount) {\r\n  var arr = [],\r\n    hasHalfHour = false;\r\n\r\n  // If we have half an hour.\r\n  if (amount % 1 === 0.5) {\r\n    hasHalfHour = true;\r\n    amount = Math.floor(amount);\r\n  }\r\n\r\n  for (var i = 0; i < amount; i++) {\r\n    arr.push(\r\n      new TimeUnit({\r\n        unitType: unitType,\r\n        isHalf: false\r\n      })\r\n    );\r\n  }\r\n\r\n  if (hasHalfHour) {\r\n    arr.push(\r\n      new TimeUnit({\r\n        unitType: unitType,\r\n        isHalf: true\r\n      })\r\n    );\r\n  }\r\n\r\n  return arr;\r\n};\r\n\r\n// A single unit representing an hour (or half an hour).\r\nfunction TimeUnit(settings) {\r\n  this.settings = settings || {};\r\n  this.width = ko.observable(15 + 'px');\r\n  this.height = ko.observable(15 + 'px');\r\n  this.margin = Math.ceil(this.width / 4) + 'px';\r\n  this.rowNumber = settings.rowNumber;\r\n  this.rowIndex = settings.rowIndex;\r\n  // If the unit should represent a full hour or half an hour.\r\n  this.isHalf = ko.observable(settings.isHalf);\r\n\r\n  this.unitType = ko.observable(settings.unitType);\r\n  this.background = 'url(assets/icons/timeunit.svg) no-repeat';\r\n  this.classType = ko.computed(function() {\r\n    return 'timeunit-' + this.unitType();\r\n  }, this);\r\n  this.backgroundColor = ko.computed(function() {\r\n    return HOURS_COLOR[this.unitType()];\r\n  }, this);\r\n\r\n  this.type = HOURS_TYPE.DONE;\r\n}\r\n\r\nmodule.exports = TimeUnits;\r\n","var HOURS_COLOR = [\r\n  '#32CBCB', // HOURS_TYPE.DONE\r\n  '#FF6531', // HOURS_TYPE.PLANNED\r\n  '#fecb2f', // HOURS_TYPE.SHOPPING\r\n  '#545252' // HOURS_TYPE.EMPTY\r\n];\r\n\r\nmodule.exports = HOURS_COLOR;\r\n","module.exports = \"<div class=\\\"timeunits\\\" data-bind=\\\"foreach: blocks\\\">\\r\\n\\t<div class=\\\"timeunit\\\" data-bind=\\\"style: {  width: width, height: height, marginRight: margin}, css: classType\\\">\\r\\n\\t\\t<!-- ko ifnot: isHalf -->\\r\\n\\t\\t<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\"?>\\r\\n\\t\\t<svg width=\\\"15px\\\" height=\\\"15px\\\" viewBox=\\\"0 0 15 15\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\r\\n\\t\\t\\t<title>Klokke</title>\\r\\n\\t\\t\\t<defs></defs>\\r\\n\\t\\t\\t<g id=\\\"\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\r\\n\\t\\t\\t\\t<g class=\\\"clock\\\" sketch:type=\\\"MSArtboardGroup\\\" fill=\\\"#FF6532\\\">\\r\\n\\t\\t\\t\\t\\t<path d=\\\"M7.5,0 C3.35785194,0 0,3.34972155 0,7.48184019 C0,11.6139588 3.35785194,14.9636804 7.5,14.9636804 C11.6421481,14.9636804 15,11.6139588 15,7.48184019 C15,3.34972155 11.6421481,0 7.5,0 L7.5,0 Z M12.148034,8.80750605 L6.46237864,8.80750605 L6.46237864,2.78451574 L7.99150485,2.78451574 L7.99150485,7.28208232 L12.148034,7.28208232 L12.148034,8.80750605 L12.148034,8.80750605 Z\\\" id=\\\"Imported-Layers-Copy-173\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\r\\n\\t\\t\\t\\t</g>\\r\\n\\t\\t\\t</g>\\r\\n\\t\\t</svg>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: isHalf -->\\r\\n\\t\\t<div class=\\\"timeunit-half\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n</div>\\r\\n\\r\\n\"","var ko = require('knockout'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization'),\r\n  HOURS_TYPE = require('_js/constants/hours'),\r\n  filter = require('lodash/filter');\r\nrequire('knockout-postbox');\r\n\r\nfunction CalculatorYear(params) {\r\n  this.hasLeave = params.data.Leave;\r\n  this.year = ko.observable(params.data.Year);\r\n\r\n  this.yearLength = params.yearLength;\r\n  this.typeDisplay = ko.observable('done');\r\n  this.excludeTimeunits = params.excludeTimeunits;\r\n  this.currentYear = new Date().getFullYear();\r\n\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  this.AuthorizationType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  this.MAX_HOURS = ko.observable(80).subscribeTo('hoursRequirement', true);\r\n  this.hoursDone = ko.observable(params.data.TotalStructuredHoursDone);\r\n  this.unstructuredHoursDone = ko.observable(\r\n    params.data.TotalUnstructuredHoursDone\r\n  );\r\n  this.hoursPlanned = ko.observable(params.data.TotalHoursPlanned);\r\n  this.hoursShopping = ko.observable(0);\r\n\r\n  // If the year displayed is equal to the current year we should get the total hours done and planned\r\n  // for the period and calculate how many hours are missing and must be completed within the year.\r\n  if (this.year() >= this.currentYear) {\r\n    this.totalHoursDone = ko\r\n      .observable(params.data.TotalHoursDone)\r\n      .subscribeTo('totalHoursDone', true);\r\n    this.totalUnstructuredHoursDone = ko\r\n      .observable(params.data.TotalUnstructuredHoursDone)\r\n      .subscribeTo('totalUnstructuredHoursDone', true);\r\n    this.totalHoursPlanned = ko\r\n      .observable(params.data.TotalHoursPlanned)\r\n      .subscribeTo('totalHoursPlanned', true);\r\n    this.hoursMissing = ko.computed(function() {\r\n      var val =\r\n        this.MAX_HOURS() -\r\n        this.totalHoursDone() -\r\n        this.totalHoursPlanned() -\r\n        this.hoursShopping();\r\n      if (val < 0) {\r\n        val = 0;\r\n      }\r\n      return val;\r\n    }, this);\r\n  } else {\r\n    this.hoursMissing = ko.computed(function() {\r\n      return 0;\r\n    });\r\n  }\r\n\r\n  // An object that is passed to timeunits component.\r\n  this.hours = ko.computed(function() {\r\n    return {\r\n      done: params.data.TotalStructuredHoursDone,\r\n      doneUnstructured: params.data.TotalUnstructuredHoursDone,\r\n      planned: params.data.TotalHoursPlanned,\r\n      shopping: this.hoursShopping(),\r\n      required: this.MAX_HOURS(),\r\n      missing: this.hoursMissing()\r\n    };\r\n  }, this);\r\n\r\n  this.totalHours = ko.observable(params.data.TotalStructuredHoursDone);\r\n  this.totalUnstructuredHours = ko.observable(\r\n    params.data.TotalUnstructuredHoursDone\r\n  );\r\n  this.hoursDisplay = ko.observable(this.hoursDone());\r\n\r\n  // Listen to updates in the shopping cart.\r\n  ko.postbox.subscribe(\r\n    'shoppingCartUpdated',\r\n    function(newCart) {\r\n      var courses = newCart.courses;\r\n      if (courses.length > 0) {\r\n        this.setHoursShopping(courses);\r\n      } else {\r\n        this.hoursShopping(0);\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n\r\n  // Listen to which hour type we should display.\r\n  ko.postbox.subscribe(\r\n    'showHoursType',\r\n    function(type) {\r\n      if (type === HOURS_TYPE.EMPTY) {\r\n        this.hoursDisplay(this.hoursMissing());\r\n        this.typeDisplay('remaining');\r\n      } else if (type === HOURS_TYPE.PLANNED) {\r\n        this.hoursDisplay(this.hoursPlanned());\r\n        this.typeDisplay('progress');\r\n      } else if (type === HOURS_TYPE.SHOPPING) {\r\n        this.hoursDisplay(this.hoursShopping());\r\n        this.typeDisplay('shopping');\r\n      } else {\r\n        this.hoursDisplay(this.hoursDone());\r\n        this.typeDisplay('done');\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n\r\n  // Listen to changes in the hours.\r\n  ko.postbox.subscribe(\r\n    'hoursDone',\r\n    function(newValue) {\r\n      this.hoursDone(this.addHoursForYear(newValue, this.hoursDone()));\r\n    },\r\n    this,\r\n    true\r\n  );\r\n  ko.postbox.subscribe(\r\n    'hoursPlanned',\r\n    function(newValue) {\r\n      this.hoursPlanned(this.addHoursForYear(newValue, this.hoursPlanned()));\r\n    },\r\n    this,\r\n    true\r\n  );\r\n  ko.postbox.subscribe(\r\n    'hoursShopping',\r\n    function(newValue) {\r\n      this.hoursShopping(this.addHoursForYear(newValue, this.hoursShopping()));\r\n    },\r\n    this,\r\n    true\r\n  );\r\n  ko.postbox.subscribe(\r\n    'hoursRequirement',\r\n    function(newValue) {\r\n      this.MAX_HOURS(this.addHoursForYear(newValue, this.MAX_HOURS()));\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nCalculatorYear.prototype.addHoursForYear = function(data, oldValue) {\r\n  // If the data is for this year we can use the hours specified by data.\r\n  if (data.year === this.year()) {\r\n    return data.hours;\r\n  }\r\n  // If not, we should stick with the value we already have.\r\n  else {\r\n    return oldValue;\r\n  }\r\n};\r\n\r\nCalculatorYear.prototype.setHoursShopping = function(courses) {\r\n  // var multiplier = add ? 1 : -1;\r\n  var hours = 0;\r\n  courses.forEach(\r\n    function(course) {\r\n      var year;\r\n      // Check if date is defined. If it is not, we'll just set it to the current year.\r\n      if (course.Date === undefined || course.Date === null) {\r\n        year = new Date().getFullYear();\r\n      } else {\r\n        year = new Date(course.Date).getFullYear();\r\n      }\r\n      // We only want to update this component if the course year is equal to this year.\r\n      if (year === this.year()) {\r\n        var filteredCredits = filter(course.AuthorizationCredits, {\r\n          AuthorizationType: this.AuthorizationType()\r\n        });\r\n        filteredCredits.forEach(\r\n          function(credit) {\r\n            hours += parseFloat(credit.Hours, 10);\r\n          }.bind(this)\r\n        );\r\n      }\r\n    }.bind(this)\r\n  );\r\n\r\n  this.hoursShopping(hours);\r\n};\r\n\r\nCalculatorYear.prototype.triggerInfoPopup = function() {\r\n  ko.postbox.publish('openPopup', {\r\n    modalTitle: 'Permisjon',\r\n    modalText:\r\n      'Tekst om permisjon og hvordan jeg legger til og fjerner/endrer år. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ut massa cursus, lacinia risus ut, pellentesque odio. Duis dapibus ante non nisl faucibus posuere.'\r\n  });\r\n};\r\n\r\nmodule.exports = CalculatorYear;\r\n","module.exports = \"<div class=\\\"period-year\\\" data-bind=\\\"css: { 'period-leave': hasLeave }, style: { width: yearLength() + 'px' }\\\">\\r\\n\\t<div class=\\\"period-year-text\\\">\\r\\n\\t\\t<span data-bind=\\\"text: year\\\"></span>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"period-year-hours\\\">\\r\\n\\t\\t<span data-bind=\\\"if: hasLeave\\\">Permisjon</span>\\r\\n\\t\\t<div class=\\\"period-year-hours-timeunits\\\" data-bind=\\\"visible: hours().done > 0\\\">\\r\\n\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 0}} --><!-- /ko -->\\r\\n\\t\\t\\t<span class=\\\"hours-done\\\" data-bind=\\\"text: hours().done\\\"></span>\\r\\n\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hours().done > 0\\\">Kurstimer</span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"period-year-hours-timeunits\\\" data-bind=\\\"visible: hours().doneUnstructured > 0\\\">\\r\\n\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 4}} --><!-- /ko -->\\r\\n\\t\\t\\t<span class=\\\"hours-done\\\" data-bind=\\\"text: hours().doneUnstructured\\\"></span>\\r\\n\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hours().doneUnstructured > 0\\\">Ikke-strukturerte</span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"period-year-hours-timeunits\\\" data-bind=\\\"visible: hours().planned > 0\\\">\\r\\n\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 1}} --><!-- /ko -->\\r\\n\\t\\t\\t<span class=\\\"hours-planned\\\" data-bind=\\\"text: hours().planned\\\"> </span>\\r\\n\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hours().planned > 0\\\">Påmeldte timer</span>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"period-year-hours-timeunits\\\" data-bind=\\\"visible: hours().shopping > 0\\\">\\r\\n\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 2}} --><!-- /ko -->\\r\\n\\t\\t\\t<span class=\\\"hours-done\\\" data-bind=\\\"text: hours().shopping\\\"></span>\\r\\n\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hours().shopping > 0\\\">Timer i handlekurven</span>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<!-- ko ifnot: excludeTimeunits -->\\r\\n\\t\\t<div class=\\\"timeunits-container\\\"></div>\\r\\n\\t<!-- /ko -->\\r\\n\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  assign = require('lodash/assign'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization');\r\n\r\nfunction CalculatorYears(params) {\r\n  var self = this;\r\n  this.excludeTimeunits = params.excludeTimeunits;\r\n  this.period = ko.observableArray([]).subscribeTo('periodYears', true);\r\n  this.downloadFileUrl = params.downloadFileUrl;\r\n\r\n  if (params.parent) {\r\n    this.API = params.parent.API;\r\n  }\r\n  this.testIndex = 1;\r\n\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  this.calculatorType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n\r\n  this.endYear = ko.observable(0).subscribeTo('currentEndYear', true);\r\n\r\n  this.startActiveIndex = 0;\r\n\r\n  // Create the year range for the period. Maximum year is + 8 years from the current year.\r\n  var maxYear = new Date().getFullYear() + 8;\r\n  this.staticAllYears = [];\r\n  for (var tmpYear = 2003; tmpYear < maxYear; tmpYear++) {\r\n    this.staticAllYears.push({ Year: tmpYear, Active: false, Leave: false });\r\n  }\r\n\r\n  this.fullPeriod = ko.observableArray(this.staticAllYears);\r\n\r\n  this.isLoading = ko.observable(true).subscribeTo('periodYearsLoading', true);\r\n\r\n  this.showFuture = params.showFuture || false;\r\n  this.showDocumentationDate = params.showDocumentationDate || false;\r\n  this.mobileView = params.mobileView || false;\r\n\r\n  // Use the width of the entire document on mobile.\r\n  // Otherwise use the container as the width.\r\n  this.documentWidth = this.mobileView\r\n    ? $(document.body).width()\r\n    : $('.year-container').width() - 1;\r\n\r\n  // We assume the standard amount of years to display is three. Therefore we calculate the length of each year/period\r\n  // as such.\r\n  this.periodLength = ko.observable(this.documentWidth / 3);\r\n\r\n  // Overkill in length, but should work.\r\n  this.containerWidth = ko.observable(\r\n    this.documentWidth * this.fullPeriod().length\r\n  );\r\n\r\n  // The start position of the visual period.\r\n  this.position = ko.observable(0);\r\n\r\n  // The visual period is the currently active period within fullPeriod.\r\n  this.visualPeriod = ko.computed(function() {\r\n    var firstPeriod = this.period()[0];\r\n\r\n    if (this.mobileView) {\r\n      return this.period();\r\n    }\r\n    if (firstPeriod && firstPeriod.Leave && firstPeriod.TotalHoursDone === 0) {\r\n      return this.period().slice(1);\r\n    } else {\r\n      return this.period();\r\n    }\r\n  }, this);\r\n\r\n  this.visualPeriod.subscribe(this.visualPeriodChange, this);\r\n  this.visualPeriodChange();\r\n\r\n  if (this.showDocumentationDate) {\r\n    this.documentationDate = ko.computed(function() {\r\n      var period = this.period();\r\n      if (period.length < 1) {\r\n        return '';\r\n      }\r\n      return (\r\n        'Dokumentasjonsdato: 31.12.' +\r\n        this.period()[this.period().length - 1].Year\r\n      );\r\n    }, this);\r\n  }\r\n\r\n  this.authorizationDate = params.authorizationDate;\r\n  this.showAuthorizationDate = params.showAuthorizationDate;\r\n  this.nextYear = ko.observable(new Date().getFullYear() + 1);\r\n  this.showFuture = ko.computed(function() {\r\n    var retValue = false;\r\n    // If our parent says it's ok we show the future.\r\n    if (params.showFuture) {\r\n      // Now we can actually check to see if there actually is any point in showing the future.\r\n      if (self.nextYear() > self.endYear()) {\r\n        return true;\r\n      }\r\n    }\r\n    return retValue;\r\n  });\r\n\r\n  this.hoursPlanned = ko.observable(0); //.subscribeTo('hoursPlanned', true);\r\n  this.hoursShopping = ko.observable(0).subscribeTo('hoursShopping', true);\r\n  this.nextHours = ko.computed(function() {\r\n    // For next year, we only want to display planned hours and hours in shopping cart.\r\n    return {\r\n      done: 0,\r\n      planned: this.hoursPlanned(),\r\n      shopping: this.hoursShopping(),\r\n      required: 0,\r\n      missing: 0\r\n    };\r\n  }, this);\r\n}\r\n\r\nCalculatorYears.prototype.visualPeriodChange = function() {\r\n  if (this.visualPeriod().length === 0) {\r\n    return;\r\n  }\r\n\r\n  var setIndex = false;\r\n  var periodIndex = 0;\r\n  var newArr = [];\r\n\r\n  for (var i = 0; i < this.fullPeriod().length; i++) {\r\n    // Check to see if the first position of the visualPeriod matches the current fullPeriod position\r\n    // (and setIndex is not set).\r\n    if (\r\n      !setIndex &&\r\n      this.fullPeriod()[i].Year === this.visualPeriod()[0].Year\r\n    ) {\r\n      this.startActiveIndex = i;\r\n      this.fullPeriod()[i].Active = true;\r\n      setIndex = true;\r\n      periodIndex++;\r\n      this.visualPeriod()[0].Active = true;\r\n      newArr.push(this.visualPeriod()[0]);\r\n    }\r\n    // If we still have matching visualPeriods with fullPeriod.\r\n    else if (\r\n      periodIndex < this.visualPeriod().length &&\r\n      this.fullPeriod()[i].Year === this.visualPeriod()[periodIndex].Year\r\n    ) {\r\n      this.fullPeriod()[i] = assign(\r\n        this.fullPeriod()[i],\r\n        this.visualPeriod()[periodIndex]\r\n      );\r\n      this.visualPeriod()[periodIndex].Active = true;\r\n      newArr.push(this.visualPeriod()[periodIndex]);\r\n      periodIndex++;\r\n    }\r\n    // When there's no match between visualPeriod and fullPeriod.\r\n    else {\r\n      var tmpItem = this.staticAllYears[i];\r\n      tmpItem.Active = false;\r\n      newArr.push(tmpItem);\r\n    }\r\n  }\r\n\r\n  this.fullPeriod(newArr);\r\n\r\n  // If we're on a mobile we want to show hint of the previous/next year to the visualPeriod.\r\n  if (this.mobileView) {\r\n    this.periodLength(this.documentWidth / (this.visualPeriod().length + 1));\r\n    this.position(\r\n      this.periodLength() * this.startActiveIndex - this.periodLength() * 0.5\r\n    );\r\n  }\r\n  // On desktop we only want to show the visualPeriod (plus the next year of the current year we're in).\r\n  else {\r\n    this.periodLength(this.documentWidth / this.visualPeriod().length);\r\n    this.position(this.periodLength() * this.startActiveIndex);\r\n  }\r\n};\r\n\r\nmodule.exports = CalculatorYears;\r\n","var assignValue = require('./_assignValue'),\n    copyObject = require('./_copyObject'),\n    createAssigner = require('./_createAssigner'),\n    isArrayLike = require('./isArrayLike'),\n    isPrototype = require('./_isPrototype'),\n    keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\nmodule.exports = assign;\n","module.exports = \"<!-- ko ifnot: mobileView -->\\r\\n<div class=\\\"columns large-12\\\">\\r\\n\\t<div class=\\\"year-period-label\\\">\\r\\n\\t\\tDenne perioden\\r\\n\\t</div>\\r\\n\\t<div class=\\\"row\\\" data-bind=\\\"ifnot: excludeTimeunits\\\">\\r\\n\\t\\t<div class=\\\"columns large-12 no-padding period-detail\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-6 no-padding authorization-detail pull-left\\\" data-bind=\\\"css: { 'is-faded': isLoading }, visible: showAuthorizationDate\\\">\\r\\n\\t\\t\\t\\tAutorisasjonsdato: <span data-bind=\\\"text: authorizationDate\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"columns large-6 no-padding years-detail pull-right\\\" data-bind=\\\"css: { 'is-faded': isLoading }\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: documentationDate\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"row year-overview\\\">\\r\\n\\t\\t<div class=\\\"year-container columns no-padding large-9\\\" data-bind=\\\"css: { 'is-faded': isLoading }\\\">\\r\\n\\t\\t\\t<!-- ko if: isLoading -->\\r\\n\\t\\t\\t\\t<div class=\\\"loader-container centered-overlay\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"year-inner-container clearfix\\\" style=\\\"transition: transform 0.3s ease-out;\\\" data-bind=\\\"style: { width: containerWidth() + 'px', '-webkit-transform': 'translateX(-' + position() + 'px)', transform: 'translateX(-' + position() + 'px)' }, css: { 'is-loading': isLoading}\\\">\\r\\n\\t\\t\\t\\t<!-- ko foreach: fullPeriod -->\\r\\n\\t\\t\\t\\t\\t<!-- ko component: {name: 'calculator-year', params: {data: $data, excludeTimeunits: $parent.excludeTimeunits,yearLength: $parent.periodLength } } --><!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- ko if: showFuture -->\\r\\n\\t\\t<div class=\\\"year-container year-future columns no-padding large-3\\\">\\r\\n\\t\\t\\t<div class=\\\"period-year\\\" >\\r\\n\\t\\t\\t\\t<div class=\\\"period-year-text\\\">\\r\\n\\t\\t\\t\\t\\t<span data-bind=\\\"text: nextYear\\\"></span>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"period-year-hours\\\">\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"visible: hoursPlanned() > 0\\\">\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 1}} --><!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"hours-planned\\\" data-bind=\\\"text: hoursPlanned()\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hoursPlanned() > 1\\\">Timer</span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"hours-text\\\" data-bind=\\\"visible: hoursPlanned() === 1\\\">Time</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"timeunits-container\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ko component: {name: 'calculator-timeunits', params: {hours: nextHours(), year: nextYear()} } --><!-- /ko -->\\r\\n\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n\\t<div>\\r\\n\\t\\t<a class=\\\"white calculator-download\\\" href=\\\"#\\\" alt=\\\"Skriv ut valgt periode til pdf\\\"\\r\\n\\t\\t\\tdata-bind=\\\"attr: { href: downloadFileUrl }\\\">Skriv\\r\\n\\t\\t\\tut valgt periode til pdf</a>\\r\\n\\t</div>\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n<!-- ko if: mobileView -->\\r\\n\\t<!-- ko if: isLoading -->\\r\\n\\t\\t<div class=\\\"loader-container centered-overlay\\\">\\r\\n\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t</div>\\r\\n\\t<!-- /ko -->\\r\\n\\t<ul data-bind=\\\"style: { width: containerWidth() + 'px', '-webkit-transform': 'translateX(-' + position() + 'px)', transform: 'translateX(-' + position() + 'px)' }, css: { 'is-loading': isLoading}\\\">\\r\\n\\t\\t<!-- ko foreach: fullPeriod -->\\r\\n\\t\\t<li data-bind=\\\"style: { width: $parent.periodLength() + 'px' }, css: { 'is-active': Active , 'is-leave': Leave }\\\">\\r\\n\\t\\t\\t<div class=\\\"period-year-text\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: Year\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- ko if: Active -->\\r\\n\\t\\t\\t\\t<div class=\\\"period-year-hours\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ko if: Leave -->\\r\\n\\t\\t\\t\\t\\t\\t<span>Perm</span>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: TotalStructuredHoursDone > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"circle-done\\\"></span><span class=\\\"hours-type\\\" data-bind=\\\"text: TotalStructuredHoursDone\\\"></span> t\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: TotalUnstructuredHoursDone > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"circle-self-study\\\"></span><span class=\\\"hours-type\\\" data-bind=\\\"text: TotalUnstructuredHoursDone\\\"></span> t\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: TotalHoursPlanned > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"circle-progress\\\"></span><span class=\\\"hours-type\\\" data-bind=\\\"text: TotalHoursPlanned\\\"></span> t\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</li>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</ul>\\r\\n<!-- /ko -->\\r\\n\"","var ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nvar PAGE_TYPE = {\r\n  PERSONAL_INFO: 'registration-personal-info',\r\n  PERSONAL_STATUS: 'registration-info-member',\r\n  EMPLOYER: 'registration-employer',\r\n  ENROLL: 'registration-enroll',\r\n  AGENCY: 'registration-agency',\r\n  INSURANCE: 'registration-insurance',\r\n  CONFIRMATION: 'registration-confirmation',\r\n  END: 'registration-end'\r\n};\r\n\r\nvar PAGE_NAMES = {};\r\nPAGE_NAMES[PAGE_TYPE.PERSONAL_INFO] =\r\n  window.language.registrationPage.personalInfo;\r\nPAGE_NAMES[PAGE_TYPE.PERSONAL_STATUS] =\r\n  window.language.registrationPage.personalStatus;\r\nPAGE_NAMES[PAGE_TYPE.EMPLOYER] = window.language.registrationPage.employer;\r\nPAGE_NAMES[PAGE_TYPE.ENROLL] = window.language.registrationPage.applicant;\r\nPAGE_NAMES[PAGE_TYPE.AGENCY] = window.language.registrationPage.agency;\r\nPAGE_NAMES[PAGE_TYPE.INSURANCE] = window.language.registrationPage.insurance;\r\nPAGE_NAMES[PAGE_TYPE.CONFIRMATION] =\r\n  window.language.registrationPage.confirmation;\r\nPAGE_NAMES[PAGE_TYPE.END] = window.language.registrationPage.end;\r\n\r\nvar SIGNUP_TYPE = {\r\n  agency: 'Byråmedlemskap',\r\n  person: 'Personmedlemskap'\r\n};\r\n\r\nfunction RegistrationPages(params) {\r\n  var self = this;\r\n\r\n  self.$body = $('html, body');\r\n  self.STEP = { PERSONAL: 0, EMPLOYER: 1, AUTHORIZATION: 2, CONFIRMATION: 3 };\r\n\r\n  self.API = params.api;\r\n  self.links = params.links;\r\n  self.signuptype = params.signuptype;\r\n  self.text = params.text;\r\n  self.errorMessages = params.errorMessages;\r\n\r\n  self.steps = null;\r\n  self.headerSteps = ko.observableArray([]);\r\n  self.currentsignuptype = SIGNUP_TYPE[self.signuptype];\r\n\r\n  self.stepHistory = ko.observableArray([]);\r\n\r\n  if (\r\n    self.signuptype === 'person' ||\r\n    self.signuptype === 'studentandpractice'\r\n  ) {\r\n    self.steps = ko.observableArray([\r\n      PAGE_TYPE.PERSONAL_INFO,\r\n      PAGE_TYPE.PERSONAL_STATUS,\r\n      PAGE_TYPE.EMPLOYER,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n  } else if (self.signuptype === 'studentandpractice') {\r\n    self.steps = ko.observableArray([\r\n      PAGE_TYPE.PERSONAL_INFO,\r\n      PAGE_TYPE.PERSONAL_STATUS,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n  } else if (self.signuptype === 'agency') {\r\n    self.steps = ko.observableArray([\r\n      PAGE_TYPE.ENROLL,\r\n      PAGE_TYPE.AGENCY,\r\n      PAGE_TYPE.INSURANCE,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n  } else {\r\n    throw \"signuptype must be 'person' or 'agency'.\";\r\n  }\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (parsedRegData.steps !== undefined) {\r\n      this.steps(parsedRegData.steps);\r\n    }\r\n    if (parsedRegData.headerSteps !== undefined) {\r\n      this.headerSteps(parsedRegData.headerSteps);\r\n    }\r\n  } else {\r\n    this.setHeaderSteps();\r\n  }\r\n\r\n  self.steps.subscribe(function() {\r\n    self.setHeaderSteps();\r\n  });\r\n\r\n  self.currentStep = ko.observable(0);\r\n  self.mainContainer = $('.form-steps-container');\r\n  self.containers = $('.container-white');\r\n  self.maxHeight = ko.observable(0);\r\n\r\n  // Initialize the step.\r\n  if (window.location.hash.indexOf('#step=') === -1) {\r\n    window.location.hash = '#step=' + self.currentStep();\r\n  } else {\r\n    self.setHash();\r\n  }\r\n\r\n  self.currentStep.subscribe(function() {\r\n    window.location.hash = '#step=' + self.currentStep();\r\n  });\r\n\r\n  window.onhashchange = function() {\r\n    self.setHash();\r\n  };\r\n\r\n  this.trackStep('nextStep');\r\n}\r\n\r\nRegistrationPages.prototype.setHeaderSteps = function() {\r\n  var length = this.steps().length,\r\n    tmpArr = [];\r\n  // We do not want to include PAGE_TYPE.END in the headersteps.\r\n  // Currently all signuptypes have a PAGE_TYPE.END which means we\r\n  // can just set the length-1.\r\n  for (var i = 0; i < length - 1; i++) {\r\n    tmpArr.push(PAGE_NAMES[this.steps()[i]]);\r\n  }\r\n  this.headerSteps(tmpArr);\r\n  this.storeValues();\r\n};\r\n\r\nRegistrationPages.prototype.storeValues = function() {\r\n  this.storeValuesForStep('steps', this.steps());\r\n  this.storeValuesForStep('headerSteps', this.headerSteps());\r\n};\r\n\r\nRegistrationPages.prototype.storeValuesForStep = function(stepType, data) {\r\n  // 1: Get the registration data.\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n\r\n  // 2: If the data does not exist, create an empty object.\r\n  //    If it does exist, parse the information.\r\n  if (regData === undefined || regData === null) {\r\n    regData = {};\r\n  } else {\r\n    regData = JSON.parse(regData);\r\n  }\r\n\r\n  // 3: Update the stepType with the data to store.\r\n  regData[stepType] = data;\r\n\r\n  // 4: Update the lastUpdated date.\r\n  regData.lastUpdated = new Date().getTime();\r\n\r\n  // 5: Store the object in session storage.\r\n  sessionStorage.setItem('rn-registration', JSON.stringify(regData));\r\n};\r\n\r\nRegistrationPages.prototype.saveStep = function() {\r\n  // 1: Get the registration data.\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n\r\n  // 2: If the data does not exist, create an empty object.\r\n  //    If it does exist, parse the information.\r\n  if (regData === undefined || regData === null) {\r\n    regData = {};\r\n  } else {\r\n    regData = JSON.parse(regData);\r\n  }\r\n\r\n  // 3: Update the stepType with the data to store.\r\n  regData.currentStep = this.currentStep();\r\n\r\n  // 4: Update the lastUpdated date.\r\n  regData.lastUpdated = new Date().getTime();\r\n\r\n  // 5: Store the object in session storage.\r\n  sessionStorage.setItem('rn-registration', JSON.stringify(regData));\r\n};\r\n\r\nRegistrationPages.prototype.triggerModal = function() {\r\n  this.activeModal(!this.activeModal());\r\n};\r\n\r\nRegistrationPages.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nRegistrationPages.prototype.calculateHeight = function() {\r\n  // var newHeight = $(this.containers[this.currentStep()]).outerHeight();\r\n  var newHeight = $('.container-white').outerHeight();\r\n  // if (newHeight > parseInt(this.maxHeight(), 10)) {\r\n  this.maxHeight(newHeight + 'px');\r\n  // }\r\n};\r\n\r\nRegistrationPages.prototype.setHash = function() {\r\n  if (window.location.hash.indexOf('#step=') !== -1) {\r\n    var step = parseInt(window.location.hash.substring('#step='.length), 10);\r\n    var oldStep = this.currentStep();\r\n    this.currentStep(step);\r\n    // Only scroll to the top if we're moving forwards.\r\n    if (step >= oldStep) {\r\n      this.$body.animate({ scrollTop: 0 }, 200);\r\n    }\r\n  }\r\n};\r\n\r\nRegistrationPages.prototype.addInputControlForPage = function(inputFields) {\r\n  inputFields.on('keydown', function(e) {\r\n    // If it is submit/enter on normal text fields or submit on (input type number fields)/tab.\r\n    var keyCode = e.keyCode || e.which;\r\n    if (keyCode === 13 || keyCode === 9) {\r\n      inputFields.eq(inputFields.index(this)).blur();\r\n\r\n      if (inputFields.index(this) + 1 <= inputFields.length - 1) {\r\n        // I have to have a timeout here or else the input field will be focused before it can properly\r\n        // blur. Which means that on e.g. Android you will have the previous input prepended to the new\r\n        // input field.\r\n        window.setTimeout(\r\n          function() {\r\n            // If the user holds in shift (tab backwards).\r\n            var tmpNewField = null;\r\n            if (e.shiftKey) {\r\n              tmpNewField = inputFields.eq(inputFields.index(this) - 1);\r\n            } else {\r\n              tmpNewField = inputFields.eq(inputFields.index(this) + 1);\r\n            }\r\n            tmpNewField.focus();\r\n            if (tmpNewField.hasClass('selectized')) {\r\n              // Not the ideal solution, but I need to be able to trigger the selectize input.\r\n              // The selectize plugin has a div to simulate the dropdown and it is this div I attempt to click.\r\n              tmpNewField\r\n                .siblings('.selectize-control')\r\n                .find('.selectize-input')\r\n                .click();\r\n            }\r\n          }.bind(this),\r\n          10\r\n        );\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  });\r\n};\r\n\r\nRegistrationPages.prototype.removeInputControlForPage = function(inputFields) {\r\n  if (inputFields !== null) {\r\n    inputFields.off('keydown');\r\n  }\r\n};\r\n\r\nRegistrationPages.prototype.addSteps = function(index, steps) {\r\n  for (var i = steps.length - 1; i >= 0; i--) {\r\n    this.steps.splice(index, 0, steps[i]);\r\n  }\r\n  this.setHeaderSteps();\r\n};\r\n\r\nRegistrationPages.prototype.validateFields = function(fields) {\r\n  var isValid = true;\r\n\r\n  for (var i = 0; i < fields.length; i++) {\r\n    if (fields[i]() === undefined || fields[i]() === null) {\r\n      fields[i].hasError(true);\r\n    }\r\n    if (fields[i].hasError()) {\r\n      isValid = false;\r\n    }\r\n  }\r\n\r\n  return isValid;\r\n};\r\n\r\n/**\r\n * @param String type: Is either \"nextStep\" or \"previousStep\".\r\n */\r\nRegistrationPages.prototype.trackStep = function(type) {\r\n  window.dataLayer.push({\r\n    signupType: this.signuptype,\r\n    stepType: this.headerSteps()[this.currentStep()],\r\n    event: type\r\n  });\r\n};\r\n\r\nRegistrationPages.prototype.trackRegistrationSent = function() {\r\n  window.dataLayer.push({\r\n    signupType: this.signuptype,\r\n    stepType: PAGE_NAMES[PAGE_TYPE.END],\r\n    event: 'sendRegistrationButtonClicked'\r\n  });\r\n};\r\n\r\nRegistrationPages.prototype.previousStep = function() {\r\n  this.currentStep(this.currentStep() - 1);\r\n\r\n  // If we're back to the first step in agency signuptype, we need to revert back\r\n  // the steps and headersteps because they may change depending on the choice of the user.\r\n  if (this.currentStep() === 0 && this.signuptype === 'agency') {\r\n    this.steps([\r\n      PAGE_TYPE.ENROLL,\r\n      PAGE_TYPE.AGENCY,\r\n      PAGE_TYPE.INSURANCE,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n    this.setHeaderSteps();\r\n  }\r\n  this.trackStep('previousStep');\r\n};\r\n\r\nRegistrationPages.prototype.nextStep = function(skip) {\r\n  if (skip) {\r\n    this.currentStep(this.currentStep() + 1 + skip);\r\n  } else {\r\n    this.currentStep(this.currentStep() + 1);\r\n    if (this.currentStep() < this.headerSteps().length) {\r\n      this.trackStep('nextStep');\r\n    } else if (this.currentStep() == this.headerSteps().length) {\r\n      this.trackRegistrationSent();\r\n    }\r\n  }\r\n};\r\n\r\nRegistrationPages.prototype.nextStepSkip = function() {\r\n  this.currentStep(this.currentStep() + 1);\r\n};\r\n\r\nmodule.exports = RegistrationPages;\r\n","module.exports = \"<div class=\\\"purchase-steps registration\\\" data-bind=\\\"css: { removed: currentStep() === headerSteps().length }\\\">\\r\\n\\t<div class=\\\"row\\\">\\r\\n\\t\\t<div class=\\\"columns large-8 large-push-2\\\">\\r\\n\\t\\t\\t<div class=\\\"steps-container-desktop\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"steps-current\\\">\\r\\n\\t\\t\\t\\t\\t<h3 data-bind=\\\"text: headerSteps()[currentStep()]\\\"></h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<ul class=\\\"steps-desktop\\\" data-bind=\\\"foreach: headerSteps\\\">\\r\\n\\t\\t\\t\\t\\t<li data-bind=\\\"text: $index() + 1, css: { 'is-current': $parent.currentStep() == $index() }\\\"></li>\\r\\n\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"steps-container\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"steps-current\\\">\\r\\n\\t\\t\\t\\t\\t<h3 data-bind=\\\"text: headerSteps()[currentStep()]\\\"></h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<ul class=\\\"steps-mobile\\\" data-bind=\\\"foreach: headerSteps\\\">\\r\\n\\t\\t\\t\\t\\t<li data-bind=\\\"text: $index() + 1, css: { 'is-current': $parent.currentStep() == $index() }\\\"></li>\\r\\n\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n<div class=\\\"row\\\">\\r\\n\\t<div class=\\\"columns large-8 large-push-2 medium-12 small-12\\\">\\r\\n\\t\\t<div class=\\\"form-steps-container\\\" data-bind=\\\"style: { 'min-height': maxHeight() }\\\">\\r\\n\\t\\t\\t<!-- ko foreach: steps -->\\r\\n\\t\\t\\t\\t<!-- ko component: { name: $data, params: { parent: $parent, step: $index, api: $parent.API, links: $parent.links } } -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  SearchPostalCode = require('_js/search-postal-code');\r\n\r\nfunction RegistrationPersonalInfo(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n  self.API = params.api;\r\n\r\n  self.componentActive = false;\r\n  self.step = params.step;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n\r\n  self.$htmlBody = $('html, body');\r\n\r\n  self.currentInputField = 0;\r\n\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      var regData = sessionStorage.getItem('rn-registration');\r\n\r\n      if (regData !== undefined && regData !== null) {\r\n        var parsedRegData = JSON.parse(regData);\r\n        if (parsedRegData.personalInfo !== undefined) {\r\n          parsedRegData.personalInfo.person = null;\r\n          self.parent.storeValuesForStep(\r\n            'personalInfo',\r\n            parsedRegData.personalInfo\r\n          );\r\n        }\r\n      }\r\n      self.activateComponent();\r\n    } else {\r\n      self.deactivateComponent();\r\n    }\r\n  });\r\n\r\n  self.activeModal = ko.observable(false);\r\n  self.modalTitle = ko.observable('Er du bruker');\r\n  self.modalText = ko.observable(self.parent.text.alreadyUserInformation);\r\n  self.modalUsers = ko.observable(0);\r\n  self.modalUserConfirmation = ko.observable('1');\r\n  self.searchQuery = ko.observable();\r\n  self.results = ko.observableArray([]);\r\n  self.hasSearched = ko.observable(false);\r\n  self.resultOption = ko.observable(0);\r\n  self.isExistingUserMember = ko.computed(function() {\r\n    if (self.results().length <= 0) {\r\n      return false;\r\n    }\r\n    if (self.modalUsers() >= self.results().length) {\r\n      return false;\r\n    }\r\n    return (\r\n      self.results()[self.modalUsers()].IsMember &&\r\n      !self.results()[self.modalUsers()].IsAgencyLeaderMember\r\n    );\r\n  });\r\n\r\n  self.isExistingUserStudentOrTraineeMemberAndSignUpTypePerson = ko.computed(\r\n    function() {\r\n      if (self.results().length <= 0) {\r\n        return false;\r\n      }\r\n      if (self.modalUsers() >= self.results().length) {\r\n        return false;\r\n      }\r\n      return (\r\n        self.results()[self.modalUsers()].IsStudentOrTraineeMember &&\r\n        self.parent.signuptype === 'person'\r\n      );\r\n    }\r\n  );\r\n\r\n  self.searchPerson = function() {\r\n    var url =\r\n      self.API.getPersonById +\r\n      '?aktorId=' +\r\n      encodeURIComponent(self.searchQuery());\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.hasSearched(true);\r\n        self.results(data);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-personal-info.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n\r\n  self.givenName = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.surname = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  // Birthnumber / fødselsnummer / social security number\r\n  self.birthNumber = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isLength',\r\n        message:\r\n          self.parent.errorMessages.wrongNumberOfDigitsSocialSecurityNumber,\r\n        length: 11\r\n      },\r\n      { type: 'isNumber', message: self.parent.errorMessages.NotANumber },\r\n      {\r\n        type: 'isValidPersonNumber',\r\n        message: self.parent.errorMessages.invalidSocialSecurityNumber,\r\n        api: self.API.isValidPersonNumber\r\n      }\r\n    ]\r\n  });\r\n  self.mobileNumber = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.invalidPhoneNumber\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.email = ko.observable().extend({\r\n    required: [\r\n      { type: 'isOptional', message: 'optional' },\r\n      { type: 'isEmail', message: self.parent.errorMessages.invalidEmail }\r\n    ]\r\n  });\r\n  self.emailWork = ko.observable().extend({\r\n    required: [\r\n      { type: 'isEmail', message: self.parent.errorMessages.invalidEmail }\r\n    ]\r\n  });\r\n\r\n  self.postCareOf = ko.observable().extend({\r\n    required: [{ type: 'isOptional', message: 'optional' }]\r\n  });\r\n\r\n  self.postAddress = ko.observable().extend({\r\n    required: [{ type: 'isOptional', message: 'optional' }]\r\n  });\r\n  self.postalCode = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsPostalCode,\r\n        length: 4\r\n      }\r\n    ]\r\n  });\r\n  self.postalPlace = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.isBureauMemberOfRn = ko.observable('2');\r\n\r\n  self.requiredFields = [\r\n    self.givenName,\r\n    self.surname,\r\n    self.mobileNumber,\r\n    self.emailWork,\r\n    self.postalCode\r\n    // self.postalPlace\r\n  ];\r\n\r\n  if (self.parent.signuptype !== 'studentandpractice') {\r\n    self.requiredFields.push(self.birthNumber);\r\n  }\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (parsedRegData.personalInfo !== undefined) {\r\n      this.populateInputFromStore(parsedRegData.personalInfo);\r\n    }\r\n  }\r\n\r\n  var searchPostalCode = new SearchPostalCode(null, self.postalPlace);\r\n\r\n  self.postalCode.subscribe(function(val) {\r\n    searchPostalCode.searchForCity(val);\r\n  });\r\n}\r\n\r\nRegistrationPersonalInfo.prototype.afterMarkupRender = function() {\r\n  var self = this;\r\n  self.inputFields = $('.form-personal-info').find(':input:not([readonly])');\r\n\r\n  self.activateComponent();\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    self.componentActive = true;\r\n    self.parent.addInputControlForPage(self.inputFields);\r\n  }\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.deactivateComponent = function() {\r\n  var self = this;\r\n  // If the component is already deactivated we can just exit the function.\r\n  if (!self.componentActive) {\r\n    return;\r\n  }\r\n  // Only deactivate the component if the current step is not this step.\r\n  if (self.step() !== self.parent.currentStep()) {\r\n    self.componentActive = false;\r\n    self.parent.removeInputControlForPage(self.inputFields);\r\n  }\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.submitForm = function() {};\r\n\r\nRegistrationPersonalInfo.prototype.triggerModal = function() {\r\n  this.activeModal(!this.activeModal());\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.closeModal = function() {\r\n  this.hasSearched(false);\r\n  this.results([]);\r\n  this.activeModal(false);\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.populateInputFromStore = function(store) {\r\n  this.givenName(store.givenName);\r\n  this.surname(store.surname);\r\n  this.birthNumber(store.birthNumber);\r\n  this.mobileNumber(store.mobileNumber);\r\n  this.email(store.emailPrivate);\r\n  this.emailWork(store.email);\r\n  this.postCareOf(store.postCareOf);\r\n  this.postAddress(store.postAddress);\r\n  this.postalCode(store.postalCode);\r\n  this.postalPlace(store.postalPlace);\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.createStoreObject = function() {\r\n  var retObj = {\r\n    givenName: this.givenName(),\r\n    surname: this.surname(),\r\n    birthNumber: this.birthNumber(),\r\n    mobileNumber: this.mobileNumber(),\r\n    emailPrivate: this.email(),\r\n    email: this.emailWork(),\r\n    postCareOf: this.postCareOf(),\r\n    postAddress: this.postAddress(),\r\n    postalCode: this.postalCode(),\r\n    postalPlace: this.postalPlace()\r\n  };\r\n  if (this.hasSearched()) {\r\n    retObj.person = this.results()[this.modalUsers()];\r\n  } else {\r\n    retObj.person = undefined;\r\n  }\r\n\r\n  // Store all the observable values into an object.\r\n  return retObj;\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('personalInfo', this.createStoreObject());\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.validateInputOnStep = function() {\r\n  return this.parent.validateFields(this.requiredFields);\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.checkIfExistingUser = function() {\r\n  var self = this;\r\n  var url =\r\n    self.API.getPersonExists +\r\n    '?phoneNumber=' +\r\n    encodeURIComponent(self.mobileNumber()) +\r\n    '&email=' +\r\n    encodeURIComponent(self.emailWork());\r\n\r\n  if (self.birthNumber()) {\r\n    url += '&personNumber=' + encodeURIComponent(self.birthNumber());\r\n  }\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      self.hasSearched(true);\r\n      self.results(data);\r\n\r\n      if (data.length === 0) {\r\n        self.storeValues();\r\n        self.parent.nextStep();\r\n      } else {\r\n        self.activeModal(true);\r\n      }\r\n    },\r\n    function() {\r\n      // TODO: HANDLE ERROR;\r\n    }\r\n  );\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.modalNextStep = function() {\r\n  // 1: Store values.\r\n  this.storeValues();\r\n\r\n  // 2: Close the modal.\r\n  this.activeModal(false);\r\n\r\n  // 3: Continue to the next step.\r\n  this.parent.nextStep();\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-personal-info.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  // this.storeValues();\r\n\r\n  // 3: Check if user already exists.\r\n  this.checkIfExistingUser();\r\n\r\n  // 4: Continue if member does not exist.\r\n  // TODO.\r\n};\r\n\r\nRegistrationPersonalInfo.prototype.destroy = function() {};\r\n\r\nmodule.exports = RegistrationPersonalInfo;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Personopplysninger</h3>\\r\\n\\t</header>\\r\\n\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\t\\t<form name=\\\"personal-info\\\" class=\\\"form-personal-info\\\" data-bind=\\\"submit: submitForm\\\">\\r\\n\\r\\n\\t\\t\\t<!-- Note 1: I have to repeat the html here because if I have a \\\"ko if\\\" condition in the middle -->\\r\\n\\t\\t\\t<!-- of the form it screws up the tabindex (but not at the start of the form). -->\\r\\n\\r\\n\\t\\t\\t<!-- ko if: parent.signuptype !== 'studentandpractice' -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': givenName.hasError }\\\">Fornavn\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: givenName, valueUpdate: 'blur', css: { 'has-error': givenName.hasError, 'is-successful': givenName.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: givenName.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: givenName.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: givenName.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: givenName.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': surname.hasError }\\\">Etternavn\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: surname, valueUpdate: 'blur', css: { 'has-error': surname.hasError, 'is-successful': surname.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: surname.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: surname.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: surname.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: surname.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\" >\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': birthNumber.hasError }\\\">Fødselsnummer (11 siffer)\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"number\\\" placeholder=\\\"\\\" data-bind=\\\"value: birthNumber, valueUpdate: 'blur', css: { 'has-error': birthNumber.hasError, 'is-successful': (birthNumber.isSuccessful() && !birthNumber.isLoading()) }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: (birthNumber.isSuccessful() && !birthNumber.isLoading()) }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: birthNumber.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"loader validation-loading\\\" data-bind=\\\"css: {'is-loading': birthNumber.isLoading}\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: birthNumber.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: birthNumber.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- ko ifnot: parent.signuptype !== 'studentandpractice' -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': givenName.hasError }\\\">Fornavn\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: givenName, valueUpdate: 'blur', css: { 'has-error': givenName.hasError, 'is-successful': givenName.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: givenName.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: givenName.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: givenName.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: givenName.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': surname.hasError }\\\">Etternavn\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: surname, valueUpdate: 'blur', css: { 'has-error': surname.hasError, 'is-successful': surname.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: surname.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: surname.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: surname.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: surname.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /end Note 1 -->\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">Mobiltelefon\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"tel\\\" placeholder=\\\"\\\" data-bind=\\\"value: mobileNumber, valueUpdate: 'blur', css: { 'has-error': mobileNumber.hasError, 'is-successful': mobileNumber.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: mobileNumber.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: mobileNumber.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !mobileNumber.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: mobileNumber.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: mobileNumber.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': emailWork.hasError }\\\">E-post\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"email\\\" placeholder=\\\"\\\" data-bind=\\\"value: emailWork, valueUpdate: 'blur', css: { 'has-error': emailWork.hasError, 'is-successful': emailWork.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: emailWork.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: emailWork.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: emailWork.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: emailWork.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': email.hasError }\\\">E-post privat (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"email\\\" placeholder=\\\"\\\" data-bind=\\\"value: email, valueUpdate: 'blur', css: { 'has-error': email.hasError, 'is-successful': email.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: email.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: email.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: email.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: email.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postCareOf.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\tc/o (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: postCareOf, valueUpdate: 'blur', css: { 'has-error': postCareOf.hasError, 'is-successful': postCareOf.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: postCareOf.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: postCareOf.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: postCareOf.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: postCareOf.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postAddress.hasError }\\\">Privat adresse (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: postAddress, valueUpdate: 'blur', css: { 'has-error': postAddress.hasError, 'is-successful': postAddress.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: postAddress.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: postAddress.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: postAddress.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: postAddress.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-3\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\tPostnummer *\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"number\\\" data-bind=\\\"value: postalCode, valueUpdate: 'blur', css: { 'has-error': postalCode.hasError, 'is-successful': postalCode.isSuccessful }\\\" aria-required=\\\"true\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: postalCode.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: postalCode.hasError }\\\"></span>\\r\\n\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !postalCode.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: postalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: postalCode.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-4 end\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postalPlace.hasError }\\\">Poststed *\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input postal-place\\\" data-bind=\\\"value: postalPlace\\\" type=\\\"text\\\" aria-required=\\\"true\\\" readonly>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</form>\\r\\n\\r\\n\\t\\t<div class=\\\"row\\\" data-bind=\\\"afterMarkupRender: true\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6 right\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t<!-- ====================================================== -->\\r\\n\\t\\t<!-- MODAL CONTAINER (CHECK IF MEMBER/USER ALREADY EXISTS)  -->\\r\\n\\t\\t<!-- ====================================================== -->\\r\\n\\t\\t<div class=\\\"modal-container\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n\\t\\t\\t<div class=\\\"modal-overlay\\\"></div>\\r\\n\\t\\t\\t<div class=\\\"modal\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n\\t\\t\\t\\t<div class=\\\"info-circle\\\">?</div>\\r\\n\\t\\t\\t\\t<h2 data-bind=\\\"text: modalTitle\\\"></h2>\\r\\n\\t\\t\\t\\t<p data-bind=\\\"html: modalText\\\"></p>\\r\\n\\t\\t\\t\\t<div class=\\\"modal-form-container\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"block-grey\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<table class=\\\"table-simple\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<thead>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Velg</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Navn</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Mobilnummer</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>E-post</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</thead>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tbody>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko foreach: results -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-already-user\\\" data-bind=\\\"value: $index(), attr: { id: 'already-user-' + $index() }, checked: $parent.modalUsers\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'already-user-' + $index() }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: FirstName + ' ' + LastName\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: Phone\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: Email\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</tbody>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"inline\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-already-user\\\" data-bind=\\\"value: results().length, attr: { id: 'already-user-' + results().length }, checked: modalUsers\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'already-user-' + results().length }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"inline\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"\\\">Nei, jeg er ikke registrert fra før.</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: results().length === modalUsers() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<div data-bind=\\\"html: parent.text.cannotOverwriteMemberDataInformation\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: results().length === modalUsers() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: isExistingUserMember -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div data-bind=\\\"html: parent.text.userAlreadyMemberInformation\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: isExistingUserMember -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div data-bind=\\\"html: parent.text.overwriteMemberDataInformation\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: closeModal\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">Gå tilbake</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: modalUsers() < results().length -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: isExistingUserMember -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: modalNextStep\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: isExistingUserStudentOrTraineeMemberAndSignUpTypePerson -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: modalNextStep\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  PAGE_TYPE = require('_js/constants/registration-page-type');\r\n\r\nfunction RegistrationInfoMember(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n  self.API = params.api;\r\n\r\n  self.requiredFields = [];\r\n\r\n  self.componentActive = false;\r\n  self.step = params.step;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n\r\n  self.inputFields = $('.form-info-member').find(':input');\r\n  self.currentInputField = 0;\r\n\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n    } else {\r\n      self.deactivateComponent();\r\n    }\r\n  });\r\n\r\n  self.showBureauMemberText = ko.observable(false);\r\n  self.isBureauMemberOfRn = ko.observable('false'); // Should convert to boolean?\r\n  self.isBureauMemberOfRn.subscribe(function(value) {\r\n    if (value === 'true') {\r\n      self.showBureauMemberText(true);\r\n    } else {\r\n      self.showBureauMemberText(false);\r\n    }\r\n  });\r\n\r\n  self.positionLevelTmp = 0;\r\n  self.positionLevelOptions = ko.observableArray();\r\n  self.positionLevel = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isPositiveNumber',\r\n        message: self.parent.errorMessages.itemFromListNotChosen\r\n      }\r\n    ]\r\n  });\r\n  self.workTitle = ko.observable();\r\n  self.otherRoles = ko.observable('None');\r\n  self.recruiter = ko.observable().extend({\r\n    required: [\r\n      { type: 'isOptional', message: 'optional' },\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsMembershipNumber,\r\n        length: 8\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.isStudentOrTrainee = ko.observable('student').extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }]\r\n  });\r\n\r\n  self.isStudentOrTrainee.subscribe(function(newVal) {\r\n    self.adjustSteps(newVal);\r\n    if (newVal === 'student') {\r\n      if (parseInt(self.studentTraineeLocationId(), 10) === -1) {\r\n        self.requiredFields = [\r\n          self.isStudentOrTrainee,\r\n          self.studentTraineeLocation,\r\n          self.studentTraineeEndDate\r\n        ];\r\n      } else {\r\n        self.requiredFields = [\r\n          self.isStudentOrTrainee,\r\n          self.studentTraineeLocationId,\r\n          self.studentTraineeEndDate\r\n        ];\r\n      }\r\n    } else if (newVal === 'trainee') {\r\n      self.requiredFields = [self.isStudentOrTrainee];\r\n    }\r\n  });\r\n\r\n  self.studentTraineeLocation = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.studentTraineeLocationEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.studentLocationTmp = 0;\r\n  self.studentLocations = ko.observableArray();\r\n  self.studentTraineeLocationId = ko.observable().extend({\r\n    required: []\r\n  });\r\n\r\n  self.yearArray = ko.observableArray();\r\n  self.studentTraineeEndDateTmp = new Date().getFullYear();\r\n  self.studentTraineeEndDate = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.studentMonthAndDay = '-07-01';\r\n\r\n  if (self.parent.signuptype === 'studentandpractice') {\r\n    self.adjustSteps(self.isStudentOrTrainee());\r\n    self.studentTraineeLocationId.subscribe(function(val) {\r\n      // If the location is not in registered in our database, we need to\r\n      // require the user to input their school location.\r\n      if (parseInt(val, 10) === -1) {\r\n        self.requiredFields = [\r\n          self.isStudentOrTrainee,\r\n          self.studentTraineeLocation,\r\n          self.studentTraineeEndDate\r\n        ];\r\n      } else {\r\n        self.requiredFields = [\r\n          self.isStudentOrTrainee,\r\n          self.studentTraineeLocationId,\r\n          self.studentTraineeEndDate\r\n        ];\r\n      }\r\n    });\r\n  }\r\n\r\n  if (self.parent.signuptype !== 'studentandpractice') {\r\n    self.requiredFields = [self.positionLevel];\r\n  } else {\r\n    self.requiredFields = [self.isStudentOrTrainee, self.studentTraineeEndDate];\r\n  }\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (parsedRegData.infoMember !== undefined) {\r\n      self.populateInputFromStore(parsedRegData.infoMember);\r\n    }\r\n  }\r\n}\r\n\r\nRegistrationInfoMember.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.activateComponent();\r\n};\r\n\r\nRegistrationInfoMember.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    self.componentActive = true;\r\n    self.parent.addInputControlForPage(self.inputFields);\r\n    self.setPositionLevelList();\r\n    self.setStudentLocations();\r\n    self.setYearArray();\r\n  }\r\n};\r\n\r\nRegistrationInfoMember.prototype.deactivateComponent = function() {\r\n  var self = this;\r\n  // If the component is already deactivated we can just exit the function.\r\n  if (!self.componentActive) {\r\n    return;\r\n  }\r\n  // Only deactivate the component if the current step is not this step.\r\n  if (self.step() !== self.parent.currentStep()) {\r\n    self.componentActive = false;\r\n    self.parent.removeInputControlForPage(self.inputFields);\r\n  }\r\n};\r\n\r\nRegistrationInfoMember.prototype.adjustSteps = function(val) {\r\n  if (val === 'student') {\r\n    this.parent.steps([\r\n      PAGE_TYPE.PERSONAL_INFO,\r\n      PAGE_TYPE.PERSONAL_STATUS,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n  } else if (val === 'trainee') {\r\n    this.parent.steps([\r\n      PAGE_TYPE.PERSONAL_INFO,\r\n      PAGE_TYPE.PERSONAL_STATUS,\r\n      PAGE_TYPE.EMPLOYER,\r\n      PAGE_TYPE.CONFIRMATION,\r\n      PAGE_TYPE.END\r\n    ]);\r\n  }\r\n  this.parent.steps.valueHasMutated();\r\n};\r\n\r\nRegistrationInfoMember.prototype.submitForm = function() {};\r\n\r\nRegistrationInfoMember.prototype.setPositionLevelList = function() {\r\n  var self = this,\r\n    url = self.API.getPositionLevelList;\r\n  // Only perform the API call if we haven't already done so.\r\n  if (self.positionLevelOptions().length === 0) {\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.positionLevelOptions(data);\r\n        // We can set the stored positionLevel after the options have been set.\r\n        self.positionLevel(self.positionLevelTmp);\r\n        self.$element.find('.form-select-wrapper-registration').selectize();\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-info-member.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nRegistrationInfoMember.prototype.setStudentLocations = function() {\r\n  var self = this,\r\n    url = self.API.getStudentLocations;\r\n\r\n  if (self.studentLocations().length === 0) {\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        var defaultOption = [{ Key: -1, Value: 'Eksisterer ikke i listen' }];\r\n        var newData = defaultOption.concat(data);\r\n        self.studentLocations(newData);\r\n        self.studentTraineeLocationId(self.studentLocationTmp);\r\n        self.$element\r\n          .find('.form-select-wrapper-student-locations')\r\n          .selectize();\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-info-member.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nRegistrationInfoMember.prototype.setYearArray = function() {\r\n  var self = this;\r\n  var currentYear = new Date().getFullYear();\r\n  var fiveYearsArr = [];\r\n\r\n  for (var i = 0; i < 5; i++) {\r\n    fiveYearsArr.push({\r\n      key: currentYear + i + self.studentMonthAndDay,\r\n      value: currentYear + i\r\n    });\r\n  }\r\n\r\n  self.yearArray(fiveYearsArr);\r\n  self.studentTraineeEndDate(self.studentTraineeEndDateTmp);\r\n};\r\n\r\nRegistrationInfoMember.prototype.triggerModal = function() {\r\n  this.activeModal(!this.activeModal());\r\n};\r\n\r\nRegistrationInfoMember.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nRegistrationInfoMember.prototype.populateInputFromStore = function(store) {\r\n  if (this.parent.signuptype !== 'studentandpractice') {\r\n    this.isBureauMemberOfRn(store.isBureauMemberOfRn);\r\n    this.positionLevel(parseInt(store.positionLevel, 10));\r\n    this.positionLevelTmp = parseInt(store.positionLevel, 10);\r\n    this.workTitle(store.workTitle);\r\n    this.otherRoles(store.otherRoles);\r\n    this.recruiter(store.recruiter);\r\n  } else {\r\n    this.isStudentOrTrainee(store.isStudentOrTrainee);\r\n  }\r\n};\r\n\r\nRegistrationInfoMember.prototype.createStoreObject = function() {\r\n  var retObj = null;\r\n  if (this.parent.signuptype !== 'studentandpractice') {\r\n    retObj = {\r\n      isBureauMemberOfRn: this.isBureauMemberOfRn(),\r\n      positionLevel: this.positionLevel(),\r\n      workTitle: this.workTitle(),\r\n      otherRoles: this.otherRoles(),\r\n      recruiter: this.recruiter()\r\n    };\r\n  } else {\r\n    retObj = {\r\n      isStudentOrTrainee: this.isStudentOrTrainee(),\r\n      studentTraineeLocation: this.studentTraineeLocation(),\r\n      studentTraineeLocationId: this.studentTraineeLocationId(),\r\n      studentTraineeEndDate: this.studentTraineeEndDate()\r\n    };\r\n  }\r\n  // Store all the observable values into an object.\r\n  return retObj;\r\n};\r\n\r\nRegistrationInfoMember.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('infoMember', this.createStoreObject());\r\n};\r\n\r\nRegistrationInfoMember.prototype.validateInputOnStep = function() {\r\n  return this.parent.validateFields(this.requiredFields);\r\n};\r\n\r\nRegistrationInfoMember.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationInfoMember.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-info-member.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n\r\n  // if (this.parent.signuptype === 'studentandpractice' && this.isStudentOrTrainee() === 'student') {\r\n  // \tthis.parent.nextStep(1);\r\n  // }\r\n  // else {\r\n  this.parent.nextStep();\r\n  // }\r\n};\r\n\r\n// Just used for testing.\r\nRegistrationInfoMember.prototype.nextStepSkip = function() {};\r\n\r\nmodule.exports = RegistrationInfoMember;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"useElement: true, css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Stillingsopplysninger</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\t\\t<div data-student=\\\"false\\\" data-bind=\\\"if: parent.signuptype !== 'studentandpractice'\\\">\\r\\n\\t\\t\\t<form name=\\\"info-member\\\" class=\\\"form-info-member\\\" data-bind=\\\"submit: submitForm\\\">\\r\\n\\t\\t\\t<!-- ko ifnot: parent.signuptype === 'agency' -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t\\t\\t<h3>Arbeider du i en regnskapsbedrift?</h3>\\r\\n\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"false\\\" id=\\\"member-bureau-rn-option-2\\\" name=\\\"member-bureau-rn\\\" data-bind=\\\"checked: isBureauMemberOfRn\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-bureau-rn-option-2\\\">Nei</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"true\\\" id=\\\"member-bureau-rn-option-1\\\" name=\\\"member-bureau-rn\\\" data-bind=\\\"checked: isBureauMemberOfRn\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-bureau-rn-option-1\\\">Ja</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\" data-bind=\\\"visible: showBureauMemberText\\\">\\r\\n\\t\\t\\t\\t\\t\\tFor å bli medlem må regnskapsbedriften din være medlem i Regnskap Norge.\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span>Hvilken stillingsnivå har du?</span>\\r\\n\\t\\t\\t\\t\\t\\t<select class=\\\"form-select-wrapper form-select-wrapper-registration\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"options: positionLevelOptions,\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   optionsText: 'Value',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   optionsValue: 'Key',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   value: positionLevel\\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: positionLevel.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: positionLevel.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\"><span data-bind=\\\"text: language.registrationPage.workTitle + ' (' + language.registrationPage.optional + ')' \\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: workTitle, valueUpdate: 'blur', css: { 'has-error': workTitle.hasError, 'is-successful': workTitle.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: workTitle.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: workTitle.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"input-error\\\" data-bind=\\\"css: { 'has-error': workTitle.hasError }, text: workTitle.validationMessage\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t\\t\\t<h3>Har du andre konsesjoner utover autorisert regnskapsfører?</h3>\\r\\n\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"None\\\" id=\\\"member-qualification-1\\\" name=\\\"other-qualifications\\\" data-bind=\\\"checked: otherRoles\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-qualification-1\\\">Ingen</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"Registered Auditor\\\" id=\\\"member-qualification-2\\\" name=\\\"other-qualifications\\\" data-bind=\\\"checked: otherRoles\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-qualification-2\\\">Registrert revisor</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"StateAuthorized Auditor\\\" id=\\\"member-qualification-3\\\" name=\\\"other-qualifications\\\" data-bind=\\\"checked: otherRoles\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-qualification-3\\\">Statsautorisert revisor</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<h3>Har noen vervet deg?</h3>\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': recruiter.hasError }\\\"><span>Legg inn medlemsnummer til verver</span>\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" name=\\\"\\\" type=\\\"text\\\" data-bind=\\\"value: recruiter, valueUpdate: 'blur', css: { 'has-error': recruiter.hasError, 'is-successful': recruiter.isSuccessful }\\\" aria-required=\\\"true\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: recruiter.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: recruiter.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: recruiter.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: recruiter.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t</form>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\r\\n\\t\\t<!-- ====================================================== -->\\r\\n\\t\\t<!-- --------- FOR STUDENTANDTRAINEE SIGNUP TYPE ----------  -->\\r\\n\\t\\t<!-- ====================================================== -->\\r\\n\\t\\t<div data-student=\\\"true\\\" data-bind=\\\"if: parent.signuptype === 'studentandpractice'\\\">\\r\\n\\t\\t\\t<form name=\\\"info-member\\\" class=\\\"form-info-member\\\" data-bind=\\\"submit: submitForm\\\">\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t\\t\\t<h3>Jeg er</h3>\\r\\n\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"student\\\" id=\\\"student-or-trainee-1\\\" name=\\\"student-or-trainee\\\" data-bind=\\\"checked: isStudentOrTrainee\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"student-or-trainee-1\\\">Student</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"trainee\\\" id=\\\"student-or-trainee-2\\\" name=\\\"student-or-trainee\\\" data-bind=\\\"checked: isStudentOrTrainee\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"student-or-trainee-2\\\">I praksis</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\" data-bind=\\\"css: { 'hidden': isStudentOrTrainee() !== 'student' }\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span>Studiested</span>\\r\\n\\t\\t\\t\\t\\t\\t<select class=\\\"form-select-wrapper form-select-wrapper-student-locations\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"options: studentLocations,\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   optionsText: 'Value',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   optionsValue: 'Key',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t   value: studentTraineeLocationId\\\" tabindex=\\\"-1\\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: positionLevel.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: positionLevel.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<!-- ko if: studentTraineeLocationId() == -1 -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\" data-bind=\\\"css: { 'hidden': isStudentOrTrainee() !== 'student' }\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t<span data-bind=\\\"css: { 'hidden': isStudentOrTrainee() !== 'student' }\\\">Nytt Studiested</span>\\r\\n\\t\\t\\t\\t\\t<span data-bind=\\\"css: { 'hidden': isStudentOrTrainee() !== 'trainee' }\\\">Praksisplass</span>\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: studentTraineeLocation, valueUpdate: 'blur', css: { 'has-error': studentTraineeLocation.hasError, 'is-successful': studentTraineeLocation.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: studentTraineeLocation.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: studentTraineeLocation.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\" data-bind=\\\"css: { active: studentTraineeLocation.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: studentTraineeLocation.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-group\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"input-group date\\\" data-bind=\\\"css: { 'hidden': isStudentOrTrainee() === 'trainee' }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"css: { 'hidden': isStudentOrTrainee() !== 'student' }\\\">Tenkt avgangsår</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<select class=\\\"form-select-wrapper form-select-wrapper-student-locations\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"options: yearArray,\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\toptionsText: 'value',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\toptionsValue: 'key',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tvalue: studentTraineeEndDate\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: positionLevel.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: positionLevel.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t</form>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction RegistrationEmployer(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n  self.API = params.api;\r\n\r\n  self.step = params.step;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n    }\r\n  });\r\n\r\n  self.isBureauMemberOfRn = ko.observable('false');\r\n  self.isSearching = ko.observable(false);\r\n  self.results = ko.observableArray([]);\r\n  self.hasSearched = ko.observable(false);\r\n  self.resultOption = ko.observable(0);\r\n  self.employer = ko.observable();\r\n  self.hasGottenResults = ko.observable(false);\r\n  self.showWarningNextWithoutData = ko.observable(false);\r\n  self.validSearchResults = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isPositiveNumber',\r\n        message: self.parent.errorMessages.invalidEmployer\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.searchOrganization = function() {\r\n    if (self.searchQuery() === undefined) {\r\n      return;\r\n    }\r\n    if (self.searchQuery.hasError()) {\r\n      return;\r\n    }\r\n    self.isSearching(true);\r\n    var url =\r\n      self.API.getAgency +\r\n      '?number=' +\r\n      encodeURIComponent(self.searchQuery()) +\r\n      '&member=' +\r\n      encodeURIComponent(self.isBureauMemberOfRn());\r\n\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.hasSearched(true);\r\n        self.results(data);\r\n        if (data.length < 1) {\r\n          self.validSearchResults(-1);\r\n          self.hasGottenResults(false);\r\n          self.showWarningNextWithoutData(true);\r\n        } else {\r\n          self.validSearchResults(data.length);\r\n          self.hasGottenResults(true);\r\n          self.showWarningNextWithoutData(false);\r\n        }\r\n        self.isSearching(false);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-employer.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n\r\n  self.searchQuery = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.recruiter = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsMembershipNumber,\r\n        length: 8\r\n      },\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.requiredFields = [self.searchQuery];\r\n  self.activateComponent();\r\n}\r\n\r\nRegistrationEmployer.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    var regData = sessionStorage.getItem('rn-registration');\r\n    if (regData !== undefined && regData !== null) {\r\n      var parsedRegData = JSON.parse(regData);\r\n      if (parsedRegData.infoEmployer !== undefined) {\r\n        self.populateInputFromStore(parsedRegData.infoEmployer);\r\n      }\r\n      if (\r\n        parsedRegData.infoMember &&\r\n        parsedRegData.infoMember.isBureauMemberOfRn\r\n      ) {\r\n        self.isBureauMemberOfRn(parsedRegData.infoMember.isBureauMemberOfRn);\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nRegistrationEmployer.prototype.populateInputFromStore = function(store) {\r\n  this.hasSearched(store.hasSearched);\r\n  this.searchQuery(store.searchQuery);\r\n  this.employer(store.employer);\r\n};\r\n\r\nRegistrationEmployer.prototype.createStoreObject = function() {\r\n  this.employer(this.results()[this.resultOption()]);\r\n  // Store all the observable values into an object.\r\n  return {\r\n    hasSearched: this.hasSearched(),\r\n    searchQuery: this.searchQuery(),\r\n    employer: this.employer()\r\n  };\r\n};\r\n\r\nRegistrationEmployer.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('infoEmployer', this.createStoreObject());\r\n};\r\n\r\nRegistrationEmployer.prototype.validateInputOnStep = function() {\r\n  if (!this.hasGottenResults()) {\r\n    this.showWarningNextWithoutData(true);\r\n    return false;\r\n  } else {\r\n    return this.parent.validateFields(this.requiredFields);\r\n  }\r\n};\r\n\r\nRegistrationEmployer.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationEmployer.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-employer.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n  this.parent.nextStep();\r\n};\r\n\r\n// Just used for testing.\r\nRegistrationEmployer.prototype.nextStepSkip = function() {};\r\n\r\nmodule.exports = RegistrationEmployer;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Finn din arbeidsgiver</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t<form name=\\\"search-organization\\\" data-bind=\\\"submit: searchOrganization\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"\\\">Organisasjonsnummer eller bedriftens medlemsnummer hos Regnskap Norge</span>\\r\\n\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-btn-group\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: searchQuery, valueUpdate: 'blur', css: { 'has-error': searchQuery.hasError, 'is-successful': searchQuery.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: searchOrganization\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tSøk\\r\\n\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !searchQuery.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: searchQuery.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: searchQuery.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !showWarningNextWithoutData() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: showWarningNextWithoutData }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span>Du kan ikke gå til neste steg før du har valgt en bedrift.</span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t<p>Du kan finne din arbeidsgivers organisasjonsnummer i Brønnøysundsregisteret: <a href=\\\"\\\">https://www.brreg.no</a></p>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<!-- ko if: isSearching -->\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"loader-text\\\">\\r\\n\\t\\t\\t\\t\\t<h3>Søker...</h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t<div class=\\\"result\\\">\\r\\n\\r\\n\\t\\t\\t<!-- ko if: hasSearched() === true -->\\r\\n\\t\\t\\t\\t<!-- ko if: results().length === 0 -->\\r\\n\\t\\t\\t\\t\\t<p class=\\\"result-text\\\" >Vi fikk dessverre ingen treff. Ta gjerne kontakt med oss på <span data-bind=\\\"html: parent.text.phoneNumberSupport\\\"></span>, så hjelper vi deg.</p>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t<!-- ko if: results().length === 1 -->\\r\\n\\t\\t\\t\\t\\t<p class=\\\"result-text\\\" >Vi fant</p>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"result-single\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h4 data-bind=\\\"text: results()[0].Name\\\"></h4>\\r\\n\\t\\t\\t\\t\\t\\t<div>E-post: <span data-bind=\\\"text: results()[0].Email\\\"></span></div>\\r\\n\\t\\t\\t\\t\\t\\t<div>Telefon: <span data-bind=\\\"text: results()[0].PhoneNumber\\\"></span></div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: results()[0].Website !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<div>Internettside: <span data-bind=\\\"text: results()[0].Website\\\"></span></div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t<!-- ko if: results().length > 1 -->\\r\\n\\t\\t\\t\\t\\t<p class=\\\"result-text\\\" >Vi fant følgende virksomheter</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<table class=\\\"table-simple\\\">\\r\\n\\t\\t\\t\\t\\t<thead>\\r\\n\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>Velg</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>Navn</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>Postnummer</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>Poststed</td>\\r\\n\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t</thead>\\r\\n\\t\\t\\t\\t\\t<tbody>\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko foreach: results -->\\r\\n\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"member-bureau-rn\\\" data-bind=\\\"value: $index(), attr: { id: 'bureau-rn-option-' + $index() }, checked: $parent.resultOption\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"bureau-rn-option-1\\\" data-bind=\\\"attr: { for: 'bureau-rn-option-' + $index() }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: PostNumber\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: PostPlace\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</tbody>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  PAGE_TYPE = require('_js/constants/registration-page-type'),\r\n  SIGNUP_TYPE = require('_js/constants/signup-type'),\r\n  partition = require('lodash/partition');\r\n\r\nvar NOT_CONNECTED_TO_BUREAU = 2;\r\n\r\nfunction RegistrationConfirmation(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n\r\n  self.step = params.step;\r\n  self.API = params.api;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n  self.SIGNUP_TYPE = SIGNUP_TYPE;\r\n  self.noActorId = ko.observable(false);\r\n\r\n  self.isSubmitting = ko.observable(false);\r\n\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n    }\r\n  });\r\n\r\n  self.invoiceAgencyName = ko.observable();\r\n  self.agencies = ko.observableArray();\r\n  self.bureauConnections = ko.observableArray();\r\n  self.newAgency = ko.observableArray([]);\r\n\r\n  self.registrationConfirmation = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isCheckedOff',\r\n        message: self.parent.errorMessages.requiredBoxUnchecked\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.showInvoiceSection = ko.observable(false);\r\n  self.showInsuranceSection = ko.observable(false);\r\n  self.showInsuranceBought = ko.observable(false);\r\n  self.showInsuranceExternal = ko.observable(false);\r\n  self.showTermsAndConditions = ko.observable(false);\r\n\r\n  self.invoiceOptions = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.noAlternativeChosen\r\n      }\r\n    ]\r\n  });\r\n  self.invoiceEmail = ko.observable().extend({\r\n    required: [\r\n      { type: 'isOptional', message: 'Optional' },\r\n      { type: 'isEmail', message: self.parent.errorMessages.invalidEmail }\r\n    ]\r\n  });\r\n\r\n  self.requiredFields = [self.registrationConfirmation];\r\n\r\n  self.showInvoiceSection.subscribe(function(newVal) {\r\n    if (newVal) {\r\n      self.requiredFields = [\r\n        self.registrationConfirmation,\r\n        self.invoiceOptions\r\n      ];\r\n    } else {\r\n      self.requiredFields = [self.registrationConfirmation];\r\n    }\r\n  });\r\n\r\n  this.allData = ko.observable();\r\n  // We need to call this function now incase we reload on this step (which will not trigger\r\n  // the currentStep.subscribe function).\r\n  self.activateComponent();\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    parsedRegData.signupType = self.parent.signuptype;\r\n    this.allData(parsedRegData);\r\n  }\r\n}\r\n\r\nRegistrationConfirmation.prototype.checkedBureauConnections = function(index) {\r\n  // Need to offset the index because the invoice list has one more agency before the list of already\r\n  // connected agencies.\r\n  var matchingIndex = index + 1;\r\n  if (\r\n    parseInt(this.bureauConnections()[index](), 10) ===\r\n      NOT_CONNECTED_TO_BUREAU &&\r\n    matchingIndex === parseInt(this.invoiceOptions(), 10)\r\n  ) {\r\n    this.invoiceOptions(undefined);\r\n  }\r\n\r\n  // Need to return true in order to get checked + click binding to work.\r\n  return true;\r\n};\r\n\r\nRegistrationConfirmation.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    // If the user has gone through the process of registering himself/herself.\r\n    if (self.parent.signuptype === 'studentandpractice') {\r\n      self.showInvoiceSection(false);\r\n    } else if (self.parent.signuptype === 'person') {\r\n      self.showInvoiceSection(true);\r\n    } else if (self.parent.signuptype === 'agency') {\r\n      self.showInvoiceSection(true);\r\n    }\r\n\r\n    var regData = sessionStorage.getItem('rn-registration');\r\n    if (regData !== undefined && regData !== null) {\r\n      var parsedRegData = JSON.parse(regData);\r\n      self.allData(parsedRegData);\r\n      if (parsedRegData.personalInfo) {\r\n        self.personalInfo = parsedRegData.personalInfo;\r\n      }\r\n      if (parsedRegData.infoEmployer) {\r\n        self.infoEmployer = parsedRegData.infoEmployer;\r\n      }\r\n      if (parsedRegData.infoAgency) {\r\n        self.infoAgency = parsedRegData.infoAgency;\r\n      }\r\n      if (parsedRegData.enroll) {\r\n        self.enroll = parsedRegData.enroll;\r\n      }\r\n      if (parsedRegData.insurance) {\r\n        self.insurance = parsedRegData.insurance;\r\n      }\r\n\r\n      // Determine if we have the 'AktorId' property for the user.\r\n      if (\r\n        !(self.personalInfo && self.personalInfo.person) &&\r\n        !(self.enroll && self.enroll.person)\r\n      ) {\r\n        self.noActorId(true);\r\n      }\r\n\r\n      // Depending on the signuptype / the data we have, extract the agency/employer name.\r\n      if (self.infoEmployer && self.infoEmployer.employer) {\r\n        self.invoiceAgencyName(self.infoEmployer.employer.Name);\r\n      } else if (self.infoAgency && self.infoAgency.agency) {\r\n        self.invoiceAgencyName(self.infoAgency.agency.Name);\r\n      }\r\n    }\r\n\r\n    // If the user has the insurance step we need to show the summary of it.\r\n    if (self.parent.steps().indexOf(PAGE_TYPE.INSURANCE) !== -1) {\r\n      self.showInsuranceSection(true);\r\n      if (self.insurance && self.insurance.externalInsuranceId) {\r\n        // Show text for external insurance\r\n        self.showInsuranceExternal(true);\r\n        self.showInsuranceBought(false);\r\n      } else {\r\n        self.showInsuranceBought(true);\r\n        self.showInsuranceExternal(false);\r\n      }\r\n    }\r\n\r\n    self.setAgencies();\r\n  }\r\n};\r\n\r\nRegistrationConfirmation.prototype.setAgencies = function() {\r\n  var self = this,\r\n    url = self.API.getAgenciesForPerson;\r\n\r\n  if (self.noActorId()) {\r\n    return;\r\n  }\r\n  if (self.personalInfo && self.personalInfo.person) {\r\n    url += '?AktorId=' + self.personalInfo.person.AktorId;\r\n  } else if (self.enroll && self.enroll.person) {\r\n    url += '?AktorId=' + self.enroll.person.AktorId;\r\n  }\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      var modifiedAgencies = self.checkExistingAgencies(data);\r\n      self.agencies(modifiedAgencies);\r\n      // Prefill the radio buttons to answer \"yes\" (/ \"1\").\r\n      var tmp = [];\r\n      for (var i = 0; i < self.agencies().length; i++) {\r\n        tmp.push(ko.observable('1'));\r\n      }\r\n      self.bureauConnections(tmp);\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: registration-confirmation.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nRegistrationConfirmation.prototype.checkExistingAgencies = function(agencies) {\r\n  var modifiedAgencies = agencies;\r\n  // This is perhaps no longer needed. Letting it stay for a couple of iterations before removing it completely.\r\n  var agencyPartitions;\r\n\r\n  if (this.infoEmployer && this.infoEmployer.employer) {\r\n    agencyPartitions = partition(agencies, {\r\n      AktorId: this.infoEmployer.employer.AktorId\r\n    });\r\n    modifiedAgencies = agencyPartitions[1];\r\n    this.newAgency(agencyPartitions[0]);\r\n    if (this.newAgency() === undefined || this.newAgency() === null) {\r\n      this.newAgency(this.infoEmployer.employer);\r\n    }\r\n  } else if (this.infoAgency && this.infoAgency.agency) {\r\n    agencyPartitions = partition(agencies, {\r\n      AktorId: this.infoAgency.agency.AktorId\r\n    });\r\n    modifiedAgencies = agencyPartitions[1];\r\n    this.newAgency(agencyPartitions[0]);\r\n    if (agencyPartitions[0].length === 0) {\r\n      this.newAgency().push(this.infoAgency.agency);\r\n    }\r\n  }\r\n  return modifiedAgencies;\r\n};\r\n\r\nRegistrationConfirmation.prototype.populateInputFromStore = function() {};\r\n\r\nRegistrationConfirmation.prototype.getAllIndexes = function(arr, val) {\r\n  var indexes = [],\r\n    i;\r\n  for (i = 0; i < arr.length; i++) {\r\n    if (arr[i]() === val) {\r\n      indexes.push(i);\r\n    }\r\n  }\r\n  return indexes;\r\n};\r\n\r\nRegistrationConfirmation.prototype.createStoreObject = function() {\r\n  // Get all the indexes where the user doesn't want to be connected to the agency.\r\n  var removedAgencyConnectionsIndices = this.getAllIndexes(\r\n    this.bureauConnections(),\r\n    '2'\r\n  );\r\n  // This will be the list containing the IDs of the agencies the user wants to remove.\r\n  var removedAgencyConnections = [];\r\n\r\n  var newAgency = false;\r\n  var paySelf = false;\r\n  var agencyId = '';\r\n\r\n  for (var i = 0; i < removedAgencyConnectionsIndices.length; i++) {\r\n    removedAgencyConnections.push(\r\n      this.agencies()[removedAgencyConnectionsIndices[i]].Id\r\n    );\r\n  }\r\n\r\n  if (this.invoiceOptions() === 'new') {\r\n    newAgency = true;\r\n  } else if (this.invoiceOptions() === 'self') {\r\n    paySelf = true;\r\n  } else if (this.invoiceOptions() !== undefined) {\r\n    if (parseInt(this.invoiceOptions(), 10) === this.agencies().length) {\r\n      newAgency = true;\r\n    } else {\r\n      agencyId = this.agencies()[parseInt(this.invoiceOptions(), 10) - 1]\r\n        .AktorId;\r\n    }\r\n  }\r\n\r\n  // Store all the observable values into an object.\r\n  return {\r\n    removeAssociatedAgencies: removedAgencyConnections,\r\n    agencyId: agencyId,\r\n    NewAgency: newAgency,\r\n    PaySelf: paySelf,\r\n    invoiceEmail: this.invoiceEmail()\r\n  };\r\n};\r\n\r\nRegistrationConfirmation.prototype.storeValues = function() {\r\n  // 1: Get the registration data.\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n\r\n  if (regData === undefined || regData === null) {\r\n    regData = {};\r\n  } else {\r\n    regData = JSON.parse(regData);\r\n  }\r\n\r\n  // 2: Update the correct page in the registration data with the submitted data.\r\n  regData.infoSummary = this.createStoreObject();\r\n\r\n  // 3: Update lastUpdated date.\r\n  regData.lastUpdated = new Date().getTime();\r\n\r\n  // 4: Set current path.\r\n  regData.registrationPath = this.parent.currentPath;\r\n\r\n  // 5: Store the update.\r\n  sessionStorage.setItem('rn-registration', JSON.stringify(regData));\r\n};\r\n\r\nRegistrationConfirmation.prototype.validateInputOnStep = function() {\r\n  return this.parent.validateFields(this.requiredFields);\r\n};\r\n\r\nRegistrationConfirmation.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationConfirmation.prototype.toggleTermsAndConditions = function() {\r\n  this.showTermsAndConditions(!this.showTermsAndConditions());\r\n};\r\n\r\nRegistrationConfirmation.prototype.submitData = function() {\r\n  var self = this,\r\n    url = self.API.postSignupSummary;\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    parsedRegData.signupType = self.parent.signuptype;\r\n    this.allData(parsedRegData);\r\n  }\r\n\r\n  self.isSubmitting(true);\r\n\r\n  APIHelper.post(\r\n    url,\r\n    this.allData(),\r\n    function(data) {\r\n      self.isSubmitting(false);\r\n      sessionStorage.removeItem('rn-registration');\r\n      self.parent.storeValuesForStep('result', data);\r\n      self.parent.nextStep();\r\n    },\r\n    function(err) {\r\n      self.isSubmitting(false);\r\n      self.parent.storeValuesForStep('result', null);\r\n      self.parent.nextStep();\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: registration-confirmation.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + err.responseText,\r\n          'status: ' + err.status,\r\n          'statusText: ' + err.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nRegistrationConfirmation.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-confirmation.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n\r\n  this.submitData();\r\n};\r\n\r\nmodule.exports = RegistrationConfirmation;\r\n","var SIGNUP_TYPE = {\r\n  agency: 'Bedriftsmedlemskap',\r\n  studentandpractice: 'Student- og/eller praksismedlemskap',\r\n  person: 'Personmedlemskap'\r\n};\r\n\r\nmodule.exports = SIGNUP_TYPE;\r\n","var createAggregator = require('./_createAggregator');\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': false },\n *   { 'user': 'fred',    'age': 40, 'active': true },\n *   { 'user': 'pebbles', 'age': 1,  'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n  result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nmodule.exports = partition;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Bekreftelse</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\r\\n\\r\\n\\t\\t<!-- ko ifnot: parent.signuptype === 'studentandpractice' -->\\r\\n\\t\\t<h3>Faktura</h3>\\r\\n\\t\\t<div data-bind=\\\"visible: !noActorId()\\\">\\r\\n\\t\\t\\t<!-- ko if: agencies().length > 0 -->\\r\\n\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-12 radio-buttons-list\\\">\\r\\n\\t\\t\\t\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t\\t\\t\\t<h4>Skal du fortsatt stå knyttet til følgende bedrifter?</h4>\\r\\n\\t\\t\\t\\t\\t\\t</header>\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko foreach: agencies -->\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-5\\\" data-bind=\\\"text: Name\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 end\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"1\\\" id=\\\"bureau-connection-1\\\" data-bind=\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchecked: $parent.bureauConnections()[$index()],\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclick: $component.checkedBureauConnections.bind($component, $index(), '1'),\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tattr: { \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tid: 'bureau-connection-' + $index() + '-1',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tname: 'bureau-connection-' + $index() + '-1'\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'bureau-connection-' + $index() + '-1' }\\\">Ja</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"2\\\" id=\\\"bureau-connection-2\\\" data-bind=\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchecked: $parent.bureauConnections()[$index()],\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclick: $component.checkedBureauConnections.bind($component, $index(), '2'),\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tattr: { \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tid: 'bureau-connection-' + $index() + '-2',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tname: 'bureau-connection-' + $index() + '-1'\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'bureau-connection-' + $index() + '-2' }\\\">Nei</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"form-row radio-buttons-list\\\" data-bind=\\\"visible: showInvoiceSection\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h4>Hvor skal vi sende faktura?</h4>\\r\\n\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"new\\\" id=\\\"invoice-options-new\\\" name=\\\"invoice-options\\\" data-bind=\\\"checked: invoiceOptions\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"invoice-options-new\\\" data-bind=\\\"text: invoiceAgencyName\\\"></label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- ko ifnot: agencies().length === 0 -->\\r\\n\\t\\t\\t\\t\\t<!-- ko foreach: agencies -->\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko with: $parent.bureauConnections()[$index()] -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"invoice-options\\\" data-bind=\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchecked: $component.invoiceOptions,\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tattr: {\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tvalue: $parentContext.$index() + 1,\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tid: 'invoice-options-' + ($parentContext.$index() + 1)\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t},\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdisable: $data == '2' \\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"text: $parent.Name, attr: { for: 'invoice-options-' + ($parentContext.$index() + 1) }, css: { 'is-disabled': $data == '2'} \\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n        <div class=\\\"\\\">\\r\\n\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"self\\\" id=\\\"invoice-options-self\\\" name=\\\"invoice-options\\\" data-bind=\\\"checked: invoiceOptions\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"invoice-options-self\\\" >Jeg betaler selv</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !invoiceOptions.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: invoiceOptions.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoiceOptions.validationMessage\\\">\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<!-- ko if: invoiceOptions() === 'self' -->\\r\\n\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div data-bind=\\\"html: parent.text.invoiceEmailInformation\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoiceEmail.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tFakturaepost\\r\\n\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: invoiceEmail, valueUpdate: 'blur', css: { 'has-error': invoiceEmail.hasError, 'is-successful': invoiceEmail.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: invoiceEmail.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: invoiceEmail.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: invoiceEmail.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoiceEmail.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<hr />\\r\\n\\t\\t<h3>Bekreftelse</h3>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\r\\n\\r\\n\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t<h4 class=\\\"inline uppercase\\\">Type medlemskap:</h4>\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: SIGNUP_TYPE[parent.signuptype]\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- ko if: allData().personalInfo -->\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t<h4 class=\\\"inline uppercase\\\">Navn:</h4>\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: allData().personalInfo.givenName + ' ' + allData().personalInfo.surname\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- ko if: allData().enroll -->\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t<h4 class=\\\"inline\\\">Navn:</h4>\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: allData().enroll.person.FirstName + ' ' + allData().enroll.person.LastName\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- ko if: allData().infoAgency -->\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t<h4 class=\\\"inline\\\">Arbeidsgiver:</h4>\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: allData().infoAgency.agency.Name\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"form-row\\\" data-bind=\\\"visible: showInsuranceSection\\\">\\r\\n\\t\\t\\t<h4>Forsikring</h4>\\r\\n\\t\\t\\t<div data-bind=\\\"html: parent.text.insuranceConfirmation, visible: showInsuranceBought\\\"></div>\\r\\n      \\t\\t<div data-bind=\\\"html: parent.text.externalInsuranceConfirmationText, visible: showInsuranceExternal\\\"></div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"registration-confirmation\\\" data-bind=\\\"checked: registrationConfirmation\\\">\\r\\n\\t\\t\\t\\t<label class=\\\"form-label form-label-checkbox form-label-lowercase\\\" for=\\\"registration-confirmation\\\">JA, jeg bekrefter at mine opplysninger er korrekte og jeg er inneforstått med Regnskap Norge sine \\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: registrationConfirmation.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: registrationConfirmation.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t<a href=\\\"\\\" data-bind=\\\"click: toggleTermsAndConditions\\\">Vilkår og betingelser</a>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"block-grey form-row policies\\\" data-bind=\\\"visible: showTermsAndConditions\\\">\\r\\n\\t\\t\\t<div data-bind=\\\"html: parent.text.termsAndConditionsExpanded\\\"></div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<!-- ko if: isSubmitting -->\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"loader-text\\\">\\r\\n\\t\\t\\t\\t\\t<h3>Sender inn...</h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-4 small-6\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tSend inn\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nvar PAGE_TYPE = {\r\n  PERSONAL_INFO: 'registration-personal-info',\r\n  PERSONAL_STATUS: 'registration-info-member',\r\n  EMPLOYER: 'registration-employer',\r\n  ENROLL: 'registration-enroll',\r\n  AGENCY: 'registration-agency',\r\n  INSURANCE: 'registration-insurance',\r\n  CONFIRMATION: 'registration-confirmation'\r\n};\r\n\r\nfunction RegistrationEnroll(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n  self.API = params.api;\r\n\r\n  self.step = params.step;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n  self.isRnMember = ko.observable();\r\n\r\n  self.searchQuery = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNumber', message: self.parent.errorMessages.notANumber },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsMembershipNumber,\r\n        length: 8\r\n      }\r\n    ]\r\n  });\r\n  self.results = ko.observableArray([]);\r\n  self.hasSearched = ko.observable(false);\r\n  self.resultOption = ko.observable(0);\r\n  self.person = ko.observable();\r\n  self.isSearching = ko.observable(false);\r\n  // self.employer = ko.observable();\r\n\r\n  self.searchPerson = function() {\r\n    if (self.searchQuery() === undefined) {\r\n      return;\r\n    }\r\n    if (self.searchQuery.hasError()) {\r\n      return;\r\n    }\r\n    self.isSearching(true);\r\n    var url =\r\n      self.API.getPersonById +\r\n      '?aktorId=' +\r\n      encodeURIComponent(self.searchQuery());\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.isSearching(false);\r\n        self.results(data);\r\n        self.hasSearched(true);\r\n        self.person(data);\r\n      },\r\n      function(response) {\r\n        self.isSearching(false);\r\n        self.results(null);\r\n        self.hasSearched(true);\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-personal-info.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n}\r\n\r\nRegistrationEnroll.prototype.init = function(element) {\r\n  var self = this;\r\n  self.$element = $(element);\r\n\r\n  var $isMember = $($(element).find(\"[data-is-member='true']\"));\r\n  var $isNotMember = $($(element).find(\"[data-is-member='false']\"));\r\n  self.isRnMember.subscribe(function(val) {\r\n    if (val === 'true') {\r\n      $isNotMember.slideUp(250, 'easeOutQuad', function() {\r\n        $isMember.slideDown(250, 'easeOutQuad', function() {});\r\n      });\r\n    } else {\r\n      $isMember.slideUp(250, 'easeOutQuad', function() {\r\n        $isNotMember.slideDown(250, 'easeOutQuad', function() {});\r\n      });\r\n    }\r\n  });\r\n};\r\n\r\nRegistrationEnroll.prototype.populateInputFromStore = function() {};\r\n\r\nRegistrationEnroll.prototype.createStoreObject = function() {\r\n  return {\r\n    person: this.person()\r\n  };\r\n};\r\n\r\nRegistrationEnroll.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('enroll', this.createStoreObject());\r\n};\r\n\r\nRegistrationEnroll.prototype.validateInputOnStep = function() {\r\n  return this.parent.validateFields(this.requiredFields);\r\n};\r\n\r\nRegistrationEnroll.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationEnroll.prototype.hasPersonNext = function() {\r\n  // 1: Remove existing data. If the person selects \"not-existing member\" we don't want to use previous\r\n  // potential data.\r\n  sessionStorage.removeItem('rn-registration');\r\n  // 2: Add steps associated with the process of creating a new member.\r\n  this.parent.addSteps(1, [PAGE_TYPE.PERSONAL_INFO, PAGE_TYPE.PERSONAL_STATUS]);\r\n  // 3: Move to the next step.\r\n  this.parent.nextStep();\r\n};\r\n\r\nRegistrationEnroll.prototype.nextStep = function() {\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Move to the next step.\r\n  this.parent.nextStep();\r\n};\r\n\r\n// Just used for testing.\r\nRegistrationEnroll.prototype.nextStepSkip = function() {};\r\n\r\nmodule.exports = RegistrationEnroll;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"useElement: true, css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Informasjon om innmelder</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\t\\t\\r\\n\\t\\t<p data-bind=\\\"html: parent.text.agencyPersonMustBeMemberDescription\\\"></p>\\r\\n\\r\\n\\t\\t<div class=\\\"accordion-single\\\" data-bind=\\\"css: { 'is-active': isRnMember() === 'true' }\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h3>\\r\\n\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"true\\\" id=\\\"member-rn-option-1\\\" name=\\\"member-rn\\\" data-bind=\\\"checked: isRnMember\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-rn-option-1\\\">Jeg er medlem</label>\\r\\n\\t\\t\\t\\t</h3>\\r\\n\\t\\t\\t</header>\\r\\n\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-is-member=\\\"true\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<form name=\\\"search-organization\\\" data-bind=\\\"submit: searchPerson\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"\\\">Oppgi ditt medlemsnummer</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-btn-group\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: searchQuery, valueUpdate: 'blur', css: { 'has-error': searchQuery.hasError, 'is-successful': searchQuery.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" >\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tSøk\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !searchQuery.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: searchQuery.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: searchQuery.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- ko if: isSearching -->\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<h3>Søker...</h3>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<div class=\\\"result\\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: hasSearched() === true -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: results() === null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p class=\\\"result-text\\\" >Vi fikk dessverre ingen treff. Ta gjerne kontakt med oss på <span data-bind=\\\"html: parent.text.phoneNumberSupport\\\"></span>, så hjelper vi deg.</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: results() !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p class=\\\"result-text\\\" >Vi fant</p>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"result-single\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<h4 data-bind=\\\"text: results().FirstName + ' ' + results().LastName\\\"></h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<p>Ikke deg? Kontakt oss på telefonnummer: <span data-bind=\\\"html: parent.text.phoneNumberSupport\\\"></span></p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-primary medium\\\" data-bind=\\\"click: nextStep\\\">Neste</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"accordion-single\\\" data-bind=\\\"css: { 'is-active': isRnMember() === 'false' }\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h3>\\r\\n\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"false\\\" id=\\\"member-rn-option-2\\\" name=\\\"member-rn\\\" data-bind=\\\"checked: isRnMember\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"member-rn-option-2\\\">Jeg er ikke medlem</label>\\r\\n\\t\\t\\t\\t</h3>\\r\\n\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-is-member=\\\"false\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div data-bind=\\\"html: parent.text.ifNotMemberInformation\\\"></div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-primary medium\\\" data-bind=\\\"click: hasPersonNext\\\">Bli medlem og registrer din bedrift</button>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  SearchPostalCode = require('_js/search-postal-code');\r\n\r\nfunction RegistrationAgency(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n  self.API = params.api;\r\n\r\n  self.componentActive = false;\r\n  self.step = params.step;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n\r\n  // These input fields will be defined when searchOrganization is executed.\r\n  self.inputFields = null;\r\n  self.inputFieldsVisit = null;\r\n  self.inputFieldsInvoice = null;\r\n  self.currentInputField = 0;\r\n\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n    } else {\r\n      self.deactivateComponent();\r\n    }\r\n  });\r\n\r\n  self.isSearching = ko.observable(false);\r\n  self.results = ko.observableArray([]);\r\n  self.hasSearched = ko.observable(false);\r\n  self.showWarningNextWithoutData = ko.observable(false);\r\n  self.hasGottenResults = ko.observable(false);\r\n\r\n  self.agency = ko.observable();\r\n\r\n  self.showContactInformation = ko.observable(false);\r\n  self.showInvoiceAccordion = ko.observable(false);\r\n  self.showAddressAccordion = ko.observable(false);\r\n\r\n  self.marketingName = ko.observable();\r\n  self.headCount = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      },\r\n      {\r\n        type: 'isDecimalNumber',\r\n        message: self.parent.errorMessages.invalidDecimalNumber\r\n      }\r\n    ]\r\n  });\r\n  self.registeredAuditor = ko.observable();\r\n  self.co = ko.observable();\r\n  self.postalAddress = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.postalCode = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsPostalCode,\r\n        length: 4\r\n      }\r\n    ]\r\n  });\r\n  self.postalPlace = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.invoiceEmail = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      },\r\n      { type: 'isEmail', message: self.parent.errorMessages.invalidEmail }\r\n    ]\r\n  });\r\n\r\n  //Observables retalted to radio buttons\r\n  self.resultOption = ko.observable(0);\r\n  self.resultOption.subscribe(function(num) {\r\n    self.populateInputFromApi(self.results()[num]);\r\n    self.agency(self.results()[num]);\r\n    self.isMember(self.results()[num].IsMember);\r\n  });\r\n\r\n  // Observables related to updating information from brreg.\r\n  self.name = ko.observable();\r\n  self.email = ko.observable();\r\n  self.phone = ko.observable();\r\n  self.website = ko.observable();\r\n\r\n  self.isMember = ko.observable();\r\n\r\n  // Observables related to showAddressAccordion :\r\n  self.visitCo = ko.observable();\r\n  self.postalAddress = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.visitAddress = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.visitPostalCode = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsPostalCode,\r\n        length: 4\r\n      }\r\n    ]\r\n  });\r\n  self.visitPostalPlace = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  // Observables related to showInvoiceAccordion :\r\n  self.invoiceCo = ko.observable();\r\n  self.invoiceAddress = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.invoicePostalCode = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsPostalCode,\r\n        length: 4\r\n      }\r\n    ]\r\n  });\r\n  self.invoicePostalPlace = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.searchOrganization = function() {\r\n    if (self.searchQuery() === undefined) {\r\n      return;\r\n    }\r\n    if (self.searchQuery.hasError()) {\r\n      return;\r\n    }\r\n    self.isSearching(true);\r\n    var url =\r\n      self.API.getAgencies +\r\n      '?orgnr=' +\r\n      encodeURIComponent(self.searchQuery().trim());\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.hasSearched(true);\r\n        self.resultOption(0);\r\n        self.showContactInformation(false);\r\n        self.results(data);\r\n        self.agency(data[0]);\r\n        self.populateInputFromApi(data[0]);\r\n        self.inputFields = $('.form-info-agency').find(':input');\r\n        self.inputFieldsVisit = $('.form-info-agency-visit').find(':input');\r\n        self.inputFieldsInvoice = $('.form-info-agency-invoice').find(':input');\r\n        self.parent.addInputControlForPage(self.inputFields);\r\n        self.parent.addInputControlForPage(self.inputFieldsVisit);\r\n        self.parent.addInputControlForPage(self.inputFieldsInvoice);\r\n        self.isSearching(false);\r\n        if (data.length < 1) {\r\n          self.showWarningNextWithoutData(true);\r\n          self.hasGottenResults(false);\r\n        } else {\r\n          self.showWarningNextWithoutData(false);\r\n          self.hasGottenResults(true);\r\n        }\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-agency.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n  self.searchQuery = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message:\r\n          self.parent.errorMessages.wrongNumberOfDigitsOrganizationNumber,\r\n        length: 9\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.recruiter = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: self.parent.errorMessages.notANumber\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        message: self.parent.errorMessages.wrongNumberOfDigitsMembershipNumber,\r\n        length: 8\r\n      },\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.requiredFields = [\r\n    self.invoiceEmail,\r\n    self.searchQuery,\r\n    self.headCount,\r\n    self.postalAddress,\r\n    self.postalCode\r\n  ];\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (parsedRegData.infoAgency !== undefined) {\r\n      this.populateInputFromStore(parsedRegData.infoAgency);\r\n    }\r\n  }\r\n}\r\n\r\nRegistrationAgency.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  var self = this;\r\n\r\n  self.searchPostalPlaceEl = this.$element.find(\"[data-postal-place='1']\");\r\n  self.visitPostalPlaceEl = this.$element.find(\"[data-postal-place='2']\");\r\n  self.invoicePostalPlaceEl = this.$element.find(\"[data-postal-place='3']\");\r\n\r\n  var searchPostalCode = new SearchPostalCode(null, self.postalPlace);\r\n\r\n  self.postalCode.subscribe(function(val) {\r\n    searchPostalCode.searchForCity(val);\r\n  });\r\n\r\n  var addressPostalCode = new SearchPostalCode(null, self.visitPostalPlace);\r\n\r\n  self.visitPostalCode.subscribe(function(val) {\r\n    addressPostalCode.searchForCity(val);\r\n  });\r\n\r\n  var invoicePostalCode = new SearchPostalCode(null, self.invoicePostalPlace);\r\n\r\n  self.invoicePostalCode.subscribe(function(val) {\r\n    invoicePostalCode.searchForCity(val);\r\n  });\r\n\r\n  self.showAddressAccordion.subscribe(function(val) {\r\n    var $visitAddress = $(self.$element.find(\"[data-visit-address='true']\"));\r\n    if (val === true) {\r\n      $visitAddress.slideDown(250, 'easeOutQuad');\r\n    } else {\r\n      $visitAddress.slideUp(250, 'easeOutQuad');\r\n    }\r\n  });\r\n\r\n  self.showInvoiceAccordion.subscribe(function(val) {\r\n    var $invoiceAddress = $(\r\n      self.$element.find(\"[data-invoice-address='true']\")\r\n    );\r\n    if (val === true) {\r\n      $invoiceAddress.slideDown(250, 'easeOutQuad');\r\n    } else {\r\n      $invoiceAddress.slideUp(250, 'easeOutQuad');\r\n    }\r\n  });\r\n\r\n  // self.parent.addInputControlForPage(self.inputFields);\r\n};\r\n\r\nRegistrationAgency.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    self.componentActive = true;\r\n    // self.parent.addInputControlForPage(self.inputFields);\r\n  }\r\n};\r\n\r\nRegistrationAgency.prototype.deactivateComponent = function() {\r\n  var self = this;\r\n  // If the component is already deactivated we can just exit the function.\r\n  if (!self.componentActive) {\r\n    return;\r\n  }\r\n  // Only deactivate the component if the current step is not this step.\r\n  if (self.step() !== self.parent.currentStep()) {\r\n    self.componentActive = false;\r\n    self.parent.removeInputControlForPage(self.inputFields);\r\n    self.parent.removeInputControlForPage(self.inputFieldsVisit);\r\n    self.parent.removeInputControlForPage(self.inputFieldsInvoice);\r\n  }\r\n};\r\n\r\n// This function originally only did a console.log. I removed the console log but I'm afraid to delete this method.\r\nRegistrationAgency.prototype.submitForm = function() {};\r\n\r\nRegistrationAgency.prototype.populateInputFromApi = function(data) {\r\n  this.name(data.Name);\r\n  this.email(data.Email);\r\n  this.phone(data.OfficePhone);\r\n  this.website(data.Website);\r\n\r\n  this.marketingName(data.MarketName);\r\n\r\n  this.co(data.PostalCareOf);\r\n  this.postalAddress(data.PostalAddress);\r\n  this.postalCode(data.PostalPostCode);\r\n  this.postalPlace(data.PostalCity);\r\n\r\n  this.visitCo(data.StreetCareOf);\r\n  this.visitAddress(data.StreetAddress);\r\n  this.visitPostalCode(data.StreetPostCode);\r\n  this.visitPostalPlace(data.StreetCity);\r\n\r\n  this.invoiceCo(data.BillingCareOf);\r\n  this.invoiceAddress(data.BillingAddress);\r\n  this.invoicePostalCode(data.BillingPostCode);\r\n  this.invoicePostalPlace(data.BillingCity);\r\n\r\n  this.isMember(data.IsMember);\r\n};\r\n\r\nRegistrationAgency.prototype.populateInputFromStore = function(store) {\r\n  this.agency(store.agency);\r\n  this.marketingName(store.agency.MarketName);\r\n  this.headCount(store.agency.Employees);\r\n  this.co(store.agency.PostalCareOf);\r\n  this.postalAddress(store.agency.PostalAddress);\r\n  this.postalCode(store.agency.PostalPostCode);\r\n  this.postalPlace(store.agency.PostalCity);\r\n  this.invoiceEmail(store.agency.InvoiceEmail);\r\n\r\n  this.visitCo(store.agency.StreetCareOf);\r\n  this.visitAddress(store.agency.StreetAddress);\r\n  this.visitPostalCode(store.agency.StreetPostCode);\r\n  this.visitPostalPlace(store.agency.StreetCity);\r\n\r\n  this.invoiceCo(store.agency.BillingCareOf);\r\n  this.invoiceAddress(store.agency.BillingAddress);\r\n  this.invoicePostalCode(store.agency.BillingPostCode);\r\n  this.invoicePostalPlace(store.agency.BillingCity);\r\n};\r\n\r\nRegistrationAgency.prototype.createStoreObject = function() {\r\n  var tmpAgency = this.agency();\r\n  tmpAgency.Email = this.email();\r\n  tmpAgency.OfficePhone = this.phone();\r\n  tmpAgency.Website = this.website();\r\n\r\n  tmpAgency.ApprovedAuditor = this.registeredAuditor();\r\n  tmpAgency.InvoiceEmail = this.invoiceEmail();\r\n  tmpAgency.MarketName = this.marketingName();\r\n  tmpAgency.Employees = parseFloat(this.headCount().replace(',', '.'), 10);\r\n  tmpAgency.PostalCareOf = this.co();\r\n  tmpAgency.PostalAddress = this.postalAddress();\r\n  tmpAgency.PostalPostCode = this.postalCode();\r\n  tmpAgency.PostalCity = this.postalPlace();\r\n\r\n  tmpAgency.StreetCareOf = this.visitCo();\r\n  tmpAgency.StreetAddress = this.visitAddress();\r\n  tmpAgency.StreetPostCode = this.visitPostalCode();\r\n  tmpAgency.StreetCity = this.visitPostalPlace();\r\n\r\n  tmpAgency.BillingCareOf = this.invoiceCo();\r\n  tmpAgency.BillingAddress = this.invoiceAddress();\r\n  tmpAgency.BillingPostCode = this.invoicePostalCode();\r\n  tmpAgency.BillingCity = this.invoicePostalPlace();\r\n\r\n  // Store all the observable values into an object.\r\n  return {\r\n    agency: tmpAgency\r\n  };\r\n};\r\n\r\nRegistrationAgency.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('infoAgency', this.createStoreObject());\r\n};\r\n\r\nRegistrationAgency.prototype.validateInputOnStep = function() {\r\n  if (!this.hasGottenResults() && this.searchQuery.hasError() === false) {\r\n    this.showWarningNextWithoutData(true);\r\n    return false;\r\n  } else {\r\n    return this.parent.validateFields(this.requiredFields);\r\n  }\r\n};\r\n\r\nRegistrationAgency.prototype.toggleAddressAccordion = function() {\r\n  this.showAddressAccordion(!this.showAddressAccordion());\r\n};\r\n\r\nRegistrationAgency.prototype.toggleInvoiceAccordion = function() {\r\n  this.showInvoiceAccordion(!this.showInvoiceAccordion());\r\n};\r\n\r\nRegistrationAgency.prototype.updateContactInformation = function() {\r\n  this.showContactInformation(!this.showContactInformation());\r\n};\r\n\r\nRegistrationAgency.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationAgency.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-agency.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n  this.parent.nextStep();\r\n};\r\n\r\n// Just used for testing.\r\nRegistrationAgency.prototype.nextStepSkip = function() {};\r\n\r\nmodule.exports = RegistrationAgency;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"useElement: true, css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Informasjon om din bedrift</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t<form name=\\\"search-organization\\\" data-bind=\\\"submit: searchOrganization\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"\\\">Organisasjonsnummer</span>\\r\\n\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-btn-group\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"number\\\" placeholder=\\\"\\\" data-bind=\\\"value: searchQuery, valueUpdate: 'blur', css: { 'has-error': searchQuery.hasError, 'is-successful': searchQuery.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<button type=\\\"submit\\\" class=\\\"btn btn-primary\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tSøk\\r\\n\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !searchQuery.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: searchQuery.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: searchQuery.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !showWarningNextWithoutData() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: showWarningNextWithoutData }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span>Du kan ikke gå til neste steg før du har valgt en bedrift.</span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<!-- ko if: isSearching -->\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"loader-container\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"loader-text\\\">\\r\\n\\t\\t\\t\\t\\t<h3>Søker...</h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\r\\n\\t\\t<!-- ko if: hasSearched() === true -->\\r\\n\\t\\t  <div class=\\\"result\\\">\\r\\n\\r\\n\\t\\t\\t  <!-- ko if: results().length === 0 -->\\r\\n\\t\\t\\t    <p class=\\\"result-text\\\" >Vi fikk dessverre ingen treff. Ta gjerne kontakt med oss på <span data-bind=\\\"html: parent.text.phoneNumberSupport\\\"></span>, så hjelper vi deg.</p>\\r\\n\\t\\t\\t  <!-- /ko -->\\r\\n\\r\\n\\t\\t\\t  <!-- ko if: results().length === 1 -->\\r\\n          <!-- ko if: results()[0].IsMember === false -->\\r\\n\\t\\t\\t\\t    <h3 class=\\\"result-text\\\" >Vi fant</h3>\\r\\n          <!-- /ko -->\\r\\n\\t\\t\\t  <!-- /ko -->\\r\\n\\r\\n\\t\\t\\t  <!-- ko if: results().length > 1 -->\\r\\n\\t\\t\\t  <p class=\\\"result-text\\\" >Vi fant følgende virksomheter</p>\\r\\n\\t\\t\\t  <table class=\\\"table-simple\\\">\\r\\n\\t\\t\\t\\t  <thead>\\r\\n\\t\\t\\t\\t\\t  <tr>\\r\\n\\t\\t\\t\\t\\t\\t  <td>Velg</td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>Navn</td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>Postnummer</td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>Poststed</td>\\r\\n\\t\\t\\t\\t\\t  </tr>\\r\\n\\t\\t\\t\\t  </thead>\\r\\n\\t\\t\\t\\t  <tbody>\\r\\n\\t\\t\\t\\t\\t  <!-- ko foreach: results -->\\r\\n\\t\\t\\t\\t\\t  <tr>\\r\\n\\t\\t\\t\\t\\t\\t  <td>\\r\\n\\t\\t\\t\\t\\t\\t\\t  <input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"member-bureau-rn\\\" data-bind=\\\"value: $index(), attr: { id: 'bureau-rn-option-' + $index() }, checked: $parent.resultOption\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t  <label class=\\\"form-label form-label-radio \\\" for=\\\"bureau-rn-option-1\\\" data-bind=\\\"attr: { for: 'bureau-rn-option-' + $index() }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t  </td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>\\r\\n\\t\\t\\t\\t\\t\\t\\t  <span data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t  </td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>\\r\\n\\t\\t\\t\\t\\t\\t\\t  <span data-bind=\\\"text: StreetPostCode\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t  </td>\\r\\n\\t\\t\\t\\t\\t\\t  <td>\\r\\n\\t\\t\\t\\t\\t\\t\\t  <span data-bind=\\\"text: StreetCity\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t  </td>\\r\\n\\t\\t\\t\\t\\t  </tr>\\r\\n\\t\\t\\t\\t\\t  <!-- /ko -->\\r\\n\\t\\t\\t\\t  </tbody>\\r\\n\\t\\t\\t  </table>\\r\\n\\t\\t\\t  <!-- /ko -->\\r\\n\\t\\t  </div>\\r\\n\\r\\n\\t\\t  <!-- ko ifnot: results().length === 0 -->\\r\\n\\t\\t\\t\\t<p class=\\\"result-text\\\" data-bind=\\\"visible: isMember()\\\">Denne bedriften er allerede medlem. Ta gjerne kontakt med oss på <span data-bind=\\\"html: parent.text.phoneNumberSupport\\\"></span>, så hjelper vi deg.</p>\\r\\n\\t\\t\\t\\t<div data-bind=\\\"visible: !isMember()\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"result-single\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\" data-bind=\\\"visible: !showContactInformation()\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h4 data-bind=\\\"text: name\\\"></h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tE-post: <span data-bind=\\\"text: email\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: phone !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tTelefon: <span data-bind=\\\"text: phone\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: website !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tInternettside: <span data-bind=\\\"text: website\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"result-input\\\" data-bind=\\\"visible: showContactInformation\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h4 data-bind=\\\"text: name\\\"></h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"results-change-email\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span>E-post:</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"form-input\\\" name=\\\"results-change\\\" id=\\\"results-change-email\\\" data-bind=\\\"value: email\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: phone !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"results-change-phone\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span>Telefon:</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"form-input\\\" name=\\\"results-change\\\" id=\\\"results-change-phone\\\" data-bind=\\\"value: phone\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: website !== null -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"results-change-website\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span>Internettside: </span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" class=\\\"form-input\\\" name=\\\"results-change\\\" id=\\\"results-change-website\\\" data-bind=\\\"value: website\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<a href=\\\"\\\" data-bind=\\\"click: updateContactInformation, visible: !showContactInformation()\\\">Endre kontaktinformasjon</a>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<form name=\\\"info-agency\\\" class=\\\"form-info-agency\\\" data-bind=\\\"submit: submitForm, visible: !isMember()\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-7\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': marketingName.hasError }\\\">Markedsføringsnavn (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: marketingName, valueUpdate: 'blur', css: { 'has-error': marketingName.hasError, 'is-successful': marketingName.isSuccessful }\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: marketingName.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: marketingName.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: marketingName.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: marketingName.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': headCount.hasError }\\\">\\r\\n                  Årsverk som jobber med regnskap\\r\\n                  <input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: headCount, valueUpdate: 'blur', css: { 'has-error': headCount.hasError, 'is-successful': headCount.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n                  <span class=\\\"icon-check\\\" data-bind=\\\"css: { active: headCount.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: headCount.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: headCount.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: headCount.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"agency-registered-auditor\\\" name=\\\"\\\" value=\\\"\\\" data-bind=\\\"checked: registeredAuditor\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-checkbox \\\" for=\\\"agency-registered-auditor\\\">Har godkjenning som revisorselskap</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-7\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoiceEmail.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tFakturaepost\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"email\\\" placeholder=\\\"\\\" data-bind=\\\"value: invoiceEmail, valueUpdate: 'blur', css: { 'has-error': invoiceEmail.hasError, 'is-successful': invoiceEmail.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: invoiceEmail.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: invoiceEmail.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: invoiceEmail.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoiceEmail.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<h3>Postadresse</h3>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-7\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': co.hasError }\\\">C/O (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: co, valueUpdate: 'blur', css: { 'has-error': co.hasError, 'is-successful': co.isSuccessful }\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: co.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: co.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: co.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: co.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-7\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postalAddress.hasError }\\\">Postadresse / Postboks\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: postalAddress, valueUpdate: 'blur', css: { 'has-error': postalAddress.hasError, 'is-successful': postalAddress.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: postalAddress.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: postalAddress.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: postalAddress.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: postalAddress.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tPostnummer\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"number\\\" data-bind=\\\"value: postalCode, valueUpdate: 'blur', css: { 'has-error': postalCode.hasError, 'is-successful': postalCode.isSuccessful }\\\" aria-required=\\\"true\\\" maxlength=\\\"4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: postalCode.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: postalCode.hasError }\\\"></span>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !postalCode.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: postalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: postalCode.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-4 end\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': postalPlace.hasError }\\\">Poststed\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" data-postal-place=\\\"1\\\" type=\\\"text\\\" data-bind=\\\"value: postalPlace\\\" aria-required=\\\"true\\\" readonly>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</form>\\r\\n\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row form-row accordion-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single\\\" data-bind=\\\"css: { 'is-active': showAddressAccordion }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<header class=\\\"\\\" data-bind=\\\"click: toggleAddressAccordion\\\">\\r\\n                  <button type=\\\"button\\\" class=\\\"btn btn-accordion-list\\\" data-accordion-id=\\\"1\\\">\\r\\n                    <span class=\\\"btn-text\\\">Legg til annen besøksadresse</span>\\r\\n                    <span class=\\\"icon-arrow right\\\"></span>\\r\\n                  </button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-visit-address=\\\"true\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<form name=\\\"info-agency-visit\\\" class=\\\"form-info-agency-visit\\\" data-bind=\\\"submit: submitForm\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': visitCo.hasError }\\\">C/O (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: visitCo, valueUpdate: 'blur', css: { 'has-error': visitCo.hasError, 'is-successful': visitCo.isSuccessful }\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: visitCo.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: visitCo.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: visitCo.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: visitCo.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': visitAddress.hasError }\\\">Postadresse / Postboks\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: visitAddress, valueUpdate: 'blur', css: { 'has-error': visitAddress.hasError, 'is-successful': visitAddress.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: visitAddress.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: visitAddress.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: visitAddress.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: visitAddress.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-5\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': visitPostalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tPostnummer\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"number\\\" data-bind=\\\"value: visitPostalCode, valueUpdate: 'blur', css: { 'has-error': visitPostalCode.hasError, 'is-successful': visitPostalCode.isSuccessful }\\\" aria-required=\\\"true\\\" maxlength=\\\"4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: visitPostalCode.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: visitPostalCode.hasError }\\\"></span>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !visitPostalCode.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: visitPostalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: visitPostalCode.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6 end\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': visitPostalPlace.hasError }\\\">Poststed\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" data-bind=\\\"value: visitPostalPlace\\\" data-postal-place=\\\"2\\\" type=\\\"text\\\" aria-required=\\\"true\\\" readonly>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row form-row accordion-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single\\\" data-bind=\\\"css: { 'is-active': showInvoiceAccordion }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<header class=\\\"\\\" data-bind=\\\"click: toggleInvoiceAccordion\\\">\\r\\n                  <button type=\\\"button\\\" class=\\\"btn btn-accordion-list\\\" data-accordion-id=\\\"1\\\">\\r\\n                    <span class=\\\"btn-text\\\">Legg til annen fakturaadresse</span>\\r\\n                    <span class=\\\"icon-arrow right\\\"></span>\\r\\n                  </button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-invoice-address=\\\"true\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<form name=\\\"info-agency-invoice\\\" class=\\\"form-info-agency-invoice\\\" data-bind=\\\"submit: submitForm\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoiceCo.hasError }\\\">C/O (valgfritt)\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: invoiceCo, valueUpdate: 'blur', css: { 'has-error': invoiceCo.hasError, 'is-successful': invoiceCo.isSuccessful }\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: invoiceCo.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: invoiceCo.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: invoiceCo.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoiceCo.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoiceAddress.hasError }\\\">Postadresse / Postboks\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: invoiceAddress, valueUpdate: 'blur', css: { 'has-error': invoiceAddress.hasError, 'is-successful': invoiceAddress.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: invoiceAddress.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: invoiceAddress.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: invoiceAddress.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoiceAddress.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-5\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoicePostalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tPostnummer\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"number\\\" data-bind=\\\"value: invoicePostalCode, valueUpdate: 'blur', css: { 'has-error': invoicePostalCode.hasError, 'is-successful': invoicePostalCode.isSuccessful }\\\" aria-required=\\\"true\\\" maxlength=\\\"4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: invoicePostalCode.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: invoicePostalCode.hasError }\\\"></span>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !invoicePostalCode.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: invoicePostalCode.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: invoicePostalCode.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6 end\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': invoicePostalPlace.hasError }\\\">Poststed\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" data-bind=\\\"value: invoicePostalPlace\\\" data-postal-place=\\\"3\\\" type=\\\"text\\\" aria-required=\\\"true\\\" readonly>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t    \\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- /ko -->\\r\\n\\r\\n\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6 text-right\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep, visible: !isMember()\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction RegistrationInsurance(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n\r\n  self.step = params.step;\r\n  self.API = params.api;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n    }\r\n  });\r\n\r\n  self.isLoading = ko.observable(false);\r\n\r\n  self.showAboutProfessionInsurance = ko.observable(false);\r\n  self.showAboutCrimeInsurance = ko.observable(false);\r\n  self.crimeInsuranceConfirmation = ko.observable(false);\r\n\r\n  self.hasInsurance = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isCheckedOff',\r\n        message: self.parent.errorMessages.noAlternativeChosen\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.requiredFields = [self.hasInsurance];\r\n\r\n  self.toggleUploadInsurance = ko.observable();\r\n\r\n  self.uploadInsuranceText = ko.observable();\r\n\r\n  self.externalInsuranceId = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNotEmpty',\r\n        message: self.parent.errorMessages.requiredFieldEmpty\r\n      }\r\n    ]\r\n  });\r\n  self.externalInsuranceFileName = null;\r\n\r\n  self.hasInsurance.subscribe(function(hasInsurance) {\r\n    // hasInsurance is a string, and not a boolean.\r\n    if (hasInsurance === 'true') {\r\n      self.requiredFields = [self.hasInsurance, self.externalInsuranceId];\r\n    } else {\r\n      self.requiredFields = [self.hasInsurance, self.professionInsuranceId];\r\n    }\r\n  });\r\n\r\n  self.crimeInsuranceConfirmation.subscribe(function(hasCrimeInsurance) {\r\n    if (hasCrimeInsurance) {\r\n      self.requiredFields = [\r\n        self.professionInsuranceId,\r\n        self.criminalInsuranceId,\r\n        self.totalSalaryCost\r\n      ];\r\n    } else {\r\n      self.requiredFields = [self.professionInsuranceId];\r\n    }\r\n  });\r\n\r\n  self.professionInsurances = ko.observableArray();\r\n  self.criminalInsurances = ko.observableArray();\r\n\r\n  self.professionInsuranceId = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isPositiveNumber',\r\n        message: self.parent.errorMessages.noAlternativeChosen\r\n      }\r\n    ]\r\n  });\r\n  self.criminalInsuranceId = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isPositiveNumber',\r\n        message: self.parent.errorMessages.noAlternativeChosen\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.headCount = 0;\r\n  self.totalSalaryCost = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isPositiveNumber',\r\n        message: self.parent.errorMessages.invalidSalaryCost\r\n      }\r\n    ]\r\n  });\r\n\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (parsedRegData.insurance !== undefined) {\r\n      this.populateInputFromStore(parsedRegData.insurance);\r\n    }\r\n  }\r\n\r\n  self.activateComponent();\r\n}\r\n\r\nRegistrationInsurance.prototype.init = function(element) {\r\n  var self = this;\r\n  self.$element = $(element);\r\n\r\n  var $hasInsurance = $($(element).find(\"[data-has-insurance='true']\"));\r\n  var $buyInsurance = $($(element).find(\"[data-has-insurance='false']\"));\r\n  self.hasInsurance.subscribe(function(val) {\r\n    if (val === 'true') {\r\n      $buyInsurance.slideUp(250, 'easeOutQuad', function() {\r\n        $hasInsurance.slideDown(250, 'easeOutQuad', function() {});\r\n      });\r\n    } else {\r\n      $hasInsurance.slideUp(250, 'easeOutQuad', function() {\r\n        $buyInsurance.slideDown(250, 'easeOutQuad', function() {});\r\n      });\r\n    }\r\n  });\r\n\r\n  var $fileInput = $(self.$element.find('#insurance-upload-input'));\r\n  self.insuranceFile = null;\r\n  $fileInput.on('change', function() {\r\n    self.insuranceFile = this.files[0];\r\n  });\r\n};\r\n\r\nRegistrationInsurance.prototype.activateComponent = function() {\r\n  var self = this;\r\n  // Since this is called in the constructor we need to do verify that we are at the correct step.\r\n  if (self.step() === self.parent.currentStep()) {\r\n    self.getHeadCountFromAgency();\r\n    self.getProfessionInsurances();\r\n    self.getCriminalInsurances();\r\n  }\r\n};\r\n\r\nRegistrationInsurance.prototype.uploadClick = function() {\r\n  var fileElem = this.$element.find('#fileElem');\r\n  if (fileElem) {\r\n    fileElem.click();\r\n  }\r\n};\r\n\r\nRegistrationInsurance.prototype.uploadInsurance = function() {\r\n  var self = this;\r\n  var file = self.insuranceFile;\r\n  var url = self.API.postInsuranceDocument; // + '/' + file.name;\r\n  var xhr = new XMLHttpRequest();\r\n\r\n  // If file size is larger than 15 MB.\r\n  if (file.size > 15000000) {\r\n    return;\r\n  }\r\n\r\n  xhr.addEventListener('load', function() {\r\n    self.isLoading(false);\r\n    try {\r\n      if (this.responseText) {\r\n        self.uploadInsuranceText('Filen er lastet opp.');\r\n        self.externalInsuranceId(JSON.parse(this.responseText));\r\n        self.externalInsuranceFileName = file.name;\r\n      } else {\r\n        self.uploadInsuranceText('Noe gikk galt, prøv igjen.');\r\n      }\r\n    } catch (err) {\r\n      // console.error(\"Error uploading: \", err);\r\n      self.uploadInsuranceText('Noe gikk galt, prøv igjen.');\r\n    }\r\n  });\r\n\r\n  self.isLoading(true);\r\n  xhr.open('post', url, true);\r\n  xhr.setRequestHeader('Content-Type', 'multipart/form-data');\r\n  xhr.send(file);\r\n};\r\n\r\nRegistrationInsurance.prototype.uploadSubmit = function() {};\r\n\r\nRegistrationInsurance.prototype.handleFiles = function() {};\r\n\r\nRegistrationInsurance.prototype.getHeadCountFromAgency = function() {\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    if (\r\n      parsedRegData.infoAgency !== undefined &&\r\n      parsedRegData.infoAgency.agency\r\n    ) {\r\n      // Get the headcount in decimals. If the user used \",\" replace it with \".\"\r\n      this.headCount = parseFloat(\r\n        parsedRegData.infoAgency.agency.Employees.toString().replace(/,/, '.'),\r\n        10\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nRegistrationInsurance.prototype.getProfessionInsurances = function() {\r\n  var self = this,\r\n    url = self.API.getProfessionInsurances + '?headCounts=' + self.headCount;\r\n\r\n  // Only perform the API call if we haven't already done so.\r\n  if (self.professionInsurances().length === 0) {\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.professionInsurances(data);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-insurance.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nRegistrationInsurance.prototype.getCriminalInsurances = function() {\r\n  var self = this,\r\n    url = self.API.getCriminalInsurances;\r\n  // Only perform the API call if we haven't already done so.\r\n  if (self.criminalInsurances().length === 0) {\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.criminalInsurances(data);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: registration-insurance.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nRegistrationInsurance.prototype.populateInputFromStore = function(store) {\r\n  this.totalSalaryCost(store.totalSalaryCost);\r\n};\r\n\r\nRegistrationInsurance.prototype.createStoreObject = function() {\r\n  var storeObj = {};\r\n  if (\r\n    this.externalInsuranceFileName !== null &&\r\n    this.externalInsuranceId() !== null\r\n  ) {\r\n    storeObj.externalInsuranceId = this.externalInsuranceId();\r\n    storeObj.externalInsuranceFileName = this.externalInsuranceFileName;\r\n  }\r\n  if (this.totalSalaryCost() !== undefined && this.totalSalaryCost() !== null) {\r\n    storeObj.totalSalaryCost = this.totalSalaryCost();\r\n  }\r\n  if (\r\n    this.professionInsuranceId() !== undefined &&\r\n    this.professionInsuranceId() !== null\r\n  ) {\r\n    storeObj.professionInsuranceId = this.professionInsurances()[\r\n      this.professionInsuranceId()\r\n    ].InsuranceId;\r\n  }\r\n  if (\r\n    this.criminalInsuranceId() !== undefined &&\r\n    this.criminalInsuranceId() !== null\r\n  ) {\r\n    storeObj.criminalInsuranceId = this.criminalInsurances()[\r\n      this.criminalInsuranceId()\r\n    ].InsuranceId;\r\n  }\r\n  // Store all the observable values into an object.\r\n  return storeObj;\r\n};\r\n\r\nRegistrationInsurance.prototype.storeValues = function() {\r\n  this.parent.storeValuesForStep('insurance', this.createStoreObject());\r\n};\r\n\r\nRegistrationInsurance.prototype.validateInputOnStep = function() {\r\n  return this.parent.validateFields(this.requiredFields);\r\n};\r\n\r\nRegistrationInsurance.prototype.toggleAboutProfessionInsurance = function() {\r\n  this.showAboutProfessionInsurance(!this.showAboutProfessionInsurance());\r\n};\r\n\r\nRegistrationInsurance.prototype.toggleAboutCrimeInsurance = function() {\r\n  this.showAboutCrimeInsurance(!this.showAboutCrimeInsurance());\r\n};\r\n\r\nRegistrationInsurance.prototype.previousStep = function() {\r\n  this.parent.previousStep();\r\n};\r\n\r\nRegistrationInsurance.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-insurance.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n  this.parent.nextStep();\r\n};\r\n\r\nmodule.exports = RegistrationInsurance;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"useElement: true, css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Forsikring</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\t\\t<div data-bind=\\\"html: parent.text.insuranceInformation\\\"></div>\\r\\n\\t\\t<div class=\\\"accordion-single\\\" data-bind=\\\"css: { 'is-active': hasInsurance() === 'true' }\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h3>\\r\\n\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"true\\\" id=\\\"rn-has-insurance-1\\\" name=\\\"rn-has-insurance\\\" data-bind=\\\"checked: hasInsurance\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"rn-has-insurance-1\\\">Har forsikring</label>\\r\\n\\t\\t\\t\\t</h3>\\r\\n\\t\\t\\t</header>\\r\\n\\r\\n\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-has-insurance=\\\"true\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<!-- ko if: isLoading -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader-container centered-overlay\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"file\\\" id=\\\"insurance-upload-input\\\" accept=\\\".pdf,image/*\\\" >\\r\\n\\t\\t\\t\\t\\t\\t<p style=\\\"margin-bottom: 20px;\\\">Maks størrelse er 15MB</p>\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" data-bind=\\\"click: uploadInsurance\\\">Last opp ditt forsikingsbevis</button>\\r\\n\\t\\t\\t\\t\\t\\t<div data-bind=\\\"text: uploadInsuranceText\\\">\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !externalInsuranceId.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: externalInsuranceId.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: externalInsuranceId.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"accordion-single form-row\\\"data-bind=\\\"css: { 'is-active': hasInsurance() === 'false' }\\\">\\r\\n\\t\\t\\t<header>\\r\\n\\t\\t\\t\\t<h3>\\r\\n\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" value=\\\"false\\\" id=\\\"rn-has-insurance-2\\\" name=\\\"rn-has-insurance\\\" data-bind=\\\"checked: hasInsurance\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" for=\\\"rn-has-insurance-2\\\">Har ikke forsikring, vil kjøpe den via Regnskap Norge</label>\\r\\n\\t\\t\\t\\t</h3>\\r\\n\\t\\t\\t</header>\\r\\n\\t\\t\\t<div class=\\\"accordion-single-container\\\" data-has-insurance=\\\"false\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"accordion-single-content\\\">\\r\\n\\t\\t\\t\\t\\t<h4 class=\\\"form-label\\\">Profesjonsansvarforsikring</h4>\\r\\n\\t\\t\\t\\t\\t<a data-bind=\\\"click: toggleAboutProfessionInsurance, html: parent.text.professionLiabilityInsuranceDescription\\\" class=\\\"form-row\\\"></a>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"block-grey form-row\\\" data-bind=\\\"visible: showAboutProfessionInsurance, html: parent.text.professionLiabilityInsuranceDescriptionExpanded\\\"></div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6 medium-6 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h4 class=\\\"form-label\\\">Ønsket forsikringssum (pr. skade og pr. år)</h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-radio-list\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: professionInsurances\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-profession-insurance\\\" data-bind=\\\"value: $index(), attr: { id: 'profession-insurance-' + $index() }, checked: $parent.professionInsuranceId\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'profession-insurance-' + $index() }, text: Sum\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\" data-bind=\\\"css: { active: professionInsuranceId.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: professionInsuranceId.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<h4 class=\\\"form-label\\\">Kriminalforsikring (valgfritt)</h4>\\r\\n\\t\\t\\t\\t\\t<a data-bind=\\\"click: toggleAboutCrimeInsurance, html: parent.text.crimeInsuranceDescription\\\" class=\\\"form-row\\\"></a>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"block-grey form-row\\\" data-bind=\\\"visible: showAboutCrimeInsurance, html: parent.text.crimeInsuranceDescriptionExpanded\\\"></div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"crime-insurance-confirm\\\" data-bind=\\\"checked: crimeInsuranceConfirmation\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-checkbox form-label-lowercase\\\" for=\\\"crime-insurance-confirm\\\">Ja, jeg ønsker å kjøpe Kriminalitetsforsikring </label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"visible: crimeInsuranceConfirmation\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6 medium-6 small-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<h4 class=\\\"form-label\\\">Ønsket forsikringssum (pr. skade og pr. år)</h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"form-radio-list\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: criminalInsurances\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-criminal-insurance\\\" data-bind=\\\"value: $index(), attr: { id: 'criminal-insurance-' + $index() }, checked: $parent.criminalInsuranceId\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'criminal-insurance-' + $index() }, text: Sum\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: criminalInsuranceId.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: criminalInsuranceId.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<p style=\\\"margin-bottom: 10px;\\\" data-bind=\\\"html: parent.text.insuranceAgencySalaryInformation\\\"></p>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': totalSalaryCost.hasError }\\\">Oppgi totale lønnskostnader\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"number\\\" placeholder=\\\"\\\" data-bind=\\\"value: totalSalaryCost, valueUpdate: 'blur', css: { 'has-error': totalSalaryCost.hasError, 'is-successful': totalSalaryCost.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: totalSalaryCost.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: totalSalaryCost.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: totalSalaryCost.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: totalSalaryCost.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !hasInsurance.hasError() }\\\">\\r\\n\\t\\t\\t<div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: hasInsurance.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t<span data-bind=\\\"text: hasInsurance.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t<!-- ko if: parent.currentStep() > 0 -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: previousStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tTilbake\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary medium\\\" data-bind=\\\"click: nextStep\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tNeste\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction RegistrationEnd(params) {\r\n  var self = this;\r\n\r\n  if (params.step === undefined) {\r\n    throw 'No steps parameter passed to this component!';\r\n  }\r\n\r\n  self.parent = params.parent;\r\n\r\n  self.step = params.step;\r\n  self.API = params.api;\r\n  self.links = params.links;\r\n  self.currentStep = ko.observable(self.parent.currentStep());\r\n  self.showSuccess = ko.observable(false);\r\n  self.showFail = ko.observable(false);\r\n\r\n  // Determine if this page is the current step.\r\n  self.parent.currentStep.subscribe(function(val) {\r\n    if (val === self.step()) {\r\n      self.activateComponent();\r\n      var regData = sessionStorage.getItem('rn-registration');\r\n      if (regData !== undefined && regData !== null) {\r\n        var parsedRegData = JSON.parse(regData);\r\n        parsedRegData.signupType = self.parent.signuptype;\r\n        this.allData = ko.observable(parsedRegData);\r\n        if (parsedRegData.result) {\r\n          self.showSuccess(true);\r\n          self.showFail(false);\r\n        } else {\r\n          self.showFail(true);\r\n          self.showSuccess(false);\r\n        }\r\n      }\r\n    }\r\n  });\r\n\r\n  // We need to call this function now incase we reload on this step (which will not trigger\r\n  // the currentStep.subscribe function).\r\n  self.activateComponent();\r\n  var regData = sessionStorage.getItem('rn-registration');\r\n  if (regData !== undefined && regData !== null) {\r\n    var parsedRegData = JSON.parse(regData);\r\n    parsedRegData.signupType = self.parent.signuptype;\r\n    this.allData = ko.observable(parsedRegData);\r\n    if (parsedRegData.result) {\r\n      self.showSuccess(true);\r\n      self.showFail(false);\r\n    } else {\r\n      self.showFail(true);\r\n      self.showSuccess(false);\r\n    }\r\n  }\r\n}\r\n\r\nRegistrationEnd.prototype.activateComponent = function() {};\r\n\r\nRegistrationEnd.prototype.nextStep = function() {\r\n  // 1: Validate step. If successful, goto next step.\r\n  if (!this.validateInputOnStep()) {\r\n    var location = window.location.href || document.URL;\r\n    APIHelper.post('/api/log/error', {\r\n      message: 'NOT-VALIDATED: registration-end.js',\r\n      context: location,\r\n      parameters: [\r\n        'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n        'platform: ' + navigator.platform\r\n      ]\r\n    });\r\n    return;\r\n  }\r\n\r\n  // 2: Store values inputted by the user into Storage.\r\n  this.storeValues();\r\n\r\n  // 3: Allow to continue execution.\r\n\r\n  this.submitData();\r\n};\r\n\r\nmodule.exports = RegistrationEnd;\r\n","module.exports = \"<div class=\\\"container-white\\\" data-bind=\\\"css: { active: parent.currentStep() == step() }\\\">\\r\\n\\t<header class=\\\"container-title\\\">\\r\\n\\t\\t<h3>Takk for din innmelding</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"container-content\\\">\\r\\n\\t\\t<div class=\\\"form-row\\\" data-bind=\\\"html: parent.text.successfulSignupInformation, visible: showSuccess\\\"></div>\\r\\n    <div class=\\\"form-row\\\" data-bind=\\\"html: parent.text.failedSignupInformation, visible: showFail\\\"></div>\\r\\n      <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-4 small-6 end\\\">\\r\\n          <a href=\\\"\\\" class=\\\"btn btn-bare\\\" data-bind=\\\"attr: { href: links.frontpageLink }\\\">\\r\\n            <span class=\\\"btn-text\\\">\\r\\n              Tilbake til forsiden\\r\\n            </span>\\r\\n          </a>\\r\\n        </div>\\r\\n        <!-- ko if: parent.currentStep() > 0 -->\\r\\n        <div class=\\\"columns large-3 small-6 text-right\\\">\\r\\n          <a href=\\\"\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"attr: { href: links.logInLink }\\\">\\r\\n            <span class=\\\"btn-text\\\">\\r\\n              Logg inn\\r\\n            </span>\\r\\n          </a>\\r\\n        </div>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  cloneDeep = require('lodash/cloneDeep'),\r\n  decodeHtml = require('_utils/text');\r\nrequire('knockout-postbox');\r\n\r\nfunction ExternalCourse(params) {\r\n  this.API = params.api;\r\n  this.params = params;\r\n\r\n  this.title = ko.observable(decodeHtml(params.title));\r\n  this.organizer = ko.observable(decodeHtml(params.organizer));\r\n\r\n  this.fromDate = ko.observable(params.fromDate);\r\n  this.categories = ko.observableArray(\r\n    ko.utils.arrayMap(params.categories, function(category) {\r\n      var tmpCategory = cloneDeep(category);\r\n      tmpCategory.Hours = ko.observable(tmpCategory.Hours);\r\n      return tmpCategory;\r\n    })\r\n  );\r\n}\r\n\r\nExternalCourse.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.$htmlBody = $('html, body');\r\n  this.editCourseEl = this.$element.siblings('.calculator-extended-course');\r\n  this.showEditCourse = ko.observable(false);\r\n};\r\n\r\nExternalCourse.prototype.updateCourseValues = function(params) {\r\n  this.title(decodeHtml(params.title));\r\n  this.organizer(decodeHtml(params.organizer));\r\n  this.fromDate(params.fromDate);\r\n\r\n  this.categories(\r\n    ko.utils.arrayMap(params.categories, function(category) {\r\n      var tmpCategory = cloneDeep(category);\r\n      tmpCategory.Hours = ko.observable(tmpCategory.Hours);\r\n      return tmpCategory;\r\n    })\r\n  );\r\n  this.categories.valueHasMutated();\r\n};\r\n\r\nExternalCourse.prototype.toggleAddCourse = function() {\r\n  this.toggleEditCourse();\r\n};\r\n\r\nExternalCourse.prototype.toggleEditCourse = function() {\r\n  var self = this;\r\n  if (this.showEditCourse()) {\r\n    this.editCourseEl.slideUp(250, 'easeOutQuad');\r\n    this.showEditCourse(false);\r\n  } else {\r\n    this.editCourseEl.slideUp(250, 'easeOutQuad', function() {\r\n      self.editCourseEl.slideDown(250, 'easeOutQuad', function() {\r\n        // Get the position and subtract the padding.\r\n        var scrollToTarget = self.editCourseEl.offset().top - 100;\r\n        self.$htmlBody.animate({ scrollTop: scrollToTarget + 'px' });\r\n      });\r\n      self.showEditCourse(true);\r\n    });\r\n  }\r\n};\r\n\r\nExternalCourse.prototype.removeCourse = function() {\r\n  var self = this;\r\n  APIHelper.delete(\r\n    this.API.removeCourseApi + '/' + this.params.sequencePk,\r\n    undefined,\r\n    function() {\r\n      self.editCourseEl.slideUp(250, 'easeOutQuad');\r\n      self.showEditCourse(false);\r\n      self.$element.slideUp();\r\n    }\r\n  );\r\n};\r\n\r\nExternalCourse.prototype.editCourse = function() {};\r\n\r\nmodule.exports = ExternalCourse;\r\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","module.exports = \"<div class=\\\"course-row course-row-location\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\t<div class=\\\"courses-row-item course-item-intro external-course\\\">\\r\\n\\t\\t<a href=\\\"\\\" class=\\\"course-link\\\" data-bind=\\\"text: title\\\"></a>\\r\\n\\t\\t<div class=\\\"course-buttons\\\">\\r\\n\\t\\t\\t<div class=\\\"course-button\\\"></div>\\r\\n\\t\\t\\t<div class=\\\"course-button history\\\"></div>\\r\\n\\t\\t\\t<div class=\\\"course-other\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"course-other-label\\\">Kursarrangør: </span><span class=\\\"course-other-name\\\" data-bind=\\\"text: organizer\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"courses-row-item course-item-date\\\">\\r\\n\\t\\t<div class=\\\"date\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-32 icon-left icon-calendar\\\"></span>\\r\\n\\t\\t\\t<span data-bind=\\\"text: fromDate\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<a class=\\\"calendarLink\\\" href=\\\"#\\\">Legg til i kalender</a>\\r\\n\\t</div>\\r\\n\\r\\n\\t<div class=\\\"courses-row-item course-item-hours\\\">\\r\\n\\t\\t<div class=\\\"course-item-clock\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-32 icon-left icon-clock\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"course-item-hours-list\\\">\\r\\n\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t<!-- ko foreach: categories -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: Hours() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours()\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 1}} --><!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</ul>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"course-item-remove\\\">\\r\\n\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-shopping-delete\\\" data-bind=\\\"click: removeCourse\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-close\\\"></span>\\r\\n\\t\\t\\t<span class=\\\"btn-text lowercase\\\">Fjern kurs</span>\\r\\n\\t\\t</button>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"course-item-edit\\\">\\r\\n\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-shopping-delete\\\" data-bind=\\\"click: toggleEditCourse\\\">\\r\\n\\t\\t\\t<span class=\\\"btn-text lowercase\\\">Rediger kurs</span>\\r\\n\\t\\t</button>\\r\\n\\t</div>\\r\\n\\r\\n\\r\\n</div>\\r\\n\\r\\n<div class=\\\"calculator-extended calculator-extended-course external-course\\\" data-bind=\\\"component: { name: 'calculator-extended-course', params: { api: API, absenceLink: params.absenceLink, parent: $data, preAnswers: params } }\\\"></div>\\r\\n\\r\\n<div class=\\\"course-row-mobile course-row-location\\\">\\r\\n\\t<div class=\\\"courses-row-item course-item-intro\\\">\\r\\n\\t\\t<a href=\\\"\\\" class=\\\"course-link\\\" data-bind=\\\"text: title\\\"></a>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"courses-row-item course-item-hours\\\">\\r\\n\\t\\t<div class=\\\"course-item-hours-list\\\">\\r\\n\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t<!-- ko foreach: categories -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: Hours() > 0 -->\\r\\n\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours()\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko component: {name: 'calculator-timeunit', params: {type: 1}} --><!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</ul>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\r\\n\\t<div class=\\\"course-row-item course-item-buttons\\\">\\r\\n\\t\\t<div class=\\\"course-buttons\\\">\\r\\n\\t\\t\\t<div class=\\\"course-button\\\"></div>\\r\\n\\t\\t\\t<div class=\\\"course-button history\\\"></div>\\r\\n\\t\\t\\t<div class=\\\"course-other\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"course-other-label\\\">Kursarrangør:</span><span class=\\\"course-other-name\\\" data-bind=\\\"text: organizer\\\"></span>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\r\\n\\t<div class=\\\"courses-row-item course-item-meta\\\">\\r\\n\\t\\t<div class=\\\"date\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-left icon-calendar\\\"></span>\\r\\n\\t\\t\\t<span data-bind=\\\"text: fromDate\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout');\r\nvar sortBy = require('lodash/sortBy');\r\nvar groupBy = require('lodash/groupBy');\r\nvar forIn = require('lodash/forIn');\r\n\r\nvar chunk = require('_utils/chunk');\r\n\r\nfunction CourseInstructors(params) {\r\n  var self = this;\r\n  var instructorsData = params;\r\n\r\n  if (!instructorsData) {\r\n    return;\r\n  }\r\n\r\n  this.sortFirstName = ko.observable(true);\r\n  this.currentPage = ko.observable(1);\r\n  this.maxItemsPerPage = ko.observable(15);\r\n  this.amountOfItems = ko.observable(instructorsData.instructors.length);\r\n\r\n  // Amount of pages with items.\r\n  this.pages = ko.computed(function() {\r\n    var pages = self.amountOfItems() / self.maxItemsPerPage();\r\n    if (pages < 1) {\r\n      pages = 1;\r\n    }\r\n    return Math.ceil(pages);\r\n  });\r\n\r\n  this.totalInstructors = instructorsData.totalInstructors;\r\n  this.instructors = instructorsData.instructors;\r\n\r\n  // Sort by first name\r\n  this.instructorsSortedFirst = sortBy(this.instructors, 'Name');\r\n  // Sort by last name\r\n  this.instructorsSortedLast = sortBy(this.instructors, function(instructor) {\r\n    var names = instructor.Name.split(' ');\r\n    // Get the last name so we can sort by it.\r\n    return names[names.length - 1];\r\n  });\r\n\r\n  // Divide the sorted array into chunks (more arrays), where each chunk represents a page.\r\n  this.pagesSortedFirst = chunk(\r\n    this.instructorsSortedFirst,\r\n    this.maxItemsPerPage()\r\n  );\r\n  this.pagesSortedLast = chunk(\r\n    this.instructorsSortedLast,\r\n    this.maxItemsPerPage()\r\n  );\r\n\r\n  // Group the chunks by the first character in their first/last name.\r\n  this.groupedSortedFirst = this._groupSortedList(this.pagesSortedFirst, false);\r\n  this.groupedSortedLast = this._groupSortedList(this.pagesSortedLast, true);\r\n\r\n  // Format it into something knockout can work with.\r\n  this.instructorsAZ = ko.observableArray(\r\n    this._formatForKnockout(this.groupedSortedFirst)\r\n  );\r\n  this.instructorsZA = ko.observableArray(\r\n    this._formatForKnockout(this.groupedSortedLast)\r\n  );\r\n\r\n  // This is list that will change according to the sort method. Default is A to Z (/Å).\r\n  this.instructorsList = ko.observableArray(this.instructorsAZ());\r\n\r\n  // This is the list we're actually displaying.\r\n  this.activeList = ko.computed(function() {\r\n    return this.instructorsList()[this.currentPage() - 1];\r\n  }, this);\r\n}\r\n\r\nCourseInstructors.prototype._groupSortedList = function(\r\n  sortedList,\r\n  groupByLastName\r\n) {\r\n  var retArray = [];\r\n\r\n  sortedList.forEach(function(list) {\r\n    retArray.push(\r\n      groupBy(list, function(instructor) {\r\n        if (groupByLastName) {\r\n          var names = instructor.Name.split(' ');\r\n          return names[names.length - 1].charAt(0);\r\n        } else {\r\n          return instructor.Name.charAt(0);\r\n        }\r\n      })\r\n    );\r\n  });\r\n\r\n  return retArray;\r\n};\r\n\r\nCourseInstructors.prototype._formatForKnockout = function(groupedList) {\r\n  var retArray = [];\r\n  groupedList.forEach(function(list) {\r\n    var newArr = [];\r\n    forIn(list, function(value, key) {\r\n      newArr.push({\r\n        letter: key,\r\n        names: value\r\n      });\r\n    });\r\n    retArray.push(newArr);\r\n    newArr = [];\r\n  });\r\n\r\n  return retArray;\r\n};\r\n\r\nCourseInstructors.prototype.sort = function(asc) {\r\n  this.sortFirstName(asc);\r\n  if (asc) {\r\n    this.instructorsList(this.instructorsAZ());\r\n  } else {\r\n    this.instructorsList(this.instructorsZA());\r\n  }\r\n};\r\n\r\n// Will loop through the list items to find the tallest list item and\r\n// set all other list items to this height.\r\nCourseInstructors.prototype.setListItemHeight = function(list) {\r\n  var listItems = $(list).find('.course-instructor-item');\r\n  var i = 0,\r\n    maxHeight = 0,\r\n    newHeight = 0;\r\n  for (i = 0; i < listItems.length; i++) {\r\n    $(listItems[i]).outerHeight('auto');\r\n    newHeight = $(listItems[i]).outerHeight();\r\n    if (newHeight > maxHeight) {\r\n      maxHeight = newHeight;\r\n    }\r\n  }\r\n  for (i = 0; i < listItems.length; i++) {\r\n    $(listItems[i]).outerHeight(maxHeight + 'px');\r\n  }\r\n};\r\n\r\n// Called after activeList has been rendered to DOM. Using the ko template \"hack\".\r\nCourseInstructors.prototype.setListsItemHeight = function(element) {\r\n  var lists = $(element)\r\n      .siblings('.course-content-container')\r\n      .find('.course-instructors-list'),\r\n    self = this;\r\n\r\n  function loopList() {\r\n    for (var i = 0; i < lists.length; i++) {\r\n      self.setListItemHeight(lists[i]);\r\n    }\r\n  }\r\n  $(window).on('resize', function() {\r\n    loopList();\r\n  });\r\n  loopList();\r\n};\r\n\r\nmodule.exports = CourseInstructors;\r\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var baseAssignValue = require('./_baseAssignValue'),\n    createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    result[key].push(value);\n  } else {\n    baseAssignValue(result, key, [value]);\n  }\n});\n\nmodule.exports = groupBy;\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var chunk = function(array, chunkSize) {\r\n  return [].concat.apply(\r\n    [],\r\n    array.map(function(elem, i) {\r\n      return i % chunkSize ? [] : [array.slice(i, i + chunkSize)];\r\n    })\r\n  );\r\n};\r\n\r\nmodule.exports = chunk;\r\n","module.exports = \"<div class=\\\"course-filter row\\\">\\r\\n\\t<div class=\\\"course-filter-group\\\">\\r\\n\\t\\t<span class=\\\"course-filter-title\\\">Sorter navn:</span>\\r\\n\\t\\t<div class=\\\"btn btn-small \\\" data-bind=\\\"click: function () { sort(true); }, css: { current: sortFirstName }\\\"><a href=\\\"#\\\" data-bind=\\\"\\\">Fornavn</a></div>\\r\\n\\t\\t<div class=\\\"btn btn-small\\\" data-bind=\\\"click: function () { sort(false); }, css: { current: !sortFirstName() }\\\"><a href=\\\"#\\\" data-bind=\\\"\\\">Etternavn</a></div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"course-content-container\\\" data-bind=\\\"foreach: {data: activeList }\\\">\\r\\n\\t<div class=\\\"course-instructors-container row\\\">\\r\\n\\t\\t<div class=\\\"course-instructors-list-header\\\"><h2 data-bind=\\\"text: letter\\\"></h2></div>\\r\\n\\t\\t<ul class=\\\"columns large-12 course-instructors-list\\\" data-bind=\\\"foreach: {data: names }\\\">\\r\\n\\t\\t\\t<li class=\\\"columns no-padding large-3 medium-4 small-12 course-instructor-item\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"course-instructor-block row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"instructor-image-container columns large-12 medium-12 small-3\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<img class=\\\"instructor-image \\\" data-bind=\\\"attr: { src: ImageSource }\\\" alt=\\\"\\\" />\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"instructor-text-container columns large-12 medium-12 small-8\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"instructor-name\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<h3 data-bind=\\\"text: Name\\\"></h3>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"instructor-disciplines-mobile\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div data-bind=\\\"text: Title\\\"></div>\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"instructor-disciplines columns large-12 medium-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h4>Tittel:</h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div data-bind=\\\"text: Title\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</li>\\r\\n\\t\\t</ul>\\r\\n\\t</div>\\r\\n</div>\\r\\n<!-- ko template: { name: '', afterRender: setListsItemHeight($element) } --><!-- /ko -->\\r\\n\\r\\n<div data-bind=\\\"visible: pages() > 1\\\" class=\\\"row\\\">\\r\\n\\t<div class=\\\"columns large-12 no-padding\\\">\\r\\n\\t\\t<!-- ko component: { name: 'pagination', params: { currentPage: currentPage, pages: pages } }-->\\r\\n \\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction Employee(params, parent) {\r\n  this.params = params;\r\n  this.parent = parent;\r\n  this.removed = ko.observable(false);\r\n  this.isDeleting = ko.observable(false);\r\n}\r\n\r\nEmployee.prototype.deleteEmployee = function() {\r\n  var self = this;\r\n  self.isDeleting(true);\r\n  var url =\r\n    self.parent.API.endAgencyConnectionForPersonUrl +\r\n    '?aktorIdPerson=' +\r\n    self.params.AktorId +\r\n    '&aktorIdAgency=' +\r\n    self.params.AgencyAktorId;\r\n  var data = [];\r\n\r\n  APIHelper.post(\r\n    url,\r\n    data,\r\n    function() {\r\n      self.isDeleting(false);\r\n      self.removed(true);\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: employee-list.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nfunction BureauEmployees(params) {\r\n  var self = this;\r\n\r\n  self.params = params;\r\n  self.aktorId = self.params.agencyaktorid;\r\n  self.agencies = JSON.parse(self.params.agencies);\r\n  self.API = self.params.api;\r\n  self.aktorId = params.agencyaktorid;\r\n  self.employeeArr = [];\r\n  self.employeeList = ko.observableArray([]);\r\n  self.dropdownTitle = ko.observable('Alle bedrifter');\r\n  self.hasSubordinateOffices = ko.observable(false);\r\n  self.ableToFetchMore = ko.observable(false);\r\n  self.isLoading = ko.observable(false);\r\n  self.removed = ko.observable(false);\r\n  self.agency = ko.observable();\r\n  self.activeModal = ko.observable(false);\r\n\r\n  //Submodels\r\n  self.agencyData = new AgencyData(); //Used under \"Kontroll\"\r\n\r\n  this.init();\r\n}\r\n\r\nBureauEmployees.prototype.init = function() {\r\n  this.getPageData();\r\n};\r\n\r\nBureauEmployees.prototype.getPageData = function() {\r\n  var self = this;\r\n  self.isLoading(true);\r\n\r\n  //Agency data\r\n  self.agencyData.setAgencyData(self.agencies);\r\n\r\n  if (self.agencies.List.length > 0) {\r\n    self.hasSubordinateOffices(true);\r\n  } else {\r\n    self.hasSubordinateOffices(false);\r\n  }\r\n  var url =\r\n    self.API.getAllEmployeesForAllAgenciesInChain +\r\n    '?agencyAktorId=' +\r\n    self.aktorId;\r\n  self.isLoading(true);\r\n\r\n  self.employeeArr = [];\r\n  self.getData(url, function(response) {\r\n    response.forEach(function(employee) {\r\n      self.employeeArr.push(new Employee(employee, self));\r\n    });\r\n    self.setEmployeeData(self.employeeArr);\r\n  });\r\n};\r\n\r\nBureauEmployees.prototype.getData = function(url, callback) {\r\n  var self = this;\r\n  APIHelper.get(\r\n    url,\r\n    callback.bind(this),\r\n    function() {\r\n      self.isLoading(false);\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nBureauEmployees.prototype.setEmployeeData = function(data) {\r\n  //Set data for employee table\r\n  //Update employeeList\r\n  this.employeeList(data);\r\n  this.isLoading(false);\r\n};\r\n\r\nBureauEmployees.prototype.updateEmployeeList = function(parent, data) {\r\n  var self = parent;\r\n  self.isLoading(true);\r\n  //Set data for employee table\r\n  var tempData = [];\r\n\r\n  for (var i = 0; i < data.length; i++) {\r\n    for (var j = 0; j < self.employeeArr.length; j++) {\r\n      if (self.employeeArr[j].params.AgencyAktorId === data[i]) {\r\n        tempData.push(self.employeeArr[j]);\r\n      }\r\n    }\r\n  }\r\n\r\n  if (data.length === 0) {\r\n    tempData = self.employeeArr;\r\n  }\r\n\r\n  self.setEmployeeData(tempData);\r\n};\r\n\r\nBureauEmployees.prototype.deleteEmployee = function(obj) {\r\n  var url =\r\n    this.API.endAgencyConnectionForPersonUrl +\r\n    '?aktorIdPerson=' +\r\n    obj.AktorId +\r\n    '&aktorIdAgency=' +\r\n    this.aktorId;\r\n\r\n  this.deleteEmployeeFromAgency(url);\r\n};\r\n\r\nBureauEmployees.prototype.deleteEmployeeFromAgency = function(url) {\r\n  var self = this;\r\n  var data = [];\r\n\r\n  APIHelper.post(\r\n    url,\r\n    data,\r\n    function() {\r\n      self.removed(true);\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: employee-list.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nBureauEmployees.prototype.toggleModal = function() {\r\n  var self = this;\r\n  self.activeModal(!self.activeModal());\r\n};\r\n\r\n/* Agency Data (Dropdown) */\r\nfunction AgencyData() {\r\n  this.agencyDataReady = ko.observable(false);\r\n  this.agencyList = [];\r\n  this.hasNoSubordinateOffices = ko.observable(false);\r\n}\r\n\r\nAgencyData.prototype.setAgencyData = function(agencies) {\r\n  this.agencyList.push(agencies);\r\n  this.agencyDataReady(true);\r\n};\r\n\r\nmodule.exports = BureauEmployees;\r\n","module.exports = \"<div class=\\\"row\\\">\\r\\n\\t<div class=\\\"columns large-4 medium-6 small-12\\\">\\r\\n\\t\\t<div data-bind=\\\"with: agencyData\\\">\\r\\n\\t\\t<!--<select class=\\\"form-select-wrapper form-select-wrapper-special\\\" data-bind=\\\"options: agencies\\\"></select> -->\\r\\n\\t\\t<!-- ko if: agencyDataReady() && agencyList[0].List.length > 0 -->\\r\\n            <!-- ko component: { name: 'form-multiselect-simple', params: { options: agencyList, category: $parent.agency, parent: $parent, checkedCallback: $parent.updateEmployeeList.bind($data) }} -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"columns large-4 medium-6 small-12\\\">\\r\\n\\t\\t<div class=\\\"right\\\">\\r\\n\\t\\t\\t<button class=\\\"btn btn-primary\\\" data-bind=\\\"click: toggleModal\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\tLegg til ansatt\\r\\n\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t</button>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n<!-- ko if: activeModal() -->\\r\\n\\t<!-- ko component: { name: 'bureau-employee-list-modal', params: { api: API, agencyaktorid: aktorId, closeCallback: toggleModal.bind($data), parent: $data }} --><!-- /ko -->\\r\\n<!-- /ko -->\\r\\n\\r\\n<div class=\\\"employeelist-table-container\\\">\\t\\r\\n\\t<ul class=\\\"employees-list header\\\">\\r\\n\\t\\t<li class=\\\"employeelist-item-container show-for-medium-up\\\">\\r\\n\\t\\t\\t<div class=\\\"employeelist-header clearfix\\\">\\r\\n\\t\\t\\t\\t<div  class=\\\"columns no-padding employee-header-user\\\">\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"text: window.language.employeelist.usernumber\\\">\\r\\n\\t\\t\\t\\t\\t\\tBruker&#8203;nummer\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns no-padding employee-header-user\\\">\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"text: window.language.employeelist.name\\\">\\r\\n\\t\\t\\t\\t\\t\\tNavn\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div data-bind=\\\"text: window.language.employeelist.department, visible: hasSubordinateOffices\\\">\\r\\n\\t\\t\\t\\t\\t\\tAvdeling\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns no-padding employee-header-userinfo\\\" >\\r\\n\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: window.language.employeelist.membership\\\">Medlemskap</span>\\r\\n\\t\\t\\t\\t\\t\\t<span>/</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: window.language.employeelist.payingMembership\\\">Betaler medlemskap</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns no-padding employee-header-userinfo\\\" data-bind=\\\"text: window.language.employeelist.updatestatus\\\">\\r\\n\\t\\t\\t\\t\\tOppdateringsstatus\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns no-padding employee-header-user\\\" data-bind=\\\"text: window.language.employeelist.deleteEmployee\\\">\\r\\n\\t\\t\\t\\t\\tSlett\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</li>\\r\\n\\t\\t<li class=\\\"employeelist-item-container show-for-small-down\\\">\\r\\n\\t\\t\\t<div class=\\\"employee-header-small clearfix\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns no-padding small-12\\\" data-bind=\\\"text: window.language.employeelist.employees\\\">\\r\\n\\t\\t\\t\\t\\t<h4>Ansatte</h4>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</li>\\r\\n\\t</ul>\\r\\n\\t\\r\\n\\t<div class=\\\"loader-container\\\" data-bind=\\\"visible: isLoading\\\">\\r\\n\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t</div>\\r\\n\\r\\n\\t<div data-bind=\\\"foreach: { data: employeeList}\\\">\\r\\n\\t\\t<ul class=\\\"employeelist-row\\\">\\r\\n\\t\\t\\t<li class=\\\"employee-item-information large\\\"> \\r\\n\\t\\t\\t\\t<div class=\\\"employee-item-information-column-one\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-role\\\" data-bind=\\\"text: params.AktorId\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"employee-item-information-column-two\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-name\\\" data-bind=\\\"text: params.Name\\\"></div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-agency\\\" data-bind=\\\"text: params.AgencyName, visible: parent.hasSubordinateOffices\\\"></div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</li>\\r\\n\\t\\t\\t<li class=\\\"employee-item-speaker large\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"employee-row-item-speaker\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-paying-membership\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: params.MembershipType\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t<span>/</span>\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: window.language.employeelist.yes, visible: params.AgencyPaysMembership\\\">Ja</span>\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: window.language.employeelist.no, visible: !params.AgencyPaysMembership\\\">Nei</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-hours\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: (params.UpdateHours !== null ? params.UpdateHours.TotalHoursDone + '/' + params.UpdateHours.Requirement + 't' : '-')\\\"></span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"employee-purchase-information\\\"> \\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"employee-delete\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: !removed() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a href=\\\"#\\\" data-bind=\\\"text: window.language.employeelist.linkDelete, click: deleteEmployee, visible: !isDeleting()\\\">Fjerne fra liste</a>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isDeleting()\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: removed() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\tFjernet\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</li>\\r\\n\\t\\t</ul>\\r\\n\\t</div>\\r\\n\\r\\n\\t<!-- ko if: employeeList().length <= 0  && !isLoading -->\\r\\n\\t<ul class=\\\"employeelist-table-row\\\">\\r\\n\\t\\t<li>Det er ingen planlagte kurs akkurat nå</li>\\r\\n\\t</ul>\\r\\n\\t <!-- /ko -->\\r\\n</div>\"","/*\r\n\tparams:\r\n\t\tAPI\r\n*/\r\n\r\nvar ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  decodeHtml = require('_utils/text');\r\n\r\nfunction AddEmployeeModal(params) {\r\n  var self = this;\r\n  self.params = params;\r\n  self.API = self.params.api;\r\n  self.parent = self.params.parent;\r\n  self.agencyAktorId = self.params.agencyaktorid;\r\n\r\n  self.activeModal = ko.observable(true);\r\n  self.hasSearched = ko.observable(false);\r\n  self.isSearching = ko.observable(false);\r\n  self.isSubmitting = ko.observable(false);\r\n  self.registerNewUser = ko.observable(false);\r\n  self.showErrorMessage = ko.observable(false);\r\n  self.hasUpdatedSuccessfully = ko.observable(false);\r\n  self.isExistingUserMember = ko.observable(false);\r\n  self.errorText = ko.observable('');\r\n  self.successText = ko.observable('');\r\n  self.modalUsers = ko.observable(0);\r\n  self.results = ko.observableArray([]);\r\n  self.resultOption = ko.observable(0);\r\n\r\n  self.searchPerson = function() {\r\n    var url =\r\n      self.API.getPersonById +\r\n      '?aktorId=' +\r\n      encodeURIComponent(self.searchQuery());\r\n    APIHelper.get(\r\n      url,\r\n      function(data) {\r\n        self.hasSearched(true);\r\n        self.results(data);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: add-employee-modal.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n\r\n  self.searchMobileNumber = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isOptional',\r\n        message: 'Feltet må samsvare med det vanlige uttrykket [0-9](8)'\r\n      },\r\n      {\r\n        type: 'isNumber',\r\n        message: 'Feltet må samsvare med det vanlige uttrykket [0-9](8)'\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        length: 8,\r\n        message: 'Feltet må samsvare med det vanlige uttrykket [0-9](8)'\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.searchMobileNumber.subscribe(function(val) {\r\n    self.mobileNumber(val);\r\n  });\r\n\r\n  self.searchEmail = ko.observable().extend({\r\n    required: [\r\n      { type: 'isOptional', message: 'optional' },\r\n      { type: 'isEmail', message: 'Feltet må være en gyldig epostadresse' }\r\n    ]\r\n  });\r\n\r\n  self.searchEmail.subscribe(function(val) {\r\n    self.email(val);\r\n  });\r\n\r\n  self.givenName = ko.observable().extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }]\r\n  });\r\n\r\n  self.surname = ko.observable().extend({\r\n    required: [{ type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }]\r\n  });\r\n\r\n  self.mobileNumber = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: 'Feltet må samsvare med det vanlige uttrykket [0-9](8)'\r\n      },\r\n      {\r\n        type: 'isLength',\r\n        length: 8,\r\n        message: 'Feltet må samsvare med det vanlige uttrykket [0-9](8)'\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.email = ko.observable().extend({\r\n    required: [\r\n      { type: 'isEmail', message: 'Feltet må være en gyldig epostadresse' }\r\n    ]\r\n  });\r\n}\r\n\r\nAddEmployeeModal.prototype.init = function(element) {\r\n  this.element = element;\r\n  this.modalEl = this.element.querySelector('.modal');\r\n};\r\n\r\nAddEmployeeModal.prototype.validateForm = function() {\r\n  this.reset();\r\n  this.isSearching(true);\r\n\r\n  // Check if user already exists.\r\n  this.checkIfExistingUser();\r\n};\r\n\r\nAddEmployeeModal.prototype.checkIfExistingUser = function() {\r\n  var self = this;\r\n  var url =\r\n    self.API.personExistsUrl +\r\n    '?phoneNumber=' +\r\n    encodeURIComponent(self.searchMobileNumber()) +\r\n    '&email=' +\r\n    encodeURIComponent(self.searchEmail());\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      self.hasSearched(true);\r\n      self.results(data);\r\n      self.isSearching(false);\r\n      if (data.length > 0) {\r\n        self.isExistingUserMember(true);\r\n        self.modalEl.scrollTop = 500;\r\n      } else {\r\n        self.isExistingUserMember(false);\r\n      }\r\n    },\r\n    function(err) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: add-employee-modal.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + err.responseText,\r\n          'status: ' + err.status,\r\n          'statusText: ' + err.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nAddEmployeeModal.prototype.addSelectedUser = function() {\r\n  var self = this;\r\n\r\n  if (self.results().length > self.modalUsers()) {\r\n    //get ready to post data\r\n    var userAktorId = self.results()[self.modalUsers()].AktorId;\r\n    var url =\r\n      self.API.connectPersonToAgencyUrl +\r\n      '?aktorIdPerson=' +\r\n      userAktorId +\r\n      '&aktorIdAgency=' +\r\n      self.agencyAktorId;\r\n    this.submitData(url, [], false);\r\n  } else {\r\n    //Show new form\r\n    self.registerNewUser(true);\r\n  }\r\n};\r\n\r\nAddEmployeeModal.prototype.formatData = function() {\r\n  var self = this;\r\n  var url = self.API.createUserUrl;\r\n  this.requiredFields = [\r\n    self.givenName,\r\n    self.surname,\r\n    self.mobileNumber,\r\n    self.email\r\n  ];\r\n  if (!this.validateFields(this.requiredFields)) {\r\n    return;\r\n  }\r\n  var data = {\r\n    AgencyAktorId: self.agencyAktorId,\r\n    FirstName: self.givenName(),\r\n    LastName: self.surname(),\r\n    Phone: self.mobileNumber(),\r\n    Email: self.email()\r\n  };\r\n\r\n  self.submitData(url, data, false);\r\n};\r\n\r\nAddEmployeeModal.prototype.submitData = function(url, data, connectToAgency) {\r\n  var self = this;\r\n  self.isSubmitting(true);\r\n\r\n  APIHelper.post(\r\n    url,\r\n    data,\r\n    function(data) {\r\n      if (connectToAgency && (data !== null && typeof data === 'object')) {\r\n        var userAktorId = data.AktorId;\r\n        var url =\r\n          self.API.connectPersonToAgencyUrl +\r\n          '?aktorIdPerson=' +\r\n          userAktorId +\r\n          '&aktorIdAgency=' +\r\n          self.agencyAktorId;\r\n        self.submitData(url, [], false);\r\n      } else {\r\n        self.hasUpdatedSuccessfully(true);\r\n        self.isSubmitting(false);\r\n        self.parent.getPageData();\r\n      }\r\n    },\r\n    function(err) {\r\n      self.isSubmitting(false);\r\n      self.showErrorMessage(true);\r\n      self.errorText(decodeHtml(err.statusText));\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: add-employee-modal.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + err.responseText,\r\n          'status: ' + err.status,\r\n          'statusText: ' + err.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nAddEmployeeModal.prototype.validateFields = function(fields) {\r\n  var isValid = true;\r\n\r\n  for (var i = 0; i < fields.length; i++) {\r\n    if (fields[i]() === undefined || fields[i]() === null) {\r\n      fields[i].hasError(true);\r\n    }\r\n    if (fields[i].hasError()) {\r\n      isValid = false;\r\n    }\r\n  }\r\n  return isValid;\r\n};\r\n\r\nAddEmployeeModal.prototype.closeModal = function() {\r\n  this.activeModal(!this.activeModal());\r\n  this.params.closeCallback();\r\n};\r\n\r\nAddEmployeeModal.prototype.hideSuccessMessage = function() {\r\n  this.reset();\r\n  this.searchMobileNumber('');\r\n  this.searchEmail('');\r\n  this.searchMobileNumber.hasError(false);\r\n  this.searchEmail.hasError(false);\r\n};\r\n\r\nAddEmployeeModal.prototype.hideErrorMessage = function() {\r\n  this.showErrorMessage(false);\r\n};\r\n\r\nAddEmployeeModal.prototype.reset = function() {\r\n  var self = this;\r\n  self.hasSearched(false);\r\n  self.isSearching(false);\r\n  self.isSubmitting(false);\r\n  self.registerNewUser(false);\r\n  self.showErrorMessage(false);\r\n  self.hasUpdatedSuccessfully(false);\r\n  self.isExistingUserMember(false);\r\n};\r\n\r\nmodule.exports = AddEmployeeModal;\r\n","module.exports = \"\\r\\n<div class=\\\"modal-container\\\" data-bind=\\\"useElement: true, css: {'is-active': activeModal}\\\">\\r\\n\\t<div class=\\\"modal-overlay\\\"></div>\\r\\n\\t<div class=\\\"modal\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n\\t\\t<div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n\\t\\t<h2 data-bind=\\\"\\\">Legg til ansatt</h2>\\r\\n\\t\\t<p>Her kan du legge til ansatt</p>\\r\\n\\t\\t<div class=\\\"modal-form-container\\\">\\r\\n\\t\\t\\t<!-- Form input -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"column large-12\\\">\\r\\n\\t\\t\\t\\t\\t<p class=\\\"left\\\">Fyll inn e-post adressen <span class=\\\"underline\\\">eller</span> mobiltelefonnummeret til personen du ønsker å legge til.</p>\\r\\n\\t\\t\\t\\t\\t<form name=\\\"personal-info\\\" class=\\\"form-personal-info\\\" data-bind=\\\"submit: checkIfExistingUser\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">Mobiltelefon\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"tel\\\" placeholder=\\\"\\\" data-bind=\\\"value: searchMobileNumber, valueUpdate: 'blur', css: { 'has-error': searchMobileNumber.hasError, 'is-successful': searchMobileNumber.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: searchMobileNumber.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: searchMobileNumber.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !searchMobileNumber.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: searchMobileNumber.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: searchMobileNumber.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\teller\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-row row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">E-post\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"email\\\" placeholder=\\\"\\\" data-bind=\\\"value: searchEmail, valueUpdate: 'blur', css: { 'has-error': searchEmail.hasError, 'is-successful': searchEmail.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: searchEmail.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: searchEmail.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !searchEmail.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: searchEmail.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: searchEmail.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-4 no-padding\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: validateForm, visible: !isSearching()\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tSøk etter ansatt\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isSearching()\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t<!-- ko if: hasSearched -->\\r\\n\\t\\t\\t\\t<!-- ko if: isExistingUserMember  -->\\r\\n\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"column large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<p class=\\\"left\\\">Vi fant følgende bruker med</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"block-grey\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<table class=\\\"table-simple\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<thead>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Velg</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Navn</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>Mobilnummer</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>E-post</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</thead>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tbody>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko foreach: results -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-already-user\\\" data-bind=\\\"value: $index(), attr: { id: 'already-user-' + $index() }, checked: $parent.modalUsers\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'already-user-' + $index() }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: FirstName + ' ' + LastName\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: Phone\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: Email\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</tbody>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"inline\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-already-user\\\" data-bind=\\\"value: results().length, attr: { id: 'already-user-' + results().length }, checked: modalUsers\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'already-user-' + results().length }\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"inline\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"\\\">Ansatt er ikke registrert.</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<br><br>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<p class=\\\"left\\\">Man kan ikke registrere ny bruker med samme mobilnummer eller e-postadresse som allerede eksisterer.</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: registerNewUser && hasUpdatedSuccessfully() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 small-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: closeModal\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">Avbryt</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-4 small-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-secondary right\\\" data-bind=\\\"click: addSelectedUser\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tLegg til ansatt\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- ko if: !isExistingUserMember() || registerNewUser -->\\r\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t\\t\\t<p class=\\\"left\\\" data-bind=\\\"visible: !registerNewUser()\\\">Vi finner ingen registrerte brukere.<br></p>\\r\\n\\t\\t\\t\\t\\t\\t<p class=\\\"left\\\">Fyll ut navn og trykk \\\"Legg til Ansatt\\\" knappen for å fullføre registreringen.</p>\\r\\n\\t\\t\\t\\t\\t\\t\\t<form name=\\\"personal-info\\\" class=\\\"form-personal-info\\\" data-bind=\\\"submit: formatData\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': givenName.hasError }\\\">Fornavn\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: givenName, valueUpdate: 'blur', css: { 'has-error': givenName.hasError, 'is-successful': givenName.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: givenName.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: givenName.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: givenName.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: givenName.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': surname.hasError }\\\">Etternavn\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: surname, valueUpdate: 'blur', css: { 'has-error': surname.hasError, 'is-successful': surname.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: surname.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: surname.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: surname.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: surname.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\">Mobiltelefon\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"tel\\\" placeholder=\\\"\\\" data-bind=\\\"value: mobileNumber, valueUpdate: 'blur', css: { 'has-error': mobileNumber.hasError, 'is-successful': mobileNumber.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: mobileNumber.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: mobileNumber.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !mobileNumber.hasError() }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: mobileNumber.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: mobileNumber.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': email.hasError }\\\">E-post\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input\\\" type=\\\"email\\\" placeholder=\\\"\\\" data-bind=\\\"value: email, valueUpdate: 'blur', css: { 'has-error': email.hasError, 'is-successful': email.isSuccessful }\\\" aria-required=\\\"true\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: email.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: email.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: email.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: email.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"message is-error note\\\" data-bind=\\\"visible: showErrorMessage\\\" >\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"message-icon\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"info-circle\\\">!</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"message-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<h4>Noe gikk galt ved registreringen.</h4>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<p  data-bind=\\\"text: errorText\\\"></p>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"#\\\" data-bind=\\\"click: hideErrorMessage\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</a>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: hasUpdatedSuccessfully() -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-3 medium-3 small-4 no-padding\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: closeModal\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tAvbryt\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"columns large-4 medium-4 small-4 no-padding\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<button type=\\\"submit\\\" class=\\\"btn btn-secondary right\\\" data-bind=\\\"visible: !isSubmitting()\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tLegg til Ansatt\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isSubmitting()\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t</form>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<!-- ko if: hasUpdatedSuccessfully() -->\\r\\n\\t\\t\\t\\t<div class=\\\"message is-success\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"message-icon\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"info-circle\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"message-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h4>Ansatt er lagt til eller hadde allerede en stilling i bedriften</h4>\\r\\n\\t\\t\\t\\t\\t\\t<p>Registrering av medlemskap for ansatt gjøres på våre medlemssider.</p>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"#\\\" data-bind=\\\"click: hideSuccessMessage\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\"></span>\\r\\n\\t\\t\\t\\t\\t</a>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-3 medium-3 no-padding\\\">\\r\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-bare medium\\\" data-bind=\\\"click: closeModal\\\" tabindex=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\tAvbryt\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  find = require('lodash/find');\r\n\r\n// CRM uses this ID on professionInsuranceID to indicate that the bureau does not\r\n// have any insurances.\r\nvar HAS_NO_INSURANCE = '3ce2f469-35f7-e111-aed5-0050568261bb'; // guid for external insurance\r\n\r\nfunction BureauInsurances(params) {\r\n  var self = this;\r\n\r\n  self.aktorIdAgency = params.aktorIdAgency;\r\n  self.API = params.api;\r\n  self.texts = params.texts;\r\n  self.hasExternalInsurance = ko.observable(false);\r\n  self.hasProfessionInsuranceFromChainOffice = ko.observable(\r\n    params.hasProfessionInsuranceFromChainOffice\r\n  );\r\n  self.hasCrimeInsuranceFromChainOffice = ko.observable(\r\n    params.hasCrimeInsuranceFromChainOffice\r\n  );\r\n  var hasInsurance =\r\n    params.hasProfessionInsurance || params.hasCriminalInsurance;\r\n  self.showCrimeInsurance = ko.observable(false);\r\n  if (params.hasExternalInsurance) {\r\n    hasInsurance = false;\r\n    self.hasExternalInsurance(true);\r\n    self.showCrimeInsurance(self.shouldShowCrimeInsurance(hasInsurance, false));\r\n  } else {\r\n    self.showCrimeInsurance(\r\n      self.shouldShowCrimeInsurance(params.hasProfessionInsurance, false)\r\n    );\r\n  }\r\n  self.showProfessionInsuranceCheckbox = ko.observable(\r\n    params.hasProfessionInsurance ? false : true\r\n  );\r\n  self.showCrimeInsuranceCheckbox = ko.observable(\r\n    params.hasCriminalInsurance ? false : true\r\n  );\r\n  self.professionInsuranceValueIsSelected = ko.observable(false);\r\n\r\n  // This is the object that contains insurance information that we will send and receive.\r\n  self.storeObj = {\r\n    AktorIdAgency: null,\r\n    HeadCounts: 0,\r\n    ProfessionInsuranceId: null,\r\n    CriminalInsuranceId: null,\r\n    TotalSalaryCost: 0,\r\n    InsuranceSumProfessionInsurance: 0,\r\n    InsuranceSumCrimeInsurance: 0\r\n  };\r\n\r\n  self.isLoadingUpdate = ko.observable(false);\r\n  self.isSuccessfulUpdate = ko.observable(false);\r\n  self.updateText = ko.observable('');\r\n\r\n  self.professionInsurances = ko.observableArray();\r\n  self.professionInsuranceId = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Du må velge ett av alternativene' }\r\n    ]\r\n  });\r\n\r\n  self.isLoadingProfessionInsurances = ko.observable(false);\r\n\r\n  self.criminalInsurances = ko.observableArray();\r\n  self.criminalInsuranceId = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Du må velge ett av alternativene' }\r\n    ]\r\n  });\r\n\r\n  self.headCount = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' },\r\n      { type: 'isPositiveNumber', message: 'Det kan kun skrive inn tall' }\r\n    ]\r\n  });\r\n\r\n  self.totalSalaryCost = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' },\r\n      { type: 'isPositiveNumber', message: 'Det kan kun skrive inn tall' },\r\n      {\r\n        type: 'isLargerThan',\r\n        message: 'Lønnskostnader må oppgis',\r\n        threshold: 0\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.professionInsuranceConfirmation = ko.observable(\r\n    params.hasProfessionInsurance || false\r\n  );\r\n  self.crimeInsuranceConfirmation = ko.observable(\r\n    params.hasCriminalInsurance || false\r\n  );\r\n\r\n  self.professionInsuranceConfirmation.subscribe(function(\r\n    hasProfessionInsurance\r\n  ) {\r\n    self.showCrimeInsurance(\r\n      self.shouldShowCrimeInsurance(\r\n        hasInsurance || hasProfessionInsurance,\r\n        false\r\n      )\r\n    );\r\n    if (!hasProfessionInsurance) {\r\n      self.professionInsuranceId(undefined);\r\n    }\r\n  });\r\n\r\n  self.requiredFields = [self.headCount];\r\n\r\n  self.updateRequestSent = ko.observable(false);\r\n\r\n  self.getData();\r\n\r\n  // We do not want to subscribe to the headCount until we have fetched existing data.\r\n  self.headCount.subscribe(function() {\r\n    self.getProfessionInsurances(false);\r\n  });\r\n}\r\n\r\nBureauInsurances.prototype.shouldShowCrimeInsurance = function(\r\n  hasInsurance,\r\n  state\r\n) {\r\n  if (hasInsurance) {\r\n    return true;\r\n  } else {\r\n    return state;\r\n  }\r\n};\r\n\r\nBureauInsurances.prototype.getData = function() {\r\n  this.getExistingData();\r\n};\r\n\r\nBureauInsurances.prototype.getExistingData = function() {\r\n  var self = this,\r\n    url =\r\n      self.API.getInsuranceInformation + '?agencyAktorId=' + self.aktorIdAgency;\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      self.setExistingData(data);\r\n      self.storeObj = data;\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: bureau-insurances.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nBureauInsurances.prototype.setExistingData = function(data) {\r\n  this.totalSalaryCost(data.TotalSalaryCost);\r\n  this.professionInsuranceId(data.ProfessionInsuranceId);\r\n  if (this.professionInsuranceId() === HAS_NO_INSURANCE) {\r\n    // Show the insurance box.\r\n    this.showProfessionInsuranceCheckbox(true);\r\n    // Set the checkbox to disabled.\r\n    this.professionInsuranceConfirmation(false);\r\n    this.hasExternalInsurance(true);\r\n  } else {\r\n    this.hasExternalInsurance(false);\r\n  }\r\n  this.criminalInsuranceId(data.CriminalInsuranceId);\r\n  this.headCount(data.HeadCounts);\r\n  this.getCrimeInsurances();\r\n};\r\n\r\nBureauInsurances.prototype.getProfessionInsurances = function() {\r\n  var self = this,\r\n    url =\r\n      self.API.getProfessionInsurances +\r\n      '?headCounts=' +\r\n      self\r\n        .headCount()\r\n        .toString()\r\n        .replace(',', '.');\r\n\r\n  self.isLoadingProfessionInsurances(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      self.professionInsurances(data);\r\n      // Check to see if the chosen item is in the list.\r\n      var tempProfId = '';\r\n      find(data, function(o) {\r\n        if (o.InsuranceId === self.professionInsuranceId()) {\r\n          tempProfId = o.InsuranceId;\r\n          return true;\r\n        }\r\n        return false;\r\n      });\r\n      self.professionInsuranceId(tempProfId);\r\n      self.isLoadingProfessionInsurances(false);\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: bureau-insurances.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nBureauInsurances.prototype.getCrimeInsurances = function() {\r\n  var self = this,\r\n    url = self.API.getCriminalInsurances;\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      self.criminalInsurances(data);\r\n    },\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: bureau-insurances.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nBureauInsurances.prototype.validateFields = function(fields) {\r\n  var isValid = true;\r\n  for (var i = 0; i < fields.length; i++) {\r\n    if (fields[i]() === undefined || fields[i]() === null) {\r\n      fields[i].hasError(true);\r\n    }\r\n    if (fields[i].hasError()) {\r\n      isValid = false;\r\n    }\r\n  }\r\n\r\n  return isValid;\r\n};\r\n\r\nBureauInsurances.prototype.createStoreObj = function() {\r\n  this.storeObj.HeadCounts = this.headCount()\r\n    .toString()\r\n    .replace(',', '.');\r\n  if (\r\n    this.professionInsuranceId() !== undefined &&\r\n    this.professionInsuranceId() !== null\r\n  ) {\r\n    this.storeObj.ProfessionInsuranceId = this.professionInsuranceId().toString();\r\n  }\r\n  // Only update crime insurance stuff if the checkbox is active (or bureau already has crime insurance).\r\n  if (this.crimeInsuranceConfirmation()) {\r\n    if (\r\n      this.totalSalaryCost() !== undefined &&\r\n      this.totalSalaryCost() !== null\r\n    ) {\r\n      this.storeObj.TotalSalaryCost = parseInt(this.totalSalaryCost(), 10);\r\n    }\r\n    if (\r\n      this.criminalInsuranceId() !== undefined &&\r\n      this.criminalInsuranceId() !== null\r\n    ) {\r\n      if (this.criminalInsuranceId() !== undefined) {\r\n        this.storeObj.CriminalInsuranceId = this.criminalInsuranceId().toString();\r\n      }\r\n    }\r\n  }\r\n\r\n  return this.storeObj;\r\n};\r\n\r\nBureauInsurances.prototype.closeUpdateRequestSent = function() {\r\n  this.updateRequestSent(false);\r\n};\r\n\r\nBureauInsurances.prototype.updateInsurances = function() {\r\n  // Don't update if totalSalaryCost is not a positive number.\r\n  if (\r\n    this.crimeInsuranceConfirmation() &&\r\n    parseInt(this.totalSalaryCost(), 10) <= 0\r\n  ) {\r\n    this.updateRequestSent(true);\r\n    this.isSuccessfulUpdate(false);\r\n    this.updateText(this.texts.totalSalaryCostErrorText);\r\n    return;\r\n  }\r\n  // CrimeInsuranceId must be set if user has chosen to have criminal insurance.\r\n  if (this.crimeInsuranceConfirmation()) {\r\n    this.requiredFields = [\r\n      this.headCount,\r\n      this.professionInsuranceId,\r\n      this.totalSalaryCost,\r\n      this.criminalInsuranceId\r\n    ];\r\n  } else {\r\n    this.requiredFields = [this.headCount];\r\n  }\r\n  if (!this.validateFields(this.requiredFields)) {\r\n    return;\r\n  }\r\n\r\n  var self = this,\r\n    url = self.API.addOrUpdateInsuranceAndEmployees,\r\n    data = self.createStoreObj();\r\n\r\n  self.isLoadingUpdate(true);\r\n  APIHelper.post(\r\n    url,\r\n    data,\r\n    function(response) {\r\n      self.updateRequestSent(true);\r\n      self.isLoadingUpdate(false);\r\n      self.isSuccessfulUpdate(true);\r\n      self.updateText(response);\r\n    },\r\n    function() {\r\n      self.updateRequestSent(true);\r\n      self.isLoadingUpdate(false);\r\n      self.isSuccessfulUpdate(false);\r\n      self.updateText(self.texts.errorText);\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = BureauInsurances;\r\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","module.exports = \"<div class=\\\"bureau-insurances profile-body-employer columns large-12\\\">\\r\\n\\t<header>\\r\\n\\t\\t<h3>Endre forsikringsopplysninger og årsverk</h3>\\r\\n\\t</header>\\r\\n\\t<div class=\\\"profile-body-work\\\">\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t<h4 class=\\\"label-one-line\\\">Hvor mange årsverk har bedriften?</h4>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': headCount.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: headCount, valueUpdate: 'blur', hasFocus: professionInsuranceValueIsSelected, css: { 'has-error': headCount.hasError, 'is-successful': headCount.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: headCount.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: headCount.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: headCount.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: headCount.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<hr />\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t<h3>Profesjonsansvarsforsikring</h3>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- ko if: showProfessionInsuranceCheckbox -->\\r\\n\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-12\\\">\\r\\n\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"profession-insurance-confirm\\\" data-bind=\\\"checked: professionInsuranceConfirmation\\\">\\r\\n\\t\\t\\t\\t<label class=\\\"form-label form-label-checkbox form-label-lowercase\\\" for=\\\"profession-insurance-confirm\\\">Bedriften ønsker å tegne profesjonsansvarsforsikring via Regnskap Norges kollektive avtale</label>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<div data-bind=\\\"visible: professionInsuranceConfirmation\\\">\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<h4 class=\\\"label-one-line\\\">Ønsket forsikringssum i neste periode - forsikringssum oppgitt i G</h4>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"form-radio-list\\\">\\r\\n\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: professionInsurances\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-profession-insurance\\\" data-bind=\\\"value: InsuranceId, attr: { id: 'profession-insurance-' + $index() }, checked: $parent.professionInsuranceId\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'profession-insurance-' + $index() }, text: Sum\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"loader-overlay\\\" data-bind=\\\"css: { 'is-loading': isLoadingProfessionInsurances }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"loader\\\" data-bind=\\\"css: { 'is-loading': isLoadingProfessionInsurances }\\\"></div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\" data-bind=\\\"css: { active: professionInsuranceId.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: professionInsuranceId.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t<hr />\\r\\n\\t\\t<!-- ko if: showCrimeInsurance -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<h3>Kriminalitetsforsikring</h3>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- ko if: showCrimeInsuranceCheckbox -->\\r\\n\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"crime-insurance-confirm\\\" data-bind=\\\"checked: crimeInsuranceConfirmation\\\">\\r\\n\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-checkbox form-label-lowercase\\\" for=\\\"crime-insurance-confirm\\\">Bedriften ønsker å tegne kriminalitetsforsikring</label>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t<div data-bind=\\\"visible: crimeInsuranceConfirmation\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h4 class=\\\"label-one-line\\\">Oppdaterte lønnskostnader?</h4>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': totalSalaryCost.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: totalSalaryCost, valueUpdate: 'blur', css: { 'has-error': totalSalaryCost.hasError, 'is-successful': totalSalaryCost.isSuccessful }\\\" aria-required=\\\"true\\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\" data-bind=\\\"css: { active: totalSalaryCost.isSuccessful }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\" data-bind=\\\"css: { active: totalSalaryCost.hasError }\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\"  data-bind=\\\"css: { active: totalSalaryCost.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: totalSalaryCost.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"row form-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t<h4 class=\\\"label-one-line\\\">Ønsket forsikringssum i neste periode - forsikringssum oppgitt i G</h4>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"columns large-6\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"form-radio-list\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: criminalInsurances\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"registration-criminal-insurance\\\" data-bind=\\\"value: InsuranceId, attr: { id: 'criminal-insurance-' + $index() }, checked: $parent.criminalInsuranceId\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'criminal-insurance-' + $index() }, text: Sum\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"error-box pointer-left\\\" data-bind=\\\"css: { active: criminalInsuranceId.hasError }\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span data-bind=\\\"text: criminalInsuranceId.validationMessage\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<hr />\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<div class=\\\"row bureau-insurance-action\\\" data-bind=\\\"visible: !updateRequestSent()\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8 small-12\\\">\\r\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary small\\\" data-bind=\\\"click: updateInsurances, disable: isLoadingUpdate() || (!professionInsuranceId() && !hasExternalInsurance() && !hasProfessionInsuranceFromChainOffice() && !hasCrimeInsuranceFromChainOffice()) || (!professionInsuranceId() && showProfessionInsuranceCheckbox() && professionInsuranceConfirmation())\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ko if: isLoadingUpdate() -->\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tSender inn...\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t<!-- ko if: !isLoadingUpdate() -->\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n\\t\\t\\t\\t\\t\\tSend inn\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t</button>\\r\\n\\t\\t\\t\\t<div class=\\\"loader is-loading\\\" data-bind=\\\"css: { 'is-loading': isLoadingUpdate }\\\"></div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<div class=\\\"row\\\" data-bind=\\\"visible: updateRequestSent\\\">\\r\\n\\t\\t\\t<div class=\\\"columns large-8\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"message\\\" data-bind=\\\"css: { 'is-success': isSuccessfulUpdate(), 'is-error': !isSuccessfulUpdate()}\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"message-icon\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"info-circle\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: isSuccessfulUpdate -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-check\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: isSuccessfulUpdate -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<span>!</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\t\\r\\n\\t\\t\\t\\t\\t<div class=\\\"message-text\\\">\\r\\n\\t\\t\\t\\t\\t\\t<p data-bind=\\\"text: updateText\\\">\\r\\n\\t\\t\\t\\t\\t\\t</p>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t<a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"#\\\" data-bind=\\\"click: closeUpdateRequestSent.bind($data)\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"icon-close\\\"></span>\\r\\n\\t\\t\\t\\t\\t</a>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</div>\\r\\n\\t\\t\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nvar MONTH_NAME = [\r\n  'Januar', // index 0 is not actually used\r\n  'Januar',\r\n  'Februar',\r\n  'Mars',\r\n  'April',\r\n  'Mai',\r\n  'Juni',\r\n  'Juli',\r\n  'August',\r\n  'September',\r\n  'Oktober',\r\n  'November',\r\n  'Desember'\r\n];\r\n\r\nfunction CalendarRN(params) {\r\n  this.params = params;\r\n  this.API = params.api;\r\n\r\n  this.calendarList = ko.observableArray([]);\r\n\r\n  // Initialize the calendar with the current year and month\r\n  this.currentYear = ko.observable(new Date().getFullYear());\r\n  // Don't want to work with January = 0 --> January should be = 1\r\n  this.currentMonth = ko.observable(new Date().getMonth() + 1);\r\n\r\n  // Loading status.\r\n  this.isLoading = ko.observable(false);\r\n\r\n  // Only listen to changes in the month. If the year changes, so does the month.\r\n  this.currentMonth.subscribe(function() {\r\n    this.getArticleCalendar();\r\n  }, this);\r\n\r\n  // Compute the text combination of month + year to show in the calendar.\r\n  this.monthName = ko.computed(function() {\r\n    return '' + MONTH_NAME[this.currentMonth()];\r\n  }, this);\r\n\r\n  this.init();\r\n}\r\n\r\nCalendarRN.prototype.init = function() {\r\n  this.getArticleCalendar();\r\n};\r\n\r\n// @previous : If we're moving to the previous month or the next month.\r\nCalendarRN.prototype.changeMonth = function(previous) {\r\n  this.isLoading(true);\r\n  var tmpMonth;\r\n  if (previous) {\r\n    tmpMonth = this.currentMonth() - 1;\r\n    // If we wrap around. January -> December\r\n    if (tmpMonth <= 0) {\r\n      this.currentYear(this.currentYear() - 1);\r\n      tmpMonth = 12;\r\n    }\r\n  } else {\r\n    tmpMonth = this.currentMonth() + 1;\r\n    // If we wrap around. December -> January\r\n    if (tmpMonth > 12) {\r\n      this.currentYear(this.currentYear() + 1);\r\n      tmpMonth = 1;\r\n    }\r\n  }\r\n  this.currentMonth(tmpMonth);\r\n};\r\n\r\nCalendarRN.prototype.getArticleCalendar = function() {\r\n  var url =\r\n    this.API.articleCalendar +\r\n    '?year=' +\r\n    encodeURIComponent(this.currentYear()) +\r\n    '&month=' +\r\n    encodeURIComponent(this.currentMonth());\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.calendarList(response.Items);\r\n      this.isLoading(false);\r\n    }.bind(this),\r\n    function() {\r\n      this.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = CalendarRN;\r\n","module.exports = \"<div class=\\\"calendar-content\\\">\\r\\n\\t<div class=\\\"calendar-icon\\\">\\r\\n\\t\\t<span class=\\\"icon-calendar\\\"></span>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"calendar-navigation\\\">\\r\\n\\t\\t<a href=\\\"#\\\" class=\\\"btn btn-arrow-prev\\\" data-bind=\\\"click: function () { changeMonth(true); }\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-arrow-full\\\"></span>\\r\\n\\t\\t</a>\\r\\n\\t\\t<div class=\\\"inline navigation-title\\\" data-bind=\\\"text: monthName() + ' ' + currentYear()\\\"></div>\\r\\n\\t\\t<a href=\\\"#\\\" class=\\\"btn btn-arrow-next\\\" data-bind=\\\"click: function () { changeMonth(false); }\\\">\\r\\n\\t\\t\\t<span class=\\\"icon-arrow-full\\\"></span>\\r\\n\\t\\t</a>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"calendar-list-container\\\">\\r\\n\\t\\t<!-- ko if: isLoading -->\\r\\n\\t\\t\\t<div class=\\\"loader-container centered-overlay\\\">\\r\\n\\t\\t\\t\\t<div class=\\\"loader is-loading\\\"></div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<ul data-bind=\\\"foreach: { data: calendarList }, css: { 'is-loading': isLoading }\\\">\\r\\n\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t<div class=\\\"date-container\\\" data-bind=\\\"text: Day + '.'\\\"></div>\\r\\n\\t\\t\\t\\t<div class=\\\"content-container\\\">\\r\\n\\t\\t\\t\\t\\t<h3 data-bind=\\\"text: Title\\\"></h3>\\r\\n\\t\\t\\t\\t\\t<a href=\\\"\\\" data-bind=\\\"attr: { 'href': Link }\\\">Les mer</a>\\r\\n\\t\\t\\t\\t\\t<a href=\\\"#\\\" data-bind=\\\"attr: { 'href': $parent.API.calendarFileUrl + '/' + Id }\\\">Legg til kalender</a>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</li>\\r\\n\\t\\t</ul>\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\nrequire('knockout-postbox');\r\n\r\nfunction FindAccountantsRN(params) {\r\n  var self = this;\r\n  self.API = params.api;\r\n  self.accountantsHitText = params.texts.accountantsHitText;\r\n  self.title = params.texts.title;\r\n  self.description = params.texts.description;\r\n  self.accountantList = ko.observableArray([]);\r\n  self.accountantFilteredList = ko.observableArray([]);\r\n  self.showClearQuery = ko.observable(false);\r\n  self.query = ko.observable('');\r\n  self.query.subscribe(self.search, this);\r\n  self.map = ko.observable();\r\n  self.infoWindow = ko.observable();\r\n  self.markers = ko.observableArray([]);\r\n  self.numberOfShowingAccountants = ko.observable();\r\n  self.loading = ko.observable(true);\r\n  self.clickedOnAccountant = function(index, item) {\r\n    var marker = ko.utils.arrayFirst(self.markers(), function(m) {\r\n      return m.title == item.Name;\r\n    });\r\n    var position = marker.getPosition();\r\n    var label =\r\n      \"<div class='info-window'><div class='info-window-header'><h3>\" +\r\n      item.Name +\r\n      '</h3></div>';\r\n    label +=\r\n      \"<div class='info-window-form'><span class='form-label'>Adresse</span><span class='form-value'>\" +\r\n      item.StreetAddress +\r\n      ', ' +\r\n      (item.StreetPostCode ? item.StreetPostCode : '') +\r\n      ' ' +\r\n      item.StreetCity +\r\n      '</span> </div>';\r\n    label += item.OfficePhone\r\n      ? \"<div class='info-window-form'><span class='form-label'>Telefon</span><span class='form-value'>\" +\r\n        \"<a href='tel:\" +\r\n        item.OfficePhone +\r\n        \"'>\" +\r\n        item.OfficePhone +\r\n        '</a></span> </div>'\r\n      : '';\r\n    label += item.Email\r\n      ? \"<div class='info-window-form'><span class='form-label'>E-post</span><span class='form-value'>\" +\r\n        \"<a href='mailto:\" +\r\n        item.Email +\r\n        \"'>\" +\r\n        item.Email +\r\n        '</a></span> </div>'\r\n      : '';\r\n    label += item.Website\r\n      ? \"<div class='info-window-form'><span class='form-label'>Nettside</span><span class='form-value'>\"\r\n      : '';\r\n    label += item.Website\r\n      ? \"<a target='_blank' href='https://\" +\r\n        item.Website +\r\n        \"'>\" +\r\n        item.Website +\r\n        '</a></span></div></div>'\r\n      : '';\r\n\r\n    if (self.infoWindow()) {\r\n      self.infoWindow().close();\r\n    }\r\n    self.infoWindow().setContent(label);\r\n    self.infoWindow().open(self.map(), marker);\r\n    self.map().panTo(position);\r\n    self.map().setZoom(18);\r\n  };\r\n  self.init();\r\n}\r\n\r\nFindAccountantsRN.prototype.init = function() {\r\n  this.getAccountants();\r\n};\r\n\r\nFindAccountantsRN.prototype.search = function(value) {\r\n  var self = this;\r\n  var filteredItems = self.accountantList();\r\n\r\n  filteredItems = ko.utils.arrayFilter(filteredItems, function(item) {\r\n    return item.Name.toLowerCase().includes(value.toLowerCase());\r\n  });\r\n\r\n  self.numberOfShowingAccountants(filteredItems.length);\r\n  self.accountantFilteredList(filteredItems);\r\n  if (value == '') {\r\n    self.showClearQuery(false);\r\n  } else {\r\n    self.showClearQuery(true);\r\n  }\r\n};\r\n\r\nself.clearQuery = function() {\r\n  var self = this;\r\n  self.query('');\r\n};\r\n\r\nko.bindingHandlers.googleMap = {\r\n  init: function(mapDiv, valueAccessor, allBindingsAccessor, data, context) {\r\n    var markers,\r\n      map,\r\n      infoWindow,\r\n      mapData = data.accountantList(),\r\n      myLatLng = { lat: 65.891469, lng: 8.822599 };\r\n    map = new google.maps.Map(mapDiv, {\r\n      zoom: 4,\r\n      center: myLatLng\r\n    });\r\n    infoWindow = new google.maps.InfoWindow({\r\n      content: '',\r\n      disableAutoPan: false\r\n    });\r\n\r\n    markers = mapData.map(function(item) {\r\n      var label =\r\n        \"<div class='info-window'><div class='info-window-header'><h3>\" +\r\n        item.Name +\r\n        '</h3></div>';\r\n      label +=\r\n        \"<div class='info-window-form'><span class='form-label'>Adresse</span><span class='form-value'>\" +\r\n        item.StreetAddress +\r\n        ', ' +\r\n        (item.StreetPostCode ? item.StreetPostCode : '') +\r\n        ' ' +\r\n        item.StreetCity +\r\n        '</span> </div>';\r\n      label += item.OfficePhone\r\n        ? \"<div class='info-window-form'><span class='form-label'>Telefon</span><span class='form-value'>\" +\r\n          \"<a href='tel:\" +\r\n          item.OfficePhone +\r\n          \"'>\" +\r\n          item.OfficePhone +\r\n          '</a></span> </div>'\r\n        : '';\r\n      label += item.Email\r\n        ? \"<div class='info-window-form'><span class='form-label'>E-post</span><span class='form-value'>\" +\r\n          \"<a href='mailto:\" +\r\n          item.Email +\r\n          \"'>\" +\r\n          item.Email +\r\n          '</a></span> </div>'\r\n        : '';\r\n      label += item.Website\r\n        ? \"<div class='info-window-form'><span class='form-label'>Nettside</span><span class='form-value'>\"\r\n        : '';\r\n      label += item.Website\r\n        ? \"<a target='_blank' href='https://\" +\r\n          item.Website +\r\n          \"'>\" +\r\n          item.Website +\r\n          '</a></span></div></div>'\r\n        : '';\r\n\r\n      var marker = new google.maps.Marker({\r\n        position: new google.maps.LatLng(item.Latitude, item.Longitude),\r\n        title: item.Name\r\n      });\r\n\r\n      // markers can only be keyboard focusable when they have click listeners\r\n      // open info window when marker is clicked\r\n      marker.addListener('click', function() {\r\n        var markersOnSamePosition = [];\r\n        for (var j = 0; j < mapData.length; j++) {\r\n          if (\r\n            mapData[j].Latitude == item.Latitude &&\r\n            mapData[j].Longitude == item.Longitude\r\n          ) {\r\n            markersOnSamePosition.push(mapData[j]);\r\n          }\r\n        }\r\n        if (markersOnSamePosition.length > 1) {\r\n          label = \"<div class='info-window'>\";\r\n          for (var i = 0; i < markersOnSamePosition.length; i++) {\r\n            if (i > 0) {\r\n              label += '<hr>';\r\n            }\r\n            label +=\r\n              \"<div class='info-window-part'><div class='info-window-header'><h3>\" +\r\n              markersOnSamePosition[i].Name +\r\n              '</h3></div>';\r\n            label +=\r\n              \"<div class='info-window-form'><span class='form-label'>Adresse</span><span class='form-value'>\" +\r\n              markersOnSamePosition[i].StreetAddress +\r\n              ', ' +\r\n              (markersOnSamePosition[i].StreetPostCode\r\n                ? markersOnSamePosition[i].StreetPostCode\r\n                : '') +\r\n              ' ' +\r\n              markersOnSamePosition[i].StreetCity +\r\n              '</span> </div>';\r\n            label += markersOnSamePosition[i].OfficePhone\r\n              ? \"<div class='info-window-form'><span class='form-label'>Telefon</span><span class='form-value'>\" +\r\n                \"<a href='tel:\" +\r\n                markersOnSamePosition[i].OfficePhone +\r\n                \"'>\" +\r\n                markersOnSamePosition[i].OfficePhone +\r\n                '</a></span> </div>'\r\n              : '';\r\n            label += markersOnSamePosition[i].Email\r\n              ? \"<div class='info-window-form'><span class='form-label'>E-post</span><span class='form-value'>\" +\r\n                \"<a href='mailto:\" +\r\n                markersOnSamePosition[i].Email +\r\n                \"'>\" +\r\n                markersOnSamePosition[i].Email +\r\n                '</a></span> </div>'\r\n              : '';\r\n            label += markersOnSamePosition[i].Website\r\n              ? \"<div class='info-window-form'><span class='form-label'>Nettside</span><span class='form-value'>\"\r\n              : '';\r\n            label += markersOnSamePosition[i].Website\r\n              ? \"<a target='_blank' href='https://\" +\r\n                markersOnSamePosition[i].Website +\r\n                \"'>\" +\r\n                markersOnSamePosition[i].Website +\r\n                '</a></span></div></div>'\r\n              : '</div>';\r\n          }\r\n          label += '</div>';\r\n        }\r\n        infoWindow.setContent(label);\r\n        infoWindow.open(map, marker);\r\n      });\r\n      return marker;\r\n    });\r\n\r\n    // Add a marker clusterer to manage the markers.\r\n    new MarkerClusterer(map, markers, {\r\n      imagePath:\r\n        'https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m',\r\n      maxZoom: 17\r\n    });\r\n\r\n    context.$data.map(map);\r\n    context.$data.markers(markers);\r\n    context.$data.infoWindow(infoWindow);\r\n  }\r\n};\r\n\r\nFindAccountantsRN.prototype.getAccountants = function() {\r\n  var self = this;\r\n  var url = self.API.accountants;\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      self.accountantList(response);\r\n      self.accountantFilteredList(response);\r\n      self.numberOfShowingAccountants(response.length);\r\n      self.loading(false);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      self.loading(false);\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: find-accountants.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = FindAccountantsRN;\r\n","module.exports = \"<div class=\\\"page-content-header page-content-header-small\\\">\\r\\n    <!-- ko if: title -->\\r\\n    <div class=\\\"row page-title-row\\\">\\r\\n        <div class=\\\"columns large-12 no-padding page-title-container\\\">\\r\\n            <h1 class=\\\"page-title\\\" data-bind=\\\"text: title\\\"></h1>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: description -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12 ingress\\\" data-bind=\\\"css: (title ? '' : 'spacing-top--xxlarg')\\\">\\r\\n            <div class=\\\"ingress\\\" data-bind=\\\"html: description\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n</div>\\r\\n<div class=\\\"row\\\">\\r\\n    <!-- ko if: loading -->\\r\\n    <div class=\\\"overlay overlay-grey\\\" data-bind=\\\"css: { 'is-loading': loading }\\\">\\r\\n        <div class=\\\"loader-container\\\">\\r\\n            <div class=\\\"loader\\\" data-bind=\\\"css: { 'is-loading': loading }\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: accountantList().length > 0 && !loading() -->\\r\\n    <div class=\\\"columns large-4 desktop\\\">\\r\\n        <div class=\\\"find-accountants-search\\\">\\r\\n            <a href=\\\"#\\\" class=\\\"clearBtn\\\" data-bind=\\\"click: clearQuery\\\">\\r\\n                <span class=\\\"icon icon-search\\\" data-bind=\\\"visible: !showClearQuery()\\\"></span>\\r\\n                <span class=\\\"icon icon-close\\\" data-bind=\\\"visible: showClearQuery()\\\"></span>\\r\\n            </a>\\r\\n            <input type=\\\"search\\\" placeholder=\\\"Søk\\\" id=\\\"searchInput\\\" data-bind=\\\"value: query, valueUpdate: 'keyup'\\\"\\r\\n                name=\\\"search\\\">\\r\\n        </div>\\r\\n        <div id=\\\"mapDataCount\\\">\\r\\n            <span data-bind=\\\"text: numberOfShowingAccountants\\\"></span>\\r\\n            <span data-bind=\\\"text: accountantsHitText\\\"></span>\\r\\n        </div>\\r\\n        <div class=\\\"mapAccountants\\\">\\r\\n            <!-- ko foreach: accountantFilteredList -->\\r\\n            <div class=\\\"location\\\" data-bind=\\\"click: $parent.clickedOnAccountant.bind($data, $index())\\\">\\r\\n                <div class=\\\"location-contactCard\\\">\\r\\n                    <div class=\\\"location-title\\\">\\r\\n                        <h3 data-bind=\\\"text: Name\\\"></h3>\\r\\n                    </div>\\r\\n                    <span class=\\\"icon icon-pin\\\" style=\\\"margin-right: 10px; margin-top: -5px;\\\"></span>\\r\\n                    <span data-bind=\\\"text: StreetCity\\\"></span>\\r\\n                </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-8\\\">\\r\\n        <div class=\\\"map-container\\\">\\r\\n            <div id=\\\"map\\\" class=\\\"map\\\" data-bind=\\\"googleMap:accountantList()\\\">\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-4 mobile\\\">\\r\\n        <div class=\\\"find-accountants-search\\\">\\r\\n            <a href=\\\"#\\\" class=\\\"clearBtn\\\" data-bind=\\\"click: clearQuery\\\">\\r\\n                <span class=\\\"icon icon-search\\\" data-bind=\\\"visible: !showClearQuery()\\\"></span>\\r\\n                <span class=\\\"icon icon-close\\\" data-bind=\\\"visible: showClearQuery()\\\"></span>\\r\\n            </a>\\r\\n            <input type=\\\"search\\\" placeholder=\\\"Søk\\\" id=\\\"searchInput\\\" data-bind=\\\"value: query, valueUpdate: 'keyup'\\\"\\r\\n                name=\\\"search\\\">\\r\\n        </div>\\r\\n        <div id=\\\"mapDataCount\\\">\\r\\n            <span data-bind=\\\"text: numberOfShowingAccountants\\\"></span>\\r\\n            <span data-bind=\\\"text: accountantsHitText\\\"></span>\\r\\n        </div>\\r\\n        <div class=\\\"mapAccountants\\\">\\r\\n            <!-- ko foreach: accountantFilteredList -->\\r\\n            <div class=\\\"location\\\" data-bind=\\\"click: $parent.clickedOnAccountant.bind($data, $index())\\\">\\r\\n                <div class=\\\"location-contactCard\\\">\\r\\n                    <div class=\\\"location-title\\\">\\r\\n                        <h3 data-bind=\\\"text: Name\\\"></h3>\\r\\n                    </div>\\r\\n                    <span class=\\\"icon icon-pin\\\" style=\\\"margin-right: 10px; margin-top: -5px;\\\"></span>\\r\\n                    <span data-bind=\\\"text: StreetCity\\\"></span>\\r\\n                </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n</div>\"","function Pagination(params) {\r\n  // params.currentPage must be an observable (not just the value).\r\n  this.currentPage = params.currentPage;\r\n  // params.pages must be an observable (not just the value).\r\n  this.pages = params.pages;\r\n}\r\n\r\nPagination.prototype.toStart = function() {\r\n  this.currentPage(1);\r\n};\r\n\r\nPagination.prototype.toEnd = function() {\r\n  this.currentPage(this.pages());\r\n};\r\n\r\nPagination.prototype.nextPage = function() {\r\n  if (this.currentPage() < this.pages()) {\r\n    this.currentPage(parseInt(this.currentPage()) + 1);\r\n  }\r\n};\r\n\r\nPagination.prototype.previousPage = function() {\r\n  if (this.currentPage() > 1) {\r\n    this.currentPage(parseInt(this.currentPage()) - 1);\r\n  }\r\n};\r\n\r\nmodule.exports = Pagination;\r\n","module.exports = \"<div class=\\\"pagination-container\\\">\\r\\n\\t<div class=\\\"pagination pagination-single pagination-start\\\" data-bind=\\\"click: toStart\\\">\\r\\n\\t\\t<div class=\\\"icon-container\\\">\\r\\n\\t\\t\\t<span class=\\\"icon icon-arrow rotate-90\\\" aria-hidden=\\\"true\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"icon-container\\\">\\r\\n\\t\\t\\t<span class=\\\"icon icon-arrow rotate-90\\\" aria-hidden=\\\"true\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<span>1</span>\\r\\n\\t</div>\\r\\n\\t<div class=\\\"pagination pagination-center\\\">\\r\\n\\t    <span class=\\\"icon icon-arrow rotate-90\\\" data-bind=\\\"click: previousPage\\\"></span>\\r\\n\\t    <div class=\\\"pagination-pages\\\">\\r\\n\\t        <span data-bind=\\\"text: currentPage() + '/'\\\"></span>\\r\\n\\t        <span data-bind=\\\"text: pages()\\\"></span>\\r\\n\\t    </div>\\r\\n\\t    <span class=\\\"icon-arrow rotate-reverse-90\\\" data-bind=\\\"click: nextPage\\\"></span>\\r\\n\\t</div>\\r\\n\\r\\n\\t<div class=\\\"pagination pagination-single pagination-end\\\" data-bind=\\\"click: toEnd\\\">\\r\\n\\t\\t<span data-bind=\\\"text: pages()\\\"></span>\\r\\n\\t\\t<div class=\\\"icon-container\\\">\\r\\n\\t\\t\\t<span class=\\\"icon icon-arrow rotate-reverse-90\\\" aria-hidden=\\\"true\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"icon-container\\\">\\r\\n\\t\\t\\t<span class=\\\"icon icon-arrow rotate-reverse-90\\\" aria-hidden=\\\"true\\\"></span>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  find = require('lodash/find');\r\n\r\n// A new topic which is (currently) used to detect when we add participants to a course\r\n// to indicate that for these participants this course is overlapping with an already chosen course.\r\nvar UPDATE_PARTICIPANTS_TOPIC = 'updateParticipantsTopic';\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  if (params.addNewEmployeeEndpoint === undefined)\r\n    throw 'addNewEmployeeEndpoint must be set';\r\n  if (params.usersHaveAlreadyBoughtCourseEndpoint === undefined)\r\n    throw 'usersHaveAlreadyBoughtCourseEndpoint must be set';\r\n  if (params.usersHaveAlreadyBoughtOnlineCourseEndpoint === undefined)\r\n    throw 'usersHaveAlreadyBoughtOnlineCourseEndpoint must be set';\r\n  if (params.usersHaveAlreadyBoughtProgramEndpoint === undefined)\r\n    throw 'usersHaveAlreadyBoughtProgramEndpoint must be set';\r\n\r\n  self.activePopup = ko.observable(false);\r\n  self.togglePopup = function() {\r\n    self.activePopup(!self.activePopup());\r\n  };\r\n\r\n  self.addNewEmployeeEndpoint = params.addNewEmployeeEndpoint;\r\n  self.hasBoughtCourseEndpoint = params.usersHaveAlreadyBoughtCourseEndpoint;\r\n  self.hasBoughtOnlineCourseEndpoint =\r\n    params.usersHaveAlreadyBoughtOnlineCourseEndpoint;\r\n  self.hasBoughtProgramEndpoint = params.usersHaveAlreadyBoughtProgramEndpoint;\r\n  self.usersHaveAlreadyBoughtOverlappingCourseEndpoint =\r\n    params.usersHaveAlreadyBoughtOverlappingCourseEndpoint;\r\n  self.hasOverlappingCourse = ko.observable({});\r\n\r\n  // List of employees that are associated with the chosen bureau.\r\n  self.employeeList = params.employeeList;\r\n  // List of courses that the user has in shopping cart.\r\n  self.courseList = params.courseList;\r\n  // The course associated with this participant box.\r\n  self.course = params.course;\r\n\r\n  self.hasOverlappingCourseInCart = ko.observable({});\r\n  self.hasBoughtCourseIsChecked = ko.observable(false);\r\n  self.hasBoughtProgramIsChecked = ko.observable(false);\r\n  self.hasBoughtOnlineCourseIsChecked = ko.observable(false);\r\n  self.hasOverlappingCourseIsChecked = ko.observable(false);\r\n  self.showEmployees = ko.computed(function() {\r\n    return (\r\n      (self.course.EventType != 6 && self.course.EventType != 3\r\n        ? self.hasBoughtCourseIsChecked()\r\n        : true) &&\r\n      (self.course.EventType == 3\r\n        ? self.hasBoughtOnlineCourseIsChecked()\r\n        : true) &&\r\n      (self.course.EventType == 6 ? self.hasBoughtProgramIsChecked() : true) &&\r\n      (self.course.EventType != 6 && self.course.EventType != 3\r\n        ? self.hasOverlappingCourseIsChecked()\r\n        : true)\r\n    );\r\n  });\r\n\r\n  self.disableCheckbox = function(aktorId) {\r\n    return (\r\n      (self.hasBoughtCourseIsChecked() && self.hasBoughtCourse()[aktorId]) ||\r\n      (self.hasOverlappingCourseIsChecked() &&\r\n        self.hasOverlappingCourse()[aktorId]) ||\r\n      (self.hasBoughtProgramIsChecked() && self.hasBoughtProgram()[aktorId])\r\n    );\r\n  };\r\n\r\n  self.checkedEmployees = ko.observableArray([]);\r\n  self.addToAll = ko.observable(false);\r\n  self.hasBoughtCourse = ko.observable();\r\n  self.hasBoughtOnlineCourse = ko.observable();\r\n  self.hasBoughtProgram = ko.observable();\r\n  self.errorText = ko.observable();\r\n\r\n  // Mark the checkboxes of those participants that are already added to the course.\r\n  self.setCheckedEmployees = function() {\r\n    var tmpCheckedEmployees = [];\r\n    params.participants.forEach(function(participant) {\r\n      var checkedEmployee = find(self.employeeList(), function(o) {\r\n        return o.AktorId === participant.AktorId;\r\n      });\r\n      if (checkedEmployee !== undefined) {\r\n        tmpCheckedEmployees.push(checkedEmployee);\r\n      }\r\n    });\r\n    self.checkedEmployees(tmpCheckedEmployees);\r\n    if (tmpCheckedEmployees.length > 0) {\r\n      cart.registerOverlappingCoursesForParticipants(\r\n        self.course.Id,\r\n        tmpCheckedEmployees,\r\n        UPDATE_PARTICIPANTS_TOPIC\r\n      );\r\n    }\r\n  };\r\n\r\n  // When the user clicks the addParticipant button we want to add them to course and check if there are overlaps.\r\n  self.addParticipants = function() {\r\n    var employeesToAdd = self.checkedEmployees();\r\n    if (employeesToAdd.length > 0) {\r\n      if (!self.addToAll()) {\r\n        cart.addParticipantsToCourse(self.course.Id, employeesToAdd);\r\n        cart.registerOverlappingCoursesForParticipants(\r\n          self.course.Id,\r\n          employeesToAdd,\r\n          UPDATE_PARTICIPANTS_TOPIC\r\n        );\r\n      }\r\n    }\r\n    self.addToAll(false);\r\n    self.hasBoughtCourseIsChecked(true);\r\n    self.hasBoughtOnlineCourseIsChecked(true);\r\n    self.hasBoughtProgramIsChecked(true);\r\n    self.hasOverlappingCourseIsChecked(true);\r\n  };\r\n\r\n  // Listen to changes when we update participants in the shopping cart.\r\n  ko.postbox.subscribe(\r\n    UPDATE_PARTICIPANTS_TOPIC,\r\n    function(courses) {\r\n      var hasOverlap = false;\r\n      for (var i = 0; i < courses.length; i++) {\r\n        if (\r\n          courses[i].Id === self.course.Id &&\r\n          courses[i].overlappingParticipants\r\n        ) {\r\n          hasOverlap = true;\r\n          self.hasOverlappingCourse(courses[i].overlappingParticipants);\r\n          break;\r\n        }\r\n      }\r\n      // If there were no overlap, we can reset our object.\r\n      if (!hasOverlap) {\r\n        self.hasOverlappingCourse({});\r\n      }\r\n    },\r\n    true,\r\n    true\r\n  );\r\n\r\n  self.showList = ko.observable(false);\r\n  self.toggleAddParticipant = function() {\r\n    self.showList(!self.showList());\r\n  };\r\n\r\n  self.showCreateButton = ko.observable(cart.isAgencySet());\r\n  ko.postbox.subscribe(\r\n    cart.updateTopic,\r\n    function() {\r\n      self.showCreateButton(cart.isAgencySet());\r\n    },\r\n    true\r\n  );\r\n\r\n  self.showCreateDialog = ko.observable(false);\r\n  self.toggleCreateDialog = function() {\r\n    self.showCreateDialog(!self.showCreateDialog());\r\n  };\r\n\r\n  self.addNewEmployee = function(employee) {\r\n    for (var i = 0; i < self.employeeList().length; i++) {\r\n      if (self.employeeList()[i].AktorId === employee.AktorId) {\r\n        self.showCreateDialog(false);\r\n        return;\r\n      }\r\n    }\r\n    self.employeeList.push(employee);\r\n    self.showCreateDialog(false);\r\n  };\r\n  self.employeeIds = [];\r\n  self.selectedAgency = ko.observable().subscribeTo('chosen_agency', true);\r\n\r\n  self.postHasBoughtCourse = function() {\r\n    $.post(self.hasBoughtCourseEndpoint, {\r\n      Users: self.employeeIds,\r\n      SequencePk: self.course.Key\r\n    })\r\n      .success(function(data) {\r\n        self.hasBoughtCourse(data);\r\n        self.hasBoughtCourseIsChecked(true);\r\n        self.hasOverlappingCourseIsChecked(true);\r\n      })\r\n      .fail(function(err) {\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  self.postHasBoughtOnlineCourse = function() {\r\n    $.post(self.hasBoughtOnlineCourseEndpoint, {\r\n      Users: self.employeeIds,\r\n      SequencePk: self.course.Key\r\n    })\r\n      .success(function(data) {\r\n        self.hasBoughtOnlineCourse(data);\r\n        self.hasBoughtOnlineCourseIsChecked(true);\r\n      })\r\n      .fail(function(err) {\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  self.postHasBoughtProgram = function() {\r\n    $.post(self.hasBoughtProgramEndpoint, {\r\n      Users: self.employeeIds,\r\n      ProgramKey: self.course.Key\r\n    })\r\n      .success(function(data) {\r\n        self.hasBoughtProgram(data);\r\n        self.hasBoughtProgramIsChecked(true);\r\n      })\r\n      .fail(function(err) {\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  // Listen to changes to the employee list (e.g.: when we change bureau).\r\n  self.employeeListSub = self.employeeList.subscribe(function() {\r\n    if (self.selectedAgency() === 'select_me') {\r\n      return;\r\n    }\r\n    for (var i = 0; i < self.employeeList().length; i++) {\r\n      var foundInList = false;\r\n      for (var j = 0; j < self.employeeIds.length; j++) {\r\n        if (self.employeeList()[i].AktorId === self.employeeIds[j]) {\r\n          foundInList = true;\r\n          continue;\r\n        }\r\n      }\r\n      if (foundInList === false) {\r\n        self.employeeIds.push(self.employeeList()[i].AktorId);\r\n      }\r\n    }\r\n    if (self.employeeIds.length > 0) {\r\n      // Reset the errorText before we call the API's.\r\n      self.errorText();\r\n      self.setCheckedEmployees();\r\n      if (self.course.EventType == 3) {\r\n        self.postHasBoughtOnlineCourse();\r\n      } else if (self.course.EventType == 6) {\r\n        self.postHasBoughtProgram();\r\n      } else {\r\n        self.postHasBoughtCourse();\r\n      }\r\n    }\r\n  });\r\n\r\n  //TODO: clean up multiple calls to hasBoughtCourseEndpoint\r\n  if (self.employeeList().length > 0 && self.selectedAgency() !== 'select_me') {\r\n    for (var i = 0; i < self.employeeList().length; i++) {\r\n      var foundInList = false;\r\n      for (var j = 0; j < self.employeeIds.length; j++) {\r\n        if (self.employeeList()[i].AktorId === self.employeeIds[j]) {\r\n          foundInList = true;\r\n          continue;\r\n        }\r\n      }\r\n      if (foundInList === false) {\r\n        self.employeeIds.push(self.employeeList()[i].AktorId);\r\n      }\r\n    }\r\n\r\n    self.setCheckedEmployees();\r\n    if (self.course.EventType == 3) {\r\n      self.postHasBoughtOnlineCourse();\r\n    } else if (self.course.EventType == 6) {\r\n      self.postHasBoughtProgram();\r\n    } else {\r\n      self.postHasBoughtCourse();\r\n    }\r\n  }\r\n}\r\n\r\n// We need to dispose of our subscription.\r\nModel.prototype.dispose = function() {\r\n  this.employeeListSub.dispose();\r\n};\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"form-dropdown-wrapper form-dropdown-wrapper-atom form-dropdown-wrapper-purple clearfix\\\" data-bind=\\\"css: { active: activePopup }\\\">\\r\\n  <div class=\\\"form-dropdown-toggle-container\\\" data-bind=\\\"click: togglePopup\\\">\\r\\n    <span class=\\\"form-dropdown-title\\\">Legg til kursdeltaker</span>\\r\\n    <span class=\\\"icon-arrow\\\"></span>\\r\\n  </div>\\r\\n  <div class=\\\"dropdown participant is-purple\\\">\\r\\n    <div class=\\\"dropdown-inner\\\">\\r\\n      <div class=\\\"add-participant-row\\\">\\r\\n        <!-- ko if: (showEmployees) -->\\r\\n        <ul class=\\\"add-participant-name-list\\\" data-bind=\\\"foreach: employeeList\\\">\\r\\n          <li>\\r\\n            <input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" data-bind=\\\"checked: $parent.checkedEmployees, checkedValue: $data, attr: { id: $parent.course.Key + '-' + $index() }, disable: $parent.disableCheckbox(AktorId)\\\" name=\\\"checkbox-name\\\" value=\\\"checkbox-value\\\" />\\r\\n            <label data-bind=\\\"attr: {for: $parent.course.Key + '-' + $index() }, text: Name, css:{ 'disabled': $parent.disableCheckbox(AktorId) }\\\"></label>\\r\\n            \\r\\n            <div class=\\\"message message--small is-error\\\" data-bind=\\\"visible: ($parent.hasBoughtCourse() && $parent.hasBoughtCourse()[AktorId]) || ($parent.hasBoughtProgram() && $parent.hasBoughtProgram()[AktorId])\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">\\r\\n                        <span>!</span>\\r\\n                    </div>\\r\\n                </div>\\r\\n                <div class=\\\"message-text\\\">Allerede kjøpt</div>\\r\\n            </div>\\r\\n            <!-- ko ifnot: $parent.hasBoughtCourse() && $parent.hasBoughtCourse()[AktorId] -->\\r\\n                <div class=\\\"message message--small is-error\\\" data-bind=\\\"visible: $parent.hasOverlappingCourse() != undefined && $parent.hasOverlappingCourse()[AktorId]\\\">\\r\\n                    <div class=\\\"message-icon\\\">\\r\\n                        <div class=\\\"info-circle\\\">\\r\\n                            <span>!</span>\\r\\n                        </div>\\r\\n                    </div>\\r\\n                    <div class=\\\"message-text\\\">Har overlappende kurs</div>\\r\\n                </div>\\r\\n            <!-- /ko -->\\r\\n            <div class=\\\"message message--small is-error\\\" data-bind=\\\"visible: $parent.hasBoughtOnlineCourse() != undefined && $parent.hasBoughtOnlineCourse()[AktorId]\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">\\r\\n                        <span>!</span>\\r\\n                    </div>\\r\\n                </div>\\r\\n                <div class=\\\"message-text\\\">Kjøpt før, ingen nye oppdateringstimer</div>\\r\\n            </div>\\r\\n          </li>\\r\\n          \\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n\\r\\n      <button href=\\\"#\\\" class=\\\"btn btn-bare btn-add\\\" data-bind=\\\"visible:showCreateButton, click: toggleCreateDialog\\\" >\\r\\n        <span class=\\\"btn-text\\\">Opprett ny kursdeltaker</span>\\r\\n      </button>\\r\\n    </div>\\r\\n    <div class=\\\"add-participant-row is-purple\\\">\\r\\n      <div class=\\\"add-participant-inner\\\">\\r\\n        <hr /><!--\\r\\n        <input type=\\\"checkbox\\\" data-bind=\\\"checked: addToAll, attr: { id: course.Key + '-all' }\\\" class=\\\"form-input form-input-checkbox\\\" name=\\\"checkbox-name\\\" value=\\\"checkbox-value\\\"/>\\r\\n        <label data-bind=\\\"attr: { for: course.Key + '-all' }\\\">Legg til alle valgte deltakere på alle kurs</label>-->\\r\\n        <button type=\\\"button\\\" data-bind=\\\"click: addParticipants\\\" class=\\\"btn btn-tertiary normal small\\\">\\r\\n          <span class=\\\"btn-text\\\">\\r\\n            Legg til\\r\\n          </span>\\r\\n        </button>\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n   \\r\\n</div>\\r\\n\\r\\n    <!-- ko if: showCreateDialog -->\\r\\n        <div data-bind=\\\"component: { name: 'create-employee', params:{ closeDialog: toggleCreateDialog, addNewEmployee : addNewEmployee, addEmployeeEndpoint: addNewEmployeeEndpoint  } }\\\"></div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n\\r\\n\"","var ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\n\r\nfunction MultipleAgenciesForUser(createAgencyEndpoint, searchAgencyEndpoint) {\r\n  var self = this;\r\n  var language = window.language;\r\n\r\n  self.agencyList = ko.observableArray([]);\r\n  self.isSearching = ko.observable(false);\r\n  self.hasSearched = ko.observable(false);\r\n  self.results = ko.observable();\r\n  self.resultOption = ko.observable();\r\n\r\n  self.init = function() {\r\n    var chosenAgency = cart.getCart().agency;\r\n    if (chosenAgency === undefined) {\r\n      self.selectedAgency();\r\n    } else if (chosenAgency.AktorId === '') {\r\n      self.selectedAgency('select_me');\r\n    } else if (chosenAgency.AktorId !== undefined) {\r\n      for (var i = 0; i < self.agencyList().length; i++) {\r\n        if (self.agencyList()[i].AktorId === chosenAgency.AktorId) {\r\n          self.selectedAgency(self.agencyList()[i]);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  self.selectedAgency = ko.observable();\r\n  self.selectedAgency.subscribe(function() {\r\n    if (self.selectedAgency() !== '-1') {\r\n      self.chooseAgency();\r\n    }\r\n    ko.postbox.publish('chosen_agency', self.selectedAgency());\r\n  });\r\n  self.chooseAgency = function() {\r\n    var agency = self.selectedAgency();\r\n    if (agency !== undefined) {\r\n      if (agency === 'select_me') {\r\n        // select_me\r\n        $('#common-error-message').addClass('hidden');\r\n        cart.replaceAgency({ Name: '', AktorId: '', Id: '' });\r\n      } else if (agency === '-1') {\r\n        // new agency\r\n        self.createAgency();\r\n        if (self.selectedAgency() !== '-1') {\r\n          $('#common-error-message').addClass('hidden');\r\n          cart.replaceAgency(self.selectedAgency());\r\n        }\r\n      } else {\r\n        $('#common-error-message').addClass('hidden');\r\n        cart.replaceAgency(agency);\r\n      }\r\n    }\r\n  };\r\n\r\n  self.createAgencyToggle = ko.observable(false);\r\n  self.toggleAgencyPane = function() {\r\n    self.createAgencyToggle(!self.createAgencyToggle());\r\n  };\r\n\r\n  self.isAlreadyMember = ko.observable(false);\r\n  self.organizationNumber = ko.observable();\r\n  self.searchedAgencyName = ko.observable();\r\n\r\n  if (searchAgencyEndpoint !== undefined) {\r\n    //Activate live searching\r\n    self.organizationNumber.subscribe(function(orgNo) {\r\n      if (orgNo.length == 9) {\r\n        $.get(searchAgencyEndpoint + '?orgno=' + orgNo, function(agencyName) {\r\n          self.searchedAgencyName(agencyName);\r\n        });\r\n      } else {\r\n        self.searchedAgencyName('');\r\n      }\r\n    });\r\n  }\r\n\r\n  self.createAgency = function() {\r\n    if (self.resultOption() !== undefined) {\r\n      var id = self.results().AvailableAgencies[self.resultOption()].AktorId;\r\n      if (id !== undefined) {\r\n        $.post(createAgencyEndpoint, { AktorId: id })\r\n          .success(function(response) {\r\n            $('#common-error-message').addClass('hidden');\r\n            if (response.CreatedAgency.AktorId !== '') {\r\n              var chosenAgencyInAgencyList = false;\r\n              var index = 0;\r\n              for (var i = 0; i < self.agencyList().length; i++) {\r\n                if (\r\n                  self.agencyList()[i].AktorId ===\r\n                  response.CreatedAgency.AktorId\r\n                ) {\r\n                  chosenAgencyInAgencyList = true;\r\n                  index = i;\r\n                  break;\r\n                }\r\n              }\r\n              if (!chosenAgencyInAgencyList) {\r\n                self.agencyList.push(response.CreatedAgency);\r\n                index = self.agencyList().length - 1;\r\n              }\r\n              self.selectedAgency(self.agencyList()[index]);\r\n              $('#common-error-message').addClass('hidden');\r\n              cart.replaceAgency(self.selectedAgency());\r\n            }\r\n            self.resultOption(undefined);\r\n          })\r\n          .fail(function() {\r\n            if (self.searchedAgencyName() !== '') {\r\n              $('#common-error-message .error-message-text').html(\r\n                language.memberCannotConnectToMemberAgency +\r\n                  \"<a href='\" +\r\n                  language.membershipForm +\r\n                  \"'>\" +\r\n                  language.membershipForm +\r\n                  '</a>'\r\n              );\r\n            } else {\r\n              $('#common-error-message .error-message-text').html(\r\n                language.missingAgencyOrgNr\r\n              );\r\n            }\r\n            $('#common-error-message').removeClass('hidden');\r\n          });\r\n      }\r\n    } else if (self.organizationNumber().length === 9) {\r\n      $.post(createAgencyEndpoint, {\r\n        AgencyIsMember: self.isAlreadyMember(),\r\n        OrgNo: self.organizationNumber()\r\n      })\r\n        .success(function(response) {\r\n          if (\r\n            response.CreatedAgency === undefined ||\r\n            response.CreatedAgency === null\r\n          ) {\r\n            //Multiple agencies\r\n            self.results(response);\r\n            self.hasSearched(true);\r\n          } else {\r\n            cart.replaceAgency(response.CreatedAgency);\r\n            $('#common-error-message').addClass('hidden');\r\n            var chosenAgencyInAgencyList = false;\r\n            var index = 0;\r\n            for (var i = 0; i < self.agencyList().length; i++) {\r\n              if (\r\n                self.agencyList()[i].AktorId === response.CreatedAgency.AktorId\r\n              ) {\r\n                chosenAgencyInAgencyList = true;\r\n                index = i;\r\n                break;\r\n              }\r\n            }\r\n            if (!chosenAgencyInAgencyList) {\r\n              self.agencyList.push(response.CreatedAgency);\r\n              index = self.agencyList().length - 1;\r\n            }\r\n            self.selectedAgency(self.agencyList()[index]);\r\n            $('#common-error-message').addClass('hidden');\r\n            cart.replaceAgency(self.selectedAgency());\r\n          }\r\n        })\r\n        .fail(function() {\r\n          if (self.searchedAgencyName() !== '') {\r\n            $('#common-error-message .error-message-text').html(\r\n              language.memberCannotConnectToMemberAgency +\r\n                \"<a href='\" +\r\n                language.membershipForm +\r\n                \"'>\" +\r\n                language.membershipForm +\r\n                '</a>'\r\n            );\r\n          } else {\r\n            $('#common-error-message .error-message-text').html(\r\n              language.missingAgencyOrgNr\r\n            );\r\n          }\r\n          $('#common-error-message').removeClass('hidden');\r\n        });\r\n    }\r\n  };\r\n}\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n\r\n  if (\r\n    params.createAgencyEndpoint === undefined ||\r\n    params.agencyEndpoint === undefined\r\n  )\r\n    throw 'agencyEndpoint and createAgencyEndpoint must be set';\r\n\r\n  self.states = { MultipleAgenciesForUser: 3 };\r\n\r\n  self.currentState = ko.observable(self.states.MultipleAgenciesForUser);\r\n\r\n  var transitions = {\r\n    ToMultipleAgenciesForUser: function(agencyList) {\r\n      self.multipleAgenciesForUser.agencyList(ko.unwrap(agencyList));\r\n      self.currentState(self.states.MultipleAgenciesForUser);\r\n    }\r\n  };\r\n\r\n  self.multipleAgenciesForUser = new MultipleAgenciesForUser(\r\n    params.createAgencyEndpoint,\r\n    params.searchAgencyEndpoint\r\n  );\r\n\r\n  $.getJSON(params.agencyEndpoint, function(agencies) {\r\n    transitions.ToMultipleAgenciesForUser(agencies);\r\n    self.multipleAgenciesForUser.init();\r\n  });\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div\\r\\n    data-bind=\\\"template: { name: 'MultipleAgenciesForUser', data: multipleAgenciesForUser, if: currentState() === states.MultipleAgenciesForUser }\\\">\\r\\n</div>\\r\\n\\r\\n<script type=\\\"text/html\\\" id=\\\"MultipleAgenciesForUser\\\">\\r\\n    <div class=\\\"columns large-12 no-padding\\\">\\r\\n        <div class=\\\"choose-agency-white\\\">\\r\\n            <!--<div class=\\\"row\\\">\\r\\n                <div class=\\\"columns large-7\\\">\\r\\n                    <input data-bind=\\\"attr: { id: 'select_type_me' }, checked: selectType\\\" value=\\\"select_me\\\" type=\\\"radio\\\" class=\\\"form-input form-input-radio white\\\" name=\\\"select-type-option\\\">\\r\\n                    <label data-bind=\\\"attr: { for: 'select_type_me'}\\\" class=\\\"form-label form-label-radio white\\\">Kun meg</label>\\r\\n                    <input data-bind=\\\"attr: { id: 'select_type_agencies' }, checked: selectType\\\" value=\\\"select_agencies\\\" type=\\\"radio\\\" class=\\\"form-input form-input-radio white\\\" name=\\\"select-type-option\\\">\\r\\n                    <label data-bind=\\\"attr: { for: 'select_type_agencies'}\\\" class=\\\"form-label form-label-radio white\\\">Legg til flere deltakere</label>\\r\\n                </div>\\r\\n            </div>\\r\\n            <hr>-->            \\r\\n            <div class=\\\"row\\\">\\r\\n                <div class=\\\"columns large-12\\\">\\r\\n                    <p>\\r\\n                        For å få rabatt som ansatt i medlemsbedrift, eller for å bestille for flere, må du velge rett virksomhet. Hvis det er flere deltakere i bestillingen må alle tilhøre samme arbeidsgiver.\\r\\n                    </p>\\r\\n                    <ul class=\\\"choose-agency-list\\\">\\r\\n                    <!-- ko foreach: agencyList -->\\r\\n                        <li>\\r\\n                            <input data-bind=\\\"attr: { id: $index }, checked: $parent.selectedAgency, checkedValue: $data\\\" type=\\\"radio\\\" class=\\\"form-input form-input-radio white\\\" name=\\\"option\\\">\\r\\n                            <label data-bind=\\\"attr: { for: $index}, text: Name\\\" class=\\\"form-label form-label-radio white\\\"></label>\\r\\n                        </li>\\r\\n                    <!-- /ko -->\\r\\n                        <li>\\r\\n                            <input data-bind=\\\"attr: { id: 'select_type_me' }, checked: selectedAgency, checkedValue: 'select_me'\\\" type=\\\"radio\\\" class=\\\"form-input form-input-radio white\\\" name=\\\"option\\\">\\r\\n                            <label data-bind=\\\"attr: { for: 'select_type_me'}\\\" class=\\\"form-label form-label-radio white\\\">Bestiller som privatperson</label>\\r\\n                        </li>\\r\\n                        <li>\\r\\n                            <input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" id=\\\"radio-2\\\" name=\\\"option\\\" data-bind=\\\"checked: selectedAgency, checkedValue: '-1'\\\">\\r\\n                            <label for=\\\"radio-2\\\" class=\\\"form-label form-label-radio\\\">Legg til ny arbeidsgiver</label>\\r\\n                        </li>\\r\\n                    </ul>\\r\\n                    <div data-bind=\\\"visible: selectedAgency() === '-1'\\\">\\r\\n                        <p>\\r\\n                            Registrer arbeidsgiver <br>\\r\\n                            Organisasjonsnummer 9 siffer\\r\\n                        </p>\\r\\n                        <div class=\\\"row\\\">\\r\\n                            <div class=\\\"choose-agency-organization-number columns large-4\\\">\\r\\n                                <div class=\\\"form-btn-group\\\">\\r\\n                                    <input class=\\\"form-input \\\" type=\\\"number\\\" placeholder=\\\"\\\" data-bind=\\\"textInput: organizationNumber\\\" aria-required=\\\"true\\\"/>\\r\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: chooseAgency\\\">\\r\\n                                        <span class=\\\"btn-text\\\">\\r\\n                                            Legg til\\r\\n                                        </span>\\r\\n                                    </button>\\r\\n                                </div>\\r\\n                                \\r\\n                            </div>\\r\\n                        </div>\\r\\n                        <span data-bind=\\\"text: searchedAgencyName\\\"></span>\\r\\n                        <!-- ko if: isSearching -->\\r\\n                            <div class=\\\"row form-row\\\">\\r\\n                                <div class=\\\"columns large-12\\\">\\r\\n                                    <div class=\\\"loader-container\\\">\\r\\n                                        <div class=\\\"loader is-loading\\\"></div>\\r\\n                                    </div>\\r\\n                                    <div class=\\\"loader-text\\\">\\r\\n                                        <h3>Søker...</h3>\\r\\n                                    </div>\\r\\n                                </div>\\r\\n                            </div>\\r\\n                        <!-- /ko -->\\r\\n                        <!-- ko if: hasSearched() === true -->\\r\\n                            <div class=\\\"result\\\">\\r\\n\\r\\n                                <!-- ko ifnot: (results().CreatedAgency || results().AvailableAgencies)-->\\r\\n                                    <p class=\\\"result-text\\\" >Vi fikk dessverre ingen treff.</p>\\r\\n                                <!-- /ko -->\\r\\n\\r\\n                                <!-- ko if: results().AvailableAgencies -->\\r\\n                                <p class=\\\"result-text\\\" >Vi fant følgende virksomheter</p>\\r\\n                                <table class=\\\"table-simple form-row\\\">\\r\\n                                    <thead>\\r\\n                                        <tr>\\r\\n                                            <td>Velg</td>\\r\\n                                            <td>Navn</td>\\r\\n                                            <td>Postnummer</td>\\r\\n                                            <td>Poststed</td>\\r\\n                                        </tr>\\r\\n                                    </thead>\\r\\n                                    <tbody>\\r\\n                                        <!-- ko foreach: results().AvailableAgencies -->\\r\\n                                        <tr>\\r\\n                                            <td>\\r\\n                                                <input type=\\\"radio\\\" class=\\\"form-input form-input-radio\\\" name=\\\"profile-employer-duplicates\\\" data-bind=\\\"value: $index(), attr: { id: 'profile-employer-option-' + $index() }, checked: $parent.resultOption\\\">\\r\\n                                                <label class=\\\"form-label form-label-radio \\\" data-bind=\\\"attr: { for: 'profile-employer-option-' + $index() }\\\"></label>\\r\\n                                            </td>\\r\\n                                            <td>\\r\\n                                                <span data-bind=\\\"text: Name\\\"></span>\\r\\n                                            </td>\\r\\n                                            <td>\\r\\n                                                <span data-bind=\\\"text: StreetPostCode\\\"></span>\\r\\n                                            </td>\\r\\n                                            <td>\\r\\n                                                <span data-bind=\\\"text: StreetCity\\\"></span>\\r\\n                                            </td>\\r\\n                                        </tr>\\r\\n                                        <!-- /ko -->\\r\\n                                    </tbody>\\r\\n                                </table>\\r\\n                                <button type=\\\"button\\\" class=\\\"btn btn-transparent\\\" data-bind=\\\"click: chooseAgency\\\">\\r\\n                                    <span class=\\\"btn-text\\\">\\r\\n                                        Legg til valgte arbeidsgiver\\r\\n                                    </span>\\t\\r\\n                                </button>\\r\\n                                <!-- /ko -->\\r\\n                            </div>\\r\\n                        <!-- /ko -->\\r\\n                    </div>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n</script>\"","var ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n\r\n  if (params.addEmployeeEndpoint === undefined)\r\n    throw 'addEmployeeEndpoint not set';\r\n\r\n  if (typeof params.addNewEmployee !== 'function')\r\n    throw 'addNewEmployee function must be defined';\r\n\r\n  if (typeof params.closeDialog !== 'function')\r\n    throw 'closeDialog function must be defined';\r\n\r\n  self.closeDialog = params.closeDialog;\r\n  self.firstName = ko.observable();\r\n  self.lastName = ko.observable();\r\n  self.email = ko.observable();\r\n  self.phone = ko.observable();\r\n\r\n  var validateField = function(field) {\r\n    return field !== undefined && field !== '';\r\n  };\r\n\r\n  var getAgencyId = function() {\r\n    var agency = cart.getCart().agency;\r\n    if (agency !== undefined) return agency.AktorId;\r\n\r\n    throw 'Cannot add new employee to unknown agency';\r\n  };\r\n\r\n  self.errorText = ko.observable('');\r\n  self.showErrorMessage = ko.computed(function() {\r\n    return self.errorText() !== '';\r\n  });\r\n\r\n  self.hideErrorMessage = function() {\r\n    self.errorText('');\r\n  };\r\n\r\n  self.addEmployee = function() {\r\n    var email = self.email();\r\n    var phone = self.phone();\r\n    var firstName = self.firstName();\r\n    var lastName = self.lastName();\r\n\r\n    var agencyId = getAgencyId();\r\n    if (\r\n      validateField(email) &&\r\n      validateField(phone) &&\r\n      validateField(firstName) &&\r\n      validateField(lastName)\r\n    ) {\r\n      if (/.json$/.test(params.addEmployeeEndpoint)) {\r\n        params.addNewEmployee({ Name: firstName + ' ' + lastName });\r\n      } else {\r\n        $.post(params.addEmployeeEndpoint, {\r\n          Email: email,\r\n          Phone: phone,\r\n          FirstName: firstName,\r\n          LastName: lastName,\r\n          AgencyAktorId: agencyId\r\n        })\r\n          .success(function(employee) {\r\n            params.addNewEmployee(employee);\r\n          })\r\n          .fail(function(err) {\r\n            self.errorText(err.responseText);\r\n          });\r\n      }\r\n    } else {\r\n      self.errorText(window.language.errorCreateEmployee);\r\n    }\r\n  };\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"block-black create-participant\\\">\\r\\n    <h2 class=\\\"create-participant-heading\\\">Opprett en kursdeltaker</h2>\\r\\n    <form>\\r\\n        <div class=\\\"create-participant-wrapper\\\">\\r\\n            <div class=\\\"row\\\">\\r\\n                <div class=\\\"columns large-6\\\">\\r\\n                     <input data-bind=\\\"value: firstName\\\" class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"Fornavn\\\" />\\r\\n                </div>\\r\\n                <div class=\\\"columns large-6\\\">\\r\\n                     <input data-bind=\\\"value: lastName\\\" class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"Etternavn\\\" />\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"row\\\">\\t\\r\\n                <div class=\\\"columns large-9 end\\\">\\r\\n                    <input data-bind=\\\"value: email\\\" class=\\\"form-input\\\" type=\\\"text\\\" placeholder=\\\"E-post\\\" />\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"row\\\">\\t\\r\\n                <div class=\\\"columns large-9\\\">\\r\\n                    <input class=\\\"form-input\\\" data-bind=\\\"value: phone\\\" type=\\\"text\\\" placeholder=\\\"Telefonnummer\\\" />\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n        <div class=\\\"message is-error note\\\" data-bind=\\\"visible: showErrorMessage\\\" >\\r\\n            <div class=\\\"message-icon\\\">\\r\\n                <div class=\\\"info-circle\\\">!</div>\\r\\n            </div>\\t\\r\\n            <div class=\\\"message-text\\\" data-bind=\\\"text: errorText\\\"></div>\\r\\n            <a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"#\\\" data-bind=\\\"click: hideErrorMessage\\\">\\r\\n                <span class=\\\"icon-close\\\"></span>\\r\\n            </a>\\r\\n        </div>\\r\\n        <br />\\r\\n        <div class=\\\"left\\\">\\r\\n\\t\\t\\t<button type=\\\"button\\\" data-bind=\\\"click: closeDialog\\\" class=\\\"btn btn-secondary inline small\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n                    Avbryt\\r\\n\\t\\t\\t\\t</span>\\t\\r\\n\\t\\t\\t</button>\\r\\n        </div>\\r\\n        <div class=\\\"right\\\">\\r\\n\\t\\t\\t<button type=\\\"button\\\" data-bind=\\\"click: addEmployee\\\" class=\\\"btn btn-primary inline small\\\" data-action=\\\"create_new_user\\\" data-label=\\\"create_new_user_purchase\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"btn-text\\\">\\r\\n                    Legg til\\r\\n\\t\\t\\t\\t</span>\\t\\r\\n\\t\\t\\t</button>\\r\\n        </div>\\r\\n    </form>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  MEMBERSHIPTYPE = require('_js/constants/membership-type'),\r\n  ACCESSLEVEL = require('_js/constants/article-access-level');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  self.article = params.result || params.article;\r\n  self.isLocked = ko.observable(false);\r\n\r\n  if (\r\n    (self.article.AccessLevel !== ACCESSLEVEL.ALL && window.username === '') ||\r\n    (window.username !== '' &&\r\n      self.article.AccessLevel === ACCESSLEVEL.MEMBERS &&\r\n      window.membershipType === MEMBERSHIPTYPE.NONMEMBER)\r\n  ) {\r\n    self.isLocked(true);\r\n  }\r\n}\r\n\r\nModel.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nModel.prototype.truncate = function() {\r\n  $(this.$element.find('.truncate-later')).dotdotdot({\r\n    ellipsis: '... ',\r\n    wrap: 'word',\r\n    fallbackToLetter: true,\r\n    watch: true\r\n  });\r\n};\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"\\r\\n<div class=\\\"article-block list-view clearfix\\\" data-bind=\\\"useElement: true, css: { 'article-block-noimage': !article.ImageUrl }\\\">\\r\\n    <div class=\\\"columns large-12 small-12 no-padding\\\">\\r\\n        <a class=\\\"no-border\\\" href=\\\"#\\\" data-bind=\\\"attr: { href: article.Url }\\\">\\r\\n            <ul class=\\\"columns large-12 search-hit-list-row-container\\\">\\r\\n                <li class=\\\"columns large-9\\\">\\r\\n                    <h3 class=\\\"truncate-later\\\" data-bind=\\\"text: article.Title\\\"></h3>\\r\\n                    <p class=\\\"truncate-later\\\" data-bind=\\\"html: article.Description\\\"></p>\\r\\n                    <span class=\\\"fake-link\\\">Les mer</span>\\r\\n                </li>\\r\\n                <li class=\\\"columns large-3\\\">\\r\\n                    <ul>\\r\\n                        <li class=\\\"search-hit-meta\\\">\\r\\n                            <div class=\\\"block-meta-information\\\">\\r\\n                                 <div class=\\\"meta-information meta-information-categories\\\" data-bind=\\\"foreach: {data: article.Categories,  as: 'category'}\\\">\\r\\n                                    <span class=\\\"categories\\\" data-bind=\\\"text: category\\\"></span>\\r\\n                                </div>\\r\\n                                <div class=\\\"meta-information meta-information-date\\\">\\r\\n                                    <span class=\\\"date\\\" data-bind=\\\"text: article.DateString\\\"></span>\\r\\n                                    - av <span class=\\\"author\\\" data-bind=\\\"text: article.Author\\\"></span>\\r\\n                                </div>\\r\\n                                <!-- ko if: isLocked -->\\r\\n                                    <div class=\\\"icon-lock article-locked\\\">\\r\\n                                    </div>\\r\\n                                <!-- /ko -->\\r\\n                            </div>\\r\\n                        </li>\\r\\n                    </ul>\\r\\n                </li>\\r\\n            </ul>\\r\\n        </a>\\r\\n    </div>\\r\\n    <!-- ko template: { name: '', afterRender: truncate.bind($data) } --><!-- /ko -->\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  MEMBERSHIPTYPE = require('_js/constants/membership-type'),\r\n  ACCESSLEVEL = require('_js/constants/article-access-level');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  self.article = params.result || params.article;\r\n  self.isLocked = ko.observable(false);\r\n  self.image = 'url(' + self.article.ImageUrl + ')';\r\n\r\n  if (\r\n    (self.article.AccessLevel !== ACCESSLEVEL.ALL && window.username === '') ||\r\n    (window.username !== '' &&\r\n      self.article.AccessLevel === ACCESSLEVEL.MEMBERS &&\r\n      window.membershipType === MEMBERSHIPTYPE.NONMEMBER)\r\n  ) {\r\n    self.isLocked(true);\r\n  }\r\n}\r\n\r\nModel.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nModel.prototype.truncate = function() {\r\n  $(this.$element.find('.truncate-later')).dotdotdot({\r\n    ellipsis: '... ',\r\n    wrap: 'word',\r\n    fallbackToLetter: true,\r\n    watch: true\r\n  });\r\n};\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"article-block article-block-full clearfix\\\" data-bind=\\\"useElement: true\\\">\\r\\n    <div class=\\\"columns large-6 medium-6 small-12 no-padding block-image-container\\\">\\r\\n        <div class=\\\"wrapper-ratio\\\">\\r\\n            <div class=\\\"wrapper-ratio-content\\\">\\r\\n                <div class=\\\"block-image\\\" data-bind=\\\"style: { 'background-image': image }\\\"></div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-6 medium-6 small-12 no-padding block-above block-text-container\\\">\\r\\n        <a data-bind=\\\"attr: { href: article.Url }\\\" class=\\\"no-border\\\">\\r\\n            <div class=\\\"wrapper-ratio\\\">\\r\\n                <div class=\\\"wrapper-ratio-content\\\">\\r\\n                    <div class=\\\"block-text\\\">\\r\\n                        <div class=\\\"block-meta-information\\\">\\r\\n                            <div class=\\\"meta-information meta-information-categories\\\" data-bind=\\\"foreach: {data: article.Categories,  as: 'category'}\\\">\\r\\n                                <span class=\\\"categories\\\" data-bind=\\\"text: category\\\"></span>\\r\\n                            </div>\\r\\n                        </div>\\r\\n                        <h3 class=\\\"truncate-later truncate-1\\\" data-bind=\\\"text: article.Title\\\"></h3>\\r\\n                        <div data-bind=\\\"attr: { class: article.Categories.length > 0 ? 'truncate-later truncate-3' : 'truncate-later truncate-4' }\\\">\\r\\n                            <p data-bind=\\\"html: article.Description\\\"></p>\\r\\n                        </div>\\r\\n                        <!-- ko if: isLocked -->\\r\\n                            <div class=\\\"icon-lock article-locked\\\">\\r\\n                            </div>\\r\\n                        <!-- /ko -->\\r\\n                        <!-- ko else -->\\r\\n                            <span class=\\\"fake-link\\\">Les mer</span>\\r\\n                        <!-- /ko -->\\r\\n                    </div>\\r\\n                </div>\\r\\n            </div>\\r\\n        </a>\\r\\n        <div class=\\\"block-pointer\\\"></div>\\r\\n    </div>\\r\\n    <!-- ko template: { name: '', afterRender: truncate.bind($data) } --><!-- /ko -->\\r\\n</div>\"","function Model(params) {\r\n  var self = this;\r\n  self.product = params.result;\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"block row\\\">\\r\\n\\t<!-- ko if: product.ImageUrl -->\\r\\n\\t<div class=\\\"columns large-12 small-12 no-padding\\\">\\r\\n\\t\\t<div class=\\\"block-image\\\" data-bind=\\\"style: { backgroundImage: 'url(' + product.ImageUrl + ')' }\\\"></div>\\r\\n\\t</div>\\r\\n\\t<!-- /ko -->\\r\\n\\t<div class=\\\"columns large-12 small-12 no-padding\\\">\\r\\n\\t\\t<h3 data-bind=\\\"text: product.Title\\\"></h3>\\r\\n\\r\\n\\t\\t<div class=\\\"text-container\\\" data-bind=\\\"html: product.Description\\\">\\r\\n\\t\\t</div>\\r\\n\\r\\n\\t\\t<a data-bind=\\\"attr: { href: product.Url }\\\">Les mer</a>\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  AUTHORIZATION_TYPE = require('_js/constants/authorization'),\r\n  filter = require('lodash/filter');\r\n\r\nfunction CourseBlock(params) {\r\n  this.parent = params.parent;\r\n  this.params = params;\r\n  this.data = params.data;\r\n  this.API = params.api;\r\n  this.excludeImage = params.excludeImage;\r\n  this.planned = params.planned || false;\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  // Listen to the authorization type (accountant or \"revisor\").\r\n  this.AuthorizationType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  // Filter the credits based on which authorization type to use.\r\n  this.filteredCredits = ko.computed(function() {\r\n    return filter(this.data.Course.ActiveAuthorizationCredits, {\r\n      AuthorizationType: this.AuthorizationType()\r\n    });\r\n  }, this);\r\n\r\n  this.purchased = ko.observable(false);\r\n  this.isExpanded = ko.observable(false);\r\n  if (this.data.Course.FromDate !== null) {\r\n    var date = new Date(this.data.Course.FromDate);\r\n    this.dateFormatted =\r\n      '' + date.getDate() + '.' + date.getMonth() + '.' + date.getFullYear();\r\n  }\r\n\r\n  this.shortDescription = ko.computed(function() {\r\n    if (this.data.Course.ShortDescription) {\r\n      var div = document.createElement('div');\r\n      div.innerHTML = this.data.Course.ShortDescription;\r\n      return div.textContent || div.innerText || '';\r\n    }\r\n    return '';\r\n  }, this);\r\n\r\n  ko.postbox.subscribe(\r\n    'removeCourseWithKey',\r\n    function(key) {\r\n      if (key === this.data.CartObject.Key) {\r\n        this.purchased(false);\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nCourseBlock.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.$expandable = $(this.$element.next('.expandable-course').get(0));\r\n};\r\n\r\nCourseBlock.prototype.buyCourse = function() {\r\n  ko.postbox.publish('buyCourse', this.data.CartObject);\r\n  this.purchased(true);\r\n};\r\n\r\nCourseBlock.prototype.expand = function() {\r\n  var self = this;\r\n  if (this.isExpanded()) {\r\n    this.$expandable.slideUp(250, 'easeOutQuad', function() {\r\n      self.isExpanded(!self.isExpanded());\r\n    });\r\n  } else {\r\n    self.isExpanded(!self.isExpanded());\r\n    this.$expandable.slideDown(250, 'easeOutQuad', function() {});\r\n  }\r\n};\r\n\r\nmodule.exports = CourseBlock;\r\n","module.exports = \"\\r\\n<div class=\\\"course-fancy-block spaced clearfix\\\">\\r\\n\\t<!-- ko ifnot: (excludeImage && data.CartObject.ImageUrl)-->\\r\\n        <div class=\\\"columns large-6 small-12 no-padding block-image-container\\\">\\r\\n            <div class=\\\"block-image\\\" data-bind=\\\"style: { 'background-image': 'url(' + data.CartObject.ImageUrl + ''}\\\">\\r\\n            </div>\\r\\n        </div>\\r\\n\\t<!-- /ko -->\\r\\n\\t<div class=\\\"columns large-6 small-12 no-padding block-text-container\\\">\\r\\n\\t\\t<a href=\\\"\\\" data-bind=\\\"attr: { href: data.Url}\\\">\\r\\n\\t\\t\\t<div class=\\\"block-text\\\">\\r\\n\\t\\t\\t\\t<h2 data-bind=\\\"text: data.Course.Title\\\"></h2>\\r\\n\\t\\t\\t\\t<p class=\\\"truncate\\\" data-bind=\\\"text: shortDescription\\\"></p>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\\"media-tile-hours-container\\\" data-bind=\\\"foreach: filteredCredits\\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\\"media-tile-hours\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n                                    <!-- ko component: {\\r\\n                                        name: 'calculator-timeunit',\\r\\n                                        params: { type: $parent.planned ? 1 : 0 }\\r\\n                                    } --> \\r\\n                                    <!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<div class=\\\"description-container\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"course-tile-footer\\\">\\r\\n\\t\\t\\t\\t\\t\\t<ul class=\\\"media-tile-facts\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: data.Course.IsNetCourse -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-globe\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\">Stedlig kurs</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n                                <li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-calendar\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": data.Course.DateList}} -->\\r\\n          \\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n                                <li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko ifnot: data.Course.City === \\\"\\\" -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-pin\\\" ></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\" data-bind=\\\"text: data.Course.City\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- ko if: data.Course.City === \\\"\\\" -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\" data-bind=\\\"text: window.language.externalCourse\\\">Eksternt kurs</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: data.Course.IsNetCourse -->\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<li class=\\\"online\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"icon-screen\\\"></span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\">Nettkurs</span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</a>\\r\\n\\t\\t<!-- ko ifnot: excludeImage -->\\r\\n\\t\\t    <div class=\\\"block-pointer\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n</div>\\r\\n\"","var ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  analytics = require('_js/analytics-ecommerce');\r\n\r\nfunction getAvailability(availability) {\r\n  if (!availability) return '';\r\n\r\n  switch (availability.Status) {\r\n    case 1:\r\n      return 'open';\r\n    case 2:\r\n      return 'few';\r\n    case 3:\r\n      return 'full';\r\n    case 4:\r\n      return 'cancelled';\r\n  }\r\n}\r\n\r\nfunction GetCourseType(courseType) {\r\n  switch (courseType) {\r\n    case 2:\r\n      return 'icon-fagdag';\r\n    case 3:\r\n      return 'icon-screen';\r\n    case 4:\r\n      return 'icon-fagdag';\r\n    case 5:\r\n      return 'icon-bundle';\r\n    default:\r\n      return 'icon-globe'; //Utenlandskurs\r\n  }\r\n}\r\n\r\nfunction GetTruncateCssClasses(authorizationCredits, filterAuthorizationType) {\r\n  if (authorizationCredits == null || authorizationCredits.length == 0) {\r\n    return 'truncate market-tile';\r\n  }\r\n  var filteredCredits = filterCredits(\r\n    authorizationCredits,\r\n    filterAuthorizationType\r\n  );\r\n  if (filteredCredits === undefined || filteredCredits.length == 0) {\r\n    return 'truncate market-tile';\r\n  }\r\n  if (filteredCredits.length > 3) {\r\n    return (\r\n      'truncate market-tile short-' + filteredCredits.length + ' is-truncated'\r\n    );\r\n  }\r\n  return 'truncate market-tile normal is-truncated';\r\n}\r\n\r\nfunction filterCredits(credits, filterAuthorizationType) {\r\n  return credits.filter(function(x) {\r\n    return x.AuthorizationType == filterAuthorizationType;\r\n  });\r\n}\r\n\r\nfunction MediaListModel(params) {\r\n  var self = this;\r\n  self.item = params.item;\r\n  self.quickPurchaseOnlineCourse = params.quickPurchaseOnlineCourse;\r\n  self.showCart = self.item.ShowCart;\r\n  self.videoId = params.item.VideoId;\r\n  self.userHasPurchasedCourseUrl = self.item.UserHasPurchasedCourseUrl;\r\n  //This is a temporary way to show image\r\n  self.image = 'url(' + self.item.ImageUrl + ')';\r\n  self.item._IsPurchasedLocal = ko.observable(false);\r\n  self.item.IsPurchased = ko.computed({\r\n    read: function () {\r\n      var inCart = !!cart.findCourseInCart(cart.getCart(), self.item.Id);\r\n      var apiPurchased = !!self.item._IsPurchasedLocal();\r\n      return inCart || apiPurchased;\r\n    },\r\n    write: function (value) {\r\n      self.item._IsPurchasedLocal(value);\r\n    }\r\n  });\r\n\r\n\r\n  self.isAddedToMyCourses = ko.observable(false);\r\n  self.courseId = null;\r\n  self.loading = ko.observable(true);\r\n  //Dynamic CSS classes\r\n  self.availability = getAvailability(self.item.Availability);\r\n  self.availabilityText = self.item.AvailabilityText;\r\n  self.eventTypeIconString = GetCourseType(self.item.EventType);\r\n  self.authorizationCredits = self.item.AuthorizationCredits;\r\n  self.filterAuthorizationType = ko\r\n    .observable('1')\r\n    .subscribeTo('filterAuthorizationTypeUpdated', true);\r\n  self.truncate = GetTruncateCssClasses(self.item.AuthorizationCredits, '1');\r\n  self.addToCart = function(el, ev) {\r\n    ev.preventDefault();\r\n\r\n    self.courseId = self.item.Id;\r\n    cart.addCourseToCart(self.item);\r\n    self.item._IsPurchasedLocal(true);\r\n  };\r\n\r\n  self.trackAndRedirect = function() {\r\n    analytics.productClickedFromCatalog(self.item);\r\n  };\r\n\r\n  self.trackAndRedirectMousedown = function(data, event) {\r\n    if (event.which === 2) {\r\n      analytics.productMouseDownEvent(self.item);\r\n      window.open(data.Url, '_blank');\r\n      return;\r\n    }\r\n    if (event.which === 3) {\r\n      analytics.productMouseDownEvent(self.item);\r\n    }\r\n  };\r\n  var isRNFriProduct = self.item.IsRNFriProduct;\r\n  var netCourse = self.item.EventType === 3;\r\n  var onsiteCourse = self.item.EventType === 1;\r\n  var showRNFriButton =\r\n    (isRNFriProduct && netCourse) ||\r\n    (isRNFriProduct && (onsiteCourse && self.item.FreeOfChargeWithRnFri));\r\n  self.item.IsRNFriProduct = showRNFriButton;\r\n\r\n  // Lytt til changes på handlekurven. Hvis element er fjernet som matcher denne IDen\r\n  ko.postbox.subscribe('removeCourse', function (course) {\r\n    if (course.Id === self.item.Id) {\r\n      self.item._IsPurchasedLocal(false);\r\n    }\r\n  });\r\n\r\n  this.userHasPurchasedCourse();\r\n}\r\n\r\nMediaListModel.prototype.userHasPurchasedCourse = function () {\r\n  var userHasPurchasedCourseUrl = this.userHasPurchasedCourseUrl;\r\n  if (\r\n    userHasPurchasedCourseUrl === null ||\r\n    userHasPurchasedCourseUrl === undefined ||\r\n    userHasPurchasedCourseUrl === ''\r\n  ) {\r\n    this.loading(false);\r\n    return;\r\n  }\r\n\r\n  var url = userHasPurchasedCourseUrl + '?sequenceId=' + this.item.Key;\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function (response) {\r\n      this.item._IsPurchasedLocal(response);\r\n      this.loading(false);\r\n    }.bind(this),\r\n    function(response) {\r\n      var location = window.location.href || document.URL;\r\n      this.loading(false);\r\n\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: calculator.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nmodule.exports = MediaListModel;\r\n","module.exports = \"<!-- ko if: loading -->\\r\\n<div class=\\\"loader is-loading\\\" data-bind=\\\"visible: true\\\"></div>\\r\\n<!-- /ko -->\\r\\n\\r\\n<!-- ko ifNot: loading -->\\r\\n<div class=\\\"media-tile marketing-tile\\\">\\r\\n\\t<div class=\\\"media-tile-image-wrapper\\\">\\r\\n\\t\\t<a class=\\\"media-tile-image-bgimage\\\" href=\\\"\\\"\\r\\n\\t\\t\\tdata-bind=\\\"style: { 'background-image': image, 'border-bottom': 'none'}, attr: { href: item.Url }\\\">\\r\\n\\t\\t</a>\\r\\n\\r\\n\\t\\t<!-- ko if: videoId -->\\r\\n\\t\\t<div data-bind=\\\"component: {\\r\\n\\t\\t\\tname: 'youtube-video', params: { videoId: videoId }\\r\\n\\t\\t}\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: item.IsRNFriProduct-->\\r\\n\\t\\t<div class=\\\"media-tile-user-booking-information\\\" data-quick-purchase-button data-bind=\\\"component: {\\r\\n\\t\\t\\tname: 'quick-purchase-button',\\r\\n\\t\\t\\t\\t\\tparams: {\\r\\n\\t\\t\\t\\t\\t\\tcourse: item,\\r\\n\\t\\t\\t\\t\\t\\ttext: window.language.addToMyCourse,\\r\\n\\t\\t\\t\\t\\t\\taddedText: window.language.addedToMyCourse,\\r\\n\\t\\t\\t\\t\\t\\tquickPurchaseOnlineCourse: quickPurchaseOnlineCourse,\\r\\n\\t\\t\\t\\t\\t\\tisCompact: true\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\\">\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: !item.IsRNFriProduct -->\\r\\n\\t\\t<div class=\\\"media-tile-user-booking-information\\\" data-bind=\\\"visible: showCart\\\">\\r\\n\\t\\t\\t<button class=\\\"btn btn-shopping round has-text\\\"\\r\\n\\t\\t\\t\\tdata-bind=\\\"click: addToCart, css: { purchased: item.IsPurchased }\\\">\\r\\n\\t\\t\\t\\t<span class=\\\"btn-bg\\\"></span>\\r\\n\\t\\t\\t\\t<span class=\\\"not-added\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon icon-cart\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\" data-bind=\\\"text: window.language.addToCart\\\"></span>\\r\\n\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t<span class=\\\"added\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon icon-check\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"btn-text\\\" data-bind=\\\"text: window.language.addedToCart\\\"></span>\\r\\n\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t</button>\\r\\n\\t\\t</div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: availability===\\\"few\\\" -->\\r\\n\\t\\t<div class=\\\"course-availability-information few\\\" data-bind=\\\"text: availabilityText\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: availability===\\\"full\\\" -->\\r\\n\\t\\t<div class=\\\"course-availability-information full\\\" data-bind=\\\"text: availabilityText\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t\\t<!-- ko if: availability===\\\"cancelled\\\" -->\\r\\n\\t\\t<div class=\\\"course-availability-information full\\\" data-bind=\\\"text: availabilityText\\\"></div>\\r\\n\\t\\t<!-- /ko -->\\r\\n\\t</div>\\r\\n\\t<div class=\\\"media-tile-info-wrapper\\\" data-bind=\\\"with: item\\\">\\r\\n\\t\\t<div class=\\\"media-tile-text-wrapper\\\" data-fixed-height>\\r\\n\\t\\t\\t<a class=\\\"media-tile-heading-link\\\" href=\\\"\\\"\\r\\n\\t\\t\\t\\tdata-bind=\\\"click: $parent.trackAndRedirect, event: { mousedown: $parent.trackAndRedirectMousedown }, attr: {href: Url}\\\">\\r\\n\\t\\t\\t\\t<h3 class=\\\"media-tile-heading\\\" data-bind=\\\"text: Heading\\\"></h3>\\r\\n\\t\\t\\t</a>\\r\\n\\t\\t\\t<p class=\\\"marketing-tile-ingress\\\" data-bind=\\\"html: Ingress, css: $parent.truncate\\\"></p>\\r\\n\\t\\t\\t<!-- ko if: $parent.authorizationCredits !== null && $parent.authorizationCredits.length > 0 -->\\r\\n\\t\\t\\t<div class=\\\"media-tile-hours-container\\\">\\r\\n\\t\\t\\t\\t<!-- ko foreach: $parent.authorizationCredits -->\\r\\n\\t\\t\\t\\t<!-- ko if: AuthorizationType == $component.filterAuthorizationType() -->\\r\\n\\t\\t\\t\\t<div class=\\\"course-credits-block-container\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: Hours -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko component: {\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tname: 'calculator-timeunit',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tparams: { type: 0 }\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t} -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"course-tile-footer\\\">\\r\\n\\t\\t\\t<ul class=\\\"media-tile-facts\\\">\\r\\n\\t\\t\\t\\t<li data-bind=\\\"css: { online: EventType === 3 }\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon\\\" data-bind=\\\"css: $parent.eventTypeIconString\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\" data-bind=\\\"text: EventTypeText\\\"></span>\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t<li data-bind=\\\"visible: (EventType != 3 && EventType !=0 && DateString)\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon icon-calendar\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"media-tile-text-container\\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\" data-bind=\\\"text: DateString\\\"></span>\\r\\n\\t\\t\\t\\t\\t</span>\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t<li data-bind=\\\"visible:  (EventType != 3 && EventType !=0 && City)\\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon icon-pin\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"media-tile-text\\\" data-bind=\\\"text: City\\\"></span>\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t</ul>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\\r\\n<!-- /ko -->\"","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nfunction CheckboxList(params) {\r\n  if (!params.checkedCallback) {\r\n    throw 'Need to provide a callback for when checkboxes are checked';\r\n  }\r\n  var self = this;\r\n  this.emptyListEvent = params.emptyListEvent;\r\n  this.updateListEvent = params.updateListEvent;\r\n  this.clearFiltersEvent = params.clearFiltersEvent;\r\n  this.options = ko.observableArray(params.options || []);\r\n  this.title = ko.observable(params.title || 'select many');\r\n\r\n  var checkedOptions = [];\r\n\r\n  if (params.category()) {\r\n    checkedOptions = params.category().split(',');\r\n\r\n    if (\r\n      checkedOptions.length &&\r\n      checkedOptions.length === this.options().length\r\n    ) {\r\n      checkedOptions = [];\r\n    }\r\n  }\r\n\r\n  this.checkedOptions = ko.observableArray(checkedOptions);\r\n  this.checkedOptions.subscribe(function() {\r\n    params.checkedCallback(this.findOptions());\r\n    this.updateList();\r\n  }, this);\r\n\r\n  if (this.clearFiltersEvent) {\r\n    ko.postbox.subscribe(this.clearFiltersEvent, function() {\r\n      self.clearOptions();\r\n    });\r\n  }\r\n\r\n  params.checkedCallback(this.findOptions());\r\n  this.updateList();\r\n}\r\n\r\nCheckboxList.prototype = new Base();\r\n\r\nCheckboxList.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nCheckboxList.prototype.updateList = function() {\r\n  if (this.updateListEvent) {\r\n    ko.postbox.publish(this.updateListEvent, this.findOptions());\r\n  }\r\n};\r\n\r\nCheckboxList.prototype.findOptions = function() {\r\n  var self = this;\r\n\r\n  var newOptions = $.map(this.options(), function(option) {\r\n    return $.map(self.checkedOptions(), function(chkOption) {\r\n      if (option.Key === parseInt(chkOption)) {\r\n        return option.Key;\r\n      }\r\n    });\r\n  });\r\n\r\n  if (newOptions.length > 0) {\r\n    return newOptions;\r\n  }\r\n\r\n  var allOptions = $.map(this.options(), function(option) {\r\n    return option.Key;\r\n  });\r\n\r\n  return allOptions;\r\n};\r\n\r\nCheckboxList.prototype.clearOptions = function() {\r\n  this.checkedOptions([]);\r\n  if (this.emptyListEvent) {\r\n    ko.postbox.publish(this.emptyListEvent);\r\n  }\r\n};\r\n\r\nmodule.exports = CheckboxList;\r\n","module.exports = \"<ul data-bind=\\\"foreach: options\\\" class=\\\"row\\\">\\r\\n    <li class=\\\"columns small-12 medium-6 large-4\\\" data-bind=\\\"css: { end : $index()+1 == $parent.options().length }\\\">\\r\\n        <div class=\\\"filter-checkbox\\\">\\r\\n            <input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox form-input-checkbox--large\\\"\\r\\n                data-bind=\\\"attr: { id: $parent.title() + '-' + $index(), value: Key }, checked: $parent.checkedOptions\\\"/>\\r\\n            <label data-bind=\\\"attr: { for: $parent.title() + '-' + $index() }, text: Value\\\"></label>\\r\\n        </div>\\r\\n    </li>\\r\\n</ul>\\t\\r\\n\"","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  filter = require('lodash/filter'),\r\n  find = require('lodash/find'),\r\n  each = require('lodash/each');\r\n\r\nfunction MultiSelect(params) {\r\n  if (!params.checkedCallback) {\r\n    throw 'Need to provide a callback for when checkboxes are checked';\r\n  }\r\n  var self = this;\r\n  this.emptyListEvent = params.emptyListEvent;\r\n  this.updateListEvent = params.updateListEvent;\r\n  this.removeItemEvent = params.removeItemEvent;\r\n  this.clearFiltersEvent = params.clearFiltersEvent;\r\n  this.options = ko.observableArray(params.options || []);\r\n  this.title = ko.observable(params.title || 'Vis alle');\r\n  this.isActive = ko.observable(false);\r\n\r\n  var answers = [];\r\n\r\n  if (params.category()) {\r\n    answers = params.category().split(',');\r\n  }\r\n\r\n  this.checkedOptions = ko.observableArray(answers);\r\n  this.checkedOptions.subscribe(function(val) {\r\n    params.checkedCallback(this.checkedOptions());\r\n    if (val.length === 0) {\r\n      this.title('Vis alle');\r\n    } else {\r\n      this.title('Endre valg');\r\n    }\r\n    this.updateList();\r\n  }, this);\r\n  if (answers.length > 0) {\r\n    this.title('Endre valg');\r\n  }\r\n\r\n  if (this.removeItemEvent) {\r\n    ko.postbox.subscribe(this.removeItemEvent, function(item) {\r\n      var newArr = filter(self.checkedOptions(), function(o) {\r\n        if (item.Key !== parseInt(o, 10)) {\r\n          return true;\r\n        }\r\n        return false;\r\n      });\r\n      self.checkedOptions(newArr);\r\n    });\r\n  }\r\n\r\n  if (this.clearFiltersEvent) {\r\n    ko.postbox.subscribe(this.clearFiltersEvent, function() {\r\n      self.clearOptions();\r\n    });\r\n  }\r\n\r\n  // Clicks outside the multiselect will close the dropdown.\r\n  ko.postbox.subscribe('maincontent', function(newVal) {\r\n    if (newVal === 'click') {\r\n      self.isActive(false);\r\n    }\r\n  });\r\n\r\n  this.updateList();\r\n}\r\n\r\nMultiSelect.prototype = new Base();\r\n\r\nMultiSelect.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  // Clicks on the element will not trigger the closing of the multiselect.\r\n  this.$element.on('click', function(e) {\r\n    e.stopPropagation();\r\n  });\r\n};\r\n\r\nMultiSelect.prototype.updateList = function() {\r\n  if (this.updateListEvent) {\r\n    ko.postbox.publish(this.updateListEvent, this.findOptions());\r\n  }\r\n};\r\n\r\nMultiSelect.prototype.removeParent = function(list, key) {\r\n  return filter(list, function(item) {\r\n    return item.Key !== key;\r\n  });\r\n};\r\n\r\nMultiSelect.prototype.hasChildrenSelected = function(list, keys) {\r\n  var result = find(list, function(item) {\r\n    for (var i = 0; i < keys.length; i++) {\r\n      if (parseInt(keys[i], 10) === item.Key) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  });\r\n  return result !== undefined;\r\n};\r\n\r\nMultiSelect.prototype.findOptions = function() {\r\n  var self = this;\r\n  var checkedOptions = this.checkedOptions();\r\n  var newOptions = [];\r\n\r\n  for (var i = 0; i < checkedOptions.length; i++) {\r\n    each(this.options(), function(o) {\r\n      if (o.Key === parseInt(checkedOptions[i])) {\r\n        // Only add this option if it has no children that are selected.\r\n        if (!self.hasChildrenSelected(o.List, checkedOptions)) {\r\n          newOptions.push(o);\r\n          return o;\r\n        }\r\n      } else if (o.List.length > 0) {\r\n        for (var j = 0; j < o.List.length; j++) {\r\n          if (o.List[j].Key === parseInt(checkedOptions[i], 10)) {\r\n            newOptions.push(o.List[j]);\r\n            newOptions = self.removeParent(newOptions, o.Key);\r\n            return o.List[j];\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  return newOptions;\r\n};\r\n\r\nMultiSelect.prototype.clearOptions = function() {\r\n  this.checkedOptions([]);\r\n  if (this.emptyListEvent) {\r\n    ko.postbox.publish(this.emptyListEvent);\r\n  }\r\n};\r\n\r\nMultiSelect.prototype.toggleMultiSelect = function() {\r\n  this.isActive(!this.isActive());\r\n};\r\n\r\nmodule.exports = MultiSelect;\r\n","module.exports = require('./forEach');\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","module.exports = \"<div class=\\\"filter\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\t<button type=\\\"button\\\" class=\\\"btn btn-filter btn-dropdown slide advanced-filter\\\" aria-expanded=\\\"true\\\" aria-controls=\\\"Kategori0\\\" data-bind=\\\"click: toggleMultiSelect, css: { 'is-active': isActive}\\\">\\r\\n        <span data-bind=\\\"text: title\\\"></span>\\r\\n    </button>\\r\\n\\t<div class=\\\"filter-panel-wrapper\\\">\\r\\n\\t\\t<div class=\\\"filter-panel\\\" data-bind=\\\"css: { 'is-active': isActive}\\\"\\\">\\r\\n\\t\\t\\t<div class=\\\"filter-options-reset-container\\\">\\r\\n                <a href=\\\"#\\\" class=\\\"filter-options-reset grey\\\" data-bind=\\\"click: clearOptions\\\">\\r\\n                    <span class=\\\"icon icon-close\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"clear-filter\\\">Nullstill</span>\\r\\n                </a>\\r\\n            </div>\\r\\n\\t\\t\\t<ul data-bind=\\\"foreach: options\\\">\\r\\n\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"filter-checkbox\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { id: $parent.title() + '-' + $index(), value: Key }, checked: $parent.checkedOptions\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<label data-bind=\\\"attr: { for: $parent.title() + '-' + $index() }, text: Value\\\"></label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t<!-- ko if: $data.List -->\\r\\n\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: List\\\">\\r\\n\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"filter-checkbox\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { id: Value + '-' + $index(), value: Key }, checked: $component.checkedOptions\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label data-bind=\\\"attr: { for: Value + '-' + $index() }, text: Value\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t</ul>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  filter = require('lodash/filter'),\r\n  find = require('lodash/find');\r\n\r\nfunction MultiSelectSimple(params) {\r\n  if (!params.checkedCallback) {\r\n    throw 'Need to provide a callback for when checkboxes are checked';\r\n  }\r\n  var self = this;\r\n  this.parent = params.parent;\r\n  this.options = ko.observableArray(params.options || []);\r\n  this.title = ko.observable(params.title || 'Vis alle');\r\n  this.isActive = ko.observable(false);\r\n\r\n  var answers = [];\r\n\r\n  if (params.category()) {\r\n    answers = params.category().split(',');\r\n  }\r\n\r\n  this.checkedOptions = ko.observableArray(answers);\r\n  this.checkedOptions.subscribe(function(val) {\r\n    params.checkedCallback(this.parent, this.checkedOptions());\r\n    if (val.length === 0) {\r\n      this.title('Vis alle');\r\n    } else {\r\n      this.title('Endre valg');\r\n    }\r\n  }, this);\r\n  if (answers.length > 0) {\r\n    this.title('Endre valg');\r\n  }\r\n\r\n  // Clicks outside the multiselect will close the dropdown.\r\n  ko.postbox.subscribe('maincontent', function(newVal) {\r\n    if (newVal === 'click') {\r\n      self.isActive(false);\r\n    }\r\n  });\r\n}\r\n\r\nMultiSelectSimple.prototype = new Base();\r\n\r\nMultiSelectSimple.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  // Clicks on the element will not trigger the closing of the multiselect.\r\n  this.$element.on('click', function(e) {\r\n    e.stopPropagation();\r\n  });\r\n};\r\n\r\nMultiSelectSimple.prototype.removeParent = function(list, key) {\r\n  return filter(list, function(item) {\r\n    return item.Key !== key;\r\n  });\r\n};\r\n\r\nMultiSelectSimple.prototype.hasChildrenSelected = function(list, keys) {\r\n  var result = find(list, function(item) {\r\n    for (var i = 0; i < keys.length; i++) {\r\n      if (parseInt(keys[i], 10) === item.Key) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  });\r\n  return result !== undefined;\r\n};\r\n\r\nMultiSelectSimple.prototype.clearOptions = function() {\r\n  this.checkedOptions([]);\r\n};\r\n\r\nMultiSelectSimple.prototype.toggleMultiSelect = function() {\r\n  this.isActive(!this.isActive());\r\n};\r\n\r\nmodule.exports = MultiSelectSimple;\r\n","module.exports = \"<div class=\\\"filter\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\t<button type=\\\"button\\\" class=\\\"btn btn-filter btn-dropdown slide advanced-filter\\\" aria-expanded=\\\"true\\\" aria-controls=\\\"Kategori0\\\" data-bind=\\\"click: toggleMultiSelect, css: { 'is-active': isActive}\\\">\\r\\n        <span data-bind=\\\"text: title\\\"></span>\\r\\n    </button>\\r\\n\\t<div class=\\\"filter-panel-wrapper\\\">\\r\\n\\t\\t<div class=\\\"filter-panel\\\" data-bind=\\\"css: { 'is-active': isActive}\\\">\\r\\n\\t\\t\\t<div class=\\\"filter-options-reset-container\\\">\\r\\n                <a href=\\\"#\\\" class=\\\"filter-options-reset grey\\\" data-bind=\\\"click: clearOptions\\\">\\r\\n                    <span class=\\\"icon icon-close\\\"></span>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"clear-filter\\\">Nullstill</span>\\r\\n                </a>\\r\\n            </div>\\r\\n\\t\\t\\t<ul data-bind=\\\"foreach: options\\\">\\r\\n\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t<div class=\\\"filter-checkbox\\\">\\r\\n\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { id: $parent.title() + '-' + $index(), value: Key }, checked: $parent.checkedOptions\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<label data-bind=\\\"attr: { for: $parent.title() + '-' + $index() }, text: Value\\\"></label>\\r\\n\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t<!-- ko if: $data.List -->\\r\\n\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: List\\\">\\r\\n\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"filter-checkbox\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { id: Value + '-' + $index(), value: Key }, checked: $component.checkedOptions\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label data-bind=\\\"attr: { for: Value + '-' + $index() }, text: Value\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- ko if: $data.List -->\\r\\n\\t\\t\\t\\t\\t\\t\\t<ul data-bind=\\\"foreach: List\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"filter-checkbox\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdata-bind=\\\"attr: { id: Value + '-' + $index(), value: Key }, checked: $component.checkedOptions\\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<label data-bind=\\\"attr: { for: Value + '-' + $index() }, text: Value\\\"></label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t\\t\\t</ul>\\r\\n\\t\\t\\t\\t\\t<!-- /ko -->\\r\\n\\t\\t\\t\\t</li>\\r\\n\\t\\t\\t</ul>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  find = require('lodash/find'),\r\n  filter = require('lodash/filter');\r\n\r\nfunction SelectedList(params) {\r\n  if (\r\n    !params.emptyListEvent ||\r\n    !params.removeItemEvent ||\r\n    !params.updateListEvent\r\n  ) {\r\n    throw 'Need to provide events that SelectedList can listen and publish to.';\r\n  }\r\n\r\n  var self = this;\r\n  this.emptyListEvent = params.emptyListEvent;\r\n  this.removeItemEvent = params.removeItemEvent;\r\n  this.updateListEvent = params.updateListEvent;\r\n\r\n  this.containerClass = params.containerClass || '';\r\n  this.items = ko.observableArray([]);\r\n\r\n  // Update the list.\r\n  ko.postbox.subscribe(\r\n    this.updateListEvent,\r\n    function(item) {\r\n      self.items(item);\r\n    },\r\n    true\r\n  );\r\n\r\n  // Remove all items in the list.\r\n  ko.postbox.subscribe(\r\n    this.emptyListEvent,\r\n    function() {\r\n      self.items([]);\r\n    },\r\n    true\r\n  );\r\n}\r\n\r\nSelectedList.prototype = new Base();\r\n\r\nSelectedList.prototype.removeItem = function(key) {\r\n  // Notify subscribers that item has been removed.\r\n  ko.postbox.publish(\r\n    this.removeItemEvent,\r\n    find(this.items(), function(item) {\r\n      if (item.Key === key) {\r\n        return true;\r\n      }\r\n      return false;\r\n    })\r\n  );\r\n  // Remove it from the list.\r\n  this.items(\r\n    filter(this.items(), function(item) {\r\n      return item.Key !== key;\r\n    })\r\n  );\r\n};\r\n\r\nmodule.exports = SelectedList;\r\n","module.exports = \"<ul class=\\\"form-selected-list\\\" data-bind=\\\"foreach: items, css: { 'form-selected-list-container': (items().length > 0) }\\\">\\r\\n\\t<li class=\\\"form-selected-list-item\\\">\\r\\n\\t\\t<span data-bind=\\\"text: Value\\\"></span>\\r\\n\\t\\t<span class=\\\"icon icon-close\\\" data-bind=\\\"click: function () { $component.removeItem(Key); }\\\"></span>\\r\\n\\t</li>\\r\\n</ul>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  $ = require('jquery');\r\n\r\nfunction AdminToolUserManagement(params) {\r\n  this.API = params.api;\r\n  this.title = params.texts.title;\r\n}\r\n\r\nAdminToolUserManagement.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.aktorID = ko.observable('');\r\n  this.aktorIDError = ko.observable('');\r\n\r\n  this.isLoading = ko.observable(false);\r\n  this.showResetPasswordBtn = ko.observable(false);\r\n\r\n  this.showResultInRed = ko.observable(false);\r\n  this.hasResult = ko.observable(false);\r\n  this.result = {\r\n    message: ko.observable(),\r\n    username: ko.observable(),\r\n    password: ko.observable()\r\n  };\r\n\r\n  this.unlockUserMessage = ko.observable('');\r\n  this.userUnlocked = ko.observable(true);\r\n};\r\n\r\nAdminToolUserManagement.prototype.validateNumber = function() {\r\n  var self = this;\r\n\r\n  self.hasResult(false);\r\n  self.showResetPasswordBtn(false);\r\n\r\n  var onlyNumbers = /^\\d+$/.test(self.aktorID());\r\n\r\n  if (self.aktorID().length == 8 && onlyNumbers) {\r\n    self.aktorIDError('');\r\n    self.createEpiUser();\r\n  } else if (!onlyNumbers && self.aktorID() !== '') {\r\n    self.aktorIDError(\"ID'en kan bare inneholde tall\");\r\n  } else if (self.aktorID().length < 8) {\r\n    self.aktorIDError(\"ID'en trenger 8 siffer\");\r\n  } else {\r\n    self.aktorIDError(\"ID'en kan ikke ha mer enn 8 siffer\");\r\n  }\r\n};\r\n\r\nAdminToolUserManagement.prototype.hideResetPasswordBtnOnChange = function(\r\n  data,\r\n  event\r\n) {\r\n  var self = this;\r\n  if (event.which == 13) {\r\n    self.sendAPICall();\r\n  } else {\r\n    self.showResetPasswordBtn(false);\r\n    self.hasResult(false);\r\n  }\r\n  return true;\r\n};\r\n\r\nAdminToolUserManagement.prototype.createEpiUser = function() {\r\n  var self = this;\r\n\r\n  self.isLoading(true);\r\n  var url = self.API.createEpiUserFromCRMUserUrl + '/' + self.aktorID();\r\n\r\n  APIHelper.post(\r\n    url,\r\n    {},\r\n    function(response) {\r\n      self.result.message(\r\n        response.Message\r\n          ? response.Message\r\n          : 'Noe gikk galt. Vennligst prøv igjen.'\r\n      );\r\n      if (response.Result == 0) {\r\n        self.result.username(response.Username);\r\n        self.result.password(response.GeneratedPassword);\r\n        self.showResultInRed(false);\r\n        self.showResetPasswordBtn(false);\r\n        self.reset();\r\n      } else if (response.Result == 1) {\r\n        self.showResultInRed(true);\r\n        self.showResetPasswordBtn(true);\r\n        self.userUnlocked(!response.IsLocked);\r\n      } else {\r\n        self.showResultInRed(true);\r\n        self.showResetPasswordBtn(false);\r\n      }\r\n      self.hasResult(true);\r\n      self.isLoading(false);\r\n    },\r\n    function(error) {\r\n      self.serverresult.messageError(JSON.stringify(error, null, 4));\r\n    }\r\n  );\r\n};\r\n\r\nAdminToolUserManagement.prototype.resetPassword = function() {\r\n  var self = this;\r\n  self.hasResult(false);\r\n  self.isLoading(true);\r\n\r\n  var url = self.API.resetPassword + '/' + self.aktorID();\r\n\r\n  APIHelper.post(\r\n    url,\r\n    {},\r\n    function(response) {\r\n      self.result.message(\r\n        response.Message\r\n          ? response.Message\r\n          : 'Noe gikk galt. Vennligst prøv igjen.'\r\n      );\r\n      if (response.Result === 0) {\r\n        self.result.username(response.Username);\r\n        self.result.password(response.GeneratedPassword);\r\n        self.showResultInRed(false);\r\n        self.reset();\r\n      } else {\r\n        self.showResultInRed(true);\r\n      }\r\n      self.showResetPasswordBtn(false);\r\n      self.hasResult(true);\r\n      self.userUnlocked(true);\r\n      self.isLoading(false);\r\n    },\r\n    function(error) {\r\n      self.result.message(JSON.stringify(error, null, 4));\r\n    }\r\n  );\r\n};\r\n\r\nAdminToolUserManagement.prototype.reset = function() {\r\n  this.aktorIDError('');\r\n  this.isLoading(false);\r\n  this.showResetPasswordBtn(false);\r\n  this.aktorID('');\r\n};\r\n\r\nAdminToolUserManagement.prototype.sendAPICall = function() {\r\n  var self = this;\r\n  if (self.showResetPasswordBtn()) {\r\n    // reset password\r\n    self.resetPassword();\r\n  } else {\r\n    // create epi user\r\n    self.validateNumber();\r\n  }\r\n};\r\n\r\nAdminToolUserManagement.prototype.unlockUser = function() {\r\n  var self = this;\r\n  var url = self.API.unlockUserUrl + '/' + self.aktorID();\r\n  APIHelper.post(\r\n    url,\r\n    {},\r\n    function(response) {\r\n      if (response.IsSuccess) {\r\n        self.userUnlocked(true);\r\n        self.unlockUserMessage('Brukeren ble låst opp');\r\n      } else {\r\n        self.unlockUserMessage(response.ErrorMessage);\r\n        self.userUnlocked(false);\r\n      }\r\n    },\r\n    function(error) {\r\n      self.result.message(JSON.stringify(error, null, 4));\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = AdminToolUserManagement;\r\n","module.exports = \"<div class=\\\"admin-tool row\\\" data-bind=\\\"useElement: true\\\">\\r\\n    <div class=\\\"columns large-6 small-centered\\\">\\r\\n        <h1 class=\\\"content-margin-bottom\\\" data-bind=\\\"text: title\\\">Adminverktøy</h1>\\r\\n    \\r\\n        <div class=\\\"admin-tool-inputs content-margin-bottom\\\">\\r\\n            <div class=\\\"input-container\\\">\\r\\n                <label class=\\\"login-form-input\\\" for=\\\"user-number\\\">Søk på aktør-ID:</label>\\r\\n                <input id=\\\"id-number\\\" name=\\\"idNumber\\\" \\r\\n                    placeholder=\\\"8 siffer\\\" \\r\\n                    type=\\\"text\\\"\\r\\n                    data-bind=\\\"value:aktorID, valueUpdate:'afterkeydown', event: { keypress: hideResetPasswordBtnOnChange }\\\">\\r\\n            </div>\\r\\n            <div class=\\\"button-container\\\"> \\r\\n                <button class=\\\"btn btn-primary expanded medium\\\" \\r\\n                    data-bind=\\\"visible: !showResetPasswordBtn(), event: { click: sendAPICall }\\\">\\r\\n                    <span class=\\\"btn-text\\\">Legg til</span>\\r\\n                </button>\\r\\n                <button class=\\\"btn btn-primary expanded medium\\\" \\r\\n                    data-bind=\\\"visible: showResetPasswordBtn(), event: { click: sendAPICall }\\\">\\r\\n                    <span class=\\\"btn-text\\\">Reset passord</span>\\r\\n                </button>\\r\\n            </div>\\r\\n            <div class=\\\"admin-tool-error\\\" data-bind=\\\"text: aktorIDError\\\"></div>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoading\\\"></div>\\r\\n        <div class=\\\"admin-tool-result\\\" data-bind=\\\"visible: hasResult \\\">\\r\\n            <div class=\\\"admin-tool-result-message\\\" data-bind=\\\"text: result.message, css: { 'red-text': showResultInRed() }\\\"></div>\\r\\n            <div class=\\\"admin-tool-result-message\\\" data-bind=\\\"text: unlockUserMessage()\\\"></div>\\r\\n            <div class=\\\"admin-tool-result-message\\\" data-bind=\\\"visible: !userUnlocked(), css: { 'red-text': true}\\\">Brukeren er låst</div>\\r\\n            <div data-bind=\\\"visible: !showResultInRed()\\\">\\r\\n                <span>Brukernavn: </span><span data-bind=\\\"text: result.username\\\"></span>\\r\\n                <br>\\r\\n                <span>Passord: </span><span data-bind=\\\"text: result.password\\\"></span>\\r\\n            </div>\\r\\n        </div>\\r\\n        <div class=\\\"button-container\\\">\\r\\n            <button class=\\\"btn btn-primary expanded medium\\\"\\r\\n                data-bind=\\\"visible: !userUnlocked(), event: { click: unlockUser }\\\">\\r\\n                <span class=\\\"btn-text\\\">Lås opp bruker</span>\\r\\n            </button>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\n/** A component that displays a list of files. */\r\nfunction FileList(params) {\r\n  if (params === undefined) {\r\n    throw 'Error: FileList component requires parameters';\r\n  } else if (params.fileList === undefined) {\r\n    throw 'Error: The parameter fileList is required.';\r\n  }\r\n\r\n  this.fileList = params.fileList;\r\n  // State to determine if we should show loading icon.\r\n  this.isRemoving = ko.observable(false);\r\n  // If no upload callback is provided we will use a noop function.\r\n  this.removeFileCallback = params.removeFileCallback || function() {};\r\n  this.removeFileUrl = params.removeFileUrl;\r\n  this.isAbleToRemoveFile = ko.observable(params.removeFileUrl !== undefined);\r\n\r\n  // Listen to an observable if remove should be disabled (empty observable so that the subscribe\r\n  // won't produce an error).\r\n  this.removeIsDisabled = params.removeDisabled || ko.observable(false);\r\n  this.removeIsDisabled.subscribe(function(val) {\r\n    if (val) {\r\n      this.isAbleToRemoveFile(false);\r\n    } else {\r\n      this.isAbleToRemoveFile(params.removeFileUrl !== undefined);\r\n    }\r\n  }, this);\r\n\r\n  if (this.removeIsDisabled()) {\r\n    this.isAbleToRemoveFile(false);\r\n  }\r\n\r\n  // Variables to be passed to message component.\r\n  this.type = ko.observable('is-error');\r\n  // Feedback message from the remove API call.\r\n  this.removeFeedback = ko.observable('');\r\n  this.isMessageOpen = ko.observable(false);\r\n}\r\n\r\nFileList.prototype.removeFile = function(file, index) {\r\n  var self = this,\r\n    tmpFileList = self.fileList();\r\n\r\n  self.isRemoving(true);\r\n  self.removeFeedback('');\r\n  self.isMessageOpen(false);\r\n\r\n  APIHelper.QcDelete(\r\n    self.removeFileUrl + file.fileId,\r\n    {},\r\n    function(response) {\r\n      tmpFileList.splice(index, 1);\r\n      self.fileList(tmpFileList);\r\n      self.fileList.valueHasMutated();\r\n      self.type('is-success');\r\n      self.removeFeedback('Sletting av \"' + file.name + '\" var vellykket.');\r\n      self.isRemoving(false);\r\n      self.isMessageOpen(true);\r\n      self.removeFileCallback(response);\r\n    },\r\n    function(error) {\r\n      self.type('is-error');\r\n      self.removeFeedback(\r\n        'Det skjedde noe galt ved sletting av \"' + file.name + '\".'\r\n      );\r\n      self.isRemoving(false);\r\n      self.isMessageOpen(true);\r\n      self.removeFileCallback(error);\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = FileList;\r\n","module.exports = \"<div class=\\\"file-list-container\\\">\\r\\n    <ul class=\\\"file-list\\\" data-bind=\\\"foreach: fileList\\\">\\r\\n        <li class=\\\"file-item\\\">\\r\\n            <div>\\r\\n                <a href=\\\"\\\" target=\\\"_blank\\\" data-bind=\\\"text: name, attr: { 'href': fileUrl }\\\"></a>\\r\\n                <span data-bind=\\\"text: dateString\\\"></span>\\r\\n            </div>\\r\\n            \\r\\n            <!-- ko if: $parent.isAbleToRemoveFile -->\\r\\n                <a  href=\\\"\\\" class=\\\"file-item-remove\\\" data-bind=\\\"click: $parent.removeFile.bind($parent, $data, $index())\\\">\\r\\n                    <span class=\\\"icon-close\\\"></span>\\r\\n                    <span>Slett</span>\\r\\n                </a>\\r\\n            <!-- /ko -->\\r\\n        </li>\\r\\n    </ul>\\r\\n    <div class=\\\"loader-overlay\\\" data-bind=\\\"css: { 'is-loading': isRemoving}\\\">\\r\\n        <div class=\\\"loader\\\" data-bind=\\\"css: { 'is-loading': isRemoving}\\\"></div>\\r\\n    </div>\\r\\n\\r\\n    <!-- ko component: { name: 'message', params: {\\r\\n\\t\\t    type: type,\\r\\n\\t\\t\\tisOpen: isMessageOpen,\\r\\n            message: removeFeedback\\r\\n\\t} } --><!-- /ko -->\\r\\n</div>\"","var ko = require('knockout');\r\n\r\nfunction Message(params) {\r\n  if (params === undefined) {\r\n    throw 'Error: Message component requires parameters to be passed to it.';\r\n  }\r\n  if (\r\n    params.type === undefined ||\r\n    params.isOpen === undefined ||\r\n    params.message === undefined\r\n  ) {\r\n    throw 'Error: Message requires the following parameters to be defined: type, isOpen, message.';\r\n  }\r\n  if (\r\n    !ko.isObservable(params.type) ||\r\n    !ko.isObservable(params.isOpen) ||\r\n    !ko.isObservable(params.message)\r\n  ) {\r\n    throw 'Error: Message component requires the following parameters to be observables: type, isOpen, message.';\r\n  }\r\n\r\n  this.type = params.type;\r\n  this.extraClassNames = ko.observable(ko.unwrap(params.extraClassNames));\r\n  this.message = params.message;\r\n\r\n  this.isOpen = params.isOpen;\r\n}\r\n\r\nMessage.prototype.close = function() {\r\n  this.isOpen(false);\r\n};\r\n\r\nmodule.exports = Message;\r\n","module.exports = \"<!-- ko if: isOpen -->\\r\\n    <div class=\\\"message\\\" data-bind=\\\"css: type\\\">\\r\\n        <div class=\\\"message-icon\\\">\\r\\n            <div class=\\\"info-circle\\\">\\r\\n                <!-- ko if: type() === 'is-success' -->\\r\\n                    <span class=\\\"icon-check\\\"></span>\\r\\n                <!-- /ko -->\\r\\n                <!-- ko ifnot: type() === 'is-success' -->\\r\\n                    <span>!</span>\\r\\n                <!-- /ko -->\\r\\n            </div>\\r\\n        </div>\\r\\n        <div class=\\\"message-text\\\" data-bind=\\\"text: message\\\"></div>\\r\\n        <a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"\\\" data-bind=\\\"click: close\\\">\\r\\n            <span class=\\\"icon-close\\\"></span>\\r\\n        </a>\\r\\n    </div>\\r\\n<!-- /ko -->\"","var ko = require('knockout');\r\n\r\nfunction MyCoursesPage(params) {\r\n  // 0 = Planned, 1 = Historical\r\n  this.tabType = ko.observable(0);\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n}\r\n\r\nMyCoursesPage.prototype.switchTab = function(tabType) {\r\n  this.tabType(tabType);\r\n};\r\n\r\nmodule.exports = MyCoursesPage;\r\n","module.exports = \"<div>\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"large-12 columns no-padding\\\">\\r\\n            <div class=\\\"department-select-list no-padding\\\">\\r\\n                <ul>\\r\\n                    <li data-bind=\\\"css: { 'is-active': tabType() === 0 }\\\">\\r\\n                        <a data-bind=\\\"click: function() { switchTab(0) }\\\">PÅMELDTE</a>\\r\\n                    </li>\\r\\n                    <li data-bind=\\\"css: { 'is-active': tabType() === 1 }\\\">\\r\\n                        <a data-bind=\\\"click: function() { switchTab(1) }\\\">HISTORIKK</a>\\r\\n                    </li>\\r\\n                </ul>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12 no-padding\\\">\\r\\n            <!-- ko if: tabType() === 0 -->\\r\\n                <div data-bind=\\\"component: { name: 'my-planned-courses', params: {\\r\\n                    api: API,\\r\\n                    links: links,\\r\\n                    texts: texts,\\r\\n                    plannedCoursesIntroText: texts.introTab1\\r\\n                }}\\\"></div>\\r\\n            <!-- /ko -->\\r\\n\\r\\n            <!-- ko if: tabType() === 1 -->\\r\\n                <div data-bind=\\\"component: { name: 'my-completed-courses', params: {\\r\\n                    api: API,\\r\\n                    links: links,\\r\\n                    texts: texts,\\r\\n                    completedCoursesIntroText: texts.introTab2\\r\\n                }}\\\"></div>\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nvar API_TAKE = 10,\r\n  API_TAKE_ALL = null, // Backend prefers that we send null in order to get all courses.\r\n  API_SKIP = 0;\r\n\r\nfunction MyPlannedCourses(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.plannedCoursesIntroText = ko.observable(params.plannedCoursesIntroText);\r\n  this.plannedCourses = ko.observableArray([]);\r\n  this.isModalActive = ko.observable(false);\r\n  this.isLoading = ko.observable(false);\r\n  this.showFetchAllCourses = ko.observable(false);\r\n  this.activeModal = ko.observable(false);\r\n  this.modalTitle = ko.observable('');\r\n  this.modalText = ko.observable('');\r\n  this.activeIndex = ko.observable();\r\n  this.watchNewNetCourseUrl =\r\n    this.API.watchNewNetCourseUrl + '?courseSequenceId=';\r\n  this.selectedSequenceId = ko.observable();\r\n  this.activeCourse = ko.computed(function() {\r\n    var course = this.plannedCourses()[this.activeIndex()];\r\n    if (typeof course === 'undefined') {\r\n      return '';\r\n    }\r\n    return this.plannedCourses()[this.activeIndex()];\r\n  }, this);\r\n\r\n  this.isLoading.subscribe(function(isLoading) {\r\n    if (isLoading) {\r\n      this.showFetchAllCourses(false);\r\n    }\r\n  }, this);\r\n  this.getPlannedCourses(API_TAKE, API_SKIP);\r\n}\r\n\r\nMyPlannedCourses.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  // Listen to modal/popup requests.\r\n  ko.postbox.subscribe(\r\n    'openPopup',\r\n    function(value) {\r\n      this.activeModal(!this.activeModal());\r\n      this.modalTitle(value.modalTitle);\r\n      this.modalText(value.modalText);\r\n      this.selectedSequenceId(value.selectedSequenceId);\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nMyPlannedCourses.prototype.setActiveCourse = function(index) {\r\n  this.activeIndex(index);\r\n};\r\n\r\nMyPlannedCourses.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nMyPlannedCourses.prototype.getPlannedCourses = function(take, skip) {\r\n  var self = this,\r\n    url =\r\n      this.API.plannedCoursesUrl +\r\n      '?skip=' +\r\n      encodeURIComponent(skip) +\r\n      '&take=' +\r\n      encodeURIComponent(take);\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      self.plannedCourses(response.Items);\r\n      self.isLoading(false);\r\n\r\n      if (take === API_TAKE_ALL || take >= response.TotalItems) {\r\n        self.showFetchAllCourses(false);\r\n      } else {\r\n        self.showFetchAllCourses(true);\r\n      }\r\n    },\r\n    function() {\r\n      self.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nMyPlannedCourses.prototype.getAllCourses = function() {\r\n  this.getPlannedCourses(API_TAKE_ALL, 0);\r\n};\r\n\r\nMyPlannedCourses.prototype.confirmCancellation = function() {\r\n  var self = this,\r\n    url =\r\n      this.API.cancelSequenceRegistrationUrl +\r\n      '?sequencePk=' +\r\n      this.plannedCourses()[this.activeIndex()].Course.SequencePK +\r\n      '&registrationKey=' +\r\n      this.plannedCourses()[this.activeIndex()].RegistrationKey,\r\n    activeIndex = this.activeIndex();\r\n\r\n  APIHelper.post(\r\n    url,\r\n    {},\r\n    function() {\r\n      self.isModalActive(false);\r\n      self.$element\r\n        .find(\r\n          '.my-courses-list .courses-list-item:nth-child(' +\r\n            (activeIndex + 1) +\r\n            ')'\r\n        )\r\n        .slideUp();\r\n    },\r\n    function(response) {\r\n      self.isModalActive(false);\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: my-planned-courses.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = MyPlannedCourses;\r\n","module.exports = \"<div class=\\\"modal\\\" id=\\\"modal\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n    <div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n    <h2 data-bind=\\\"text: modalTitle\\\"></h2>\\r\\n    <div data-bind=\\\"html: modalText\\\"></div>\\r\\n    <div class=\\\"actions-container\\\">\\r\\n      <a class=\\\"btn btn-secondary\\\" data-bind=\\\"attr: { href: watchNewNetCourseUrl + selectedSequenceId() }\\\">\\r\\n        <span class=\\\"btn-text\\\">Ja, vis i NY videoavspiller</span>\\r\\n      </a>\\r\\n      <a class=\\\"btn btn-primary\\\" data-bind=\\\"attr: { href: API.watchNetCourseUrl + selectedSequenceId() }\\\">\\r\\n        <span class=\\\"btn-text\\\">Nei</span>\\r\\n      </a>\\r\\n    </div>\\r\\n  </div>\\r\\n<div class=\\\"my-courses-container\\\" data-bind=\\\"useElement: true\\\">\\r\\n    <!-- ko if: plannedCoursesIntroText().length > 0 -->\\r\\n        <div class=\\\"filter courses-ingress\\\" data-bind=\\\"html: plannedCoursesIntroText\\\"></div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: plannedCourses().length > 0 -->\\r\\n        <ul class=\\\"my-courses-list\\\">\\r\\n            <!-- ko foreach: plannedCourses() -->\\r\\n                <!-- ko component: { \\r\\n                    name: \\\"courses-list-item\\\",\\r\\n                    params: {\\r\\n                        data: $data,\\r\\n                        links: $parent.links,\\r\\n                        texts: $parent.texts,\\r\\n                        api: $parent.API,\\r\\n                        isModalActive: $parent.isModalActive,\\r\\n                        index: $index(),\\r\\n                        setActiveCourse: $parent.setActiveCourse.bind($parent),\\r\\n                        isHistorical: false\\r\\n                    }\\r\\n                } --> <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n        </ul>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: isLoading() -->\\r\\n        <div class=\\\"loader-container\\\">\\r\\n            <div class=\\\"loader is-loading\\\"></div>\\r\\n        </div>\\r\\n    <!-- /ko -->\\r\\n    \\r\\n    <!-- ko ifnot: isLoading() -->\\r\\n        <!-- ko if: plannedCourses().length === 0 -->\\r\\n            <div class=\\\"message-plaque no-courses-available\\\">\\r\\n                <div data-bind=\\\"html: texts.noPlannedCoursesText\\\"></div>\\r\\n                <a class=\\\"btn btn-primary\\\" data-bind=\\\"attr: { href: links.courseCatalogueReference}\\\">Kurskatalogen</a>\\r\\n            </div>\\r\\n        <!-- /ko -->\\r\\n\\r\\n        <!-- ko if: activeCourse -->\\r\\n            <div class=\\\"cancel-course-modal modal\\\" data-bind=\\\"css: { 'is-active': isModalActive }\\\">\\r\\n                <div class=\\\"info-circle\\\">?</div>\\r\\n                <h2 data-bind=\\\"text: texts.cancelCourseConfirmationTitle\\\"></h2>\\r\\n                <div class=\\\"close\\\" data-bind=\\\"click: function(){ isModalActive(false) }\\\"><span class=\\\"icon-close\\\"></span></div>\\r\\n                <p data-bind=\\\"text: texts.cancelCourseInformationText\\\"></p>\\r\\n                <button class=\\\"btn btn-secondary\\\" data-bind=\\\"click: function(){ isModalActive(false) }\\\">Avbryt avbestilling</button>\\r\\n                <button class=\\\"btn btn-primary\\\" data-bind=\\\"click: confirmCancellation\\\">Bekreft avbestilling</button>\\r\\n            </div>\\r\\n        <!-- /ko -->\\r\\n\\r\\n        <!-- ko if: showFetchAllCourses -->\\r\\n            <div class=\\\"text-center\\\">\\r\\n                <button class=\\\"btn btn-secondary\\\" data-bind=\\\"click: getAllCourses\\\">\\r\\n                    <span class=\\\"btn-text\\\">Vis alle kurs</span>\\r\\n                </button>\\r\\n            </div>\\r\\n        <!-- /ko -->\\r\\n    <!-- /ko -->\\r\\n</div>\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  forOwn = require('lodash/forOwn'),\r\n  find = require('lodash/find');\r\n\r\nvar API_TAKE = 10,\r\n  API_TAKE_ALL = null, // Backend prefers that we send null in order to get all courses.\r\n  API_SKIP = 0,\r\n  SHOW_ALL_KEY = 'Vis alle';\r\n\r\n// Using string type for the\r\nvar FILTER_COMPLETED_COURSES = 'filter_completed',\r\n  FILTER_UNCOMPLETED_COURSES = 'filter_uncompleted';\r\n\r\nfunction MyCompletedCourses(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.completedCoursesIntroText = ko.observable(\r\n    params.completedCoursesIntroText\r\n  );\r\n  this.completedCourses = ko.observableArray([]);\r\n  this.selectedCourseFilter = ko.observable(FILTER_COMPLETED_COURSES);\r\n  this.selectedOrganizer = ko.observable();\r\n  this.organizers = ko.observableArray([]);\r\n  this.isLoading = ko.observable(false);\r\n  this.toggleAddExternalCourseButtonText = ko.observable(\r\n    window.language.courses.addExternalCourse\r\n  );\r\n  this.showAddExternalCourse = ko.observable(false);\r\n  this.showFetchAllCourses = ko.observable(false);\r\n  this.hideSelect = ko.observable(false);\r\n  this.selects = null;\r\n  this.watchNewNetCourseUrl =\r\n    this.API.watchNewNetCourseUrl + '?courseSequenceId=';\r\n  this.activeModal = ko.observable(false);\r\n  this.modalTitle = ko.observable('');\r\n  this.modalText = ko.observable('');\r\n  this.selectedSequenceId = ko.observable();\r\n  this.selectedCourseFilter.subscribe(function() {\r\n    this.selectedOrganizer(SHOW_ALL_KEY);\r\n    this.getCourses(API_TAKE, API_SKIP);\r\n    this.selects[0].selectize.setValue(SHOW_ALL_KEY);\r\n  }, this);\r\n\r\n  this.isLoading.subscribe(function(isLoading) {\r\n    if (isLoading) {\r\n      this.showFetchAllCourses(false);\r\n    }\r\n  }, this);\r\n\r\n  this.showAddExternalCourse.subscribe(function(newVal) {\r\n    this.toggleAddExternalCourse(newVal);\r\n  }, this);\r\n}\r\n\r\nMyCompletedCourses.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n  this.$extendedCourse = this.$element.find('.add-extended-course');\r\n  this.getCompletedCourses(API_TAKE, API_SKIP);\r\n  // Listen to modal/popup requests.\r\n  ko.postbox.subscribe(\r\n    'openPopup',\r\n    function(value) {\r\n      this.activeModal(!this.activeModal());\r\n      this.modalTitle(value.modalTitle);\r\n      this.modalText(value.modalText);\r\n      this.selectedSequenceId(value.selectedSequenceId);\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nMyCompletedCourses.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nMyCompletedCourses.prototype.getCourses = function(take, skip) {\r\n  if (this.selectedCourseFilter() === FILTER_COMPLETED_COURSES) {\r\n    this.getCompletedCourses(take, skip);\r\n  } else {\r\n    this.getUncompletedCourses(take, skip);\r\n  }\r\n};\r\n\r\nMyCompletedCourses.prototype.getAllCourses = function() {\r\n  this.getCourses(API_TAKE_ALL, 0);\r\n};\r\n\r\nMyCompletedCourses.prototype.toggleAddExternalCourse = function(toggleState) {\r\n  if (toggleState) {\r\n    this.$extendedCourse.slideDown(250, 'easeOutQuad', function() {});\r\n    this.toggleAddExternalCourseButtonText(window.language.courses.cancel);\r\n  } else {\r\n    this.$extendedCourse.slideUp(250, 'easeOutQuad', function() {});\r\n    this.toggleAddExternalCourseButtonText(\r\n      window.language.courses.addExternalCourse\r\n    );\r\n  }\r\n};\r\n\r\nMyCompletedCourses.prototype.getCompletedCourses = function(take, skip) {\r\n  var self = this,\r\n    url =\r\n      this.API.completedCoursesUrl +\r\n      '?skip=' +\r\n      encodeURIComponent(skip) +\r\n      '&take=' +\r\n      encodeURIComponent(take);\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      self.handleCoursesSuccess(response, take, FILTER_COMPLETED_COURSES);\r\n    },\r\n    function() {\r\n      self.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nMyCompletedCourses.prototype.getUncompletedCourses = function(take, skip) {\r\n  var self = this,\r\n    url =\r\n      this.API.expiredButUncompletedCoursesUrl +\r\n      '?skip=' +\r\n      encodeURIComponent(skip) +\r\n      '&take=' +\r\n      encodeURIComponent(take);\r\n\r\n  this.isLoading(true);\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      self.handleCoursesSuccess(response, take, FILTER_UNCOMPLETED_COURSES);\r\n    },\r\n    function() {\r\n      self.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nMyCompletedCourses.prototype.addedExternalCourse = function() {\r\n  this.getCourses(API_TAKE, API_SKIP);\r\n};\r\n\r\nMyCompletedCourses.prototype.modifySpecificCourse = function(\r\n  indexInCourses,\r\n  indexInOrganizers,\r\n  selectedOrganizer,\r\n  updatedCourse\r\n) {\r\n  var tmpCoursesList = this.completedCourses();\r\n  var courseToBeModified =\r\n    tmpCoursesList[indexInCourses].organizersPerYear[selectedOrganizer][\r\n      indexInOrganizers\r\n    ];\r\n  courseToBeModified.Course.CourseTitle = updatedCourse.title;\r\n  courseToBeModified.Course.Organizer = updatedCourse.organizer;\r\n  tmpCoursesList[indexInCourses].organizersPerYear[selectedOrganizer][\r\n    indexInOrganizers\r\n  ] = courseToBeModified;\r\n  this.updateFilterOrganizers(tmpCoursesList, true);\r\n};\r\n\r\nMyCompletedCourses.prototype.updateFilterOrganizers = function(items) {\r\n  var tmpResponse = [];\r\n  var tmpOrganizersMap = {},\r\n    tmpOrganizers = [];\r\n  var self = this;\r\n  items.forEach(function(item) {\r\n    var organizersPerYear = {};\r\n\r\n    // We want to pre sort the courses based on organizer for quick filtering.\r\n    item.Courses.forEach(function(course) {\r\n      if (organizersPerYear[course.Course.Organizer] === undefined) {\r\n        organizersPerYear[course.Course.Organizer] = [];\r\n      }\r\n      organizersPerYear[course.Course.Organizer].push(course);\r\n      tmpOrganizersMap[course.Course.Organizer] = course.Course.Organizer;\r\n    });\r\n    item.organizersPerYear = organizersPerYear;\r\n    item.organizersPerYear[SHOW_ALL_KEY] = item.Courses;\r\n    tmpResponse.push(item);\r\n  });\r\n\r\n  // Remap organizers to be used in selectize options.\r\n  tmpOrganizers.push({\r\n    text: SHOW_ALL_KEY,\r\n    value: SHOW_ALL_KEY\r\n  });\r\n  forOwn(tmpOrganizersMap, function(value, key) {\r\n    tmpOrganizers.push({\r\n      text: key,\r\n      value: key\r\n    });\r\n  });\r\n\r\n  // Remap organizers to be used in selectize options.\r\n  tmpOrganizers.push({\r\n    text: SHOW_ALL_KEY,\r\n    value: SHOW_ALL_KEY\r\n  });\r\n  forOwn(tmpOrganizersMap, function(value, key) {\r\n    tmpOrganizers.push({\r\n      text: key,\r\n      value: key\r\n    });\r\n  });\r\n\r\n  var organizersToRemove = [],\r\n    organizersToAdd = [];\r\n  var previousOrganizers = this.organizers();\r\n  previousOrganizers.forEach(function(previousOrganizer) {\r\n    if (\r\n      find(tmpOrganizers, function(po) {\r\n        return po.value === previousOrganizer.value;\r\n      }) === undefined\r\n    ) {\r\n      organizersToRemove.push(previousOrganizer);\r\n    }\r\n  });\r\n\r\n  tmpOrganizers.forEach(function(tmpOrganizer) {\r\n    if (\r\n      find(previousOrganizers, function(po) {\r\n        return po.value === tmpOrganizer.value;\r\n      }) === undefined\r\n    ) {\r\n      organizersToAdd.push(tmpOrganizer);\r\n    }\r\n  });\r\n\r\n  this.organizers(tmpOrganizers);\r\n\r\n  // Now that we have data we can stylize the select node to the selectize plugin.\r\n  if (this.selects === null) {\r\n    this.selects = this.$element\r\n      .find('.form-select-wrapper-organizers')\r\n      .selectize({\r\n        valueField: 'value',\r\n        labelField: 'text',\r\n        options: tmpOrganizers\r\n      });\r\n    this.selects[0].selectize.setValue(SHOW_ALL_KEY);\r\n  } else {\r\n    this.selects[0].selectize.load(function() {\r\n      organizersToRemove.forEach(function(organizerToRemove) {\r\n        self.selects[0].selectize.removeOption(organizerToRemove.value);\r\n      });\r\n      organizersToAdd.forEach(function(organizerToAdd) {\r\n        self.selects[0].selectize.addOption(organizerToAdd);\r\n      });\r\n    });\r\n  }\r\n\r\n  return tmpResponse;\r\n};\r\n\r\nMyCompletedCourses.prototype.handleCoursesSuccess = function(\r\n  response,\r\n  take,\r\n  listType\r\n) {\r\n  if (listType === this.selectedCourseFilter()) {\r\n    var tmpResponse = this.updateFilterOrganizers(response.Items);\r\n\r\n    if (take === API_TAKE_ALL || take >= response.TotalItems) {\r\n      this.showFetchAllCourses(false);\r\n    } else {\r\n      this.showFetchAllCourses(true);\r\n    }\r\n\r\n    this.completedCourses(tmpResponse);\r\n    this.isLoading(false);\r\n  }\r\n};\r\n\r\nmodule.exports = MyCompletedCourses;\r\n","var baseForOwn = require('./_baseForOwn'),\n    castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","module.exports = \"<div class=\\\"modal\\\" data-bind=\\\"css: {'is-active': activeModal}\\\">\\r\\n    <div class=\\\"close\\\" data-bind=\\\"click: closeModal\\\"><span class=\\\"icon-22 icon-close\\\"></span></div>\\r\\n    <h2 data-bind=\\\"text: modalTitle\\\"></h2>\\r\\n    <div data-bind=\\\"html: modalText\\\"></div>\\r\\n    <div class=\\\"actions-container\\\">\\r\\n      <a class=\\\"btn btn-secondary\\\" data-bind=\\\"attr: { href: watchNewNetCourseUrl  + selectedSequenceId() }\\\">\\r\\n        <span class=\\\"btn-text\\\">Ja, vis i NY videoavspiller</span>\\r\\n      </a>\\r\\n      <a class=\\\"btn btn-primary\\\" data-bind=\\\"attr: { href: API.watchNetCourseUrl + selectedSequenceId() }\\\">\\r\\n        <span class=\\\"btn-text\\\">Nei</span>\\r\\n      </a>\\r\\n    </div>\\r\\n  </div>\\r\\n<div class=\\\"my-courses-container\\\" data-bind=\\\"useElement: true\\\">\\r\\n    <div class=\\\"filter\\\">\\r\\n        <div class=\\\"row\\\">\\r\\n            <div class=\\\"columns large-8\\\">\\r\\n                <div class=\\\"form-row\\\">\\r\\n                    <div data-bind=\\\"html: completedCoursesIntroText\\\"></div>\\r\\n                </div>\\r\\n                <div>\\r\\n                    <div class=\\\"columns large-6\\\">\\r\\n                        <div class=\\\"filter-course-radio\\\">\\r\\n                            <div>Vis:</div>\\r\\n                            <input class=\\\"form-input form-input-radio\\\" type=\\\"radio\\\" name=\\\"role\\\" value=\\\"filter_completed\\\" id=\\\"completedCourses\\\" data-bind=\\\"checked: selectedCourseFilter\\\">\\r\\n                            <label class=\\\"form-label form-label-radio\\\" for=\\\"completedCourses\\\" class=\\\"right inline\\\">Godkjente kurs</label>\\r\\n                            <input class=\\\"form-input form-input-radio\\\" type=\\\"radio\\\" name=\\\"role\\\" value=\\\"filter_uncompleted\\\" id=\\\"notCompletedCourses\\\" data-bind=\\\"checked: selectedCourseFilter\\\">\\r\\n                            <label class=\\\"form-label form-label-radio\\\" for=\\\"notCompletedCourses\\\" class=\\\"right inline\\\">Ikke godkjente kurs</label>\\r\\n                        </div>\\r\\n                    </div>\\r\\n                    <div class=\\\"columns large-4 end\\\">\\r\\n                        <div class=\\\"filter-course-organizer\\\">\\r\\n                            <label class=\\\"form-label\\\">Arrangør\\r\\n                                <!-- ko ifnot: hideSelect -->\\r\\n                                    <select class=\\\"form-select-wrapper form-select-wrapper-organizers\\\" data-bind=\\\"options: organizers, value: selectedOrganizer\\\">\\r\\n                                    </select>\\r\\n                                <!-- /ko -->\\r\\n                            </label>\\r\\n                        </div>\\r\\n                    </div>\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"columns large-4 course-actions\\\">\\r\\n                <!-- ko if: isCalculatorAvailableForUser -->\\r\\n                    <a class=\\\"btn btn-secondary\\\" data-bind=\\\"attr: { href: links.calculatorReference }\\\">Gå til oppdateringskalkulator</a>\\r\\n                    <button class=\\\"btn btn-secondary add-external-course-button\\\" data-bind=\\\"toggleVar: showAddExternalCourse, html: toggleAddExternalCourseButtonText\\\">Legg til eksternt kurs</button>\\r\\n                <!-- /ko -->\\r\\n            </div>\\r\\n        </div>\\r\\n        <div>\\r\\n            <div class=\\\"calculator-extended calculator-extended-course add-extended-course\\\" data-bind=\\\"component: {\\r\\n                name: 'calculator-extended-course',\\r\\n                params: {\\r\\n                    api:  {\\r\\n                        'addOrUpdateExternalCourse': API.addOrUpdateExternalCourse,\\r\\n                        'authorizationCredits': API.authorizationCredits,\\r\\n                        \\r\\n                    },\\r\\n                    addOrUpdateCallback: addedExternalCourse,\\r\\n                    parent: $data\\r\\n                }\\r\\n            }\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n    \\r\\n    <div class=\\\"historical-courses-container\\\">\\r\\n    <!-- ko if: isLoading() -->\\r\\n        <div class=\\\"loader-container\\\">\\r\\n            <div class=\\\"loader is-loading\\\"></div>\\r\\n        </div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko ifnot: isLoading() -->\\r\\n        <!-- ko if: completedCourses().length > 0 -->\\r\\n            <!-- ko foreach: completedCourses() -->\\r\\n                <!-- ko if: typeof organizersPerYear[$component.selectedOrganizer()] !== 'undefined' -->\\r\\n                    <div class=\\\"courses-per-year\\\">\\r\\n                        <div class=\\\"year-header\\\" data-bind=\\\"text: Year\\\"></div>\\r\\n                        <ul>\\r\\n                            <!-- ko foreach: organizersPerYear[$component.selectedOrganizer()] -->\\r\\n                                <!-- ko component: { \\r\\n                                        name: \\\"courses-list-item\\\",\\r\\n                                        params: {\\r\\n                                            parent: $component,\\r\\n                                            data: $data,\\r\\n                                            links: $component.links,\\r\\n                                            texts: $component.texts,\\r\\n                                            api: $component.API,\\r\\n                                            isHistorical: true,\\r\\n                                            indexInCourses: $parentContext.$index(),\\r\\n                                            indexInOrganizers: $index(),\\r\\n                                            selectedOrganizer: $component.selectedOrganizer(),\\r\\n                                            sequenceId: $data.Course.SequenceId\\r\\n                                        } } --> \\r\\n                                <!-- /ko -->\\r\\n                            <!-- /ko -->\\r\\n                        </ul>\\r\\n                    </div>\\r\\n                <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n        <!-- /ko -->\\r\\n\\r\\n        <!-- ko if: completedCourses().length === 0 -->\\r\\n            <!-- ko if: selectedCourseFilter() === 'filter_completed' -->\\r\\n                <div class=\\\"message-plaque no-courses-available\\\">\\r\\n                    <div data-bind=\\\"html: texts.noHistoryCoursesText\\\"></div>\\r\\n                    <a class=\\\"btn btn-primary\\\" data-bind=\\\"attr: { href: links.courseCatalogueReference}\\\">Kurskatalogen</a>\\r\\n                </div>\\r\\n            <!-- /ko -->\\r\\n            <!-- ko if: selectedCourseFilter() === 'filter_uncompleted' -->\\r\\n                <div class=\\\"message-plaque no-courses-available\\\">\\r\\n                    <span data-bind=\\\"html: window.language.courses.allCoursesCompleted\\\"></span>\\r\\n                </div>\\r\\n            <!-- /ko -->\\r\\n        <!-- /ko -->\\r\\n\\r\\n    <!-- /ko -->\\r\\n    </div>\\r\\n    <!-- ko if: showFetchAllCourses -->\\r\\n        <div class=\\\"text-center\\\">\\r\\n            <button class=\\\"btn btn-secondary\\\" data-bind=\\\"click: getAllCourses\\\">\\r\\n                <span class=\\\"btn-text\\\">Vis alle kurs</span>\\r\\n            </button>\\r\\n        </div>\\r\\n    <!-- /ko -->\\r\\n</div>\"","var ko = require('knockout'),\r\n  dateUtil = require('_utils/date'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  HOURS_TYPE = require('_js/constants/hours'),\r\n  cloneDeep = require('lodash/cloneDeep'),\r\n  decodeHtml = require('_utils/text');\r\n\r\n// Amount specified in days.\r\nvar SOON_EXPIRATION_THRESHOLD = 14;\r\n\r\nfunction GetCourseType(courseType) {\r\n  switch (courseType) {\r\n    case 3:\r\n    case 7:\r\n      return 'icon-screen';\r\n    case 6:\r\n      return 'icon-program';\r\n    default:\r\n      return 'icon-calendar';\r\n  }\r\n}\r\n\r\nfunction MapDiplomaUrlAndLabels(\r\n  registrationKey,\r\n  courseDiplomaBaseUrl,\r\n  programRegistrationKeyYearPairs\r\n) {\r\n  if (\r\n    programRegistrationKeyYearPairs &&\r\n    programRegistrationKeyYearPairs.length > 1\r\n  ) {\r\n    return programRegistrationKeyYearPairs.map(function(pair) {\r\n      return {\r\n        url: courseDiplomaBaseUrl + '/' + pair.Item1,\r\n        label: window.language.courses.diploma + ' ' + pair.Item2\r\n      };\r\n    });\r\n  }\r\n\r\n  return [\r\n    {\r\n      url: courseDiplomaBaseUrl + '/' + registrationKey,\r\n      label: window.language.courses.diploma\r\n    }\r\n  ];\r\n}\r\n\r\nfunction CoursesListItem(params) {\r\n  this.isHistorical = ko.observable(params.isHistorical);\r\n  this.isExpanded = ko.observable(false);\r\n  this.API = params.api;\r\n  this.texts = params.texts;\r\n  this.helpPageReferenceLink = params.links.helpPageReference;\r\n  this.helpPageReferenceText = params.texts.helpPageReferenceText;\r\n  this.questionAboutCourseCompletionText =\r\n    params.texts.questionAboutCourseCompletionText;\r\n  this.termsAndConditionsLink = params.links.termsAndConditionsPageReference;\r\n  this.termsAndConditionsText =\r\n    params.texts.termsAndConditionsPageReferenceText;\r\n  this.expirationViewDate = dateUtil.convertDateToNorwegianStyleString(\r\n    params.data.ExpirationViewDate\r\n  );\r\n  this.documentation = params.data.Documentation;\r\n  this.course = params.data.Course;\r\n  this.courseUrl = params.data.Url;\r\n  this.isNetCourse = params.data.Course.IsNetCourse;\r\n  this.shouldPromptUserForNewCourse = this.API.newVideoCourseIds\r\n    .split(',')\r\n    .includes(params.data.Course.Id);\r\n  this.shouldVideoCoursePopUpBeShown =\r\n    this.API.showVideoCoursePopUp.toString().toLowerCase() === 'true';\r\n  this.isProgram = params.data.Course.EventType === 6;\r\n  this.isProgramOnline = params.data.Course.EventType === 7;\r\n  this.programDateString = params.data.ProgramDateString;\r\n  this.eventType = GetCourseType(params.data.Course.EventType);\r\n  this.aboutText = this.isProgram\r\n    ? window.language.courses.aboutProgram\r\n    : window.language.courses.aboutCourse;\r\n  this.descriptionLinkText = this.isProgram\r\n    ? window.language.courses.programDescription\r\n    : window.language.courses.courseDescription;\r\n  this.isComplete = params.data.IsComplete;\r\n  this.packageName = params.data.PackageName;\r\n  // Get timedifference in days\r\n  var timeDiff =\r\n    (new Date(params.data.ExpirationViewDate).getTime() -\r\n      new Date().getTime()) /\r\n    (1000 * 3600 * 24);\r\n  this.soonToExpire =\r\n    this.isNetCourse &&\r\n    !this.isComplete &&\r\n    timeDiff < SOON_EXPIRATION_THRESHOLD;\r\n  var today = new Date();\r\n  today.setHours(0, 0, 0);\r\n  var expirationDateMidnight = new Date(params.data.ExpirationDate);\r\n  expirationDateMidnight.setHours(0, 0, 0);\r\n  this.expired = expirationDateMidnight.getTime() < today.getTime();\r\n  this.isClosedForCancellation = params.data.IsClosedForCancellation;\r\n  this.isOnWaitingList = params.data.IsOnWaitingList;\r\n  this.completedDate = dateUtil.convertDateToNorwegianStyleString(\r\n    params.data.CompletedDate\r\n  );\r\n  this.isModalActive = params.isModalActive;\r\n  this.index = params.index;\r\n  this.setActiveCourse = params.setActiveCourse;\r\n  this.hoursType = this.isHistorical() ? HOURS_TYPE.DONE : HOURS_TYPE.PLANNED;\r\n\r\n  this.indexInCourses = params.indexInCourses;\r\n  this.indexInOrganizers = params.indexInOrganizers;\r\n  this.selectedOrganizer = params.selectedOrganizer;\r\n  this.parent = params.parent;\r\n  this.courseDate = params.data.CourseFromDateString;\r\n\r\n  this.registrationKey = params.data.RegistrationKey;\r\n  this.diplomas = MapDiplomaUrlAndLabels(\r\n    this.registrationKey,\r\n    this.API.courseDiplomaUrl,\r\n    params.data.ProgramRegistrationKeyYearPairs\r\n  );\r\n  this.title = ko.observable(this.course.CourseTitle);\r\n  this.organizer = ko.observable(this.course.Organizer);\r\n  this.fromDate = ko.observable(this.course.FromDate);\r\n  this.website = ko.computed(\r\n    function() {\r\n      if (this.course.WebSite === null || this.course.WebSite.length === 0) {\r\n        return '';\r\n      } else if (this.course.WebSite.indexOf('http') !== -1) {\r\n        return this.course.WebSite;\r\n      } else {\r\n        return 'http://' + this.course.WebSite;\r\n      }\r\n    }.bind(this)\r\n  );\r\n\r\n  this.categories = ko.observableArray(\r\n    ko.utils.arrayMap(this.course.ActiveAuthorizationCredits, function(\r\n      category\r\n    ) {\r\n      var tmpCategory = cloneDeep(category);\r\n      tmpCategory.Hours = ko.observable(tmpCategory.Hours);\r\n      return tmpCategory;\r\n    })\r\n  );\r\n  // Need to create an object in the format the calculator-external-course component expects.\r\n  this.preAnswers = {\r\n    title: this.course.CourseTitle,\r\n    organizer: this.course.Organizer,\r\n    fromDate: this.courseDate,\r\n    sequencePk: this.course.SequencePK,\r\n    categories: this.course.AuthorizationCredits,\r\n    isSelfStudy: this.course.IsSelfStudy\r\n  };\r\n  this.courseType = '';\r\n}\r\n\r\nCoursesListItem.prototype.init = function(element) {\r\n  this.$element = $(element);\r\n};\r\n\r\nCoursesListItem.prototype.deleteCourse = function() {\r\n  this.$element.slideUp(250, 'easeOutQuad');\r\n};\r\n\r\nCoursesListItem.prototype.cancelCourse = function() {\r\n  this.setActiveCourse(this.index);\r\n  this.isModalActive(true);\r\n};\r\n\r\nCoursesListItem.prototype.expandItemDetails = function() {\r\n  this.isExpanded(!this.isExpanded());\r\n};\r\n\r\nCoursesListItem.prototype.updateCourseValues = function(params) {\r\n  this.title(decodeHtml(params.title));\r\n  this.organizer(decodeHtml(params.organizer));\r\n  this.fromDate(params.fromDate);\r\n\r\n  this.categories(\r\n    ko.utils.arrayMap(params.categories, function(category) {\r\n      var tmpCategory = cloneDeep(category);\r\n      tmpCategory.Hours = ko.observable(tmpCategory.Hours);\r\n      return tmpCategory;\r\n    })\r\n  );\r\n  this.categories.valueHasMutated();\r\n\r\n  var updatedCourse = {\r\n    title: this.title(),\r\n    organizer: this.organizer(),\r\n    fromDate: this.fromDate(),\r\n    categories: this.categories()\r\n  };\r\n\r\n  if (this.parent.modifySpecificCourse) {\r\n    this.parent.modifySpecificCourse(\r\n      this.indexInCourses,\r\n      this.indexInOrganizers,\r\n      this.selectedOrganizer,\r\n      updatedCourse\r\n    );\r\n  }\r\n};\r\n\r\nCoursesListItem.prototype.startMultimediaCourse = function() {\r\n  var url =\r\n    this.API.getLaunchLinkMultimediaCourseUrl +\r\n    '?registrationId=' +\r\n    encodeURIComponent(this.registrationKey);\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(launchLink) {\r\n      window.location.href = launchLink;\r\n    },\r\n    function() {\r\n      /* eslint-disable no-console */\r\n      console.error(\r\n        'Something went wrong when fetching launch link for multimedia course'\r\n      );\r\n    }\r\n  );\r\n};\r\n\r\nCoursesListItem.prototype.startCourse = function() {\r\n  if (this.shouldPromptUserForNewCourse && this.shouldVideoCoursePopUpBeShown) {\r\n    ko.postbox.publish('openPopup', {\r\n      modalTitle: decodeHtml(this.texts.featureSwitchSplashScreenHeading),\r\n      modalText: decodeHtml(this.texts.featureSwitchSplashScreenText),\r\n      isActive: true,\r\n      selectedSequenceId: this.course.SequenceId\r\n    });\r\n\r\n    return;\r\n  }\r\n\r\n  if (this.shouldPromptUserForNewCourse) {\r\n    window.location.href =\r\n      this.API.watchNewNetCourseUrl +\r\n      '?courseSequenceId=' +\r\n      this.course.SequenceId;\r\n  } else {\r\n    window.location.href = this.API.watchNetCourseUrl + this.course.SequenceId;\r\n  }\r\n};\r\n\r\nmodule.exports = CoursesListItem;\r\n","module.exports = {\r\n  convertDateToNorwegianStyleString: function(newDate) {\r\n    if (typeof newDate === 'undefined' || newDate === null) {\r\n      return null;\r\n    }\r\n    var tmpDate = new Date(newDate);\r\n    return (\r\n      tmpDate.getDate() +\r\n      '.' +\r\n      (tmpDate.getMonth() + 1) +\r\n      '.' +\r\n      tmpDate.getFullYear()\r\n    );\r\n  },\r\n  getTimeStringFromDate: function(newDate) {\r\n    if (typeof newDate === 'undefined' || newDate === null) {\r\n      return null;\r\n    }\r\n    var tmpDate = new Date(newDate);\r\n    var hours = tmpDate.getHours().toString();\r\n    var minutes = tmpDate.getMinutes().toString();\r\n    if (hours.length === 1) {\r\n      hours = '0' + hours;\r\n    }\r\n    if (minutes.length === 1) {\r\n      minutes = '0' + minutes;\r\n    }\r\n    return hours + ':' + minutes;\r\n  }\r\n};\r\n","module.exports = \"\\r\\n<li class=\\\"courses-list-item\\\"\\r\\n  data-bind=\\\"useElement: true, css: { expanded: isExpanded, 'course-external': course.IsExternal }\\\">\\r\\n  <div class=\\\"courses-list-header\\\">\\r\\n    <div class=\\\"course-type\\\" data-bind=\\\"css: { 'is-soon-expired': soonToExpire}\\\">\\r\\n      <!-- ko if: course.IsNetCourse -->\\r\\n      <span class=\\\"icon-left\\\" data-bind=\\\"css: eventType\\\"></span>\\r\\n      <p data-bind=\\\"text: course.CourseType\\\"></p>\\r\\n      <!-- ko if: isComplete -->\\r\\n      <p class=\\\"course-date\\\">\\r\\n        <span data-bind=\\\"text: window.language.courses.accepted + ' ' + completedDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: isComplete -->\\r\\n      <!-- ko ifnot: isProgramOnline -->\\r\\n      <p class=\\\"course-date\\\">\\r\\n        <span data-bind=\\\"text: window.language.courses.availableUntil + ' '\\\"></span>\\r\\n        <span data-bind=\\\"text: expirationViewDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: course.IsNetCourse -->\\r\\n      <span class=\\\"icon-left\\\" data-bind=\\\"css: eventType\\\"></span>\\r\\n      <!-- ko if: isProgram -->\\r\\n      <p data-bind=\\\"text: window.language.courses.program\\\"></p>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: isHistorical -->\\r\\n      <!-- ko if: isComplete -->\\r\\n      <!-- ko if: !isProgram -->\\r\\n      <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": course.DateList}} -->\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <p>\\r\\n        <span data-bind=\\\"text: window.language.courses.accepted\\\"></span>\\r\\n        <span data-bind=\\\"text: completedDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: isComplete -->\\r\\n      <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": course.DateList}} -->\\r\\n      <!-- /ko -->\\r\\n      <p>\\r\\n        <span class=\\\"error-text\\\" data-bind=\\\"text: window.language.courses.notAccepted\\\"></span>\\r\\n        <span data-bind=\\\"text: expirationViewDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n\\r\\n      <!-- ko ifnot: isHistorical -->\\r\\n      <!-- ko if: isProgram -->\\r\\n      <p data-bind=\\\"text: programDateString\\\"></p>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: isProgram -->\\r\\n      <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": course.DateList}} -->\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: isOnWaitingList -->\\r\\n      <p>\\r\\n        <span class=\\\"is-on-waitinglist\\\" data-bind=\\\"text: window.language.courses.waitingList\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n    </div>\\r\\n    <div class=\\\"course-description\\\">\\r\\n      <p data-bind=\\\"text: title\\\"></p>\\r\\n    </div>\\r\\n    <!-- ko if: isHistorical -->\\r\\n    <div class=\\\"course-author\\\">\\r\\n      <p data-bind=\\\"text: organizer\\\"></p>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <button class=\\\"btn btn-bare expand-button\\\" aria-controls=\\\"list-item-details\\\" data-bind=\\\"click: expandItemDetails\\\">\\r\\n      <span class=\\\"icon-left icon-arrow\\\"></span>\\r\\n    </button>\\r\\n  </div>\\r\\n  <div class=\\\"courses-list-details\\\" id=\\\"list-item-details\\\" aria-expanded=\\\"true\\\">\\r\\n    <!-- ko if: course.IsExternal -->\\r\\n    <div class=\\\"calculator-extended calculator-extended-course\\\" data-bind=\\\"component: {\\r\\n            name: 'calculator-extended-course',\\r\\n            params: {\\r\\n                api:  {\\r\\n                    'addOrUpdateExternalCourse': API.addOrUpdateExternalCourse,\\r\\n                    'authorizationCredits': API.authorizationCredits\\r\\n                },\\r\\n                parent: $data,\\r\\n                preAnswers: preAnswers,\\r\\n                removeCourseCallback: deleteCourse.bind($data)\\r\\n            }\\r\\n        }\\\"></div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko ifnot: course.IsExternal -->\\r\\n    <div class=\\\"course-info-wrapper\\\">\\r\\n      <!-- ko if: !isNetCourse && !isProgram -->\\r\\n      <div class=\\\"course-info-container\\\">\\r\\n        <h3 data-bind=\\\"html: window.language.courses.whereAndWhen\\\"></h3>\\r\\n        <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": course.DateList, \\\"showTime\\\": true}} -->\\r\\n        <!-- /ko -->\\r\\n\\r\\n        <!-- ko ifnot: isHistorical -->\\r\\n        <a href=\\\"#\\\" data-bind=\\\"text: window.language.courses.addToCalendar, attr: {\\r\\n            href: API.courseCalendarFileUrl + '/' + course.SequenceId\\r\\n            }\\\"></a>\\r\\n        <!-- /ko -->\\r\\n\\r\\n        <div>\\r\\n          <!-- ko ifnot: course.Venue + course.Address + course.PostCode + course.City === \\\"\\\" -->\\r\\n          <a target=\\\"_blank\\\" data-bind=\\\"attr: {\\r\\n                            href: API.googleMapsUrl + course.Venue + ', ' + course.Address + ', ' + course.PostCode + ' ' + course.City\\r\\n                        }\\\">\\r\\n            <span data-bind=\\\"html: course.Venue\\\"></span><br />\\r\\n            <span data-bind=\\\"html: course.Address + ', ' + course.PostCode + ', ' + course.City\\\"></span>\\r\\n          </a>\\r\\n          <!-- /ko -->\\r\\n        </div>\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: documentation.length > 0 -->\\r\\n      <div class=\\\"course-info-container\\\">\\r\\n        <h3 data-bind=\\\"html: window.language.courses.documentation\\\"></h3>\\r\\n        <ul>\\r\\n          <!-- ko foreach: documentation -->\\r\\n          <li class=\\\"download-item\\\">\\r\\n            <a href=\\\"#\\\" target=\\\"_blank\\\" data-bind=\\\"text: Name,\\r\\n                            attr: { href: Path }\\\">\\r\\n            </a>\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n        </ul>\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <div class=\\\"course-info-container\\\">\\r\\n        <!-- ko if: categories().length > 0 -->\\r\\n        <h3 data-bind=\\\"html: window.language.courses.authorizationHours\\\"></h3>\\r\\n        <ul>\\r\\n          <h4><span data-bind=\\\"html: window.language.authorizations.accountant\\\"></span>:</h4>\\r\\n          <!-- ko foreach: categories -->\\r\\n          <!-- ko if: AuthorizationType === 1 -->\\r\\n          <li><span data-bind=\\\"text: Name\\\"></span> <span data-bind=\\\"text: Hours\\\"></span>\\r\\n            <!-- ko component: {name: 'calculator-timeunit', params: {\\r\\n                                    type: $parent.hoursType\\r\\n                                }}-->\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n          <!-- /ko -->\\r\\n          <h4><span data-bind=\\\"html: window.language.authorizations.auditor\\\"></span>:</h4>\\r\\n          <!-- ko foreach: categories -->\\r\\n          <!-- ko if: AuthorizationType === 2 -->\\r\\n          <li><span data-bind=\\\"text: Name\\\"></span> <span data-bind=\\\"text: Hours\\\"></span>\\r\\n            <!-- ko component: {name: 'calculator-timeunit', params: {\\r\\n                                    type: $parent.hoursType\\r\\n                                }}-->\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n          <!-- /ko -->\\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n      <div class=\\\"course-info-container\\\">\\r\\n        <h3 data-bind=\\\"html: aboutText\\\"></h3>\\r\\n        <ul>\\r\\n          <!-- ko ifnot: courseUrl === \\\"\\\" -->\\r\\n          <li>\\r\\n            <a href=\\\"#\\\" data-bind=\\\"html: descriptionLinkText, attr: {href: courseUrl}\\\"></a>\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n          <li>\\r\\n            <a href=\\\"#\\\" data-bind=\\\"html: helpPageReferenceText, attr: {href: helpPageReferenceLink}\\\"></a>\\r\\n          </li>\\r\\n          <li>\\r\\n            <a href=\\\"#\\\" data-bind=\\\"html: termsAndConditionsText, attr: {href: termsAndConditionsLink}\\\"></a>\\r\\n          </li>\\r\\n        </ul>\\r\\n        <!-- ko if: packageName -->\\r\\n        <div class=\\\"course-package-text\\\">\\r\\n          <p data-bind=\\\"text: texts.packageLabel\\\"></p>\\r\\n          <p data-bind=\\\"text: packageName\\\"></p>\\r\\n        </div>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n    <!-- ko if: course.IsMultimediaCourse -->\\r\\n    <div class=\\\"multimedia-course-info\\\">\\r\\n      <p data-bind=\\\"html: texts.startMultimediaCourseInfoText\\\"></p>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <div class=\\\"course-action-bar\\\">\\r\\n      <!-- ko if: isHistorical -->\\r\\n      <!-- ko if: isNetCourse -->\\r\\n      <!-- ko if: expired && !isProgramOnline -->\\r\\n      <p class=\\\"btn btn-primary disabled\\\">\\r\\n        <span data-bind=\\\"text: window.language.courses.inactiveFrom\\\"></span>\\r\\n        <span data-bind=\\\"text: expirationViewDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: expired -->\\r\\n      <!-- ko ifnot: isProgramOnline -->\\r\\n      <p class=\\\"btn btn-secondary\\\">\\r\\n        <span data-bind=\\\"text: window.language.courses.availableUntil\\\"></span>\\r\\n        <span data-bind=\\\"text: expirationViewDate\\\"></span>\\r\\n      </p>\\r\\n      <!-- /ko -->\\r\\n      <div class=\\\"start-button-container\\\">\\r\\n        <!-- ko if: course.IsMultimediaCourse -->\\r\\n        <button class=\\\"btn btn-primary\\\"\\r\\n          data-bind=\\\"text: window.language.courses.startCourse, click: startMultimediaCourse\\\"></button>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: !course.IsMultimediaCourse && isNetCourse-->\\r\\n        <button class=\\\"btn btn-primary\\\"\\r\\n          data-bind=\\\"text: window.language.courses.startCourse, click: startCourse\\\"></button>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: isComplete -->\\r\\n      <!-- ko foreach: diplomas -->\\r\\n      <div class=\\\"diploma-container\\\">\\r\\n        <a target=\\\"_blank\\\" class=\\\"btn btn-primary small\\\" data-bind=\\\"attr: { href: url }\\\">\\r\\n          <span class=\\\"icon-download\\\"></span>\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"html: label\\\"></span>\\r\\n        </a>\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: isComplete -->\\r\\n      <div class=\\\"btn btn-primary disabled\\\" data-bind=\\\"html: questionAboutCourseCompletionText\\\">\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- ko ifnot: isHistorical -->\\r\\n      <!-- ko if: course.IsMultimediaCourse -->\\r\\n      <button class=\\\"btn btn-primary\\\"\\r\\n        data-bind=\\\"text: window.language.courses.startCourse, click: startMultimediaCourse\\\"></button>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: !course.IsMultimediaCourse && isNetCourse -->\\r\\n      <button class=\\\"btn btn-primary\\\"\\r\\n        data-bind=\\\"text: window.language.courses.startCourse, click: startCourse\\\"></button>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: !isNetCourse && !isComplete && !isClosedForCancellation && !isProgram -->\\r\\n      <button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" data-bind=\\\"click: cancelCourse\\\">\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"text: window.language.courses.cancelCourse\\\"></span>\\r\\n      </button>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: !isNetCourse && isClosedForCancellation && !isProgram -->\\r\\n      <!-- ko if: isOnWaitingList -->\\r\\n      <p class=\\\"course-details-message\\\" data-bind=\\\"html: window.language.courses.onWaitingList\\\"></p>\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n      <!-- /ko -->\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n  </div>\\r\\n</li>\"","function CourseRegistrationOverview(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n}\r\n\r\nCourseRegistrationOverview.prototype.switchTab = function(tabType) {\r\n  this.tabType(tabType);\r\n};\r\n\r\nmodule.exports = CourseRegistrationOverview;\r\n","module.exports = \" <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n        <div data-bind=\\\"component: { name: 'course-overview-list', params: {\\r\\n            api: API,\\r\\n            links: links,\\r\\n            texts: texts\\r\\n        }}\\\"></div>  \\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n<!-- <div data-bind=\\\"component: { name: 'pagination', params: {} }\\\"></div>  -->\"","var ko = require('knockout'),\r\n  $ = require('jquery'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  RNStorage = require('_utils/storage'),\r\n  FormDropdown = require('_components/atoms/form/form-dropdown/form-dropdown');\r\n\r\nvar STORAGE_KEY = 'courseOverviewList';\r\n\r\nfunction CourseOverviewList(params) {\r\n  var self = this;\r\n  self.params = params;\r\n  self.API = params.api;\r\n  self.navigation = params.navigation;\r\n}\r\n\r\nCourseOverviewList.prototype.getSequencesLink = function(sequence) {\r\n  var self = this;\r\n  return self.getUrlSequencesBase() + '' + sequence.Url;\r\n};\r\n\r\nCourseOverviewList.prototype.init = function(element) {\r\n  var self = this;\r\n  self.$element = $(element);\r\n  self.errorMessage = ko.observable();\r\n  self.isLoading = ko.observable(false);\r\n\r\n  self.isLoading.subscribe(function(isLoading) {\r\n    $('.filter-option').prop('disabled', isLoading);\r\n  });\r\n\r\n  self.noSequencesFound = ko.observable(false);\r\n\r\n  self.sequences = ko.observableArray().extend({ deferred: true });\r\n\r\n  self.filterFromDate = ko\r\n    .observable(self.getShortIsoDate(new Date()))\r\n    .extend({ rateLimit: { method: 'notifyWhenChangesStop', timeout: 200 } });\r\n  self.filterFromDate.subscribe(function() {\r\n    self.checkDatesOrder();\r\n  });\r\n  self.filterToDate = ko\r\n    .observable(self.getShortIsoDate(new Date()))\r\n    .extend({ rateLimit: { method: 'notifyWhenChangesStop', timeout: 200 } });\r\n  self.filterToDate.subscribe(function() {\r\n    self.checkDatesOrder();\r\n  });\r\n\r\n  self.getSequences();\r\n\r\n  self.numberOfSequences = ko.computed(function() {\r\n    return self.sequences().length;\r\n  });\r\n  self.numberOfShowingSequences = ko.observable();\r\n\r\n  self.sequencesFilterOptions = ko.observableArray();\r\n  self.selectedFilterSequence = ko.observable();\r\n  self.courseAdminOptions = ko.observableArray();\r\n  self.selectedCourseAdmin = ko.observable();\r\n  self.filteredSequences = ko.computed(self.filterSequences.bind(this));\r\n  self.activeSort = self.listHeaders[0];\r\n\r\n  var formDropdown = new FormDropdown();\r\n  formDropdown.start(\r\n    '.form-dropdown-open-button',\r\n    '.quality-control-inspections'\r\n  );\r\n};\r\n\r\nCourseOverviewList.prototype.createSubscribersForSelectedFilters = function() {\r\n  this.selectedFilterSequence.subscribe(this.updateLocalStorage.bind(this));\r\n};\r\n\r\nCourseOverviewList.prototype.createSubscribersForSelectedCourseAdmin = function() {\r\n  this.selectedCourseAdmin.subscribe(this.updateLocalStorage.bind(this));\r\n};\r\n\r\nCourseOverviewList.prototype.updateLocalStorage = function() {\r\n  var filters = {\r\n    filterSequence: this.selectedFilterSequence(),\r\n    courseAdmin: this.selectedCourseAdmin()\r\n  };\r\n  RNStorage.storeItem(STORAGE_KEY, filters);\r\n};\r\n\r\nCourseOverviewList.prototype.applyStoredFilters = function() {\r\n  var filters = JSON.parse(RNStorage.getItem(STORAGE_KEY));\r\n  if (filters !== null && filters !== undefined) {\r\n    this.selectedFilterSequence(filters.filterSequence);\r\n    this.selectedCourseAdmin(filters.courseAdmin);\r\n  }\r\n};\r\n\r\nCourseOverviewList.prototype.listHeaders = [\r\n  {\r\n    title: 'Kurstittel',\r\n    sortKey: 'courseTitle',\r\n    addClass: 'large-4',\r\n    asc: true\r\n  },\r\n  { title: 'Kurs-ID', sortKey: '', addClass: 'large-1', asc: true },\r\n  { title: 'Sekvens-ID', sortKey: '', addClass: 'large-1', asc: true },\r\n  { title: 'Dato', sortKey: 'date', addClass: 'large-1', asc: true },\r\n  { title: 'Sted', sortKey: 'city', addClass: 'large-2', asc: true },\r\n  { title: 'Status', sortKey: '', addClass: 'large-3', asc: true }\r\n];\r\n\r\nCourseOverviewList.prototype.getShortIsoDate = function(newDate) {\r\n  var today = new Date(newDate);\r\n\r\n  var formatted =\r\n    today.getFullYear() +\r\n    '-' +\r\n    ((today.getMonth() + 1).toString().length === 1\r\n      ? '0' + (today.getMonth() + 1)\r\n      : today.getMonth() + 1) +\r\n    '-' +\r\n    (today.getDate().toString().length === 1\r\n      ? '0' + today.getDate()\r\n      : today.getDate());\r\n\r\n  return formatted;\r\n};\r\n\r\nCourseOverviewList.prototype.checkDatesOrder = function() {\r\n  if (this.filterFromDate() > this.filterToDate()) {\r\n    this.filterToDate(this.filterFromDate());\r\n  }\r\n};\r\n\r\nCourseOverviewList.prototype.getApiFriendlyIsoDate = function(newDate) {\r\n  var today = new Date(newDate);\r\n  return (\r\n    today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate()\r\n  );\r\n};\r\n\r\nCourseOverviewList.prototype.getSequences = function() {\r\n  var self = this;\r\n\r\n  if (self.isLoading()) {\r\n    return;\r\n  }\r\n  self.sequences([]);\r\n  self.isLoading(true);\r\n  self.noSequencesFound(false);\r\n  var baseUrl = self.getUrlSequencesBase() + self.API.getSequences;\r\n\r\n  baseUrl += '?fromDate=' + self.filterFromDate();\r\n  baseUrl += '&toDate=' + self.filterToDate();\r\n\r\n  APIHelper.get(\r\n    baseUrl,\r\n    function(data) {\r\n      if (data.Result.length === 0) {\r\n        self.noSequencesFound(true);\r\n      } else {\r\n        data.Result.forEach(function(sequence) {\r\n          sequence.Sequence.Status = sequence.Status;\r\n          if (sequence.Status === null) {\r\n            sequence.Sequence.Status = [];\r\n          }\r\n          sequence.Sequence.CourseAdmin = sequence.CourseAdmin || '';\r\n          sequence.Sequence.Url = sequence.Url;\r\n          self.sequences.push(sequence.Sequence);\r\n        });\r\n\r\n        self.addOptions();\r\n      }\r\n      self.isLoading(false);\r\n    },\r\n    function(error) {\r\n      self.errorMessage(\r\n        error.responseJSON ? error.responseJSON.message : error\r\n      );\r\n      self.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nCourseOverviewList.prototype.getUrlSequencesBase = function() {\r\n  return '';\r\n};\r\n\r\nCourseOverviewList.prototype.addOptions = function() {\r\n  var self = this;\r\n  self.sequencesFilterOptions.removeAll();\r\n\r\n  self.sequencesFilterOptions.push('Alle');\r\n\r\n  self.courseAdminOptions.removeAll();\r\n  self.courseAdminOptions.push('Alle');\r\n\r\n  self.sequences().forEach(function(sequence) {\r\n    sequence.Status.forEach(function(status) {\r\n      if (status !== '' && self.sequencesFilterOptions.indexOf(status) === -1) {\r\n        self.sequencesFilterOptions.push(status);\r\n      }\r\n    });\r\n\r\n    // Admin filter\r\n    if (\r\n      sequence.CourseAdmin !== '' &&\r\n      self.courseAdminOptions().indexOf(sequence.CourseAdmin) < 0\r\n    ) {\r\n      self.courseAdminOptions.push(sequence.CourseAdmin);\r\n    }\r\n  });\r\n\r\n  self.applyStoredFilters();\r\n  self.createSubscribersForSelectedFilters();\r\n  self.createSubscribersForSelectedCourseAdmin();\r\n};\r\n\r\nCourseOverviewList.prototype.filterSequences = function() {\r\n  var self = this;\r\n  var filteredList = self.sequences();\r\n\r\n  var sequenceFilter = self.selectedFilterSequence();\r\n  if (sequenceFilter && sequenceFilter !== self.sequencesFilterOptions()[0]) {\r\n    filteredList = ko.utils.arrayFilter(filteredList, function(sequence) {\r\n      var filter = '';\r\n      sequence.Status.forEach(function(value) {\r\n        if (value === sequenceFilter) {\r\n          filter = value;\r\n        }\r\n      });\r\n      return filter;\r\n    });\r\n  }\r\n\r\n  var adminFilter = self.selectedCourseAdmin();\r\n  if (adminFilter && adminFilter !== self.courseAdminOptions()[0]) {\r\n    filteredList = ko.utils.arrayFilter(filteredList, function(sequence) {\r\n      var filter = '';\r\n      if (sequence.CourseAdmin === adminFilter) {\r\n        filter = sequence.CourseAdmin;\r\n      }\r\n      return filter;\r\n    });\r\n  }\r\n\r\n  self.numberOfShowingSequences(filteredList.length);\r\n  return filteredList;\r\n};\r\n\r\nCourseOverviewList.prototype.sortSequences = function(header) {\r\n  var self = this;\r\n\r\n  if (self.activeSort === header) {\r\n    header.asc = !header.asc;\r\n  } else {\r\n    self.activeSort = header;\r\n  }\r\n  var currentSorting = self.activeSort.asc ? self.compareAsc : self.compareDesc;\r\n\r\n  var key = header.sortKey;\r\n  switch (key) {\r\n    case 'courseTitle':\r\n      self.sequences.sort(currentSorting.bind('CourseTitle'));\r\n      break;\r\n    case 'date':\r\n      self.sequences.sort(currentSorting.bind('FromDate'));\r\n      break;\r\n    case 'city':\r\n      self.sequences.sort(currentSorting.bind('City'));\r\n      break;\r\n  }\r\n};\r\n\r\nCourseOverviewList.prototype.compareAsc = function(a, b) {\r\n  if (this == 'courseTitle') {\r\n    a = a.CourseTitle;\r\n    b = b.CourseTitle;\r\n  } else if (this == 'date') {\r\n    a[this] = a[this] ? a[this] : '';\r\n    b[this] = b[this] ? b[this] : '';\r\n  } else if (this == 'city') {\r\n    a = a.City;\r\n    b = b.City;\r\n  }\r\n\r\n  return a[this] < b[this]\r\n    ? -1\r\n    : a[this] > b[this]\r\n      ? 1\r\n      : a[this] == b[this]\r\n        ? 0\r\n        : 0;\r\n};\r\n\r\nCourseOverviewList.prototype.compareDesc = function(b, a) {\r\n  if (this == 'courseTitle') {\r\n    a = a.CourseTitle;\r\n    b = b.CourseTitle;\r\n  } else if (this == 'date') {\r\n    a[this] = a[this] ? a[this] : '';\r\n    b[this] = b[this] ? b[this] : '';\r\n  } else if (this == 'city') {\r\n    a = a.City;\r\n    b = b.City;\r\n  }\r\n\r\n  return a[this] < b[this]\r\n    ? -1\r\n    : a[this] > b[this]\r\n      ? 1\r\n      : a[this] == b[this]\r\n        ? 0\r\n        : 0;\r\n};\r\n\r\nmodule.exports = CourseOverviewList;\r\n","module.exports = \"<div class=\\\"course-overview-list\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\r\\n  <!-- <div data-bind=\\\"component: { name: 'course-registration-feedback-box', params: { errorMessage: errorMessage }}\\\"></div> -->\\r\\n  <div class=\\\"row content-margin-bottom-small\\\">\\r\\n    <div class=\\\"columns large-9\\\">\\r\\n      <h2>Kurssekvenser</h2>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-2\\\">\\r\\n      <label class=\\\"form-label\\\">Fra dato\\r\\n        <div class=\\\"form-group\\\">\\r\\n          <div class=\\\"input-group date\\\">\\r\\n            <label class=\\\"form-label\\\">\\r\\n              <input readonly type=\\\"text\\\" class=\\\"form-control filter-option\\\" data-bind=\\\"datepicker, format: 'yyyy-mm-dd', oldDates: true, value: filterFromDate, clearBtn: false\\\" />\\r\\n            </label>\\r\\n            <span class=\\\"input-group-addon\\\">\\r\\n              <span class=\\\"icon icon-calendar\\\"></span>\\r\\n            </span>\\r\\n          </div>\\r\\n        </div>\\r\\n      </label>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-2\\\">\\r\\n      <label class=\\\"form-label\\\">Til dato\\r\\n        <div class=\\\"form-group\\\">\\r\\n          <div class=\\\"input-group date\\\">\\r\\n            <label class=\\\"form-label\\\">\\r\\n              <input readonly type=\\\"text\\\" class=\\\"form-control filter-option\\\" data-bind=\\\"datepicker, format: 'yyyy-mm-dd', oldDates: true, value: filterToDate \\\" />\\r\\n            </label>\\r\\n            <span class=\\\"input-group-addon\\\">\\r\\n              <span class=\\\"icon icon-calendar\\\"></span>\\r\\n            </span>\\r\\n          </div>\\r\\n        </div>\\r\\n      </label>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-2\\\"></div>\\r\\n    <div class=\\\"columns large-3 pull-left\\\">\\r\\n      <label class=\\\"form-label\\\">Status\\r\\n        <select style=\\\"height: 50px;\\\" class=\\\"form-select-wrapper form-select-wrapper-registration filter-option\\\" data-bind=\\\"options: sequencesFilterOptions, value: selectedFilterSequence\\\"></select>\\r\\n      </label>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"columns large-3 pull-left\\\">\\r\\n      <label class=\\\"form-label\\\">Kursadmin\\r\\n        <select style=\\\"height: 50px;\\\" class=\\\"form-select-wrapper form-select-wrapper-registration filter-option\\\" data-bind=\\\"options: courseAdminOptions, value: selectedCourseAdmin\\\"></select>\\r\\n      </label>\\r\\n    </div>\\r\\n  </div>\\r\\n  <button class=\\\"btn btn-primary get-sequences-btn\\\" data-bind=\\\"click: getSequences\\\">Finn Sekvenser</button>\\r\\n  <div class=\\\"row quality-control-admin-table-actions\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <span class=\\\"quality-control-list-hits\\\">Viser <span data-bind=\\\"text: numberOfShowingSequences\\\"></span> av <span\\r\\n          data-bind=\\\"text: numberOfSequences\\\"></span> kurs</span>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <div class=\\\"rn-table-container rnq-admin\\\">\\r\\n        <ul class=\\\"rn-table-header-row narrow\\\">\\r\\n          <!-- ko foreach: listHeaders -->\\r\\n          <li class=\\\"rn-table-cell-title columns\\\" data-bind=\\\"click: $parent.sortSequences.bind($parent), css: addClass\\\">\\r\\n            <span data-bind=\\\"text: title\\\"></span>\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n        </ul>\\r\\n        <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoading\\\"></div>\\r\\n        <div data-bind=\\\"visible: noSequencesFound\\\" style=\\\"text-align:center;font-style:italic;margin-top:20px;\\\"><span>Fant\\r\\n            ingen sekvenser mellom disse datoene</span></div>\\r\\n        <!-- ko foreach: filteredSequences -->\\r\\n        <ul class=\\\"rn-table-content-row narrow vertical-center\\\">\\r\\n          <li class=\\\"rn-table-content-item columns large-4\\\">\\r\\n            <span><a data-bind=\\\"text: CourseTitle, attr: {href: $parent.getSequencesLink($data)}\\\"></a></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: CourseId\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: Id\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <!-- if DateList-->\\r\\n            <!-- ko component: {name: \\\"date-time-list\\\", params: {\\\"dates\\\": DateList}} -->\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-2\\\">\\r\\n            <span data-bind=\\\"text: City\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-3\\\">\\r\\n            <!-- ko foreach: Status -->\\r\\n            <div class=\\\"sequence-status has-icon\\\">\\r\\n              <div data-bind=\\\"visible: $data === 'Mangler kodeord'\\\" class=\\\"status-icon status-warning\\\">!</div>\\r\\n              <div data-bind=\\\"visible: $data === 'Manuell godkjenning'\\\" class=\\\"status-icon status-warning\\\">!</div>\\r\\n              <span data-bind=\\\"text: $data\\\"></span>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n\"","function CourseRegistrationParticipants(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.values = {\r\n    sequencePk: params.sequencePk\r\n  };\r\n}\r\n\r\nCourseRegistrationParticipants.prototype.switchTab = function(tabType) {\r\n  this.tabType(tabType);\r\n};\r\n\r\nmodule.exports = CourseRegistrationParticipants;\r\n","module.exports = \"<div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12 no-padding\\\">\\r\\n        <div data-bind=\\\"component: { name: 'course-participants-list', params: {\\r\\n            api: API,\\r\\n            links: links,\\r\\n            texts: texts,\\r\\n            values: values\\r\\n        }}\\\"></div> \\r\\n        \\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout'),\r\n  $ = require('jquery'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  RNStorage = require('_utils/storage'),\r\n  FormDropdown = require('_components/atoms/form/form-dropdown/form-dropdown');\r\n\r\nvar WARNING_TRIGGER_STATUS = 'Manuell godkjenning';\r\nvar POST_SUCCESS_MESSAGE = 'Oppdaterte kursdeltaker(e)';\r\nvar MANUAL_CONFIRMATION_REQUIRED =\r\n  'Et eller flere kurs krever manuell godkjenning. Finn deltakere som er markert med manuell godkjenning og rediger antall timer som er godkjent.';\r\nvar STORAGE_KEY = 'courseParticipantsList';\r\n\r\nvar POLLING_INTERVAL_PARTICIPANTS = 30000;\r\nvar POLLING_INTERVAL_ANONYMOUS_PARTICIPANTS = 29000;\r\nvar POLLING_TIMEOUT_PARTICIPANTS = null;\r\nvar POLLING_TIMEOUT_ANONYMOUS_PARTICIPANTS = null;\r\nvar POLLING_CURRENTREQ_PARTICIPANTS = null;\r\nvar POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS = null;\r\n\r\nfunction CourseParticipantsList(params) {\r\n  var self = this;\r\n\r\n  self.params = params;\r\n  self.API = params.api;\r\n  self.navigation = params.navigation;\r\n  self.sequencePk = params.values.sequencePk;\r\n}\r\n\r\nCourseParticipantsList.prototype.init = function(element) {\r\n  var self = this;\r\n  self.$element = $(element);\r\n  self.enableAutoUpdate = ko.observable(true);\r\n\r\n  self.errorMessage = ko.observable();\r\n  self.hasError = ko.computed(function() {\r\n    return !!self.errorMessage() && self.errorMessage().length > 0;\r\n  });\r\n\r\n  self.successMessage = ko.observable();\r\n  self.hasSuccess = ko.computed(function() {\r\n    return !!self.successMessage() && self.successMessage().length > 0;\r\n  });\r\n\r\n  self.isIE = /*@cc_on!@*/ false || !!document.documentMode;\r\n  self.isEdge = !self.isIE && !!window.StyleMedia;\r\n\r\n  self.infoMessage = ko.observable();\r\n  self.isLoading = ko.observable(false);\r\n  self.isLoadingSequenceInfo = ko.observable(false);\r\n  self.isAnonLoading = ko.observable(false);\r\n\r\n  self.isModalActive = ko.observable(false);\r\n  self.isModalActive.subscribe(function(value) {\r\n    self.errorMessage('');\r\n    self.successMessage('');\r\n    if (!value) {\r\n      self.updateOptions();\r\n\r\n      if (!self.enableBatchEditMode()) {\r\n        self.selectedParticipantsToEdit([]);\r\n      }\r\n    }\r\n  });\r\n\r\n  self.enableBatchEditMode = ko.observable(false);\r\n  self.enableBatchEditMode.subscribe(function() {\r\n    self.checkAllParticipants(false);\r\n    self.selectedParticipantsToEdit([]);\r\n  });\r\n  self.selectedParticipantsToEdit = ko.observableArray([]);\r\n\r\n  self.numberOfSelectedParticipants = ko.computed(function() {\r\n    return self.selectedParticipantsToEdit().length;\r\n  });\r\n  self.sequenceInfo = ko.observable({});\r\n  self.showMoreSequences = ko.observable(false);\r\n  self.participants = ko.observableArray([]);\r\n  self.incomingParticipants = ko.observableArray([]);\r\n  self.anonymousParticipants = ko.observableArray([]);\r\n  self.incomingAnonymousParticipants = ko.observable([]);\r\n  self.noParticipantsFound = ko.observable(false);\r\n  self.noAnonsFound = ko.observable(false);\r\n\r\n  self.getSequenceInfo();\r\n  self.getParticipants();\r\n  self.getAnonymousParticipants();\r\n\r\n  self.enableAutoUpdate.subscribe(function(value) {\r\n    if (value) {\r\n      self.getParticipantsInIntervals();\r\n      self.getAnonymousParticipantsInIntervals();\r\n    }\r\n  });\r\n\r\n  self.numberOfParticipants = ko.computed(function() {\r\n    return self.participants().length;\r\n  });\r\n  self.numberOfShowingParticipants = ko.observable();\r\n  self.numberOfShowingAnonymousParticipants = ko.observable();\r\n  self.numberOfAnonymousParticipants = ko.computed(function() {\r\n    return self.anonymousParticipants().length;\r\n  });\r\n\r\n  self.numberOfMissingStartTime = ko.computed(function() {\r\n    var missing = 0;\r\n\r\n    self.participants().forEach(function(participant) {\r\n      participant.Attendance.forEach(function(day) {\r\n        if (day.CheckInTime() === '') missing++;\r\n      });\r\n    });\r\n\r\n    return missing;\r\n  });\r\n  self.numberOfMissingEndTime = ko.computed(function() {\r\n    var missing = 0;\r\n\r\n    self.participants().forEach(function(participant) {\r\n      participant.Attendance.forEach(function(day) {\r\n        if (day.CheckOutTime() === '') missing++;\r\n      });\r\n    });\r\n\r\n    return missing;\r\n  });\r\n\r\n  self.hasMoreSequences = ko.computed(function() {\r\n    if (\r\n      self.sequenceInfo().SequencesSameDay &&\r\n      self.sequenceInfo().SequencesSameDay.length > 0\r\n    )\r\n      return true;\r\n  });\r\n\r\n  //Filter\r\n  self.meetingDateFilterOptions = ko.observableArray();\r\n  self.selectedFilterMeetingDate = ko.observable();\r\n  self.participantFilterOptions = ko.observableArray();\r\n  self.anonymousParticipantsFilterOptions = ko.observableArray();\r\n  self.selectedFilterParticipant = ko.observable();\r\n  self.selectedFilterAnonymousParticipants = ko.observable();\r\n  self.filteredParticipants = ko.computed(self.filterParticipants.bind(this));\r\n  self.filteredAnonymousParticipants = ko.computed(\r\n    self.filterAnonymousParticipants.bind(this)\r\n  );\r\n\r\n  self.activeSort = self.listHeaders[0];\r\n\r\n  self.checkAllParticipants = ko.observable(false);\r\n  self.checkAllParticipants.subscribe(function(value) {\r\n    self.selectedParticipantsToEdit([]);\r\n    if (value) {\r\n      self.selectedParticipantsToEdit(self.filteredParticipants());\r\n    }\r\n  });\r\n\r\n  var formDropdown = new FormDropdown();\r\n  formDropdown.start('.form-dropdown-open-button');\r\n};\r\n\r\nCourseParticipantsList.prototype.postOnKey = function(data, event) {\r\n  if (event.keyCode === 13 && event.key === 'Enter') {\r\n    event.preventDefault();\r\n    $(event.target).blur();\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nCourseParticipantsList.prototype.updateParticipantLists = function() {\r\n  var self = this;\r\n\r\n  self.getParticipants();\r\n  self.getAnonymousParticipants();\r\n};\r\n\r\nCourseParticipantsList.prototype.toggleModal = function(participant) {\r\n  var self = this;\r\n\r\n  if (participant) {\r\n    self.selectedParticipantsToEdit([participant]);\r\n  }\r\n\r\n  if (!self.isModalActive()) {\r\n    self.isModalActive(true);\r\n  } else {\r\n    self.isModalActive(false);\r\n  }\r\n};\r\n\r\nCourseParticipantsList.prototype.onMobileNumberChange = function(participant) {\r\n  var self = this;\r\n  self.postMobileNumber(participant);\r\n};\r\n\r\nCourseParticipantsList.prototype.onCheckInTimeChange = function(\r\n  participant,\r\n  attendance\r\n) {\r\n  this.postCheckInTime(\r\n    this.selectedParticipantsToEdit().length > 0\r\n      ? this.selectedParticipantsToEdit()\r\n      : [participant],\r\n    attendance\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.onCheckOutTimeChange = function(\r\n  participant,\r\n  attendance\r\n) {\r\n  var self = this;\r\n\r\n  self.postCheckOutTime(\r\n    self.selectedParticipantsToEdit().length > 0\r\n      ? self.selectedParticipantsToEdit()\r\n      : [participant],\r\n    attendance\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.makeParticipantPropertiesObservables = function(\r\n  participant\r\n) {\r\n  var self = this;\r\n\r\n  participant.ParticipantIsLoading = ko.observable(false);\r\n  participant.MobileNumber = ko.observable(participant.MobileNumber);\r\n\r\n  participant.Attendance.forEach(function(attendance) {\r\n    attendance.CheckInTime = ko.observable(\r\n      self.getTimeFromDate(attendance.CheckInTime)\r\n    );\r\n    attendance.CheckOutTime = ko.observable(\r\n      self.getTimeFromDate(attendance.CheckOutTime)\r\n    );\r\n  });\r\n\r\n  participant.StatusTexts = ko.observableArray(participant.StatusTexts);\r\n\r\n  if (participant.StatusTexts().indexOf(WARNING_TRIGGER_STATUS) !== -1) {\r\n    self.infoMessage(MANUAL_CONFIRMATION_REQUIRED);\r\n  }\r\n  participant.StatusTexts.subscribe(function(texts) {\r\n    if (texts.indexOf(WARNING_TRIGGER_STATUS) !== -1) {\r\n      self.infoMessage(MANUAL_CONFIRMATION_REQUIRED);\r\n    }\r\n  });\r\n\r\n  participant.ApprovedHours.forEach(function(hours) {\r\n    var tmp = hours.ApprovedHours;\r\n    if (self.isIE || self.isEdge) {\r\n      tmp = tmp.toLocaleString('nb-NO');\r\n    }\r\n    hours.ApprovedHours = ko.observable(tmp).extend({\r\n      required: [\r\n        {\r\n          type: 'isValidCalculatorHour',\r\n          message: 'Det er kun gyldig med hele eller halve timer'\r\n        }\r\n      ]\r\n    });\r\n  });\r\n};\r\n\r\nCourseParticipantsList.prototype.createSubscribersForSelectedFilters = function() {\r\n  this.selectedFilterParticipant.subscribe(this.updateLocalStorage.bind(this));\r\n  this.selectedFilterAnonymousParticipants.subscribe(\r\n    this.updateLocalStorage.bind(this)\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.updateLocalStorage = function() {\r\n  var filters = {\r\n    filterParticipant: this.selectedFilterParticipant(),\r\n    filterAnonymousParticipants: this.selectedFilterAnonymousParticipants()\r\n  };\r\n\r\n  RNStorage.storeItem(STORAGE_KEY, filters);\r\n};\r\n\r\nCourseParticipantsList.prototype.applyStoredFilters = function() {\r\n  var filters = JSON.parse(RNStorage.getItem(STORAGE_KEY));\r\n  if (filters !== null && filters !== undefined) {\r\n    this.selectedFilterParticipant(filters.filterParticipant);\r\n    this.selectedFilterAnonymousParticipants(\r\n      filters.filterAnonymousParticipants\r\n    );\r\n  }\r\n};\r\n\r\nCourseParticipantsList.prototype.listHeaders = [\r\n  { title: 'Navn', sortKey: 'name', addClass: 'large-4', asc: true },\r\n  { title: 'AktørId', sortKey: 'id', addClass: 'large-1', asc: true },\r\n  { title: 'Mobil', sortKey: 'number', addClass: 'large-1', asc: true },\r\n  { title: 'Inn', sortKey: 'timestamp', addClass: 'large-1', asc: true },\r\n  { title: 'Ut', sortKey: 'timestamp', addClass: 'large-1', asc: true },\r\n  { title: 'Status', sortKey: 'status', addClass: 'large-1', asc: true },\r\n  { title: '', sortKey: '', addClass: 'large-3', asc: true }\r\n];\r\n\r\nCourseParticipantsList.prototype.anonymousListHeaders = [\r\n  { title: '', sortKey: '', addClass: 'large-5', asc: true },\r\n  { title: 'Mobil', sortKey: 'number', addClass: 'large-1', asc: true },\r\n  { title: 'inn', sortKey: 'string', addClass: 'large-1', asc: true },\r\n  { title: 'ut', sortKey: 'string', addClass: 'large-1', asc: true },\r\n  { title: '', sortKey: '', addClass: 'large-4', asc: true }\r\n];\r\n\r\nCourseParticipantsList.prototype.compareMobileNumbers = function(participant) {\r\n  var self = this;\r\n\r\n  self.anonymousParticipants().forEach(function(anon) {\r\n    if (anon.MobileNumber() === participant.MobileNumber()) {\r\n      anon.IsRegisteredUser(true);\r\n    }\r\n  });\r\n};\r\n\r\nCourseParticipantsList.prototype.postMobileNumber = function(participant) {\r\n  var self = this;\r\n  self.errorMessage('');\r\n  self.successMessage('');\r\n\r\n  participant.ParticipantIsLoading(true);\r\n\r\n  APIHelper.post(\r\n    self.getPostMobileNumberUrl(participant),\r\n    {},\r\n    function(response) {\r\n      if (!response.SavedData) {\r\n        self.errorMessage(response.ErrorMessage);\r\n      } else {\r\n        self.successMessage(POST_SUCCESS_MESSAGE);\r\n      }\r\n\r\n      response.Participant.Attendance.forEach(function(day) {\r\n        participant.Attendance.forEach(function(oldday) {\r\n          if (day.AttendancePk === oldday.AttendancePk) {\r\n            oldday.CheckInTime(self.getTimeFromDate(day.CheckInTime));\r\n            oldday.CheckOutTime(self.getTimeFromDate(day.CheckOutTime));\r\n          }\r\n        });\r\n      });\r\n\r\n      participant.MobileNumber(response.Participant.MobileNumber);\r\n      participant.StatusTexts(response.Participant.StatusTexts);\r\n      self.UpdateApprovedHours(participant, response.Participant.ApprovedHours);\r\n\r\n      self.updateOptions();\r\n      participant.ParticipantIsLoading(false);\r\n    },\r\n    function(response) {\r\n      self.errorMessage(response.ErrorMessage);\r\n      participant.MobileNumber('');\r\n      participant.ParticipantIsLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.UpdateApprovedHours = function(\r\n  participant,\r\n  approvedHours\r\n) {\r\n  var self = this;\r\n  participant.ApprovedHours.forEach(function(hours) {\r\n    var index = participant.ApprovedHours.indexOf(hours);\r\n    var val = ko.isObservable(approvedHours[index].ApprovedHours)\r\n      ? approvedHours[index].ApprovedHours()\r\n      : approvedHours[index].ApprovedHours;\r\n    if (self.isIE || self.isEdge) {\r\n      val = val.toLocaleString('nb-NO');\r\n    }\r\n\r\n    if (val != hours.ApprovedHours()) {\r\n      hours.ApprovedHours(val);\r\n    }\r\n  });\r\n};\r\n\r\nCourseParticipantsList.prototype.postCheckInTime = function(\r\n  participants,\r\n  attendance\r\n) {\r\n  var self = this;\r\n  self.errorMessage('');\r\n  self.successMessage('');\r\n  var data = [];\r\n\r\n  participants.forEach(function(participant) {\r\n    participant.ParticipantIsLoading(true);\r\n    data.push(participant.ParticipantActorId);\r\n  });\r\n\r\n  APIHelper.QcPost(\r\n    self.getPostCheckInTimeUrl(attendance),\r\n    data,\r\n    function(response) {\r\n      response.forEach(function(obj) {\r\n        if (!obj.SavedData) {\r\n          self.errorMessage(obj.ErrorMessage);\r\n        } else if (!self.hasError()) {\r\n          self.successMessage(POST_SUCCESS_MESSAGE);\r\n        }\r\n\r\n        obj.Participant.Attendance.forEach(function(thatDay) {\r\n          participants.forEach(function(participant) {\r\n            participant.Attendance.forEach(function(thisDay) {\r\n              if (thatDay.AttendancePk === thisDay.AttendancePk) {\r\n                thisDay.CheckInTime(self.getTimeFromDate(thatDay.CheckInTime));\r\n              } else if (\r\n                thisDay.AttendancePk === 0 &&\r\n                thatDay.DayInSequence === thisDay.DayInSequence\r\n              ) {\r\n                thisDay.CheckInTime(self.getTimeFromDate(thatDay.CheckInTime));\r\n                thisDay.AttendancePk = thatDay.AttendancePk;\r\n              }\r\n            });\r\n          });\r\n        });\r\n      });\r\n\r\n      participants.forEach(function(participant) {\r\n        response.forEach(function(obj) {\r\n          if (\r\n            participant.ParticipantActorId ===\r\n            obj.Participant.ParticipantActorId\r\n          ) {\r\n            participant.StatusTexts(obj.Participant.StatusTexts);\r\n            self.UpdateApprovedHours(\r\n              participant,\r\n              obj.Participant.ApprovedHours\r\n            );\r\n          }\r\n          participant.ParticipantIsLoading(false);\r\n        });\r\n      });\r\n\r\n      self.updateOptions();\r\n    },\r\n    function(response) {\r\n      self.errorMessage(response.ErrorMessage);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.postCheckOutTime = function(\r\n  participants,\r\n  attendance\r\n) {\r\n  var self = this;\r\n  self.errorMessage('');\r\n  self.successMessage('');\r\n  var data = [];\r\n\r\n  participants.forEach(function(participant) {\r\n    participant.ParticipantIsLoading(true);\r\n    data.push(participant.ParticipantActorId);\r\n  });\r\n\r\n  APIHelper.QcPost(\r\n    self.getPostCheckOutTimeUrl(attendance),\r\n    data,\r\n    function(response) {\r\n      response.forEach(function(obj) {\r\n        if (!obj.SavedData) {\r\n          self.errorMessage(obj.ErrorMessage);\r\n        } else if (!self.hasError()) {\r\n          self.successMessage(POST_SUCCESS_MESSAGE);\r\n        }\r\n\r\n        obj.Participant.Attendance.forEach(function(thatDay) {\r\n          participants.forEach(function(participant) {\r\n            participant.Attendance.forEach(function(thisDay) {\r\n              if (thatDay.AttendancePk === thisDay.AttendancePk) {\r\n                thisDay.CheckOutTime(\r\n                  self.getTimeFromDate(thatDay.CheckOutTime)\r\n                );\r\n              } else if (\r\n                thisDay.AttendancePk === 0 &&\r\n                thatDay.DayInSequence === thisDay.DayInSequence\r\n              ) {\r\n                thisDay.CheckOutTime(\r\n                  self.getTimeFromDate(thatDay.CheckOutTime)\r\n                );\r\n                thisDay.AttendancePk = thatDay.AttendancePk;\r\n              }\r\n            });\r\n          });\r\n        });\r\n      });\r\n\r\n      participants.forEach(function(participant) {\r\n        response.forEach(function(obj) {\r\n          if (\r\n            participant.ParticipantActorId ===\r\n            obj.Participant.ParticipantActorId\r\n          ) {\r\n            participant.StatusTexts(obj.Participant.StatusTexts);\r\n            self.UpdateApprovedHours(\r\n              participant,\r\n              obj.Participant.ApprovedHours\r\n            );\r\n          }\r\n          participant.ParticipantIsLoading(false);\r\n        });\r\n      });\r\n\r\n      self.updateOptions();\r\n    },\r\n    function(response) {\r\n      self.errorMessage(response.ErrorMessage);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.getSequenceInfo = function() {\r\n  var self = this;\r\n  self.isLoadingSequenceInfo(true);\r\n  var url = self.getSequenceInfoUrl() + '?sequencePk=' + self.sequencePk;\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      self.sequenceInfo(response);\r\n      self.isLoadingSequenceInfo(false);\r\n    },\r\n    function(response) {\r\n      self.errorMessage(response.ErrorMessage);\r\n      self.isLoadingSequenceInfo(false);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.getAnonymousParticipants = function() {\r\n  var self = this;\r\n  self.isAnonLoading(true);\r\n  self.noAnonsFound(true);\r\n  var url =\r\n    self.getUrlParticipantsBase() +\r\n    self.API.getAnonymousParticipants +\r\n    '?sequencePk=' +\r\n    self.sequencePk;\r\n\r\n  if (self.anonymousParticipants().length > 0) {\r\n    self.anonymousParticipants([]);\r\n  }\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      if (data.length === 0) {\r\n        self.noAnonsFound(true);\r\n      } else {\r\n        self.noAnonsFound(false);\r\n        data.forEach(function(anon) {\r\n          anon.IsRegisteredUser = ko.observable(false);\r\n          anon.MobileNumber = ko.observable(anon.ParticipantMobileNumber);\r\n          anon.CheckInTime = ko.observable(\r\n            self.getTimeFromDate(anon.CheckInTime)\r\n          );\r\n          anon.CheckOutTime = ko.observable(\r\n            self.getTimeFromDate(anon.CheckOutTime)\r\n          );\r\n          self.anonymousParticipants.push(anon);\r\n        });\r\n      }\r\n\r\n      if (self.enableAutoUpdate()) {\r\n        self.getAnonymousParticipantsInIntervals();\r\n      }\r\n      self.isAnonLoading(false);\r\n    },\r\n    function(error) {\r\n      self.errorMessage(\r\n        error.responseJSON ? error.responseJSON.message : error\r\n      );\r\n      self.isAnonLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.getAnonymousParticipantsInIntervals = function() {\r\n  var self = this;\r\n  var url =\r\n    self.getUrlParticipantsBase() +\r\n    self.API.getAnonymousParticipants +\r\n    '?sequencePk=' +\r\n    self.sequencePk;\r\n  self.incomingAnonymousParticipants([]);\r\n\r\n  if (!self.enableAutoUpdate()) return;\r\n\r\n  POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS = $.get(url);\r\n\r\n  POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS.done(function(\r\n    anonymousParticipants\r\n  ) {\r\n    self.noAnonsFound(anonymousParticipants.length > 0 ? false : true);\r\n\r\n    if (self.enableBatchEditMode()) return;\r\n    anonymousParticipants.forEach(function(anon) {\r\n      anon.IsRegisteredUser = ko.observable(false);\r\n      anon.MobileNumber = ko.observable(anon.ParticipantMobileNumber);\r\n      anon.CheckInTime = ko.observable(self.getTimeFromDate(anon.CheckInTime));\r\n      anon.CheckOutTime = ko.observable(\r\n        self.getTimeFromDate(anon.CheckOutTime)\r\n      );\r\n      self.incomingAnonymousParticipants().push(anon);\r\n    });\r\n\r\n    self.incomingAnonymousParticipants().forEach(function(incomingParticipant) {\r\n      var participantOnlyLocally = true;\r\n      self.anonymousParticipants().forEach(function(existingParticipant) {\r\n        if (\r\n          incomingParticipant.MobileNumber() ===\r\n          existingParticipant.MobileNumber()\r\n        ) {\r\n          participantOnlyLocally = false;\r\n        }\r\n      });\r\n\r\n      //add new participant\r\n      if (participantOnlyLocally) {\r\n        self.anonymousParticipants.push(incomingParticipant);\r\n      }\r\n    });\r\n\r\n    self.anonymousParticipants().forEach(function(existingParticipant) {\r\n      var existingId = existingParticipant.MobileNumber();\r\n      var participantOnlyInIncoming = true;\r\n      self\r\n        .incomingAnonymousParticipants()\r\n        .forEach(function(incomingParticipant) {\r\n          var incomingId = incomingParticipant.MobileNumber();\r\n\r\n          if (existingId === incomingId) {\r\n            participantOnlyInIncoming = false;\r\n\r\n            if (\r\n              existingParticipant.CheckInTime() !==\r\n              incomingParticipant.CheckInTime()\r\n            ) {\r\n              existingParticipant.CheckInTime(\r\n                incomingParticipant.CheckInTime()\r\n              );\r\n            }\r\n\r\n            if (\r\n              existingParticipant.CheckOutTime() !==\r\n              incomingParticipant.CheckOutTime()\r\n            ) {\r\n              existingParticipant.CheckOutTime(\r\n                incomingParticipant.CheckOutTime()\r\n              );\r\n            }\r\n          }\r\n        });\r\n\r\n      //delete participant\r\n      if (participantOnlyInIncoming) {\r\n        self.anonymousParticipants.remove(existingParticipant);\r\n      }\r\n    });\r\n  });\r\n\r\n  POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS.always(function() {\r\n    if (POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS) {\r\n      POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS.abort();\r\n    }\r\n\r\n    if (POLLING_TIMEOUT_ANONYMOUS_PARTICIPANTS) {\r\n      clearTimeout(POLLING_TIMEOUT_ANONYMOUS_PARTICIPANTS);\r\n    }\r\n\r\n    POLLING_CURRENTREQ_ANONYMOUS_PARTICIPANTS = null;\r\n\r\n    POLLING_TIMEOUT_ANONYMOUS_PARTICIPANTS = setTimeout(\r\n      self.getAnonymousParticipantsInIntervals.bind(self),\r\n      POLLING_INTERVAL_ANONYMOUS_PARTICIPANTS\r\n    );\r\n  });\r\n};\r\n\r\nCourseParticipantsList.prototype.getParticipantsInIntervals = function() {\r\n  var self = this;\r\n  var url =\r\n    self.getUrlParticipantsBase() +\r\n    self.API.getParticipants +\r\n    '?sequencePk=' +\r\n    self.sequencePk;\r\n  self.incomingParticipants([]);\r\n\r\n  if (!self.enableAutoUpdate()) return;\r\n\r\n  POLLING_CURRENTREQ_PARTICIPANTS = $.get(url);\r\n\r\n  POLLING_CURRENTREQ_PARTICIPANTS.done(function(participants) {\r\n    if (self.enableBatchEditMode()) return;\r\n\r\n    participants.forEach(function(participant) {\r\n      self.makeParticipantPropertiesObservables(participant);\r\n      self.incomingParticipants().push(participant);\r\n    });\r\n\r\n    self.incomingParticipants().forEach(function(incomingParticipant) {\r\n      var participantOnlyLocally = true;\r\n      self.participants().forEach(function(existingParticipant) {\r\n        if (\r\n          incomingParticipant.ParticipantActorId ===\r\n          existingParticipant.ParticipantActorId\r\n        ) {\r\n          participantOnlyLocally = false;\r\n        }\r\n      });\r\n\r\n      //add new participant\r\n      if (participantOnlyLocally) {\r\n        self.participants.push(incomingParticipant);\r\n      }\r\n    });\r\n\r\n    self.participants().forEach(function(existingParticipant) {\r\n      var existingAktorId = existingParticipant.ParticipantActorId;\r\n      var participantOnlyInIncoming = true;\r\n      self.incomingParticipants().forEach(function(incomingParticipant) {\r\n        var incomingAktorId = incomingParticipant.ParticipantActorId;\r\n\r\n        if (existingAktorId === incomingAktorId) {\r\n          participantOnlyInIncoming = false;\r\n          //check phone number\r\n          if (\r\n            existingParticipant.MobileNumber() !==\r\n            incomingParticipant.MobileNumber()\r\n          ) {\r\n            existingParticipant.ParticipantIsLoading(true);\r\n            existingParticipant.MobileNumber(\r\n              incomingParticipant.MobileNumber()\r\n            );\r\n          }\r\n\r\n          //check attendance\r\n          existingParticipant.Attendance.forEach(function(\r\n            existingParticipantDay\r\n          ) {\r\n            incomingParticipant.Attendance.forEach(function(\r\n              incomingParticipantDay\r\n            ) {\r\n              if (\r\n                existingParticipantDay.AttendancePk ===\r\n                  incomingParticipantDay.AttendancePk ||\r\n                existingParticipantDay.AttendancePk === 0\r\n              ) {\r\n                if (\r\n                  existingParticipantDay.CheckInTime() !==\r\n                  incomingParticipantDay.CheckInTime()\r\n                ) {\r\n                  existingParticipant.ParticipantIsLoading(true);\r\n                  existingParticipantDay.CheckInTime(\r\n                    incomingParticipantDay.CheckInTime()\r\n                  );\r\n                }\r\n\r\n                if (\r\n                  existingParticipantDay.CheckOutTime() !==\r\n                  incomingParticipantDay.CheckOutTime()\r\n                ) {\r\n                  existingParticipant.ParticipantIsLoading(true);\r\n                  existingParticipantDay.CheckOutTime(\r\n                    incomingParticipantDay.CheckOutTime()\r\n                  );\r\n                }\r\n              }\r\n            });\r\n          });\r\n\r\n          //update statustext and approved hours\r\n          existingParticipant.StatusTexts(incomingParticipant.StatusTexts());\r\n          self.UpdateApprovedHours(\r\n            existingParticipant,\r\n            incomingParticipant.ApprovedHours\r\n          );\r\n        }\r\n\r\n        setTimeout(function() {\r\n          existingParticipant.ParticipantIsLoading(false);\r\n        }, 3000);\r\n      });\r\n\r\n      //delete participant\r\n      if (participantOnlyInIncoming) {\r\n        self.participants.remove(existingParticipant);\r\n      }\r\n    });\r\n  });\r\n\r\n  POLLING_CURRENTREQ_PARTICIPANTS.always(function() {\r\n    if (POLLING_CURRENTREQ_PARTICIPANTS) {\r\n      POLLING_CURRENTREQ_PARTICIPANTS.abort();\r\n    }\r\n\r\n    if (POLLING_TIMEOUT_PARTICIPANTS) {\r\n      clearTimeout(POLLING_TIMEOUT_PARTICIPANTS);\r\n    }\r\n\r\n    POLLING_CURRENTREQ_PARTICIPANTS = null;\r\n\r\n    POLLING_TIMEOUT_PARTICIPANTS = setTimeout(\r\n      self.getParticipantsInIntervals.bind(self),\r\n      POLLING_INTERVAL_PARTICIPANTS\r\n    );\r\n  });\r\n};\r\n\r\nCourseParticipantsList.prototype.getParticipants = function() {\r\n  var self = this;\r\n  self.isLoading(true);\r\n  self.noParticipantsFound(false);\r\n\r\n  var url =\r\n    self.getUrlParticipantsBase() +\r\n    self.API.getParticipants +\r\n    '?sequencePk=' +\r\n    self.sequencePk;\r\n\r\n  if (self.participants().length > 0) {\r\n    self.participants([]);\r\n  }\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(data) {\r\n      if (data.length === 0) {\r\n        self.noParticipantsFound(true);\r\n      } else {\r\n        data.forEach(function(participant) {\r\n          self.makeParticipantPropertiesObservables(participant);\r\n          self.participants.push(participant);\r\n        });\r\n        self.addOptions();\r\n      }\r\n\r\n      self.isLoading(false);\r\n\r\n      if (self.enableAutoUpdate()) {\r\n        self.getParticipantsInIntervals();\r\n      }\r\n    },\r\n    function(error) {\r\n      self.errorMessage(\r\n        error.responseJSON ? error.responseJSON.message : error\r\n      );\r\n      self.isLoading(false);\r\n    }\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.getUrlParticipantsBase = function() {\r\n  return '';\r\n};\r\nCourseParticipantsList.prototype.getSequenceInfoUrl = function() {\r\n  var self = this;\r\n\r\n  return self.getUrlParticipantsBase() + self.API.getSequenceInfo;\r\n};\r\nCourseParticipantsList.prototype.getPostParticipantUrl = function() {\r\n  var self = this;\r\n\r\n  return self.getUrlParticipantsBase() + self.API.postParticipant;\r\n};\r\nCourseParticipantsList.prototype.getPostCheckInTimeUrl = function(attendance) {\r\n  var sequenceFk = 'sequenceFk=' + attendance.SequenceFk;\r\n  var time = 'time=' + attendance.CheckInTime();\r\n  var day = 'day=' + attendance.DayInSequence;\r\n\r\n  var queryString = '?' + sequenceFk + '&' + time + '&' + day;\r\n\r\n  return this.getUrlParticipantsBase() + this.API.postCheckInTime + queryString;\r\n};\r\n\r\nCourseParticipantsList.prototype.getPostCheckOutTimeUrl = function(attendance) {\r\n  var self = this;\r\n\r\n  var sequenceFk = 'sequenceFk=' + attendance.SequenceFk;\r\n  var time = 'time=' + attendance.CheckOutTime();\r\n  var day = 'day=' + attendance.DayInSequence;\r\n\r\n  var queryString = '?' + sequenceFk + '&' + time + '&' + day;\r\n\r\n  return (\r\n    self.getUrlParticipantsBase() + self.API.postCheckOutTime + queryString\r\n  );\r\n};\r\nCourseParticipantsList.prototype.getPostMobileNumberUrl = function(\r\n  participant\r\n) {\r\n  var self = this;\r\n\r\n  var aktorId = 'aktorId=' + participant.ParticipantActorId;\r\n  var sequenceFk = 'sequenceFk=' + participant.SequencePk;\r\n  var mobileNumber = 'mobileNumber=' + participant.MobileNumber();\r\n\r\n  var queryString = '?' + aktorId + '&' + sequenceFk + '&' + mobileNumber;\r\n\r\n  return (\r\n    self.getUrlParticipantsBase() + self.API.postMobileNumber + queryString\r\n  );\r\n};\r\nCourseParticipantsList.prototype.getNorwegianDate = function(newDate) {\r\n  var today = new Date(newDate);\r\n  return (\r\n    today.getDate() + '.' + (today.getMonth() + 1) + '.' + today.getFullYear()\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.updateOptions = function() {\r\n  var self = this;\r\n\r\n  self.participants().forEach(function(participant) {\r\n    participant.StatusTexts().forEach(function(status) {\r\n      if (\r\n        status !== '' &&\r\n        self.participantFilterOptions.indexOf(status) === -1\r\n      ) {\r\n        self.participantFilterOptions.push(status);\r\n      }\r\n    });\r\n  });\r\n\r\n  self.applyStoredFilters();\r\n  self.createSubscribersForSelectedFilters();\r\n};\r\n\r\nCourseParticipantsList.prototype.addOptions = function() {\r\n  var self = this;\r\n  self.participantFilterOptions.removeAll();\r\n\r\n  self.participantFilterOptions.push('Alle');\r\n\r\n  self.participants().forEach(function(participant) {\r\n    participant.StatusTexts().forEach(function(status) {\r\n      if (\r\n        status !== '' &&\r\n        self.participantFilterOptions.indexOf(status) === -1\r\n      ) {\r\n        self.participantFilterOptions.push(status);\r\n      }\r\n    });\r\n  });\r\n\r\n  self.applyStoredFilters();\r\n  self.createSubscribersForSelectedFilters();\r\n};\r\n\r\nCourseParticipantsList.prototype.addAnonOptions = function() {\r\n  var self = this;\r\n  self.anonymousParticipantsFilterOptions.removeAll();\r\n\r\n  self.anonymousParticipantsFilterOptions.push('Alle');\r\n\r\n  self.applyStoredFilters();\r\n  self.createSubscribersForSelectedFilters();\r\n};\r\n\r\nCourseParticipantsList.prototype.filterParticipants = function() {\r\n  var self = this;\r\n  var filteredList = self.participants();\r\n\r\n  var participantFilter = self.selectedFilterParticipant();\r\n  if (\r\n    participantFilter &&\r\n    participantFilter !== self.participantFilterOptions()[0]\r\n  ) {\r\n    filteredList = ko.utils.arrayFilter(filteredList, function(participant) {\r\n      var filter = '';\r\n      participant.StatusTexts().forEach(function(status) {\r\n        if (status === participantFilter) {\r\n          filter = status;\r\n        }\r\n      });\r\n      return filter;\r\n    });\r\n  }\r\n\r\n  self.numberOfShowingParticipants(filteredList.length);\r\n  return filteredList;\r\n};\r\n\r\nCourseParticipantsList.prototype.filterAnonymousParticipants = function() {\r\n  var self = this;\r\n  var filteredAnonymousParticipantsList = self.anonymousParticipants();\r\n\r\n  var anonymousParticipantsFilter = self.selectedFilterAnonymousParticipants();\r\n  if (\r\n    anonymousParticipantsFilter &&\r\n    anonymousParticipantsFilter !== self.anonymousParticipantsFilterOptions()[0]\r\n  ) {\r\n    filteredAnonymousParticipantsList = ko.utils.arrayFilter(\r\n      filteredAnonymousParticipantsList,\r\n      function(anon) {\r\n        return anon.MobilePhone === anonymousParticipantsFilter;\r\n      }\r\n    );\r\n  }\r\n\r\n  self.numberOfShowingAnonymousParticipants(\r\n    filteredAnonymousParticipantsList.length\r\n  );\r\n  return filteredAnonymousParticipantsList;\r\n};\r\nCourseParticipantsList.prototype.getCurrentTime = function(input) {\r\n  var now = new Date(new Date());\r\n\r\n  input(\r\n    now.getHours() +\r\n      ':' +\r\n      (now.getMinutes().toString().length === 1 ? '0' : '') +\r\n      now.getMinutes()\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.getTimeFromDate = function(newDate) {\r\n  if (newDate === null) return '';\r\n\r\n  var today = new Date(newDate);\r\n\r\n  return (\r\n    today.getHours() +\r\n    ':' +\r\n    (today.getMinutes().toString().length === 1 ? '0' : '') +\r\n    today.getMinutes()\r\n  );\r\n};\r\n\r\nCourseParticipantsList.prototype.sortParticipants = function(header) {\r\n  var self = this;\r\n\r\n  if (self.activeSort === header) {\r\n    header.asc = !header.asc;\r\n  } else {\r\n    self.activeSort = header;\r\n  }\r\n  var currentSorting = self.activeSort.asc ? self.compareAsc : self.compareDesc;\r\n  var key = header.sortKey;\r\n  switch (key) {\r\n    case 'name':\r\n      self.participants.sort(currentSorting.bind('Name'));\r\n      break;\r\n  }\r\n};\r\n\r\nCourseParticipantsList.prototype.sortAnonymousParticipants = function(header) {\r\n  var self = this;\r\n\r\n  if (self.activeSort === header) {\r\n    header.asc = !header.asc;\r\n  } else {\r\n    self.activeSort = header;\r\n  }\r\n  var currentSorting = self.activeSort.asc ? self.compareAsc : self.compareDesc;\r\n  var key = header.sortKey;\r\n  switch (key) {\r\n    case 'number':\r\n      self.anonymousParticipants.sort(currentSorting.bind('number'));\r\n      break;\r\n    case 'in':\r\n      self.anonymousParticipants.sort(currentSorting.bind('number'));\r\n      break;\r\n    case 'out':\r\n      self.anonymousParticipants.sort(currentSorting.bind('number'));\r\n      break;\r\n  }\r\n};\r\n\r\nCourseParticipantsList.prototype.compareAsc = function(a, b) {\r\n  return a[this] < b[this]\r\n    ? -1\r\n    : a[this] > b[this]\r\n      ? 1\r\n      : a[this] == b[this]\r\n        ? 0\r\n        : 0;\r\n};\r\n\r\nCourseParticipantsList.prototype.compareDesc = function(b, a) {\r\n  return a[this] < b[this]\r\n    ? -1\r\n    : a[this] > b[this]\r\n      ? 1\r\n      : a[this] == b[this]\r\n        ? 0\r\n        : 0;\r\n};\r\n\r\nmodule.exports = CourseParticipantsList;\r\n","module.exports = \"<div class=\\\"course-participants-list\\\" data-bind=\\\"useElement: true\\\">\\r\\n\\r\\n  <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoadingSequenceInfo()\\\" style=\\\"margin-top:20px;\\\"></div>\\r\\n  <div class=\\\"sequence-details-block\\\" data-bind=\\\"visible: !isLoadingSequenceInfo()\\\">\\r\\n    <div>\\r\\n      <div class=\\\"row\\\" style=\\\"margin-bottom: 20px;\\\">\\r\\n        <div class=\\\"date-list columns large-4\\\" data-bind=\\\"foreach: sequenceInfo().DateList\\\">\\r\\n          <div>\\r\\n            <span class=\\\"icon icon-calendar\\\" style=\\\"margin-right:5px\\\"></span>\\r\\n            <span data-bind=\\\"text: Date\\\"></span>\\r\\n          </div>\\r\\n          <div>\\r\\n            <span class=\\\"icon icon-clock\\\" style=\\\"margin-right:5px\\\"></span>\\r\\n            <span data-bind=\\\"text: Time\\\"></span>\\r\\n          </div>\\r\\n        </div>\\r\\n        <div class=\\\"columns large-2 pull-left\\\">\\r\\n          <span class=\\\"icon icon-pin\\\" style=\\\"margin-right:5px\\\"></span>\\r\\n          <span data-bind=\\\"text: sequenceInfo().City\\\"></span>\\r\\n        </div>\\r\\n      </div>\\r\\n      </ul>\\r\\n      <ul class=\\\"details-list\\\">\\r\\n        <li><span>KursId: </span><span data-bind=\\\"text: sequenceInfo().CourseId\\\"></span></li>\\r\\n        <li><span>SekvensID: </span><span data-bind=\\\"text: sequenceInfo().SequenceId\\\"></span></li>\\r\\n        <li><span>Kursansvarlig: </span><span data-bind=\\\"text: sequenceInfo().CourseAdmin\\\"></span></li>\\r\\n        <li>\\r\\n          <span>Kursleder: </span>\\r\\n          <!-- ko foreach: sequenceInfo().Lecturers -->\\r\\n          <span data-bind=\\\"text: $data\\\"></span>\\r\\n          <!-- /ko -->\\r\\n        </li>\\r\\n        <li><span>Kode for innsjekking: </span><span data-bind=\\\"text: sequenceInfo().CheckInCode\\\"></span></li>\\r\\n        <li><span>Kode for utsjekking: </span><span data-bind=\\\"text: sequenceInfo().CheckOutCode\\\"></span></li>\\r\\n      </ul>\\r\\n    </div>\\r\\n\\r\\n\\r\\n    <button type=\\\"button\\\" class=\\\"expandable-button\\\" data-bind=\\\"visible: hasMoreSequences() === true, click: function(){ showMoreSequences() === true ? showMoreSequences(false) : showMoreSequences(true) }\\\">\\r\\n      <span data-bind=\\\"visible: showMoreSequences()\\\">-</span>\\r\\n      <span data-bind=\\\"visible: !showMoreSequences()\\\">+</span>\\r\\n      <span>Andre sekvenser samme dag</span>\\r\\n    </button>\\r\\n    <div class=\\\"row\\\" data-bind=\\\"visible: showMoreSequences() === true\\\">\\r\\n      <div class=\\\"columns large-12\\\">\\r\\n        <ul class=\\\"row table-header\\\">\\r\\n          <li class=\\\"columns large-4\\\"><span>Tittel</span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span>KursID</span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span>SekvensID</span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span>Dato</span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span>Sted</span></li>\\r\\n        </ul>\\r\\n      </div>\\r\\n      <div class=\\\"columns large-12 table-body\\\">\\r\\n        <!-- ko foreach: sequenceInfo().SequencesSameDay -->\\r\\n        <ul class=\\\"row\\\">\\r\\n          <li class=\\\"columns large-4\\\">\\r\\n            <a href=\\\"#\\\" data-bind=\\\"text: $data.Title, attr: { href: ($parent.getUrlParticipantsBase() + Url) }\\\"></a>\\r\\n          </li>\\r\\n          <li class=\\\"columns large-2\\\"><span data-bind=\\\"text: !!$data.CourseId ? $data.CourseId : '-'\\\"></span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span data-bind=\\\"text: !!$data.SequenceId ? $data.SequenceId : '-'\\\"></span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span data-bind=\\\"text: !!$data.FromDate ? $parent.getNorwegianDate($data.FromDate) : '-'\\\"></span></li>\\r\\n          <li class=\\\"columns large-2\\\"><span data-bind=\\\"text: !!$data.City ? $data.City : '-'\\\"></span></li>\\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n\\r\\n  <div data-bind=\\\"component: { name: 'course-registration-feedback-box', params: { errorMessage: infoMessage }}\\\"></div>\\r\\n  <div data-bind=\\\"visible: !isModalActive() && hasError(), component: { name: 'course-registration-feedback-box', params: { errorMessage: errorMessage }}\\\"></div>\\r\\n\\r\\n  <div class=\\\"row content-margin-bottom-small\\\">\\r\\n    <div class=\\\"columns large-9\\\">\\r\\n      <h2>Kursdeltagere</h2>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row tools-bar\\\">\\r\\n    <div class=\\\"columns large-3 pull-left\\\">\\r\\n      <label class=\\\"form-label\\\">Status\\r\\n        <select class=\\\"form-select-wrapper form-select-wrapper-registration\\\" data-bind=\\\"options: participantFilterOptions, value: selectedFilterParticipant\\\"></select>\\r\\n      </label>\\r\\n    </div>\\r\\n    <div class=\\\"columns large-3 pull-right\\\" style=\\\"text-align: right\\\">\\r\\n      <label>\\r\\n        <input type=\\\"checkbox\\\" data-bind=\\\"checked: enableAutoUpdate\\\">\\r\\n        Automatisk oppdatering\\r\\n      </label>\\r\\n      <label>\\r\\n        <input type=\\\"checkbox\\\" data-bind=\\\"checked: enableBatchEditMode\\\">\\r\\n        Aktiver masseredigering\\r\\n      </label>\\r\\n      <button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" data-bind=\\\"visible: enableBatchEditMode, click: function() { toggleModal(); }, disable: numberOfSelectedParticipants() === 0\\\">Rediger\\r\\n        valgte</button>\\r\\n      <button class=\\\"btn btn-primary\\\" type=\\\"button\\\" data-bind=\\\"visible: !enableAutoUpdate(), click: function() { updateParticipantLists(); }\\\">Oppdater</button>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row quality-control-admin-table-actions\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <span class=\\\"participants-list-hits\\\">Antall påmeldte: <span data-bind=\\\"text: numberOfParticipants()\\\"></span> /\\r\\n      </span>\\r\\n      <span class=\\\"participants-list-hits\\\">Ikke innregistrert: <span data-bind=\\\"text: numberOfMissingStartTime()\\\"></span>\\r\\n        / </span>\\r\\n      <span class=\\\"participants-list-hits\\\">Ikke utregistrert: <span data-bind=\\\"text: numberOfMissingEndTime()\\\"></span></span>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <div class=\\\"rn-table-container rnq-admin\\\">\\r\\n        <ul class=\\\"rn-table-header-row narrow\\\">\\r\\n          <!-- ko if: enableBatchEditMode -->\\r\\n          <div class=\\\"floating-checkbox\\\">\\r\\n            <input type=\\\"checkbox\\\" data-bind=\\\"checked: checkAllParticipants\\\">\\r\\n          </div>\\r\\n          <!-- /ko -->\\r\\n          <!-- ko foreach: listHeaders -->\\r\\n          <li class=\\\"rn-table-cell-title columns\\\" data-bind=\\\"click: $parent.sortParticipants.bind($parent), css: addClass\\\">\\r\\n            <span data-bind=\\\"text: title\\\"></span>\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n        </ul>\\r\\n        <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoading\\\" style=\\\"margin-top:20px;\\\"></div>\\r\\n        <div data-bind=\\\"visible: noParticipantsFound\\\" style=\\\"text-align:center;font-style:italic;margin-top:20px;\\\"><span>Fant\\r\\n            ingen registrerte deltakere på denne sekvensen</span></div>\\r\\n        <!-- ko foreach: filteredParticipants -->\\r\\n        <ul class=\\\"rn-table-content-row narrow vertical-center can-auto-update\\\">\\r\\n          <li class=\\\"rn-table-content-item columns large-4\\\">\\r\\n            <span data-bind=\\\"if: !$parent.enableBatchEditMode()\\\">\\r\\n              <span data-bind=\\\"text: Name\\\"></span>\\r\\n            </span>\\r\\n            <label data-bind=\\\"if: $parent.enableBatchEditMode()\\\" style=\\\"display: inline;\\\">\\r\\n              <input type=\\\"checkbox\\\" data-bind=\\\"checked: $parent.selectedParticipantsToEdit, checkedValue: $data\\\">\\r\\n              <span data-bind=\\\"text: Name\\\"></span>\\r\\n            </label>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: ParticipantActorId\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <input class=\\\"can-auto-update\\\" style=\\\"width: 100%;margin-bottom: 5px;\\\" data-bind=\\\"value: MobileNumber, attr: { disabled: ParticipantIsLoading() || $parent.enableBatchEditMode()}, event: { keyup: $parent.postOnKey, blur: function(){$parent.onMobileNumberChange($data)} }\\\" />\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <!-- ko foreach: Attendance -->\\r\\n            <div class=\\\"check-in-time\\\" style=\\\"margin-bottom: 5px;\\\">\\r\\n              <input class=\\\"can-auto-update\\\" maxlength=\\\"5\\\" data-bind=\\\"value: $data.CheckInTime, attr: { disabled: ($parent.ParticipantIsLoading() || $parents[1].enableBatchEditMode()) }, event: { keyup: $parents[1].postOnKey, blur: function(){ $parents[1].onCheckInTimeChange($parent, $data)} }\\\" />\\r\\n              <button class=\\\"icon icon-timeunit\\\" data-bind=\\\"disable: $parent.ParticipantIsLoading() || $parents[1].enableBatchEditMode(), click: function(){ $parents[1].getCurrentTime($data.CheckInTime); $parents[1].onCheckInTimeChange($parent, $data); }\\\"></button>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <!-- ko foreach: Attendance -->\\r\\n            <div class=\\\"check-out-time\\\" style=\\\"margin-bottom: 5px;\\\">\\r\\n              <input class=\\\"can-auto-update\\\" maxlength=\\\"5\\\" data-bind=\\\"value: $data.CheckOutTime, attr: { disabled: ($parent.ParticipantIsLoading() || $parents[1].enableBatchEditMode()) }, event: { keyup: $parents[1].postOnKey, blur: function(){$parents[1].onCheckOutTimeChange($parent, $data)} }\\\" />\\r\\n              <button class=\\\"icon icon-timeunit\\\" data-bind=\\\"disable: $parent.ParticipantIsLoading() || $parents[1].enableBatchEditMode(), click: function(){ $parents[1].getCurrentTime($data.CheckOutTime); $parents[1].onCheckOutTimeChange($parent, $data) }\\\"></button>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-2\\\">\\r\\n            <!-- ko foreach: StatusTexts() -->\\r\\n            <div class=\\\"status-texts\\\" data-bind=\\\"css: {'hidden': $data === 'Ikke innregistrert' || $data === 'Ikke utregistrert'}\\\">\\r\\n              <div data-bind=\\\"visible: $data === 'Ikke innregistrert' || $data === 'Ikke utregistrert' || $data === 'Manuell godkjenning'\\\"\\r\\n                class=\\\"status-icon status-warning\\\">!</div>\\r\\n              <div data-bind=\\\"visible: $data === 'Ikke godkjent'\\\" class=\\\"status-icon status-warning\\\">—</div>\\r\\n              <div data-bind=\\\"visible: $data === 'Godkjent' || $data === 'Godkjent med reduksjon'\\\" class=\\\"status-icon has-fonticon status-ok\\\"><span\\r\\n                  class=\\\"icon icon-check\\\"></span></div>\\r\\n              <span data-bind=\\\"text: $data\\\"></span>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-2\\\" style=\\\"text-align: right;\\\">\\r\\n            <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: ParticipantIsLoading() && !$parent.isModalActive()\\\"></div>\\r\\n            <button type=\\\"button\\\" data-bind=\\\"text: 'Rediger', click: function(){ $parent.toggleModal($data) }, disable: $parent.enableBatchEditMode() || $data.ParticipantIsLoading()\\\"\\r\\n              class=\\\"text-button\\\"></button>\\r\\n          </li>\\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <hr>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row content-margin-bottom-small\\\">\\r\\n    <div class=\\\"columns large-9\\\">\\r\\n      <h2>Anonyme Registreringer</h2>\\r\\n      <p>Oppdater telefonnummeret som er registrert under for gjeldende person i deltakerlisten.</p>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12\\\">\\r\\n      <div class=\\\"rn-table-container rnq-admin\\\">\\r\\n        <ul class=\\\"rn-table-header-row narrow\\\">\\r\\n          <!-- ko foreach: anonymousListHeaders -->\\r\\n          <li class=\\\"rn-table-cell-title columns\\\" data-bind=\\\"click: $parent.sortAnonymousParticipants.bind($parent), css: addClass\\\">\\r\\n            <span data-bind=\\\"text: title\\\"></span>\\r\\n          </li>\\r\\n          <!-- /ko -->\\r\\n        </ul>\\r\\n        <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isAnonLoading\\\" style=\\\"margin-top:20px;\\\"></div>\\r\\n        <div data-bind=\\\"visible: noAnonsFound\\\" style=\\\"text-align:center;font-style:italic;margin-top:20px;\\\"><span>Fant\\r\\n            ingen anonyme registreringer på denne sekvensen</span></div>\\r\\n        <!-- ko foreach: filteredAnonymousParticipants -->\\r\\n        <ul class=\\\"rn-table-content-row narrow vertical-center\\\" data-bind=\\\"css: { registeredUser: IsRegisteredUser }\\\">\\r\\n          <li class=\\\"rn-table-content-item columns large-5\\\"></li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: MobileNumber\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: CheckInTime\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-1\\\">\\r\\n            <span data-bind=\\\"text: CheckOutTime\\\"></span>\\r\\n          </li>\\r\\n          <li class=\\\"rn-table-content-item columns large-4\\\"></li>\\r\\n        </ul>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n\\r\\n<div data-bind=\\\"component: { name: 'participant-details-modal', params: {\\r\\n\\tparticipants: selectedParticipantsToEdit(),\\r\\n\\tpostUrl: getPostParticipantUrl(),\\r\\n\\tisModalActive: isModalActive,\\r\\n\\tenableBatchEditMode: enableBatchEditMode()\\r\\n}}\\\"></div>\\r\\n\"","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper'),\r\n  cloneDeep = require('lodash/cloneDeep');\r\n\r\nfunction ParticipantDetailsModal(params) {\r\n  var self = this;\r\n\r\n  self.isLoading = ko.observable(false);\r\n  self.errorMessage = ko.observable();\r\n\r\n  self.selectedParticipantsToEdit = params.participants;\r\n\r\n  self.postUrl = params.postUrl;\r\n  self.isModalActive = params.isModalActive;\r\n  self.enableBatchEditMode = params.enableBatchEditMode;\r\n\r\n  self.hasError = ko.computed(function() {\r\n    return !!self.errorMessage() && self.errorMessage().length > 0;\r\n  });\r\n\r\n  self.isIE = /*@cc_on!@*/ false || !!document.documentMode;\r\n  self.isEdge = !self.isIE && !!window.StyleMedia;\r\n}\r\n\r\nParticipantDetailsModal.prototype.hasErrors = function() {\r\n  var self = this;\r\n  var approvedHours = self.selectedParticipantsToEdit[0].ApprovedHours;\r\n  var e = false;\r\n  approvedHours.forEach(function(x) {\r\n    if (x.ApprovedHours.hasError()) {\r\n      e = true;\r\n    }\r\n  });\r\n  return e;\r\n};\r\n\r\nParticipantDetailsModal.prototype.confirmChanges = function() {\r\n  var self = this;\r\n  self.errorMessage('');\r\n  var input = {};\r\n\r\n  if (self.hasErrors()) {\r\n    self.errorMessage('Please correct marked fields before saving');\r\n  } else {\r\n    self.isLoading(true);\r\n    var approvedHours = cloneDeep(\r\n      self.selectedParticipantsToEdit[0].ApprovedHours\r\n    );\r\n    approvedHours.forEach(function(hours) {\r\n      var val = hours.ApprovedHours();\r\n      hours.ApprovedHours = parseFloat(\r\n        typeof val === 'string' ? val.replace(',', '.') : val\r\n      );\r\n    });\r\n\r\n    input = {\r\n      ApprovedHours: approvedHours,\r\n      Comment: self.selectedParticipantsToEdit[0].Comment\r\n    };\r\n\r\n    APIHelper.QcPost(\r\n      self.postUrl,\r\n      input,\r\n      function(response) {\r\n        if (!response.SavedData) {\r\n          self.errorMessage(response.ErrorMessage);\r\n        } else {\r\n          self.selectedParticipantsToEdit[0].StatusTexts(\r\n            response.Participant.StatusTexts\r\n          );\r\n          self.selectedParticipantsToEdit[0].ApprovedHours.forEach(function(\r\n            hours\r\n          ) {\r\n            var index = self.selectedParticipantsToEdit[0].ApprovedHours.indexOf(\r\n              hours\r\n            );\r\n            var val = response.Participant.ApprovedHours[index].ApprovedHours;\r\n            if (self.isIE || self.isEdge) {\r\n              val = val.toLocaleString('nb-NO');\r\n            }\r\n            hours.ApprovedHours(val);\r\n          });\r\n          self.isModalActive(false);\r\n        }\r\n        self.isLoading(false);\r\n      },\r\n      function(response) {\r\n        self.errorMessage(response.ErrorMessage);\r\n        self.isLoading(false);\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = ParticipantDetailsModal;\r\n","module.exports = \"<div class=\\\"participant-details-modal modal\\\" data-bind=\\\"if: isModalActive(), css: { 'is-active': isModalActive }\\\">\\r\\n    <!-- ko if: !!selectedParticipantsToEdit[0] -->\\r\\n    <div class=\\\"close\\\" data-bind=\\\"click: function(){ isModalActive(false) }\\\"><span class=\\\"icon-close\\\"></span></div>\\r\\n    \\r\\n     <!-- ko if: !enableBatchEditMode -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12\\\" style=\\\"text-align:center;\\\">\\r\\n            <h2 data-bind=\\\"text: selectedParticipantsToEdit[0].Name\\\"></h2>    \\r\\n            <span data-bind=\\\"visible: !enableBatchEditMode\\\">Mobil: \\r\\n                <!-- ko if: selectedParticipantsToEdit[0].MobileNumber-->\\r\\n                <span data-bind=\\\"text: selectedParticipantsToEdit[0].MobileNumber\\\"></span>\\r\\n                <!-- /ko -->\\r\\n\\r\\n                <!-- ko ifnot: selectedParticipantsToEdit[0].MobileNumber-->\\r\\n                <span style=\\\"font-style: italic;\\\">Ikke registrert</span>\\r\\n                <!-- /ko -->\\r\\n            </span>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: enableBatchEditMode -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <h2 data-bind=\\\"text: 'Rediger flere ' + '(' + selectedParticipantsToEdit.length + ')'\\\"></h2>\\r\\n            <p style=\\\"text-align:center;\\\">Opplysningene vil bli lagret for samtlige av de valgte kursdeltakerne når du endrer verdiene i feltene.</p>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"row time-stamps\\\">\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <h3>Inn og- utregistrering</h3>\\r\\n        </div>\\r\\n\\r\\n        <!-- ko foreach: selectedParticipantsToEdit[0].Attendance -->\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <div class=\\\"columns large-2 pull-left no-padding\\\">\\r\\n                <h4>\\r\\n                    <span>Dag <span data-bind=\\\"text: $data.DayInSequence\\\"></span></span>\\r\\n                </h4>\\r\\n            </div>\\r\\n\\r\\n            <!-- ko if: $parent.enableBatchEditMode -->\\r\\n            <div class=\\\"columns large-4 pull-left\\\">\\r\\n                <input maxlength=\\\"5\\\" type=\\\"text\\\" data-bind=\\\"disable: $parent.selectedParticipantsToEdit[0].ParticipantIsLoading(), value: $data.CheckInTime, event: { keyup: $parents[1].postOnKey, blur: function(){ $parents[1].onCheckInTimeChange($parent.selectedParticipantsToEdit[0], $data)} }\\\">\\r\\n                <button class=\\\"icon icon-timeunit\\\" data-bind=\\\"disable: $parent.selectedParticipantsToEdit[0].ParticipantIsLoading(), click: function(){ $parents[1].getCurrentTime($data.CheckInTime); $parents[1].onCheckInTimeChange($parent.selectedParticipantsToEdit[0], $data); }\\\"></button>\\r\\n            </div>\\r\\n            <div class=\\\"columns large-4 pull-left\\\">\\r\\n                <input maxlength=\\\"5\\\" type=\\\"text\\\"data-bind=\\\"disable: $parent.selectedParticipantsToEdit[0].ParticipantIsLoading(), value: $data.CheckOutTime, event: { keyup: $parents[1].postOnKey, blur: function(){ $parents[1].onCheckOutTimeChange($parent.selectedParticipantsToEdit[0], $data)} }\\\">\\r\\n                <button class=\\\"icon icon-timeunit\\\" data-bind=\\\"disable: $parent.selectedParticipantsToEdit[0].ParticipantIsLoading(), click: function(){ $parents[1].getCurrentTime($data.CheckOutTime); $parents[1].onCheckOutTimeChange($parent.selectedParticipantsToEdit[0], $data); }\\\"></button>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n\\r\\n            <!-- ko if: !$parent.enableBatchEditMode -->\\r\\n            <div class=\\\"columns large-4 pull-left\\\">\\r\\n                <span class=\\\"text-label\\\" data-bind=\\\"text: !!$data.CheckInTime() ? $data.CheckInTime() : 'mangler innregistrering'\\\"></span>\\r\\n            </div>\\r\\n            <div class=\\\"columns large-4 pull-left\\\">\\r\\n                <span class=\\\"text-label\\\" data-bind=\\\"text: !!$data.CheckOutTime() ? $data.CheckOutTime() : 'mangler utregistrering'\\\"></span>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n\\r\\n        </div>\\r\\n        \\r\\n        <!-- /ko -->\\r\\n        <div class=\\\"columns large-2 pull-right\\\">\\r\\n            <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: selectedParticipantsToEdit[0].ParticipantIsLoading()\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\" data-bind=\\\"if: $parent.hasError()\\\">\\r\\n        <div class=\\\"columns large-12 small-centered pl-center\\\">\\r\\n            <div class=\\\"message is-error note\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">!</div>\\r\\n                </div>\\t\\r\\n                <div class=\\\"message-text\\\" data-bind=\\\"html: $parent.errorMessage\\\"></div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\" data-bind=\\\"if: $parent.hasSuccess()\\\">\\r\\n        <div class=\\\"columns large-12 small-centered pl-center\\\">\\r\\n            <div class=\\\"message is-success note\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">\\r\\n                        <div class=\\\"icon icon-check\\\"></div>\\r\\n                    </div>\\r\\n                </div>\\t\\r\\n                <div class=\\\"message-text\\\" data-bind=\\\"html: $parent.successMessage\\\"></div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <!-- ko if: !enableBatchEditMode -->\\r\\n    <div class=\\\"row approved-hours\\\">\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <h3>Godkjente timer</h3>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"columns large-6\\\">\\r\\n            <h4 data-bind=\\\"text: 'Regnskapsfører:'\\\"></h4>\\r\\n            <!-- ko foreach: selectedParticipantsToEdit[0].ApprovedHours -->\\r\\n            <!-- ko if: $data.NormalHoursForCategory.AuthorizationType === 1 -->\\r\\n            <div class=\\\"columns large-12 no-padding\\\">\\r\\n                <label class=\\\"form-label\\\" data-bind=\\\"{attr: {for: $data.NormalHoursForCategory.AuthorizationType + '-' + $data.NormalHoursForCategory.DisplayName}}\\\">\\r\\n                            <span data-bind=\\\"text: $data.NormalHoursForCategory.Name\\\"></span>\\r\\n                        </label>\\r\\n                <input class=\\\"form-input\\\" type=\\\"number\\\" step=\\\"0.5\\\" max=\\\"$data.NormalHoursForCategory.Hours\\\" min=\\\"0\\\" data-bind=\\\"decimal, value: $data.ApprovedHours, attr: {id: $data.NormalHoursForCategory.AuthorizationType + '-' + $data.NormalHoursForCategory.DisplayName}, valueUpdate: 'blur', css: { 'has-error': $data.ApprovedHours.hasError, 'is-successful': $data.ApprovedHours.isSuccessful }\\\"\\r\\n                />\\r\\n                <span>\\r\\n                <span>av totalt</span>\\r\\n                <span data-bind=\\\"text: $data.NormalHoursForCategory.Hours + ' timer'\\\"></span>\\r\\n                </span>\\r\\n            </div>\\r\\n            <div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !$data.ApprovedHours.hasError()}\\\">\\r\\n                <div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: $data.ApprovedHours.hasError }\\\">\\r\\n                    <span data-bind=\\\"text: $data.ApprovedHours.validationMessage\\\"></span>\\r\\n                </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"columns large-6\\\">\\r\\n            <h4 data-bind=\\\"text: 'Revisor:'\\\"></h4>\\r\\n            <!-- ko foreach: selectedParticipantsToEdit[0].ApprovedHours -->\\r\\n            <!-- ko if: $data.NormalHoursForCategory.AuthorizationType === 2 -->\\r\\n            <div class=\\\"columns large-12 no-padding\\\">\\r\\n                <label class=\\\"form-label\\\" data-bind=\\\"{attr: {for: $data.NormalHoursForCategory.AuthorizationType + '-' + $data.NormalHoursForCategory.DisplayName}}\\\">\\r\\n                            <span data-bind=\\\"text: $data.NormalHoursForCategory.Name\\\"></span>\\r\\n                        </label>\\r\\n                <input class=\\\"form-input\\\" type=\\\"number\\\" step=\\\"0.5\\\" max=\\\"$data.NormalHoursForCategory.Hours\\\" min=\\\"0\\\" data-bind=\\\"decimal, value: $data.ApprovedHours, attr: {id: $data.NormalHoursForCategory.AuthorizationType + '-' + $data.NormalHoursForCategory.DisplayName}, valueUpdate: 'blur', css: { 'has-error': $data.ApprovedHours.hasError, 'is-successful': $data.ApprovedHours.isSuccessful }\\\"\\r\\n                />\\r\\n                <span>\\r\\n                            <span>av totalt</span>\\r\\n                <span data-bind=\\\"text: $data.NormalHoursForCategory.Hours + ' timer'\\\"></span>\\r\\n                </span>\\r\\n            </div>\\r\\n            <div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !$data.ApprovedHours.hasError() }\\\">\\r\\n                <div class=\\\"error-box pointer-top\\\" data-bind=\\\"css: { active: $data.ApprovedHours.hasError }\\\">\\r\\n                    <span data-bind=\\\"text: $data.ApprovedHours.validationMessage\\\"></span>\\r\\n                </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <!-- ko if: !enableBatchEditMode -->\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-12\\\">\\r\\n            <label class=\\\"form-label\\\">Kommentar\\r\\n                <textarea data-bind=\\\"value: selectedParticipantsToEdit[0].Comment\\\" />\\r\\n            </label>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-6\\\">\\r\\n            <span data-bind=\\\"visible: !enableBatchEditMode\\\">\\r\\n                <button class=\\\"btn btn-secondary\\\" data-bind=\\\"click: function(){  isModalActive(false) }\\\">Avbryt</button>\\r\\n                <button class=\\\"btn btn-primary\\\" data-bind=\\\"click: confirmChanges, attr: { disabled : isLoading || hasErrors() }\\\">Lagre</button>\\r\\n            </span>\\r\\n            <span data-bind=\\\"visible: enableBatchEditMode\\\">\\r\\n                <button class=\\\"btn btn-secondary\\\" data-bind=\\\"click: function(){  isModalActive(false) }\\\">Lukk</button>\\r\\n            </span>\\r\\n        </div>\\r\\n        <div class=\\\"columns large-6\\\">\\r\\n            <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoading\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\" data-bind=\\\"if: hasError\\\">\\r\\n        <div class=\\\"columns small-12 medium-8 small-centered pl-center\\\">\\r\\n            <div class=\\\"message is-error note\\\">\\r\\n                <div class=\\\"message-icon\\\">\\r\\n                    <div class=\\\"info-circle\\\">!</div>\\r\\n                </div>\\r\\n                <div class=\\\"message-text\\\" data-bind=\\\"html: errorMessage\\\"></div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n</div>\"","var ko = require('knockout');\r\n\r\nfunction CourseRegistrationFeedbackBox(params) {\r\n  var self = this;\r\n\r\n  self.errorMessage = params.errorMessage;\r\n  self.hasError = ko.computed(function() {\r\n    return !!self.errorMessage() && self.errorMessage().length > 0;\r\n  });\r\n}\r\n\r\nCourseRegistrationFeedbackBox.prototype.closeError = function() {\r\n  this.errorMessage('');\r\n};\r\n\r\nmodule.exports = CourseRegistrationFeedbackBox;\r\n","module.exports = \"<div class=\\\"row\\\" data-bind=\\\"if: hasError\\\" >\\r\\n    <div class=\\\"columns small-12 medium-8 small-centered pl-center\\\">\\r\\n        <div class=\\\"message is-warning note\\\">\\r\\n            <div class=\\\"message-icon\\\">\\r\\n                <div class=\\\"info-circle\\\">!</div>\\r\\n            </div>\\t\\r\\n            <div class=\\\"message-text\\\" data-bind=\\\"html: errorMessage\\\"></div>\\r\\n            <a role=\\\"button\\\" class=\\\"message-close\\\" href=\\\"#\\\" data-bind=\\\"click: closeError\\\">\\r\\n                <span class=\\\"icon-close\\\"></span>\\r\\n            </a>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\"","function SequenceDetailsBlock(params) {\r\n  var self = this;\r\n\r\n  self.sequenceInfo = params.sequenceInfo;\r\n}\r\n\r\nmodule.exports = SequenceDetailsBlock;\r\n","module.exports = \"<div class=\\\"sequence-details-block\\\">\\r\\n    <div class=\\\"\\\">\\r\\n        <ul>\\r\\n            <li><span>KursId:</span><span>VALUE</span></li>\\r\\n            <li><span>SekvensID:</span><span>VALUE</span></li>\\r\\n            <li><span>Kursansvarlig:</span><span>VALUE</span></li>\\r\\n            <li><span>Kursleder:</span><span>VALUE</span></li>\\r\\n            <li><span>Kode for innsjekking:</span><span>VALUE</span></li>\\r\\n            <li><span>Kode for utsjekking:</span><span>VALUE</span></li>\\r\\n        </ul>\\r\\n    </div>\\r\\n\\r\\n    <a href=\\\"#\\\">Andre sekvenser samme dag</a>\\r\\n\\r\\n    <div class=\\\"\\\">\\r\\n        <ul>\\r\\n            <li>\\r\\n                <ul>\\r\\n                    <li><a href=\\\"#\\\">NAVN NAVNESEN</a></li>\\r\\n                    <li><span>KURSID</span></li>\\r\\n                    <li><span>SEKVENSID</span></li>\\r\\n                    <li><span>DATO</span></li>\\r\\n                    <li><span>STED</span></li>\\r\\n                </ul>\\r\\n            </li>\\r\\n        </ul>\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout');\r\n\r\nfunction ReportPage(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.reports = params.data;\r\n\r\n  this.errorMessage = ko.observable();\r\n  this.hasSelectedReport = ko.observable(false);\r\n\r\n  this.reportsOptions = ko.observableArray();\r\n  this.selectedReport = ko.observable();\r\n  this.addReportsOptions();\r\n\r\n  this.hotels = ko.observableArray();\r\n  this.lecturers = ko.observableArray();\r\n\r\n  this.showCourseId = ko.observable(false);\r\n  this.showSequenceId = ko.observable(false);\r\n  this.showEventId = ko.observable(false);\r\n  this.showHotelPicker = ko.observable(false);\r\n  this.showLecturerPicker = ko.observable(false);\r\n  this.showDateFrom = ko.observable(false);\r\n  this.showDateTo = ko.observable(false);\r\n\r\n  this.baseUrl = ko.observable('');\r\n  this.reportUrl = ko.observable();\r\n\r\n  this.courseId = ko.observable();\r\n  this.sequenceId = ko.observable();\r\n  this.eventId = ko.observable();\r\n\r\n  this.hotelOptions = ko.observableArray();\r\n  this.selectedHotel = ko.observable();\r\n\r\n  this.lecturerOptions = ko.observableArray();\r\n  this.selectedLecturer = ko.observable();\r\n\r\n  this.filterFromDate = ko.observable(this.getShortDate(new Date()));\r\n  this.filterToDate = ko.observable(this.getShortDate(new Date()));\r\n\r\n  this.courseId.subscribe(this.updateUrl.bind(this));\r\n  this.sequenceId.subscribe(this.updateUrl.bind(this));\r\n  this.eventId.subscribe(this.updateUrl.bind(this));\r\n  this.selectedHotel.subscribe(this.updateUrl.bind(this));\r\n  this.selectedLecturer.subscribe(this.updateUrl.bind(this));\r\n  this.filterFromDate.subscribe(this.updateUrl.bind(this));\r\n  this.filterToDate.subscribe(this.updateUrl.bind(this));\r\n}\r\n\r\nReportPage.prototype.addReportsOptions = function() {\r\n  var self = this;\r\n\r\n  self.reportsOptions.push('Velg rapport');\r\n  self.reports.forEach(function(report) {\r\n    var reportName = report.ReportTypeName;\r\n    if (reportName !== '' && self.reportsOptions.indexOf(reportName) === -1) {\r\n      self.reportsOptions.push(reportName);\r\n    }\r\n  });\r\n  self.selectedReport.subscribe(self.updateReportFields.bind(self));\r\n};\r\n\r\nReportPage.prototype.updateReportFields = function() {\r\n  var self = this;\r\n  if (self.selectedReport() !== 'Velg rapport') {\r\n    self.hasSelectedReport(true);\r\n\r\n    var currentReport;\r\n    self.reports.forEach(function(report) {\r\n      if (report.ReportTypeName === self.selectedReport()) {\r\n        currentReport = report;\r\n      }\r\n    });\r\n\r\n    self.baseUrl(currentReport.ApiUrl);\r\n    self.hotels(currentReport.HotelList);\r\n    self.lecturers(currentReport.LecturerList);\r\n\r\n    if (currentReport.HotelList !== null) {\r\n      self.addHotelOptions(currentReport.HotelList);\r\n    }\r\n    if (currentReport.LecturerList !== null) {\r\n      self.addLecturerOptions(currentReport.LecturerList);\r\n    }\r\n    if(currentReport.ReportTypeName === 'Utvidet KDB rapport'){\r\n      self.showCourseId(currentReport.OptionalCourseId);\r\n      self.showSequenceId(currentReport.OptionalSequenceId);\r\n      self.showEventId(currentReport.OptionalEventId);\r\n    }\r\n    if(currentReport.ReportTypeName !== 'Utvidet KDB rapport'){\r\n      self.showCourseId(currentReport.RequiresCourseId);\r\n      self.showSequenceId(currentReport.RequiresSequenceId);\r\n      self.showEventId(currentReport.RequiresEventId);\r\n    }\r\n    self.showHotelPicker(currentReport.RequiresHotelList);\r\n    self.showLecturerPicker(currentReport.RequiresLecturerList);\r\n    self.showDateFrom(currentReport.RequiresFromDate);\r\n    self.showDateTo(currentReport.RequiresToDate);\r\n  } else {\r\n    self.hasSelectedReport(false);\r\n  }\r\n  self.baseUrl.subscribe(this.updateUrl.bind(this));\r\n};\r\n\r\nReportPage.prototype.addHotelOptions = function(hotelList) {\r\n  var self = this;\r\n  self.hotelOptions.removeAll();\r\n  self.hotelOptions.push('Velg hotell');\r\n  hotelList.forEach(function(hotel) {\r\n    self.hotelOptions.push(hotel.Name);\r\n  });\r\n};\r\n\r\nReportPage.prototype.addLecturerOptions = function(lecturerList) {\r\n  var self = this;\r\n  self.lecturerOptions.removeAll();\r\n  self.lecturerOptions.push('Velg Kursleder');\r\n  lecturerList.forEach(function(lecturer) {\r\n    self.lecturerOptions.push(lecturer.Name);\r\n  });\r\n};\r\n\r\nReportPage.prototype.getShortDate = function(newDate) {\r\n  var today = new Date(newDate);\r\n  var formatted =\r\n    (today.getDate().toString().length === 1\r\n      ? '0' + today.getDate()\r\n      : today.getDate()) +\r\n    '.' +\r\n    ((today.getMonth() + 1).toString().length === 1\r\n      ? '0' + (today.getMonth() + 1)\r\n      : today.getMonth() + 1) +\r\n    '.' +\r\n    today.getFullYear();\r\n  return formatted;\r\n};\r\n\r\nReportPage.prototype.formatDateToIsoDate = function(newdate) {\r\n  var datesplit = newdate.split('.');\r\n  var date = new Date(datesplit[2], datesplit[1] - 1, datesplit[0]);\r\n\r\n  var formatted =\r\n    date.getFullYear() +\r\n    '-' +\r\n    ((date.getMonth() + 1).toString().length === 1\r\n      ? '0' + (date.getMonth() + 1)\r\n      : date.getMonth() + 1) +\r\n    '-' +\r\n    (date.getDate().toString().length === 1\r\n      ? '0' + date.getDate()\r\n      : date.getDate());\r\n  return formatted;\r\n};\r\n\r\nReportPage.prototype.findLecturer = function() {\r\n  var self = this;\r\n  return self.lecturers().find(function(lecturer) {\r\n    return lecturer.Name === self.selectedLecturer();\r\n  });\r\n};\r\n\r\nReportPage.prototype.findHotel = function() {\r\n  var self = this;\r\n  return self.hotels().find(function(hotel) {\r\n    return hotel.Name === self.selectedHotel();\r\n  });\r\n};\r\n\r\nReportPage.prototype.updateUrl = function() {\r\n  var self = this;\r\n\r\n  var hotel = self.hotels() === null ? undefined : self.findHotel();\r\n  var lecturer = self.lecturers() === null ? undefined : self.findLecturer();\r\n\r\n  var qs = '?';\r\n  qs += 'courseId=' + (self.courseId() || '');\r\n  qs += '&sequenceId=' + (self.sequenceId() || '');\r\n  qs += '&eventId=' + (self.eventId() || '');\r\n\r\n  if (hotel && hotel !== '') {\r\n    qs += '&hotel=' + (hotel.CoursePlacePk || '');\r\n  }\r\n  if (lecturer) {\r\n    qs += '&lecturer=' + (lecturer.LecturerPK || '');\r\n  }\r\n\r\n  qs += '&fromDate=' + (self.formatDateToIsoDate(self.filterFromDate()) || '');\r\n  qs += '&toDate=' + (self.formatDateToIsoDate(self.filterToDate()) || '');\r\n\r\n  self.reportUrl(self.baseUrl() + qs);\r\n};\r\n\r\nmodule.exports = ReportPage;\r\n","module.exports = \"<div class=\\\"first-row\\\"></div>\\r\\n<div class=\\\"report-main-content\\\">\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns\\\">\\r\\n            <h2>Generer rapport</h2>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns\\\">\\r\\n          <hr class=\\\"report-hr large-5 medium-6\\\" align=\\\"left\\\">\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\">\\r\\n        <div class=\\\"columns large-3 medium-5 small-12\\\">\\r\\n            <label class=\\\"form-label\\\">Type rapport</label>\\r\\n            <select class=\\\"report-form-input form-select-wrapper form-select-wrapper-atom\\\" data-bind=\\\"options: reportsOptions, value: selectedReport\\\"></select>\\r\\n        </div>\\r\\n    </div>\\r\\n    <div class=\\\"row \\\">\\r\\n        <div class=\\\"columns\\\">\\r\\n            <hr class=\\\"report-hr large-5 medium-6\\\" align=\\\"left\\\">\\r\\n        </div>\\r\\n    </div>\\r\\n\\r\\n    <div class=\\\"row\\\" data-bind=\\\"visible: hasSelectedReport \\\">\\r\\n        <div class=\\\"columns form-control large-6 medium-8 small-12\\\" >\\r\\n            \\r\\n            <div class=\\\"columns large-4 medium-4\\\" data-bind=\\\"visible:showCourseId\\\" >\\r\\n                <label class=\\\"form-label\\\">Kurs-ID</label>\\r\\n                <input id=\\\"courseId\\\" class=\\\"form-input report-form-input\\\" placeholder=\\\"Kurs-ID\\\" data-bind=\\\"value:courseId\\\" />\\r\\n            </div>\\r\\n            <div class=\\\"columns large-4 medium-4\\\"  data-bind=\\\"visible:showSequenceId\\\">\\r\\n                <label class=\\\"form-label\\\">Sekvens-ID</label>\\r\\n                <input id=\\\"sequenceId\\\" class=\\\"form-input report-form-input\\\" placeholder=\\\"Sekvens-ID\\\" data-bind=\\\"value:sequenceId\\\" />\\r\\n            </div>\\r\\n            <div class=\\\"columns large-4 medium-4\\\" data-bind=\\\"visible:showEventId\\\">\\r\\n                <label class=\\\"form-label\\\">Event-ID</label>\\r\\n                <input id=\\\"eventId\\\" class=\\\"form-input report-form-input\\\" placeholder=\\\"Event-ID\\\" data-bind=\\\"value:eventId\\\" />\\r\\n            </div>\\r\\n            \\r\\n            <div class=\\\"columns large-12\\\" data-bind=\\\"visible:showHotelPicker\\\">\\r\\n                <label class=\\\"form-label\\\">Hotell</label>\\r\\n                <select class=\\\"form-select-wrapper report-form-input form-select-wrapper-atom\\\" data-bind=\\\"options: hotelOptions, value: selectedHotel\\\"></select>\\r\\n            </div>\\r\\n            \\r\\n            <div class=\\\"columns large-12\\\" data-bind=\\\"visible:showLecturerPicker\\\">\\r\\n                <label class=\\\"form-label\\\">Kursleder</label>\\r\\n                <select class=\\\"form-select-wrapper report-form-input form-select-wrapper-atom\\\" data-bind=\\\"options: lecturerOptions, value: selectedLecturer\\\"></select>\\r\\n            </div>\\r\\n            \\r\\n            <div class=\\\"columns large-6 medium-6\\\" data-bind=\\\"visible:showDateFrom\\\">\\r\\n                <label class=\\\"form-label\\\">Fra dato\\r\\n                    <div class=\\\"form-group\\\">\\r\\n                        <div class=\\\"input-group date\\\">\\r\\n                            <label class=\\\"form-label\\\">\\r\\n                                <input type=\\\"text\\\" class=\\\"form-control\\\" data-bind=\\\"datepicker, format: 'dd.mm.yyyy', oldDates: true, value: filterFromDate\\\"/>\\r\\n                            </label>\\r\\n                            <span class=\\\"input-group-addon\\\">\\r\\n                                <span class=\\\"icon icon-calendar\\\"></span>\\r\\n                            </span>\\r\\n                        </div>\\r\\n                    </div>\\r\\n                </label>\\r\\n            </div>\\r\\n            <div class=\\\"columns large-6 medium-6\\\" data-bind=\\\"visible:showDateTo\\\">\\r\\n                <label class=\\\"form-label\\\">Til dato\\r\\n                    <div class=\\\"form-group\\\">\\r\\n                        <div class=\\\"input-group date\\\">\\r\\n                            <label class=\\\"form-label\\\">\\r\\n                                <input type=\\\"text\\\" class=\\\"form-control\\\" data-bind=\\\"datepicker, format: 'dd.mm.yyyy', oldDates: true, value: filterToDate\\\"/>\\r\\n                            </label>\\r\\n                            <span class=\\\"input-group-addon\\\">\\r\\n                                <span class=\\\"icon icon-calendar\\\"></span>\\r\\n                            </span>\\r\\n                        </div>\\r\\n                    </div>\\r\\n                </label>\\r\\n            </div>\\r\\n            \\r\\n            <div class=\\\"columns large-12\\\">\\r\\n                <a class=\\\"btn btn-primary pull-left report-btn\\\" target=\\\"_blank\\\" data-bind=\\\"attr: { href: reportUrl }\\\" >Last ned rapport</a>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nvar SearchBlockModel = function(params) {\r\n  var self = this;\r\n\r\n  var selectedUpdateEl = null;\r\n  var selectedUpdateObj = null;\r\n  var selectedCourseTypesEl = null;\r\n  var selectedCourseTypesObj = null;\r\n\r\n  self.selectedPlaceEl = null;\r\n  self.selectedPlaceObj = null;\r\n\r\n  self.baseUrl = params.BaseUrl;\r\n\r\n  //Set label texts\r\n  self.searchLabel = params.Labels.SearchLabel;\r\n  self.courseTypeLabel = params.Labels.CourseTypeLabel;\r\n  self.courseUpdateLabel = params.Labels.CourseUpdateLabel;\r\n  self.coursePlaceLabel = params.Labels.CoursePlaceLabel;\r\n  self.showCoursesLabel = params.Labels.ShowCoursesLabel;\r\n\r\n  //Selected filter values\r\n  self.searchTerm = ko.observable();\r\n  self.selectedPlace = ko.observable();\r\n  self.selectedUpdate = ko.observable();\r\n  self.selectedCourse = ko.observable();\r\n\r\n  // Dropdown lists\r\n  var accountantOptions = [\r\n    { id: -1, name: window.language.showAll },\r\n    {\r\n      id: 1,\r\n      name: window.language.categories.accountant.financial_statement\r\n    },\r\n    {\r\n      id: 3,\r\n      name: window.language.categories.accountant.skatteavgiftsrett\r\n    },\r\n    { id: 4, name: window.language.categories.accountant.accounting },\r\n    { id: 5, name: window.language.categories.accountant.corporate_law },\r\n    { id: 6, name: window.language.categories.accountant.other }\r\n  ];\r\n\r\n  self.placesDropdown = [{ id: -1, name: window.language.showAll }];\r\n  params.CoursePlaces.forEach(function(place, i) {\r\n    self.placesDropdown.push({\r\n      id: i + 1,\r\n      name: place\r\n    });\r\n  });\r\n  self.selectedPlace(self.placesDropdown);\r\n\r\n  self.courseTypes = [{ id: -1, name: window.language.showAll }];\r\n  params.CourseTypes.forEach(function(course) {\r\n    self.courseTypes.push({\r\n      id: course.Item2,\r\n      name: course.Item1\r\n    });\r\n  });\r\n  self.selectedCourse(self.courseTypes);\r\n\r\n  // We want to store the initial place and update type in order to properly set the dropdowns when\r\n  // we have fetched data from JSON. Otherwise the dropdowns will use the default value.\r\n  var initialPlaceValue = -1;\r\n\r\n  self.query = ko.observable(self.searchTerm());\r\n  self.search = function() {\r\n    self.searchTerm(self.query());\r\n  };\r\n\r\n  //Style dropdowns with selectize\r\n  selectedCourseTypesEl = $('.form-select-course-types').selectize({\r\n    valueField: 'id',\r\n    labelField: 'name',\r\n    options: self.courseTypes\r\n  });\r\n  selectedCourseTypesObj = selectedCourseTypesEl[0].selectize;\r\n  selectedCourseTypesObj.setValue(initialPlaceValue);\r\n\r\n  selectedUpdateEl = $('.form-select-filter-update').selectize({\r\n    valueField: 'id',\r\n    labelField: 'name',\r\n    options: accountantOptions\r\n  });\r\n  selectedUpdateObj = selectedUpdateEl[0].selectize;\r\n  selectedUpdateObj.setValue(initialPlaceValue);\r\n\r\n  self.selectedPlaceEl = $('.form-select-place').selectize({\r\n    valueField: 'id',\r\n    labelField: 'name',\r\n    options: self.selectedPlace()\r\n  });\r\n  self.selectedPlaceObj = self.selectedPlaceEl[0].selectize;\r\n  self.selectedPlaceObj.setValue(initialPlaceValue);\r\n};\r\n\r\nSearchBlockModel.prototype.goToFilteredCourses = function() {\r\n  var self = this;\r\n\r\n  function encodeHash(prefix, hash) {\r\n    if (hash && hash != -1) return prefix + hash;\r\n    return '';\r\n  }\r\n\r\n  var place = self.selectedPlaceObj.getOption(self.selectedPlace()).text();\r\n\r\n  var hashEncodedUrl =\r\n    self.baseUrl +\r\n    '' +\r\n    encodeHash('#sted=', place.replace(/ /g, '%20')) +\r\n    encodeHash('&oppdatering=', self.selectedUpdate()) +\r\n    encodeHash('&type=', self.selectedCourse()) +\r\n    encodeHash('&q=', self.query());\r\n\r\n  window.location = hashEncodedUrl;\r\n  return true;\r\n};\r\n\r\nmodule.exports = SearchBlockModel;\r\n","module.exports = \"<div class=\\\"search-block-container search-block-signature\\\">\\r\\n\\t<div class=\\\"search-box-row\\\">\\r\\n\\t\\t<div class=\\\"columns search-box-columns\\\">\\r\\n\\t\\t\\t<label class=\\\"form-label\\\" for=\\\"search\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: searchLabel\\\"></span>\\r\\n\\t\\t\\t\\t<div class=\\\"search-input-container ui-widget\\\">\\r\\n\\t\\t\\t\\t\\t<input id=\\\"search\\\" class=\\\"search-input\\\" type=\\\"text\\\" data-bind=\\\"value: query, valueUpdate: 'afterkeydown', enterkey: goToFilteredCourses\\\"></input>\\r\\n\\t\\t\\t\\t\\t<span class=\\\"icon-search\\\" data-bind=\\\"click: search\\\"></span>\\r\\n\\t\\t\\t\\t</div>\\r\\n\\t\\t\\t</label>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"columns search-box-columns\\\">\\r\\n\\t\\t\\t<label class=\\\"form-label\\\" for=\\\"course-selector\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: courseTypeLabel\\\"></span>\\r\\n\\t\\t\\t\\t<select id=\\\"course-selector\\\" class=\\\"form-select-wrapper form-select-course-types\\\" data-bind=\\\"value: selectedCourse\\\">\\r\\n\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t</label>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"columns search-box-columns\\\">\\r\\n\\t\\t\\t<label class=\\\"form-label\\\" for=\\\"update-selector\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: courseUpdateLabel\\\"></span>\\r\\n\\t\\t\\t\\t<select id=\\\"update-selector\\\" class=\\\"form-select-wrapper form-select-filter-update\\\" data-bind=\\\"value: selectedUpdate\\\">\\r\\n\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t</label>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"columns search-box-columns\\\">\\r\\n\\t\\t\\t<label class=\\\"form-label\\\" for=\\\"place-selector\\\">\\r\\n\\t\\t\\t\\t<span data-bind=\\\"text: coursePlaceLabel\\\"></span>\\r\\n\\t\\t\\t\\t<select id=\\\"place-selector\\\" class=\\\"form-select-wrapper form-select-place\\\" data-bind=\\\"value: selectedPlace\\\">\\r\\n\\t\\t\\t\\t</select>\\r\\n\\t\\t\\t</label>\\r\\n\\t\\t</div>\\r\\n\\t\\t<div class=\\\"\\\">\\r\\n\\t\\t\\t<button class=\\\"btn btn-primary search-block-button\\\" data-bind=\\\"click: goToFilteredCourses, text: showCoursesLabel\\\">\\r\\n\\t\\t\\t\\tVis kurs\\r\\n\\t\\t\\t</button>\\r\\n\\t\\t</div>\\r\\n\\t</div>\\r\\n</div>\"","// This file is automatically generated from \"/scripts/generate-component-imports.js\". Do not edit.\n\nrequire('../components/knockout/article-list/index.js');\nrequire('../components/knockout/checkout-course-list/index.js');\nrequire('../components/knockout/checkout-overview-page/index.js');\nrequire('../components/knockout/choose-payer/index.js');\nrequire('../components/knockout/date-time-list/index.js');\nrequire('../components/knockout/digital-signing-order-form/index.js');\nrequire('../components/knockout/happenings/index.js');\nrequire('../components/knockout/loader/index.js');\nrequire('../components/knockout/media-tile/index.js');\nrequire('../components/knockout/my-courses-block/index.js');\nrequire('../components/knockout/purchase-button/index.js');\nrequire('../components/knockout/quick-purchase-button/index.js');\nrequire('../components/knockout/read-more-popup/index.js');\nrequire('../components/knockout/register-continue-button/index.js');\nrequire('../components/knockout/shopping-cart/index.js');\nrequire('../components/knockout/submit-button/index.js');\nrequire('../components/knockout/tooltip/index.js');\nrequire('../components/knockout/video-course-receipt/index.js');\nrequire('../components/knockout/youtube-video/index.js');\n","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('article-list', {\r\n  viewModel: require('./article-list'),\r\n  template: require('./article-list.template')\r\n});\r\n\r\n$('[data-article-list]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var scrollingElement = require('_utils/scrolling-element');\r\nvar ko = require('knockout');\r\nvar $ = require('jquery');\r\nvar debounce = require('lodash/debounce');\r\n\r\n//TODO Lots of code duplication from organisms/course-list.js\r\nfunction Model(params) {\r\n  var self = this;\r\n\r\n  if (params.listEndpoint === undefined) {\r\n    throw 'listEndpoint must be set to fetch list';\r\n  }\r\n\r\n  var filterTopic = params.filterTopic || 'articleSearchFilterTopic';\r\n  var itemsPerPage = params.itemsPerPage || 20;\r\n  var takeMore = params.takeMore || 10;\r\n  var articleListItem = params.articleListItem || 'article-block';\r\n\r\n  self.articleListItem = ko.observable(articleListItem);\r\n  self.loading = ko.observable(false);\r\n\r\n  self.currentScrollPosition = scrollingElement.scrollTop;\r\n  self.currentFilters = ko\r\n    .observable(params.defaultFilters)\r\n    .subscribeTo(filterTopic, true);\r\n\r\n  self.take = ko.observable(itemsPerPage);\r\n  self.totalItems = ko.observable(9999999);\r\n  self.ableToFetchMore = ko.computed(function() {\r\n    return self.totalItems() > self.take();\r\n  });\r\n  self.activeArticlesAmount = ko.computed(function() {\r\n    if (self.totalItems() > self.take()) {\r\n      return self.take();\r\n    } else {\r\n      return self.totalItems();\r\n    }\r\n  });\r\n\r\n  self.currentRelevanceSorting = ko\r\n    .observable(false)\r\n    .subscribeTo('currentRelevanceSorting', true);\r\n\r\n  self.articleList = ko.observableArray([]);\r\n\r\n  var currentPost;\r\n\r\n  var updateList = function() {\r\n    var filters = self.currentFilters() || {};\r\n\r\n    if (typeof filters.category === 'string') {\r\n      filters.category = filters.category.split(',');\r\n    }\r\n\r\n    filters.Skip = 0;\r\n    filters.Take = self.take();\r\n\r\n    filters.SortOnRelevance = self.currentRelevanceSorting();\r\n\r\n    if (currentPost !== undefined) currentPost.abort();\r\n\r\n    self.currentScrollPosition = scrollingElement.scrollTop;\r\n\r\n    if (/json$/.test(params.listEndpoint)) {\r\n      self.loading(true);\r\n      window.setTimeout(function() {\r\n        self.loading(false);\r\n      }, 1000);\r\n\r\n      currentPost = $.getJSON(params.listEndpoint, function(articles) {\r\n        currentPost = undefined;\r\n        self.articleList(articles.Items);\r\n        self.totalItems(articles.TotalItems);\r\n      });\r\n    } else {\r\n      self.loading(true);\r\n      currentPost = $.post(params.listEndpoint, filters)\r\n        .done(function(articles) {\r\n          currentPost = undefined;\r\n          self.articleList(articles.Items);\r\n          self.totalItems(articles.TotalItems);\r\n        })\r\n        .always(function() {\r\n          self.loading(false);\r\n        });\r\n    }\r\n  };\r\n\r\n  // In Microsoft browsers, re-rendering the list causes the window to be scrolled almost to the top. This callback ensures that when the list has re-rendered the scroll position is correct\r\n  self.afterListRender = debounce(function() {\r\n    if (self.currentScrollPosition !== scrollingElement.scrollTop) {\r\n      scrollingElement.scrollTop = self.currentScrollPosition;\r\n    }\r\n  }, 15);\r\n\r\n  self.getMoreArticles = function() {\r\n    if (!self.loading()) {\r\n      self.take(self.take() + takeMore);\r\n      updateList();\r\n    }\r\n  };\r\n\r\n  self.currentFilters.subscribe(function() {\r\n    self.take(itemsPerPage);\r\n    updateList();\r\n  });\r\n  self.currentRelevanceSorting.subscribe(updateList);\r\n\r\n  // Initialize if we have received the filters.\r\n  if (self.currentFilters() !== undefined) {\r\n    updateList();\r\n  }\r\n}\r\n\r\nmodule.exports = Model;\r\n","var scrollingElement =\r\n  document.scrollingElement || document.documentElement || document.body;\r\n\r\nmodule.exports = scrollingElement;\r\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","module.exports = \"<div class=\\\"row filter-container\\\">\\r\\n    <div class=\\\"filter-result-text columns large-6\\\">\\r\\n        <h4>Viser <span data-bind=\\\"text: activeArticlesAmount\\\"></span> av <span data-bind=\\\"text: totalItems\\\" class=\\\"\\\"></span> treff</h4>\\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"article-list-container\\\">\\r\\n    <ul data-bind=\\\"foreach: { data: articleList, as: 'article', afterRender: afterListRender }\\\" class=\\\"row\\\">\\r\\n        <li class=\\\"columns large-12\\\">\\r\\n            <div data-bind=\\\"component: { name: $parent.articleListItem, params: { article: article } }\\\"></div>\\r\\n        </li>\\r\\n    </ul>\\r\\n\\r\\n    <div class=\\\"overlay overlay-grey\\\" data-bind=\\\"css: { 'is-loading': loading }\\\">\\r\\n        <div class=\\\"loader-container\\\">\\r\\n            <div class=\\\"loader\\\" data-bind=\\\"css: { 'is-loading': loading }\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"article-list-action\\\">\\r\\n    <button class=\\\"btn btn-secondary expanded\\\" data-bind=\\\"click: getMoreArticles, enable: ableToFetchMore\\\">\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"visible: ableToFetchMore\\\">Vis flere artikler</span>\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"visible: !ableToFetchMore()\\\">Ingen flere artikler</span>\\r\\n    </button>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('checkout-course-list', {\r\n  viewModel: require('./checkout-course-list'),\r\n  template: require('./checkout-course-list.template')\r\n});\r\n\r\n$('[data-checkout-course-list]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","function CheckoutCourseList(params) {\r\n  this.courseList = params.courseList;\r\n  this.texts = params.texts;\r\n  this.links = params.links;\r\n  this.chosenAgency = params.chosenAgency;\r\n  this.totalDiscounts = params.totalDiscounts;\r\n  this.totalPrice = params.totalPrice;\r\n  this.totalPriceIncVat = params.totalPriceIncVat;\r\n  this.totalFoodVat = params.totalFoodVat;\r\n  this.totalAccommodationVat = params.totalAccommodationVat;\r\n  this.totalOnlineCourseVat = params.totalOnlineCourseVat;\r\n  this.endpoints = params.endpoints;\r\n  this.readonly = params.readonly;\r\n  this.userHasAlreadyBoughtCourse = params.userHasAlreadyBoughtCourse;\r\n  this.userHasAlreadyBoughtOnlineCourse =\r\n    params.userHasAlreadyBoughtOnlineCourse;\r\n  this.userHasAlreadyBoughtProgram = params.userHasAlreadyBoughtProgram;\r\n  this.removeParticipant = params.removeParticipant;\r\n  this.removeCourse = params.removeCourse;\r\n  this.memberHasDiscount = params.memberHasDiscount;\r\n  this.originalPrice = params.originalPrice;\r\n  this.getPrice = params.getPrice;\r\n  this.employeeList = params.employeeList;\r\n\r\n  this.deleteItemText = function(eventType) {\r\n    if (eventType === 5) {\r\n      return this.texts.deleteBundle;\r\n    } else if (eventType === 6) {\r\n      return this.texts.deleteProgram;\r\n    }\r\n    return this.texts.deleteCourse;\r\n  };\r\n}\r\n\r\nmodule.exports = CheckoutCourseList;\r\n","module.exports = \"<div data-bind=\\\"visible: chosenAgency\\\">\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"course-block-header-row\\\">\\r\\n      <div class=\\\"columns large-5\\\" data-bind=\\\"text: texts.headers.course\\\"></div>\\r\\n      <div class=\\\"columns large-3\\\" data-bind=\\\"text: texts.headers.participants\\\"></div>\\r\\n      <div class=\\\"columns large-3\\\" data-bind=\\\"text: texts.headers.price\\\"></div>\\r\\n      <div class=\\\"columns large-1\\\"></div>\\r\\n    </div>\\r\\n  </div>\\r\\n\\r\\n  <!-- ko foreach: courseList -->\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12 no-padding\\\">\\r\\n      <div class=\\\"course-block\\\" data-bind=\\\"css: {summary: $parent.readonly }\\\">\\r\\n        <div class=\\\"message is-warning note\\\" data-bind=\\\"visible: (Availability.Vacancy - participants.length) < 0\\\">\\r\\n          <div class=\\\"message-icon\\\"><div class=\\\"info-circle\\\">!</div></div>\\r\\n          <div class=\\\"message-text\\\" data-bind=\\\"text: $parent.texts.waitingList\\\"></div>\\r\\n        </div>\\r\\n\\r\\n        <div\\r\\n          class=\\\"message is-error note\\\"\\r\\n          data-bind=\\\"visible: $parent.userHasAlreadyBoughtCourse().length > 0 && $parent.userHasAlreadyBoughtCourse()[$index()]\\\"\\r\\n        >\\r\\n          <div class=\\\"message-icon\\\"><div class=\\\"info-circle\\\">!</div></div>\\r\\n          <div class=\\\"message-text\\\" data-bind=\\\"text: $parent.texts.userAlreadyBoughtCourse\\\"></div>\\r\\n        </div>\\r\\n\\r\\n        <div\\r\\n          class=\\\"message is-warning note\\\"\\r\\n          data-bind=\\\"visible: $component.userHasAlreadyBoughtOnlineCourse().length > 0 && $component.userHasAlreadyBoughtOnlineCourse()[$index()]\\\"\\r\\n        >\\r\\n          <div class=\\\"message-icon\\\"><div class=\\\"info-circle\\\">!</div></div>\\r\\n          <div class=\\\"message-text\\\" data-bind=\\\"text: $parent.texts.userAlreadyBoughtOnlineCourse\\\"></div>\\r\\n        </div>\\r\\n\\r\\n\\r\\n\\r\\n        <div class=\\\"course-block-info\\\">\\r\\n          <a class=\\\"course-block-heading\\\" href=\\\"#\\\" data-bind=\\\"text: Heading, attr: { href: Url }\\\"></a>\\r\\n          <div class=\\\"course-block-text\\\">\\r\\n\\r\\n            <!-- ko if: AccountantCredits -->\\r\\n            <div class=\\\"shopping-cart-hours-type\\\" data-bind=\\\"text: $parent.texts.accountant\\\"></div>\\r\\n            <!-- ko foreach: AccountantCredits -->\\r\\n            <div class=\\\"course-credits-block-container\\\">\\r\\n              <span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n              <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n              <div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n                <!-- ko if: Hours -->\\r\\n                <!-- ko component: {name: \\\"calculator-timeunit\\\", params: {}}-->\\r\\n                <!-- /ko -->\\r\\n                <!-- /ko -->\\r\\n              </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n\\r\\n            <!-- ko if: AuditorCredits -->\\r\\n            <div class=\\\"shopping-cart-hours-type\\\" data-bind=\\\"text: $parent.texts.auditor\\\"></div>\\r\\n            <!-- ko foreach: AuditorCredits -->\\r\\n            <div class=\\\"course-credits-block-container\\\">\\r\\n              <span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n              <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n              <div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n                <!-- ko if: Hours -->\\r\\n                <!-- ko component: {name: \\\"calculator-timeunit\\\", params: {}}-->\\r\\n                <!-- /ko -->\\r\\n                <!-- /ko -->\\r\\n              </div>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n            <!-- /ko -->\\r\\n          </div>\\r\\n\\r\\n          <div class=\\\"course-tile-footer\\\">\\r\\n            <ul class=\\\"media-tile-facts\\\">\\r\\n              <li>\\r\\n                <span class=\\\"icon icon-screen\\\" data-bind=\\\"visible: EventType == 3\\\"></span>\\r\\n                <span class=\\\"icon icon-globe\\\" data-bind=\\\"visible: EventType == 1\\\"></span>\\r\\n                <span class=\\\"icon icon-fagdag\\\" data-bind=\\\"visible: EventType == 2\\\"></span>\\r\\n                <span class=\\\"icon icon-fagdag\\\" data-bind=\\\"visible: EventType == 4\\\"></span>\\r\\n                <span class=\\\"icon icon-bundle\\\" data-bind=\\\"visible: EventType == 5\\\"></span>\\r\\n                <span class=\\\"icon icon-program\\\" data-bind=\\\"visible: EventType == 6\\\"></span>\\r\\n                <span class=\\\"media-tile-text\\\" data-bind=\\\"text:EventTypeText\\\"></span>\\r\\n              </li>\\r\\n              <li data-bind=\\\"visible: DateString && EventType != 5\\\">\\r\\n                <span class=\\\"icon icon-calendar\\\"></span>\\r\\n                <span class=\\\"media-tile-text\\\" data-bind=\\\"text: DateString\\\"></span>\\r\\n              </li>\\r\\n              <li data-bind=\\\"visible:\\r\\n                EventType != 3 &&\\r\\n                City &&\\r\\n                EventType != 5\\\">\\r\\n                <span class=\\\"icon icon-pin\\\"></span>\\r\\n                <span class=\\\"media-tile-text\\\" data-bind=\\\"text: City\\\"></span>\\r\\n              </li>\\r\\n            </ul>\\r\\n          </div>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"course-block-pricing\\\">\\r\\n          <div class=\\\"course-block-participant-wrapper\\\">\\r\\n            <div class=\\\"row collapse\\\">\\r\\n              <!-- ko foreach: participants -->\\r\\n              <div class=\\\"course-block-expander\\\">\\r\\n                <div class=\\\"columns\\\" data-bind=\\\"css: { 'small-6': !$parents[1].readonly, 'small-8': $parents[1].readonly }\\\">\\r\\n                  <div class=\\\"name\\\" data-bind=\\\"text: Name\\\"></div>\\r\\n\\r\\n                  <div class=\\\"full-price\\\" data-bind=\\\"visible: $parents[1].memberHasDiscount($parent, $data)\\\">\\r\\n                    <span data-bind=\\\"text: $parents[1].originalPrice($parent, $data)\\\"></span> kr\\r\\n                  </div>\\r\\n                </div>\\r\\n                <div class=\\\"columns small-6 course-block-price-wrapper\\\" data-bind=\\\"css: { 'small-6': !$parents[1].readonly, 'small-4': $parents[1].readonly }\\\">\\r\\n                  <div class=\\\"discount-price\\\">\\r\\n                    <span data-bind=\\\"text: $component.getPrice($parent, $data)\\\"></span> kr\\r\\n                  </div>\\r\\n                  <div class=\\\"delete-participant\\\" data-bind=\\\"if: !$parents[1].readonly && $parents[1].chosenAgency().AktorId !== ''\\\">\\r\\n                    <button type=\\\"button\\\" class=\\\"btn btn-shopping-delete narrow\\\" data-bind=\\\"click: function(){ $parents[1].removeParticipant($data, $parent);}\\\">\\r\\n                      <span class=\\\"not-added\\\">\\r\\n                        <span class=\\\"icon-close\\\"></span>\\r\\n                        <span class=\\\"btn-text lowercase\\\" data-bind=\\\"text: $parents[1].texts.removeParticipant\\\"></span>\\r\\n                      </span>\\r\\n                    </button>\\r\\n                  </div>\\r\\n                </div>\\r\\n              </div>\\r\\n              <!-- /ko -->\\r\\n              <!-- ko if: participants.length == 0 -->\\r\\n              <div class=\\\"message-block missing-info\\\" data-bind=\\\"text: $parent.texts.missingParticipants\\\"></div>\\r\\n              <!-- /ko -->\\r\\n            </div>\\r\\n          </div>\\r\\n\\r\\n          <div class=\\\"course-block-button-wrapper\\\">\\r\\n            <div class=\\\"course-block-add-participant\\\">\\r\\n              <!-- ko if: !$parent.readonly\\r\\n                      && $parent.chosenAgency()\\r\\n                      && $parent.chosenAgency().AktorId !== ''\\r\\n                      && $parent.endpoints.createEmployee\\r\\n                    -->\\r\\n              <!-- ko component: {name: 'add-participant-box', params:{\\r\\n                        addNewEmployeeEndpoint: $parent.endpoints.createEmployee,\\r\\n                        usersHaveAlreadyBoughtCourseEndpoint: $parent.endpoints.usersHaveAlreadyBoughtCourse,\\r\\n                        usersHaveAlreadyBoughtOnlineCourseEndpoint: $parent.endpoints.usersHaveAlreadyBoughtOnlineCourse,\\r\\n                        usersHaveAlreadyBoughtOverlappingCourseEndpoint: $parent.endpoints.usersHaveAlreadyBoughtOverlappingCourse,\\r\\n                        usersHaveAlreadyBoughtProgramEndpoint: $parent.endpoints.usersHaveAlreadyBoughtProgram,\\r\\n                        course: $data,\\r\\n                        employeeList: $parent.employeeList,\\r\\n                        participants: participants,\\r\\n                        courseList: $parent.courseList,\\r\\n                      }} -->\\r\\n              <!-- /ko -->\\r\\n              <!-- /ko -->\\r\\n            </div>\\r\\n            <!-- ko if: !$parent.readonly -->\\r\\n            <div class=\\\"course-block-delete\\\">\\r\\n              <button type=\\\"button\\\" class=\\\"btn btn-shopping-delete\\\" role=\\\"button\\\" data-bind=\\\"click: $parent.removeCourse\\\">\\r\\n                <span class=\\\"not-added\\\">\\r\\n                  <span class=\\\"icon-close\\\"></span>\\r\\n                  <span class=\\\"btn-text lowercase\\\" data-bind=\\\"text: $parent.deleteItemText(EventType)\\\"></span>\\r\\n                </span>\\r\\n              </button>\\r\\n            </div>\\r\\n            <!-- /ko -->\\r\\n          </div>\\r\\n        </div>\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"columns large-12 no-padding\\\">\\r\\n      <div class=\\\"terms-block\\\" data-bind=\\\"visible: $parent.showTermsForProgram()\\\">\\r\\n        <input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" data-bind=\\\"checked: $parent.acceptTermsForPrograms, disable: false\\\" name=\\\"checkbox-name\\\" id=\\\"acceptTermsForPrograms\\\"/>\\r\\n        <label class=\\\"form-label form-label-checkbox form-label-lowercase\\\" for=\\\"acceptTermsForPrograms\\\"><a data-bind=\\\"attr: { href: $parent.links.termsForPrograms }, text: $parent.texts.termsForPrograms\\\" target=\\\"_blank\\\"></a></label>\\r\\n      </div>\\r\\n      <div class=\\\"error-box-container static\\\" data-bind=\\\"css: { 'no-height': !$parent.acceptTermsForPrograms.hasError() }\\\">\\r\\n        <div class=\\\"error-box pointer-top\\\"  data-bind=\\\"css: { active: $parent.acceptTermsForPrograms.hasError }\\\">\\r\\n          <span data-bind=\\\"text: $parent.acceptTermsForPrograms.validationMessage\\\"></span>\\r\\n        </div>\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n\\r\\n  <dl class=\\\"checkout-course-list-sum\\\">\\r\\n    <!-- ko foreach: totalDiscounts -->\\r\\n      <dt><p data-bind=\\\"text: Name\\\"></p></dt>\\r\\n      <dd><p>- <span data-bind=\\\"text: Discount\\\"></span> kr</p></dd>\\r\\n    <!-- /ko -->\\r\\n\\r\\n    <dt class=\\\"sum\\\"><p data-bind=\\\"text: texts.totalPrice\\\"></p></dt>\\r\\n    <dd class=\\\"sum\\\"><p><span data-bind=\\\"text: totalPrice\\\"></span> kr</p></dd>\\r\\n  </dl>\\r\\n\\r\\n  <dl class=\\\"checkout-course-list-sum\\\">\\r\\n    <!-- ko if: totalFoodVat() && totalFoodVat() > 0 -->\\r\\n      <dt class=\\\"vat\\\"><p data-bind=\\\"text: texts.totalFoodVat\\\"></p></dt>\\r\\n      <dd class=\\\"vat\\\"><p><span data-bind=\\\"text: totalFoodVat\\\"></span> kr</p></dd>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: totalAccommodationVat() && totalAccommodationVat() > 0 -->\\r\\n      <dt class=\\\"vat\\\"><p data-bind=\\\"text: texts.totalAccommodationVat\\\"></p></dt>\\r\\n      <dd class=\\\"vat\\\"><p><span data-bind=\\\"text: totalAccommodationVat\\\"></span> kr</p></dd>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: totalOnlineCourseVat() && totalOnlineCourseVat() > 0 -->\\r\\n      <dt class=\\\"vat\\\"><p data-bind=\\\"text: texts.totalOnlineCourseVat\\\"></p></dt>\\r\\n      <dd class=\\\"vat\\\"><p><span data-bind=\\\"text: totalOnlineCourseVat\\\"></span> kr</p></dd>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: totalPriceIncVat() && totalPriceIncVat() > 0 -->\\r\\n      <dt class=\\\"sum\\\"><p data-bind=\\\"text: texts.amountToPay\\\"></p></dt>\\r\\n      <dd class=\\\"sum\\\"><p><span data-bind=\\\"text: totalPriceIncVat\\\"></span> kr</p></dd>\\r\\n    <!-- /ko -->\\r\\n  </dl>\\r\\n\\r\\n</div>\\r\\n\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('checkout-overview-page', {\r\n  viewModel: require('./checkout-overview-page'),\r\n  template: require('./checkout-overview-page.template')\r\n});\r\n\r\n$('[data-checkout-overview-page]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\nvar $ = require('jquery');\r\nvar find = require('lodash/find');\r\nvar get = require('lodash/get');\r\nvar pick = require('lodash/pick');\r\nvar debounce = require('lodash/debounce');\r\nvar cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\nvar analytics = require('_js/analytics-ecommerce');\r\nvar APIHelper = require('_js/APIHelper');\r\n\r\nrequire('knockout-postbox');\r\n//Membershiptype 1 Person, 2 Agency, 3 no member\r\n\r\n// A new topic which is (currently) used to detect when we add participants to a course\r\n// to indicate that for these participants this course is overlapping with an already chosen course.\r\nvar UPDATE_PARTICIPANTS_TOPIC = 'updateParticipantsTopic';\r\n\r\nfunction CheckoutOverviewPage(params) {\r\n  var self = this;\r\n  this.params = params;\r\n  this.texts = params.texts;\r\n  this.links = params.links;\r\n  this.readonly = params.readonly || false;\r\n  this.endpoints = params.endpoints;\r\n\r\n  if (self.endpoints.employee === undefined) throw 'employee must be set';\r\n  if (!this.readonly && this.links.paymentMethod === undefined)\r\n    throw 'paymentMethod must be set';\r\n  if (!this.readonly && this.links.summary === undefined)\r\n    throw 'summary must be set';\r\n  if (self.endpoints.prices === undefined) throw 'prices must be set';\r\n\r\n  cart.resetOverlappingCoursesForParticipants();\r\n  self.discounts = ko.observableArray([]);\r\n  self.totalDiscounts = ko.observableArray([]);\r\n  var currentUser = params.currentUser;\r\n  self.chosenAgency = ko.observable();\r\n  self.errorText = ko.observable('');\r\n  var alreadyAddedUser = false;\r\n  self.userHasAlreadyBoughtCourse = ko.observableArray([]);\r\n  self.userHasAlreadyBoughtOnlineCourse = ko.observableArray([]);\r\n  self.userHasAlreadyBoughtProgram = ko.observableArray([]);\r\n  self.usersUnPublishedCourses = ko.observableArray([]);\r\n  self.Total = ko.observable(0);\r\n  self.totalPriceIncVat = ko.observable(0);\r\n  self.totalFoodVat = ko.observable(0);\r\n  self.totalAccommodationVat = ko.observable(0);\r\n  self.totalOnlineCourseVat = ko.observable(0);\r\n  self.acceptTermsForPrograms = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isCheckedOff',\r\n        message: self.texts.requiredField\r\n      }\r\n    ]\r\n  });\r\n\r\n  self.summaryLink = this.links.summary;\r\n  self.paymentMethodLink = this.links.paymentMethod;\r\n\r\n  self.HasClickedOrderButton = false;\r\n\r\n  self.employeeList = ko.observableArray([]);\r\n  self.courseList = ko.observableArray([]);\r\n  self.coursesSelected = ko.computed(function() {\r\n    return self.chosenAgency() !== undefined && self.courseList().length > 0;\r\n  });\r\n\r\n  self.submitButtonDisabled = ko.computed(function() {\r\n    return self.userHasAlreadyBoughtCourse().some(Boolean);\r\n  });\r\n\r\n  self.encodeCart = function() {\r\n    // The cart model is a view model. It contains all of the data needed to render the cart.\r\n    // The previous developers made the dubious choice to send the entire view model to the API when pressing the purchase button.\r\n    // Since the view model contains html strings (aside from being a huge security risk) the API started crashing for some courses.\r\n    // In order to solve the problem temporarily, this method now creates a new model based on the view model that only contains the data necessary to complete a purchase.\r\n    // To solve this problem (and other potential ones) permanently, the entire localStorage-cart mess should be scrapped.\r\n\r\n    var cartViewModel = cart.getCart() || {};\r\n    var agency = pick(cartViewModel.agency, ['AktorId']);\r\n    var payer = pick(cartViewModel.payer, [\r\n      'AktorId',\r\n      'ReferenceNo',\r\n      'HideInLists'\r\n    ]);\r\n    var courses = get(cartViewModel, 'courses', []).map(function(course) {\r\n      return pick(course, ['EventType', 'Key', 'participants']);\r\n    });\r\n\r\n    return JSON.stringify({\r\n      agency: agency,\r\n      payer: payer,\r\n      courses: courses\r\n    });\r\n  };\r\n\r\n  self.memberHasDiscount = function(course, participant) {\r\n    for (var i = 0; i < self.discounts().length; i++) {\r\n      if (\r\n        (self.discounts()[i].SequenceId == course.Id ||\r\n          self.discounts()[i].ProgramKey == course.Key) &&\r\n        self.discounts()[i].ParticipantActorId == participant.AktorId\r\n      ) {\r\n        return self.discounts()[i].Discounts.length > 0;\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  self.originalPrice = function(course, participant) {\r\n    for (var i = 0; i < self.discounts().length; i++) {\r\n      if (\r\n        (self.discounts()[i].SequenceId == course.Id ||\r\n          self.discounts()[i].ProgramKey == course.Key) &&\r\n        self.discounts()[i].ParticipantActorId == participant.AktorId\r\n      ) {\r\n        return self.discounts()[i].OriginalPrice;\r\n      }\r\n    }\r\n    return course.PriceNonMember;\r\n  };\r\n\r\n  function getPriceForParticipant(course, participant) {\r\n    return (\r\n      self.discounts().find(function(discount) {\r\n        return (\r\n          (discount.SequenceId === course.Id ||\r\n            discount.ProgramKey === course.Key) &&\r\n          discount.ParticipantActorId === participant.AktorId\r\n        );\r\n      }) || {}\r\n    );\r\n  }\r\n\r\n  self.getPrice = function(course, participant) {\r\n    return getPriceForParticipant(course, participant).ActualPrice;\r\n  };\r\n\r\n  var mapCourseList = function() {\r\n    var courseList = self.courseList();\r\n    var coursesWithParticipants = courseList.map(function(course) {\r\n      var participants = course.participants.map(function(p) {\r\n        return p.AktorId;\r\n      });\r\n\r\n      return {\r\n        SequenceId: course.EventType == 6 ? course.Key.toString() : course.Id,\r\n        ParticipantActorIds: participants,\r\n        EmployerActorId: get(self.chosenAgency(), 'AktorId', ''),\r\n        EventType: course.EventType,\r\n        PayerActorId: self.readonly\r\n          ? get(cart.getCart(), 'payer.AktorId', '')\r\n          : ''\r\n      };\r\n    });\r\n    return coursesWithParticipants;\r\n  };\r\n\r\n  self.showTermsForProgram = function() {\r\n    return (\r\n      self.readonly &&\r\n      self.courseList().some(function(item) {\r\n        return item.EventType == 6;\r\n      })\r\n    );\r\n  };\r\n\r\n  // This network call is expensive for the server. In some cases this endpoint is called excessively. It's debounced to avoid lag\r\n  var getPrices = debounce(function() {\r\n    var coursesWithParticipants = mapCourseList();\r\n\r\n    APIHelper.QcPost(self.endpoints.prices, coursesWithParticipants, function(\r\n      result\r\n    ) {\r\n      self.discounts(result.PricesAndDiscounts);\r\n      self.Total(result.TotalPrice);\r\n      self.totalDiscounts(result.TotalDiscounts);\r\n      self.totalPriceIncVat(result.TotalPriceIncVat);\r\n      self.totalFoodVat(result.TotalFoodVat);\r\n      self.totalAccommodationVat(result.TotalAccommodationVat);\r\n      self.totalOnlineCourseVat(result.TotalOnlineCourseVat);\r\n    });\r\n  }, 500);\r\n\r\n  var previousCourseList = [];\r\n  var trackAddToCart = function() {\r\n    var courseList = self.courseList();\r\n    courseList.forEach(function(course) {\r\n      var previousCourse = find(previousCourseList, function(c) {\r\n        return c.Key === course.Key;\r\n      });\r\n\r\n      if (!previousCourse) return;\r\n\r\n      course.participants.forEach(function(participant) {\r\n        // prettier-ignore\r\n        var previousParticipant = find(\r\n            previousCourse.participants,\r\n            function(p) { return p.AktorId === participant.AktorId; }\r\n          );\r\n\r\n        if (!previousParticipant) {\r\n          analytics.productAddedToCart(previousCourse, 1);\r\n        }\r\n      });\r\n    });\r\n\r\n    previousCourseList = courseList;\r\n  };\r\n\r\n  var showErrorMessage = function(length, message) {\r\n    if (length === 0) {\r\n      $('#common-error-message .error-message-text').html(message);\r\n      $('#common-error-message').removeClass('hidden');\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  };\r\n\r\n  var hideErrorMessage = function(message) {\r\n    var currentMessage = $('#common-error-message .error-message-text').html();\r\n    if (message === currentMessage) {\r\n      $('#common-error-message').addClass('hidden');\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  };\r\n\r\n  var canClickButton = function() {\r\n    var courselist = self.courseList();\r\n    if (showErrorMessage(courselist.length, window.language.missingCourses)) {\r\n      return false;\r\n    }\r\n\r\n    for (var i = 0; i < courselist.length; i++) {\r\n      if (\r\n        showErrorMessage(\r\n          courselist[i].participants.length,\r\n          window.language.missingParticipants\r\n        )\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  };\r\n\r\n  self.goToPayment = function() {\r\n    if (canClickButton()) {\r\n      analytics.shoppingCartCheckedOut(\r\n        2,\r\n        cart.getCart(),\r\n        self.paymentMethodLink\r\n      );\r\n    }\r\n  };\r\n\r\n  self.goToSummary = function() {\r\n    if (canClickButton()) {\r\n      analytics.shoppingCartCheckedOut(3, cart.getCart(), self.summaryLink);\r\n    }\r\n  };\r\n\r\n  self.orderButton = function(data, e) {\r\n    if (this.HasClickedOrderButton) {\r\n      e.preventDefault();\r\n      return false;\r\n    }\r\n    if (\r\n      self.showTermsForProgram() &&\r\n      self.acceptTermsForPrograms &&\r\n      !self.acceptTermsForPrograms()\r\n    ) {\r\n      self.acceptTermsForPrograms.hasError(true);\r\n      return false;\r\n    }\r\n\r\n    this.HasClickedOrderButton = true;\r\n    return canClickButton();\r\n  };\r\n\r\n  var hasOverlappingSequencesInPackages = function() {\r\n    APIHelper.QcPost(\r\n      self.endpoints.overlappingSequencesCheck,\r\n      mapCourseList(),\r\n      function(response) {\r\n        if (response) {\r\n          showErrorMessage(0, self.texts.overlappingSequencesInPackages);\r\n        } else {\r\n          hideErrorMessage(self.texts.overlappingSequencesInPackages);\r\n        }\r\n      },\r\n      function(err) {\r\n        self.errorText(err.responseText);\r\n      }\r\n    );\r\n  };\r\n\r\n  ko.postbox.subscribe(\r\n    cart.updateTopic,\r\n    function(newCart) {\r\n      self.courseList(newCart.courses);\r\n\r\n      if (newCart.agency === undefined) {\r\n        self.employeeList([currentUser]);\r\n      } else if (newCart.agency.AktorId === '') {\r\n        //When someone chose to not register agency\r\n        self.employeeList([currentUser]);\r\n      } else if (\r\n        self.chosenAgency() === undefined ||\r\n        newCart.agency.AktorId !== self.chosenAgency().AktorId\r\n      ) {\r\n        $.getJSON(\r\n          self.endpoints.employee + '?agency=' + newCart.agency.Id, //AktorId,\r\n          function(employees) {\r\n            self.employeeList(employees);\r\n          }\r\n        );\r\n      }\r\n\r\n      self.chosenAgency(newCart.agency);\r\n      trackAddToCart();\r\n      getPrices();\r\n      hasOverlappingSequencesInPackages();\r\n    },\r\n    true\r\n  );\r\n\r\n  var hasAlreadyBoughtCourse = function(index) {\r\n    $.post(self.endpoints.usersHaveAlreadyBoughtCourse, {\r\n      Users: [currentUser.AktorId],\r\n      SequencePk: self.courseList()[index].Key\r\n    })\r\n      .success(function(data) {\r\n        var hasBoughtCourse = data;\r\n        if (hasBoughtCourse[currentUser.AktorId]) {\r\n          self.userHasAlreadyBoughtCourse()[index] = true;\r\n        } else {\r\n          self.userHasAlreadyBoughtCourse()[index] = false;\r\n          if (self.courseList()[index].EventType == 6) {\r\n            cart.addParticipantToCourse(\r\n              self.courseList()[index].Key,\r\n              currentUser\r\n            );\r\n          } else {\r\n            cart.addParticipantToCourse(\r\n              self.courseList()[index].Id,\r\n              currentUser\r\n            );\r\n          }\r\n        }\r\n        self.userHasAlreadyBoughtCourse.valueHasMutated();\r\n      })\r\n      .fail(function(err) {\r\n        //TODO: add error message to template\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  var hasAlreadyBoughtCourses = function() {\r\n    self.userHasAlreadyBoughtCourse([]);\r\n    if (\r\n      self.chosenAgency() &&\r\n      self.chosenAgency().AktorId === '' &&\r\n      !alreadyAddedUser\r\n    ) {\r\n      alreadyAddedUser = true;\r\n      for (var i = 0; i < self.courseList().length; i++) {\r\n        hasAlreadyBoughtCourse(i);\r\n      }\r\n    } else {\r\n      alreadyAddedUser = false;\r\n    }\r\n  };\r\n\r\n  var hasAlreadyBoughtOnlineCourse = function(index) {\r\n    $.post(self.endpoints.usersHaveAlreadyBoughtOnlineCourse, {\r\n      Users: [currentUser.AktorId],\r\n      SequencePk: self.courseList()[index].Key\r\n    })\r\n      .success(function(data) {\r\n        var hasBoughtOnlineCourse = data;\r\n        if (hasBoughtOnlineCourse[currentUser.AktorId]) {\r\n          self.userHasAlreadyBoughtOnlineCourse()[index] = true;\r\n        } else {\r\n          self.userHasAlreadyBoughtOnlineCourse()[index] = false;\r\n          cart.addParticipantToCourse(self.courseList()[index].Id, currentUser);\r\n        }\r\n        self.userHasAlreadyBoughtOnlineCourse.valueHasMutated();\r\n      })\r\n      .fail(function(err) {\r\n        //TODO: add error message to template\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  var hasAlreadyBoughtProgram = function(index) {\r\n    $.post(self.endpoints.usersHaveAlreadyBoughtProgram, {\r\n      Users: [currentUser.AktorId],\r\n      ProgramKey: self.courseList()[index].Key\r\n    })\r\n      .success(function(data) {\r\n        var hasBoughtProgram = data;\r\n        if (hasBoughtProgram[currentUser.AktorId]) {\r\n          self.userHasAlreadyBoughtProgram()[index] = true;\r\n        } else {\r\n          self.userHasAlreadyBoughtProgram()[index] = false;\r\n          cart.addParticipantToCourse(self.courseList()[index].Id, currentUser);\r\n        }\r\n        self.userHasAlreadyBoughtProgram.valueHasMutated();\r\n      })\r\n      .fail(function(err) {\r\n        //TODO: add error message to template\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  var hasAlreadyBoughtPrograms = function() {\r\n    self.userHasAlreadyBoughtProgram([]);\r\n    if (self.chosenAgency() && self.chosenAgency().AktorId === '') {\r\n      for (var i = 0; i < self.courseList().length; i++) {\r\n        hasAlreadyBoughtProgram(i);\r\n      }\r\n    }\r\n  };\r\n\r\n  var hasAlreadyBoughtOnlineCourses = function() {\r\n    self.userHasAlreadyBoughtOnlineCourse([]);\r\n    if (self.chosenAgency() && self.chosenAgency().AktorId === '') {\r\n      for (var i = 0; i < self.courseList().length; i++) {\r\n        hasAlreadyBoughtOnlineCourse(i);\r\n      }\r\n    }\r\n  };\r\n\r\n  var hasAccessToCourses = function() {\r\n    var sequenceKeys = [];\r\n    for (var i = 0; i < self.courseList().length; i++) {\r\n      var course = self.courseList()[i];\r\n      if (course.EventType != 5 && course.EventType != 6) // exclude programs and packages\r\n        sequenceKeys.push(course.Key);\r\n    }\r\n    if (sequenceKeys.length == 0) return;\r\n    $.post(self.endpoints.getSequencesPublishedStatus, {\r\n      SequenceKeys: sequenceKeys\r\n    })\r\n      .success(function(data) {\r\n        Object.entries(data).forEach(function(entry) {\r\n          var key = entry[0];\r\n          var isPublished = entry[1];\r\n          if (!isPublished) {\r\n            var course = self.courseList().find(function(item) {\r\n              return item.Key === parseInt(key);\r\n            });\r\n            self.usersUnPublishedCourses.push(course);\r\n            self.removeCourse(course);\r\n          }\r\n        });\r\n      })\r\n      .fail(function(err) {\r\n        //TODO: add error message to template\r\n        self.errorText(err.responseText);\r\n      });\r\n  };\r\n\r\n  ko.postbox.subscribe(\r\n    'chosen_agency',\r\n    function() {\r\n      cart.resetOverlappingCoursesForParticipants(UPDATE_PARTICIPANTS_TOPIC);\r\n      hasAlreadyBoughtCourses();\r\n      hasAlreadyBoughtOnlineCourses();\r\n      hasAlreadyBoughtPrograms();\r\n      hasOverlappingSequencesInPackages();\r\n    },\r\n    true\r\n  );\r\n\r\n  self.hasAccessToCourses = function() {\r\n    self.usersUnPublishedCourses([]);\r\n    hasAccessToCourses();\r\n  };\r\n\r\n  self.removeCourse = function(course) {\r\n    cart.removeOverlappingCoursesForParticipants(\r\n      course.Id,\r\n      course.participants,\r\n      UPDATE_PARTICIPANTS_TOPIC\r\n    );\r\n    cart.removeCourseFromCart(course.Id);\r\n    alreadyAddedUser = false;\r\n    hasAlreadyBoughtCourses();\r\n    hasAlreadyBoughtOnlineCourses();\r\n    hasAlreadyBoughtPrograms();\r\n    hasOverlappingSequencesInPackages();\r\n  };\r\n\r\n  self.removeParticipant = function(participant, course) {\r\n    cart.removeOverlappingCoursesForParticipants(\r\n      course.Id,\r\n      [participant],\r\n      UPDATE_PARTICIPANTS_TOPIC\r\n    );\r\n    cart.removeParticipantFromCourse(course.Id, participant.AktorId);\r\n    hasOverlappingSequencesInPackages();\r\n  };\r\n\r\n  self.chosenAgency.subscribe(getPrices);\r\n  self.hasAccessToCourses();\r\n}\r\n\r\nmodule.exports = CheckoutOverviewPage;\r\n","var basePick = require('./_basePick'),\n    flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var basePickBy = require('./_basePickBy'),\n    hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","module.exports = \"<div class=\\\"content checkout-overview-page\\\">\\r\\n  <!-- ko if: usersUnPublishedCourses().length > 0 -->\\r\\n  <div class=\\\"row\\\">\\r\\n    <div class=\\\"mb-20\\\">\\r\\n      <div class=\\\"message is-error\\\" data-bind=\\\"visible: true\\\">\\r\\n        <div class=\\\"message-icon\\\">\\r\\n          <div class=\\\"info-circle\\\">\\r\\n            <span>!</span>\\r\\n          </div>\\r\\n        </div>\\r\\n        <div class=\\\"message-text\\\">\\r\\n          <div>\\r\\n            <p data-bind=\\\"html: texts.infoBoxUnpublishedCourses\\\"></p>\\r\\n            <ul class=\\\"mt-15\\\">\\r\\n              <!-- ko foreach: usersUnPublishedCourses -->\\r\\n              <li class=\\\"name\\\" data-bind=\\\"text: Heading\\\" style=\\\"font-weight: 700;\\\"></li>\\r\\n              <!-- /ko -->\\r\\n            </ul>\\r\\n          </div>\\r\\n        </div>\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n  <div class=\\\"row\\\">\\r\\n    <h2 data-bind=\\\"text: texts.pageTitle\\\"></h2>\\r\\n  </div>\\r\\n  <!-- ko if:\\r\\n    endpoints.agency\\r\\n    && endpoints.searchAgency\\r\\n    && endpoints.createAgency\\r\\n  -->\\r\\n  <div class=\\\"row\\\">\\r\\n    <!-- ko component: {name:\\\"choose-agency\\\", params: {\\r\\n        searchAgencyEndpoint: endpoints.searchAgency,\\r\\n        createAgencyEndpoint: endpoints.createAgency,\\r\\n        agencyEndpoint: endpoints.agency\\r\\n      }} -->\\r\\n    <!-- /ko -->\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n\\r\\n  <!-- ko component: {name:\\\"checkout-course-list\\\", params:{\\r\\n    courseList: courseList,\\r\\n    texts: texts,\\r\\n    links: links,\\r\\n    chosenAgency: chosenAgency,\\r\\n    totalDiscounts: totalDiscounts,\\r\\n    totalPrice: Total,\\r\\n    totalPriceIncVat: totalPriceIncVat,\\r\\n    totalFoodVat: totalFoodVat,\\r\\n    totalAccommodationVat: totalAccommodationVat,\\r\\n    totalOnlineCourseVat: totalOnlineCourseVat,\\r\\n    endpoints: endpoints,\\r\\n    userHasAlreadyBoughtCourse: userHasAlreadyBoughtCourse,\\r\\n    userHasAlreadyBoughtOnlineCourse: userHasAlreadyBoughtOnlineCourse,\\r\\n    userHasAlreadyBoughtProgram: userHasAlreadyBoughtProgram,\\r\\n    readonly: readonly,\\r\\n    removeParticipant: removeParticipant,\\r\\n    removeCourse: removeCourse,\\r\\n    memberHasDiscount: memberHasDiscount,\\r\\n    originalPrice: originalPrice,\\r\\n    getPrice: getPrice,\\r\\n    employeeList: employeeList,\\r\\n    acceptTermsForPrograms: acceptTermsForPrograms\\r\\n  }}-->\\r\\n  <!-- /ko -->\\r\\n\\r\\n  <div class=\\\"row spacing-large-top\\\" data-bind=\\\"visible: chosenAgency()\\\">\\r\\n    <div class=\\\"columns large-12 no-padding\\\">\\r\\n      <div class=\\\"left\\\">\\r\\n        <a data-bind=\\\"attr: {href: links.courseCatalogPage}\\\" class=\\\"btn btn-secondary inline\\\">\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.keepShopping\\\"></span>\\r\\n        </a>\\r\\n      </div>\\r\\n      <div class=\\\"right\\\" data-bind=\\\"visible: coursesSelected \\\">\\r\\n        <!-- ko ifnot: readonly -->\\r\\n        <button type=\\\"button\\\" class=\\\"btn btn-primary inline\\\"\\r\\n          data-bind=\\\"click: goToPayment, attr: { disabled: submitButtonDisabled }\\\">\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.selectPaymentMethod\\\"></span>\\r\\n        </button>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: readonly -->\\r\\n        <!-- this entire template is wrapped in a <form> tag rendered from .cshtml -->\\r\\n        <input type=\\\"hidden\\\" data-bind=\\\"value: encodeCart()\\\" name=\\\"model\\\" />\\r\\n        <button type=\\\"submit\\\" class=\\\"btn btn-primary inline\\\" data-bind=\\\"click: orderButton\\\">\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.submitOrder\\\"></span>\\r\\n        </button>\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('choose-payer', {\r\n  viewModel: require('./choose-payer'),\r\n  template: require('./choose-payer.template')\r\n});\r\n\r\n$('[data-choose-payer]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\nvar cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\n\r\nvar analytics = require('_js/analytics-ecommerce');\r\nvar APIHelper = require('_js/APIHelper');\r\nvar SearchPostalCode = require('_js/search-postal-code');\r\n\r\nfunction GetDistinctParticipants(cart) {\r\n  var participants = [].concat.apply(\r\n    [],\r\n    cart.courses.map(function(c) {\r\n      return c.participants;\r\n    })\r\n  );\r\n\r\n  var distinctParticipants = [];\r\n  var unique = {};\r\n\r\n  for (var i = 0; i < participants.length; i++) {\r\n    var id = participants[i].AktorId;\r\n    if (unique[id] === undefined) distinctParticipants.push(participants[i]);\r\n    unique[id] = 0;\r\n  }\r\n\r\n  return distinctParticipants;\r\n}\r\n\r\nfunction MissingField(name, value, isEmailField) {\r\n  this.name = name;\r\n\r\n  var validationMethods = [\r\n    { type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' }\r\n  ];\r\n\r\n  if (isEmailField)\r\n    validationMethods.push({\r\n      type: 'isEmail',\r\n      message: 'Feltet må være en gyldig epostadresse'\r\n    });\r\n\r\n  this.value = ko.observable(value).extend({\r\n    required: validationMethods\r\n  });\r\n}\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  self.isLoading = ko.observable(false);\r\n\r\n  if (params.summaryUrl === undefined) throw 'summaryUrl must be defined';\r\n\r\n  self.payerList = ko.observableArray([]);\r\n  self.API = params.api;\r\n  self.chosenPayerId = ko.observable();\r\n  self.hideInLists = ko.observable(false);\r\n  self.referenceNo = ko.observable('');\r\n  self.errorMessage = ko.observable(params.errorMessage);\r\n\r\n  self.backLink = params.backLink;\r\n  self.texts = params.texts;\r\n\r\n  // Used for validation of CRM fields.\r\n  self.email = new MissingField('Epost', '', true);\r\n  self.invoiceEmail = new MissingField('Fakturaepost', '', true);\r\n  self.billingAddress = new MissingField('Fakturaadresse', '');\r\n  self.billingPostCode = new MissingField('Postnummer', '');\r\n  self.billingCity = new MissingField('Poststed', '');\r\n  self.necessaryFields = [\r\n    self.email,\r\n    self.invoiceEmail,\r\n    self.billingAddress,\r\n    self.billingPostCode,\r\n    self.billingCity\r\n  ];\r\n\r\n  self.missingFields = ko.observableArray([]);\r\n  self.person = {};\r\n  self.dataUpdated = ko.observable(false);\r\n\r\n  self.validatePayer = function(el, ev) {\r\n    var payerId = self.chosenPayerId();\r\n    if (\r\n      payerId === undefined ||\r\n      payerId === '' ||\r\n      self.missingFields().length > 0\r\n    ) {\r\n      if (self.missingFields().length > 0) {\r\n        self.errorMessage(self.texts.missingPayerInfo);\r\n      } else {\r\n        self.errorMessage(self.texts.missingPayer);\r\n      }\r\n      ev.preventDefault();\r\n      return false;\r\n    }\r\n    //Will redirect\r\n    analytics.shoppingCartCheckedOut(3, cart.getCart(), params.summaryUrl);\r\n  };\r\n\r\n  var agency = cart.getCart().agency;\r\n  var distinctParticipants = GetDistinctParticipants(cart.getCart());\r\n  if (agency !== undefined && agency.AktorId !== '') {\r\n    distinctParticipants.unshift(agency);\r\n  }\r\n  self.payerList(distinctParticipants);\r\n\r\n  var setValidation = function(newValue) {\r\n    for (var i = 0; i < self.necessaryFields.length; i++) {\r\n      if (\r\n        self.necessaryFields[i].value() === null ||\r\n        self.necessaryFields[i].value().length === 0\r\n      ) {\r\n        self.necessaryFields[i].value.hasError(newValue);\r\n      }\r\n    }\r\n  };\r\n\r\n  var validateFields = function() {\r\n    for (var i = 0; i < self.necessaryFields.length; i++) {\r\n      if (\r\n        self.necessaryFields[i].value() === null ||\r\n        self.necessaryFields[i].value().length === 0 ||\r\n        self.necessaryFields[i].value.hasError()\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  };\r\n\r\n  self.updatePayerInformation = function() {\r\n    self.isLoading(true);\r\n\r\n    if (!validateFields()) {\r\n      self.dataUpdated(false);\r\n      setValidation(true);\r\n      self.isLoading(false);\r\n      return;\r\n    }\r\n\r\n    if (agency.AktorId === self.chosenPayerId()) {\r\n      // Replace values in agency object with the ones used in the missing field.\r\n      agency.Email = self.email.value();\r\n      agency.InvoiceEmail = self.invoiceEmail.value();\r\n      agency.BillingAddress = self.billingAddress.value();\r\n      agency.BillingPostCode = self.billingPostCode.value();\r\n      agency.BillingCity = self.billingCity.value();\r\n      APIHelper.post(\r\n        self.API.updateBillingInformationForAgency,\r\n        agency,\r\n        function() {\r\n          self.missingFields([]);\r\n          self.dataUpdated(true);\r\n          self.isLoading(false);\r\n          cart.updateAgency(agency);\r\n        },\r\n        function() {\r\n          self.dataUpdated(false);\r\n          self.isLoading(false);\r\n        }\r\n      );\r\n    } else {\r\n      self.person.Email = self.email.value();\r\n      self.person.InvoiceEmail = self.invoiceEmail.value();\r\n      self.person.BillingAddress = self.billingAddress.value();\r\n      self.person.BillingPostCode = self.billingPostCode.value();\r\n      self.person.BillingCity = self.billingCity.value();\r\n      var personData = {\r\n        AktorId: self.person.AktorId,\r\n        Email: self.person.Email,\r\n        InvoiceEmail: self.person.InvoiceEmail,\r\n        BillingAddress: self.person.BillingAddress,\r\n        BillingPostCode: self.person.BillingPostCode,\r\n        BillingCity: self.person.BillingCity\r\n      };\r\n\r\n      APIHelper.QcPost(\r\n        self.API.updateBillingInformationForEmployee,\r\n        personData,\r\n        function() {\r\n          self.missingFields([]);\r\n          self.dataUpdated(true);\r\n          self.isLoading(false);\r\n        },\r\n        function() {\r\n          self.dataUpdated(false);\r\n          self.isLoading(false);\r\n        }\r\n      );\r\n    }\r\n  };\r\n\r\n  var fillNecessaryFields = function(data) {\r\n    self.email.value(data.Email);\r\n    self.invoiceEmail.value(data.InvoiceEmail);\r\n    self.billingAddress.value(data.BillingAddress);\r\n    self.billingPostCode.value(data.BillingPostCode);\r\n    self.billingCity.value(data.BillingCity);\r\n  };\r\n\r\n  var setMissingFields = function() {\r\n    var tmpFields = [];\r\n    for (var i = 0; i < self.necessaryFields.length; i++) {\r\n      if (\r\n        self.necessaryFields[i].value() === null ||\r\n        self.necessaryFields[i].value().length === 0\r\n      ) {\r\n        tmpFields.push(self.necessaryFields[i]);\r\n      }\r\n    }\r\n    self.missingFields(tmpFields);\r\n  };\r\n\r\n  var updatePayerInCart = function() {\r\n    var payer = self.chosenPayerId();\r\n    var hideInLists = self.hideInLists() || false;\r\n    var referenceNo = self.referenceNo() || '';\r\n\r\n    self.dataUpdated(false);\r\n    self.missingFields([]);\r\n    self.email.value('');\r\n    self.invoiceEmail.value('');\r\n    self.billingAddress.value('');\r\n    self.billingCity.value('');\r\n    self.billingPostCode.value('');\r\n    setValidation(false);\r\n\r\n    if (agency.AktorId === payer) {\r\n      fillNecessaryFields(agency);\r\n      setMissingFields();\r\n    } else if (payer !== null && payer !== undefined) {\r\n      APIHelper.get(self.API.getEmployee + '?aktorId=' + payer, function(data) {\r\n        fillNecessaryFields(data);\r\n        setMissingFields();\r\n        self.person = JSON.parse(JSON.stringify(data));\r\n      });\r\n    }\r\n\r\n    if (self.missingFields().length === 0) {\r\n      $('#common-error-message').addClass('hidden');\r\n    }\r\n\r\n    cart.replacePayer({\r\n      AktorId: payer,\r\n      HideInLists: hideInLists,\r\n      ReferenceNo: referenceNo\r\n    });\r\n  };\r\n\r\n  var searchPostalCode = new SearchPostalCode(null, self.billingCity.value);\r\n\r\n  self.billingPostCode.value.subscribe(function(val) {\r\n    searchPostalCode.searchForCity(val);\r\n  });\r\n\r\n  self.chosenPayerId.subscribe(updatePayerInCart);\r\n  self.hideInLists.subscribe(updatePayerInCart);\r\n  self.referenceNo.subscribe(updatePayerInCart);\r\n\r\n  var currentPayer = cart.getCart().payer;\r\n  if (currentPayer !== undefined) {\r\n    self.chosenPayerId(currentPayer.AktorId);\r\n    self.hideInLists(currentPayer.HideInLists);\r\n    self.referenceNo(currentPayer.ReferenceNo);\r\n  }\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"row\\\">\\r\\n  <!-- ko component: {\\r\\n    name: 'message',\\r\\n    params: {\\r\\n        isOpen: errorMessage,\\r\\n        message: errorMessage,\\r\\n        type: ko.observable('is-error')\\r\\n    }\\r\\n  } -->\\r\\n  <!-- /ko -->\\r\\n  <div class=\\\"columns large-12 no-padding\\\">\\r\\n    <div class=\\\"container-white\\\">\\r\\n      <div class=\\\"payment-block\\\">\\r\\n        <h2 data-bind=\\\"text: texts.choosePayer\\\"></h2>\\r\\n        <div class=\\\"row\\\">\\r\\n          <div class=\\\"large-3 columns\\\">\\r\\n            <select class=\\\"form-select-wrapper form-select-wrapper-atom\\\" data-bind=\\\"options: payerList,\\r\\n              optionsValue: 'AktorId',\\r\\n              optionsText: 'Name',\\r\\n              value: chosenPayerId,\\r\\n              optionsCaption: texts.choosePayer\\r\\n            \\\"></select>\\r\\n          </div>\\r\\n        </div>\\r\\n        <div>\\r\\n          <input data-bind=\\\"checked: hideInLists\\\" type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\" id=\\\"option-3\\\" name=\\\"checkbox-name\\\"\\r\\n            value=\\\"checkbox-value\\\">\\r\\n          <label for=\\\"option-3\\\" data-bind=\\\"text: texts.hideInLists\\\"></label>\\r\\n        </div>\\r\\n      </div>\\r\\n      <!-- ko if: missingFields().length > 0 -->\\r\\n      <hr />\\r\\n      <h3 data-bind=\\\"text: texts.missingFields\\\"></h3>\\r\\n      <!-- ko foreach: missingFields -->\\r\\n      <div class=\\\"row form-row\\\">\\r\\n        <div class=\\\"columns large-6\\\">\\r\\n          <label class=\\\"form-label\\\" data-bind=\\\"css: { 'has-error': $data.hasError }\\\">\\r\\n            <span data-bind=\\\"text: $data.name\\\"></span>\\r\\n            <input class=\\\"form-input \\\" type=\\\"text\\\" placeholder=\\\"\\\" data-bind=\\\"value: $data.value, valueUpdate: 'blur', css: { 'has-error': $data.value.hasError, 'is-successful': $data.value.isSuccessful }\\\"\\r\\n              aria-required=\\\"true\\\" />\\r\\n            <span class=\\\"icon-check\\\" data-bind=\\\"css: { active: $data.value.isSuccessful }\\\"></span>\\r\\n            <span class=\\\"icon-close\\\" data-bind=\\\"css: { active: $data.value.hasError }\\\"></span>\\r\\n            <div class=\\\"error-box-container\\\">\\r\\n              <div class=\\\"error-box pointer-left\\\" data-bind=\\\"css: { active: $data.value.hasError }\\\">\\r\\n                <span data-bind=\\\"text: $data.value.validationMessage\\\"></span>\\r\\n              </div>\\r\\n            </div>\\r\\n          </label>\\r\\n        </div>\\r\\n      </div>\\r\\n      <!-- /ko -->\\r\\n      <div class=\\\"loader is-loading\\\" data-bind=\\\"visible: isLoading\\\"></div>\\r\\n      <button class=\\\"btn btn-primary inline small\\\" data-bind=\\\"click: updatePayerInformation\\\">\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.save\\\"></span>\\r\\n      </button>\\r\\n      <!-- /ko -->\\r\\n      <!-- ko if: dataUpdated() -->\\r\\n      <div class=\\\"validation-success\\\" data-bind=\\\"text: texts.validationSuccess\\\"></div>\\r\\n      <!-- /ko -->\\r\\n\\r\\n      <hr />\\r\\n      <div class=\\\"payment-block\\\">\\r\\n        <h2 class=\\\"block-grey-heading\\\" data-bind=\\\"text: texts.referenceNumber\\\"></h2>\\r\\n        <label for=\\\"reference-number-input\\\" class=\\\"visually-hidden\\\">Referansenummer (valgfritt)</label>\\r\\n        <input id=\\\"reference-number-input\\\" class=\\\"form-input form-input-inline\\\" type=\\\"text\\\" data-bind=\\\"value:referenceNo\\\" />\\r\\n      </div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n<div class=\\\"row spacing-large-top\\\">\\r\\n  <div class=\\\"columns large-12 no-padding\\\">\\r\\n    <div class=\\\"left\\\">\\r\\n      <a class=\\\"btn btn-secondary inline\\\" data-bind=\\\"attr: { href: backLink.url }\\\">\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"text: backLink.text\\\"></span>\\r\\n      </a>\\r\\n    </div>\\r\\n    <div class=\\\"right\\\" data-bind=\\\"click: validatePayer\\\">\\r\\n      <a class=\\\"btn btn-primary inline\\\">\\r\\n        <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.nextButton\\\"></span>\\r\\n      </a>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('date-time-list', {\r\n  viewModel: require('./date-time-list'),\r\n  template: require('./date-time-list.template')\r\n});\r\n\r\n$('[data-date-time-list]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","function DateTimeList(params) {\r\n  this.dates = params.dates;\r\n  this.showTime = params.showTime || false;\r\n}\r\n\r\nmodule.exports = DateTimeList;\r\n","module.exports = \"<span class=\\\"date-time-list\\\">\\r\\n  <!-- ko foreach: dates -->\\r\\n  <p class=\\\"date-time-list-time\\\" data-bind=\\\"text: Date\\\"></p>\\r\\n  <!-- ko if: $parent.showTime -->\\r\\n  <p data-bind=\\\"text: Time\\\"></p>\\r\\n  <!-- /ko-->\\r\\n  <!-- /ko-->\\r\\n</span>\\r\\n\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('digital-signing-order-form', {\r\n  viewModel: require('./digital-signing-order-form'),\r\n  template: require('./digital-signing-order-form.template')\r\n});\r\n\r\n$('[data-digital-signing-order-form]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\n/*\r\n    params.model = NarfWeb.Presentation.ViewModels.DigitalSigningOrderViewModel\r\n    params.tokenKey = string\r\n    params.token = string\r\n*/\r\n\r\nfunction DigitalSigningOrderForm(params) {\r\n  if (params === undefined || params.model === undefined) {\r\n    throw 'Digital Signing Order Form requires params.model as DigitalSigningOrderViewModel';\r\n  }\r\n\r\n  var self = this;\r\n  var model = params.model;\r\n\r\n  var checkedAgencies = $.map(model.Agencies, function(agency) {\r\n    if (agency.Checked) {\r\n      return agency.Id;\r\n    }\r\n  });\r\n\r\n  this.tokenKey = params.tokenKey;\r\n  this.token = params.token;\r\n  this.apiEndpoint = model.ApiEndpoint;\r\n  this.user = model.User;\r\n  this.blockId = model.BlockId;\r\n\r\n  this.loading = ko.observable(false);\r\n  this.title = ko.observable(model.Title);\r\n  this.formTextTop = ko.observable(model.FormTextTop);\r\n  this.formTextMiddle = ko.observable(model.FormTextMiddle);\r\n  this.formTextBottom = ko.observable(model.FormTextBottom);\r\n  this.consentText = ko.observable(model.FormConsentText);\r\n  this.successUrl = ko.observable(model.SuccessRedirectUrl);\r\n  this.errorText = ko.observable(model.ErrorText);\r\n  this.notAgencyAdminText = ko.observable(model.NotAgencyAdminText);\r\n  this.agencies = ko.observableArray(model.Agencies);\r\n\r\n  this.showErrorText = ko.observable(false);\r\n  this.checkedAgencies = ko.observableArray(checkedAgencies);\r\n  this.checkedConsent = ko.observable(false);\r\n\r\n  this.checkedNotDisabledAgencies = ko.computed(function() {\r\n    return $.map(self.checkedAgencies(), function(chkAgencyId) {\r\n      return $.map(self.agencies(), function(agency) {\r\n        if (chkAgencyId === agency.Id && !agency.Disabled) {\r\n          return agency.Id;\r\n        }\r\n      });\r\n    });\r\n  });\r\n\r\n  this.formSubmittable = ko.computed(function() {\r\n    if (!self.checkedConsent()) {\r\n      return false;\r\n    }\r\n\r\n    return self.checkedNotDisabledAgencies().length;\r\n  });\r\n}\r\n\r\nDigitalSigningOrderForm.prototype.labelTextForAgency = function(agency) {\r\n  var name = agency.Name;\r\n\r\n  if (agency.Disabled && agency.Checked) {\r\n    return name + ' (Har allerede aktivt abonnement)';\r\n  }\r\n\r\n  if (agency.Disabled) {\r\n    return name + ' (Ikke tilgjengelig)';\r\n  }\r\n\r\n  return name;\r\n};\r\n\r\nDigitalSigningOrderForm.prototype.onSubmit = function(data, event) {\r\n  var self = this;\r\n\r\n  event.preventDefault();\r\n  this.loading(true);\r\n\r\n  var url = this.apiEndpoint;\r\n  var body = {\r\n    user: this.user,\r\n    agencies: this.checkedNotDisabledAgencies(),\r\n    consent: this.checkedConsent(),\r\n    blockId: this.blockId\r\n  };\r\n  body[this.tokenKey] = this.token;\r\n\r\n  APIHelper.post(\r\n    url,\r\n    body,\r\n    function(response) {\r\n      if (response.Success) {\r\n        window.location = self.successUrl();\r\n      } else {\r\n        self.showErrorText(true);\r\n        self.loading(false);\r\n      }\r\n    },\r\n    function(response) {\r\n      self.showErrorText(true);\r\n      self.loading(false);\r\n      var location = window.location.href || document.URL;\r\n\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: digital-signing-order-form.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + response.responseText,\r\n          'status: ' + response.status,\r\n          'statusText: ' + response.statusText,\r\n          'requestUrl: ' + url,\r\n          'requestBody: ' + JSON.stringify(body)\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nmodule.exports = DigitalSigningOrderForm;\r\n","module.exports = \"<div class=\\\"digital-signing-order-form custom-form spacing-top--none\\\">\\r\\n    <!-- ko if: !showErrorText() && agencies().length > 0  -->\\r\\n    <form action=\\\"/\\\" class=\\\"form\\\" data-bind=\\\"event: { 'submit': onSubmit }\\\">\\r\\n        <!-- ko if: title -->\\r\\n        <h2 data-bind=\\\"text: title\\\"></h2>\\r\\n        <!-- /ko -->\\r\\n        <!-- ko if: formTextTop -->\\r\\n        <div data-bind=\\\"html: formTextTop\\\"></div>\\r\\n        <!-- /ko -->\\r\\n        <fieldset class=\\\"fieldset--unstyled\\\">\\r\\n            <legend class=\\\"sr-only\\\">Velg selskap</legend>\\r\\n            <ul data-bind=\\\"foreach: { data: agencies, as: 'agency' }\\\">\\r\\n                <li>\\r\\n                    <div class=\\\"filter-checkbox\\\">\\r\\n                        <input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n                            data-bind=\\\"attr: { id: 'agencies-' + $index(), value: agency.Id }, disable: agency.Disabled ,checked: $parent.checkedAgencies\\\"/>\\r\\n                        <label data-bind=\\\"attr: { for: 'agencies-' + $index() }, text: $parent.labelTextForAgency(agency)\\\"></label>\\r\\n                    </div>\\r\\n                </li>\\r\\n            </ul>\\r\\n        </fieldset>\\r\\n         <!-- ko if: formTextMiddle -->\\r\\n         <div data-bind=\\\"html: formTextMiddle\\\"></div>\\r\\n         <!-- /ko -->\\r\\n         <!-- ko if: consentText -->\\r\\n         <div class=\\\"filter-checkbox\\\">\\r\\n            <input type=\\\"checkbox\\\" class=\\\"form-input form-input-checkbox\\\"\\r\\n                data-bind=\\\"attr: { id: 'consent', value: 'consent' }, checked: checkedConsent\\\"/>\\r\\n            <label data-bind=\\\"attr: { for: 'consent' }, html: consentText\\\"></label>\\r\\n        </div>\\r\\n         <!-- /ko -->\\r\\n         <!-- ko if: formTextBottom -->\\r\\n         <div data-bind=\\\"html: formTextBottom\\\"></div>\\r\\n         <!-- /ko -->\\r\\n        <input type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"enable: formSubmittable\\\" value=\\\"Send bestilling\\\" /> \\r\\n    </form>\\r\\n    <!-- /ko -->    \\r\\n    <!-- ko if: agencies().length === 0 -->\\r\\n    <div data-bind=\\\"html: notAgencyAdminText\\\"></div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: showErrorText() -->\\r\\n    <div>\\r\\n        <h2 data-bind=\\\"text: errorText\\\"></h2>\\r\\n    </div>\\r\\n    <!-- /ko -->\\r\\n    <div class=\\\"overlay overlay-grey\\\" data-bind=\\\"css: { 'is-loading': loading }\\\">\\r\\n        <div class=\\\"loader-container\\\">\\r\\n            <div class=\\\"loader\\\" data-bind=\\\"css: { 'is-loading': loading }\\\"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('happening-list-item', {\r\n  viewModel: require('./happening-list-item'),\r\n  template: require('./happening-list-item.template')\r\n});\r\n\r\n$('[data-happening-list-item]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","function happeningListItemModel(params) {\r\n  var self = this;\r\n  self.item = params.item;\r\n  self.item.categoryName = Object.values(self.item.Categories)[0];\r\n  self.labels = params.labels;\r\n}\r\n\r\nmodule.exports = happeningListItemModel;\r\n","module.exports = \"<!-- ko with: item -->\\r\\n    <td>\\r\\n        <span class=\\\"responsive-table__heading\\\" aria-hidden=\\\"true\\\" data-bind=\\\"text: $parent.labels.SearchTitle\\\">\\r\\n        </span>\\r\\n        <span class=\\\"responsive-table__cell\\\">\\r\\n            <a href=\\\"\\\" data-bind=\\\"text: Title, attr: {href: Url}\\\"></a>\\r\\n            <p data-bind=\\\"text: ShortIntro\\\"></p>\\r\\n        </span>\\r\\n    </td>\\r\\n    <td>\\r\\n        <span class=\\\"responsive-table__heading\\\" aria-hidden=\\\"true\\\" data-bind=\\\"text: $parent.labels.Type\\\"></span>\\r\\n        <span class=\\\"responsive-table__cell\\\" data-bind=\\\"text: categoryName\\\"></span>\\r\\n    </td>\\r\\n    <td>\\r\\n        <span class=\\\"responsive-table__heading\\\" aria-hidden=\\\"true\\\" data-bind=\\\"text: $parent.labels.Date\\\"></span>\\r\\n        <span class=\\\"responsive-table__cell-date\\\">\\r\\n        <span class=\\\"icon-calendar\\\"></span>\\r\\n        <span data-bind=\\\"text: StartTime\\\"></span>\\r\\n        <!-- ko if: EndTime -->\\r\\n            <span>-</span>\\r\\n            <br/>\\r\\n            <span class=\\\"enddate-view\\\" data-bind=\\\"text: EndTime\\\"></span>\\r\\n        <!-- /ko -->\\r\\n    </td>\\r\\n    <td>\\r\\n        <span class=\\\"responsive-table__heading\\\" aria-hidden=\\\"true\\\" data-bind=\\\"text: $parent.labels.Place\\\"></span>\\r\\n        <span class=\\\"responsive-table__cell-places\\\">\\r\\n        <span class=\\\"icon-pin\\\" data-bind=\\\"visible: Places !== null\\\"></span>\\r\\n        <ul>\\r\\n            <!-- ko foreach: Places -->\\r\\n                <li data-bind=\\\"text: $data\\\"></li>\\r\\n            <!-- /ko -->\\r\\n        </ul>\\r\\n    </td>\\r\\n<!-- /ko -->\"","var ko = require('knockout');\r\n\r\nko.components.register('loader', {\r\n  viewModel: require('./loader'),\r\n  template: require('./loader.template')\r\n});\r\n\r\n$('[data-loader]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nfunction Loader(params) {\r\n  if (params.isLoading === undefined) {\r\n    this.isLoading = false;\r\n  } else {\r\n    this.isLoading = params.isLoading;\r\n  }\r\n  this.isLoading = ko.observable().subscribeTo('loadingIndicator');\r\n}\r\n\r\nLoader.prototype.triggerLoading = function() {\r\n  this.isLoading(!this.isLoading());\r\n};\r\n\r\nmodule.exports = Loader;\r\n","module.exports = \"<!-- ko if: isLoading -->\\r\\n    <div class=\\\"loader-background is-loading\\\">\\r\\n        <div class=\\\"loader is-loading loader-large\\\"></div>\\r\\n    </div>\\r\\n<!-- /ko -->\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('media-list-item', {\r\n  viewModel: require('./media-tile'),\r\n  template: require('./media-list-item.template')\r\n});\r\n\r\n$('[data-media-list-item]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n\r\nko.components.register('media-tile', {\r\n  viewModel: require('./media-tile'),\r\n  template: require('./media-tile.template')\r\n});\r\n\r\n$('[data-media-tile]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","module.exports = \"<!-- ko with: item -->\\r\\n<td>\\r\\n  <a class=\\\"course-heading\\\" href=\\\"\\\"\\r\\n    data-bind=\\\"text: Heading, click: $parent.trackAndRedirect, event: { mousedown: $parent.trackAndRedirectMousedown }, attr: {href: Url}\\\"></a>\\r\\n</td>\\r\\n<td>\\r\\n  <!-- ko foreach: $parent.authorizationCredits -->\\r\\n  <!-- ko if: AuthorizationType == $component.filterAuthorizationType() -->\\r\\n  <div class=\\\"course-credits-block-container\\\">\\r\\n    <span class=\\\"course-credits-category\\\" data-bind=\\\"text: DisplayName\\\"></span>\\r\\n    <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n    <div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n      <span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n        <!-- ko if: Hours -->\\r\\n        <!-- ko component: {\\r\\n                      name: 'calculator-timeunit',\\r\\n                      params: { type: 0 }\\r\\n                    } -->\\r\\n        <!-- /ko -->\\r\\n        <!-- /ko -->\\r\\n      </span>\\r\\n    </div>\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n  <!-- /ko -->\\r\\n\\r\\n</td>\\r\\n<td>\\r\\n  <span class=\\\"icon\\\" data-bind=\\\"css: $parent.eventType\\\"></span>\\r\\n  <span class=\\\"media-tile-text\\\" data-bind=\\\"text: EventTypeText\\\"></span>\\r\\n</td>\\r\\n<td>\\r\\n  <span class=\\\"cityAndDate\\\" data-bind=\\\"visible: EventType != 3 || EventType == 6\\\">\\r\\n    <span class=\\\"icon icon-pin\\\" data-bind=\\\"visible: City\\\"></span>\\r\\n    <span class=\\\"media-tile-text\\\" data-bind=\\\"text: City, visible: City\\\"></span>\\r\\n    <span class=\\\"icon icon-calendar\\\" data-bind=\\\"visible: DateString\\\"></span>\\r\\n    <span class=\\\"media-tile-text\\\" data-bind=\\\"visible: DateString, text: DateString\\\"></span>\\r\\n  </span>\\r\\n</td>\\r\\n<td>\\r\\n  <!-- ko if: $parent.availability===\\\"few\\\" && !$parent.item.IsPurchased-->\\r\\n  <div class=\\\"course-availability-information few\\\" data-bind=\\\"text: $parent.texts.fewRemainingSeats\\\"></div>\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n  <!-- ko if: $parent.availability===\\\"full\\\" -->\\r\\n  <div class=\\\"course-availability-information full\\\" data-bind=\\\"text: $parent.texts.soldOut\\\"></div>\\r\\n  <!-- /ko -->\\r\\n  \\r\\n  <!-- ko if: $parent.item.IsPurchased -->\\r\\n  <div class=\\\"course-availability-information purchased\\\" data-bind=\\\"text: $parent.texts.purchased\\\"></div>\\r\\n  <!-- /ko -->\\r\\n\\r\\n<td>\\r\\n  <!-- ko if: $parent.hasRNFriProduct-->\\r\\n  <div data-quick-purchase-button data-bind=\\\"component: {\\r\\n    name: 'quick-purchase-button',\\r\\n        params: {\\r\\n          course: $parent.item,\\r\\n          text: window.language.addToMyCourse,\\r\\n          addedText: window.language.addedToMyCourse,\\r\\n          quickPurchaseOnlineCourse: $parent.quickPurchaseOnlineCourse,\\r\\n          isCompact: true\\r\\n        }\\r\\n    }\\\">\\r\\n  </div>\\r\\n  <!-- /ko -->\\r\\n\\r\\n  <!-- ko if: !$parent.hasRNFriProduct -->\\r\\n  <button class=\\\"btn btn-shopping round has-text\\\"\\r\\n    data-bind=\\\"click: $parent.addToCart, visible: $parent.showCart, css: { purchased: $parent.isPurchased }\\\">\\r\\n    <span class=\\\"btn-bg\\\"></span>\\r\\n    <span class=\\\"not-added\\\">\\r\\n      <span class=\\\"icon icon-cart\\\"></span>\\r\\n      <span class=\\\"btn-text\\\" data-bind=\\\"visible: $parent.availability != 'full', text: $parent.texts.addToCart\\\"></span>\\r\\n      <span class=\\\"btn-text\\\"\\r\\n        data-bind=\\\"visible: $parent.availability === 'full', html: $parent.texts.addToWaitingList\\\"></span>\\r\\n    </span>\\r\\n    <span class=\\\"added\\\">\\r\\n      <span class=\\\"icon icon-check\\\"></span>\\r\\n      <span class=\\\"btn-text\\\" data-bind=\\\"text: $parent.texts.addedToCart\\\"></span>\\r\\n    </span>\\r\\n  </button>\\r\\n  <!-- /ko -->\\r\\n</td>\\r\\n<!-- /ko -->\"","module.exports = \"<div class=\\\"media-tile\\\">\\r\\n  <div class=\\\"media-tile-image-wrapper\\\">\\r\\n    <div class=\\\"media-tile-image-bgimage\\\" data-bind=\\\"style: { 'background-image': image }\\\"></div>\\r\\n    <div class=\\\"media-tile-user-booking-information\\\" data-bind=\\\"visible: showCart\\\">\\r\\n      <button class=\\\"btn btn-shopping round has-text\\\" data-bind=\\\"click: addToCart, css: { purchased: isPurchased }\\\">\\r\\n        <span class=\\\"btn-bg\\\"></span>\\r\\n        <span class=\\\"not-added\\\">\\r\\n          <span class=\\\"icon icon-cart\\\"></span>\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"visible: availability != 'full', text: texts.addToCart\\\"></span>\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"visible: availability === 'full', html: texts.addToWaitingList\\\"></span>\\r\\n        </span>\\r\\n        <span class=\\\"added\\\">\\r\\n          <span class=\\\"icon icon-check\\\"></span>\\r\\n          <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.addedToCart\\\"></span>\\r\\n        </span>\\r\\n      </button>\\r\\n    </div>\\r\\n    <!-- ko if: availability===\\\"few\\\" -->\\r\\n    <div class=\\\"course-availability-information few\\\" data-bind=\\\"text: texts.fewRemainingSeats\\\"></div>\\r\\n    <!-- /ko -->\\r\\n    <!-- ko if: availability===\\\"full\\\" -->\\r\\n    <div class=\\\"course-availability-information full\\\" data-bind=\\\"text: texts.soldOut\\\"></div>\\r\\n    <!-- /ko -->\\r\\n  </div>\\r\\n  <div class=\\\"media-tile-info-wrapper\\\" data-bind=\\\"with: item\\\">\\r\\n    <div class=\\\"media-tile-text-wrapper\\\" data-fixed-height>\\r\\n      <a data-bind=\\\"click: $parent.trackAndRedirect\\\">\\r\\n        <h3 class=\\\"media-tile-heading\\\" data-bind=\\\"text: Heading\\\"></h3>\\r\\n      </a>\\r\\n      <!-- ko if: Ingress-->\\r\\n      <p data-bind=\\\"text: Ingress, css: truncateClass\\\"></p>\\r\\n      <!-- /ko-->\\r\\n      <div class=\\\"media-tile-hours-container\\\">\\r\\n        <!-- ko foreach: $parent.authorizationCredits -->\\r\\n        <!-- ko if: AuthorizationType == $component.filterAuthorizationType() -->\\r\\n        <div class=\\\"course-credits-block-container\\\">\\r\\n          <span class=\\\"course-credits-category\\\" data-bind=\\\"text: DisplayName\\\"></span>\\r\\n          <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n          <div class=\\\"course-credits-block-timeunits-container\\\">\\r\\n            <span class=\\\"course-credits-block-timeunits clearfix\\\">\\r\\n              <!-- ko if: Hours -->\\r\\n              <!-- ko component: {\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tname: 'calculator-timeunit',\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tparams: { type: 0 }\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t} -->\\r\\n              <!-- /ko -->\\r\\n              <!-- /ko -->\\r\\n            </span>\\r\\n          </div>\\r\\n        </div>\\r\\n        <!-- /ko -->\\r\\n        <!-- /ko -->\\r\\n      </div>\\r\\n    </div>\\r\\n    <div class=\\\"course-tile-footer\\\">\\r\\n      <ul class=\\\"media-tile-facts\\\">\\r\\n        <li data-bind=\\\"css: { online: EventType === 3 }\\\">\\r\\n          <span class=\\\"icon\\\" data-bind=\\\"css: $parent.eventType\\\"></span>\\r\\n          <span class=\\\"media-tile-text\\\" data-bind=\\\"text: EventTypeText\\\"></span>\\r\\n        </li>\\r\\n        <li data-bind=\\\"visible: EventType != 3 && DateString\\\">\\r\\n          <span class=\\\"icon icon-calendar\\\"></span>\\r\\n          <span class=\\\"media-tile-text-container\\\">\\r\\n            <span class=\\\"media-tile-text\\\" data-bind=\\\"text: DateString\\\"></span>\\r\\n            <!-- ko if: EventType != 3 && TimeString -->\\r\\n            <span class=\\\"media-tile-text time\\\" data-bind=\\\"text: TimeString\\\"></span>\\r\\n            <!-- /ko -->\\r\\n          </span>\\r\\n        </li>\\r\\n        <li data-bind=\\\"visible: EventType != 3 && City\\\">\\r\\n          <span class=\\\"icon icon-pin\\\"></span>\\r\\n          <span class=\\\"media-tile-text\\\" data-bind=\\\"text: City\\\"></span>\\r\\n        </li>\\r\\n      </ul>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('my-courses-block', {\r\n  viewModel: require('./my-courses-block'),\r\n  template: require('./my-courses-block.template')\r\n});\r\n\r\n$('[data-my-courses-block]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction MyCoursesBlock(params) {\r\n  this.API = params.api;\r\n  this.links = params.links;\r\n  this.texts = params.texts;\r\n  this.numberOfOnlineCourses = ko.observable();\r\n  this.numberOfRegularCourses = ko.observable();\r\n\r\n  this.getNumberOfPlannedCourses();\r\n}\r\n\r\nMyCoursesBlock.prototype.getNumberOfPlannedCourses = function() {\r\n  var self = this,\r\n    url = this.API.numberOfPlannedCoursesUrl;\r\n\r\n  APIHelper.get(url, function(response) {\r\n    self.numberOfRegularCourses(response.Item1);\r\n    self.numberOfOnlineCourses(response.Item2);\r\n  });\r\n};\r\n\r\nmodule.exports = MyCoursesBlock;\r\n","module.exports = \"<!-- ko if: (numberOfOnlineCourses === 0 && numberOfRegularCourses === 0) -->\\r\\n<a data-bind=\\\"attr: { href: links.courseCatalogReference}\\\" class=\\\"block-link-courses\\\">\\r\\n  <h2 data-bind=\\\"text: texts.title\\\"></h2>\\r\\n  <p class=\\\"truncate\\\" data-bind=\\\"text: texts.intro\\\"></p>\\r\\n  <span class=\\\"fake-link\\\" data-bind=\\\"text: texts.goToCourseCatalog\\\"></span>\\r\\n</a>\\r\\n<!-- /ko-->\\r\\n\\r\\n<div class=\\\"block-link-courses\\\">\\r\\n  <a class=\\\"my-planned-courses\\\" data-bind=\\\"attr: { href: links.myCoursesReference}\\\">\\r\\n    <span data-bind=\\\"text: texts.myPlannedCoursesTitle\\\"></span></a>\\r\\n  <ul class=\\\"block-link-list\\\">\\r\\n    <li class=\\\"list-element\\\" data-bind=\\\"visible: numberOfRegularCourses() > -1\\\">\\r\\n      <!-- ko text: numberOfRegularCourses() + ' ' + texts.RegularCoursesTitle -->\\r\\n      <!-- /ko -->\\r\\n    </li>\\r\\n    <li class=\\\"list-element\\\" data-bind=\\\"visible: numberOfOnlineCourses() > -1\\\">\\r\\n      <!-- ko text: numberOfOnlineCourses() + ' ' + texts.netCoursesTitle -->\\r\\n      <!-- /ko -->\\r\\n    </li>\\r\\n  </ul>\\r\\n  <a data-bind=\\\"attr: { href: links.myCoursesReference}\\\" class=\\\"more-content-link\\\">\\r\\n    <span data-bind=\\\"text: texts.myCoursesButtonText\\\"></span><span class=\\\"icon-arrow-full\\\"></span>\\r\\n  </a>\\r\\n</div>\\r\\n\"","var ko = require('knockout');\r\n\r\nko.components.register('purchase-button', {\r\n  viewModel: require('./purchase-button'),\r\n  template: require('./purchase-button.template')\r\n});\r\n\r\n$('[data-purchase-button]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  self.text = params.text;\r\n  self.addedText = params.addedText;\r\n  self.course = params.course;\r\n  self.isCompact = params.isCompact;\r\n  self.isPurchased = ko.observable(\r\n    cart.findCourseInCart(cart.getCart(), self.course.Id) ? true : false\r\n  );\r\n  self.isInArticle = ko.observable(params.isInArticle);\r\n  self.courseId = null;\r\n  self.purchase = function() {\r\n    if (self.isPurchased()) return;\r\n\r\n    self.isPurchased(true);\r\n    self.courseId = params.course.Id;\r\n    cart.addCourseToCart(params.course, params.pageTypeName);\r\n  };\r\n\r\n  // Set isPurchased to false when receiving a course that matches 'params.course' on the 'removeCourse' topic.\r\n  ko.postbox.subscribe(\r\n    'removeCourse',\r\n    function(course) {\r\n      if (course.Id === this.courseId) {\r\n        this.isPurchased(false);\r\n      }\r\n      if (self.isInArticle()) {\r\n        this.isInArticle(true);\r\n      }\r\n    },\r\n    this,\r\n    true\r\n  );\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<button class=\\\"btn btn-shopping has-text\\\" data-bind=\\\"click: purchase, css: { purchased: isPurchased, round: isCompact, red: isInArticle }\\\">\\r\\n  <span class=\\\"btn-bg\\\"></span>\\r\\n  <span class=\\\"not-added\\\">\\r\\n    <span class=\\\"icon icon-cart\\\"></span>\\r\\n    <span class=\\\"btn-text\\\" data-bind=\\\"text: text\\\"></span>\\r\\n  </span>\\r\\n  <span class=\\\"added\\\">\\r\\n    <span class=\\\"icon icon-check\\\"></span>\\r\\n    <span class=\\\"btn-text\\\" data-bind=\\\"text: addedText\\\"></span>\\r\\n  </span>\\r\\n</button>\"","var ko = require('knockout');\r\n\r\nko.components.register('quick-purchase-button', {\r\n  viewModel: require('./quick-purchase-button'),\r\n  template: require('./quick-purchase-button.template')\r\n});\r\n\r\n$('[data-quick-purchase-button]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n  self.text = params.text;\r\n  self.addedText = params.addedText;\r\n  self.course = params.course;\r\n  self.isCompact = params.isCompact;\r\n  self.notifyChangeInCategory = params.notify ? true : false;\r\n\r\n  if (!self.course.IsPurchased || !ko.isObservable(self.course.IsPurchased)) {\r\n    self.course.IsPurchased = ko.observable(!!self.course.IsPurchased);\r\n  }\r\n\r\n  self.isPurchased = ko.pureComputed({\r\n    read: function () {\r\n      return self.course.IsPurchased();\r\n    },\r\n    write: function (value) {\r\n      self.course.IsPurchased(value);\r\n    }\r\n  });\r\n\r\n  self.isInArticle = ko.observable(params.isInArticle);\r\n  self.quickPurchaseOnlineCourse = params.quickPurchaseOnlineCourse;\r\n  self.loading = ko.observable(false);\r\n  self.purchase = function() {\r\n    if (self.isPurchased()) return;\r\n\r\n    self.loading(true);\r\n\r\n    $.post(self.quickPurchaseOnlineCourse + '?courseKey=' + self.course.Key)\r\n      .success(function(result) {\r\n        self.course.IsPurchased(result);\r\n        self.loading(false);\r\n        ko.postbox.publish('changeInCategoryRequirement', result);\r\n      })\r\n      .fail(function(err) {\r\n        self.loading(false);\r\n      });\r\n  };\r\n\r\n  // Set isPurchased to false when receiving a course that matches 'params.course' on the 'removeCourse' topic.\r\n  ko.postbox.subscribe(\r\n    'removeCourse',\r\n    function(course) {\r\n      if (course.Id === self.course.Id) {\r\n        self.course.IsPurchased(false);\r\n      }\r\n      if (self.isInArticle()) {\r\n        self.isInArticle(true);\r\n      }\r\n    },\r\n    null,\r\n    self\r\n  );\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"\\r\\n  <!-- ko if: !loading() -->\\r\\n  <button class=\\\"btn btn-quick-shopping round has-text\\\"\\r\\n    data-bind=\\\"click: purchase, css: { purchased: isPurchased, round: isCompact, red: isInArticle }\\\">\\r\\n    <span class=\\\"btn-bg\\\"></span>\\r\\n    <span class=\\\"not-added\\\">\\r\\n      <span class=\\\"icon icon-plus\\\"></span>\\r\\n      <span class=\\\"btn-text\\\" data-bind=\\\"text: text\\\"></span>\\r\\n    </span>\\r\\n    <span class=\\\"added\\\">\\r\\n      <span class=\\\"icon icon-check\\\"></span>\\r\\n      <span class=\\\"btn-text\\\" data-bind=\\\"text: addedText\\\"></span>\\r\\n    </span>\\r\\n  </button>\\r\\n  <!-- /ko -->\\r\\n\\r\\n  <!-- ko if: loading -->\\r\\n  <span class=\\\"loader-container\\\">\\r\\n    <span class=\\\"loader is-loading\\\"></span>\\r\\n  </span>\\r\\n  <!-- /ko -->\"","var ko = require('knockout');\r\n\r\nko.components.register('read-more-popup', {\r\n  viewModel: require('./read-more-popup'),\r\n  template: require('./read-more-popup.template')\r\n});\r\n","var ko = require('knockout');\r\n\r\nfunction Model(params) {\r\n  this.text = params.text;\r\n  this.buttonText = window.language.readMore;\r\n\r\n  this.isVisible = ko.observable();\r\n\r\n  this.show = function() {\r\n    this.isVisible(true);\r\n  }.bind(this);\r\n\r\n  this.hide = function() {\r\n    this.isVisible(false);\r\n  }.bind(this);\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"read-more-popup\\\" data-bind=\\\"visible: isVisible\\\">\\r\\n  <div class=\\\"read-more-popup-text\\\" data-bind=\\\"text: text\\\"></div>\\r\\n\\r\\n  <button type=\\\"button\\\" class=\\\"btn btn-bare read-more-popup-close\\\" data-bind=\\\"click: hide\\\">\\r\\n    <span class=\\\"icon-close\\\"></span>\\r\\n  </button>\\r\\n</div>\\r\\n\\r\\n<div class=\\\"read-more-popup-overlay\\\" data-bind=\\\"visible: isVisible, click: hide\\\"></div>\\r\\n\\r\\n<button type=\\\"button\\\" class=\\\"btn btn-bare read-more-popup-open\\\" data-bind=\\\"text: buttonText, click: show\\\"></button>\\r\\n\"","var ko = require('knockout');\r\n\r\nko.components.register('register-continue-button', {\r\n  viewModel: require('./register-continue-button'),\r\n  template: require('./register-continue-button.template')\r\n});\r\n\r\n$('[data-register-continue-button]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\n\r\nfunction RegisterContinueButton(params) {\r\n  if (cart.getCart().courses.length) {\r\n    this.buttonText = params.continuePurchaseText;\r\n    this.url = params.continuePurchaseUrl;\r\n  } else {\r\n    this.buttonText = params.continueText;\r\n    this.url = params.continueUrl;\r\n  }\r\n}\r\n\r\nmodule.exports = RegisterContinueButton;\r\n","module.exports = \"<a data-bind=\\\"attr: { href: url, title: buttonText }\\\" class=\\\"btn btn-primary\\\">\\r\\n    <span class=\\\"btn-text\\\" data-bind=\\\"text: buttonText\\\"></span>\\r\\n</a>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('shopping-cart', {\r\n  viewModel: require('./shopping-cart'),\r\n  template: require('./shopping-cart.template')\r\n});\r\n\r\n$('[data-shopping-cart]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\nvar $ = require('jquery');\r\nvar cart = require('_components/organisms/shopping-cart/shopping-cart-storage');\r\nvar analytics = require('_js/analytics-ecommerce');\r\nrequire('knockout-postbox');\r\n\r\nfunction CartViewModel(params) {\r\n  var self = this;\r\n  this.texts = params.texts;\r\n  this.courseCatalogUrl = params.courseCatalogUrl;\r\n  this.periodTotal = params.periodTotal;\r\n  this.categoryHours = params.categoryHours;\r\n  this.calculatorPageUrl = params.calculatorPageUrl;\r\n  this.showCalculatorLink = ko.observable(true);\r\n  this.showCalculator = ko.observable(true);\r\n  // user should not see calculator if user does not have access or if not authorized accountant or auditor\r\n  if (\r\n    !window.isCalculatorAvailableForUser ||\r\n    !(window.authorizedAccountant || window.authorizedAuditor)\r\n  ) {\r\n    this.showCalculator(false);\r\n    this.showCalculatorLink(false);\r\n  }\r\n\r\n  if (params.redirectUrl === undefined) throw 'redirectUrl must be set';\r\n\r\n  self.courses = ko.observableArray();\r\n\r\n  self.deleteCourse = function(course) {\r\n    cart.removeCourseFromCart(course.Id);\r\n  };\r\n\r\n  self.deleteCourseIfEnter = function(course, event) {\r\n    if (event.key == 'Enter') {\r\n      self.deleteCourse(course);\r\n    }\r\n  };\r\n\r\n  self.totalHours = ko.computed(function() {\r\n    var cart = self.courses();\r\n    var hours = 0;\r\n    for (var x = 0; cart.length < x; x++) {\r\n      hours += cart[x].Hours;\r\n    }\r\n    return hours;\r\n  });\r\n\r\n  var updateVisualizationInMenu = function(cart) {\r\n    var el = $('.support-menu-cart-visualisation');\r\n    if (cart.courses !== undefined && cart.courses.length > 0) {\r\n      el.addClass('is-active');\r\n      el.find('.cart-visualisation-content').text(cart.courses.length);\r\n    } else {\r\n      el.removeClass('is-active');\r\n    }\r\n  };\r\n  ko.postbox.subscribe(\r\n    cart.updateTopic,\r\n    function(newCart) {\r\n      updateVisualizationInMenu(newCart);\r\n      if (newCart.courses === undefined) {\r\n        self.courses([]);\r\n        return;\r\n      }\r\n      self.courses(newCart.courses);\r\n    },\r\n    true\r\n  );\r\n\r\n  self.addParticipants = function() {\r\n    analytics.shoppingCartCheckedOut(1, cart.getCart(), params.redirectUrl);\r\n  };\r\n\r\n  self.deleteItemText = function(eventType) {\r\n    if (eventType === 5) {\r\n      return this.texts.deleteBundle;\r\n    } else if (eventType === 6) {\r\n      return this.texts.deleteProgram;\r\n    }\r\n    return this.texts.deleteCourse;\r\n  };\r\n\r\n  var wHeight = $(document).height(),\r\n    $shoppingCart = $('.shopping-cart');\r\n\r\n  var mainHeaderHeight = $('.main-header').height();\r\n\r\n  $shoppingCart.innerHeight(wHeight - mainHeaderHeight);\r\n}\r\n\r\nmodule.exports = CartViewModel;\r\n","module.exports = \"<div class=\\\"shopping-cart\\\">\\r\\n  <div class=\\\"shopping-cart-inner\\\">\\r\\n        <h2 class=\\\"shopping-cart-header\\\" data-bind=\\\"text: texts.title\\\"></h2>\\r\\n        <div class=\\\"shopping-cart-content\\\">\\r\\n            <!-- ko foreach: courses -->\\r\\n            <div class=\\\"block-grey\\\">\\r\\n                <div class=\\\"large-9 columns\\\">\\r\\n                    <a class=\\\"shopping-cart-course\\\" href=\\\"#\\\" data-bind=\\\"text: Heading, attr: { href: Url }\\\"></a>\\r\\n                    <!-- ko if: AccountantCredits -->\\r\\n                      <div class=\\\"shopping-cart-hours-type\\\" data-bind=\\\"text: $parent.texts.accountant\\\"></div>\\r\\n                      <!-- ko foreach: AccountantCredits -->\\r\\n                      <div class=\\\"course-credits-block-container\\\">\\r\\n                        <span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n                        <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n                        <div class=\\\"course-credits-block-timeunits-container clearfix\\\">\\r\\n                          <!-- ko if: Hours -->\\r\\n                            <!-- ko component: {name: \\\"calculator-timeunit\\\", params: {}}-->\\r\\n                            <!-- /ko -->\\r\\n                          <!-- /ko -->\\r\\n                        </div>\\r\\n                      </div>\\r\\n                    <!-- /ko -->\\r\\n                  <!-- /ko -->\\r\\n\\r\\n                  <!-- ko if: AuditorCredits -->\\r\\n                    <div class=\\\"shopping-cart-hours-type\\\" data-bind=\\\"text: $parent.texts.auditor\\\"></div>\\r\\n                    <!-- ko foreach: AuditorCredits -->\\r\\n                      <div class=\\\"course-credits-block-container\\\">\\r\\n                        <span class=\\\"course-credits-category\\\" data-bind=\\\"text: Name\\\"></span>\\r\\n                        <span class=\\\"course-credits-hours\\\" data-bind=\\\"text: Hours\\\"></span>\\r\\n                        <div class=\\\"course-credits-block-timeunits-container clearfix\\\">\\r\\n                          <!-- ko if: Hours -->\\r\\n                            <!-- ko component: {name: \\\"calculator-timeunit\\\", params: {}}-->\\r\\n                            <!-- /ko -->\\r\\n                          <!-- /ko -->\\r\\n                        </div>\\r\\n                      </div>\\r\\n                    <!-- /ko -->\\r\\n                  <!-- /ko -->\\r\\n                </div>\\r\\n                <div class=\\\"large-3 columns no-padding-left\\\">\\r\\n                    <a role=\\\"button\\\" class=\\\"btn btn-shopping-delete right\\\" data-bind=\\\"click: $parent.deleteCourse, event: { keypress: $parent.deleteCourseIfEnter }\\\" tabindex=\\\"0\\\">\\r\\n                        <span class=\\\"not-added\\\">\\r\\n                            <span class=\\\"icon-close\\\" aria-hidden=\\\"true\\\"></span>\\r\\n                            <span class=\\\"btn-text lowercase\\\"\\r\\n                              data-bind=\\\"text: $parent.deleteItemText(EventType)\\\">\\r\\n                            </span>\\r\\n                        </span>\\r\\n                    </a>\\r\\n                </div>\\r\\n\\r\\n            </div>\\r\\n            <!-- /ko  -->\\r\\n        </div>\\r\\n        <div class=\\\"shopping-cart-actions\\\">\\r\\n          <div class=\\\"shopping-cart-left-action\\\">\\r\\n            <div>\\r\\n              <a class=\\\"btn btn-secondary medium\\\" data-bind=\\\"attr: {href: courseCatalogUrl}\\\">\\r\\n                <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.continueShopping\\\"></span>\\r\\n              </a>\\r\\n            </div>\\r\\n            <!-- ko if: showCalculatorLink -->\\r\\n              <div>\\r\\n                <a class=\\\"btn btn-secondary medium\\\" data-bind=\\\"attr: {href: calculatorPageUrl}\\\">\\r\\n                  <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.goToCalculator\\\"></span>\\r\\n                </a>\\r\\n              </div>\\r\\n            <!-- /ko -->\\r\\n          </div>\\r\\n          <div class=\\\"shopping-cart-right-action\\\">\\r\\n            <a class=\\\"btn btn-primary medium\\\" data-bind=\\\"click: addParticipants\\\">\\r\\n              <span class=\\\"btn-text\\\" data-bind=\\\"text: texts.goToPayment\\\"></span>\\r\\n            </a>\\r\\n          </div>\\r\\n        </div>\\r\\n\\r\\n       <!-- Commented out this code for later use with new graphics\\r\\n    ko if: showCalculator \\r\\n      <div class=\\\"shopping-cart-donut-container columns large-12\\\">\\r\\n          <div class=\\\"columns large-6\\\">\\r\\n            ko component: {name:\\\"calculator-donut\\\", params: { \\\"extendedText\\\": true, \\\"api\\\": { \\\"periodTotal\\\": periodTotal, \\\"categoryHours\\\": categoryHours }, \\\"isInSimpleCalculator\\\": \\\"true\\\" } }\\r\\n            /ko\\r\\n          </div>\\r\\n          <div class=\\\"progress-donut-labels columns large-6\\\">\\r\\n            ko component: {name:\\\"calculator-progress\\\" }\\r\\n            /ko\\r\\n          </div>\\r\\n      </div>\\r\\n    /ko -->\\r\\n    </div>\\r\\n</div>\"","var ko = require('knockout');\r\n\r\nko.components.register('submit-button', {\r\n  viewModel: require('./submit-button'),\r\n  template: require('./submit-button.template')\r\n});\r\n\r\n$('[data-submit-button]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nfunction SubmitButton(params) {\r\n  this.buttonText = params.buttonText;\r\n}\r\n\r\nSubmitButton.prototype.submit = function() {\r\n  ko.postbox.publish('loadingIndicator', true);\r\n  return true;\r\n};\r\n\r\nmodule.exports = SubmitButton;\r\n","module.exports = \"<button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-bind=\\\"click: submit\\\">\\r\\n    <span class=\\\"btn-text\\\" data-bind=\\\"text: buttonText\\\"></span>\\r\\n</button>\"","var ko = require('knockout');\r\n\r\nko.components.register('tooltip', {\r\n  viewModel: require('./tooltip'),\r\n  template: require('./tooltip.template')\r\n});\r\n","var ko = require('knockout');\r\n\r\nfunction Tooltip(params) {\r\n  this.buttonText = params.buttonText;\r\n  this.closeButtonText = params.closeButtonText;\r\n  this.id = 'tooltip-' + String(new Date().getTime());\r\n  this.text = params.text;\r\n  this.title = params.title;\r\n\r\n  this.isVisible = ko.observable(false);\r\n\r\n  this.show = function() {\r\n    this.isVisible(true);\r\n  };\r\n\r\n  this.hide = function() {\r\n    this.isVisible(false);\r\n  };\r\n}\r\n\r\nmodule.exports = Tooltip;\r\n","module.exports = \"<div class=\\\"tooltip\\\">\\r\\n  <button class=\\\"tooltip-button\\\" type=\\\"button\\\" data-bind=\\\"\\r\\n    click: show,\\r\\n    attr: {\\r\\n      'aria-controls': id,\\r\\n      'aria-expanded': isVisible() ? 'true' : 'false'\\r\\n    }\\r\\n  \\\">\\r\\n    <i aria-hidden=\\\"true\\\">?</i>\\r\\n    <span data-bind=\\\"text: buttonText\\\"></span>\\r\\n  </button>\\r\\n\\r\\n  <div class=\\\"tooltip-panel\\\" data-bind=\\\"visible: isVisible, attr: { id: id }\\\">\\r\\n    <h3 data-bind=\\\"text: title\\\"></h3>\\r\\n    <p data-bind=\\\"text: text\\\"></p>\\r\\n    <button class=\\\"tooltip-close\\\" type=\\\"button\\\" data-bind=\\\"click: hide\\\">\\r\\n      <i aria-hidden=\\\"true\\\" class=\\\"icon-close\\\"></i>\\r\\n      <span data-bind=\\\"text: closeButtonText\\\"></span>\\r\\n    </button>\\r\\n  </div>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('video-course-receipt', {\r\n  viewModel: require('./video-course-receipt'),\r\n  template: require('./video-course-receipt.template')\r\n});\r\n\r\n// Attach component to elements with data-attribute\r\n$('[data-video-course-receipt]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction VideoCourseReceipt(params) {\r\n  var self = this;\r\n  self.texts = params.texts;\r\n  self.API = params.api;\r\n  self.sequenceKey = params.sequenceKey;\r\n  self.hasRated = ko.observable(false);\r\n  self.comment = ko.observable('');\r\n  self.selectedItems = ko.observable(0);\r\n  self.showError = ko.observable(false);\r\n  self.ratingList = ko.observableArray([\r\n    new RatingItem(1, 'ph ph-star icon', false),\r\n    new RatingItem(2, 'ph ph-star icon', false),\r\n    new RatingItem(3, 'ph ph-star icon', false),\r\n    new RatingItem(4, 'ph ph-star icon', false),\r\n    new RatingItem(5, 'ph ph-star icon', false),\r\n    new RatingItem(6, 'ph ph-star icon', false)\r\n  ]);\r\n  self.updateRating = function(id) {\r\n    ko.utils.arrayForEach(self.ratingList(), function(ratingItem) {\r\n      ratingItem.isSelected(false);\r\n      ratingItem.icon('ph ph-star icon');\r\n    });\r\n\r\n    var itemList = ko.utils.arrayFilter(self.ratingList(), function(item) {\r\n      return item.id() <= id;\r\n    });\r\n\r\n    if (itemList) {\r\n      itemList.forEach(function(item) {\r\n        item.isSelected(true);\r\n        item.icon('ph-fill ph-star icon selected');\r\n      });\r\n      self.selectedItems(itemList.length);\r\n    }\r\n    self.hasRated(\r\n      itemList.some(function(item) {\r\n        return item.isSelected();\r\n      })\r\n    );\r\n  };\r\n  self.postChanges = function() {\r\n    var rateValue = ko.utils.arrayFilter(self.ratingList(), function(item) {\r\n      return item.isSelected();\r\n    }).length;\r\n    APIHelper.post(\r\n      '/api/videocourse/addrating',\r\n      {\r\n        ratingValue: rateValue,\r\n        ratingComment: self.comment(),\r\n        sequenceKey: self.sequenceKey\r\n      },\r\n      function(response) {\r\n        if (response.IsSuccess) {\r\n          window.location.reload();\r\n          return;\r\n        } else {\r\n          self.showError(true);\r\n        }\r\n      },\r\n      function(error) {\r\n        console.log(error);\r\n      }\r\n    );\r\n  };\r\n\r\n  function RatingItem(id, icon, isSelected) {\r\n    var self = this;\r\n    self.id = ko.observable(id);\r\n    self.icon = ko.observable(icon);\r\n    self.isSelected = ko.observable(isSelected);\r\n  }\r\n}\r\nmodule.exports = VideoCourseReceipt;\r\n","module.exports = \"<div class=\\\"video-course-rating-content\\\">\\r\\n    <h4 data-bind=\\\"html: texts.ratingHeader\\\"></h4>\\r\\n    <div class=\\\"video-course-raiting-container\\\">\\r\\n        <!-- ko foreach: ratingList -->\\r\\n        <span data-bind=\\\"click: $parent.updateRating.bind($parent, id())\\\" style=\\\"width: 32px;\\\">\\r\\n            <i data-bind=\\\"attr: { id: id, class: icon}\\\" ></i>\\r\\n        </span>\\r\\n        <!-- /ko -->\\r\\n        <div class=\\\"raiting-text\\\">\\r\\n            <span data-bind=\\\"text: selectedItems\\\"></span>/<span data-bind=\\\"text: ratingList().length\\\"></span>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n<div class=\\\"video-course-comment-content\\\">\\r\\n    <h4 data-bind=\\\"html: texts.commentHeader\\\"></h4>\\r\\n    <textarea id=\\\"comment\\\" name=\\\"comment\\\" placeholder=\\\"Skriv her...\\\" rows=\\\"4\\\" cols=\\\"50\\\" data-bind=\\\"value: comment\\\"></textarea>\\r\\n</div>\\r\\n<!-- ko if: showError -->\\r\\n<div class=\\\"video-course-error\\\" data-bind=\\\"text: window.language.courses.updateRatingError\\\">\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n<div>\\r\\n    <button type=\\\"button\\\" class=\\\"btn btn-red-link\\\" data-bind=\\\"click: postChanges, enable: hasRated()\\\">\\r\\n        <span data-bind=\\\"text: texts.updateChangesText\\\"></span>\\r\\n    </button>\\r\\n</div>\"","var ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nko.components.register('youtube-video', {\r\n  viewModel: require('./youtube-video'),\r\n  template: require('./youtube-video.template')\r\n});\r\n\r\n// Attach component to elements with data-attribute\r\n$('[data-youtube-video]').each(function() {\r\n  ko.applyBindings({}, this);\r\n});\r\n","var ko = require('knockout');\r\n\r\nfunction Model(params) {\r\n  var self = this;\r\n\r\n  self.stopButtonText = window.language.close || 'Lukk';\r\n  self.videoUrl =\r\n    'https://www.youtube.com/embed/' +\r\n    params.videoId +\r\n    '?showinfo=0&autoplay=0';\r\n  self.thumbnailUrl =\r\n    'https://i.ytimg.com/vi/' + params.videoId + '/maxresdefault.jpg';\r\n\r\n  self.videoIsPlaying = ko.observable(false);\r\n\r\n  self.playVideo = function() {\r\n    self.videoIsPlaying(true);\r\n  };\r\n\r\n  self.stopVideo = function() {\r\n    self.videoIsPlaying(false);\r\n  };\r\n\r\n  window.addEventListener('keydown', function(event) {\r\n    if (event.keyCode === 27) {\r\n      self.stopVideo();\r\n    }\r\n  });\r\n}\r\n\r\nmodule.exports = Model;\r\n","module.exports = \"<div class=\\\"youtube-video\\\" data-bind=\\\"style: { backgroundImage: 'url(' + thumbnailUrl + ')' }\\\">\\r\\n  <button class=\\\"btn youtube-video-play\\\" data-bind=\\\"click: playVideo\\\">\\r\\n    <svg height=\\\"48\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 68 48\\\" width=\\\"68\\\">\\r\\n      <path d=\\\"M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z\\\" class=\\\"youtube-video-play-background\\\"></path>\\r\\n      <path d=\\\"M 45,24 27,14 27,34\\\" fill=\\\"#fff\\\"></path>\\r\\n    </svg>\\r\\n  </button>\\r\\n</div>\\r\\n\\r\\n<!-- ko if: videoIsPlaying -->\\r\\n<div class=\\\"youtube-video-modal\\\">\\r\\n  <iframe class=\\\"youtube-video-player\\\" data-bind=\\\"attr: { src: videoUrl }\\\" />\\r\\n  <button class=\\\"btn btn-primary youtube-video-stop\\\" data-bind=\\\"click: stopVideo\\\">\\r\\n    <span class=\\\"btn-text youtube-video-stop-text\\\" data-bind=\\\"text: stopButtonText\\\"></span>\\r\\n    <span class=\\\"icon-close\\\"></span>\\r\\n  </button>\\r\\n</div>\\r\\n<!-- /ko -->\"","var ko = require('knockout');\r\n\r\nko.bindingHandlers.dynamicHeight = {\r\n  //Based on parent\r\n  init: function(element, valueAccessor) {\r\n    var el = $(element);\r\n    var parentClass = ko.unwrap(valueAccessor());\r\n    var parent = el.closest('.' + parentClass);\r\n    el.height(parent.outerHeight());\r\n  }\r\n};\r\n// Do callback when enterkey is pressed.\r\nko.bindingHandlers.enterkey = {\r\n  init: function(element, valueAccessor, allBindings, viewModel) {\r\n    var callback = valueAccessor();\r\n    $(element).keypress(function(event) {\r\n      var keyCode = event.which ? event.which : event.keyCode;\r\n      if (keyCode === 13) {\r\n        callback.call(viewModel);\r\n        return false;\r\n      }\r\n      return true;\r\n    });\r\n  }\r\n};\r\n// Fade between transitions.\r\nko.bindingHandlers.fadeVisible = {\r\n  init: function(element, valueAccessor) {\r\n    var value = valueAccessor();\r\n    $(element).toggle(ko.unwrap(value));\r\n  },\r\n  update: function(element, valueAccessor) {\r\n    var value = valueAccessor();\r\n    if (ko.unwrap(value)) {\r\n      $(element)\r\n        .delay(150)\r\n        .fadeIn(150);\r\n    } else {\r\n      $(element).fadeOut(150);\r\n    }\r\n  }\r\n};\r\n// Get element in component init function.\r\nko.bindingHandlers.useElement = {\r\n  init: function(element, valueAccessor, allBindingsAccessor, viewModel) {\r\n    viewModel.init(element);\r\n    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {\r\n      viewModel.element = null;\r\n      delete viewModel.element;\r\n    });\r\n  }\r\n};\r\n\r\n// Will trigger afterMarkupRender function after markup above this handler is triggered.\r\nko.bindingHandlers.afterMarkupRender = {\r\n  init: function(element, valueAccessor, allBinidingsAccessor, viewModel) {\r\n    viewModel.afterMarkupRender(element);\r\n    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {\r\n      viewModel.element = null;\r\n      delete viewModel.element;\r\n    });\r\n  }\r\n};\r\n\r\nko.bindingHandlers.toggleVar = {\r\n  init: function(element, valueAccessor) {\r\n    $(element).on('click.toggleVar', function() {\r\n      var value = valueAccessor();\r\n      value(!value());\r\n    });\r\n    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {\r\n      $(element).off('.toggleVar');\r\n    });\r\n  }\r\n};\r\n\r\nko.bindingHandlers.numeric = {\r\n  init: function(element) {\r\n    $(element).on('keydown', function(event) {\r\n      // Allow: backspace, delete, tab, escape, and enter\r\n      if (\r\n        event.keyCode == 46 ||\r\n        event.keyCode == 8 ||\r\n        event.keyCode == 9 ||\r\n        event.keyCode == 27 ||\r\n        event.keyCode == 13 ||\r\n        // Allow: Ctrl+A\r\n        (event.keyCode == 65 && event.ctrlKey === true) ||\r\n        // Allow: . ,\r\n        (event.keyCode == 188 ||\r\n          event.keyCode == 190 ||\r\n          event.keyCode == 110) ||\r\n        // Allow: home, end, left, right\r\n        (event.keyCode >= 35 && event.keyCode <= 39)\r\n      ) {\r\n        // let it happen, don't do anything\r\n        return;\r\n      } else {\r\n        // Ensure that it is a number and stop the keypress\r\n        if (\r\n          event.shiftKey ||\r\n          ((event.keyCode < 48 || event.keyCode > 57) &&\r\n            (event.keyCode < 96 || event.keyCode > 105))\r\n        ) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nko.bindingHandlers.integer = {\r\n  init: function(element) {\r\n    $(element).on('keydown', function(event) {\r\n      // Allow: backspace, delete, tab, escape, and enter\r\n      if (\r\n        event.keyCode == 46 ||\r\n        event.keyCode == 8 ||\r\n        event.keyCode == 9 ||\r\n        event.keyCode == 27 ||\r\n        event.keyCode == 13 ||\r\n        // Allow: Ctrl+A\r\n        (event.keyCode == 65 && event.ctrlKey === true) ||\r\n        // Allow: home, end, left, right\r\n        (event.keyCode >= 35 && event.keyCode <= 39)\r\n      ) {\r\n        // let it happen, don't do anything\r\n        return;\r\n      } else {\r\n        // Ensure that it is a number and stop the keypress\r\n        if (\r\n          event.shiftKey ||\r\n          ((event.keyCode < 48 || event.keyCode > 57) &&\r\n            (event.keyCode < 96 || event.keyCode > 105))\r\n        ) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nko.bindingHandlers.decimal = {\r\n  init: function(element) {\r\n    $(element).on('keydown', function(event) {\r\n      // Allow: backspace, delete, tab, escape, and enter\r\n      if (\r\n        event.keyCode == 46 ||\r\n        event.keyCode == 8 ||\r\n        event.keyCode == 9 ||\r\n        event.keyCode == 27 ||\r\n        event.keyCode == 13 ||\r\n        // Allow: Ctrl+A\r\n        (event.keyCode == 65 && event.ctrlKey === true) ||\r\n        // Allow: home, end, left, right\r\n        (event.keyCode >= 35 && event.keyCode <= 39)\r\n      ) {\r\n        // let it happen, don't do anything\r\n        return;\r\n      } else {\r\n        // Ensure that it is a number and stop the keypress\r\n        if (\r\n          event.shiftKey ||\r\n          ((event.keyCode < 48 || event.keyCode > 57) &&\r\n            (event.keyCode < 96 || event.keyCode > 105) &&\r\n            (event.keyCode < 188 || event.keyCode > 188))\r\n        ) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nko.bindingHandlers.datepicker = {\r\n  format: 'dd.mm.yy',\r\n  startDate: '+1d',\r\n  init: function(element, valueAccessor, allBindingsAccessor) {\r\n    var datepickerSettings = {\r\n      format:\r\n        allBindingsAccessor().format || ko.bindingHandlers.datepicker.format,\r\n      startDate: allBindingsAccessor().oldDates ? new Date(2009, 0, 1) : '+1d',\r\n      autoclose: true,\r\n      clearBtn: true,\r\n      language: 'nb',\r\n      todayHighlight: true,\r\n      weekStart: 1\r\n    };\r\n\r\n    if (allBindingsAccessor().noFutureDates) {\r\n      $.extend(datepickerSettings, { endDate: '0d' });\r\n    }\r\n\r\n    var picker = $(element).datepicker(datepickerSettings);\r\n\r\n    picker.on('changeDate', function(ev) {\r\n      var val = valueAccessor();\r\n      if (ko.isObservable(val)) {\r\n        val(ev.date);\r\n      } else {\r\n        val = ev.date;\r\n      }\r\n    });\r\n  },\r\n  update: function(element, valueAccessor) {\r\n    var val = ko.unwrap(valueAccessor());\r\n    if (val !== undefined && val.length <= 0) return;\r\n    if (val !== undefined && isNaN(val.getTime())) return;\r\n    $(element).datepicker('update', val);\r\n  }\r\n};\r\n\r\n//Drag and drop\r\nvar _dragged;\r\nko.bindingHandlers.drag = {\r\n  init: function(element, valueAccessor) {\r\n    var dragElement = $(element);\r\n    var dragOptions = {\r\n      helper: 'clone',\r\n      revert: true,\r\n      revertDuration: 0,\r\n      start: function() {\r\n        _dragged = ko.utils.unwrapObservable(valueAccessor().value);\r\n      },\r\n      cursor: 'default'\r\n    };\r\n    dragElement.draggable(dragOptions).disableSelection();\r\n  }\r\n};\r\n\r\nko.bindingHandlers.drop = {\r\n  init: function(element, valueAccessor) {\r\n    var dropElement = $(element);\r\n    var dropOptions = {\r\n      drop: function() {\r\n        valueAccessor().value(_dragged);\r\n      }\r\n    };\r\n    dropElement.droppable(dropOptions);\r\n  }\r\n};\r\n","var ko = require('knockout');\r\n\r\nvar APIHelper = require('_js/APIHelper');\r\n\r\n// Default error messages for when the validation fails.\r\nvar defaultValidationMessages = {\r\n  isNumber: 'Feltet kan kun bestå av tall!',\r\n  isEmail: 'Feltet må være en mailadresse!',\r\n  isLength: 'Length!',\r\n  isNotOnlyWhitespace: 'Feltet må bestå av mer enn bare mellomrom'\r\n};\r\n\r\n// Validation methods used to test if a statement is true.\r\nvar validationMethods = {\r\n  // Is optional is the \"weird\" test.\r\n  // If the user has the isOptional validation method on we want to see if\r\n  // the input field contains content, or if the validation method was just triggered\r\n  // by the blur event. If it is empty, we want to return true because there is nothing\r\n  // wrong (it is optional!).\r\n  isOptional: function(newValue) {\r\n    return ('' + newValue).length > 0 ? true : false;\r\n  },\r\n  isNumber: function(newValue) {\r\n    return /^\\d+$/.test(newValue);\r\n  },\r\n  isDecimalNumber: function(newValue) {\r\n    return /^(\\d+(?:[.,]\\d{1,2})?)$/.test(newValue);\r\n  },\r\n  isCheckedOff: function(newValue) {\r\n    return newValue;\r\n  },\r\n  // Calculator hours are only valid if they are a positive number and is whole or 0.5 hours.\r\n  isValidCalculatorHour: function(newValue) {\r\n    if (newValue.length === 0) {\r\n      return true;\r\n    } else if (validationMethods.isPositiveNumber(newValue)) {\r\n      return parseFloat(newValue.toString().replace(',', '.'), 10) % 0.5 === 0;\r\n    } else {\r\n      return false;\r\n    }\r\n  },\r\n  isPositiveNumber: function(newValue) {\r\n    if (\r\n      validationMethods.isNumber(newValue) ||\r\n      validationMethods.isDecimalNumber(newValue)\r\n    ) {\r\n      return parseFloat(newValue.toString().replace(',', '.'), 10) >= 0;\r\n    } else {\r\n      return false;\r\n    }\r\n  },\r\n  isLargerThan: function(newValue, settings) {\r\n    if (\r\n      validationMethods.isNumber(newValue) ||\r\n      validationMethods.isDecimalNumber(newValue)\r\n    ) {\r\n      return (\r\n        parseFloat(newValue.toString().replace(',', '.'), 10) >\r\n        settings.threshold\r\n      );\r\n    } else {\r\n      return false;\r\n    }\r\n  },\r\n  isEmail: function(newValue) {\r\n    var re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n    return re.test(newValue);\r\n  },\r\n  isLength: function(newValue, settings) {\r\n    if (settings === undefined || settings.length === undefined) {\r\n      throw 'Error: Need to specify length for isLength validation type';\r\n    }\r\n    return settings.length === newValue.length;\r\n  },\r\n  isMinLength: function(newValue, settings) {\r\n    if (settings === undefined || settings.length === undefined) {\r\n      throw '';\r\n    }\r\n    return newValue.length >= settings.length;\r\n  },\r\n  isNotOnlyWhitespace: function(newValue) {\r\n    // We're returning true for length <= 0 even\r\n    // though it normally would return false.\r\n    // This is because we already have a validation method\r\n    // for checking if something is notEmpty.\r\n    if (newValue.length <= 0) {\r\n      return true;\r\n    }\r\n    return /\\S/.test(newValue);\r\n  },\r\n  isNotEmpty: function(newValue) {\r\n    return ('' + newValue).length > 0;\r\n  },\r\n  isValidPersonNumber: function(newValue, settings) {\r\n    if (settings === undefined || settings.api === undefined) {\r\n      throw 'Error: Need to specify api to use for validating person number';\r\n    }\r\n\r\n    var deferred = $.Deferred();\r\n\r\n    APIHelper.post(\r\n      settings.api,\r\n      { PersonNumber: newValue },\r\n      function(response) {\r\n        deferred.resolve(response);\r\n      },\r\n      function() {\r\n        deferred.resolve(false);\r\n      }\r\n    );\r\n\r\n    return deferred.promise();\r\n  },\r\n  isRNPassword: function(newValue) {\r\n    var isValid = true;\r\n    if (newValue.match(/\\d+/g) === null) {\r\n      isValid = false;\r\n    } else if (\r\n      newValue.match(/[a-z]/g) === null ||\r\n      newValue.match(/[A-Z]/g) === null\r\n    ) {\r\n      isValid = false;\r\n    }\r\n\r\n    return isValid;\r\n  },\r\n  isEqualTo: function(newValue, settings) {\r\n    if (settings === undefined || settings.value === undefined) {\r\n      throw 'Error: Need to specify value for isEqualTo validation type';\r\n    }\r\n    var value =\r\n      typeof settings.value === 'function' ? settings.value() : settings.value;\r\n    return value === newValue;\r\n  }\r\n};\r\nko.extenders.required = function(target, requiredMethods) {\r\n  // Add some sub-observables to our observable.\r\n  target.hasError = ko.observable();\r\n  target.isLoading = ko.observable();\r\n  target.isSuccessful = ko.observable(false);\r\n  target.validationMessage = ko.observable();\r\n  // We want all input fields to check for not only whitespaces.\r\n  requiredMethods.push({ type: 'isNotOnlyWhitespace' });\r\n  // If we have the message available, assign it to the observable.\r\n  if (requiredMethods[0] && requiredMethods[0].message) {\r\n    target.validationMessage(requiredMethods[0].message);\r\n  }\r\n\r\n  function validateAsync(promise, rm) {\r\n    target.isLoading(true);\r\n    target.isSuccessful(false);\r\n    promise.then(function(data) {\r\n      target.isLoading(false);\r\n      target.hasError(!data);\r\n      target.isSuccessful(data);\r\n      target.validationMessage(rm.message);\r\n    });\r\n  }\r\n\r\n  function validate(newValue) {\r\n    // If no input is given we don't want to set hasError.\r\n    if (newValue === undefined || newValue === null) {\r\n      return;\r\n    } else {\r\n      var hasError = false;\r\n      var isSuccessful;\r\n      var message = '';\r\n\r\n      for (var i = 0; i < requiredMethods.length; i++) {\r\n        var rm = requiredMethods[i];\r\n\r\n        if (rm.type === 'isValidPersonNumber') {\r\n          validateAsync(validationMethods[rm.type](newValue, rm), rm);\r\n        } else {\r\n          hasError = !validationMethods[rm.type](newValue, rm);\r\n\r\n          // If the optional tag confirms there is no input, and it is an optional tag we don't\r\n          // want to test the rest.\r\n          if (hasError && rm.type === 'isOptional') {\r\n            isSuccessful = false;\r\n            hasError = false;\r\n            break;\r\n          }\r\n          // If we have an error we can just jump out of the for loop and provide that message.\r\n          else if (hasError && rm.type !== 'isOptional') {\r\n            message = rm.message || defaultValidationMessages[rm.type];\r\n            isSuccessful = false;\r\n            break;\r\n          } else if (rm.type !== 'isOptional') {\r\n            if (isSuccessful === undefined) {\r\n              isSuccessful = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      target.isSuccessful(isSuccessful);\r\n      target.hasError(hasError);\r\n      target.validationMessage(message);\r\n    }\r\n  }\r\n\r\n  // Initial validation.\r\n  validate(target());\r\n\r\n  // Validate whenever the value changes.\r\n  target.subscribe(validate);\r\n\r\n  // Return the original observable.\r\n  return target;\r\n};\r\n","var AccordionList = require('_components/molecules/accordion-list/accordion-list'),\r\n  ParentAccordionList = require('_components/molecules/accordion-list/parent-accordion-list'),\r\n  FormSelect = require('_components/atoms/form/form-select/form-select'),\r\n  FormDropdown = require('_components/atoms/form/form-dropdown/form-dropdown'),\r\n  FrontPageCarousel = require('_components/molecules/frontpage-campaign/frontpage-campaign'),\r\n  ListViewToggler = require('_components/molecules/list-view-toggler/list-view-toggler'),\r\n  FilterCourse = require('_components/molecules/filter-course/filter-course'),\r\n  RegularCourse = require('_components/molecules/course/course-row-location/course-row-location'),\r\n  DisciplineInterests = require('_components/molecules/discipline-interests/discipline-interests'),\r\n  BlockUnauthorized = require('_components/molecules/block/block-unauthorized/block-unauthorized'),\r\n  ProfileEmployer = require('_components/molecules/profile/profile-employer/profile-employer'),\r\n  ProfileHeader = require('_components/molecules/profile/profile-header/profile-header'),\r\n  ProfileBureauSubscriptions = require('_components/molecules/profile/profile-bureau-subscriptions/profile-bureau-subscriptions'),\r\n  ProfileBureauInsurancesChanges = require('_components/molecules/profile/profile-bureau-insurances-changes/profile-bureau-insurances-changes'),\r\n  SearchPostalCode = require('_components/molecules/search-postal-code/search-postal-code'),\r\n  FilterLinks = require('_components/molecules/filter-links/filter-links'),\r\n  CourseFactsBlock = require('_components/molecules/course/course-facts-block/course-facts-block'),\r\n  UserProfileBlock = require('_components/molecules/user-profile-block/user-profile-block'),\r\n  Footer = require('_components/organisms/footer/footer'),\r\n  HeaderMain = require('_components/organisms/header/header-main/header-main'),\r\n  HeaderSub = require('_components/organisms/header/header-sub/header-sub'),\r\n  CourseList = require('_components/organisms/course/course-list/course-list'),\r\n  CoursesList = require('_components/organisms/course/courses-list/courses-list'),\r\n  CourseInstructors = require('_components/organisms/course/course-instructors/course-instructors'),\r\n  TinyCourseList = require('_components/organisms/tiny-course-list/tiny-course-list'),\r\n  BlockList = require('_components/organisms/block-list/block-list'),\r\n  BlockArticle = require('_components/organisms/block-article/block-article'),\r\n  BlockMagazine = require('_components/organisms/block-magazine/block-magazine'),\r\n  SponsorBlock = require('_components/organisms/sponsors/sponsors-block/sponsors-block'),\r\n  DisciplineArticleSearch = require('_components/organisms/disciplines/disciplines-article-search/disciplines-article-search'),\r\n  CalculatorSimple = require('_components/organisms/calculator-simple/calculator-simple'),\r\n  Calculator = require('_components/organisms/calculator/calculator'),\r\n  FindAccountants = require('_components/organisms/find-accountants/find-accountants'),\r\n  ProfileBureauEmployeeList = require('_components/organisms/profile/profile-bureau/profile-bureau-employee-list/profile-bureau-employee-list'),\r\n  OverviewPage = require('_components/organisms/overview-page/overview-page'),\r\n  SearchContent = require('_components/organisms/search-content/search-content'),\r\n  LoginReset = require('_components/organisms/login-reset/login-reset'),\r\n  AdminToolUserManagement = require('_components/organisms/admin-tool-user-management/admin-tool-user-management'),\r\n  EmployeeList = require('_components/organisms/organization-employee-list/organization-employee-list'),\r\n  RegistrationPage = require('_components/organisms/registration-page/registration-page'),\r\n  MarketingTeaserTile = require('_components/organisms/marketing-teaser-tile/marketing-teaser-tile'),\r\n  MyCoursesPage = require('_components/organisms/my-courses-page/my-courses-page'),\r\n  CourseRegistrationOverview = require('_components/organisms/course-registration-overview/course-registration-overview'),\r\n  CourseRegistrationParticipants = require('_components/organisms/course-registration-participants/course-registration-participants'),\r\n  ReportPage = require('_components/organisms/report-page/report-page'),\r\n  SearchBlock = require('_components/organisms/search-block/search-block'),\r\n  HappeningList = require('_components/organisms/happenings/happening-list'),\r\n  FilterHappening = require('_components/molecules/filter-happening/filter-happening'),\r\n  CallToAction = require('_components/organisms/call-to-action/call-to-action');\r\n\r\nnew AccordionList().init();\r\nnew ParentAccordionList().init();\r\nnew FormDropdown().init();\r\nnew FormSelect();\r\nnew FrontPageCarousel();\r\nnew ListViewToggler();\r\nnew FilterCourse();\r\nnew RegularCourse();\r\nnew DisciplineInterests();\r\nnew BlockUnauthorized();\r\nnew ProfileEmployer();\r\nnew ProfileHeader();\r\nnew ProfileBureauSubscriptions();\r\nnew ProfileBureauInsurancesChanges();\r\nnew SearchPostalCode();\r\nnew FilterLinks();\r\nnew CourseFactsBlock();\r\nnew UserProfileBlock();\r\nnew Footer();\r\nnew HeaderMain();\r\nnew HeaderSub();\r\nnew CourseList();\r\nnew CoursesList();\r\nnew CourseInstructors();\r\nnew TinyCourseList();\r\nnew BlockList();\r\nnew BlockArticle();\r\nnew BlockMagazine();\r\nnew SponsorBlock();\r\nnew DisciplineArticleSearch();\r\nnew CalculatorSimple();\r\nnew Calculator();\r\nnew FindAccountants();\r\nnew ProfileBureauEmployeeList();\r\nnew OverviewPage();\r\nnew SearchContent();\r\nnew LoginReset();\r\nnew AdminToolUserManagement();\r\nnew EmployeeList();\r\nnew RegistrationPage();\r\nnew MarketingTeaserTile();\r\nnew MyCoursesPage();\r\nnew CourseRegistrationOverview();\r\nnew CourseRegistrationParticipants();\r\nnew ReportPage();\r\nnew SearchBlock();\r\nnew HappeningList();\r\nnew FilterHappening();\r\nnew CallToAction();\r\n","var Base = require('_js/base');\r\n\r\nfunction AccordionList() {}\r\n\r\nAccordionList.prototype = new Base();\r\n\r\nAccordionList.prototype.init = function() {\r\n  var self = this;\r\n  var $toggler = $('[data-accordion-id]');\r\n  if ($toggler.length > 0) {\r\n    //toggle accordion\r\n    $toggler.on('click', function(e) {\r\n      self.handleAccordionToggle(e, this, 'accordion-id');\r\n    });\r\n  }\r\n};\r\n\r\nAccordionList.prototype.start = function(dataId, container, clickCallback) {\r\n  var self = this;\r\n  var $container = $(container);\r\n  var $toggler = $('[data-' + dataId + ']');\r\n  if (typeof clickCallback !== 'function') {\r\n    clickCallback = function() {};\r\n  }\r\n\r\n  if ($container) {\r\n    $container.on('click', '[data-' + dataId + ']', function(e) {\r\n      self.handleAccordionToggle(e, this, dataId);\r\n      clickCallback();\r\n    });\r\n  } else if ($toggler.length > 0) {\r\n    //toggle accordion\r\n    $toggler.on('click', function(e) {\r\n      self.handleAccordionToggle(e, this, dataId);\r\n      clickCallback();\r\n    });\r\n  }\r\n};\r\n\r\nAccordionList.prototype.handleAccordionToggle = function(e, elem, dataId) {\r\n  e.preventDefault();\r\n\r\n  var $this = $(elem);\r\n  var accordionList = $this\r\n    .parents('.accordion-list')\r\n    .find('.accordion-list-item');\r\n  var id = $this.data(dataId);\r\n\r\n  $this.toggleClass('is-selected');\r\n\r\n  $.each(accordionList, function() {\r\n    var content = $(this).find('.accordion-list-content'),\r\n      target = content.data('accordion-target');\r\n\r\n    if (target === id) {\r\n      content.toggleClass('is-open');\r\n      content.slideToggle(600, 'easeOutQuart');\r\n    }\r\n  });\r\n};\r\nmodule.exports = AccordionList;\r\n","var Base = require('_js/base');\r\n\r\nfunction ParentAccordionList() {}\r\n\r\nParentAccordionList.prototype = new Base();\r\n\r\nParentAccordionList.prototype.init = function() {\r\n  var self = this;\r\n  var $toggler = $('[data-parent-accordion-id]');\r\n  if ($toggler.length > 0) {\r\n    //toggle accordion\r\n    $toggler.on('click', function(e) {\r\n      self.handleAccordionToggle(e, this, 'parent-accordion-id');\r\n    });\r\n  }\r\n};\r\n\r\nParentAccordionList.prototype.start = function(\r\n  dataId,\r\n  container,\r\n  clickCallback\r\n) {\r\n  var self = this;\r\n  var $container = $(container);\r\n  var $toggler = $('[data-' + dataId + ']');\r\n  if (typeof clickCallback !== 'function') {\r\n    clickCallback = function() {};\r\n  }\r\n\r\n  if ($container) {\r\n    $container.on('click', '[data-' + dataId + ']', function(e) {\r\n      self.handleAccordionToggle(e, this, dataId);\r\n      clickCallback();\r\n    });\r\n  } else if ($toggler.length > 0) {\r\n    //toggle accordion\r\n    $toggler.on('click', function(e) {\r\n      self.handleAccordionToggle(e, this, dataId);\r\n      clickCallback();\r\n    });\r\n  }\r\n};\r\n\r\nParentAccordionList.prototype.handleAccordionToggle = function(\r\n  e,\r\n  elem,\r\n  dataId\r\n) {\r\n  e.preventDefault();\r\n\r\n  var $this = $(elem);\r\n  var accordionList = $this\r\n    .parents('.parent-accordion-list')\r\n    .find('.parent-accordion-list-item');\r\n  var id = $this.data(dataId);\r\n\r\n  $this.toggleClass('is-selected');\r\n\r\n  $.each(accordionList, function() {\r\n    var content = $(this).find('.parent-accordion-list-content'),\r\n      target = content.data('parent-accordion-target');\r\n\r\n    if (target === id) {\r\n      content.toggleClass('is-open');\r\n      content.slideToggle(600, 'easeOutQuart');\r\n    }\r\n  });\r\n};\r\nmodule.exports = ParentAccordionList;\r\n","function FormSelect() {\r\n  this.init();\r\n}\r\n\r\nFormSelect.prototype.init = function() {\r\n  $('.form-custom-select-wrapper').on('click', function(event) {\r\n    $(this).toggleClass('active');\r\n    event.stopPropagation();\r\n  });\r\n\r\n  $('.form-custom-select-wrapper a').on('click', function(event) {\r\n    event.preventDefault();\r\n    var $listEl = $(this).parent();\r\n    var $container = $listEl.parent().parent();\r\n    var $chosenEl = $container.find('.form-select-chosen');\r\n\r\n    var selectedValue = $(this).data('option-id');\r\n    $listEl.addClass('current');\r\n    $listEl.siblings().removeClass('current');\r\n    $chosenEl.text($(this).text());\r\n    $chosenEl.attr('data-chosen', selectedValue);\r\n  });\r\n\r\n  // Use the selectize plugin for selects.\r\n  $('.form-select-wrapper-atom').selectize();\r\n};\r\n\r\nmodule.exports = FormSelect;\r\n","var Base = require('_js/base');\r\n\r\nfunction FrontPageCarousel() {\r\n  this.init();\r\n}\r\n\r\nFrontPageCarousel.prototype = new Base();\r\n\r\nFrontPageCarousel.prototype.init = function() {\r\n  var $carousel = $('.frontpage-campaign-carousel'),\r\n    $slide = $carousel.find('li'),\r\n    $indicator = $('[data-slide-number]'),\r\n    $slideId = $('[data-slide-id]'),\r\n    $nextBtn = $('[data-next-slide]'),\r\n    $prevBtn = $('[data-prev-slide]'),\r\n    numberSlides = $slide.length,\r\n    timeInterval = $('[data-slide-time-interval]').data('slide-time-interval'),\r\n    intervalObj = null;\r\n\r\n  $indicator.on('click', function(e) {\r\n    e.preventDefault();\r\n    $indicator.removeClass('is-active');\r\n\r\n    if (!$(this).hasClass('is-active')) {\r\n      $(this).addClass('is-active');\r\n    }\r\n    var id = $(this).data('slide-number');\r\n    $.each($slide, function() {\r\n      var $this = $(this);\r\n      if ($this.data('slide-id') === id) {\r\n        if (!$this.hasClass('is-visible')) {\r\n          $slide.removeClass('is-visible');\r\n          $this.addClass('is-visible');\r\n        }\r\n      }\r\n    });\r\n  });\r\n\r\n  $nextBtn.on('click', function(e) {\r\n    e.preventDefault();\r\n    stopAutoSlider();\r\n    showNextSlide();\r\n  });\r\n\r\n  $prevBtn.on('click', function(e) {\r\n    e.preventDefault();\r\n    stopAutoSlider();\r\n    var $activeSlide = $slide.filter('.is-visible'),\r\n      $activeId = $activeSlide.data('slide-id');\r\n\r\n    if ($activeId <= 1) {\r\n      $slide.last().addClass('is-visible');\r\n      $activeSlide.removeClass('is-visible');\r\n    } else {\r\n      $activeSlide.prev($slideId).addClass('is-visible');\r\n      $activeSlide.removeClass('is-visible');\r\n    }\r\n\r\n    setStateIndicator();\r\n  });\r\n\r\n  function stopAutoSlider() {\r\n    if (intervalObj !== null) {\r\n      clearInterval(intervalObj);\r\n    }\r\n  }\r\n\r\n  function setStateIndicator() {\r\n    var $currentId = $slide.filter('.is-visible').data('slide-id'),\r\n      $indicators = $('.frontpage-campaign-indicator a');\r\n\r\n    $indicators.removeClass('is-active');\r\n\r\n    $.each($indicators, function() {\r\n      var slidenumber = $(this).data('slide-number');\r\n\r\n      if (slidenumber === $currentId) {\r\n        $(this).addClass('is-active');\r\n      }\r\n    });\r\n  }\r\n\r\n  function loopCarousel() {\r\n    if (timeInterval < 1000) {\r\n      return;\r\n    }\r\n\r\n    intervalObj = setInterval(function() {\r\n      showNextSlide();\r\n    }, timeInterval);\r\n  }\r\n\r\n  loopCarousel();\r\n\r\n  function setPosIndicators() {\r\n    var $indicator = $('.frontpage-campaign-indicator'),\r\n      $indicatorW = $indicator.width() / 2;\r\n\r\n    $indicator.css('margin-left', '-' + $indicatorW + 'px');\r\n  }\r\n\r\n  setPosIndicators();\r\n\r\n  function showNextSlide() {\r\n    var $activeSlide = $slide.filter('.is-visible'),\r\n      $activeId = $activeSlide.data('slide-id');\r\n\r\n    if ($activeId < numberSlides) {\r\n      $activeSlide.next($slideId).addClass('is-visible');\r\n      $activeSlide.removeClass('is-visible');\r\n    } else if ($activeId >= numberSlides) {\r\n      $slide.first().addClass('is-visible');\r\n      $activeSlide.removeClass('is-visible');\r\n    }\r\n\r\n    setStateIndicator();\r\n  }\r\n};\r\nmodule.exports = FrontPageCarousel;\r\n","var Base = require('_js/base');\r\n\r\nfunction ListViewToggler() {\r\n  this.init();\r\n}\r\n\r\nListViewToggler.prototype = new Base();\r\n\r\nListViewToggler.prototype.init = function() {\r\n  var $toggler = $('[data-toggle-list-view]');\r\n\r\n  //toggle mobil menu\r\n  $toggler.on('click', function(e) {\r\n    e.preventDefault();\r\n\r\n    var toggleVal = $(this).data('toggle-list-view'),\r\n      $listView = $('.course-list-view'),\r\n      $tileView = $('.course-tile-view');\r\n\r\n    $toggler.removeClass('is-active');\r\n    $(this).addClass('is-active');\r\n\r\n    if (toggleVal === 'list') {\r\n      $tileView.removeClass('is-visible');\r\n      $listView.addClass('is-visible');\r\n    }\r\n    if (toggleVal === 'tile') {\r\n      $listView.removeClass('is-visible');\r\n      $tileView.addClass('is-visible');\r\n    }\r\n  });\r\n};\r\nmodule.exports = ListViewToggler;\r\n","var Base = require('_js/base');\r\nvar ko = require('knockout');\r\nvar hashHelper = require('_js/utils/hash-helper');\r\nrequire('knockout-postbox');\r\n\r\nvar filterModel = function(params) {\r\n  if (params.initEndpoint === undefined)\r\n    throw 'initEndpoint must be set to use filters';\r\n\r\n  var self = this;\r\n\r\n  //Settings\r\n  var filterTopic = params.filterTopic || 'courseListFiltersChanged';\r\n  var hasher = new hashHelper(filterTopic);\r\n\r\n  var selects;\r\n\r\n  var selectedUpdateEl = null;\r\n  var selectedUpdateObj = null;\r\n  var accountantOptions = [\r\n    { id: -1, name: window.language.showAll },\r\n    { id: 1, name: window.language.categories.accountant.financial_statement },\r\n    { id: 2, name: window.language.categories.accountant.bookkeeping },\r\n    { id: 3, name: window.language.categories.accountant.skatteavgiftsrett },\r\n    { id: 4, name: window.language.categories.accountant.accounting },\r\n    { id: 5, name: window.language.categories.accountant.corporate_law },\r\n    { id: 6, name: window.language.categories.accountant.other }\r\n  ];\r\n  var auditorOptions = [\r\n    { id: -1, name: window.language.showAll },\r\n    { id: 8, name: window.language.categories.auditor.revision },\r\n    { id: 10, name: window.language.categories.auditor.tax },\r\n    { id: 11, name: window.language.categories.auditor.financial_statement },\r\n    { id: 12, name: window.language.categories.auditor.other },\r\n    { id: 13, name: window.language.categories.auditor.valuation },\r\n    { id: 14, name: window.language.categories.auditor.corporate_law }\r\n  ];\r\n\r\n  //Selected filter values\r\n  self.selectedPlace = hasher.getListener(hasher.validHashes.place, '', true);\r\n  self.searchTerm = hasher.getListener(hasher.validHashes.searchTerm, '');\r\n  self.selectedUpdate = hasher.getListener(hasher.validHashes.update, -1);\r\n  self.fromDate = hasher.getDateListener(hasher.validHashes.fromDate);\r\n  self.toDate = hasher.getDateListener(hasher.validHashes.toDate);\r\n  self.selectedType = hasher.getListener(\r\n    hasher.validHashes.type,\r\n    window.language.showAll\r\n  );\r\n  self.selectedAuthorization = hasher.getListener(hasher.validHashes.role, '1');\r\n  self.ordering = hasher.getListener(hasher.validHashes.sort, '3');\r\n\r\n  // We want to store the initial place and update type in order to properly set the dropdowns when\r\n  // we have fetched data from JSON. Otherwise the dropdowns will use the default value.\r\n  var initialPlaceValue =\r\n    hasher.getHashValue(hasher.validHashes.place) || 'Vis alle';\r\n  var initialUpdateValue = hasher.getHashValue(hasher.validHashes.update) || -1;\r\n\r\n  //List sources\r\n  // self.coursePlaces = ko.observableArray([]);\r\n  self.coursePlacesArr = ko.observableArray([initialPlaceValue]);\r\n  self.coursePlaces = ko.computed(function() {\r\n    return self.coursePlacesArr();\r\n  });\r\n\r\n  ko.postbox.subscribe(filterTopic, function(val) {\r\n    if (val.city !== self.selectedPlace()) {\r\n      selects[1].selectize.setValue(val.city);\r\n    }\r\n  });\r\n\r\n  self.showAccountant = ko.observable(true);\r\n  self.showAuditor = ko.observable(false);\r\n\r\n  self.selectedAuthorization.subscribe(function(num) {\r\n    ko.postbox.publish('filterAuthorizationTypeUpdated', num);\r\n    if (parseInt(num, 10) === 1) {\r\n      selectedUpdateObj.clear();\r\n      selectedUpdateObj.clearOptions();\r\n      selectedUpdateObj.load(function(callback) {\r\n        callback(accountantOptions);\r\n      });\r\n      selectedUpdateObj.setValue(-1);\r\n    } else if (parseInt(num, 10) === 2) {\r\n      selectedUpdateObj.clear();\r\n      selectedUpdateObj.clearOptions();\r\n      selectedUpdateObj.load(function(callback) {\r\n        callback(auditorOptions);\r\n      });\r\n      selectedUpdateObj.setValue(-1);\r\n    }\r\n  });\r\n\r\n  self.orderElements = [\r\n    new OrderElement('Kursnavn', '3', self.ordering),\r\n    new OrderElement('Dato', '1', self.ordering),\r\n    new OrderElement('Sted', '2', self.ordering)\r\n  ];\r\n\r\n  self.query = ko.observable(self.searchTerm());\r\n  self.search = function() {\r\n    self.searchTerm(self.query());\r\n    // Do not order if a search term is written, 4 is relevance\r\n    self.ordering(4);\r\n  };\r\n  self.resetFilters = function() {\r\n    self.query(undefined);\r\n    self.searchTerm(undefined);\r\n\r\n    self.selectedAuthorization('1'); //1 is Accountant\r\n    self.ordering('3'); //3 is course name\r\n    self.fromDate(undefined);\r\n    self.toDate(undefined);\r\n    hasher.setHashValue(hasher.validHashes.page, 1);\r\n\r\n    // Since we're using the selectize plugin we have to\r\n    // modify these values instead of the observables.\r\n    // By changing these values, however, the observables\r\n    // will be changed.\r\n    selects[0].selectize.setValue(-1);\r\n    selects[1].selectize.setValue(window.language.showAll);\r\n    selectedUpdateObj.setValue(-1);\r\n  };\r\n\r\n  self.changeAuthorizationType = function(type) {\r\n    ko.postbox.publish('filterAuthorizationTypeUpdated', type);\r\n  };\r\n\r\n  $.getJSON(params.initEndpoint).done(function(data) {\r\n    //Place resets if not set after dropdown is populated\r\n    var currentlySelectedPlace = initialPlaceValue;\r\n    data.RegionList.push('---');\r\n    // We want to add the \"Show all\" option to the dropdown.\r\n    var placesDropdown = [window.language.showAll].concat(\r\n      data.RegionList,\r\n      data.CityList\r\n    );\r\n    self.coursePlacesArr(placesDropdown);\r\n    self.selectedPlace(currentlySelectedPlace);\r\n    selects = $('.form-select-wrapper-special').selectize({\r\n      onChange: function(value) {\r\n        // Reset city and dates when NetCourse is chosen (NetCourse == 3)\r\n        if (value == 3) {\r\n          selects[1].selectize.setValue(window.language.showAll);\r\n          self.fromDate(undefined);\r\n          self.toDate(undefined);\r\n        }\r\n      }\r\n    });\r\n    if (parseInt(self.selectedAuthorization(), 10) === 1) {\r\n      selectedUpdateEl = $('.form-select-filter-update').selectize({\r\n        valueField: 'id',\r\n        labelField: 'name',\r\n        options: accountantOptions\r\n      });\r\n    } else {\r\n      selectedUpdateEl = $('.form-select-filter-update').selectize({\r\n        valueField: 'id',\r\n        labelField: 'name',\r\n        options: auditorOptions\r\n      });\r\n    }\r\n    selectedUpdateObj = selectedUpdateEl[0].selectize;\r\n    selectedUpdateObj.setValue(initialUpdateValue);\r\n  });\r\n};\r\n\r\nfunction OrderElement(name, value, orderObservable) {\r\n  var self = this;\r\n  self.value = value;\r\n  self.name = name;\r\n\r\n  self.select = function(el, e) {\r\n    e.preventDefault();\r\n    orderObservable(self.value);\r\n    orderObservable.notifySubscribers(self.value);\r\n  };\r\n\r\n  self.isActive = ko.observable(self.value === orderObservable());\r\n  orderObservable.subscribe(function(newValue) {\r\n    self.isActive(self.value === newValue);\r\n  });\r\n}\r\n\r\n/// Molecule\r\nfunction CourseFilters() {\r\n  this.init();\r\n}\r\n\r\nCourseFilters.prototype = new Base();\r\n\r\nCourseFilters.prototype.init = function() {\r\n  $('[data-course-filters]').each(function() {\r\n    ko.applyBindings(filterModel($(this).data('course-filters')), this);\r\n  });\r\n};\r\n\r\nmodule.exports = CourseFilters;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction RegularCourse(settings) {\r\n  var self = this;\r\n\r\n  self.api = settings.removeApi;\r\n  self.container = $(settings.element).closest('.course-row-location');\r\n  self.$container = $(self.container);\r\n  self.activeModal = ko.observable(false);\r\n}\r\n\r\nRegularCourse.prototype = new Base();\r\n\r\nRegularCourse.prototype.cancelCourse = function() {\r\n  this.activeModal(true);\r\n};\r\n\r\nRegularCourse.prototype.verifyCancelCourse = function() {\r\n  this.activeModal(false);\r\n  var self = this;\r\n  APIHelper.post(\r\n    this.api,\r\n    undefined,\r\n    function() {\r\n      self.$container.slideUp();\r\n    },\r\n    function(data) {\r\n      var location = window.location.href || document.URL;\r\n      APIHelper.post('/api/log/error', {\r\n        message: 'API-error: course-row-location.js',\r\n        context: location,\r\n        parameters: [\r\n          'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n          'platform: ' + navigator.platform,\r\n          'responseText: ' + data.responseText,\r\n          'status: ' + data.status,\r\n          'statusText: ' + data.statusText,\r\n          'requestUrl: ' + this.api\r\n        ]\r\n      });\r\n    }\r\n  );\r\n};\r\n\r\nRegularCourse.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nfunction regularCourseModel() {\r\n  var courses = $('[data-remove-api]');\r\n  if (courses.get(0) !== undefined) {\r\n    courses.each(function(i, course) {\r\n      ko.applyBindings(\r\n        new RegularCourse({\r\n          removeApi: $(course).data('remove-api'),\r\n          element: $(course).get(0)\r\n        }),\r\n        $(course).get(0)\r\n      );\r\n    });\r\n  }\r\n}\r\n\r\nmodule.exports = regularCourseModel;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar FilterInterest = function(params, parent) {\r\n  this.filterTopic = 'disciplineInterestsCategoryFilter';\r\n  this.CategoryKey = ko.observable(params.CategoryKey);\r\n  this.CategoryName = ko.observable(params.CategoryName);\r\n  this.Checked = ko.observable(params.Checked);\r\n\r\n  this.Checked.subscribe(function() {\r\n    ko.postbox.publish(this.filterTopic, {\r\n      Categories: getCheckedCategoryKeysFromKO(parent)\r\n    });\r\n  }, this);\r\n};\r\n\r\nfunction getCheckedCategoryKeysFromKO(parent) {\r\n  var koCategories = parent.getFilters();\r\n  var categories = [];\r\n  for (var i = 0; i < koCategories.length; i++) {\r\n    if (koCategories[i].Checked()) {\r\n      categories.push(koCategories[i].CategoryKey());\r\n    }\r\n  }\r\n  return categories;\r\n}\r\n\r\nfunction FilterInterests(params) {\r\n  this.filters = ko.observableArray([]);\r\n  this.filterTopic = 'disciplineInterestsCategoryFilter';\r\n  for (var i = 0; i < params.filters.length; i++) {\r\n    this.filters.push(new FilterInterest(params.filters[i], this));\r\n  }\r\n\r\n  ko.postbox.publish(this.filterTopic, {\r\n    Categories: getCheckedCategoryKeysFromKO(this)\r\n  });\r\n}\r\n\r\nFilterInterests.prototype.getFilters = function() {\r\n  return this.filters();\r\n};\r\n\r\n// > example\r\nfunction DisciplineInterests() {\r\n  this.init();\r\n}\r\n\r\nDisciplineInterests.prototype = new Base();\r\n\r\nDisciplineInterests.prototype.init = function() {\r\n  $('[data-interests-filter]').each(function() {\r\n    ko.applyBindings(\r\n      new FilterInterests($(this).data('interests-filter')),\r\n      this\r\n    );\r\n  });\r\n};\r\n\r\nmodule.exports = DisciplineInterests;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nfunction BlockModel() {\r\n  this.authorizationDate = ko.observable();\r\n}\r\n\r\nfunction BlockUnAuthorized() {\r\n  this.init();\r\n}\r\nBlockUnAuthorized.prototype = new Base();\r\n\r\nBlockUnAuthorized.prototype.init = function() {\r\n  var $blocks = $('[data-block-unauthorized]');\r\n\r\n  $blocks.each(function() {\r\n    ko.applyBindings(new BlockModel(), this);\r\n  });\r\n};\r\n\r\nmodule.exports = BlockUnAuthorized;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nfunction EmployersModel(params) {\r\n  var self = this;\r\n  this.params = params;\r\n  this.employers = ko.observableArray(this.params.employers);\r\n  this.API = this.params.api;\r\n  this.indexedEmployers = this.indexEmployers();\r\n\r\n  this.current = ko.observable(-1);\r\n  this.currentEmployerName = ko.observable('');\r\n  this.currentEmployer = ko.computed(function() {\r\n    return this.indexedEmployers[this.current()];\r\n  }, this);\r\n\r\n  this.chooseCompany = function(index) {\r\n    this.current(index());\r\n  }.bind(this);\r\n\r\n  this.selects = $('.form-select-wrapper-special').selectize({\r\n    valueField: 'aktorId',\r\n    labelField: 'companyName',\r\n    options: this.employers(),\r\n    onChange: function(val) {\r\n      self.currentEmployerName(val);\r\n    }\r\n  });\r\n  if (this.employers().length > 0) {\r\n    this.current(this.employers()[0].aktorId);\r\n    // Set to first value.\r\n    this.selects[0].selectize.setValue(this.employers()[0].aktorId);\r\n  }\r\n\r\n  this.activeModal = ko.observable(false);\r\n\r\n  this.resultOption = ko.observable();\r\n  this.results = ko.observableArray([]);\r\n  this.isSearching = ko.observable(false);\r\n  this.hasSearched = ko.observable(false);\r\n  this.showSearchQuery = ko.observable(false);\r\n  this.searchQuery = ko.observable().extend({\r\n    required: [\r\n      {\r\n        type: 'isNumber',\r\n        message: 'Her må du skrive inn organisasjonsnummer (9 siffer)'\r\n      },\r\n      { type: 'isLength', message: 'Feltet skal ha 9 siffer', length: 9 }\r\n    ]\r\n  });\r\n\r\n  this.toggleSearchQuery = function() {\r\n    self.showSearchQuery(!self.showSearchQuery());\r\n  };\r\n  this.searchOrganization = function() {\r\n    if (self.searchQuery() === undefined) {\r\n      return;\r\n    }\r\n    if (self.searchQuery.hasError()) {\r\n      return;\r\n    }\r\n    self.isSearching(true);\r\n\r\n    var url = this.API.addAgencyConnectionUrl;\r\n    var data = { OrgNo: this.searchQuery() };\r\n    APIHelper.post(\r\n      url,\r\n      data,\r\n      function(data) {\r\n        // data = tmpData;\r\n        self.results(data);\r\n        self.hasSearched(true);\r\n        self.isSearching(false);\r\n        // If we only got one result\r\n        if (data.CreatedAgency !== null) {\r\n          self.addEmployer(data.CreatedAgency);\r\n        }\r\n      },\r\n      function(response) {\r\n        self.hasSearched(true);\r\n        self.isSearching(false);\r\n\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: employee-list.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n  this.addChosenEmployer = function() {\r\n    var chosenEmployer = self.results().AvailableAgencies[self.resultOption()];\r\n    var url = self.API.addAgencyConnectionUrl;\r\n    var data = { OrgNo: self.searchQuery(), AktorId: chosenEmployer.AktorId };\r\n    APIHelper.post(\r\n      url,\r\n      data,\r\n      function() {\r\n        self.addEmployer(chosenEmployer);\r\n      },\r\n      function(response) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: employee-list.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + response.responseText,\r\n            'status: ' + response.status,\r\n            'statusText: ' + response.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  };\r\n}\r\n\r\nEmployersModel.prototype.closeModal = function() {\r\n  this.activeModal(false);\r\n};\r\n\r\nEmployersModel.prototype._getIndexOfCurrentEmployer = function() {\r\n  var index = -1;\r\n  for (var i = 0; i < this.employers().length; i++) {\r\n    if (this.employers()[i].aktorId === this.currentEmployerName()) {\r\n      index = i;\r\n    }\r\n  }\r\n  return index;\r\n};\r\n\r\nEmployersModel.prototype.verifyRemoveEmployer = function() {\r\n  this.activeModal(false);\r\n  var self = this;\r\n  var index = this._getIndexOfCurrentEmployer();\r\n  if (index !== -1) {\r\n    var url =\r\n      this.API.endAgencyConnectionUrl +\r\n      '?agencyAktorId=' +\r\n      this.employers()[index].aktorId;\r\n    APIHelper.post(\r\n      url,\r\n      {},\r\n      function() {\r\n        self.employers().splice(index, 1);\r\n        self.indexedEmployers = self.indexEmployers();\r\n        if (self.employers().length > 0) {\r\n          self.current(self.employers()[0].aktorId);\r\n        } else {\r\n          self.current(-1);\r\n        }\r\n        self.selects[0].selectize.removeOption(self.currentEmployerName());\r\n        self.selects[0].selectize.refreshItems();\r\n      },\r\n      function(err) {\r\n        var location = window.location.href || document.URL;\r\n        APIHelper.post('/api/log/error', {\r\n          message: 'API-error: employee-list.js',\r\n          context: location,\r\n          parameters: [\r\n            'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n            'platform: ' + navigator.platform,\r\n            'responseText: ' + err.responseText,\r\n            'status: ' + err.status,\r\n            'statusText: ' + err.statusText,\r\n            'requestUrl: ' + url\r\n          ]\r\n        });\r\n      }\r\n    );\r\n  }\r\n};\r\n\r\nEmployersModel.prototype.addEmployer = function(employer) {\r\n  // Need to map some of the properties to what is used when displaying data.\r\n  employer.companyName = employer.Name;\r\n  employer.orgNr = employer.OrgNo;\r\n  employer.address = employer.StreetAddress;\r\n  employer.postalCode = employer.StreetPostCode;\r\n  employer.place = employer.StreetCity;\r\n  employer.aktorId = employer.AktorId;\r\n\r\n  this.employers().push(employer);\r\n  this.employers.valueHasMutated();\r\n  this.indexedEmployers = this.indexEmployers();\r\n  this.selects[0].selectize.addOption(employer);\r\n  this.selects[0].selectize.setValue(employer.aktorId);\r\n  this.selects[0].selectize.refreshItems();\r\n\r\n  // Reset search.\r\n  this.searchQuery('');\r\n  this.searchQuery.hasError(undefined);\r\n  this.results([]);\r\n  this.hasSearched(false);\r\n  this.toggleSearchQuery();\r\n};\r\n\r\nEmployersModel.prototype.removeEmployer = function() {\r\n  this.activeModal(true);\r\n};\r\n\r\nEmployersModel.prototype.indexEmployers = function() {\r\n  var tmpEmployer = {};\r\n  this.employers().forEach(function(employer) {\r\n    tmpEmployer[employer.aktorId] = employer;\r\n  });\r\n  return tmpEmployer;\r\n};\r\n\r\nfunction ProfileEmployer() {\r\n  this.init();\r\n}\r\n\r\nProfileEmployer.prototype = new Base();\r\n\r\nProfileEmployer.prototype.init = function() {\r\n  $('[data-employers]').each(function() {\r\n    ko.applyBindings(new EmployersModel($(this).data('employers')), this);\r\n  });\r\n};\r\n\r\nmodule.exports = ProfileEmployer;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nvar PasswordModal = function(params) {\r\n  this.closeModalFunc = params.closeModal;\r\n  this.api = params.api;\r\n  this.oldPassword = ko.observable().extend();\r\n  this.newPassword = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' },\r\n      {\r\n        type: 'isMinLength',\r\n        message: 'Feltet må bestå av minst 12 tegn',\r\n        length: 12\r\n      },\r\n      {\r\n        type: 'isRNPassword',\r\n        message:\r\n          'Det nye passordet må bestå av minst 12 tegn, små og store bokstaver og ett eller flere tall'\r\n      }\r\n    ]\r\n  });\r\n  this.confirmPassword = ko.observable().extend({\r\n    required: [\r\n      { type: 'isNotEmpty', message: 'Feltet kan ikke være tomt' },\r\n      {\r\n        type: 'isMinLength',\r\n        message: 'Feltet må bestå av minst 12 tegn',\r\n        length: 12\r\n      },\r\n      {\r\n        type: 'isEqualTo',\r\n        message: 'Feltet stemmer ikke overens med det nye passordet.',\r\n        value: this.newPassword\r\n      },\r\n      {\r\n        type: 'isRNPassword',\r\n        message:\r\n          'Det nye passordet må bestå av minst 12 tegn, små og store bokstaver og ett eller flere tall'\r\n      }\r\n    ]\r\n  });\r\n\r\n  this.fields = [this.newPassword, this.confirmPassword];\r\n  this.validationStatus = ko.observable('');\r\n  this.validationText = ko.observable('');\r\n};\r\n\r\nPasswordModal.prototype.validateFields = function() {\r\n  var isValid = true;\r\n  for (var i = 0; i < this.fields.length; i++) {\r\n    if (this.fields[i]() === undefined || this.fields[i]() === null) {\r\n      this.fields[i].hasError(true);\r\n    }\r\n    if (this.fields[i].hasError()) {\r\n      isValid = false;\r\n    }\r\n  }\r\n\r\n  return isValid;\r\n};\r\n\r\nPasswordModal.prototype.changePassword = function() {\r\n  // Check if fields are valid before changing password\r\n  if (!this.validateFields()) {\r\n    return;\r\n  }\r\n\r\n  var self = this;\r\n\r\n  // Do API call that changes password.\r\n  APIHelper.post(\r\n    this.api,\r\n    {\r\n      aktorId: window.username,\r\n      oldPassword: this.oldPassword(),\r\n      newPassword: this.confirmPassword()\r\n    },\r\n    function() {\r\n      self.validationStatus('success');\r\n    },\r\n    function(data) {\r\n      self.validationStatus('errors');\r\n      self.validationText(data.statusText);\r\n    }\r\n  );\r\n};\r\n\r\nPasswordModal.prototype.closeModal = function() {\r\n  this.closeModalFunc();\r\n};\r\n\r\nfunction ProfileHeader() {\r\n  this.init();\r\n  var $passwordModal = $('.change-password-modal');\r\n  if ($passwordModal.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new PasswordModal({\r\n        closeModal: this.closeModal.bind(this),\r\n        api: $passwordModal.data('password-api')\r\n      }),\r\n      $passwordModal.get(0)\r\n    );\r\n  }\r\n}\r\n\r\nProfileHeader.prototype = new Base();\r\n\r\nProfileHeader.prototype.init = function() {\r\n  var $passwordBtn = $('.profile-header-password .btn'),\r\n    $passwordModal = $('.change-password-modal'),\r\n    $passwordModalClose = $passwordModal.find('.icon-close');\r\n\r\n  $passwordBtn.on('click', function() {\r\n    $passwordModal.toggleClass('is-active');\r\n  });\r\n  $passwordModalClose.on('click', function() {\r\n    $passwordModal.removeClass('is-active');\r\n  });\r\n\r\n  this.$passwordModal = $passwordModal;\r\n\r\n  $('.profile-content .accordion-single header').on('click', function() {\r\n    $(this)\r\n      .parent()\r\n      .toggleClass('is-active');\r\n  });\r\n};\r\n\r\nProfileHeader.prototype.closeModal = function() {\r\n  this.$passwordModal.removeClass('is-active');\r\n};\r\n\r\nmodule.exports = ProfileHeader;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout');\r\n\r\nfunction BureauSubscriptionItem(params, parent) {\r\n  this.parent = parent;\r\n  this.name = ko.observable(params.name || '');\r\n  this.contact = ko.observable(params.contact || '');\r\n  this.email = ko.observable(params.email || '');\r\n  this.postalCode = ko.observable(params.postalCode || '');\r\n  this.address = ko.observable(params.address || '');\r\n}\r\n\r\nBureauSubscriptionItem.prototype.editItem = function() {\r\n  this.parent.editSubscription(this);\r\n};\r\nBureauSubscriptionItem.prototype.removeItem = function() {\r\n  this.parent.askRemoveSubscription(this);\r\n};\r\n\r\nfunction BureauSubscriptionList(params) {\r\n  // Create a temporary array which we can populate with items.\r\n  var totalSubscriptions = [];\r\n  for (var i = 0; i < params.subscriptions.length; i++) {\r\n    totalSubscriptions.push(\r\n      new BureauSubscriptionItem(params.subscriptions[i], this)\r\n    );\r\n  }\r\n\r\n  // Current page.\r\n  this.currentPage = ko.observable(1);\r\n  this.itemsPerPage = 5;\r\n  this.totalPages = ko.computed(function() {\r\n    var pages = Math.ceil(totalSubscriptions.length / this.itemsPerPage);\r\n    if (pages < 1) {\r\n      pages = 1;\r\n    }\r\n    return Math.ceil(pages);\r\n  }, this);\r\n\r\n  this.currentPage.subscribe(function(value) {\r\n    this.subscriptions(\r\n      totalSubscriptions.slice(\r\n        (value - 1) * this.itemsPerPage,\r\n        value * this.itemsPerPage\r\n      )\r\n    );\r\n  }, this);\r\n\r\n  // Create an observable that will watch the first page of items.\r\n  this.subscriptions = ko.observableArray(\r\n    totalSubscriptions.slice(0, this.itemsPerPage)\r\n  );\r\n  // This is the subscription shown in the (edit) modal.\r\n  // If it is empty, we will show the \"add\" subscription instead.\r\n  this.emptySubscription = new BureauSubscriptionItem({}, this);\r\n  this.activeSubscription = ko.observable(this.emptySubscription);\r\n\r\n  // States to show/hide the two modals.\r\n  this.modalActive = ko.observable(false);\r\n  this.deleteModal = ko.observable(false);\r\n}\r\n\r\nBureauSubscriptionList.prototype.changePage = function(index) {\r\n  this.currentPage(index);\r\n};\r\n\r\nBureauSubscriptionList.prototype.editSubscription = function(subscription) {\r\n  this.activeSubscription(subscription);\r\n  this.openModal();\r\n};\r\n\r\nBureauSubscriptionList.prototype.addSubscription = function() {\r\n  this.activeSubscription(this.emptySubscription);\r\n  this.openModal();\r\n};\r\n\r\nBureauSubscriptionList.prototype.askRemoveSubscription = function() {\r\n  // We do not want both modals open.\r\n  this.modalActive(false);\r\n  this.deleteModal(true);\r\n};\r\n\r\nBureauSubscriptionList.prototype.cancelRemove = function() {\r\n  this.deleteModal(false);\r\n};\r\n\r\nBureauSubscriptionList.prototype.openModal = function() {\r\n  this.modalActive(true);\r\n};\r\n\r\nBureauSubscriptionList.prototype.closeModal = function() {\r\n  this.modalActive(false);\r\n};\r\n\r\nfunction BureauSubscription() {\r\n  this.init();\r\n}\r\n\r\nBureauSubscription.prototype = new Base();\r\n\r\nBureauSubscription.prototype.init = function() {\r\n  var $bureauSubscriptions = $('[data-bureau-subscriptions]');\r\n  if ($bureauSubscriptions.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new BureauSubscriptionList(\r\n        $bureauSubscriptions.data('bureau-subscriptions')\r\n      ),\r\n      $bureauSubscriptions.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = BureauSubscription;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction BureanInsurancesChanges() {\r\n  this.init();\r\n}\r\n\r\nBureanInsurancesChanges.prototype = new Base();\r\n\r\nBureanInsurancesChanges.prototype.init = function() {\r\n  var $bureauInsurances = $('[data-bureau-insurances-changes]');\r\n  if ($bureauInsurances.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model($bureauInsurances.data('bureau-insurances-changes')),\r\n      $bureauInsurances.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = BureanInsurancesChanges;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nfunction CitySearch(params) {\r\n  this.$codeEl = params.codeEl;\r\n  this.$cityEl = params.cityEl;\r\n  this.init();\r\n}\r\n\r\nCitySearch.prototype = new Base();\r\n\r\nCitySearch.prototype.init = function() {\r\n  var self = this;\r\n\r\n  self.$codeEl.keyup(function() {\r\n    self.getInputText();\r\n  });\r\n};\r\n\r\nCitySearch.prototype.getInputText = function() {\r\n  var self = this;\r\n  if (self.$codeEl.val().length === 4) {\r\n    self.searchForCity(self.$codeEl.val());\r\n  } else if (self.$codeEl.val().length === 0) {\r\n    // empty city if there is no postcode\r\n    self.$cityEl.val('');\r\n  }\r\n};\r\n\r\nCitySearch.prototype.searchForCity = function(num) {\r\n  var self = this;\r\n  $.getJSON(\r\n    'https://fraktguide.bring.no/fraktguide/postalCode.json?pnr=' +\r\n      num +\r\n      '&callback=?',\r\n    function(data) {\r\n      self.$cityEl.val(data.result);\r\n    }\r\n  );\r\n};\r\nfunction SearchPostalCode() {\r\n  this.init();\r\n}\r\n\r\nSearchPostalCode.prototype = new Base();\r\n\r\nSearchPostalCode.prototype.init = function() {\r\n  var $postalCodes = $('[data-search-postal-code]');\r\n  if ($postalCodes.get(0) !== undefined) {\r\n    $postalCodes.each(function() {\r\n      ko.applyBindings(\r\n        new CitySearch({\r\n          codeEl: $($(this).find('input.postal-code')),\r\n          cityEl: $($(this).find('input.postal-place'))\r\n        }),\r\n        this\r\n      );\r\n    });\r\n  }\r\n};\r\nmodule.exports = SearchPostalCode;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction FilterLinks() {\r\n  this.init();\r\n}\r\n\r\nFilterLinks.prototype = new Base();\r\n\r\nFilterLinks.prototype.init = function() {\r\n  //Accordion on mobile\r\n  var $accordion = $('.filter-links-content .btn-accordion');\r\n  $accordion.on('click', function(e) {\r\n    e.preventDefault();\r\n    $(this)\r\n      .parent()\r\n      .toggleClass('is-active');\r\n  });\r\n};\r\n\r\nmodule.exports = FilterLinks;\r\n","var Base = require('_js/base');\r\n\r\nfunction CourseFactsBlock() {\r\n  this.init();\r\n}\r\n\r\nCourseFactsBlock.prototype = new Base();\r\n\r\nCourseFactsBlock.prototype.init = function() {\r\n  $('.course-facts-mobile-tab').on('click', function() {\r\n    var tab = $(this).closest('[data-tab]');\r\n    var tabNumber = tab.data('tab');\r\n    var isActive = tab.hasClass('is-active');\r\n\r\n    if (!isActive) {\r\n      var $allTabs = $('[data-tab]');\r\n      var $activeTabs = $(\"[data-tab='\" + tabNumber + \"']\");\r\n      $allTabs.removeClass('is-active');\r\n      $allTabs.parent().removeClass('is-active');\r\n      $activeTabs.addClass('is-active');\r\n      $activeTabs.parent().addClass('is-active');\r\n    }\r\n  });\r\n};\r\n\r\nmodule.exports = CourseFactsBlock;\r\n","var Base = require('_js/base');\r\n\r\nfunction UserProfileBlock() {\r\n  this.init();\r\n}\r\n\r\nUserProfileBlock.prototype = new Base();\r\n\r\nUserProfileBlock.prototype.init = function() {\r\n  //Accordion on mobile\r\n  var $accordion = $('.user-profile-block-conatiner.accordion-single');\r\n  $accordion.on('click', function() {\r\n    $(this).toggleClass('is-active');\r\n  });\r\n};\r\n\r\nmodule.exports = UserProfileBlock;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction FooterViewModel() {\r\n  this.init();\r\n}\r\n\r\nFooterViewModel.prototype = new Base();\r\n\r\nFooterViewModel.prototype.init = function() {\r\n  $(function() {\r\n    var $accordions = $('.main-footer .accordion-single header');\r\n    $accordions.on('click', function() {\r\n      $(this)\r\n        .parent()\r\n        .toggleClass('active');\r\n    });\r\n  });\r\n};\r\n\r\nmodule.exports = FooterViewModel;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout');\r\n\r\nfunction HeaderViewModel() {\r\n  this.$header = $('.main-header');\r\n  this.init();\r\n}\r\n\r\nHeaderViewModel.prototype = new Base();\r\n\r\nHeaderViewModel.prototype.init = function() {\r\n  var self = this;\r\n\r\n  $('.main-header').scrollToFixed({\r\n    spacerClass: 'scrollToFixed-spacing'\r\n  });\r\n\r\n  // Looking for what determines the size for the element beneath .main-header?\r\n  // It is in the toggle function of app.js: scrollToFixed plugin.\r\n  // See also usage of the scrollToFixed-styling css class.\r\n\r\n  // Don't resize the header if we're on a mobile device.\r\n  // I'm doing this based on size and not user agent because all the styling is associated\r\n  // to the device size.\r\n  if ($(document).width() > 1024) {\r\n    $(document).on(\r\n      'scroll',\r\n      function() {\r\n        if ($(document).scrollTop() > 100) {\r\n          this.$header.addClass('reduced');\r\n        } else {\r\n          this.$header.removeClass('reduced');\r\n        }\r\n      }.bind(this)\r\n    );\r\n  }\r\n\r\n  self.hoverDelay = ko.observable(true);\r\n\r\n  $('.header-menu').on('mouseleave', function() {\r\n    self.hoverDelay(true);\r\n  });\r\n\r\n  $('.header-menu-item-link').on('mouseenter', function() {\r\n    var menu = $(this);\r\n    var submenu = menu.parent().find('.header-menu-sub-item');\r\n\r\n    setTimeout(function() {\r\n      var isHovered = menu.filter(function() {\r\n        return menu.is(':hover');\r\n      });\r\n\r\n      if (isHovered.length > 0) {\r\n        submenu.addClass('is-visible');\r\n        submenu.css('min-width', menu.outerWidth());\r\n\r\n        var offsetRight =\r\n          submenu[0].getBoundingClientRect().right - $(window).innerWidth();\r\n        if (offsetRight > 0) {\r\n          var whitespaceRightOfMenu =\r\n            $(window).innerWidth() - menu[0].getBoundingClientRect().right;\r\n          submenu.css('right', whitespaceRightOfMenu);\r\n        }\r\n      }\r\n    }, self.hoverDelay() ? 500 : 0);\r\n  });\r\n\r\n  $('.header-menu-item-link').on('mouseleave', function() {\r\n    var menu = $(this);\r\n    var submenu = menu.parent().find('.header-menu-sub-item.is-visible');\r\n\r\n    self.hoverDelay(false);\r\n\r\n    setTimeout(function() {\r\n      var keepSubMenuOpen = false;\r\n\r\n      var menuIsHovered = menu.filter(function() {\r\n        return menu.is(':hover');\r\n      });\r\n\r\n      var submenuIsHovered = submenu.filter(function() {\r\n        return submenu.is(':hover');\r\n      });\r\n\r\n      if (menuIsHovered.length > 0 || submenuIsHovered.length > 0) {\r\n        keepSubMenuOpen = true;\r\n      }\r\n\r\n      if (!keepSubMenuOpen) {\r\n        submenu.removeClass('is-visible');\r\n        submenu.css('right', 'auto');\r\n      }\r\n      menu.removeClass('is-focused');\r\n    }, self.hoverDelay() ? 200 : 0);\r\n  });\r\n\r\n  $('.header-menu-sub-item').on('mouseleave', function() {\r\n    var submenu = $(this);\r\n    submenu.removeClass('is-visible');\r\n  });\r\n\r\n  //Support-menu-link toggler\r\n  $('.support-menu-link').on('click', function(e) {\r\n    var me = $(this);\r\n    var parent = $(this).parent();\r\n\r\n    if (me.attr('data-toggle')) {\r\n      e.preventDefault();\r\n    } else {\r\n      return;\r\n    }\r\n\r\n    parent.siblings().removeClass('is-open');\r\n\r\n    //Remove is-visible\r\n    parent.siblings().each(function() {\r\n      var me = $(this);\r\n      $(\r\n        '.main-header .' + me.find('.support-menu-link').data('toggle')\r\n      ).removeClass('is-visible');\r\n    });\r\n\r\n    var toggleItem = $('.main-header .' + me.attr('data-toggle'));\r\n\r\n    //if open close\r\n    if (parent.hasClass('is-open')) {\r\n      toggleItem.removeClass('is-visible');\r\n\r\n      setTimeout(function() {\r\n        parent.removeClass('is-open');\r\n      }, 300);\r\n    } else {\r\n      //else if closed open\r\n      parent.addClass('is-open');\r\n      toggleItem.addClass('is-visible');\r\n    }\r\n  });\r\n\r\n  var mainHeader = $('.main-header');\r\n  var menuItems = $('.support-menu-item');\r\n  var menuItemsContent = [];\r\n\r\n  menuItems.each(function() {\r\n    var menuItemContent = mainHeader.find(\r\n      '.' +\r\n        $(this)\r\n          .find('.support-menu-link')\r\n          .data('toggle')\r\n    );\r\n    if (menuItemContent.get(0) !== undefined) {\r\n      menuItemsContent.push(menuItemContent);\r\n    }\r\n  });\r\n\r\n  // Listen to clicks on the main-content.\r\n  ko.postbox.subscribe('maincontent', function(newVal) {\r\n    if (newVal === 'click') {\r\n      // Close all menu items.\r\n      removeOpenState(menuItems, menuItemsContent);\r\n    }\r\n  });\r\n\r\n  // click outside search button on desktop will hide focus on search button\r\n  $(document).mousedown(function(e) {\r\n    var $searchButtonItem = $('.support-menu-item.search'),\r\n      $searchButtonDesktop = $('[data-toggle=\"main-search\"]'),\r\n      $searchField = $('.support-menu-search-field');\r\n\r\n    // if the target of the click isn't the container...\r\n    if (\r\n      !$searchButtonItem.is(e.target) &&\r\n      $searchButtonItem.has(e.target).length === 0\r\n    ) {\r\n      // ... nor a descendant of the container\r\n      $searchButtonDesktop.removeClass('is-active');\r\n      $searchButtonItem.removeClass('is-open');\r\n      $searchField.removeClass('is-open');\r\n    }\r\n  });\r\n};\r\n\r\nfunction removeOpenState(menuItems, menuItemsContent) {\r\n  menuItems.removeClass('is-open');\r\n  for (var i = 0; i < menuItemsContent.length; i++) {\r\n    $(menuItemsContent[i]).removeClass('is-visible');\r\n  }\r\n}\r\n\r\nmodule.exports = HeaderViewModel;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction HeaderSubViewModel() {\r\n  this.$header = $('.sub-header');\r\n  this.init();\r\n}\r\n\r\nHeaderSubViewModel.prototype = new Base();\r\n\r\nHeaderSubViewModel.prototype.init = function() {\r\n  if ($(document).width() > 1024) {\r\n    $(document).on(\r\n      'scroll',\r\n      function() {\r\n        if ($(document).scrollTop() > 100) {\r\n          this.$header.addClass('reduced');\r\n        } else {\r\n          this.$header.removeClass('reduced');\r\n        }\r\n      }.bind(this)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = HeaderSubViewModel;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout'),\r\n  analytics = require('_js/analytics-ecommerce'),\r\n  hashHelper = require('_js/utils/hash-helper');\r\nrequire('knockout-postbox');\r\n\r\nvar listModel = function(params) {\r\n  if (params.listEndpoint === undefined)\r\n    throw 'listEndpoint must be set to fetch list';\r\n\r\n  var self = this;\r\n\r\n  var filterTopic = params.filterTopic || 'courseFiltersChanged';\r\n  var hasher = new hashHelper(filterTopic);\r\n  var itemsPerPage = params.itemsPerPage || 20;\r\n\r\n  self.loading = ko.observable(false);\r\n  self.currentFilters = ko.observable().subscribeTo(filterTopic, true);\r\n  self.currentPage = hasher.getListener(hasher.validHashes.page, 1);\r\n\r\n  self.currentPageLocal = ko.observable(self.currentPage());\r\n  ko.postbox.subscribe(filterTopic, function() {\r\n    if (self.currentPage() !== self.currentPageLocal()) {\r\n      self.currentPageLocal(self.currentPage());\r\n    } else {\r\n      self.currentPage(1);\r\n      self.currentPageLocal(1);\r\n    }\r\n  });\r\n\r\n  self.maxItemsForCurrentQuery = ko.observable(1);\r\n  self.pages = ko.computed(function() {\r\n    var pages = self.maxItemsForCurrentQuery() / itemsPerPage;\r\n    if (pages < 1) return 1;\r\n\r\n    return Math.ceil(pages);\r\n  });\r\n\r\n  self.showTextAboutFindingNetCourses = ko.observable(false);\r\n  self.changeFilterToOnlineCourses = function() {\r\n    window.location.assign('#sted=Vis alle&sortering=3&type=3');\r\n    window.scrollTo(0, 0);\r\n    window.location.reload();\r\n  };\r\n\r\n  var calculateSkipAndTake = function(selectedPage) {\r\n    var skip = itemsPerPage * selectedPage - itemsPerPage;\r\n    return { skip: skip, take: itemsPerPage };\r\n  };\r\n\r\n  self.courseList = ko.observableArray([]);\r\n\r\n  self.tileView = ko.observable(false);\r\n  self.toggleTileView = function() {\r\n    self.tileView(true);\r\n  };\r\n\r\n  ko.postbox.subscribe('resize', function(val) {\r\n    if (val === 'small') {\r\n      self.tileView(true);\r\n    }\r\n  });\r\n\r\n  self.toggleListView = function() {\r\n    self.tileView(false);\r\n  };\r\n\r\n  var currentPost;\r\n\r\n  var updateList = function() {\r\n    var filters = self.currentFilters();\r\n    var additionalFilters = calculateSkipAndTake(self.currentPage());\r\n\r\n    filters.skip = additionalFilters.skip;\r\n    filters.take = additionalFilters.take;\r\n\r\n    if (currentPost !== undefined) currentPost.abort();\r\n\r\n    if (/json$/.test(params.listEndpoint)) {\r\n      currentPost = $.getJSON(params.listEndpoint, function(courses) {\r\n        currentPost = undefined;\r\n        self.courseList(courses.Result);\r\n        self.maxItemsForCurrentQuery(courses.TotalItems);\r\n        analytics.coursesShown(courses.Result, filters);\r\n        ko.postbox.publish(\r\n          'courseResultsLength',\r\n          self.maxItemsForCurrentQuery()\r\n        );\r\n      });\r\n    } else {\r\n      self.loading(true);\r\n\r\n      currentPost = $.post(params.listEndpoint, filters)\r\n        .done(function(courses) {\r\n          currentPost = undefined;\r\n          self.courseList(courses.Result);\r\n          self.maxItemsForCurrentQuery(courses.TotalItems);\r\n          analytics.coursesShown(courses.Result, filters);\r\n          ko.postbox.publish(\r\n            'courseResultsLength',\r\n            self.maxItemsForCurrentQuery()\r\n          );\r\n        })\r\n        .always(function() {\r\n          self.loading(false);\r\n        });\r\n    }\r\n\r\n    if (\r\n      filters.eventType !== '3' &&\r\n      (filters.fromDate.length > 0 ||\r\n        filters.toDate.length > 0 ||\r\n        decodeURIComponent(filters.city) !== window.language.showAll ||\r\n        filters.eventType !== undefined)\r\n    ) {\r\n      self.showTextAboutFindingNetCourses(true);\r\n    } else {\r\n      self.showTextAboutFindingNetCourses(false);\r\n    }\r\n  };\r\n\r\n  self.currentPage.subscribe(updateList);\r\n  self.currentFilters.subscribe(updateList);\r\n\r\n  //Initialize\r\n  updateList();\r\n};\r\n//Organism\r\nfunction CourseList() {\r\n  this.init();\r\n}\r\n\r\nCourseList.prototype = new Base();\r\n\r\nCourseList.prototype.init = function() {\r\n  $('[data-course-list]').each(function() {\r\n    ko.applyBindings(new listModel($(this).data('course-list')), this);\r\n  });\r\n};\r\n\r\nmodule.exports = CourseList;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\nvar ExternalCourse = function(params) {\r\n  this.params = params;\r\n  // this.$container = params.container;\r\n  this.$el = $(params.el);\r\n  this.id = this.$el.data('history-course-id');\r\n  this.api = this.$el.data('remove-api');\r\n  this.$container = this.$el.parentsUntil('.courses-container.history');\r\n};\r\n\r\nExternalCourse.prototype.removeCourse = function() {\r\n  var self = this;\r\n  APIHelper.delete(this.api + '/' + this.id, undefined, function() {\r\n    self.$container.slideUp();\r\n  });\r\n};\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction CoursesList() {\r\n  this.init();\r\n}\r\n\r\nCoursesList.prototype = new Base();\r\n\r\nCoursesList.prototype.init = function() {\r\n  var $externalCourse = $('[data-external-course]');\r\n  if ($externalCourse.get(0) !== undefined) {\r\n    $externalCourse.each(function(i, course) {\r\n      ko.applyBindings(\r\n        new model({ element: $(course).data('external-course') }),\r\n        $(course).get(0)\r\n      );\r\n    });\r\n  }\r\n};\r\n\r\nmodule.exports = CoursesList;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction InstructorList() {\r\n  this.init();\r\n}\r\n\r\nInstructorList.prototype = new Base();\r\n\r\nInstructorList.prototype.init = function() {\r\n  $('[data-instructors-list]').each(function() {\r\n    ko.applyBindings(new model($(this).data('instructors-list')), this);\r\n  });\r\n};\r\nmodule.exports = InstructorList;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  cart = require('_components/organisms/shopping-cart/shopping-cart-storage'),\r\n  ko = require('knockout');\r\n\r\nfunction Model(courseList) {\r\n  var self = this;\r\n\r\n  self.courses = ko.observableArray(courseList);\r\n  self.courseListArray = ko.utils.arrayMap(courseList, function() {\r\n    return {\r\n      courseIsPurchased: ko.observable(false)\r\n    };\r\n  });\r\n\r\n  self.addToCart = function(index, course, ev) {\r\n    ev.preventDefault();\r\n    self.courseListArray[index].courseIsPurchased(true);\r\n    self.courseId = course.Id;\r\n    cart.addCourseToCart(course);\r\n  };\r\n}\r\n\r\nfunction TinyCourseList() {\r\n  this.init();\r\n}\r\n\r\nTinyCourseList.prototype = new Base();\r\n\r\nTinyCourseList.prototype.init = function() {\r\n  $('[data-tiny-course-list]').each(function() {\r\n    ko.applyBindings(new Model($(this).data('tiny-course-list')), this);\r\n  });\r\n};\r\n\r\nmodule.exports = TinyCourseList;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction BlockList() {\r\n  this.init();\r\n}\r\n\r\nBlockList.prototype = new Base();\r\n\r\nBlockList.prototype.init = function() {\r\n  var $dataReset = $('[data-reset-registration-session]');\r\n  if ($dataReset.get(0) !== undefined) {\r\n    sessionStorage.removeItem('rn-registration');\r\n  }\r\n};\r\n\r\nmodule.exports = BlockList;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction BlockArticle() {\r\n  this.init();\r\n}\r\n\r\nBlockArticle.prototype = new Base();\r\n\r\nBlockArticle.prototype.init = function() {\r\n  var $blockToTruncate = $('.article-block .block-text-container'),\r\n    self = this;\r\n  if ($blockToTruncate.get(0) !== undefined) {\r\n    $(window).on('resize', function() {\r\n      self.calculateHeightForTruncate($blockToTruncate);\r\n    });\r\n    self.calculateHeightForTruncate($blockToTruncate);\r\n  }\r\n};\r\n\r\nBlockArticle.prototype.calculateHeightForTruncate = function(blockToTruncate) {\r\n  // Get the height minus the padding, labels, heading and the readmore link.\r\n  var height = blockToTruncate.outerHeight() - 80 - 45 - 90 - 40;\r\n  // The minimum height is 60.\r\n  if (height < 60) {\r\n    height = 60;\r\n  }\r\n  blockToTruncate.each(function() {\r\n    var $divContent = $(this).find('div.truncate');\r\n    $divContent.css({ 'max-height': height });\r\n    var $h3content = $(this).find('h3.truncate');\r\n    $h3content.css({ 'max-height': height - 20 });\r\n    var $divContent2 = $(this).find('div.truncate-2');\r\n    $divContent2.css({ 'max-height': height });\r\n    var $divContent3 = $(this).find('div.truncate-3');\r\n    $divContent3.css({ 'max-height': height + 30 });\r\n  });\r\n};\r\n\r\nmodule.exports = BlockArticle;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction BlockMagazine() {\r\n  this.init();\r\n}\r\n\r\nvar blockMagazine = {\r\n  init: function() {\r\n    var $blocks = $('.magazine-block .block-content'),\r\n      self = this;\r\n\r\n    if (!$blocks.length) {\r\n      return;\r\n    }\r\n\r\n    $(window).on('load resize', function() {\r\n      self.updateHeights($blocks);\r\n    });\r\n\r\n    self.updateHeights($blocks);\r\n  },\r\n\r\n  updateHeights: function(blocks) {\r\n    var self = this;\r\n\r\n    blocks.each(function() {\r\n      var $divContent = $(this).find('div.truncate');\r\n      // setting max-height tells dotdotdot.js where to truncate\r\n      $divContent.css('max-height', self.getContentMaxHeight(this));\r\n    });\r\n\r\n    // wait for dotdotdot to do its thing\r\n    setTimeout(function() {\r\n      self.matchHeights(blocks);\r\n    }, 100);\r\n  },\r\n  getContentMaxHeight: function(block) {\r\n    var lines = 7;\r\n\r\n    var $heading = $(block).find('h3');\r\n\r\n    var headingLineHeight = this.getLineHeight($heading);\r\n    var textLineHeight = this.getLineHeight($(block).find('p'));\r\n\r\n    var headingLineCount = $heading.outerHeight() / headingLineHeight;\r\n    headingLineCount = Math.ceil(headingLineCount);\r\n\r\n    lines -= headingLineCount;\r\n    return textLineHeight * lines;\r\n  },\r\n  matchHeights: function(blocks) {\r\n    var heightMax = 0;\r\n\r\n    blocks.each(function() {\r\n      var blockHeight = $(this).outerHeight();\r\n      if (blockHeight > heightMax) {\r\n        heightMax = blockHeight;\r\n      }\r\n    });\r\n\r\n    // Temporary hotfix for oversized block heights\r\n    if (heightMax > 250) {\r\n      heightMax = 250;\r\n    }\r\n\r\n    blocks.each(function() {\r\n      $(this).css('min-height', heightMax);\r\n    });\r\n  },\r\n  getLineHeight: function($el) {\r\n    return parseFloat($el.css('lineHeight'));\r\n  }\r\n};\r\n\r\nBlockMagazine.prototype = Object.assign(new Base(), blockMagazine);\r\n\r\nmodule.exports = BlockMagazine;\r\n","var Base = require('_js/base');\r\n\r\nfunction model($carousel) {\r\n  var $inner = $carousel.find('.carousel-vertical-inner');\r\n  var $items = $carousel.find('.sponsor');\r\n  // Get height of an item.\r\n  var itemWidth = $items.outerWidth();\r\n  // The amount of items visible at any given time.\r\n  var amountOfVisibleItems = 4; // parseInt($inner.data('visible-items'), 10) ;\r\n  // Set the max height of the carousel to be equal to the amount of items specified.\r\n  // $carousel.css({ \"max-height\": amountOfVisibleItems*itemHeight + \"px\"});\r\n  // We need to append extra items in order to have a proper transition when moving from the position items.length -> 0.\r\n  for (var i = 0; i < amountOfVisibleItems; i++) {\r\n    $inner.append($($items[i]).clone());\r\n  }\r\n\r\n  $inner.css({\r\n    width: ($items.length + amountOfVisibleItems) * itemWidth + 'px'\r\n  });\r\n\r\n  // The pixel value we should offset the container.\r\n  var position = 0;\r\n  // If transition is enabled.\r\n  var transitionEnabled = true;\r\n  var isAnimating = false;\r\n\r\n  $('.carousel-navigation .carousel-next').on('click', moveNext);\r\n  $('.carousel-navigation .carousel-previous').on('click', movePrevious);\r\n\r\n  var autoRotate = window.setInterval(rotate, 2500);\r\n\r\n  // TODO: Add support for IE 9 and older. Use top instead of transform.\r\n  function rotate() {\r\n    isAnimating = true;\r\n    position += itemWidth;\r\n    if (!transitionEnabled) {\r\n      transitionEnabled = true;\r\n      $inner.css({\r\n        transition:\r\n          '-webkit-transform 0.5s ease-out, ' +\r\n          '-moz-transform 0.5s ease-out, ' +\r\n          '-ms-transform 0.5s ease-out, ' +\r\n          'transform 0.5s ease-out'\r\n      });\r\n    }\r\n\r\n    setNewPosition(position);\r\n    // If we're at the end of the list of items.\r\n    if (position > itemWidth * ($items.length - 1)) {\r\n      // Make sure the animation of the new position is done, then we can move the carousel back to position 0.\r\n      window.setTimeout(function() {\r\n        position = 0;\r\n        transitionEnabled = false;\r\n        $inner.css({ transition: 'none' });\r\n        setNewPosition(position);\r\n      }, 505);\r\n    }\r\n    window.setTimeout(function() {\r\n      isAnimating = false;\r\n    }, 505);\r\n  }\r\n\r\n  function setNewPosition(position) {\r\n    $inner.css({\r\n      '-webkit-transform': 'translate(-' + position + 'px, 0)',\r\n      '-moz-transform': 'translate(-' + position + 'px, 0)',\r\n      '-ms-transform': 'translate(-' + position + 'px, 0)',\r\n      transform: 'translate(-' + position + 'px, 0)'\r\n    });\r\n  }\r\n\r\n  function movePrevious() {\r\n    if (isAnimating) return;\r\n    clearInterval(autoRotate);\r\n    rotate();\r\n  }\r\n  function moveNext() {\r\n    if (isAnimating) return;\r\n    clearInterval(autoRotate);\r\n    position -= itemWidth;\r\n    if (!transitionEnabled) {\r\n      transitionEnabled = true;\r\n      $inner.css({\r\n        transition:\r\n          '-webkit-transform 0.5s ease-out, ' +\r\n          '-moz-transform 0.5s ease-out, ' +\r\n          '-ms-transform 0.5s ease-out, ' +\r\n          'transform 0.5s ease-out'\r\n      });\r\n    }\r\n\r\n    setNewPosition(position);\r\n    // If we're at the end of the list of items.\r\n    if (position < 0) {\r\n      // Make sure the animation of the new position is done, then we can move the carousel back to position 0.\r\n      window.setTimeout(function() {\r\n        position = itemWidth * ($items.length - 1);\r\n        transitionEnabled = false;\r\n        $inner.css({ transition: 'none' });\r\n        setNewPosition(position);\r\n      }, 505);\r\n    }\r\n  }\r\n}\r\n\r\nfunction SponsorsBlock() {\r\n  this.init();\r\n}\r\n\r\nSponsorsBlock.prototype = new Base();\r\nSponsorsBlock.prototype.init = function() {\r\n  var $carousel = $('.carousel-vertical');\r\n  if ($carousel.get(0) !== undefined) {\r\n    new model($carousel);\r\n  }\r\n};\r\nmodule.exports = SponsorsBlock;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  hashHelper = require('_js/utils/hash-helper');\r\n\r\nfunction getYearList() {\r\n  var currentYear = new Date().getFullYear();\r\n  var previousYearsToShow = 4;\r\n\r\n  var years = [];\r\n  for (var x = currentYear; x >= currentYear - previousYearsToShow; x--) {\r\n    years.push(x);\r\n  }\r\n  return years;\r\n}\r\n\r\nvar Model = function(params) {\r\n  var self = this;\r\n  var selects;\r\n\r\n  if (params.categoryList === undefined) throw 'categoryList must be set';\r\n\r\n  var filterTopic = params.filterTopic || 'articleSearchFilterTopic';\r\n  var hasher = new hashHelper(filterTopic);\r\n  self.categoryList = ko.observableArray(params.categoryList);\r\n\r\n  self.currentRelevanceSorting = ko.observable(false);\r\n  self.categoryList = params.categoryList;\r\n  self.yearList = [window.language.showAll].concat(getYearList());\r\n  self.activeQuery = hasher.getListener(hasher.validHashes.searchTerm, '');\r\n  self.year = hasher.getListener(hasher.validHashes.year);\r\n  self.type = hasher.getListener(hasher.validHashes.type);\r\n  self.category = hasher.getListener(hasher.validHashes.category);\r\n  self.size = 5;\r\n  self.tags = params.searchTag;\r\n\r\n  self.query = ko.observable(self.activeQuery());\r\n  self.search = function() {\r\n    var searchQuery = $('#search').val(); //Have to do it this way as jquery ui autocomplete hijacks change event and therefore wont trigger knockoug value\r\n    self.activeQuery(searchQuery);\r\n  };\r\n\r\n  self.resetFilters = function() {\r\n    self.query(undefined);\r\n    self.search();\r\n\r\n    if (selects) {\r\n      // Since we're using the selectize plugin we have to\r\n      // modify these values instead of the observables.\r\n      // By changing these values, however, the observables\r\n      // will be changed.\r\n      // selects[0].selectize.setValue(-1);                      // category\r\n      selects[0].selectize.setValue(window.language.showAll); // year\r\n      selects[1].selectize.setValue(-1); // type\r\n    }\r\n\r\n    ko.postbox.publish('clearArticleFilters');\r\n  };\r\n\r\n  // Update the normal selects to the plugin selects (but this should be called after ko has rendered the vanilla selects).\r\n  self.doSelectize = function() {\r\n    if (selects === undefined) {\r\n      selects = $('.form-select-wrapper-special').selectize();\r\n    }\r\n  };\r\n\r\n  self.currentRelevanceSortingClick = function(relevanceSort) {\r\n    self.currentRelevanceSorting(relevanceSort);\r\n    ko.postbox.publish('currentRelevanceSorting', relevanceSort);\r\n  };\r\n\r\n  self.categoriesChecked = function(checkedCategories) {\r\n    self.category(checkedCategories.toString());\r\n  };\r\n\r\n  $('#search').autocomplete({\r\n    source: function(request, response) {\r\n      $.get(\r\n        '/find_v2/_autocomplete?prefix=' +\r\n          request.term +\r\n          '&size=' +\r\n          self.size +\r\n          '&tags=' +\r\n          self.tags,\r\n        function(data) {\r\n          response(\r\n            $.map(data.hits, function(item) {\r\n              return {\r\n                label: item.query,\r\n                value: item.query\r\n              };\r\n            })\r\n          );\r\n        }\r\n      );\r\n    },\r\n    minLength: 3,\r\n    appendTo: '.search-input-container'\r\n  });\r\n\r\n  $('#search').attr('autocomplete', 'on');\r\n\r\n  $('.search-input-container').on('click', 'ul li', function() {\r\n    self.search();\r\n  });\r\n};\r\n\r\nfunction ArticleSearch() {\r\n  this.init();\r\n}\r\n\r\nArticleSearch.prototype = new Base();\r\n\r\nArticleSearch.prototype.init = function() {\r\n  $('[data-article-search]').each(function() {\r\n    ko.applyBindings(new Model($(this).data('article-search')), this);\r\n  });\r\n};\r\n\r\nmodule.exports = ArticleSearch;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout'),\r\n  enquire = require('enquire.js');\r\n\r\nvar AUTHORIZATION_TYPE = {\r\n  ACCOUNTANT: 1,\r\n  AUDITOR: 2\r\n};\r\n\r\nfunction model() {\r\n  var self = this;\r\n  this.mobileView = ko.observable(false);\r\n  var smallOnlyMQ = 'screen and (max-width: 40em)';\r\n  var small = {\r\n    match: function() {\r\n      self.mobileView(true);\r\n    },\r\n    unmatch: function() {}\r\n  };\r\n  enquire.register(smallOnlyMQ, small);\r\n  var startAuth = window.authorizedAccountant\r\n    ? AUTHORIZATION_TYPE.ACCOUNTANT\r\n    : AUTHORIZATION_TYPE.AUDITOR;\r\n  this.calculatorType = ko\r\n    .observable(startAuth)\r\n    .subscribeTo('authorizationType', true);\r\n  this.showTypes = ko.observable(false);\r\n  if (window.authorizationAccountant && window.authorizationAuditor) {\r\n    this.showTypes(true);\r\n  }\r\n}\r\n\r\nmodel.prototype.changeCalculatorType = function(type) {\r\n  ko.postbox.publish('authorizationType', type);\r\n};\r\n\r\nfunction SimpleCalculatorViewModel() {\r\n  this.init();\r\n}\r\n\r\nSimpleCalculatorViewModel.prototype = new Base();\r\n\r\nSimpleCalculatorViewModel.prototype.init = function() {\r\n  var $simpleCalculator = $('[data-calculator-simple]');\r\n  if ($simpleCalculator.get(0) !== undefined) {\r\n    ko.applyBindings(new model({}), $simpleCalculator.get(0));\r\n  }\r\n};\r\n\r\nmodule.exports = SimpleCalculatorViewModel;\r\n","var MediaQuery = require('./MediaQuery');\nvar Util = require('./Util');\nvar each = Util.each;\nvar isFunction = Util.isFunction;\nvar isArray = Util.isArray;\n\n/**\n * Allows for registration of query handlers.\n * Manages the query handler's state and is responsible for wiring up browser events\n *\n * @constructor\n */\nfunction MediaQueryDispatch () {\n    if(!window.matchMedia) {\n        throw new Error('matchMedia not present, legacy browsers require a polyfill');\n    }\n\n    this.queries = {};\n    this.browserIsIncapable = !window.matchMedia('only all').matches;\n}\n\nMediaQueryDispatch.prototype = {\n\n    constructor : MediaQueryDispatch,\n\n    /**\n     * Registers a handler for the given media query\n     *\n     * @param {string} q the media query\n     * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\n     * @param {function} options.match fired when query matched\n     * @param {function} [options.unmatch] fired when a query is no longer matched\n     * @param {function} [options.setup] fired when handler first triggered\n     * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\n     * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\n     */\n    register : function(q, options, shouldDegrade) {\n        var queries         = this.queries,\n            isUnconditional = shouldDegrade && this.browserIsIncapable;\n\n        if(!queries[q]) {\n            queries[q] = new MediaQuery(q, isUnconditional);\n        }\n\n        //normalise to object in an array\n        if(isFunction(options)) {\n            options = { match : options };\n        }\n        if(!isArray(options)) {\n            options = [options];\n        }\n        each(options, function(handler) {\n            if (isFunction(handler)) {\n                handler = { match : handler };\n            }\n            queries[q].addHandler(handler);\n        });\n\n        return this;\n    },\n\n    /**\n     * unregisters a query and all it's handlers, or a specific handler for a query\n     *\n     * @param {string} q the media query to target\n     * @param {object || function} [handler] specific handler to unregister\n     */\n    unregister : function(q, handler) {\n        var query = this.queries[q];\n\n        if(query) {\n            if(handler) {\n                query.removeHandler(handler);\n            }\n            else {\n                query.clear();\n                delete this.queries[q];\n            }\n        }\n\n        return this;\n    }\n};\n\nmodule.exports = MediaQueryDispatch;\n","var QueryHandler = require('./QueryHandler');\nvar each = require('./Util').each;\n\n/**\n * Represents a single media query, manages it's state and registered handlers for this query\n *\n * @constructor\n * @param {string} query the media query string\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\n */\nfunction MediaQuery(query, isUnconditional) {\n    this.query = query;\n    this.isUnconditional = isUnconditional;\n    this.handlers = [];\n    this.mql = window.matchMedia(query);\n\n    var self = this;\n    this.listener = function(mql) {\n        // Chrome passes an MediaQueryListEvent object, while other browsers pass MediaQueryList directly\n        self.mql = mql.currentTarget || mql;\n        self.assess();\n    };\n    this.mql.addListener(this.listener);\n}\n\nMediaQuery.prototype = {\n\n    constuctor : MediaQuery,\n\n    /**\n     * add a handler for this query, triggering if already active\n     *\n     * @param {object} handler\n     * @param {function} handler.match callback for when query is activated\n     * @param {function} [handler.unmatch] callback for when query is deactivated\n     * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\n     * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\n     */\n    addHandler : function(handler) {\n        var qh = new QueryHandler(handler);\n        this.handlers.push(qh);\n\n        this.matches() && qh.on();\n    },\n\n    /**\n     * removes the given handler from the collection, and calls it's destroy methods\n     *\n     * @param {object || function} handler the handler to remove\n     */\n    removeHandler : function(handler) {\n        var handlers = this.handlers;\n        each(handlers, function(h, i) {\n            if(h.equals(handler)) {\n                h.destroy();\n                return !handlers.splice(i,1); //remove from array and exit each early\n            }\n        });\n    },\n\n    /**\n     * Determine whether the media query should be considered a match\n     *\n     * @return {Boolean} true if media query can be considered a match, false otherwise\n     */\n    matches : function() {\n        return this.mql.matches || this.isUnconditional;\n    },\n\n    /**\n     * Clears all handlers and unbinds events\n     */\n    clear : function() {\n        each(this.handlers, function(handler) {\n            handler.destroy();\n        });\n        this.mql.removeListener(this.listener);\n        this.handlers.length = 0; //clear array\n    },\n\n    /*\n        * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\n        */\n    assess : function() {\n        var action = this.matches() ? 'on' : 'off';\n\n        each(this.handlers, function(handler) {\n            handler[action]();\n        });\n    }\n};\n\nmodule.exports = MediaQuery;\n","/**\n * Delegate to handle a media query being matched and unmatched.\n *\n * @param {object} options\n * @param {function} options.match callback for when the media query is matched\n * @param {function} [options.unmatch] callback for when the media query is unmatched\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\n * @constructor\n */\nfunction QueryHandler(options) {\n    this.options = options;\n    !options.deferSetup && this.setup();\n}\n\nQueryHandler.prototype = {\n\n    constructor : QueryHandler,\n\n    /**\n     * coordinates setup of the handler\n     *\n     * @function\n     */\n    setup : function() {\n        if(this.options.setup) {\n            this.options.setup();\n        }\n        this.initialised = true;\n    },\n\n    /**\n     * coordinates setup and triggering of the handler\n     *\n     * @function\n     */\n    on : function() {\n        !this.initialised && this.setup();\n        this.options.match && this.options.match();\n    },\n\n    /**\n     * coordinates the unmatch event for the handler\n     *\n     * @function\n     */\n    off : function() {\n        this.options.unmatch && this.options.unmatch();\n    },\n\n    /**\n     * called when a handler is to be destroyed.\n     * delegates to the destroy or unmatch callbacks, depending on availability.\n     *\n     * @function\n     */\n    destroy : function() {\n        this.options.destroy ? this.options.destroy() : this.off();\n    },\n\n    /**\n     * determines equality by reference.\n     * if object is supplied compare options, if function, compare match callback\n     *\n     * @function\n     * @param {object || function} [target] the target for comparison\n     */\n    equals : function(target) {\n        return this.options === target || this.options.match === target;\n    }\n\n};\n\nmodule.exports = QueryHandler;\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction CalculatorModule() {\r\n  this.init();\r\n}\r\n\r\nCalculatorModule.prototype = new Base();\r\n\r\nCalculatorModule.prototype.init = function() {\r\n  var $calculator = $('[data-calculator]');\r\n  if ($calculator.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ element: $calculator.data('calculator') }),\r\n      $calculator.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = CalculatorModule;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction FindAccountantsModule() {\r\n  this.init();\r\n}\r\n\r\nFindAccountantsModule.prototype = new Base();\r\n\r\nFindAccountantsModule.prototype.init = function() {\r\n  var $findAccountants = $('[data-find-accountants]');\r\n  if ($findAccountants.get(0) !== undefined) {\r\n    ko.applyBindings(new model({}), $findAccountants.get(0));\r\n  }\r\n};\r\n\r\nmodule.exports = FindAccountantsModule;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction ProfileBureauEmployeeList() {\r\n  this.init();\r\n}\r\n\r\nProfileBureauEmployeeList.prototype = new Base();\r\n\r\nProfileBureauEmployeeList.prototype.init = function() {\r\n  var bureauList = $('[data-bureau-employee-list]');\r\n  if (bureauList.get(0) !== undefined) {\r\n    bureauList.each(function() {\r\n      ko.applyBindings(new model($(this).data('bureau-employee-list')), this);\r\n    });\r\n  }\r\n};\r\n\r\nmodule.exports = ProfileBureauEmployeeList;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nfunction model(params) {\r\n  self.course = params;\r\n  $('.overview-page .accordion-single header').on('click', function() {\r\n    $(this)\r\n      .parent()\r\n      .toggleClass('active');\r\n  });\r\n}\r\n\r\nfunction OverviewPage() {\r\n  this.init();\r\n}\r\n\r\nOverviewPage.prototype = new Base();\r\n\r\nOverviewPage.prototype.init = function() {\r\n  var $overviewPage = $('[data-calendar]');\r\n  if ($overviewPage.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ overview: $overviewPage }),\r\n      $overviewPage.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = OverviewPage;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  APIHelper = require('_js/APIHelper');\r\n\r\n// The different types of list we can search in.\r\nvar SEARCH_TYPES = ['Course', 'Article', 'Product'],\r\n  SEARCH = {\r\n    COURSE: 0,\r\n    ARTICLE: 1,\r\n    PRODUCT: 2\r\n  },\r\n  // We can sort the list by these types.\r\n  SORT_TYPES = ['Date', 'Relevance'],\r\n  SORT = {\r\n    DATE: 0,\r\n    RELEVANCE: 1\r\n  },\r\n  // The maximum amount of items on one page (/result).\r\n  TAKE = 20;\r\n\r\nfunction SearchComponent(params) {\r\n  this.api = params.api;\r\n  this.init(params.search);\r\n}\r\n\r\nSearchComponent.prototype.init = function(dataSearch) {\r\n  this.searchInput = $('.search-input');\r\n\r\n  // ======================================= \\\\\r\n  // ===== Initialize the observables. ===== \\\\\r\n  // The type of component to use based on the filter;\r\n  this.resultBlock = ko.observable('product-block');\r\n  // The amount of items per result type.\r\n  this.articleResults = ko.observable(0);\r\n  this.courseResults = ko.observable(0);\r\n  this.productResults = ko.observable(0);\r\n  // The total amount of results for the current tab.\r\n  this.tabTotalResults = ko.observable(0);\r\n  // The total amount of results for all tabs.\r\n  this.totalResults = ko.computed(function() {\r\n    return this.articleResults() + this.courseResults() + this.productResults();\r\n  }, this);\r\n  // The result (array of items).\r\n  this.results = ko.observableArray();\r\n  // Filter and sort.\r\n  this.currentFilter = ko.observable(SEARCH.COURSE);\r\n  this.currentSort = ko.observable(SORT.DATE);\r\n  // How many items we should skip\r\n  this.skip = ko.observable(0);\r\n  // The value of the search input field.\r\n  this.searchValue = ko.observable(dataSearch);\r\n  // The amount of pages we have of results.\r\n  this.pages = ko.computed(function() {\r\n    var pages = this.tabTotalResults() / TAKE;\r\n    if (pages < 1) {\r\n      return 1;\r\n    } else {\r\n      return Math.ceil(pages);\r\n    }\r\n  }, this);\r\n  // The current page.\r\n  this.currentPage = ko.computed(function() {\r\n    return Math.floor(this.skip() / TAKE + 1);\r\n  }, this);\r\n\r\n  // If we should show the results.\r\n  this.showResults = ko.observable(false);\r\n  // If what the user searched for has no results.\r\n  this.hasNoResults = ko.observable(false);\r\n  // If we're currently loading data from the API.\r\n  this.isLoading = ko.observable(true);\r\n\r\n  // ======================================= \\\\\r\n\r\n  this.searchInput = $('.search-input');\r\n  // Need to listen for <enter> in the search input field.\r\n  this.searchInput.on(\r\n    'keypress',\r\n    function(e) {\r\n      // If the user presses <enter> handle it in the same way as a submit/search click.\r\n      if (e.which == 13 || e.keyCode == 13) {\r\n        // Have to use a timeout or knockout won't be able to update searchValue.\r\n        window.setTimeout(\r\n          function() {\r\n            this.handleSearchInput();\r\n          }.bind(this),\r\n          10\r\n        );\r\n      }\r\n    }.bind(this)\r\n  );\r\n\r\n  var queryString = window.location.hash;\r\n\r\n  // If the hash is defined do a search.\r\n  if (queryString !== undefined && queryString.length > 0) {\r\n    this.getParamsFromHash(queryString);\r\n  }\r\n  // If the hash is not defined, search with what we get from the data attribute (if set).\r\n  else if (dataSearch !== undefined && dataSearch.length > 0) {\r\n    this.search();\r\n  }\r\n};\r\n\r\nSearchComponent.prototype.changePage = function(newPage) {\r\n  this.skip(newPage * TAKE);\r\n  this.search();\r\n};\r\n\r\nSearchComponent.prototype.search = function() {\r\n  var params = this.constructSearchParams();\r\n  // We need something to search for in order to do the API call.\r\n  if (params.q === undefined || params.q.length <= 0) {\r\n    return;\r\n  }\r\n\r\n  var url =\r\n    this.api +\r\n    '?type=' +\r\n    encodeURIComponent(params.type) +\r\n    '&q=' +\r\n    encodeURIComponent(params.q) +\r\n    '&sort=' +\r\n    encodeURIComponent(params.sort) +\r\n    '&skip=' +\r\n    encodeURIComponent(params.skip) +\r\n    '&take=' +\r\n    encodeURIComponent(params.take);\r\n\r\n  this.createHash(params);\r\n\r\n  APIHelper.get(\r\n    url,\r\n    function(response) {\r\n      this.showResults(true);\r\n      this.isLoading(false);\r\n      this.articleResults(response.TotalArticleResults);\r\n      this.courseResults(response.TotalCourseResults);\r\n      this.productResults(response.TotalProductResults);\r\n\r\n      if (this.currentFilter() === SEARCH.COURSE) {\r\n        this.resultBlock('media-tile');\r\n        this.results(response.CourseResults);\r\n        this.tabTotalResults(response.TotalCourseResults);\r\n      } else if (this.currentFilter() === SEARCH.ARTICLE) {\r\n        this.resultBlock('article-block');\r\n        this.results(response.ArticleResults);\r\n        this.tabTotalResults(response.TotalArticleResults);\r\n      } else if (this.currentFilter() === SEARCH.PRODUCT) {\r\n        this.resultBlock('product-block');\r\n        this.results(response.ProductResults);\r\n        this.tabTotalResults(response.TotalProductResults);\r\n      }\r\n\r\n      if (this.results().length <= 0) {\r\n        this.hasNoResults(true);\r\n      } else {\r\n        this.hasNoResults(false);\r\n      }\r\n    }.bind(this)\r\n  );\r\n};\r\n\r\nSearchComponent.prototype.constructSearchParams = function() {\r\n  return {\r\n    type: SEARCH_TYPES[this.currentFilter()],\r\n    q: this.searchValue(),\r\n    sort: SORT_TYPES[this.currentSort()],\r\n    skip: this.skip(),\r\n    take: TAKE\r\n  };\r\n};\r\n\r\nSearchComponent.prototype.createHash = function(params) {\r\n  // q (the search value) is required.\r\n  if (!params || !params.q || params.q.length <= 0) {\r\n    return;\r\n  }\r\n\r\n  var hash = '';\r\n  if (params.q) {\r\n    hash += '#q=' + encodeURIComponent(params.q);\r\n  }\r\n  if (params.type) {\r\n    hash += '&type=' + encodeURIComponent(params.type);\r\n  }\r\n  if (params.sort) {\r\n    hash += '&sort=' + encodeURIComponent(params.sort);\r\n  }\r\n  if (params.skip) {\r\n    hash += '&skip=' + encodeURIComponent(params.skip);\r\n  }\r\n\r\n  window.location.hash = hash;\r\n};\r\n\r\n// Helper function.\r\nSearchComponent.prototype.getSearchParameterFromHash = function(value, params) {\r\n  var param = null;\r\n  for (var i = params.length - 1; i >= 0; i--) {\r\n    if (params[i].indexOf(value) !== -1) {\r\n      param = params[i];\r\n      // Remove the start that defines the variable, we only want the real value.\r\n      // E.g. we don't want \"#q=test\", we only want \"test\".\r\n      param = param.substring(value.length);\r\n      break;\r\n    }\r\n  }\r\n  return param;\r\n};\r\n\r\nSearchComponent.prototype.getParamsFromHash = function(hash) {\r\n  var queryParams = hash.split('&'),\r\n    search = this.getSearchParameterFromHash('#q=', queryParams),\r\n    type = this.getSearchParameterFromHash('type=', queryParams),\r\n    sort = this.getSearchParameterFromHash('sort=', queryParams),\r\n    skip = this.getSearchParameterFromHash('skip=', queryParams);\r\n\r\n  if (type) {\r\n    this.currentFilter(SEARCH_TYPES.indexOf(type));\r\n  }\r\n  if (sort) {\r\n    this.currentSort(SORT_TYPES.indexOf(sort));\r\n  }\r\n  if (skip) {\r\n    this.skip(skip);\r\n  }\r\n  this.searchValue(decodeURIComponent(search));\r\n\r\n  this.search();\r\n};\r\n\r\nSearchComponent.prototype.handleFilterClick = function(data, event) {\r\n  // Get current target if it exists, else fetch srcElement (< IE 8).\r\n  var target = event.currentTarget ? event.currentTarget : event.srcElement;\r\n  // Update the filter.\r\n  this.currentFilter($(target).data('filter-id'));\r\n  this.search();\r\n};\r\nSearchComponent.prototype.handleSortClick = function(data, event) {\r\n  // Get current target if it exists, else fetch srcElement (< IE 8).\r\n  var target = event.currentTarget ? event.currentTarget : event.srcElement;\r\n  // Update the filter.\r\n  this.currentSort($(target).data('sort-id'));\r\n  this.search();\r\n};\r\n\r\nSearchComponent.prototype.handleSearchInput = function() {\r\n  this.search();\r\n};\r\n\r\nfunction SearchPage() {\r\n  this.init();\r\n}\r\n\r\nSearchPage.prototype = new Base();\r\nSearchPage.prototype.init = function() {\r\n  var searchPage = $('[data-search-page]');\r\n  if (searchPage.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new SearchComponent({\r\n        search: searchPage.data('search-page'),\r\n        api: searchPage.data('search-api')\r\n      }),\r\n      searchPage.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = SearchPage;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction LoginReset() {\r\n  this.init();\r\n}\r\n\r\nLoginReset.prototype = new Base();\r\n\r\nLoginReset.prototype.init = function() {\r\n  $('input[name=\"toggle-options\"]').bind('change', function() {\r\n    $('.toggle-content').hide();\r\n    $('#tg-' + $(this).val()).show();\r\n    $('.reset-login-input').val('');\r\n  });\r\n};\r\n\r\nmodule.exports = LoginReset;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  $ = require('jquery');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction AdminToolUserManagement() {\r\n  this.init();\r\n}\r\n\r\nAdminToolUserManagement.prototype = new Base();\r\n\r\nAdminToolUserManagement.prototype.init = function() {\r\n  var $admin = $('[data-admin-tool-user-management]');\r\n  if ($admin.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ element: $admin.data('admin') }),\r\n      $admin.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = AdminToolUserManagement;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery');\r\n\r\nfunction OrganizationEmployeeList() {\r\n  this.init();\r\n}\r\n\r\nOrganizationEmployeeList.prototype = new Base();\r\n\r\nOrganizationEmployeeList.prototype.init = function() {\r\n  var self = this;\r\n  self.$container = $('.organization-employees-container');\r\n  self.setListItemHeight();\r\n\r\n  $(window).on('resize', function() {\r\n    self.setListItemHeight();\r\n  });\r\n};\r\n\r\n// Will loop through the list items to find the tallest list item and\r\n// set all other list items to this height.\r\nOrganizationEmployeeList.prototype.setListItemHeight = function() {\r\n  if ($(window).width() >= 641) {\r\n    //Bigger than mobile\r\n    var $listItems = this.$container.find('.organization-employee');\r\n    var $height = 0;\r\n    $listItems.each(function() {\r\n      if ($(this).height() > $height) {\r\n        $height = Math.ceil($(this).outerHeight());\r\n      }\r\n    });\r\n    $listItems.each(function() {\r\n      $(this).css('height', $height);\r\n    });\r\n  }\r\n};\r\n\r\nmodule.exports = OrganizationEmployeeList;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction RegistrationPage() {\r\n  this.init();\r\n}\r\n\r\nRegistrationPage.prototype = new Base();\r\n\r\nRegistrationPage.prototype.init = function() {\r\n  var $registrationPage = $('[data-registration-page]');\r\n  if ($registrationPage.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model($registrationPage.data('registration-page')),\r\n      $registrationPage.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = RegistrationPage;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout'),\r\n  $ = require('jquery');\r\n\r\nfunction model() {}\r\n\r\nfunction MarketingTeaserTile() {\r\n  this.init();\r\n}\r\nfunction applyBindingsForElement() {\r\n  ko.applyBindings(\r\n    new model({\r\n      element: $(this).data('marketing-teaser-tile')\r\n    }),\r\n    this\r\n  );\r\n}\r\nMarketingTeaserTile.prototype = new Base();\r\n\r\nMarketingTeaserTile.prototype.init = function() {\r\n  var $marketingTeaserTile = $('[data-marketing-teaser-tile]');\r\n  $marketingTeaserTile.each(applyBindingsForElement);\r\n};\r\n\r\nmodule.exports = MarketingTeaserTile;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction MyCoursesPage() {\r\n  this.init();\r\n}\r\n\r\nMyCoursesPage.prototype = new Base();\r\n\r\nMyCoursesPage.prototype.init = function() {\r\n  var $myCoursesPage = $('[data-my-courses-page]');\r\n  if ($myCoursesPage.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ element: $myCoursesPage.data('my-courses-page') }),\r\n      $myCoursesPage.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = MyCoursesPage;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction CourseRegistrationOverview() {\r\n  this.init();\r\n}\r\n\r\nCourseRegistrationOverview.prototype = new Base();\r\n\r\nCourseRegistrationOverview.prototype.init = function() {\r\n  var $courseRegistrationOverview = $('[data-course-registration-overview]');\r\n  if ($courseRegistrationOverview.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({\r\n        element: $courseRegistrationOverview.data(\r\n          'course-registration-overview'\r\n        )\r\n      }),\r\n      $courseRegistrationOverview.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = CourseRegistrationOverview;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction CourseRegistrationParticipants() {\r\n  this.init();\r\n}\r\n\r\nCourseRegistrationParticipants.prototype = new Base();\r\n\r\nCourseRegistrationParticipants.prototype.init = function() {\r\n  var $courseRegistrationParticipants = $(\r\n    '[data-course-registration-participants]'\r\n  );\r\n  if ($courseRegistrationParticipants.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({\r\n        element: $courseRegistrationParticipants.data(\r\n          'course-registration-participants'\r\n        )\r\n      }),\r\n      $courseRegistrationParticipants.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = CourseRegistrationParticipants;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction ReportPage() {\r\n  this.init();\r\n}\r\n\r\nReportPage.prototype = new Base();\r\n\r\nReportPage.prototype.init = function() {\r\n  var $reportPage = $('[data-report-page]');\r\n  if ($reportPage.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ element: $reportPage.data('report-page') }),\r\n      $reportPage.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = ReportPage;\r\n","var Base = require('_js/base'),\r\n  ko = require('knockout');\r\n\r\nvar model = function(params) {\r\n  this.params = params;\r\n};\r\n\r\nfunction SearchBlock() {\r\n  this.init();\r\n}\r\n\r\nSearchBlock.prototype = new Base();\r\n\r\nSearchBlock.prototype.init = function() {\r\n  var $searchBlock = $('[data-search-block]');\r\n  if ($searchBlock.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new model({ element: $searchBlock.data('search-block') }),\r\n      $searchBlock.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = SearchBlock;\r\n","var Base = require('_js/base'),\r\n  $ = require('jquery'),\r\n  ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nvar happeningListModel = function(params) {\r\n  if (params.listEndpoint === undefined)\r\n    throw 'listEndpoint must be set to fetch list';\r\n\r\n  var self = this;\r\n  self.searchBaseUrl = window.location.origin + params.listEndpoint;\r\n  self.loading = ko.observable(false);\r\n  self.happeningList = ko.observableArray([]);\r\n  self.maxItemsForCurrentQuery = ko.observable(0);\r\n  self.pageSize = params.pageSize || 20;\r\n  self.selectedFilters = ko.observable({});\r\n\r\n  var currentRequest;\r\n  var updateList = function() {\r\n    if (currentRequest !== undefined) currentRequest.abort();\r\n\r\n    var urlSearchParams = new URLSearchParams();\r\n    Object.entries(self.selectedFilters()).forEach(function(filter) {\r\n      var key = filter[0];\r\n      var value = filter[1];\r\n      var noFilter = '-1';\r\n      if (value !== noFilter) {\r\n        urlSearchParams.set(key, value);\r\n      }\r\n    });\r\n\r\n    if (params.pageSize) {\r\n      urlSearchParams.set('take', params.pageSize);\r\n    }\r\n\r\n    var searchUrl = self.searchBaseUrl;\r\n    var queryStr = urlSearchParams.toString();\r\n    if (queryStr) {\r\n      searchUrl += '?' + queryStr;\r\n    }\r\n\r\n    self.loading(true);\r\n    currentRequest = $.get(searchUrl)\r\n      .done(function(happenings) {\r\n        currentRequest = undefined;\r\n        self.happeningList(happenings.Items);\r\n        self.maxItemsForCurrentQuery(happenings.TotalItems);\r\n      })\r\n      .always(function() {\r\n        self.loading(false);\r\n      });\r\n  };\r\n\r\n  ko.postbox.subscribe('happeningFiltersChanged', function(filters) {\r\n    self.selectedFilters(filters);\r\n    updateList();\r\n  });\r\n\r\n  //Initialize\r\n  updateList();\r\n};\r\n\r\n//Organism\r\nfunction HappeningList() {\r\n  this.init();\r\n}\r\n\r\nHappeningList.prototype = new Base();\r\n\r\nHappeningList.prototype.init = function() {\r\n  var $happeningList = $('[data-happening-list]');\r\n  if ($happeningList.get(0) !== undefined) {\r\n    ko.applyBindings(\r\n      new happeningListModel($happeningList.data('happening-list')),\r\n      $happeningList.get(0)\r\n    );\r\n  }\r\n};\r\n\r\nmodule.exports = HappeningList;\r\n","var Base = require('_js/base');\r\nvar ko = require('knockout');\r\nrequire('knockout-postbox');\r\n\r\nvar happeningFilterModel = function() {\r\n  var self = this;\r\n  self.selectedFilters = ko.observable({});\r\n\r\n  if ($(window).width() <= 640) {\r\n    $('details').removeAttr('open');\r\n  }\r\n\r\n  var updateAndPublishFilter = function(key, value) {\r\n    var filters = self.selectedFilters();\r\n    filters[key] = value;\r\n    ko.postbox.publish('happeningFiltersChanged', filters);\r\n    self.selectedFilters(filters);\r\n  };\r\n\r\n  var $typeSelect = $('#happening-filter-type-select').selectize({\r\n    onChange: function(value) {\r\n      updateAndPublishFilter('type', value);\r\n    }\r\n  });\r\n\r\n  var $placeSelect = $('#happening-filter-place-select').selectize({\r\n    onChange: function(value) {\r\n      var placeText = '-1';\r\n      if (value !== '-1') {\r\n        placeText = this.getItem(value).text();\r\n      }\r\n      updateAndPublishFilter('place', placeText);\r\n    }\r\n  });\r\n\r\n  self.resetFilters = function() {\r\n    $typeSelect[0].selectize.setValue(-1);\r\n    $placeSelect[0].selectize.setValue(-1);\r\n  };\r\n};\r\n\r\n/// Molecule\r\nfunction HappeningFilters() {\r\n  this.init();\r\n}\r\n\r\nHappeningFilters.prototype = new Base();\r\n\r\nHappeningFilters.prototype.init = function() {\r\n  $('[data-happening-filters]').each(function() {\r\n    ko.applyBindings(\r\n      happeningFilterModel($(this).data('happening-filters')),\r\n      this\r\n    );\r\n  });\r\n};\r\n\r\nmodule.exports = HappeningFilters;\r\n","var Base = require('_js/base');\r\nvar ko = require('knockout');\r\nvar $ = require('jquery');\r\n\r\nvar model = function() {\r\n  $('.cta').on('click', function() {\r\n    window.location = $(this)\r\n      .find('a')\r\n      .attr('href');\r\n    return false;\r\n  });\r\n};\r\n\r\n// Organism\r\nfunction CallToAction() {\r\n  this.init();\r\n}\r\n\r\nCallToAction.prototype = new Base();\r\n\r\nCallToAction.prototype.init = function() {\r\n  $('[data-call-to-action]').each(function() {\r\n    ko.applyBindings(new model(), this);\r\n  });\r\n};\r\n\r\nmodule.exports = CallToAction;\r\n","var $toggler = $('[data-toggle]'),\r\n  $togglerMenu = $('[data-toggle=\"menu-mobile\"]'),\r\n  $mainMenuMob = $('.main-menu-mobile'),\r\n  $searchContainerMob = $('.support-menu-search-field-mobile'),\r\n  $overlay = $('.menu-overlay');\r\n\r\n//toggle mobil menu\r\n$toggler.on('click', function(e) {\r\n  e.preventDefault();\r\n  var $this = $(this),\r\n    toggleVal = $this.data('toggle');\r\n\r\n  if (toggleVal === 'header-menu') {\r\n    $togglerMenu.toggleClass('is-active');\r\n    $mainMenuMob.toggleClass('is-open');\r\n    $searchContainerMob.removeClass('is-open');\r\n    $overlay.removeClass('is-open');\r\n  }\r\n\r\n  if (toggleVal === 'main-search') {\r\n    var $searchContainer = $('.support-menu-search-field'),\r\n      $searchField = $('.support-menu-search');\r\n\r\n    $this.toggleClass('is-active');\r\n    $this.next($searchContainer).toggleClass('is-open');\r\n\r\n    if ($searchContainer.has('is-open')) {\r\n      $searchField.focus();\r\n    }\r\n  }\r\n\r\n  // cart button mobile\r\n  if (toggleVal === 'shopping-cart') {\r\n    $mainMenuMob.removeClass('is-active');\r\n    $togglerMenu.removeClass('is-active');\r\n    $mainMenuMob.removeClass('is-open');\r\n    $searchContainerMob.removeClass('is-open');\r\n    $overlay.removeClass('is-open');\r\n  }\r\n\r\n  // search button mobile\r\n  if (toggleVal === 'main-search-mobile') {\r\n    var $searchFieldMob = $('.support-menu-search-mobile');\r\n\r\n    $togglerMenu.removeClass('is-active');\r\n    $mainMenuMob.removeClass('is-open');\r\n\r\n    $this.toggleClass('is-active');\r\n    $searchContainerMob.toggleClass('is-open');\r\n    $overlay.toggleClass('is-open');\r\n\r\n    if ($searchContainerMob.has('is-open')) {\r\n      $searchFieldMob.focus();\r\n    }\r\n  }\r\n\r\n  // overlay button mobile\r\n  if (toggleVal === 'overlay') {\r\n    if ($overlay.hasClass('is-open')) {\r\n      $overlay.removeClass('is-open');\r\n      $searchContainerMob.removeClass('is-open');\r\n    }\r\n  }\r\n\r\n  // accordion button\r\n  if (toggleVal === 'accordion') {\r\n    $this.toggleClass('is-open');\r\n  }\r\n});\r\n","var ko = require('knockout');\r\nvar enquire = require('enquire.js');\r\n\r\nvar smallOnlyMQ = 'screen and (max-width: 40em)',\r\n  mediumOnlyMQ = 'screen and (min-width: 40.0625em) and (max-width: 63.9375em)',\r\n  largeUpMQ = 'screen and (min-width: 64em)',\r\n  small = {\r\n    match: function() {\r\n      equalHeightTiles(true);\r\n      ko.postbox.publish('resize', 'small');\r\n    },\r\n    unmatch: function() {}\r\n  },\r\n  medium = {\r\n    match: function() {\r\n      equalHeightTiles(true);\r\n      ko.postbox.publish('resize', 'medium');\r\n    },\r\n    unmatch: function() {}\r\n  },\r\n  large = {\r\n    match: function() {\r\n      equalHeightTiles(true);\r\n      ko.postbox.publish('resize', 'large');\r\n    },\r\n    unmatch: function() {}\r\n  };\r\n\r\nenquire.register(smallOnlyMQ, small);\r\nenquire.register(mediumOnlyMQ, medium);\r\nenquire.register(largeUpMQ, large);\r\n\r\nfunction equalHeightTiles() {\r\n  var doEqualHeightTiles = function() {\r\n    var $tile = $('.block-grid-tile > li'),\r\n      $textArea = $tile.find('.media-tile-text-wrapper'),\r\n      tallest = 0;\r\n\r\n    $textArea.css('height', 'auto');\r\n\r\n    $.each($tile, function() {\r\n      var $text = $(this).find('.media-tile-text-wrapper'),\r\n        textHeight = $text.outerHeight();\r\n\r\n      if (textHeight > tallest) {\r\n        tallest = textHeight;\r\n      }\r\n    });\r\n    $textArea.outerHeight(tallest);\r\n  };\r\n\r\n  if ($('.block-grid-tile').length) {\r\n    doEqualHeightTiles();\r\n\r\n    $(window).on('afterresize', function() {\r\n      doEqualHeightTiles();\r\n    });\r\n  }\r\n}\r\n","var APIHelper = require('_js/APIHelper');\r\n\r\n// General error tracking.\r\nwindow.addEventListener('error', function(e) {\r\n  var stack = e.error.stack;\r\n  var message = e.error.toString();\r\n  var location = window.location.href || document.URL;\r\n  if (stack) {\r\n    message += '\\n' + stack;\r\n  }\r\n  APIHelper.post('/api/log/error', {\r\n    message: message,\r\n    context: location,\r\n    parameters: [\r\n      'windowSize: ' + window.innerWidth + 'x' + window.innerHeight,\r\n      'platform: ' + navigator.platform\r\n    ]\r\n  });\r\n});\r\n"],"sourceRoot":""}