{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/script-loader/addScript.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/pickadate/lib/picker.js","webpack:///external \"jQuery\"","webpack:///./Bundles/ko.js","webpack:///./node_modules/knockout/build/output/knockout-latest.js","webpack:///./node_modules/knockout/build/output/knockout-latest.js?a45d","webpack:///./Scripts/script-loader/knockout.validation.min.js","webpack:///./Scripts/script-loader/knockout.validation.min.js?5ab7","webpack:///./Scripts/script-loader/knockout-postbox.min.js","webpack:///./Scripts/script-loader/knockout-postbox.min.js?26c4","webpack:///./Scripts/script-loader/moment.js?9fa6","webpack:///./Scripts/script-loader/moment.js?33e3","webpack:///./Scripts/ko sync \\.js$","webpack:///./Scripts/ko/autocomplete-field.js","webpack:///./Scripts/ko/jquery.magnific-popup.js","webpack:///./Scripts/ko/jquery.magnific-popup.min.js","webpack:///./Scripts/ko/jquery.tooltipster.js","webpack:///./Scripts/ko/ko-binding-modal-1.0.0.js","webpack:///./Scripts/ko/ko-bindings-common-1.0.0.js","webpack:///./Scripts/ko/ko-bindings-dates-1.0.0.js","webpack:///./Scripts/ko/ko-component-loader.js","webpack:///./Scripts/ko/ko-components-common-1.0.0.js","webpack:///./Scripts/ko/ko-extension-validation-1.0.0.js","webpack:///./Scripts/ko/moment-plugins.js","webpack:///./Scripts/ko/postbox-topics-1.0.0.js","webpack:///./node_modules/pickadate/lib/picker.date.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","src","log","error","console","execScript","attachEvent","addEventListener","eval","g","this","Function","e","window","$","$window","$document","document","$html","documentElement","supportsTransitions","body","style","transition","PickerConstructor","ELEMENT","NAME","COMPONENT","OPTIONS","IS_DEFAULT_THEME","STATE","id","Math","abs","random","Date","SETTINGS","extend","defaults","CLASSES","klasses","klass","$ELEMENT","PickerInstance","start","P","constructor","$node","methods","open","type","autofocus","getActiveElement","readOnly","editable","component","$root","picker","aria","$holder","createWrappedComponent","appendTo","on","keydown","handleKeydownEvent","handleFocusToOpenEvent","blur","removeClass","target","focusin","event","focused","stopPropagation","is","preventDefault","focus","$target","targetData","data","targetDisabled","hasClass","navDisabled","disabled","activeElement","href","contains","nav","set","item","highlight","pick","closeOnSelect","close","clear","closeOnClear","formatSubmit","hiddenName","hiddenPrefix","hiddenSuffix","_hidden","addClass","input","val","format","haspopup","expanded","readonly","owns","containerHidden","append","after","container","onStart","render","onRender","stop","onStop","onOpen","onClose","onSet","element","currentStyle","theme","getComputedStyle","trigger","entireComponent","html","find","box","nodes","parentNode","removeChild","remove","removeData","setTimeout","off","dontGiveFocus","active","opened","css","getScrollbarWidth","frame","one","which","keycode","keyCode","keycodeToMove","click","_","go","highlighted","giveFocus","options","thing","thingItem","thingValue","thingIsObject","isPlainObject","thingObject","undefined","muted","formats","toString","method","internal","thingName","thingMethod","push","names","arguments","namesCount","length","_trigger","methodList","map","node","wrap","holder","isKeycodeDelete","test","height","$outer","widthWithoutScroll","offsetWidth","widthWithScroll","attribute","ariaSet","setAttribute","err","prefix","group","groupObject","loopObjectScope","nodesList","counter","min","max","wrapper","isArray","join","lead","number","callback","scope","args","apply","digits","string","isDate","indexOf","isInteger","getDate","ariaAttr","attr","attrVal","Component","fn","action","componentData","each","jQuery","require","keys","forEach","context","global","ko","webpackContext","req","webpackContextResolve","Error","code","resolve","autocompleteField","userSettings","requiredProps","len","prop","plugin","settings","minQueryLength","maxItemsToDisplay","load","response","onLoad","onLoadFail","xhr","getOptionsFromResponse","onChange","updateValueForErrorMessage","wnd","valueField","textField","listBox","list","previousTextValue","isFocused","isFirstBlur","addOption","text","addToTop","option","class","markAllOptionsAsUnhovered","prependTo","getOptions","setValueFromOption","markAllOptionsAsUnselected","markOptionAsSelected","setValueFieldValue","setTextFieldValue","replace","removeAllOptions","getHoveredOption","showList","listBoxHeight","outerHeight","parseInt","hideList","setFirstBlurFlagToTrue","getTextFieldValue","getValueFieldValue","setValuesOnBlur","textFieldValue","textFieldValueLowerCase","toLowerCase","foundInOptions","handleAjaxResponse","textFieldWrapper","buildAllOptions","init","listBoxDiv","ul","ms","timer","currentHoveredOption","index","prevOptionIndex","prevOption","last","markPrevOptionAsHovered","nextOptionIndex","nextOption","first","markNextOptionAsHovered","textValue","trim","abort","ajax","url","dataType","query","done","fail","always","clearTimeout","clickedElem","closest","define","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","MagnificPopup","_isJQ","_window","_mfpOn","f","ev","_getEl","className","raw","el","createElement","innerHTML","appendChild","_mfpTrigger","triggerHandler","st","callbacks","charAt","slice","_getCloseBtn","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","v","pop","probablyMobile","userAgent","popupsCache","isObj","items","toArray","parsed","isOpen","types","mainEl","eq","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","_checkIfClose","contentContainer","preloader","tLoading","toUpperCase","closeBtnInside","template","values","close_replaceWith","alignTop","overflow","overflowY","overflowX","top","scrollTop","position","fixedBgPos","updateSize","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","mainClass","_addClassToMFP","updateItemHTML","add","_lastFocusedEl","content","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","REMOVING_CLASS","detach","empty","_removeClassFromMFP","removeAttr","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","innerWidth","innerHeight","parseEl","markup","newContent","appendContent","preloaded","prepend","tagName","addGroup","eHandler","mfpEl","_openClick","eName","delegate","midClick","ctrlKey","metaKey","altKey","shiftKey","disableOn","isFunction","width","updateStatus","status","stopImmediatePropagation","closeOnContent","closeOnBg","cName","scrollHeight","_parseMarkup","arr","split","EVENT_NS","replaceWith","scrollbarSize","scrollDiv","cssText","proto","registerModule","jqEl","itemOpts","Array","_hiddenClass","_inlinePlaceholder","_lastInlineElement","_putInlineElementsBack","hiddenClass","tNotFound","initInline","CLOSE_EVENT","getInline","inlineSt","inline","parent","inlineElement","_ajaxCur","_removeAjaxCursor","_destroyAjaxRequest","cursor","tError","initAjax","getAjax","opts","success","textStatus","jqXHR","temp","finished","loadError","_imgInterval","hasMozTransform","_getTitle","title","image","titleSrc","verticalFit","initImage","imgSt","resizeImage","img","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","mfpSetInterval","delay","setInterval","naturalWidth","getImage","guard","onLoadComplete","complete","loaded","onLoadError","alt","clone","img_replaceWith","loading","enabled","easing","duration","opener","initZoom","zoomSt","zoom","openTimeout","animatedImg","getElToAnimate","newImg","cssObj","zIndex","left","showMainContent","_allowZoom","_getItemToZoom","_getOffset","isLarge","offset","paddingTop","paddingBottom","obj","offsetHeight","MozTransform","_fixIframeBugs","isShowing","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","substr","lastIndexOf","dataObj","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","next","prev","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","isNaN","a","b","h","q","u","w","x","y","z","A","B","j","k","C","D","E","F","G","H","I","J","K","L","N","M","transform","R","S","T","U","animation","arrow","arrowColor","autoClose","contentAsHTML","contentCloning","debug","minWidth","maxWidth","functionInit","origin","functionBefore","continueTooltip","functionReady","tooltip","functionAfter","hideOnClick","icon","iconCloning","iconDesktop","iconTouch","iconTheme","interactive","interactiveTolerance","multiple","offsetX","offsetY","onlyOne","positionTracker","positionTrackerCallback","hide","restoration","speed","touchDevices","updateAnimation","Plugin","bodyOverflowX","show","checkInterval","Content","$el","$elProxy","elProxyPosition","mouseIsOverProxy","namespace","round","Status","timerHide","timerShow","$tooltip","_init","areEqual","same","self","querySelector","initialTitle","_content_set","deviceHasTouchCapability","insertAfter","deviceIsPureTouch","_show","_showNow","not","nss","ac","finish","extraTime","clearQueue","queue","fadeIn","animationSpeed","pointerEvents","_content_insert","reposition","_interval_set","tolerance","_interval_cancel","_repositionInfo","identical","dimension","_typeof","$d","_update","fadeTo","outerWidth","finishCallbacks","fadeOut","update","arrowReposition","windowWidth","proxy","tooltipWidth","tooltipHeight","areaShape","mapName","mapOffsetLeft","mapOffsetTop","areaMeasurements","areaLeft","areaTop","areaWidth","areaRight","areaBottom","areaSmallestX","areaSmallestY","areaGreatestX","areaGreatestY","arrayAlternate","areaNumber","myLeft","myLeftMirror","myTop","practicalPosition","dontGoOffScreenX","windowLeft","scrollLeft","dontGoOffScreenY","switchTo","switchFrom","leftDifference","topDifference","borderWidth","parseFloat","newWidth","arrowClass","tooltipBorderWidth","tooltipBorderColor","arrowBorder","arrowBorderSize","arrowBorderColor","arrowConstruct","enable","disable","destroy","grep","elementIcon","elementTooltip","methodIsStatic","resp","instances","multipleIsSet","debugIsSet","deviceHasMouse","bindingHandlers","modal2","valueAccessor","headersContainer","closeFunc","model","getTemplate","sourceModel","unwrap","setClose","params","preRender","renderTemplate","getModel","modelBuilder","componentModel","pageTitle","isDisable","showAsPage","cdh","isMobile","mainContent","popupContent","$metaTitle","scrollPosition","titleSubscription","dispose","helper","handleHeadingLevelOnPageStateChange","titlePage","storedTitle","scrollTo","prevTitle","isObservable","subscribe","metaTitleText","metaTitlePagePart","newMetaTitle","tooltipsInit","renderIn","closeEscButton","languageConstant","getConstant","selector","titleText","setPageTitle","popupContainer","firstFocusable","lastFocusable","forceOpen","isSubscribable","newValue","modalComponent","root","concat","getModelProps","applyBindings","actualOptions","popup","originTitle","children","updateContainerHeight","binding","htmlDecode","DisplayedAsPage","initialize","$popupContainer","bindFiles","fileList","observableArray","onlyOneMessage","acceptMimes","fixedSizeMb","totalFixedSizeMb","invalidFileFormatMessage","onLoadCallback","maxFileSizeMb","const","maxUploadSizeMb","maxTotalFileSizeMb","toFixed","totalFileSize","files","fileSize","totalLimitReached","file","reader","FileReader","onload","uploadFile","fileModel","models","result","size","contentType","search","base64","alert","errorMessage","confirm","readAsDataURL","pushAll","valuesToPush","underlyingArray","valueWillMutate","utils","arrayPushAll","valueHasMutated","currency","parseCurrency","beforeDot","afterDot","negative","editableText","observable","unwrapObservable","currencyText","phone","currencySpans","isInterval","SpendingLimitField","AccountPlanYear","enums","planYear","future","balance","Title","masktrim","setTextContent","masktrim12","virtualElements","allowedBindings","mask","count","tomask","substring","maskAccountRoutingNumber","accept","mimes","RegExp","registerEventHandler","control","reset","updateHeight","originalEvent","dataTransfer","dropEffect","printer","printArea","numberInput","$element","maxLength","inArray","focusout","textInput","alphanumericInput","alphanumericUnderscoreInput","numberInputWithValueProcessing","fixedValue","prevValue","phoneDebugBox","currencyInput","allowNegative","jsInput","selectionStart","selectionEnd","noPoint","nativeElement","select","textLen","realType","includes","setSelectionRange","formattedValue","isNumeric","initTooltipster","skipInitialization","$t","preventDuplicate","isTouchDevice","tooltipBtn","tooltipster","keyup","tooltipContent","tooltipTitle","contentSelector","activeIfEnabledSelector","activeIfDisabledSelector","initTooltipsterBase","accountBalanceTotalSpans","accountIntervalType","currentSpendingLimit","AccountType","accountType","parking","transit","TotalBalance","AvailableBalance","FieldsAliases","SpendingLimit","prependText","FormEnterKeyCustom","resetFocus","ifFocusFunc","ifFocus","ifNoFocusFunc","ifNoFocus","communicationsSummaryStickyTable","$tbl","$win","scroll","optionsEnum","allBindings","enumName","enumValues","enumText","extendOptions","filter","sort","optionsText","optionsValue","wrapBindings","has","ifRequired","rules","rule","arrayFirst","visible","condition","requiredAttr","hasAttribute","removeAttribute","slideIn","toggle","slideDown","slideUp","htmlBound","controlsDescendantBindings","viewModel","bindingContext","setHtml","applyBindingsToDescendants","cardNumber","formattedNumber","payform","formatCardNumber","numberValue","validation","makeBindingHandlerValidatable","visibleIfSet","isSet","isCurrentlyVisible","display","dynamicTag","tagHtml","dropdownMenu","initMenuAccesibility","initMenuNavigation","dropdownFilterGroup","openedClassName","itemBtnClassName","getDropdownParent","elem","showDropdown","filterItem","$menuItems","dropdown","removeProperty","mainElemRect","getBoundingClientRect","dropdownRect","right","diff","fixDropdownPosition","hideDropdown","hideAllDropdowns","uuid","s4","floor","guid","idx","uId","buttonId","controlId","isOpened","$dropdown","$menu","translationHandler","allBindingsAccessor","translationOptions","translatedText","translation","getTranslationInTargetLangauge","targetLang","targetlanguage","getResource","datepicker","_$","monthsLabel","January","February","March","April","May","June","July","August","September","October","November","December","weekDaysLabel","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","weekDaysHoverLabel","selectLabels","SelectYear","SelectMonth","NextMonth","PreviousMonth","today","monthsFull","weekdaysShort","weekdaysFull","labelMonthNext","labelMonthPrev","labelMonthSelect","labelYearSelect","datepickerOptions","disabledDatepicker","$data","disableFields","pickadate","labelledBy","label","adaCompliantAriaLabel","openButton","focusingInputWrapper","focusingInput","tabindex","removeIncorrectInputAttrs","siblings","allDays","querySelectorAll","prevButton","nextButton","clearButton","activedescendantElements","yearSelect","monthSelect","calendarMovingHandler","classList","disableCalendarFocusible","makeCalendarAvailable","enableCalendarFocusible","parseDate","date","defaultValue","moment","isMoment","isValid","setMin","newMinDate","newMin","minMoment","years","year","months","month","day","isSame","toDate","selectedDate","valueOf","setMax","newMaxDate","newMax","maxMoment","MutationObserver","mutationsList","observer","mutation","attributeName","observe","attributes","childList","subtree","bindingMinDate","minDate","bindingMaxDate","maxDate","hidePicker","$nextDay","currentDay","buttonCode","$td","$tr","$tbody","currentFieldIndex","currentRowIndex","getNextFieldForMovingCalendar","$prevDay","selectedDay","before","pickerValue","possibleObservable","pickerValueCorrected","correctDate","newMoment","setDate","setHours","setMinutes","setSeconds","setMilliseconds","formatedDate","isWritableObservable","onChangeHandler","openedPicker","focusibleElement","elementClick","domNodeDisposal","addDisposeCallback","removeMillisecondsFromDate","parseServerFormat","dateFormatter","dt","formatter","dateFormat","momentValue","datetime","time","accountPlanDatesRange","PlanStartDate","end","PlanEndDate","showDeadlines","ShowDeadlines","urlComponentLoader","loadTemplate","templateConfig","version","fullUrl","markupString","components","defaultLoader","loadViewModel","viewModelConfig","createViewModel","currentCreateViewModel","componentInfo","widgetInfo","removeWidget","loaders","unshift","register","pageSize","isDataLoading","displayedDataSubscription","makeAvailableItems","currentPageIndex","displayedData","computed","skip","isEmpty","message","messageIfEmpty","showAllVisible","pureComputed","ieBrowser","lastPageIndex","ceil","lastIndex","nextPage","prevPage","showAll","noop","initialized","_this","invalidRequiredFields","invalidRequiredFieldsLabelText","additionMessage","toBeTranslated","requiredMessage","errorsList","$errorTitle","$form","$inputs","truncate","str","$input","labelId","errorId","isVisuallyRequired","endsWith","isRequired","isInvalid","Boolean","_this2","validationActivated","activated","messageFor","cssClass","request","errorData","decodeURIComponent","maintenance","isEmployee","user","touchFiendlyToggle","isTouchScreen","toggleClick","onMouseOver","closeTimer","onMouseOut","closeEvent","htmlWidgetModel","afterRender","renderedNodesArray","customFields","languagePreference","templateExtractor","services","getLabel","selectManager","getUniqueID","setters","setter","selectedTextObservable","disableObservable","_this3","addKeyboardNavToMenu","$activeOption","$fallbackOption","$needleOption","optionsCaption","removeAvailables","selectedItems","dropdownId","selectedText","keyboardHandler","listKeyboardHandler","button","nextIndex","currentKey","getAttribute","itemKeybordHandler","$currentRow","parents","$nextRow","$formElements","link","hintText","registerHtmlWidget","componentName","captchaComponentIncrementalId","componentId","sitekey","widgetId","initializeRecaptcha","recaptchaStatus","awaitLoad","grecaptcha","recaptchaScript","onreadystatechange","readyState","getElementsByTagName","api","exactLength","validator","param","valid","minLength","betweenLength","betweenLengthString","notpattern","regex","match","betWeenDates","startDate","endDate","inputDate","startOf","d1","d2","custom","ssn","normalizedVal","area","serial","greaterThan","lessThanOrEqual","numeric","alphanumeric","usernamevalidation","dependentName","specialAddress","notPostAddress","extendedSymbolSet","alphabetic","emptyValidation","phoneNumber","validate","isEmptyVal","userName","emails","otherVal","specificAlphanumeric","zipCode","distance","cardType","parseCardType","validateCardNumber","insertValidationMessage","span","getConfigOptions","errorMessageClass","ariaDescribedby","insertBefore","required","registerExtenders","recreateValidation","errors","createValidationIfNeeded","deep","scrollToError","elementToScroll","scroller","parentElement","offsetTop","scrollToErrorPopup","validationValid","hasErrors","getErrors","activate","showAllMessages","deactivate","forceInitErrors","formatWCP","topics","accounts","yearFilter","listFilter","listFilterOptions","alerts","countValue","countRefresh","claims","requiredAttentionItems","opportunities","notifications","Picker","DatePicker","collectionDisabled","calendar","elementValue","elementDataValue","valueString","formatString","isRTL","now","view","shift","40","38","39","37","timeChange","highlightedObject","targetDate","interval","selectMonth","selectYear","includeToday","buttonToday","calendarItem","isInfiniteValue","Infinity","normalize","getFullYear","getMonth","getDay","getTime","createRange","from","to","createDate","withinRange","range","dateUnit","overlapRanges","two","rel","navigate","targetDateObject","targetYear","targetMonth","isTargetArray","isTargetObject","viewsetObject","measure","parse","viewset","dateObject","hasEnabledBeforeTarget","hasEnabledAfterTarget","reachedMin","reachedMax","originalDateObject","isFlippedBase","minLimitObject","maxLimitObject","hasEnabledWeekdays","dateTime","dateToVerify","isDisabledMatch","dateToDisable","firstDay","inverted","parsingObject","formattingLabel","formatLength","yyyy","yy","mm","dd","getWordLengthFromCollection","collection","word","getFirstWordLength","ddd","dddd","mmm","monthsShort","mmmm","itemObject","isDateExact","isDateOverlap","flipEnable","datesToDisable","disabledItems","unitToDisable","matchFound","datesToEnable","disabledItemsCount","unitToEnable","disabledUnit","isExactRange","fullCollection","nowObject","selectedObject","disabledCollection","tableHead","showWeekdaysFull","DAYS_IN_WEEK","weekdays","createMonthNav","role","controls","createMonthLabel","monthsCollection","showMonthsShort","selectMonths","loopedMonth","createYearLabel","focusedYear","numberYears","selectYears","minYear","maxYear","lowestYear","highestYear","availableYears","neededYears","loopedYear","header","WEEKS_IN_CALENDAR","rowCounter","shiftDateBy","isSelected","isHighlighted","isDisabled","formattedDate","infocus","outfocus","selected","activedescendant","table","buttonClear","buttonClose","footer","navPrev","navNext"],"mappings":"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","file":"ko.bundle.20250313.1.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 = 681);\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\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","/*!\n * pickadate.js v3.5.5, 2015/02/08\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * Licensed under MIT\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( 'picker', ['jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('jquery') )\n\n    // Browser globals.\n    else this.Picker = factory( jQuery )\n\n}(function( $ ) {\n\nvar $window = $( window )\nvar $document = $( document )\nvar $html = $( document.documentElement )\nvar supportsTransitions = document.body.style.transition != null\n\n\n/**\n * The picker constructor that creates a blank picker.\n */\nfunction PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {\n\n    // If there’s no element, return the picker constructor.\n    if ( !ELEMENT ) return PickerConstructor\n\n\n    var\n        IS_DEFAULT_THEME = false,\n\n\n        // The state of the picker.\n        STATE = {\n            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) )\n        },\n\n\n        // Merge the defaults and options passed.\n        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},\n\n\n        // Merge the default classes with the settings classes.\n        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),\n\n\n        // The element node wrapper into a jQuery object.\n        $ELEMENT = $( ELEMENT ),\n\n\n        // Pseudo picker constructor.\n        PickerInstance = function() {\n            return this.start()\n        },\n\n\n        // The picker prototype.\n        P = PickerInstance.prototype = {\n\n            constructor: PickerInstance,\n\n            $node: $ELEMENT,\n\n\n            /**\n             * Initialize everything\n             */\n            start: function() {\n\n                // If it’s already started, do nothing.\n                if ( STATE && STATE.start ) return P\n\n\n                // Update the picker states.\n                STATE.methods = {}\n                STATE.start = true\n                STATE.open = false\n                STATE.type = ELEMENT.type\n\n\n                // Confirm focus state, convert into text input to remove UA stylings,\n                // and set as readonly to prevent keyboard popup.\n                ELEMENT.autofocus = ELEMENT == getActiveElement()\n                ELEMENT.readOnly = !SETTINGS.editable\n                ELEMENT.id = ELEMENT.id || STATE.id\n                if ( ELEMENT.type != 'text' ) {\n                    ELEMENT.type = 'text'\n                }\n\n\n                // Create a new picker component with the settings.\n                P.component = new COMPONENT(P, SETTINGS)\n\n\n                // Create the picker root and then prepare it.\n                P.$root = $( '<div class=\"' + CLASSES.picker + '\" id=\"' + ELEMENT.id + '_root\" />' )\n                prepareElementRoot()\n\n\n                // Create the picker holder and then prepare it.\n                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )\n                prepareElementHolder()\n\n\n                // If there’s a format for the hidden input element, create the element.\n                if ( SETTINGS.formatSubmit ) {\n                    prepareElementHidden()\n                }\n\n\n                // Prepare the input element.\n                prepareElement()\n\n\n                // Insert the hidden input as specified in the settings.\n                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )\n                else $ELEMENT.after( P._hidden )\n\n\n                // Insert the root as specified in the settings.\n                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )\n                else $ELEMENT.after( P.$root )\n\n\n                // Bind the default component and settings events.\n                P.on({\n                    start: P.component.onStart,\n                    render: P.component.onRender,\n                    stop: P.component.onStop,\n                    open: P.component.onOpen,\n                    close: P.component.onClose,\n                    set: P.component.onSet\n                }).on({\n                    start: SETTINGS.onStart,\n                    render: SETTINGS.onRender,\n                    stop: SETTINGS.onStop,\n                    open: SETTINGS.onOpen,\n                    close: SETTINGS.onClose,\n                    set: SETTINGS.onSet\n                })\n\n\n                // Once we’re all set, check the theme in use.\n                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )\n\n\n                // If the element has autofocus, open the picker.\n                if ( ELEMENT.autofocus ) {\n                    P.open()\n                }\n\n\n                // Trigger queued the “start” and “render” events.\n                return P.trigger( 'start' ).trigger( 'render' )\n            }, //start\n\n\n            /**\n             * Render a new picker\n             */\n            render: function( entireComponent ) {\n\n                // Insert a new component holder in the root or box.\n                if ( entireComponent ) {\n                    P.$holder = createWrappedComponent()\n                    P.$root.html( P.$holder )\n                }\n                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )\n\n                // Trigger the queued “render” events.\n                return P.trigger( 'render' )\n            }, //render\n\n\n            /**\n             * Destroy everything\n             */\n            stop: function() {\n\n                // If it’s already stopped, do nothing.\n                if ( !STATE.start ) return P\n\n                // Then close the picker.\n                P.close()\n\n                // Remove the hidden field.\n                if ( P._hidden ) {\n                    P._hidden.parentNode.removeChild( P._hidden )\n                }\n\n                // Remove the root.\n                P.$root.remove()\n\n                // Remove the input class, remove the stored data, and unbind\n                // the events (after a tick for IE - see `P.close`).\n                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )\n                setTimeout( function() {\n                    $ELEMENT.off( '.' + STATE.id )\n                }, 0)\n\n                // Restore the element state\n                ELEMENT.type = STATE.type\n                ELEMENT.readOnly = false\n\n                // Trigger the queued “stop” events.\n                P.trigger( 'stop' )\n\n                // Reset the picker states.\n                STATE.methods = {}\n                STATE.start = false\n\n                return P\n            }, //stop\n\n\n            /**\n             * Open up the picker\n             */\n            open: function( dontGiveFocus ) {\n\n                // If it’s already open, do nothing.\n                if ( STATE.open ) return P\n\n                // Add the “active” class.\n                $ELEMENT.addClass( CLASSES.active )\n                aria( ELEMENT, 'expanded', true )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So add the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Add the “opened” class to the picker root.\n                    P.$root.addClass( CLASSES.opened )\n                    aria( P.$root[0], 'hidden', false )\n\n                }, 0 )\n\n                // If we have to give focus, bind the element and doc events.\n                if ( dontGiveFocus !== false ) {\n\n                    // Set it as open.\n                    STATE.open = true\n\n                    // Prevent the page from scrolling.\n                    if ( IS_DEFAULT_THEME ) {\n                        $html.\n                            css( 'overflow', 'hidden' ).\n                            css( 'padding-right', '+=' + getScrollbarWidth() )\n                    }\n\n                    // Pass focus to the root element’s jQuery object.\n                    focusPickerOnceOpened()\n\n                    // Bind the document events.\n                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {\n\n                        var target = event.target\n\n                        // If the target of the event is not the element, close the picker picker.\n                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.\n                        //   Also, for Firefox, a click on an `option` element bubbles up directly\n                        //   to the doc. So make sure the target wasn't the doc.\n                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,\n                        //   which causes the picker to unexpectedly close when right-clicking it. So make\n                        //   sure the event wasn’t a right-click.\n                        if ( target != ELEMENT && target != document && event.which != 3 ) {\n\n                            // If the target was the holder that covers the screen,\n                            // keep the element focused to maintain tabindex.\n                            P.close( target === P.$holder[0] )\n                        }\n\n                    }).on( 'keydown.' + STATE.id, function( event ) {\n\n                        var\n                            // Get the keycode.\n                            keycode = event.keyCode,\n\n                            // Translate that to a selection change.\n                            keycodeToMove = P.component.key[ keycode ],\n\n                            // Grab the target.\n                            target = event.target\n\n\n                        // On escape, close the picker and give focus.\n                        if ( keycode == 27 ) {\n                            P.close( true )\n                        }\n\n\n                        // Check if there is a key movement or “enter” keypress on the element.\n                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {\n\n                            // Prevent the default action to stop page movement.\n                            event.preventDefault()\n\n                            // Trigger the key movement action.\n                            if ( keycodeToMove ) {\n                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )\n                            }\n\n                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.\n                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {\n                                P.set( 'select', P.component.item.highlight )\n                                if ( SETTINGS.closeOnSelect ) {\n                                    P.close( true )\n                                }\n                            }\n                        }\n\n\n                        // If the target is within the root and “enter” is pressed,\n                        // prevent the default action and trigger a click on the target instead.\n                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {\n                            event.preventDefault()\n                            target.click()\n                        }\n                    })\n                }\n\n                // Trigger the queued “open” events.\n                return P.trigger( 'open' )\n            }, //open\n\n\n            /**\n             * Close the picker\n             */\n            close: function( giveFocus ) {\n\n                // If we need to give focus, do it before changing states.\n                if ( giveFocus ) {\n                    if ( SETTINGS.editable ) {\n                        ELEMENT.focus()\n                    }\n                    else {\n                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|\n                        // The focus is triggered *after* the close has completed - causing it\n                        // to open again. So unbind and rebind the event at the next tick.\n                        P.$holder.off( 'focus.toOpen' ).focus()\n                        setTimeout( function() {\n                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )\n                        }, 0 )\n                    }\n                }\n\n                // Remove the “active” class.\n                $ELEMENT.removeClass( CLASSES.active )\n                aria( ELEMENT, 'expanded', false )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So remove the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Remove the “opened” and “focused” class from the picker root.\n                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )\n                    aria( P.$root[0], 'hidden', true )\n\n                }, 0 )\n\n                // If it’s already closed, do nothing more.\n                if ( !STATE.open ) return P\n\n                // Set it as closed.\n                STATE.open = false\n\n                // Allow the page to scroll.\n                if ( IS_DEFAULT_THEME ) {\n                    $html.\n                        css( 'overflow', '' ).\n                        css( 'padding-right', '-=' + getScrollbarWidth() )\n                }\n\n                // Unbind the document events.\n                $document.off( '.' + STATE.id )\n\n                // Trigger the queued “close” events.\n                return P.trigger( 'close' )\n            }, //close\n\n\n            /**\n             * Clear the values\n             */\n            clear: function( options ) {\n                return P.set( 'clear', null, options )\n            }, //clear\n\n\n            /**\n             * Set something\n             */\n            set: function( thing, value, options ) {\n\n                var thingItem, thingValue,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                // Make sure we have usable options.\n                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = value\n                    }\n\n                    // Go through the things of items to set.\n                    for ( thingItem in thingObject ) {\n\n                        // Grab the value of the thing.\n                        thingValue = thingObject[ thingItem ]\n\n                        // First, if the item exists and there’s a value, set it.\n                        if ( thingItem in P.component.item ) {\n                            if ( thingValue === undefined ) thingValue = null\n                            P.component.set( thingItem, thingValue, options )\n                        }\n\n                        // Then, check to update the element value and broadcast a change.\n                        if ( thingItem == 'select' || thingItem == 'clear' ) {\n                            $ELEMENT.\n                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).\n                                trigger( 'change' )\n                        }\n                    }\n\n                    // Render a new picker.\n                    P.render()\n                }\n\n                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.\n                return options.muted ? P : P.trigger( 'set', thingObject )\n            }, //set\n\n\n            /**\n             * Get something\n             */\n            get: function( thing, format ) {\n\n                // Make sure there’s something to get.\n                thing = thing || 'value'\n\n                // If a picker state exists, return that.\n                if ( STATE[ thing ] != null ) {\n                    return STATE[ thing ]\n                }\n\n                // Return the submission value, if that.\n                if ( thing == 'valueSubmit' ) {\n                    if ( P._hidden ) {\n                        return P._hidden.value\n                    }\n                    thing = 'value'\n                }\n\n                // Return the value, if that.\n                if ( thing == 'value' ) {\n                    return ELEMENT.value\n                }\n\n                // Check if a component item exists, return that.\n                if ( thing in P.component.item ) {\n                    if ( typeof format == 'string' ) {\n                        var thingValue = P.component.get( thing )\n                        return thingValue ?\n                            PickerConstructor._.trigger(\n                                P.component.formats.toString,\n                                P.component,\n                                [ format, thingValue ]\n                            ) : ''\n                    }\n                    return P.component.get( thing )\n                }\n            }, //get\n\n\n\n            /**\n             * Bind events on the things.\n             */\n            on: function( thing, method, internal ) {\n\n                var thingName, thingMethod,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = method\n                    }\n\n                    // Go through the things to bind to.\n                    for ( thingName in thingObject ) {\n\n                        // Grab the method of the thing.\n                        thingMethod = thingObject[ thingName ]\n\n                        // If it was an internal binding, prefix it.\n                        if ( internal ) {\n                            thingName = '_' + thingName\n                        }\n\n                        // Make sure the thing methods collection exists.\n                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []\n\n                        // Add the method to the relative method collection.\n                        STATE.methods[ thingName ].push( thingMethod )\n                    }\n                }\n\n                return P\n            }, //on\n\n\n\n            /**\n             * Unbind events on the things.\n             */\n            off: function() {\n                var i, thingName,\n                    names = arguments;\n                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {\n                    thingName = names[i]\n                    if ( thingName in STATE.methods ) {\n                        delete STATE.methods[thingName]\n                    }\n                }\n                return P\n            },\n\n\n            /**\n             * Fire off method events.\n             */\n            trigger: function( name, data ) {\n                var _trigger = function( name ) {\n                    var methodList = STATE.methods[ name ]\n                    if ( methodList ) {\n                        methodList.map( function( method ) {\n                            PickerConstructor._.trigger( method, P, [ data ] )\n                        })\n                    }\n                }\n                _trigger( '_' + name )\n                _trigger( name )\n                return P\n            } //trigger\n        } //PickerInstance.prototype\n\n\n    /**\n     * Wrap the picker holder components together.\n     */\n    function createWrappedComponent() {\n\n        // Create a picker wrapper holder\n        return PickerConstructor._.node( 'div',\n\n            // Create a picker wrapper node\n            PickerConstructor._.node( 'div',\n\n                // Create a picker frame\n                PickerConstructor._.node( 'div',\n\n                    // Create a picker box node\n                    PickerConstructor._.node( 'div',\n\n                        // Create the components nodes.\n                        P.component.nodes( STATE.open ),\n\n                        // The picker box class\n                        CLASSES.box\n                    ),\n\n                    // Picker wrap class\n                    CLASSES.wrap\n                ),\n\n                // Picker frame class\n                CLASSES.frame\n            ),\n\n            // Picker holder class\n            CLASSES.holder,\n\n            'tabindex=\"-1\"'\n        ) //endreturn\n    } //createWrappedComponent\n\n\n\n    /**\n     * Prepare the input element with all bindings.\n     */\n    function prepareElement() {\n\n        $ELEMENT.\n\n            // Store the picker data by component name.\n            data(NAME, P).\n\n            // Add the “input” class name.\n            addClass(CLASSES.input).\n\n            // If there’s a `data-value`, update the value of the element.\n            val( $ELEMENT.data('value') ?\n                P.get('select', SETTINGS.format) :\n                ELEMENT.value\n            )\n\n\n        // Only bind keydown events if the element isn’t editable.\n        if ( !SETTINGS.editable ) {\n\n            $ELEMENT.\n\n                // On focus/click, open the picker.\n                on( 'focus.' + STATE.id + ' click.' + STATE.id, function(event) {\n                    event.preventDefault()\n                    P.open()\n                }).\n\n                // Handle keyboard event based on the picker being opened or not.\n                on( 'keydown.' + STATE.id, handleKeydownEvent )\n        }\n\n\n        // Update the aria attributes.\n        aria(ELEMENT, {\n            haspopup: true,\n            expanded: false,\n            readonly: false,\n            owns: ELEMENT.id + '_root'\n        })\n    }\n\n\n    /**\n     * Prepare the root picker element with all bindings.\n     */\n    function prepareElementRoot() {\n        aria( P.$root[0], 'hidden', true )\n    }\n\n\n     /**\n      * Prepare the holder picker element with all bindings.\n      */\n    function prepareElementHolder() {\n\n        P.$holder.\n\n            on({\n\n                // For iOS8.\n                keydown: handleKeydownEvent,\n\n                'focus.toOpen': handleFocusToOpenEvent,\n\n                blur: function() {\n                    // Remove the “target” class.\n                    $ELEMENT.removeClass( CLASSES.target )\n                },\n\n                // When something within the holder is focused, stop from bubbling\n                // to the doc and remove the “focused” state from the root.\n                focusin: function( event ) {\n                    P.$root.removeClass( CLASSES.focused )\n                    event.stopPropagation()\n                },\n\n                // When something within the holder is clicked, stop it\n                // from bubbling to the doc.\n                'mousedown click': function( event ) {\n\n                    var target = event.target\n\n                    // Make sure the target isn’t the root holder so it can bubble up.\n                    if ( target != P.$holder[0] ) {\n\n                        event.stopPropagation()\n\n                        // * For mousedown events, cancel the default action in order to\n                        //   prevent cases where focus is shifted onto external elements\n                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).\n                        //   Also, for Firefox, don’t prevent action on the `option` element.\n                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {\n\n                            event.preventDefault()\n\n                            // Re-focus onto the holder so that users can click away\n                            // from elements focused within the picker.\n                            P.$holder[0].focus()\n                        }\n                    }\n                }\n\n            }).\n\n            // If there’s a click on an actionable element, carry out the actions.\n            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {\n\n                var $target = $( this ),\n                    targetData = $target.data(),\n                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),\n\n                    // * For IE, non-focusable elements can be active elements as well\n                    //   (http://stackoverflow.com/a/2684561).\n                    activeElement = getActiveElement()\n                    activeElement = activeElement && ( activeElement.type || activeElement.href )\n\n                // If it’s disabled or nothing inside is actively focused, re-focus the element.\n                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {\n                    P.$holder[0].focus()\n                }\n\n                // If something is superficially changed, update the `highlight` based on the `nav`.\n                if ( !targetDisabled && targetData.nav ) {\n                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )\n                }\n\n                // If something is picked, set `select` then close with focus.\n                else if ( !targetDisabled && 'pick' in targetData ) {\n                    P.set( 'select', targetData.pick )\n                    if ( SETTINGS.closeOnSelect ) {\n                        P.close( true )\n                    }\n                }\n\n                // If a “clear” button is pressed, empty the values and close with focus.\n                else if ( targetData.clear ) {\n                    P.clear()\n                    if ( SETTINGS.closeOnClear ) {\n                        P.close( true )\n                    }\n                }\n\n                else if ( targetData.close ) {\n                    P.close( true )\n                }\n\n            }) //P.$holder\n\n    }\n\n\n     /**\n      * Prepare the hidden input element along with all bindings.\n      */\n    function prepareElementHidden() {\n\n        var name\n\n        if ( SETTINGS.hiddenName === true ) {\n            name = ELEMENT.name\n            ELEMENT.name = ''\n        }\n        else {\n            name = [\n                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',\n                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'\n            ]\n            name = name[0] + ELEMENT.name + name[1]\n        }\n\n        P._hidden = $(\n            '<input ' +\n            'type=hidden ' +\n\n            // Create the name using the original input’s with a prefix and suffix.\n            'name=\"' + name + '\"' +\n\n            // If the element has a value, set the hidden value as well.\n            (\n                $ELEMENT.data('value') || ELEMENT.value ?\n                    ' value=\"' + P.get('select', SETTINGS.formatSubmit) + '\"' :\n                    ''\n            ) +\n            '>'\n        )[0]\n\n        $ELEMENT.\n\n            // If the value changes, update the hidden input with the correct format.\n            on('change.' + STATE.id, function() {\n                P._hidden.value = ELEMENT.value ?\n                    P.get('select', SETTINGS.formatSubmit) :\n                    ''\n            })\n    }\n\n\n    // Wait for transitions to end before focusing the holder. Otherwise, while\n    // using the `container` option, the view jumps to the container.\n    function focusPickerOnceOpened() {\n\n        if (IS_DEFAULT_THEME && supportsTransitions) {\n            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {\n                P.$holder[0].focus()\n            })\n        }\n        else {\n            P.$holder[0].focus()\n        }\n    }\n\n\n    function handleFocusToOpenEvent(event) {\n\n        // Stop the event from propagating to the doc.\n        event.stopPropagation()\n\n        // Add the “target” class.\n        $ELEMENT.addClass( CLASSES.target )\n\n        // Add the “focused” class to the root.\n        P.$root.addClass( CLASSES.focused )\n\n        // And then finally open the picker.\n        P.open()\n    }\n\n\n    // For iOS8.\n    function handleKeydownEvent( event ) {\n\n        var keycode = event.keyCode,\n\n            // Check if one of the delete keys was pressed.\n            isKeycodeDelete = /^(8|46)$/.test(keycode)\n\n        // For some reason IE clears the input value on “escape”.\n        if ( keycode == 27 ) {\n            P.close( true )\n            return false\n        }\n\n        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.\n        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {\n\n            // Prevent it from moving the page and bubbling to doc.\n            event.preventDefault()\n            event.stopPropagation()\n\n            // If `delete` was pressed, clear the values and close the picker.\n            // Otherwise open the picker.\n            if ( isKeycodeDelete ) { P.clear().close() }\n            else { P.open() }\n        }\n    }\n\n\n    // Return a new picker instance.\n    return new PickerInstance()\n} //PickerConstructor\n\n\n\n/**\n * The default classes and prefix to use for the HTML classes.\n */\nPickerConstructor.klasses = function( prefix ) {\n    prefix = prefix || 'picker'\n    return {\n\n        picker: prefix,\n        opened: prefix + '--opened',\n        focused: prefix + '--focused',\n\n        input: prefix + '__input',\n        active: prefix + '__input--active',\n        target: prefix + '__input--target',\n\n        holder: prefix + '__holder',\n\n        frame: prefix + '__frame',\n        wrap: prefix + '__wrap',\n\n        box: prefix + '__box'\n    }\n} //PickerConstructor.klasses\n\n\n\n/**\n * Check if the default theme is being used.\n */\nfunction isUsingDefaultTheme( element ) {\n\n    var theme,\n        prop = 'position'\n\n    // For IE.\n    if ( element.currentStyle ) {\n        theme = element.currentStyle[prop]\n    }\n\n    // For normal browsers.\n    else if ( window.getComputedStyle ) {\n        theme = getComputedStyle( element )[prop]\n    }\n\n    return theme == 'fixed'\n}\n\n\n\n/**\n * Get the width of the browser’s scrollbar.\n * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js\n */\nfunction getScrollbarWidth() {\n\n    if ( $html.height() <= $window.height() ) {\n        return 0\n    }\n\n    var $outer = $( '<div style=\"visibility:hidden;width:100px\" />' ).\n        appendTo( 'body' )\n\n    // Get the width without scrollbars.\n    var widthWithoutScroll = $outer[0].offsetWidth\n\n    // Force adding scrollbars.\n    $outer.css( 'overflow', 'scroll' )\n\n    // Add the inner div.\n    var $inner = $( '<div style=\"width:100%\" />' ).appendTo( $outer )\n\n    // Get the width with scrollbars.\n    var widthWithScroll = $inner[0].offsetWidth\n\n    // Remove the divs.\n    $outer.remove()\n\n    // Return the difference between the widths.\n    return widthWithoutScroll - widthWithScroll\n}\n\n\n\n/**\n * PickerConstructor helper methods.\n */\nPickerConstructor._ = {\n\n    /**\n     * Create a group of nodes. Expects:\n     * `\n        {\n            min:    {Integer},\n            max:    {Integer},\n            i:      {Integer},\n            node:   {String},\n            item:   {Function}\n        }\n     * `\n     */\n    group: function( groupObject ) {\n\n        var\n            // Scope for the looped object\n            loopObjectScope,\n\n            // Create the nodes list\n            nodesList = '',\n\n            // The counter starts from the `min`\n            counter = PickerConstructor._.trigger( groupObject.min, groupObject )\n\n\n        // Loop from the `min` to `max`, incrementing by `i`\n        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {\n\n            // Trigger the `item` function within scope of the object\n            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )\n\n            // Splice the subgroup and create nodes out of the sub nodes\n            nodesList += PickerConstructor._.node(\n                groupObject.node,\n                loopObjectScope[ 0 ],   // the node\n                loopObjectScope[ 1 ],   // the classes\n                loopObjectScope[ 2 ]    // the attributes\n            )\n        }\n\n        // Return the list of nodes\n        return nodesList\n    }, //group\n\n\n    /**\n     * Create a dom node string\n     */\n    node: function( wrapper, item, klass, attribute ) {\n\n        // If the item is false-y, just return an empty string\n        if ( !item ) return ''\n\n        // If the item is an array, do a join\n        item = $.isArray( item ) ? item.join( '' ) : item\n\n        // Check for the class\n        klass = klass ? ' class=\"' + klass + '\"' : ''\n\n        // Check for any attributes\n        attribute = attribute ? ' ' + attribute : ''\n\n        // Return the wrapped item\n        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'\n    }, //node\n\n\n    /**\n     * Lead numbers below 10 with a zero.\n     */\n    lead: function( number ) {\n        return ( number < 10 ? '0': '' ) + number\n    },\n\n\n    /**\n     * Trigger a function otherwise return the value.\n     */\n    trigger: function( callback, scope, args ) {\n        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback\n    },\n\n\n    /**\n     * If the second character is a digit, length is 2 otherwise 1.\n     */\n    digits: function( string ) {\n        return ( /\\d/ ).test( string[ 1 ] ) ? 2 : 1\n    },\n\n\n    /**\n     * Tell if something is a date object.\n     */\n    isDate: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )\n    },\n\n\n    /**\n     * Tell if something is an integer.\n     */\n    isInteger: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\n    },\n\n\n    /**\n     * Create ARIA attribute strings.\n     */\n    ariaAttr: ariaAttr\n} //PickerConstructor._\n\n\n\n/**\n * Extend the picker with a component and defaults.\n */\nPickerConstructor.extend = function( name, Component ) {\n\n    // Extend jQuery.\n    $.fn[ name ] = function( options, action ) {\n\n        // Grab the component data.\n        var componentData = this.data( name )\n\n        // If the picker is requested, return the data object.\n        if ( options == 'picker' ) {\n            return componentData\n        }\n\n        // If the component data exists and `options` is a string, carry out the action.\n        if ( componentData && typeof options == 'string' ) {\n            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )\n        }\n\n        // Otherwise go through each matched element and if the component\n        // doesn’t exist, create a new picker using `this` element\n        // and merging the defaults and options with a deep copy.\n        return this.each( function() {\n            var $this = $( this )\n            if ( !$this.data( name ) ) {\n                new PickerConstructor( this, name, Component, options )\n            }\n        })\n    }\n\n    // Set the defaults.\n    $.fn[ name ].defaults = Component.defaults\n} //PickerConstructor.extend\n\n\n\nfunction aria(element, attribute, value) {\n    if ( $.isPlainObject(attribute) ) {\n        for ( var key in attribute ) {\n            ariaSet(element, key, attribute[key])\n        }\n    }\n    else {\n        ariaSet(element, attribute, value)\n    }\n}\nfunction ariaSet(element, attribute, value) {\n    element.setAttribute(\n        (attribute == 'role' ? '' : 'aria-') + attribute,\n        value\n    )\n}\nfunction ariaAttr(attribute, data) {\n    if ( !$.isPlainObject(attribute) ) {\n        attribute = { attribute: data }\n    }\n    data = ''\n    for ( var key in attribute ) {\n        var attr = (key == 'role' ? '' : 'aria-') + key,\n            attrVal = attribute[key]\n        data += attrVal == null ? '' : attr + '=\"' + attribute[key] + '\"'\n    }\n    return data\n}\n\n// IE8 bug throws an error for activeElements within iframes.\nfunction getActiveElement() {\n    try {\n        return document.activeElement\n    } catch ( err ) { }\n}\n\n\n\n// Expose the picker constructor.\nreturn PickerConstructor\n\n\n}));\n\n\n\n","module.exports = jQuery;","import 'script-loader!knockout/build/output/knockout-latest'\r\nimport 'script-loader!../Scripts/script-loader/knockout.validation.min'\r\nimport 'script-loader!../Scripts/script-loader/knockout-postbox.min'\r\nimport 'script-loader!../Scripts/script-loader/moment'\r\n\r\nfunction requireAll(r) { r.keys().forEach(r); }\r\nrequireAll(require.context('../Scripts/ko/', true, /\\.js$/));\r\n\r\nimport 'pickadate/lib/picker'\r\nimport 'pickadate/lib/picker.date'\r\n\r\n\r\nlet context = null;\r\n\r\nif (typeof window !== 'undefined') {\r\n    context = window;\r\n} else if (typeof global !== 'undefined') {\r\n    context = global;\r\n}\r\n\r\nif (context) {\r\n    context.ko = ko;\r\n}\r\n\r\n","require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\knockout\\\\build\\\\output\\\\knockout-latest.js\"))","module.exports = \"/*!\\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\"","require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js??ref--4!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\Scripts\\\\script-loader\\\\knockout.validation.min.js\"))","module.exports = \"function _typeof(o) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \\\"function\\\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \\\"symbol\\\" : typeof o; }, _typeof(o); }\\n/*=============================================================================\\r\\n\\tAuthor:\\t\\t\\tEric M. Barnard - @ericmbarnard\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\tLicense:\\t\\tMIT (http://opensource.org/licenses/mit-license.php)\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\tDescription:\\tValidation Library for KnockoutJS\\t\\t\\t\\t\\t\\t\\t\\r\\n\\tVersion:\\t\\t2.0.4\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n===============================================================================\\r\\n*/\\n\\n!function (e) {\\n  \\\"function\\\" == typeof require && \\\"object\\\" == (typeof exports === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(exports)) && \\\"object\\\" == (typeof module === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(module)) ? e(require(\\\"knockout\\\"), exports) : \\\"function\\\" == typeof define && define.amd ? define([\\\"knockout\\\", \\\"exports\\\"], e) : e(ko, ko.validation = {});\\n}(function (f, e) {\\n  if (void 0 === f) throw new Error(\\\"Knockout is required, please ensure it is loaded before loading this validation plug-in\\\");\\n  f.validation = e;\\n  var t,\\n    i,\\n    a,\\n    c = f.validation,\\n    o = f.utils,\\n    p = o.unwrapObservable,\\n    n = o.arrayForEach,\\n    u = o.extend,\\n    r = {\\n      registerExtenders: !0,\\n      messagesOnModified: !0,\\n      errorsAsTitle: !0,\\n      errorsAsTitleOnModified: !1,\\n      messageTemplate: null,\\n      insertMessages: !0,\\n      parseInputAttributes: !1,\\n      writeInputAttributes: !1,\\n      decorateInputElement: !1,\\n      decorateElementOnModified: !0,\\n      errorClass: null,\\n      errorElementClass: \\\"validationElement\\\",\\n      errorMessageClass: \\\"validationMessage\\\",\\n      allowHtmlMessages: !1,\\n      grouping: {\\n        deep: !1,\\n        observable: !0,\\n        live: !1\\n      },\\n      validate: {}\\n    },\\n    s = u({}, r);\\n  s.html5Attributes = [\\\"required\\\", \\\"pattern\\\", \\\"min\\\", \\\"max\\\", \\\"step\\\"], s.html5InputTypes = [\\\"email\\\", \\\"number\\\", \\\"date\\\"], s.reset = function () {\\n    u(s, r);\\n  }, c.configuration = s, c.utils = (t = new Date().getTime(), i = {}, a = \\\"__ko_validation__\\\", {\\n    isArray: function isArray(e) {\\n      return e.isArray || \\\"[object Array]\\\" === Object.prototype.toString.call(e);\\n    },\\n    isObject: function isObject(e) {\\n      return null !== e && \\\"object\\\" == _typeof(e);\\n    },\\n    isNumber: function isNumber(e) {\\n      return !isNaN(e);\\n    },\\n    isObservableArray: function isObservableArray(e) {\\n      return !!e && \\\"function\\\" == typeof e.remove && \\\"function\\\" == typeof e.removeAll && \\\"function\\\" == typeof e.destroy && \\\"function\\\" == typeof e.destroyAll && \\\"function\\\" == typeof e.indexOf && \\\"function\\\" == typeof e.replace;\\n    },\\n    values: function values(e) {\\n      var t = [];\\n      for (var r in e) e.hasOwnProperty(r) && t.push(e[r]);\\n      return t;\\n    },\\n    getValue: function getValue(e) {\\n      return \\\"function\\\" == typeof e ? e() : e;\\n    },\\n    hasAttribute: function hasAttribute(e, t) {\\n      return null !== e.getAttribute(t);\\n    },\\n    getAttribute: function getAttribute(e, t) {\\n      return e.getAttribute(t);\\n    },\\n    setAttribute: function setAttribute(e, t, r) {\\n      return e.setAttribute(t, r);\\n    },\\n    isValidatable: function isValidatable(e) {\\n      return !!(e && e.rules && e.isValid && e.isModified);\\n    },\\n    insertAfter: function insertAfter(e, t) {\\n      e.parentNode.insertBefore(t, e.nextSibling);\\n    },\\n    newId: function newId() {\\n      return t += 1;\\n    },\\n    getConfigOptions: function getConfigOptions(e) {\\n      return c.utils.contextFor(e) || c.configuration;\\n    },\\n    setDomData: function setDomData(e, t) {\\n      var r = e[a];\\n      r || (e[a] = r = c.utils.newId()), i[r] = t;\\n    },\\n    getDomData: function getDomData(e) {\\n      var t = e[a];\\n      if (t) return i[t];\\n    },\\n    contextFor: function contextFor(e) {\\n      switch (e.nodeType) {\\n        case 1:\\n        case 8:\\n          var t = c.utils.getDomData(e);\\n          if (t) return t;\\n          if (e.parentNode) return c.utils.contextFor(e.parentNode);\\n      }\\n    },\\n    isEmptyVal: function isEmptyVal(e) {\\n      return null == e || \\\"\\\" === e;\\n    },\\n    getOriginalElementTitle: function getOriginalElementTitle(e) {\\n      var t = c.utils.getAttribute(e, \\\"data-orig-title\\\"),\\n        r = e.title;\\n      return c.utils.hasAttribute(e, \\\"data-orig-title\\\") ? t : r;\\n    },\\n    async: function async(e) {\\n      window.setImmediate ? window.setImmediate(e) : window.setTimeout(e, 0);\\n    },\\n    forEach: function forEach(e, t) {\\n      if (c.utils.isArray(e)) return n(e, t);\\n      for (var r in e) e.hasOwnProperty(r) && t(e[r], r);\\n    }\\n  });\\n  var l,\\n    d,\\n    v,\\n    g = (l = 0, d = c.configuration, v = c.utils, {\\n      init: function init(e, t) {\\n        0 < l && !t || ((e = e || {}).errorElementClass = e.errorElementClass || e.errorClass || d.errorElementClass, e.errorMessageClass = e.errorMessageClass || e.errorClass || d.errorMessageClass, u(d, e), d.registerExtenders && c.registerExtenders(), l = 1);\\n      },\\n      reset: c.configuration.reset,\\n      group: function group(t, r) {\\n        var i = {\\n            options: r = u(u({}, d.grouping), r),\\n            graphMonitor: f.observable(),\\n            flagged: [],\\n            subscriptions: [],\\n            validatables: []\\n          },\\n          a = null;\\n        return (a = r.observable ? f.computed(function () {\\n          return i.graphMonitor(), b(t, i), F(i.validatables);\\n        }) : function () {\\n          return b(t, i), F(i.validatables);\\n        }).showAllMessages = function (t) {\\n          void 0 === t && (t = !0), a.forEach(function (e) {\\n            v.isValidatable(e) && e.isModified(t);\\n          });\\n        }, a.isAnyMessageShown = function () {\\n          return !!a.find(function (e) {\\n            return v.isValidatable(e) && !e.isValid() && e.isModified();\\n          });\\n        }, a.filter = function (e) {\\n          return e = e || function () {\\n            return !0;\\n          }, a(), o.arrayFilter(i.validatables, e);\\n        }, a.find = function (e) {\\n          return e = e || function () {\\n            return !0;\\n          }, a(), o.arrayFirst(i.validatables, e);\\n        }, a.forEach = function (e) {\\n          e = e || function () {}, a(), n(i.validatables, e);\\n        }, a.map = function (e) {\\n          return e = e || function (e) {\\n            return e;\\n          }, a(), o.arrayMap(i.validatables, e);\\n        }, a._updateState = function (e) {\\n          if (!v.isObject(e)) throw new Error(\\\"An object is required.\\\");\\n          if (t = e, !r.observable) return b(e, i), F(i.validatables);\\n          i.graphMonitor.valueHasMutated();\\n        }, a;\\n      },\\n      formatMessage: function formatMessage(e, t, r) {\\n        if (v.isObject(t) && t.typeAttr && (t = t.value), \\\"function\\\" == typeof e) return e(t, r);\\n        var i = p(t);\\n        return null == i && (i = []), v.isArray(i) || (i = [i]), e.replace(/{(\\\\d+)}/gi, function (e, t) {\\n          return void 0 !== i[t] ? i[t] : e;\\n        });\\n      },\\n      addRule: function addRule(e, t) {\\n        return e.extend({\\n          validatable: !0\\n        }), o.arrayFirst(e.rules(), function (e) {\\n          return e.rule && e.rule === t.rule;\\n        }) || e.rules.push(t), e;\\n      },\\n      addAnonymousRule: function addAnonymousRule(e, t) {\\n        void 0 === t.message && (t.message = \\\"Error\\\"), t.onlyIf && (t.condition = t.onlyIf), c.addRule(e, t);\\n      },\\n      addExtender: function addExtender(r) {\\n        f.extenders[r] = function (e, t) {\\n          return t && (t.message || t.onlyIf) ? c.addRule(e, {\\n            rule: r,\\n            message: t.message,\\n            params: !!v.isEmptyVal(t.params) || t.params,\\n            condition: t.onlyIf\\n          }) : c.addRule(e, {\\n            rule: r,\\n            params: t\\n          });\\n        };\\n      },\\n      registerExtenders: function registerExtenders() {\\n        if (d.registerExtenders) for (var e in c.rules) c.rules.hasOwnProperty(e) && (f.extenders[e] || c.addExtender(e));\\n      },\\n      insertValidationMessage: function insertValidationMessage(e) {\\n        var t = document.createElement(\\\"SPAN\\\");\\n        return t.className = v.getConfigOptions(e).errorMessageClass, v.insertAfter(e, t), t;\\n      },\\n      parseInputValidationAttributes: function parseInputValidationAttributes(i, a) {\\n        n(c.configuration.html5Attributes, function (e) {\\n          if (v.hasAttribute(i, e)) {\\n            var t = i.getAttribute(e) || !0;\\n            if (\\\"min\\\" === e || \\\"max\\\" === e) {\\n              var r = i.getAttribute(\\\"type\\\");\\n              void 0 !== r && r || (r = \\\"text\\\"), t = {\\n                typeAttr: r,\\n                value: t\\n              };\\n            }\\n            c.addRule(a(), {\\n              rule: e,\\n              params: t\\n            });\\n          }\\n        });\\n        var t = i.getAttribute(\\\"type\\\");\\n        n(c.configuration.html5InputTypes, function (e) {\\n          e === t && c.addRule(a(), {\\n            rule: \\\"date\\\" === e ? \\\"dateISO\\\" : e,\\n            params: !0\\n          });\\n        });\\n      },\\n      writeInputValidationAttributes: function writeInputValidationAttributes(i, e) {\\n        var t = e();\\n        if (t && t.rules) {\\n          var a = t.rules();\\n          n(c.configuration.html5Attributes, function (t) {\\n            var r = o.arrayFirst(a, function (e) {\\n              return e.rule && e.rule.toLowerCase() === t.toLowerCase();\\n            });\\n            r && f.computed({\\n              read: function read() {\\n                var e = f.unwrap(r.params);\\n                \\\"pattern\\\" === r.rule && e instanceof RegExp && (e = e.source), i.setAttribute(t, e);\\n              },\\n              disposeWhenNodeIsRemoved: i\\n            });\\n          }), a = null;\\n        }\\n      },\\n      makeBindingHandlerValidatable: function makeBindingHandlerValidatable(e) {\\n        var n = f.bindingHandlers[e].init;\\n        f.bindingHandlers[e].init = function (e, t, r, i, a) {\\n          return n(e, t, r, i, a), f.bindingHandlers.validationCore.init(e, t, r, i, a);\\n        };\\n      },\\n      setRules: function setRules(e, t) {\\n        var _d = function d(e, t) {\\n          if (e && t) for (var r in t) if (t.hasOwnProperty(r)) {\\n            var i = t[r];\\n            if (e[r]) {\\n              var a = e[r],\\n                n = p(a),\\n                s = {},\\n                u = {};\\n              for (var l in i) i.hasOwnProperty(l) && (c.rules[l] ? s[l] = i[l] : u[l] = i[l]);\\n              if (f.isObservable(a) && a.extend(s), n && v.isArray(n)) for (var o = 0; o < n.length; o++) _d(n[o], u);else _d(n, u);\\n            }\\n          }\\n        };\\n        _d(e, t);\\n      }\\n    });\\n  function m(e) {\\n    n(e.subscriptions, function (e) {\\n      e.dispose();\\n    }), e.subscriptions = [];\\n  }\\n  function b(e, t) {\\n    t.validatables = [], m(t), function t(e, r, i) {\\n      var a = [],\\n        n = e.peek ? e.peek() : e;\\n      !0 !== e.__kv_traversed && (r.options.deep && (e.__kv_traversed = !0, r.flagged.push(e)), i = void 0 !== i ? i : r.options.deep ? 1 : -1, f.isObservable(e) && (e.errors || v.isValidatable(e) || e.extend({\\n        validatable: !0\\n      }), r.validatables.push(e), r.options.live && v.isObservableArray(e) && r.subscriptions.push(e.subscribe(function () {\\n        r.graphMonitor.valueHasMutated();\\n      }))), n && !n._destroy && (v.isArray(n) ? a = n : v.isObject(n) && (a = v.values(n))), 0 !== i && v.forEach(a, function (e) {\\n        !e || e.nodeType || f.isComputed(e) && !e.rules || t(e, r, i + 1);\\n      }));\\n    }(e, t), function (e) {\\n      e.options.deep && (n(e.flagged, function (e) {\\n        delete e.__kv_traversed;\\n      }), e.flagged.length = 0), e.options.live || m(e);\\n    }(t);\\n  }\\n  function F(e) {\\n    var t = [];\\n    return n(e, function (e) {\\n      v.isValidatable(e) && !e.isValid() && t.push(e.error.peek());\\n    }), t;\\n  }\\n  function y(u) {\\n    var l = \\\"max\\\" === u;\\n    return function (e, t) {\\n      if (c.utils.isEmptyVal(e)) return !0;\\n      var r, i, a, n, s;\\n      switch (r = void 0 === t.typeAttr ? (i = \\\"text\\\", t) : (i = t.typeAttr, t.value), isNaN(r) || r instanceof Date || (i = \\\"number\\\"), i.toLowerCase()) {\\n        case \\\"week\\\":\\n          if (a = /^(\\\\d{4})-W(\\\\d{2})$/, null === (n = e.match(a))) throw new Error(\\\"Invalid value for \\\" + u + \\\" attribute for week input.  Should look like '2000-W33' http://www.w3.org/TR/html-markup/input.week.html#input.week.attrs.min\\\");\\n          return !!(s = r.match(a)) && (l ? n[1] < s[1] || n[1] === s[1] && n[2] <= s[2] : n[1] > s[1] || n[1] === s[1] && n[2] >= s[2]);\\n        case \\\"month\\\":\\n          if (a = /^(\\\\d{4})-(\\\\d{2})$/, null === (n = e.match(a))) throw new Error(\\\"Invalid value for \\\" + u + \\\" attribute for month input.  Should look like '2000-03' http://www.w3.org/TR/html-markup/input.month.html#input.month.attrs.min\\\");\\n          return !!(s = r.match(a)) && (l ? n[1] < s[1] || n[1] === s[1] && n[2] <= s[2] : n[1] > s[1] || n[1] === s[1] && n[2] >= s[2]);\\n        case \\\"number\\\":\\n        case \\\"range\\\":\\n          return l ? !isNaN(e) && parseFloat(e) <= parseFloat(r) : !isNaN(e) && parseFloat(e) >= parseFloat(r);\\n        default:\\n          return l ? e <= r : r <= e;\\n      }\\n    };\\n  }\\n  function h(i, a, n) {\\n    i.isValidating(!0);\\n    function e(e) {\\n      var t = !1,\\n        r = \\\"\\\";\\n      i.__valid__() && (e.message ? (t = e.isValid, r = e.message) : t = e, t || (i.error(c.formatMessage(r || n.message || a.message, p(n.params), i)), i.__valid__(t))), i.isValidating(!1);\\n    }\\n    c.utils.async(function () {\\n      a.validator(i(), void 0 === n.params || p(n.params), e);\\n    });\\n  }\\n  u(f.validation, g), c.rules = {}, c.rules.required = {\\n    validator: function validator(e, t) {\\n      var r;\\n      return null == e ? !t : (\\\"string\\\" == typeof (r = e) && (r = String.prototype.trim ? e.trim() : e.replace(/^\\\\s+|\\\\s+$/g, \\\"\\\")), !t || 0 < (r + \\\"\\\").length);\\n    },\\n    message: \\\"This field is required.\\\"\\n  }, c.rules.min = {\\n    validator: y(\\\"min\\\"),\\n    message: \\\"Please enter a value greater than or equal to {0}.\\\"\\n  }, c.rules.max = {\\n    validator: y(\\\"max\\\"),\\n    message: \\\"Please enter a value less than or equal to {0}.\\\"\\n  }, c.rules.minLength = {\\n    validator: function validator(e, t) {\\n      return !!c.utils.isEmptyVal(e) || (c.utils.isNumber(e) ? \\\"\\\" + e : e).length >= t;\\n    },\\n    message: \\\"Please enter at least {0} characters.\\\"\\n  }, c.rules.maxLength = {\\n    validator: function validator(e, t) {\\n      return !!c.utils.isEmptyVal(e) || (c.utils.isNumber(e) ? \\\"\\\" + e : e).length <= t;\\n    },\\n    message: \\\"Please enter no more than {0} characters.\\\"\\n  }, c.rules.pattern = {\\n    validator: function validator(e, t) {\\n      return c.utils.isEmptyVal(e) || null !== e.toString().match(t);\\n    },\\n    message: \\\"Please check this value.\\\"\\n  }, c.rules.step = {\\n    validator: function validator(e, t) {\\n      if (c.utils.isEmptyVal(e) || \\\"any\\\" === t) return !0;\\n      var r = 100 * e % (100 * t);\\n      return Math.abs(r) < 1e-5 || Math.abs(1 - r) < 1e-5;\\n    },\\n    message: \\\"The value must increment by {0}.\\\"\\n  }, c.rules.email = {\\n    validator: function validator(e, t) {\\n      return !t || c.utils.isEmptyVal(e) || t && /^((([a-z]|\\\\d|[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+(\\\\.([a-z]|\\\\d|[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+)*)|((\\\\x22)((((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(([\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f]|\\\\x21|[\\\\x23-\\\\x5b]|[\\\\x5d-\\\\x7e]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(\\\\\\\\([\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0d-\\\\x7f]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]))))*(((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(\\\\x22)))@((([a-z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))\\\\.)+(([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))$/i.test(e);\\n    },\\n    message: \\\"Please enter a proper email address.\\\"\\n  }, c.rules.date = {\\n    validator: function validator(e, t) {\\n      return !t || c.utils.isEmptyVal(e) || t && !/Invalid|NaN/.test(new Date(e));\\n    },\\n    message: \\\"Please enter a proper date.\\\"\\n  }, c.rules.dateISO = {\\n    validator: function validator(e, t) {\\n      return !t || c.utils.isEmptyVal(e) || t && /^\\\\d{4}[-/](?:0?[1-9]|1[012])[-/](?:0?[1-9]|[12][0-9]|3[01])$/.test(e);\\n    },\\n    message: \\\"Please enter a proper date.\\\"\\n  }, c.rules.number = {\\n    validator: function validator(e, t) {\\n      return !t || c.utils.isEmptyVal(e) || t && /^-?(?:\\\\d+|\\\\d{1,3}(?:,\\\\d{3})+)?(?:\\\\.\\\\d+)?$/.test(e);\\n    },\\n    message: \\\"Please enter a number.\\\"\\n  }, c.rules.digit = {\\n    validator: function validator(e, t) {\\n      return !t || c.utils.isEmptyVal(e) || t && /^\\\\d+$/.test(e);\\n    },\\n    message: \\\"Please enter a digit.\\\"\\n  }, c.rules.phoneUS = {\\n    validator: function validator(e, t) {\\n      return !t || !!c.utils.isEmptyVal(e) || \\\"string\\\" == typeof e && (e = e.replace(/\\\\s+/g, \\\"\\\"), t && 9 < e.length && e.match(/^(1-?)?(\\\\([2-9]\\\\d{2}\\\\)|[2-9]\\\\d{2})-?[2-9]\\\\d{2}-?\\\\d{4}$/));\\n    },\\n    message: \\\"Please specify a valid phone number.\\\"\\n  }, c.rules.equal = {\\n    validator: function validator(e, t) {\\n      var r = t;\\n      return e === c.utils.getValue(r);\\n    },\\n    message: \\\"Values must equal.\\\"\\n  }, c.rules.notEqual = {\\n    validator: function validator(e, t) {\\n      var r = t;\\n      return e !== c.utils.getValue(r);\\n    },\\n    message: \\\"Please choose another value.\\\"\\n  }, c.rules.unique = {\\n    validator: function validator(t, r) {\\n      var e = c.utils.getValue(r.collection),\\n        i = c.utils.getValue(r.externalValue),\\n        a = 0;\\n      return !t || !e || (o.arrayFilter(e, function (e) {\\n        t === (r.valueAccessor ? r.valueAccessor(e) : e) && a++;\\n      }), a < (i ? 1 : 2));\\n    },\\n    message: \\\"Please make sure the value is unique.\\\"\\n  }, c.registerExtenders(), f.bindingHandlers.validationCore = {\\n    init: function init(e, t, r, i, a) {\\n      var n = c.utils.getConfigOptions(e),\\n        s = t();\\n      if (n.parseInputAttributes && c.utils.async(function () {\\n        c.parseInputValidationAttributes(e, t);\\n      }), n.insertMessages && c.utils.isValidatable(s)) {\\n        var u = c.insertValidationMessage(e);\\n        n.messageTemplate ? f.renderTemplate(n.messageTemplate, {\\n          field: s\\n        }, null, u, \\\"replaceNode\\\") : f.applyBindingsToNode(u, {\\n          validationMessage: s\\n        });\\n      }\\n      n.writeInputAttributes && c.utils.isValidatable(s) && c.writeInputValidationAttributes(e, t), n.decorateInputElement && c.utils.isValidatable(s) && f.applyBindingsToNode(e, {\\n        validationElement: s\\n      });\\n    }\\n  }, c.makeBindingHandlerValidatable(\\\"value\\\"), c.makeBindingHandlerValidatable(\\\"checked\\\"), f.bindingHandlers.textInput && c.makeBindingHandlerValidatable(\\\"textInput\\\"), c.makeBindingHandlerValidatable(\\\"selectedOptions\\\"), f.bindingHandlers.validationMessage = {\\n    update: function update(e, t) {\\n      var r,\\n        i,\\n        a = t(),\\n        n = c.utils.getConfigOptions(e);\\n      p(a);\\n      if (null == a) throw new Error(\\\"Cannot bind validationMessage to undefined value. data-bind expression: \\\" + e.getAttribute(\\\"data-bind\\\"));\\n      r = a.isModified && a.isModified(), i = a.isValid && a.isValid();\\n      var s = null;\\n      n.messagesOnModified && !r || (s = i ? null : a.error);\\n      var u = !(n.messagesOnModified && !r) && !i,\\n        l = \\\"none\\\" !== e.style.display;\\n      n.allowHtmlMessages ? o.setHtml(e, s) : f.bindingHandlers.text.update(e, function () {\\n        return s;\\n      }), l && !u ? e.style.display = \\\"none\\\" : !l && u && (e.style.display = \\\"\\\");\\n    }\\n  }, f.bindingHandlers.validationElement = {\\n    update: function update(r, e, t) {\\n      var i,\\n        a,\\n        n = e(),\\n        s = c.utils.getConfigOptions(r);\\n      p(n);\\n      if (null == n) throw new Error(\\\"Cannot bind validationElement to undefined value. data-bind expression: \\\" + r.getAttribute(\\\"data-bind\\\"));\\n      i = n.isModified && n.isModified(), a = n.isValid && n.isValid();\\n      f.bindingHandlers.css.update(r, function () {\\n        var e = {},\\n          t = !(s.decorateElementOnModified && !i) && !a;\\n        return e[s.errorElementClass] = t, e;\\n      }, t), s.errorsAsTitle && f.bindingHandlers.attr.update(r, function () {\\n        var e = !s.errorsAsTitleOnModified || i,\\n          t = c.utils.getOriginalElementTitle(r);\\n        return e && !a ? {\\n          title: n.error,\\n          \\\"data-orig-title\\\": t\\n        } : !e || a ? {\\n          title: t,\\n          \\\"data-orig-title\\\": null\\n        } : void 0;\\n      });\\n    }\\n  }, f.bindingHandlers.validationOptions = {\\n    init: function init(e, t, r, i, a) {\\n      var n = p(t());\\n      if (n) {\\n        var s = u({}, c.configuration);\\n        u(s, n), c.utils.setDomData(e, s);\\n      }\\n    }\\n  }, f.extenders.validation = function (t, e) {\\n    return n(c.utils.isArray(e) ? e : [e], function (e) {\\n      c.addAnonymousRule(t, e);\\n    }), t;\\n  }, f.extenders.validatable = function (i, e) {\\n    if (c.utils.isObject(e) || (e = {\\n      enable: e\\n    }), \\\"enable\\\" in e || (e.enable = !0), e.enable && !c.utils.isValidatable(i)) {\\n      var t = c.configuration.validate || {},\\n        r = {\\n          throttleEvaluation: e.throttle || t.throttle\\n        };\\n      i.error = f.observable(null), i.rules = f.observableArray(), i.isValidating = f.observable(!1), i.__valid__ = f.observable(!0), i.isModified = f.observable(!1), i.isValid = f.computed(i.__valid__), i.setError = function (e) {\\n        var t = i.error.peek(),\\n          r = i.__valid__.peek();\\n        i.error(e), i.__valid__(!1), t === e || r || i.isValid.notifySubscribers();\\n      }, i.clearError = function () {\\n        return i.error(null), i.__valid__(!0), i;\\n      };\\n      var a = i.subscribe(function () {\\n          i.isModified(!0);\\n        }),\\n        n = f.computed(u({\\n          read: function read() {\\n            i(), i.rules();\\n            return c.validateObservable(i), !0;\\n          }\\n        }, r));\\n      u(n, r), i._disposeValidation = function () {\\n        i.isValid.dispose(), i.rules.removeAll(), a.dispose(), n.dispose(), delete i.rules, delete i.error, delete i.isValid, delete i.isValidating, delete i.__valid__, delete i.isModified, delete i.setError, delete i.clearError, delete i._disposeValidation;\\n      };\\n    } else !1 === e.enable && i._disposeValidation && i._disposeValidation();\\n    return i;\\n  }, c.validateObservable = function (e) {\\n    for (var t, r, i, a, n, s = 0, u = e.rules(), l = u.length; s < l; s++) if (!(r = u[s]).condition || r.condition()) if ((t = r.rule ? c.rules[r.rule] : r).async || r.async) h(e, t, r);else if (i = e, n = r, !(a = t).validator(i(), void 0 === n.params || p(n.params)) && (i.setError(c.formatMessage(n.message || a.message, p(n.params), i)), 1)) return !1;\\n    return e.clearError(), !0;\\n  };\\n  var x,\\n    E = {};\\n  c.defineLocale = function (e, t) {\\n    return e && t ? E[e.toLowerCase()] = t : null;\\n  }, c.locale = function (e) {\\n    if (e) {\\n      if (e = e.toLowerCase(), !E.hasOwnProperty(e)) throw new Error(\\\"Localization \\\" + e + \\\" has not been loaded.\\\");\\n      c.localize(E[e]), x = e;\\n    }\\n    return x;\\n  }, c.localize = function (e) {\\n    var t = c.rules;\\n    for (var r in e) t.hasOwnProperty(r) && (t[r].message = e[r]);\\n  }, function () {\\n    var e = {},\\n      t = c.rules;\\n    for (var r in t) t.hasOwnProperty(r) && (e[r] = t[r].message);\\n    c.defineLocale(\\\"en-us\\\", e);\\n  }(), x = \\\"en-us\\\", f.applyBindingsWithValidation = function (e, t, r) {\\n    var i,\\n      a = document.body;\\n    i = t && t.nodeType ? (a = t, r) : t, c.init(), i && (i = u(u({}, c.configuration), i), c.utils.setDomData(a, i)), f.applyBindings(e, a);\\n  };\\n  var A = f.applyBindings;\\n  f.applyBindings = function () {\\n    c.init(), A.apply(this, arguments);\\n  }, f.validatedObservable = function (e, t) {\\n    if (!t && !c.utils.isObject(e)) return f.observable(e).extend({\\n      validatable: !0\\n    });\\n    var r = f.observable(e);\\n    return r.errors = c.group(c.utils.isObject(e) ? e : {}, t), r.isValid = f.observable(0 === r.errors().length), f.isObservable(r.errors) ? r.errors.subscribe(function (e) {\\n      r.isValid(0 === e.length);\\n    }) : f.computed(r.errors).subscribe(function (e) {\\n      r.isValid(0 === e.length);\\n    }), r.subscribe(function (e) {\\n      c.utils.isObject(e) || (e = {}), r.errors._updateState(e), r.isValid(0 === r.errors().length);\\n    }), r;\\n  };\\n});\"","require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js??ref--4!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\Scripts\\\\script-loader\\\\knockout-postbox.min.js\"))","module.exports = \"function _typeof(o) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \\\"function\\\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \\\"symbol\\\" : typeof o; }, _typeof(o); }\\n// knockout-postbox 0.5.0 | (c) 2015 Ryan Niemeyer |  http://www.opensource.org/licenses/mit-license\\n!function (a) {\\n  \\\"function\\\" == typeof require && \\\"object\\\" == (typeof exports === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(exports)) && \\\"object\\\" == (typeof module === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(module)) ? a(require(\\\"knockout\\\"), exports) : \\\"function\\\" == typeof define && define.amd ? define([\\\"knockout\\\", \\\"exports\\\"], a) : a(ko, ko.postbox = {});\\n}(function (a, b, c) {\\n  var d,\\n    e,\\n    f = {},\\n    g = 1;\\n  b.subscriptions = f, a.subscribable.call(b), b.topicCache = {}, b.serializer = a.toJSON, b.publish = function (a, c) {\\n    a && (b.topicCache[a] = {\\n      value: c,\\n      serialized: b.serializer(c)\\n    }, b.notifySubscribers(c, a));\\n  }, e = b.subscribe, b.subscribe = function (a, d, h, i) {\\n    var j, k, l;\\n    return a ? (\\\"boolean\\\" == typeof h && (i = h, h = c), j = e.call(b, d, h, a), j.subId = ++g, f[g] = j, i && (k = b.topicCache[a], k !== c && d.call(h, k.value)), l = j.dispose, j.dispose = function () {\\n      delete f[j.subId], l.call(j);\\n    }, j) : void 0;\\n  }, b.reset = function () {\\n    var a;\\n    for (var c in f) f.hasOwnProperty(c) && (a = f[c], a && \\\"function\\\" == typeof a.dispose && a.dispose());\\n    b.topicCache = {};\\n  }, b.defaultComparer = function (a, c) {\\n    return c && b.serializer(a) === c.serialized;\\n  }, a.subscribable.fn.publishOn = function (a, c, e) {\\n    var h, i, j;\\n    return a && (\\\"function\\\" == typeof c ? e = c : h = c, e = e || b.defaultComparer, d.call(this, a, \\\"publishOn\\\"), i = this.subscribe(function (c) {\\n      e.call(this, c, b.topicCache[a]) || b.publish(a, c);\\n    }, this), i.id = ++g, f[g] = i, j = i.dispose, i.dispose = function () {\\n      delete this.postboxSubs[a].publishOn, delete f[i.id], j.call(i);\\n    }.bind(this), this.postboxSubs[a].publishOn = i, h || b.publish(a, this())), this;\\n  }, d = function d(a, b) {\\n    var c = this.postboxSubs = this.postboxSubs || {};\\n    c[a] = c[a] || {}, c[a][b] && c[a][b].dispose();\\n  }, a.subscribable.fn.stopPublishingOn = function (a) {\\n    return d.call(this, a, \\\"publishOn\\\"), this;\\n  }, a.subscribable.fn.subscribeTo = function (e, f, g) {\\n    var h,\\n      i,\\n      j,\\n      k,\\n      l,\\n      m = this;\\n    return \\\"function\\\" == typeof f ? g = f : h = f, e && a.isWriteableObservable(this) && (d.call(this, e, \\\"subscribeTo\\\"), j = function j(a) {\\n      m(g ? g.call(m, a) : a);\\n    }, k = b.subscribe(e, j), this.postboxSubs[e].subscribeTo = k, l = k.dispose, k.dispose = function () {\\n      delete this.postboxSubs[e].subscribeTo, l.call(k);\\n    }.bind(this), h && (i = b.topicCache[e], i !== c && j(i.value))), this;\\n  }, a.subscribable.fn.unsubscribeFrom = function (a) {\\n    return d.call(this, a, \\\"subscribeTo\\\"), this;\\n  }, a.subscribable.fn.syncWith = function (a, b, c, d) {\\n    return this.subscribeTo(a, b).publishOn(a, c, d), this;\\n  }, a.postbox = b;\\n});\"","require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\script-loader\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js??ref--4!D:\\\\a\\\\1\\\\s\\\\CDH.Web\\\\CDH.Web.ClientPortal\\\\Scripts\\\\script-loader\\\\moment.js\"))","module.exports = \"function _typeof(o) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \\\"function\\\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \\\"symbol\\\" : typeof o; }, _typeof(o); }\\n//! moment.js\\n//! version : 2.29.1\\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\\n//! license : MIT\\n//! momentjs.com\\n\\n;\\n(function (global, factory) {\\n  (typeof exports === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\\n})(this, function () {\\n  'use strict';\\n\\n  var hookCallback;\\n  function hooks() {\\n    return hookCallback.apply(null, arguments);\\n  }\\n\\n  // This is done to register the method called with moment()\\n  // without creating circular dependencies.\\n  function setHookCallback(callback) {\\n    hookCallback = callback;\\n  }\\n  function isArray(input) {\\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\\n  }\\n  function isObject(input) {\\n    // IE8 will treat undefined and null as object if it wasn't for\\n    // input != null\\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\\n  }\\n  function hasOwnProp(a, b) {\\n    return Object.prototype.hasOwnProperty.call(a, b);\\n  }\\n  function isObjectEmpty(obj) {\\n    if (Object.getOwnPropertyNames) {\\n      return Object.getOwnPropertyNames(obj).length === 0;\\n    } else {\\n      var k;\\n      for (k in obj) {\\n        if (hasOwnProp(obj, k)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n  }\\n  function isUndefined(input) {\\n    return input === void 0;\\n  }\\n  function isNumber(input) {\\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\\n  }\\n  function isDate(input) {\\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\\n  }\\n  function map(arr, fn) {\\n    var res = [],\\n      i;\\n    for (i = 0; i < arr.length; ++i) {\\n      res.push(fn(arr[i], i));\\n    }\\n    return res;\\n  }\\n  function extend(a, b) {\\n    for (var i in b) {\\n      if (hasOwnProp(b, i)) {\\n        a[i] = b[i];\\n      }\\n    }\\n    if (hasOwnProp(b, 'toString')) {\\n      a.toString = b.toString;\\n    }\\n    if (hasOwnProp(b, 'valueOf')) {\\n      a.valueOf = b.valueOf;\\n    }\\n    return a;\\n  }\\n  function createUTC(input, format, locale, strict) {\\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\\n  }\\n  function defaultParsingFlags() {\\n    // We need to deep clone this object.\\n    return {\\n      empty: false,\\n      unusedTokens: [],\\n      unusedInput: [],\\n      overflow: -2,\\n      charsLeftOver: 0,\\n      nullInput: false,\\n      invalidEra: null,\\n      invalidMonth: null,\\n      invalidFormat: false,\\n      userInvalidated: false,\\n      iso: false,\\n      parsedDateParts: [],\\n      era: null,\\n      meridiem: null,\\n      rfc2822: false,\\n      weekdayMismatch: false\\n    };\\n  }\\n  function getParsingFlags(m) {\\n    if (m._pf == null) {\\n      m._pf = defaultParsingFlags();\\n    }\\n    return m._pf;\\n  }\\n  var some;\\n  if (Array.prototype.some) {\\n    some = Array.prototype.some;\\n  } else {\\n    some = function some(fun) {\\n      var t = Object(this),\\n        len = t.length >>> 0,\\n        i;\\n      for (i = 0; i < len; i++) {\\n        if (i in t && fun.call(this, t[i], i, t)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n  }\\n  function isValid(m) {\\n    if (m._isValid == null) {\\n      var flags = getParsingFlags(m),\\n        parsedParts = some.call(flags.parsedDateParts, function (i) {\\n          return i != null;\\n        }),\\n        isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\\n      if (m._strict) {\\n        isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\\n      }\\n      if (Object.isFrozen == null || !Object.isFrozen(m)) {\\n        m._isValid = isNowValid;\\n      } else {\\n        return isNowValid;\\n      }\\n    }\\n    return m._isValid;\\n  }\\n  function createInvalid(flags) {\\n    var m = createUTC(NaN);\\n    if (flags != null) {\\n      extend(getParsingFlags(m), flags);\\n    } else {\\n      getParsingFlags(m).userInvalidated = true;\\n    }\\n    return m;\\n  }\\n\\n  // Plugins that add properties should also add the key here (null value),\\n  // so we can properly clone ourselves.\\n  var momentProperties = hooks.momentProperties = [],\\n    updateInProgress = false;\\n  function copyConfig(to, from) {\\n    var i, prop, val;\\n    if (!isUndefined(from._isAMomentObject)) {\\n      to._isAMomentObject = from._isAMomentObject;\\n    }\\n    if (!isUndefined(from._i)) {\\n      to._i = from._i;\\n    }\\n    if (!isUndefined(from._f)) {\\n      to._f = from._f;\\n    }\\n    if (!isUndefined(from._l)) {\\n      to._l = from._l;\\n    }\\n    if (!isUndefined(from._strict)) {\\n      to._strict = from._strict;\\n    }\\n    if (!isUndefined(from._tzm)) {\\n      to._tzm = from._tzm;\\n    }\\n    if (!isUndefined(from._isUTC)) {\\n      to._isUTC = from._isUTC;\\n    }\\n    if (!isUndefined(from._offset)) {\\n      to._offset = from._offset;\\n    }\\n    if (!isUndefined(from._pf)) {\\n      to._pf = getParsingFlags(from);\\n    }\\n    if (!isUndefined(from._locale)) {\\n      to._locale = from._locale;\\n    }\\n    if (momentProperties.length > 0) {\\n      for (i = 0; i < momentProperties.length; i++) {\\n        prop = momentProperties[i];\\n        val = from[prop];\\n        if (!isUndefined(val)) {\\n          to[prop] = val;\\n        }\\n      }\\n    }\\n    return to;\\n  }\\n\\n  // Moment prototype object\\n  function Moment(config) {\\n    copyConfig(this, config);\\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\\n    if (!this.isValid()) {\\n      this._d = new Date(NaN);\\n    }\\n    // Prevent infinite loop in case updateOffset creates new moment\\n    // objects.\\n    if (updateInProgress === false) {\\n      updateInProgress = true;\\n      hooks.updateOffset(this);\\n      updateInProgress = false;\\n    }\\n  }\\n  function isMoment(obj) {\\n    return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\\n  }\\n  function warn(msg) {\\n    if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\\n      console.warn('Deprecation warning: ' + msg);\\n    }\\n  }\\n  function deprecate(msg, fn) {\\n    var firstTime = true;\\n    return extend(function () {\\n      if (hooks.deprecationHandler != null) {\\n        hooks.deprecationHandler(null, msg);\\n      }\\n      if (firstTime) {\\n        var args = [],\\n          arg,\\n          i,\\n          key;\\n        for (i = 0; i < arguments.length; i++) {\\n          arg = '';\\n          if (_typeof(arguments[i]) === 'object') {\\n            arg += '\\\\n[' + i + '] ';\\n            for (key in arguments[0]) {\\n              if (hasOwnProp(arguments[0], key)) {\\n                arg += key + ': ' + arguments[0][key] + ', ';\\n              }\\n            }\\n            arg = arg.slice(0, -2); // Remove trailing comma and space\\n          } else {\\n            arg = arguments[i];\\n          }\\n          args.push(arg);\\n        }\\n        warn(msg + '\\\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\\\n' + new Error().stack);\\n        firstTime = false;\\n      }\\n      return fn.apply(this, arguments);\\n    }, fn);\\n  }\\n  var deprecations = {};\\n  function deprecateSimple(name, msg) {\\n    if (hooks.deprecationHandler != null) {\\n      hooks.deprecationHandler(name, msg);\\n    }\\n    if (!deprecations[name]) {\\n      warn(msg);\\n      deprecations[name] = true;\\n    }\\n  }\\n  hooks.suppressDeprecationWarnings = false;\\n  hooks.deprecationHandler = null;\\n  function isFunction(input) {\\n    return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\\n  }\\n  function set(config) {\\n    var prop, i;\\n    for (i in config) {\\n      if (hasOwnProp(config, i)) {\\n        prop = config[i];\\n        if (isFunction(prop)) {\\n          this[i] = prop;\\n        } else {\\n          this['_' + i] = prop;\\n        }\\n      }\\n    }\\n    this._config = config;\\n    // Lenient ordinal parsing accepts just a number in addition to\\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\\n    // TODO: Remove \\\"ordinalParse\\\" fallback in next major release.\\n    this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\\\d{1,2}/.source);\\n  }\\n  function mergeConfigs(parentConfig, childConfig) {\\n    var res = extend({}, parentConfig),\\n      prop;\\n    for (prop in childConfig) {\\n      if (hasOwnProp(childConfig, prop)) {\\n        if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\\n          res[prop] = {};\\n          extend(res[prop], parentConfig[prop]);\\n          extend(res[prop], childConfig[prop]);\\n        } else if (childConfig[prop] != null) {\\n          res[prop] = childConfig[prop];\\n        } else {\\n          delete res[prop];\\n        }\\n      }\\n    }\\n    for (prop in parentConfig) {\\n      if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\\n        // make sure changes to properties don't modify parent config\\n        res[prop] = extend({}, res[prop]);\\n      }\\n    }\\n    return res;\\n  }\\n  function Locale(config) {\\n    if (config != null) {\\n      this.set(config);\\n    }\\n  }\\n  var keys;\\n  if (Object.keys) {\\n    keys = Object.keys;\\n  } else {\\n    keys = function keys(obj) {\\n      var i,\\n        res = [];\\n      for (i in obj) {\\n        if (hasOwnProp(obj, i)) {\\n          res.push(i);\\n        }\\n      }\\n      return res;\\n    };\\n  }\\n  var defaultCalendar = {\\n    sameDay: '[Today at] LT',\\n    nextDay: '[Tomorrow at] LT',\\n    nextWeek: 'dddd [at] LT',\\n    lastDay: '[Yesterday at] LT',\\n    lastWeek: '[Last] dddd [at] LT',\\n    sameElse: 'L'\\n  };\\n  function calendar(key, mom, now) {\\n    var output = this._calendar[key] || this._calendar['sameElse'];\\n    return isFunction(output) ? output.call(mom, now) : output;\\n  }\\n  function zeroFill(number, targetLength, forceSign) {\\n    var absNumber = '' + Math.abs(number),\\n      zerosToFill = targetLength - absNumber.length,\\n      sign = number >= 0;\\n    return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\\n  }\\n  var formattingTokens = /(\\\\[[^\\\\[]*\\\\])|(\\\\\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\\n    localFormattingTokens = /(\\\\[[^\\\\[]*\\\\])|(\\\\\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\\n    formatFunctions = {},\\n    formatTokenFunctions = {};\\n\\n  // token:    'M'\\n  // padded:   ['MM', 2]\\n  // ordinal:  'Mo'\\n  // callback: function () { this.month() + 1 }\\n  function addFormatToken(token, padded, ordinal, callback) {\\n    var func = callback;\\n    if (typeof callback === 'string') {\\n      func = function func() {\\n        return this[callback]();\\n      };\\n    }\\n    if (token) {\\n      formatTokenFunctions[token] = func;\\n    }\\n    if (padded) {\\n      formatTokenFunctions[padded[0]] = function () {\\n        return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\\n      };\\n    }\\n    if (ordinal) {\\n      formatTokenFunctions[ordinal] = function () {\\n        return this.localeData().ordinal(func.apply(this, arguments), token);\\n      };\\n    }\\n  }\\n  function removeFormattingTokens(input) {\\n    if (input.match(/\\\\[[\\\\s\\\\S]/)) {\\n      return input.replace(/^\\\\[|\\\\]$/g, '');\\n    }\\n    return input.replace(/\\\\\\\\/g, '');\\n  }\\n  function makeFormatFunction(format) {\\n    var array = format.match(formattingTokens),\\n      i,\\n      length;\\n    for (i = 0, length = array.length; i < length; i++) {\\n      if (formatTokenFunctions[array[i]]) {\\n        array[i] = formatTokenFunctions[array[i]];\\n      } else {\\n        array[i] = removeFormattingTokens(array[i]);\\n      }\\n    }\\n    return function (mom) {\\n      var output = '',\\n        i;\\n      for (i = 0; i < length; i++) {\\n        output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\\n      }\\n      return output;\\n    };\\n  }\\n\\n  // format date using native date object\\n  function formatMoment(m, format) {\\n    if (!m.isValid()) {\\n      return m.localeData().invalidDate();\\n    }\\n    format = expandFormat(format, m.localeData());\\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\\n    return formatFunctions[format](m);\\n  }\\n  function expandFormat(format, locale) {\\n    var i = 5;\\n    function replaceLongDateFormatTokens(input) {\\n      return locale.longDateFormat(input) || input;\\n    }\\n    localFormattingTokens.lastIndex = 0;\\n    while (i >= 0 && localFormattingTokens.test(format)) {\\n      format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\\n      localFormattingTokens.lastIndex = 0;\\n      i -= 1;\\n    }\\n    return format;\\n  }\\n  var defaultLongDateFormat = {\\n    LTS: 'h:mm:ss A',\\n    LT: 'h:mm A',\\n    L: 'MM/DD/YYYY',\\n    LL: 'MMMM D, YYYY',\\n    LLL: 'MMMM D, YYYY h:mm A',\\n    LLLL: 'dddd, MMMM D, YYYY h:mm A'\\n  };\\n  function longDateFormat(key) {\\n    var format = this._longDateFormat[key],\\n      formatUpper = this._longDateFormat[key.toUpperCase()];\\n    if (format || !formatUpper) {\\n      return format;\\n    }\\n    this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\\n      if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\\n        return tok.slice(1);\\n      }\\n      return tok;\\n    }).join('');\\n    return this._longDateFormat[key];\\n  }\\n  var defaultInvalidDate = 'Invalid date';\\n  function invalidDate() {\\n    return this._invalidDate;\\n  }\\n  var defaultOrdinal = '%d',\\n    defaultDayOfMonthOrdinalParse = /\\\\d{1,2}/;\\n  function ordinal(number) {\\n    return this._ordinal.replace('%d', number);\\n  }\\n  var defaultRelativeTime = {\\n    future: 'in %s',\\n    past: '%s ago',\\n    s: 'a few seconds',\\n    ss: '%d seconds',\\n    m: 'a minute',\\n    mm: '%d minutes',\\n    h: 'an hour',\\n    hh: '%d hours',\\n    d: 'a day',\\n    dd: '%d days',\\n    w: 'a week',\\n    ww: '%d weeks',\\n    M: 'a month',\\n    MM: '%d months',\\n    y: 'a year',\\n    yy: '%d years'\\n  };\\n  function relativeTime(number, withoutSuffix, string, isFuture) {\\n    var output = this._relativeTime[string];\\n    return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\\n  }\\n  function pastFuture(diff, output) {\\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\\n  }\\n  var aliases = {};\\n  function addUnitAlias(unit, shorthand) {\\n    var lowerCase = unit.toLowerCase();\\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\\n  }\\n  function normalizeUnits(units) {\\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\\n  }\\n  function normalizeObjectUnits(inputObject) {\\n    var normalizedInput = {},\\n      normalizedProp,\\n      prop;\\n    for (prop in inputObject) {\\n      if (hasOwnProp(inputObject, prop)) {\\n        normalizedProp = normalizeUnits(prop);\\n        if (normalizedProp) {\\n          normalizedInput[normalizedProp] = inputObject[prop];\\n        }\\n      }\\n    }\\n    return normalizedInput;\\n  }\\n  var priorities = {};\\n  function addUnitPriority(unit, priority) {\\n    priorities[unit] = priority;\\n  }\\n  function getPrioritizedUnits(unitsObj) {\\n    var units = [],\\n      u;\\n    for (u in unitsObj) {\\n      if (hasOwnProp(unitsObj, u)) {\\n        units.push({\\n          unit: u,\\n          priority: priorities[u]\\n        });\\n      }\\n    }\\n    units.sort(function (a, b) {\\n      return a.priority - b.priority;\\n    });\\n    return units;\\n  }\\n  function isLeapYear(year) {\\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\\n  }\\n  function absFloor(number) {\\n    if (number < 0) {\\n      // -0 -> 0\\n      return Math.ceil(number) || 0;\\n    } else {\\n      return Math.floor(number);\\n    }\\n  }\\n  function toInt(argumentForCoercion) {\\n    var coercedNumber = +argumentForCoercion,\\n      value = 0;\\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\\n      value = absFloor(coercedNumber);\\n    }\\n    return value;\\n  }\\n  function makeGetSet(unit, keepTime) {\\n    return function (value) {\\n      if (value != null) {\\n        set$1(this, unit, value);\\n        hooks.updateOffset(this, keepTime);\\n        return this;\\n      } else {\\n        return get(this, unit);\\n      }\\n    };\\n  }\\n  function get(mom, unit) {\\n    return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\\n  }\\n  function set$1(mom, unit, value) {\\n    if (mom.isValid() && !isNaN(value)) {\\n      if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\\n        value = toInt(value);\\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\\n      } else {\\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\\n      }\\n    }\\n  }\\n\\n  // MOMENTS\\n\\n  function stringGet(units) {\\n    units = normalizeUnits(units);\\n    if (isFunction(this[units])) {\\n      return this[units]();\\n    }\\n    return this;\\n  }\\n  function stringSet(units, value) {\\n    if (_typeof(units) === 'object') {\\n      units = normalizeObjectUnits(units);\\n      var prioritized = getPrioritizedUnits(units),\\n        i;\\n      for (i = 0; i < prioritized.length; i++) {\\n        this[prioritized[i].unit](units[prioritized[i].unit]);\\n      }\\n    } else {\\n      units = normalizeUnits(units);\\n      if (isFunction(this[units])) {\\n        return this[units](value);\\n      }\\n    }\\n    return this;\\n  }\\n  var match1 = /\\\\d/,\\n    //       0 - 9\\n    match2 = /\\\\d\\\\d/,\\n    //      00 - 99\\n    match3 = /\\\\d{3}/,\\n    //     000 - 999\\n    match4 = /\\\\d{4}/,\\n    //    0000 - 9999\\n    match6 = /[+-]?\\\\d{6}/,\\n    // -999999 - 999999\\n    match1to2 = /\\\\d\\\\d?/,\\n    //       0 - 99\\n    match3to4 = /\\\\d\\\\d\\\\d\\\\d?/,\\n    //     999 - 9999\\n    match5to6 = /\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d?/,\\n    //   99999 - 999999\\n    match1to3 = /\\\\d{1,3}/,\\n    //       0 - 999\\n    match1to4 = /\\\\d{1,4}/,\\n    //       0 - 9999\\n    match1to6 = /[+-]?\\\\d{1,6}/,\\n    // -999999 - 999999\\n    matchUnsigned = /\\\\d+/,\\n    //       0 - inf\\n    matchSigned = /[+-]?\\\\d+/,\\n    //    -inf - inf\\n    matchOffset = /Z|[+-]\\\\d\\\\d:?\\\\d\\\\d/gi,\\n    // +00:00 -00:00 +0000 -0000 or Z\\n    matchShortOffset = /Z|[+-]\\\\d\\\\d(?::?\\\\d\\\\d)?/gi,\\n    // +00 -00 +00:00 -00:00 +0000 -0000 or Z\\n    matchTimestamp = /[+-]?\\\\d+(\\\\.\\\\d{1,3})?/,\\n    // 123456789 123456789.123\\n    // any word (or two) characters or numbers including two/three word month in arabic.\\n    // includes scottish gaelic two word and hyphenated months\\n    matchWord = /[0-9]{0,256}['a-z\\\\u00A0-\\\\u05FF\\\\u0700-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFF07\\\\uFF10-\\\\uFFEF]{1,256}|[\\\\u0600-\\\\u06FF\\\\/]{1,256}(\\\\s*?[\\\\u0600-\\\\u06FF]{1,256}){1,2}/i,\\n    regexes;\\n  regexes = {};\\n  function addRegexToken(token, regex, strictRegex) {\\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\\n      return isStrict && strictRegex ? strictRegex : regex;\\n    };\\n  }\\n  function getParseRegexForToken(token, config) {\\n    if (!hasOwnProp(regexes, token)) {\\n      return new RegExp(unescapeFormat(token));\\n    }\\n    return regexes[token](config._strict, config._locale);\\n  }\\n\\n  // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\\n  function unescapeFormat(s) {\\n    return regexEscape(s.replace('\\\\\\\\', '').replace(/\\\\\\\\(\\\\[)|\\\\\\\\(\\\\])|\\\\[([^\\\\]\\\\[]*)\\\\]|\\\\\\\\(.)/g, function (matched, p1, p2, p3, p4) {\\n      return p1 || p2 || p3 || p4;\\n    }));\\n  }\\n  function regexEscape(s) {\\n    return s.replace(/[-\\\\/\\\\\\\\^$*+?.()|[\\\\]{}]/g, '\\\\\\\\$&');\\n  }\\n  var tokens = {};\\n  function addParseToken(token, callback) {\\n    var i,\\n      func = callback;\\n    if (typeof token === 'string') {\\n      token = [token];\\n    }\\n    if (isNumber(callback)) {\\n      func = function func(input, array) {\\n        array[callback] = toInt(input);\\n      };\\n    }\\n    for (i = 0; i < token.length; i++) {\\n      tokens[token[i]] = func;\\n    }\\n  }\\n  function addWeekParseToken(token, callback) {\\n    addParseToken(token, function (input, array, config, token) {\\n      config._w = config._w || {};\\n      callback(input, config._w, config, token);\\n    });\\n  }\\n  function addTimeToArrayFromToken(token, input, config) {\\n    if (input != null && hasOwnProp(tokens, token)) {\\n      tokens[token](input, config._a, config, token);\\n    }\\n  }\\n  var YEAR = 0,\\n    MONTH = 1,\\n    DATE = 2,\\n    HOUR = 3,\\n    MINUTE = 4,\\n    SECOND = 5,\\n    MILLISECOND = 6,\\n    WEEK = 7,\\n    WEEKDAY = 8;\\n  function mod(n, x) {\\n    return (n % x + x) % x;\\n  }\\n  var indexOf;\\n  if (Array.prototype.indexOf) {\\n    indexOf = Array.prototype.indexOf;\\n  } else {\\n    indexOf = function indexOf(o) {\\n      // I know\\n      var i;\\n      for (i = 0; i < this.length; ++i) {\\n        if (this[i] === o) {\\n          return i;\\n        }\\n      }\\n      return -1;\\n    };\\n  }\\n  function daysInMonth(year, month) {\\n    if (isNaN(year) || isNaN(month)) {\\n      return NaN;\\n    }\\n    var modMonth = mod(month, 12);\\n    year += (month - modMonth) / 12;\\n    return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('M', ['MM', 2], 'Mo', function () {\\n    return this.month() + 1;\\n  });\\n  addFormatToken('MMM', 0, 0, function (format) {\\n    return this.localeData().monthsShort(this, format);\\n  });\\n  addFormatToken('MMMM', 0, 0, function (format) {\\n    return this.localeData().months(this, format);\\n  });\\n\\n  // ALIASES\\n\\n  addUnitAlias('month', 'M');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('month', 8);\\n\\n  // PARSING\\n\\n  addRegexToken('M', match1to2);\\n  addRegexToken('MM', match1to2, match2);\\n  addRegexToken('MMM', function (isStrict, locale) {\\n    return locale.monthsShortRegex(isStrict);\\n  });\\n  addRegexToken('MMMM', function (isStrict, locale) {\\n    return locale.monthsRegex(isStrict);\\n  });\\n  addParseToken(['M', 'MM'], function (input, array) {\\n    array[MONTH] = toInt(input) - 1;\\n  });\\n  addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\\n    var month = config._locale.monthsParse(input, token, config._strict);\\n    // if we didn't find a month name, mark the date as invalid.\\n    if (month != null) {\\n      array[MONTH] = month;\\n    } else {\\n      getParsingFlags(config).invalidMonth = input;\\n    }\\n  });\\n\\n  // LOCALES\\n\\n  var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\\n    defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\\n    MONTHS_IN_FORMAT = /D[oD]?(\\\\[[^\\\\[\\\\]]*\\\\]|\\\\s)+MMMM?/,\\n    defaultMonthsShortRegex = matchWord,\\n    defaultMonthsRegex = matchWord;\\n  function localeMonths(m, format) {\\n    if (!m) {\\n      return isArray(this._months) ? this._months : this._months['standalone'];\\n    }\\n    return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\\n  }\\n  function localeMonthsShort(m, format) {\\n    if (!m) {\\n      return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\\n    }\\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\\n  }\\n  function handleStrictParse(monthName, format, strict) {\\n    var i,\\n      ii,\\n      mom,\\n      llc = monthName.toLocaleLowerCase();\\n    if (!this._monthsParse) {\\n      // this is not used\\n      this._monthsParse = [];\\n      this._longMonthsParse = [];\\n      this._shortMonthsParse = [];\\n      for (i = 0; i < 12; ++i) {\\n        mom = createUTC([2000, i]);\\n        this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\\n        this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\\n      }\\n    }\\n    if (strict) {\\n      if (format === 'MMM') {\\n        ii = indexOf.call(this._shortMonthsParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else {\\n        ii = indexOf.call(this._longMonthsParse, llc);\\n        return ii !== -1 ? ii : null;\\n      }\\n    } else {\\n      if (format === 'MMM') {\\n        ii = indexOf.call(this._shortMonthsParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._longMonthsParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else {\\n        ii = indexOf.call(this._longMonthsParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._shortMonthsParse, llc);\\n        return ii !== -1 ? ii : null;\\n      }\\n    }\\n  }\\n  function localeMonthsParse(monthName, format, strict) {\\n    var i, mom, regex;\\n    if (this._monthsParseExact) {\\n      return handleStrictParse.call(this, monthName, format, strict);\\n    }\\n    if (!this._monthsParse) {\\n      this._monthsParse = [];\\n      this._longMonthsParse = [];\\n      this._shortMonthsParse = [];\\n    }\\n\\n    // TODO: add sorting\\n    // Sorting makes sure if one month (or abbr) is a prefix of another\\n    // see sorting in computeMonthsParse\\n    for (i = 0; i < 12; i++) {\\n      // make the regex if we don't have it already\\n      mom = createUTC([2000, i]);\\n      if (strict && !this._longMonthsParse[i]) {\\n        this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\\n        this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\\n      }\\n      if (!strict && !this._monthsParse[i]) {\\n        regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\\n        this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\\n      }\\n      // test the regex\\n      if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\\n        return i;\\n      } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\\n        return i;\\n      } else if (!strict && this._monthsParse[i].test(monthName)) {\\n        return i;\\n      }\\n    }\\n  }\\n\\n  // MOMENTS\\n\\n  function setMonth(mom, value) {\\n    var dayOfMonth;\\n    if (!mom.isValid()) {\\n      // No op\\n      return mom;\\n    }\\n    if (typeof value === 'string') {\\n      if (/^\\\\d+$/.test(value)) {\\n        value = toInt(value);\\n      } else {\\n        value = mom.localeData().monthsParse(value);\\n        // TODO: Another silent failure?\\n        if (!isNumber(value)) {\\n          return mom;\\n        }\\n      }\\n    }\\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\\n    return mom;\\n  }\\n  function getSetMonth(value) {\\n    if (value != null) {\\n      setMonth(this, value);\\n      hooks.updateOffset(this, true);\\n      return this;\\n    } else {\\n      return get(this, 'Month');\\n    }\\n  }\\n  function getDaysInMonth() {\\n    return daysInMonth(this.year(), this.month());\\n  }\\n  function monthsShortRegex(isStrict) {\\n    if (this._monthsParseExact) {\\n      if (!hasOwnProp(this, '_monthsRegex')) {\\n        computeMonthsParse.call(this);\\n      }\\n      if (isStrict) {\\n        return this._monthsShortStrictRegex;\\n      } else {\\n        return this._monthsShortRegex;\\n      }\\n    } else {\\n      if (!hasOwnProp(this, '_monthsShortRegex')) {\\n        this._monthsShortRegex = defaultMonthsShortRegex;\\n      }\\n      return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\\n    }\\n  }\\n  function monthsRegex(isStrict) {\\n    if (this._monthsParseExact) {\\n      if (!hasOwnProp(this, '_monthsRegex')) {\\n        computeMonthsParse.call(this);\\n      }\\n      if (isStrict) {\\n        return this._monthsStrictRegex;\\n      } else {\\n        return this._monthsRegex;\\n      }\\n    } else {\\n      if (!hasOwnProp(this, '_monthsRegex')) {\\n        this._monthsRegex = defaultMonthsRegex;\\n      }\\n      return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\\n    }\\n  }\\n  function computeMonthsParse() {\\n    function cmpLenRev(a, b) {\\n      return b.length - a.length;\\n    }\\n    var shortPieces = [],\\n      longPieces = [],\\n      mixedPieces = [],\\n      i,\\n      mom;\\n    for (i = 0; i < 12; i++) {\\n      // make the regex if we don't have it already\\n      mom = createUTC([2000, i]);\\n      shortPieces.push(this.monthsShort(mom, ''));\\n      longPieces.push(this.months(mom, ''));\\n      mixedPieces.push(this.months(mom, ''));\\n      mixedPieces.push(this.monthsShort(mom, ''));\\n    }\\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\\n    // will match the longer piece.\\n    shortPieces.sort(cmpLenRev);\\n    longPieces.sort(cmpLenRev);\\n    mixedPieces.sort(cmpLenRev);\\n    for (i = 0; i < 12; i++) {\\n      shortPieces[i] = regexEscape(shortPieces[i]);\\n      longPieces[i] = regexEscape(longPieces[i]);\\n    }\\n    for (i = 0; i < 24; i++) {\\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\\n    }\\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\\n    this._monthsShortRegex = this._monthsRegex;\\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('Y', 0, 0, function () {\\n    var y = this.year();\\n    return y <= 9999 ? zeroFill(y, 4) : '+' + y;\\n  });\\n  addFormatToken(0, ['YY', 2], 0, function () {\\n    return this.year() % 100;\\n  });\\n  addFormatToken(0, ['YYYY', 4], 0, 'year');\\n  addFormatToken(0, ['YYYYY', 5], 0, 'year');\\n  addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\\n\\n  // ALIASES\\n\\n  addUnitAlias('year', 'y');\\n\\n  // PRIORITIES\\n\\n  addUnitPriority('year', 1);\\n\\n  // PARSING\\n\\n  addRegexToken('Y', matchSigned);\\n  addRegexToken('YY', match1to2, match2);\\n  addRegexToken('YYYY', match1to4, match4);\\n  addRegexToken('YYYYY', match1to6, match6);\\n  addRegexToken('YYYYYY', match1to6, match6);\\n  addParseToken(['YYYYY', 'YYYYYY'], YEAR);\\n  addParseToken('YYYY', function (input, array) {\\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\\n  });\\n  addParseToken('YY', function (input, array) {\\n    array[YEAR] = hooks.parseTwoDigitYear(input);\\n  });\\n  addParseToken('Y', function (input, array) {\\n    array[YEAR] = parseInt(input, 10);\\n  });\\n\\n  // HELPERS\\n\\n  function daysInYear(year) {\\n    return isLeapYear(year) ? 366 : 365;\\n  }\\n\\n  // HOOKS\\n\\n  hooks.parseTwoDigitYear = function (input) {\\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\\n  };\\n\\n  // MOMENTS\\n\\n  var getSetYear = makeGetSet('FullYear', true);\\n  function getIsLeapYear() {\\n    return isLeapYear(this.year());\\n  }\\n  function createDate(y, m, d, h, M, s, ms) {\\n    // can't just apply() to create a date:\\n    // https://stackoverflow.com/q/181348\\n    var date;\\n    // the date constructor remaps years 0-99 to 1900-1999\\n    if (y < 100 && y >= 0) {\\n      // preserve leap years using a full 400 year cycle, then reset\\n      date = new Date(y + 400, m, d, h, M, s, ms);\\n      if (isFinite(date.getFullYear())) {\\n        date.setFullYear(y);\\n      }\\n    } else {\\n      date = new Date(y, m, d, h, M, s, ms);\\n    }\\n    return date;\\n  }\\n  function createUTCDate(y) {\\n    var date, args;\\n    // the Date.UTC function remaps years 0-99 to 1900-1999\\n    if (y < 100 && y >= 0) {\\n      args = Array.prototype.slice.call(arguments);\\n      // preserve leap years using a full 400 year cycle, then reset\\n      args[0] = y + 400;\\n      date = new Date(Date.UTC.apply(null, args));\\n      if (isFinite(date.getUTCFullYear())) {\\n        date.setUTCFullYear(y);\\n      }\\n    } else {\\n      date = new Date(Date.UTC.apply(null, arguments));\\n    }\\n    return date;\\n  }\\n\\n  // start-of-first-week - start-of-year\\n  function firstWeekOffset(year, dow, doy) {\\n    var\\n      // first-week day -- which january is always in the first week (4 for iso, 1 for other)\\n      fwd = 7 + dow - doy,\\n      // first-week day local weekday -- which local weekday is fwd\\n      fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\\n    return -fwdlw + fwd - 1;\\n  }\\n\\n  // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\\n  function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\\n    var localWeekday = (7 + weekday - dow) % 7,\\n      weekOffset = firstWeekOffset(year, dow, doy),\\n      dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\\n      resYear,\\n      resDayOfYear;\\n    if (dayOfYear <= 0) {\\n      resYear = year - 1;\\n      resDayOfYear = daysInYear(resYear) + dayOfYear;\\n    } else if (dayOfYear > daysInYear(year)) {\\n      resYear = year + 1;\\n      resDayOfYear = dayOfYear - daysInYear(year);\\n    } else {\\n      resYear = year;\\n      resDayOfYear = dayOfYear;\\n    }\\n    return {\\n      year: resYear,\\n      dayOfYear: resDayOfYear\\n    };\\n  }\\n  function weekOfYear(mom, dow, doy) {\\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\\n      week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\\n      resWeek,\\n      resYear;\\n    if (week < 1) {\\n      resYear = mom.year() - 1;\\n      resWeek = week + weeksInYear(resYear, dow, doy);\\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\\n      resWeek = week - weeksInYear(mom.year(), dow, doy);\\n      resYear = mom.year() + 1;\\n    } else {\\n      resYear = mom.year();\\n      resWeek = week;\\n    }\\n    return {\\n      week: resWeek,\\n      year: resYear\\n    };\\n  }\\n  function weeksInYear(year, dow, doy) {\\n    var weekOffset = firstWeekOffset(year, dow, doy),\\n      weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('w', ['ww', 2], 'wo', 'week');\\n  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\\n\\n  // ALIASES\\n\\n  addUnitAlias('week', 'w');\\n  addUnitAlias('isoWeek', 'W');\\n\\n  // PRIORITIES\\n\\n  addUnitPriority('week', 5);\\n  addUnitPriority('isoWeek', 5);\\n\\n  // PARSING\\n\\n  addRegexToken('w', match1to2);\\n  addRegexToken('ww', match1to2, match2);\\n  addRegexToken('W', match1to2);\\n  addRegexToken('WW', match1to2, match2);\\n  addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\\n    week[token.substr(0, 1)] = toInt(input);\\n  });\\n\\n  // HELPERS\\n\\n  // LOCALES\\n\\n  function localeWeek(mom) {\\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\\n  }\\n  var defaultLocaleWeek = {\\n    dow: 0,\\n    // Sunday is the first day of the week.\\n    doy: 6 // The week that contains Jan 6th is the first week of the year.\\n  };\\n  function localeFirstDayOfWeek() {\\n    return this._week.dow;\\n  }\\n  function localeFirstDayOfYear() {\\n    return this._week.doy;\\n  }\\n\\n  // MOMENTS\\n\\n  function getSetWeek(input) {\\n    var week = this.localeData().week(this);\\n    return input == null ? week : this.add((input - week) * 7, 'd');\\n  }\\n  function getSetISOWeek(input) {\\n    var week = weekOfYear(this, 1, 4).week;\\n    return input == null ? week : this.add((input - week) * 7, 'd');\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('d', 0, 'do', 'day');\\n  addFormatToken('dd', 0, 0, function (format) {\\n    return this.localeData().weekdaysMin(this, format);\\n  });\\n  addFormatToken('ddd', 0, 0, function (format) {\\n    return this.localeData().weekdaysShort(this, format);\\n  });\\n  addFormatToken('dddd', 0, 0, function (format) {\\n    return this.localeData().weekdays(this, format);\\n  });\\n  addFormatToken('e', 0, 0, 'weekday');\\n  addFormatToken('E', 0, 0, 'isoWeekday');\\n\\n  // ALIASES\\n\\n  addUnitAlias('day', 'd');\\n  addUnitAlias('weekday', 'e');\\n  addUnitAlias('isoWeekday', 'E');\\n\\n  // PRIORITY\\n  addUnitPriority('day', 11);\\n  addUnitPriority('weekday', 11);\\n  addUnitPriority('isoWeekday', 11);\\n\\n  // PARSING\\n\\n  addRegexToken('d', match1to2);\\n  addRegexToken('e', match1to2);\\n  addRegexToken('E', match1to2);\\n  addRegexToken('dd', function (isStrict, locale) {\\n    return locale.weekdaysMinRegex(isStrict);\\n  });\\n  addRegexToken('ddd', function (isStrict, locale) {\\n    return locale.weekdaysShortRegex(isStrict);\\n  });\\n  addRegexToken('dddd', function (isStrict, locale) {\\n    return locale.weekdaysRegex(isStrict);\\n  });\\n  addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\\n    // if we didn't get a weekday name, mark the date as invalid\\n    if (weekday != null) {\\n      week.d = weekday;\\n    } else {\\n      getParsingFlags(config).invalidWeekday = input;\\n    }\\n  });\\n  addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\\n    week[token] = toInt(input);\\n  });\\n\\n  // HELPERS\\n\\n  function parseWeekday(input, locale) {\\n    if (typeof input !== 'string') {\\n      return input;\\n    }\\n    if (!isNaN(input)) {\\n      return parseInt(input, 10);\\n    }\\n    input = locale.weekdaysParse(input);\\n    if (typeof input === 'number') {\\n      return input;\\n    }\\n    return null;\\n  }\\n  function parseIsoWeekday(input, locale) {\\n    if (typeof input === 'string') {\\n      return locale.weekdaysParse(input) % 7 || 7;\\n    }\\n    return isNaN(input) ? null : input;\\n  }\\n\\n  // LOCALES\\n  function shiftWeekdays(ws, n) {\\n    return ws.slice(n, 7).concat(ws.slice(0, n));\\n  }\\n  var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\\n    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\\n    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\\n    defaultWeekdaysRegex = matchWord,\\n    defaultWeekdaysShortRegex = matchWord,\\n    defaultWeekdaysMinRegex = matchWord;\\n  function localeWeekdays(m, format) {\\n    var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\\n    return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\\n  }\\n  function localeWeekdaysShort(m) {\\n    return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\\n  }\\n  function localeWeekdaysMin(m) {\\n    return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\\n  }\\n  function handleStrictParse$1(weekdayName, format, strict) {\\n    var i,\\n      ii,\\n      mom,\\n      llc = weekdayName.toLocaleLowerCase();\\n    if (!this._weekdaysParse) {\\n      this._weekdaysParse = [];\\n      this._shortWeekdaysParse = [];\\n      this._minWeekdaysParse = [];\\n      for (i = 0; i < 7; ++i) {\\n        mom = createUTC([2000, 1]).day(i);\\n        this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\\n        this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\\n        this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\\n      }\\n    }\\n    if (strict) {\\n      if (format === 'dddd') {\\n        ii = indexOf.call(this._weekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else if (format === 'ddd') {\\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else {\\n        ii = indexOf.call(this._minWeekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      }\\n    } else {\\n      if (format === 'dddd') {\\n        ii = indexOf.call(this._weekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._minWeekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else if (format === 'ddd') {\\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._weekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._minWeekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      } else {\\n        ii = indexOf.call(this._minWeekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._weekdaysParse, llc);\\n        if (ii !== -1) {\\n          return ii;\\n        }\\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\\n        return ii !== -1 ? ii : null;\\n      }\\n    }\\n  }\\n  function localeWeekdaysParse(weekdayName, format, strict) {\\n    var i, mom, regex;\\n    if (this._weekdaysParseExact) {\\n      return handleStrictParse$1.call(this, weekdayName, format, strict);\\n    }\\n    if (!this._weekdaysParse) {\\n      this._weekdaysParse = [];\\n      this._minWeekdaysParse = [];\\n      this._shortWeekdaysParse = [];\\n      this._fullWeekdaysParse = [];\\n    }\\n    for (i = 0; i < 7; i++) {\\n      // make the regex if we don't have it already\\n\\n      mom = createUTC([2000, 1]).day(i);\\n      if (strict && !this._fullWeekdaysParse[i]) {\\n        this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\\\\\.?') + '$', 'i');\\n        this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\\\\\.?') + '$', 'i');\\n        this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\\\\\.?') + '$', 'i');\\n      }\\n      if (!this._weekdaysParse[i]) {\\n        regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\\n        this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\\n      }\\n      // test the regex\\n      if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\\n        return i;\\n      } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\\n        return i;\\n      } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\\n        return i;\\n      } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\\n        return i;\\n      }\\n    }\\n  }\\n\\n  // MOMENTS\\n\\n  function getSetDayOfWeek(input) {\\n    if (!this.isValid()) {\\n      return input != null ? this : NaN;\\n    }\\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\\n    if (input != null) {\\n      input = parseWeekday(input, this.localeData());\\n      return this.add(input - day, 'd');\\n    } else {\\n      return day;\\n    }\\n  }\\n  function getSetLocaleDayOfWeek(input) {\\n    if (!this.isValid()) {\\n      return input != null ? this : NaN;\\n    }\\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\\n    return input == null ? weekday : this.add(input - weekday, 'd');\\n  }\\n  function getSetISODayOfWeek(input) {\\n    if (!this.isValid()) {\\n      return input != null ? this : NaN;\\n    }\\n\\n    // behaves the same as moment#day except\\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\\n    // as a setter, sunday should belong to the previous week.\\n\\n    if (input != null) {\\n      var weekday = parseIsoWeekday(input, this.localeData());\\n      return this.day(this.day() % 7 ? weekday : weekday - 7);\\n    } else {\\n      return this.day() || 7;\\n    }\\n  }\\n  function weekdaysRegex(isStrict) {\\n    if (this._weekdaysParseExact) {\\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\\n        computeWeekdaysParse.call(this);\\n      }\\n      if (isStrict) {\\n        return this._weekdaysStrictRegex;\\n      } else {\\n        return this._weekdaysRegex;\\n      }\\n    } else {\\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\\n        this._weekdaysRegex = defaultWeekdaysRegex;\\n      }\\n      return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\\n    }\\n  }\\n  function weekdaysShortRegex(isStrict) {\\n    if (this._weekdaysParseExact) {\\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\\n        computeWeekdaysParse.call(this);\\n      }\\n      if (isStrict) {\\n        return this._weekdaysShortStrictRegex;\\n      } else {\\n        return this._weekdaysShortRegex;\\n      }\\n    } else {\\n      if (!hasOwnProp(this, '_weekdaysShortRegex')) {\\n        this._weekdaysShortRegex = defaultWeekdaysShortRegex;\\n      }\\n      return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\\n    }\\n  }\\n  function weekdaysMinRegex(isStrict) {\\n    if (this._weekdaysParseExact) {\\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\\n        computeWeekdaysParse.call(this);\\n      }\\n      if (isStrict) {\\n        return this._weekdaysMinStrictRegex;\\n      } else {\\n        return this._weekdaysMinRegex;\\n      }\\n    } else {\\n      if (!hasOwnProp(this, '_weekdaysMinRegex')) {\\n        this._weekdaysMinRegex = defaultWeekdaysMinRegex;\\n      }\\n      return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\\n    }\\n  }\\n  function computeWeekdaysParse() {\\n    function cmpLenRev(a, b) {\\n      return b.length - a.length;\\n    }\\n    var minPieces = [],\\n      shortPieces = [],\\n      longPieces = [],\\n      mixedPieces = [],\\n      i,\\n      mom,\\n      minp,\\n      shortp,\\n      longp;\\n    for (i = 0; i < 7; i++) {\\n      // make the regex if we don't have it already\\n      mom = createUTC([2000, 1]).day(i);\\n      minp = regexEscape(this.weekdaysMin(mom, ''));\\n      shortp = regexEscape(this.weekdaysShort(mom, ''));\\n      longp = regexEscape(this.weekdays(mom, ''));\\n      minPieces.push(minp);\\n      shortPieces.push(shortp);\\n      longPieces.push(longp);\\n      mixedPieces.push(minp);\\n      mixedPieces.push(shortp);\\n      mixedPieces.push(longp);\\n    }\\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\\n    // will match the longer piece.\\n    minPieces.sort(cmpLenRev);\\n    shortPieces.sort(cmpLenRev);\\n    longPieces.sort(cmpLenRev);\\n    mixedPieces.sort(cmpLenRev);\\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\\n    this._weekdaysShortRegex = this._weekdaysRegex;\\n    this._weekdaysMinRegex = this._weekdaysRegex;\\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\\n  }\\n\\n  // FORMATTING\\n\\n  function hFormat() {\\n    return this.hours() % 12 || 12;\\n  }\\n  function kFormat() {\\n    return this.hours() || 24;\\n  }\\n  addFormatToken('H', ['HH', 2], 0, 'hour');\\n  addFormatToken('h', ['hh', 2], 0, hFormat);\\n  addFormatToken('k', ['kk', 2], 0, kFormat);\\n  addFormatToken('hmm', 0, 0, function () {\\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\\n  });\\n  addFormatToken('hmmss', 0, 0, function () {\\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\\n  });\\n  addFormatToken('Hmm', 0, 0, function () {\\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\\n  });\\n  addFormatToken('Hmmss', 0, 0, function () {\\n    return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\\n  });\\n  function meridiem(token, lowercase) {\\n    addFormatToken(token, 0, 0, function () {\\n      return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\\n    });\\n  }\\n  meridiem('a', true);\\n  meridiem('A', false);\\n\\n  // ALIASES\\n\\n  addUnitAlias('hour', 'h');\\n\\n  // PRIORITY\\n  addUnitPriority('hour', 13);\\n\\n  // PARSING\\n\\n  function matchMeridiem(isStrict, locale) {\\n    return locale._meridiemParse;\\n  }\\n  addRegexToken('a', matchMeridiem);\\n  addRegexToken('A', matchMeridiem);\\n  addRegexToken('H', match1to2);\\n  addRegexToken('h', match1to2);\\n  addRegexToken('k', match1to2);\\n  addRegexToken('HH', match1to2, match2);\\n  addRegexToken('hh', match1to2, match2);\\n  addRegexToken('kk', match1to2, match2);\\n  addRegexToken('hmm', match3to4);\\n  addRegexToken('hmmss', match5to6);\\n  addRegexToken('Hmm', match3to4);\\n  addRegexToken('Hmmss', match5to6);\\n  addParseToken(['H', 'HH'], HOUR);\\n  addParseToken(['k', 'kk'], function (input, array, config) {\\n    var kInput = toInt(input);\\n    array[HOUR] = kInput === 24 ? 0 : kInput;\\n  });\\n  addParseToken(['a', 'A'], function (input, array, config) {\\n    config._isPm = config._locale.isPM(input);\\n    config._meridiem = input;\\n  });\\n  addParseToken(['h', 'hh'], function (input, array, config) {\\n    array[HOUR] = toInt(input);\\n    getParsingFlags(config).bigHour = true;\\n  });\\n  addParseToken('hmm', function (input, array, config) {\\n    var pos = input.length - 2;\\n    array[HOUR] = toInt(input.substr(0, pos));\\n    array[MINUTE] = toInt(input.substr(pos));\\n    getParsingFlags(config).bigHour = true;\\n  });\\n  addParseToken('hmmss', function (input, array, config) {\\n    var pos1 = input.length - 4,\\n      pos2 = input.length - 2;\\n    array[HOUR] = toInt(input.substr(0, pos1));\\n    array[MINUTE] = toInt(input.substr(pos1, 2));\\n    array[SECOND] = toInt(input.substr(pos2));\\n    getParsingFlags(config).bigHour = true;\\n  });\\n  addParseToken('Hmm', function (input, array, config) {\\n    var pos = input.length - 2;\\n    array[HOUR] = toInt(input.substr(0, pos));\\n    array[MINUTE] = toInt(input.substr(pos));\\n  });\\n  addParseToken('Hmmss', function (input, array, config) {\\n    var pos1 = input.length - 4,\\n      pos2 = input.length - 2;\\n    array[HOUR] = toInt(input.substr(0, pos1));\\n    array[MINUTE] = toInt(input.substr(pos1, 2));\\n    array[SECOND] = toInt(input.substr(pos2));\\n  });\\n\\n  // LOCALES\\n\\n  function localeIsPM(input) {\\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\\n    // Using charAt should be more compatible.\\n    return (input + '').toLowerCase().charAt(0) === 'p';\\n  }\\n  var defaultLocaleMeridiemParse = /[ap]\\\\.?m?\\\\.?/i,\\n    // Setting the hour should keep the time, because the user explicitly\\n    // specified which hour they want. So trying to maintain the same hour (in\\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\\n    // this rule.\\n    getSetHour = makeGetSet('Hours', true);\\n  function localeMeridiem(hours, minutes, isLower) {\\n    if (hours > 11) {\\n      return isLower ? 'pm' : 'PM';\\n    } else {\\n      return isLower ? 'am' : 'AM';\\n    }\\n  }\\n  var baseConfig = {\\n    calendar: defaultCalendar,\\n    longDateFormat: defaultLongDateFormat,\\n    invalidDate: defaultInvalidDate,\\n    ordinal: defaultOrdinal,\\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\\n    relativeTime: defaultRelativeTime,\\n    months: defaultLocaleMonths,\\n    monthsShort: defaultLocaleMonthsShort,\\n    week: defaultLocaleWeek,\\n    weekdays: defaultLocaleWeekdays,\\n    weekdaysMin: defaultLocaleWeekdaysMin,\\n    weekdaysShort: defaultLocaleWeekdaysShort,\\n    meridiemParse: defaultLocaleMeridiemParse\\n  };\\n\\n  // internal storage for locale config files\\n  var locales = {},\\n    localeFamilies = {},\\n    globalLocale;\\n  function commonPrefix(arr1, arr2) {\\n    var i,\\n      minl = Math.min(arr1.length, arr2.length);\\n    for (i = 0; i < minl; i += 1) {\\n      if (arr1[i] !== arr2[i]) {\\n        return i;\\n      }\\n    }\\n    return minl;\\n  }\\n  function normalizeLocale(key) {\\n    return key ? key.toLowerCase().replace('_', '-') : key;\\n  }\\n\\n  // pick the locale from the array\\n  // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\\n  // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\\n  function chooseLocale(names) {\\n    var i = 0,\\n      j,\\n      next,\\n      locale,\\n      split;\\n    while (i < names.length) {\\n      split = normalizeLocale(names[i]).split('-');\\n      j = split.length;\\n      next = normalizeLocale(names[i + 1]);\\n      next = next ? next.split('-') : null;\\n      while (j > 0) {\\n        locale = loadLocale(split.slice(0, j).join('-'));\\n        if (locale) {\\n          return locale;\\n        }\\n        if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\\n          //the next array item is better than a shallower substring of this one\\n          break;\\n        }\\n        j--;\\n      }\\n      i++;\\n    }\\n    return globalLocale;\\n  }\\n  function loadLocale(name) {\\n    var oldLocale = null,\\n      aliasedRequire;\\n    // TODO: Find a better way to register and load all the locales in Node\\n    /*  if (\\r\\n         locales[name] === undefined &&\\r\\n         typeof module !== 'undefined' &&\\r\\n         module &&\\r\\n         module.exports\\r\\n     ) {\\r\\n         try {\\r\\n             oldLocale = globalLocale._abbr;\\r\\n             aliasedRequire = require;\\r\\n             aliasedRequire('./locale/' + name);\\r\\n             getSetGlobalLocale(oldLocale);\\r\\n         } catch (e) {\\r\\n             // mark as not found to avoid repeating expensive file require call causing high CPU\\r\\n             // when trying to find en-US, en_US, en-us for every format call\\r\\n             locales[name] = null; // null means not found\\r\\n         }\\r\\n     }*/\\n    return locales[name];\\n  }\\n\\n  // This function will load locale and then set the global locale.  If\\n  // no arguments are passed in, it will simply return the current global\\n  // locale key.\\n  function getSetGlobalLocale(key, values) {\\n    var data;\\n    if (key) {\\n      if (isUndefined(values)) {\\n        data = getLocale(key);\\n      } else {\\n        data = defineLocale(key, values);\\n      }\\n      if (data) {\\n        // moment.duration._locale = moment._locale = data;\\n        globalLocale = data;\\n      } else {\\n        if (typeof console !== 'undefined' && console.warn) {\\n          //warn user if arguments are passed but the locale could not be set\\n          console.warn('Locale ' + key + ' not found. Did you forget to load it?');\\n        }\\n      }\\n    }\\n    return globalLocale._abbr;\\n  }\\n  function defineLocale(name, config) {\\n    if (config !== null) {\\n      var locale,\\n        parentConfig = baseConfig;\\n      config.abbr = name;\\n      if (locales[name] != null) {\\n        deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\\n        parentConfig = locales[name]._config;\\n      } else if (config.parentLocale != null) {\\n        if (locales[config.parentLocale] != null) {\\n          parentConfig = locales[config.parentLocale]._config;\\n        } else {\\n          locale = loadLocale(config.parentLocale);\\n          if (locale != null) {\\n            parentConfig = locale._config;\\n          } else {\\n            if (!localeFamilies[config.parentLocale]) {\\n              localeFamilies[config.parentLocale] = [];\\n            }\\n            localeFamilies[config.parentLocale].push({\\n              name: name,\\n              config: config\\n            });\\n            return null;\\n          }\\n        }\\n      }\\n      locales[name] = new Locale(mergeConfigs(parentConfig, config));\\n      if (localeFamilies[name]) {\\n        localeFamilies[name].forEach(function (x) {\\n          defineLocale(x.name, x.config);\\n        });\\n      }\\n\\n      // backwards compat for now: also set the locale\\n      // make sure we set the locale AFTER all child locales have been\\n      // created, so we won't end up with the child locale set.\\n      getSetGlobalLocale(name);\\n      return locales[name];\\n    } else {\\n      // useful for testing\\n      delete locales[name];\\n      return null;\\n    }\\n  }\\n  function updateLocale(name, config) {\\n    if (config != null) {\\n      var locale,\\n        tmpLocale,\\n        parentConfig = baseConfig;\\n      if (locales[name] != null && locales[name].parentLocale != null) {\\n        // Update existing child locale in-place to avoid memory-leaks\\n        locales[name].set(mergeConfigs(locales[name]._config, config));\\n      } else {\\n        // MERGE\\n        tmpLocale = loadLocale(name);\\n        if (tmpLocale != null) {\\n          parentConfig = tmpLocale._config;\\n        }\\n        config = mergeConfigs(parentConfig, config);\\n        if (tmpLocale == null) {\\n          // updateLocale is called for creating a new locale\\n          // Set abbr so it will have a name (getters return\\n          // undefined otherwise).\\n          config.abbr = name;\\n        }\\n        locale = new Locale(config);\\n        locale.parentLocale = locales[name];\\n        locales[name] = locale;\\n      }\\n\\n      // backwards compat for now: also set the locale\\n      getSetGlobalLocale(name);\\n    } else {\\n      // pass null for config to unupdate, useful for tests\\n      if (locales[name] != null) {\\n        if (locales[name].parentLocale != null) {\\n          locales[name] = locales[name].parentLocale;\\n          if (name === getSetGlobalLocale()) {\\n            getSetGlobalLocale(name);\\n          }\\n        } else if (locales[name] != null) {\\n          delete locales[name];\\n        }\\n      }\\n    }\\n    return locales[name];\\n  }\\n\\n  // returns locale data\\n  function getLocale(key) {\\n    var locale;\\n    if (key && key._locale && key._locale._abbr) {\\n      key = key._locale._abbr;\\n    }\\n    if (!key) {\\n      return globalLocale;\\n    }\\n    if (!isArray(key)) {\\n      //short-circuit everything else\\n      locale = loadLocale(key);\\n      if (locale) {\\n        return locale;\\n      }\\n      key = [key];\\n    }\\n    return chooseLocale(key);\\n  }\\n  function listLocales() {\\n    return keys(locales);\\n  }\\n  function checkOverflow(m) {\\n    var overflow,\\n      a = m._a;\\n    if (a && getParsingFlags(m).overflow === -2) {\\n      overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\\n      if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\\n        overflow = DATE;\\n      }\\n      if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\\n        overflow = WEEK;\\n      }\\n      if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\\n        overflow = WEEKDAY;\\n      }\\n      getParsingFlags(m).overflow = overflow;\\n    }\\n    return m;\\n  }\\n\\n  // iso 8601 regex\\n  // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\\n  var extendedIsoRegex = /^\\\\s*((?:[+-]\\\\d{6}|\\\\d{4})-(?:\\\\d\\\\d-\\\\d\\\\d|W\\\\d\\\\d-\\\\d|W\\\\d\\\\d|\\\\d\\\\d\\\\d|\\\\d\\\\d))(?:(T| )(\\\\d\\\\d(?::\\\\d\\\\d(?::\\\\d\\\\d(?:[.,]\\\\d+)?)?)?)([+-]\\\\d\\\\d(?::?\\\\d\\\\d)?|\\\\s*Z)?)?$/,\\n    basicIsoRegex = /^\\\\s*((?:[+-]\\\\d{6}|\\\\d{4})(?:\\\\d\\\\d\\\\d\\\\d|W\\\\d\\\\d\\\\d|W\\\\d\\\\d|\\\\d\\\\d\\\\d|\\\\d\\\\d|))(?:(T| )(\\\\d\\\\d(?:\\\\d\\\\d(?:\\\\d\\\\d(?:[.,]\\\\d+)?)?)?)([+-]\\\\d\\\\d(?::?\\\\d\\\\d)?|\\\\s*Z)?)?$/,\\n    tzRegex = /Z|[+-]\\\\d\\\\d(?::?\\\\d\\\\d)?/,\\n    isoDates = [['YYYYYY-MM-DD', /[+-]\\\\d{6}-\\\\d\\\\d-\\\\d\\\\d/], ['YYYY-MM-DD', /\\\\d{4}-\\\\d\\\\d-\\\\d\\\\d/], ['GGGG-[W]WW-E', /\\\\d{4}-W\\\\d\\\\d-\\\\d/], ['GGGG-[W]WW', /\\\\d{4}-W\\\\d\\\\d/, false], ['YYYY-DDD', /\\\\d{4}-\\\\d{3}/], ['YYYY-MM', /\\\\d{4}-\\\\d\\\\d/, false], ['YYYYYYMMDD', /[+-]\\\\d{10}/], ['YYYYMMDD', /\\\\d{8}/], ['GGGG[W]WWE', /\\\\d{4}W\\\\d{3}/], ['GGGG[W]WW', /\\\\d{4}W\\\\d{2}/, false], ['YYYYDDD', /\\\\d{7}/], ['YYYYMM', /\\\\d{6}/, false], ['YYYY', /\\\\d{4}/, false]],\\n    // iso time formats and regexes\\n    isoTimes = [['HH:mm:ss.SSSS', /\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+/], ['HH:mm:ss,SSSS', /\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d,\\\\d+/], ['HH:mm:ss', /\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d/], ['HH:mm', /\\\\d\\\\d:\\\\d\\\\d/], ['HHmmss.SSSS', /\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d\\\\.\\\\d+/], ['HHmmss,SSSS', /\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d,\\\\d+/], ['HHmmss', /\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d/], ['HHmm', /\\\\d\\\\d\\\\d\\\\d/], ['HH', /\\\\d\\\\d/]],\\n    aspNetJsonRegex = /^\\\\/?Date\\\\((-?\\\\d+)/i,\\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\\n    rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\\\s)?(\\\\d{1,2})\\\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\\\s(\\\\d{2,4})\\\\s(\\\\d\\\\d):(\\\\d\\\\d)(?::(\\\\d\\\\d))?\\\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\\\d{4}))$/,\\n    obsOffsets = {\\n      UT: 0,\\n      GMT: 0,\\n      EDT: -4 * 60,\\n      EST: -5 * 60,\\n      CDT: -5 * 60,\\n      CST: -6 * 60,\\n      MDT: -6 * 60,\\n      MST: -7 * 60,\\n      PDT: -7 * 60,\\n      PST: -8 * 60\\n    };\\n\\n  // date from iso format\\n  function configFromISO(config) {\\n    var i,\\n      l,\\n      string = config._i,\\n      match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\\n      allowTime,\\n      dateFormat,\\n      timeFormat,\\n      tzFormat;\\n    if (match) {\\n      getParsingFlags(config).iso = true;\\n      for (i = 0, l = isoDates.length; i < l; i++) {\\n        if (isoDates[i][1].exec(match[1])) {\\n          dateFormat = isoDates[i][0];\\n          allowTime = isoDates[i][2] !== false;\\n          break;\\n        }\\n      }\\n      if (dateFormat == null) {\\n        config._isValid = false;\\n        return;\\n      }\\n      if (match[3]) {\\n        for (i = 0, l = isoTimes.length; i < l; i++) {\\n          if (isoTimes[i][1].exec(match[3])) {\\n            // match[2] should be 'T' or space\\n            timeFormat = (match[2] || ' ') + isoTimes[i][0];\\n            break;\\n          }\\n        }\\n        if (timeFormat == null) {\\n          config._isValid = false;\\n          return;\\n        }\\n      }\\n      if (!allowTime && timeFormat != null) {\\n        config._isValid = false;\\n        return;\\n      }\\n      if (match[4]) {\\n        if (tzRegex.exec(match[4])) {\\n          tzFormat = 'Z';\\n        } else {\\n          config._isValid = false;\\n          return;\\n        }\\n      }\\n      config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\\n      configFromStringAndFormat(config);\\n    } else {\\n      config._isValid = false;\\n    }\\n  }\\n  function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\\n    var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\\n    if (secondStr) {\\n      result.push(parseInt(secondStr, 10));\\n    }\\n    return result;\\n  }\\n  function untruncateYear(yearStr) {\\n    var year = parseInt(yearStr, 10);\\n    if (year <= 49) {\\n      return 2000 + year;\\n    } else if (year <= 999) {\\n      return 1900 + year;\\n    }\\n    return year;\\n  }\\n  function preprocessRFC2822(s) {\\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\\n    return s.replace(/\\\\([^)]*\\\\)|[\\\\n\\\\t]/g, ' ').replace(/(\\\\s\\\\s+)/g, ' ').replace(/^\\\\s\\\\s*/, '').replace(/\\\\s\\\\s*$/, '');\\n  }\\n  function checkWeekday(weekdayStr, parsedInput, config) {\\n    if (weekdayStr) {\\n      // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\\n      var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\\n        weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\\n      if (weekdayProvided !== weekdayActual) {\\n        getParsingFlags(config).weekdayMismatch = true;\\n        config._isValid = false;\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  function calculateOffset(obsOffset, militaryOffset, numOffset) {\\n    if (obsOffset) {\\n      return obsOffsets[obsOffset];\\n    } else if (militaryOffset) {\\n      // the only allowed military tz is Z\\n      return 0;\\n    } else {\\n      var hm = parseInt(numOffset, 10),\\n        m = hm % 100,\\n        h = (hm - m) / 100;\\n      return h * 60 + m;\\n    }\\n  }\\n\\n  // date and time from ref 2822 format\\n  function configFromRFC2822(config) {\\n    var match = rfc2822.exec(preprocessRFC2822(config._i)),\\n      parsedArray;\\n    if (match) {\\n      parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\\n      if (!checkWeekday(match[1], parsedArray, config)) {\\n        return;\\n      }\\n      config._a = parsedArray;\\n      config._tzm = calculateOffset(match[8], match[9], match[10]);\\n      config._d = createUTCDate.apply(null, config._a);\\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\\n      getParsingFlags(config).rfc2822 = true;\\n    } else {\\n      config._isValid = false;\\n    }\\n  }\\n\\n  // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\\n  function configFromString(config) {\\n    var matched = aspNetJsonRegex.exec(config._i);\\n    if (matched !== null) {\\n      config._d = new Date(+matched[1]);\\n      return;\\n    }\\n    configFromISO(config);\\n    if (config._isValid === false) {\\n      delete config._isValid;\\n    } else {\\n      return;\\n    }\\n    configFromRFC2822(config);\\n    if (config._isValid === false) {\\n      delete config._isValid;\\n    } else {\\n      return;\\n    }\\n    if (config._strict) {\\n      config._isValid = false;\\n    } else {\\n      // Final attempt, use Input Fallback\\n      hooks.createFromInputFallback(config);\\n    }\\n  }\\n  hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\\n    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\\n  });\\n\\n  // Pick the first defined of two or three arguments.\\n  function defaults(a, b, c) {\\n    if (a != null) {\\n      return a;\\n    }\\n    if (b != null) {\\n      return b;\\n    }\\n    return c;\\n  }\\n  function currentDateArray(config) {\\n    // hooks is actually the exported moment object\\n    var nowValue = new Date(hooks.now());\\n    if (config._useUTC) {\\n      return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\\n    }\\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\\n  }\\n\\n  // convert an array to a date.\\n  // the array should mirror the parameters below\\n  // note: all values past the year are optional and will default to the lowest possible value.\\n  // [year, month, day , hour, minute, second, millisecond]\\n  function configFromArray(config) {\\n    var i,\\n      date,\\n      input = [],\\n      currentDate,\\n      expectedWeekday,\\n      yearToUse;\\n    if (config._d) {\\n      return;\\n    }\\n    currentDate = currentDateArray(config);\\n\\n    //compute day of the year from weeks and weekdays\\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\\n      dayOfYearFromWeekInfo(config);\\n    }\\n\\n    //if the day of the year is set, figure out what it is\\n    if (config._dayOfYear != null) {\\n      yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\\n      if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\\n        getParsingFlags(config)._overflowDayOfYear = true;\\n      }\\n      date = createUTCDate(yearToUse, 0, config._dayOfYear);\\n      config._a[MONTH] = date.getUTCMonth();\\n      config._a[DATE] = date.getUTCDate();\\n    }\\n\\n    // Default to current date.\\n    // * if no year, month, day of month are given, default to today\\n    // * if day of month is given, default month and year\\n    // * if month is given, default only year\\n    // * if year is given, don't default anything\\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\\n      config._a[i] = input[i] = currentDate[i];\\n    }\\n\\n    // Zero out whatever was not defaulted, including time\\n    for (; i < 7; i++) {\\n      config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\\n    }\\n\\n    // Check for 24:00:00.000\\n    if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\\n      config._nextDay = true;\\n      config._a[HOUR] = 0;\\n    }\\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\\n    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\\n\\n    // Apply timezone offset from input. The actual utcOffset can be changed\\n    // with parseZone.\\n    if (config._tzm != null) {\\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\\n    }\\n    if (config._nextDay) {\\n      config._a[HOUR] = 24;\\n    }\\n\\n    // check for mismatching day of week\\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\\n      getParsingFlags(config).weekdayMismatch = true;\\n    }\\n  }\\n  function dayOfYearFromWeekInfo(config) {\\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\\n    w = config._w;\\n    if (w.GG != null || w.W != null || w.E != null) {\\n      dow = 1;\\n      doy = 4;\\n\\n      // TODO: We need to take the current isoWeekYear, but that depends on\\n      // how we interpret now (local, utc, fixed offset). So create\\n      // a now version of current config (take local/utc/offset flags, and\\n      // create now).\\n      weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\\n      week = defaults(w.W, 1);\\n      weekday = defaults(w.E, 1);\\n      if (weekday < 1 || weekday > 7) {\\n        weekdayOverflow = true;\\n      }\\n    } else {\\n      dow = config._locale._week.dow;\\n      doy = config._locale._week.doy;\\n      curWeek = weekOfYear(createLocal(), dow, doy);\\n      weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\\n\\n      // Default to current week.\\n      week = defaults(w.w, curWeek.week);\\n      if (w.d != null) {\\n        // weekday -- low day numbers are considered next week\\n        weekday = w.d;\\n        if (weekday < 0 || weekday > 6) {\\n          weekdayOverflow = true;\\n        }\\n      } else if (w.e != null) {\\n        // local weekday -- counting starts from beginning of week\\n        weekday = w.e + dow;\\n        if (w.e < 0 || w.e > 6) {\\n          weekdayOverflow = true;\\n        }\\n      } else {\\n        // default to beginning of week\\n        weekday = dow;\\n      }\\n    }\\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\\n      getParsingFlags(config)._overflowWeeks = true;\\n    } else if (weekdayOverflow != null) {\\n      getParsingFlags(config)._overflowWeekday = true;\\n    } else {\\n      temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\\n      config._a[YEAR] = temp.year;\\n      config._dayOfYear = temp.dayOfYear;\\n    }\\n  }\\n\\n  // constant that refers to the ISO standard\\n  hooks.ISO_8601 = function () {};\\n\\n  // constant that refers to the RFC 2822 form\\n  hooks.RFC_2822 = function () {};\\n\\n  // date from string and format string\\n  function configFromStringAndFormat(config) {\\n    // TODO: Move this to another part of the creation flow to prevent circular deps\\n    if (config._f === hooks.ISO_8601) {\\n      configFromISO(config);\\n      return;\\n    }\\n    if (config._f === hooks.RFC_2822) {\\n      configFromRFC2822(config);\\n      return;\\n    }\\n    config._a = [];\\n    getParsingFlags(config).empty = true;\\n\\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\\n    var string = '' + config._i,\\n      i,\\n      parsedInput,\\n      tokens,\\n      token,\\n      skipped,\\n      stringLength = string.length,\\n      totalParsedInputLength = 0,\\n      era;\\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\\n    for (i = 0; i < tokens.length; i++) {\\n      token = tokens[i];\\n      parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\\n      if (parsedInput) {\\n        skipped = string.substr(0, string.indexOf(parsedInput));\\n        if (skipped.length > 0) {\\n          getParsingFlags(config).unusedInput.push(skipped);\\n        }\\n        string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\\n        totalParsedInputLength += parsedInput.length;\\n      }\\n      // don't parse if it's not a known token\\n      if (formatTokenFunctions[token]) {\\n        if (parsedInput) {\\n          getParsingFlags(config).empty = false;\\n        } else {\\n          getParsingFlags(config).unusedTokens.push(token);\\n        }\\n        addTimeToArrayFromToken(token, parsedInput, config);\\n      } else if (config._strict && !parsedInput) {\\n        getParsingFlags(config).unusedTokens.push(token);\\n      }\\n    }\\n\\n    // add remaining unparsed input length to the string\\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\\n    if (string.length > 0) {\\n      getParsingFlags(config).unusedInput.push(string);\\n    }\\n\\n    // clear _12h flag if hour is <= 12\\n    if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\\n      getParsingFlags(config).bigHour = undefined;\\n    }\\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\\n    getParsingFlags(config).meridiem = config._meridiem;\\n    // handle meridiem\\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\\n\\n    // handle era\\n    era = getParsingFlags(config).era;\\n    if (era !== null) {\\n      config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\\n    }\\n    configFromArray(config);\\n    checkOverflow(config);\\n  }\\n  function meridiemFixWrap(locale, hour, meridiem) {\\n    var isPm;\\n    if (meridiem == null) {\\n      // nothing to do\\n      return hour;\\n    }\\n    if (locale.meridiemHour != null) {\\n      return locale.meridiemHour(hour, meridiem);\\n    } else if (locale.isPM != null) {\\n      // Fallback\\n      isPm = locale.isPM(meridiem);\\n      if (isPm && hour < 12) {\\n        hour += 12;\\n      }\\n      if (!isPm && hour === 12) {\\n        hour = 0;\\n      }\\n      return hour;\\n    } else {\\n      // this is not supposed to happen\\n      return hour;\\n    }\\n  }\\n\\n  // date from string and array of format strings\\n  function configFromStringAndArray(config) {\\n    var tempConfig,\\n      bestMoment,\\n      scoreToBeat,\\n      i,\\n      currentScore,\\n      validFormatFound,\\n      bestFormatIsValid = false;\\n    if (config._f.length === 0) {\\n      getParsingFlags(config).invalidFormat = true;\\n      config._d = new Date(NaN);\\n      return;\\n    }\\n    for (i = 0; i < config._f.length; i++) {\\n      currentScore = 0;\\n      validFormatFound = false;\\n      tempConfig = copyConfig({}, config);\\n      if (config._useUTC != null) {\\n        tempConfig._useUTC = config._useUTC;\\n      }\\n      tempConfig._f = config._f[i];\\n      configFromStringAndFormat(tempConfig);\\n      if (isValid(tempConfig)) {\\n        validFormatFound = true;\\n      }\\n\\n      // if there is any input that was not parsed add a penalty for that format\\n      currentScore += getParsingFlags(tempConfig).charsLeftOver;\\n\\n      //or tokens\\n      currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\\n      getParsingFlags(tempConfig).score = currentScore;\\n      if (!bestFormatIsValid) {\\n        if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\\n          scoreToBeat = currentScore;\\n          bestMoment = tempConfig;\\n          if (validFormatFound) {\\n            bestFormatIsValid = true;\\n          }\\n        }\\n      } else {\\n        if (currentScore < scoreToBeat) {\\n          scoreToBeat = currentScore;\\n          bestMoment = tempConfig;\\n        }\\n      }\\n    }\\n    extend(config, bestMoment || tempConfig);\\n  }\\n  function configFromObject(config) {\\n    if (config._d) {\\n      return;\\n    }\\n    var i = normalizeObjectUnits(config._i),\\n      dayOrDate = i.day === undefined ? i.date : i.day;\\n    config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\\n      return obj && parseInt(obj, 10);\\n    });\\n    configFromArray(config);\\n  }\\n  function createFromConfig(config) {\\n    var res = new Moment(checkOverflow(prepareConfig(config)));\\n    if (res._nextDay) {\\n      // Adding is smart enough around DST\\n      res.add(1, 'd');\\n      res._nextDay = undefined;\\n    }\\n    return res;\\n  }\\n  function prepareConfig(config) {\\n    var input = config._i,\\n      format = config._f;\\n    config._locale = config._locale || getLocale(config._l);\\n    if (input === null || format === undefined && input === '') {\\n      return createInvalid({\\n        nullInput: true\\n      });\\n    }\\n    if (typeof input === 'string') {\\n      config._i = input = config._locale.preparse(input);\\n    }\\n    if (isMoment(input)) {\\n      return new Moment(checkOverflow(input));\\n    } else if (isDate(input)) {\\n      config._d = input;\\n    } else if (isArray(format)) {\\n      configFromStringAndArray(config);\\n    } else if (format) {\\n      configFromStringAndFormat(config);\\n    } else {\\n      configFromInput(config);\\n    }\\n    if (!isValid(config)) {\\n      config._d = null;\\n    }\\n    return config;\\n  }\\n  function configFromInput(config) {\\n    var input = config._i;\\n    if (isUndefined(input)) {\\n      config._d = new Date(hooks.now());\\n    } else if (isDate(input)) {\\n      config._d = new Date(input.valueOf());\\n    } else if (typeof input === 'string') {\\n      configFromString(config);\\n    } else if (isArray(input)) {\\n      config._a = map(input.slice(0), function (obj) {\\n        return parseInt(obj, 10);\\n      });\\n      configFromArray(config);\\n    } else if (isObject(input)) {\\n      configFromObject(config);\\n    } else if (isNumber(input)) {\\n      // from milliseconds\\n      config._d = new Date(input);\\n    } else {\\n      hooks.createFromInputFallback(config);\\n    }\\n  }\\n  function createLocalOrUTC(input, format, locale, strict, isUTC) {\\n    var c = {};\\n    if (format === true || format === false) {\\n      strict = format;\\n      format = undefined;\\n    }\\n    if (locale === true || locale === false) {\\n      strict = locale;\\n      locale = undefined;\\n    }\\n    if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\\n      input = undefined;\\n    }\\n    // object construction must be done this way.\\n    // https://github.com/moment/moment/issues/1423\\n    c._isAMomentObject = true;\\n    c._useUTC = c._isUTC = isUTC;\\n    c._l = locale;\\n    c._i = input;\\n    c._f = format;\\n    c._strict = strict;\\n    return createFromConfig(c);\\n  }\\n  function createLocal(input, format, locale, strict) {\\n    return createLocalOrUTC(input, format, locale, strict, false);\\n  }\\n  var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\\n      var other = createLocal.apply(null, arguments);\\n      if (this.isValid() && other.isValid()) {\\n        return other < this ? this : other;\\n      } else {\\n        return createInvalid();\\n      }\\n    }),\\n    prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\\n      var other = createLocal.apply(null, arguments);\\n      if (this.isValid() && other.isValid()) {\\n        return other > this ? this : other;\\n      } else {\\n        return createInvalid();\\n      }\\n    });\\n\\n  // Pick a moment m from moments so that m[fn](other) is true for all\\n  // other. This relies on the function fn to be transitive.\\n  //\\n  // moments should either be an array of moment objects or an array, whose\\n  // first element is an array of moment objects.\\n  function pickBy(fn, moments) {\\n    var res, i;\\n    if (moments.length === 1 && isArray(moments[0])) {\\n      moments = moments[0];\\n    }\\n    if (!moments.length) {\\n      return createLocal();\\n    }\\n    res = moments[0];\\n    for (i = 1; i < moments.length; ++i) {\\n      if (!moments[i].isValid() || moments[i][fn](res)) {\\n        res = moments[i];\\n      }\\n    }\\n    return res;\\n  }\\n\\n  // TODO: Use [].sort instead?\\n  function min() {\\n    var args = [].slice.call(arguments, 0);\\n    return pickBy('isBefore', args);\\n  }\\n  function max() {\\n    var args = [].slice.call(arguments, 0);\\n    return pickBy('isAfter', args);\\n  }\\n  var now = function now() {\\n    return Date.now ? Date.now() : +new Date();\\n  };\\n  var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\\n  function isDurationValid(m) {\\n    var key,\\n      unitHasDecimal = false,\\n      i;\\n    for (key in m) {\\n      if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\\n        return false;\\n      }\\n    }\\n    for (i = 0; i < ordering.length; ++i) {\\n      if (m[ordering[i]]) {\\n        if (unitHasDecimal) {\\n          return false; // only allow non-integers for smallest unit\\n        }\\n        if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\\n          unitHasDecimal = true;\\n        }\\n      }\\n    }\\n    return true;\\n  }\\n  function isValid$1() {\\n    return this._isValid;\\n  }\\n  function createInvalid$1() {\\n    return createDuration(NaN);\\n  }\\n  function Duration(duration) {\\n    var normalizedInput = normalizeObjectUnits(duration),\\n      years = normalizedInput.year || 0,\\n      quarters = normalizedInput.quarter || 0,\\n      months = normalizedInput.month || 0,\\n      weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\\n      days = normalizedInput.day || 0,\\n      hours = normalizedInput.hour || 0,\\n      minutes = normalizedInput.minute || 0,\\n      seconds = normalizedInput.second || 0,\\n      milliseconds = normalizedInput.millisecond || 0;\\n    this._isValid = isDurationValid(normalizedInput);\\n\\n    // representation for dateAddRemove\\n    this._milliseconds = +milliseconds + seconds * 1e3 +\\n    // 1000\\n    minutes * 6e4 +\\n    // 1000 * 60\\n    hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\\n    // Because of dateAddRemove treats 24 hours as different from a\\n    // day when working around DST, we need to store them separately\\n    this._days = +days + weeks * 7;\\n    // It is impossible to translate months into days without knowing\\n    // which months you are are talking about, so we have to store\\n    // it separately.\\n    this._months = +months + quarters * 3 + years * 12;\\n    this._data = {};\\n    this._locale = getLocale();\\n    this._bubble();\\n  }\\n  function isDuration(obj) {\\n    return obj instanceof Duration;\\n  }\\n  function absRound(number) {\\n    if (number < 0) {\\n      return Math.round(-1 * number) * -1;\\n    } else {\\n      return Math.round(number);\\n    }\\n  }\\n\\n  // compare two arrays, return the number of differences\\n  function compareArrays(array1, array2, dontConvert) {\\n    var len = Math.min(array1.length, array2.length),\\n      lengthDiff = Math.abs(array1.length - array2.length),\\n      diffs = 0,\\n      i;\\n    for (i = 0; i < len; i++) {\\n      if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\\n        diffs++;\\n      }\\n    }\\n    return diffs + lengthDiff;\\n  }\\n\\n  // FORMATTING\\n\\n  function offset(token, separator) {\\n    addFormatToken(token, 0, 0, function () {\\n      var offset = this.utcOffset(),\\n        sign = '+';\\n      if (offset < 0) {\\n        offset = -offset;\\n        sign = '-';\\n      }\\n      return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\\n    });\\n  }\\n  offset('Z', ':');\\n  offset('ZZ', '');\\n\\n  // PARSING\\n\\n  addRegexToken('Z', matchShortOffset);\\n  addRegexToken('ZZ', matchShortOffset);\\n  addParseToken(['Z', 'ZZ'], function (input, array, config) {\\n    config._useUTC = true;\\n    config._tzm = offsetFromString(matchShortOffset, input);\\n  });\\n\\n  // HELPERS\\n\\n  // timezone chunker\\n  // '+10:00' > ['10',  '00']\\n  // '-1530'  > ['-15', '30']\\n  var chunkOffset = /([\\\\+\\\\-]|\\\\d\\\\d)/gi;\\n  function offsetFromString(matcher, string) {\\n    var matches = (string || '').match(matcher),\\n      chunk,\\n      parts,\\n      minutes;\\n    if (matches === null) {\\n      return null;\\n    }\\n    chunk = matches[matches.length - 1] || [];\\n    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\\n    minutes = +(parts[1] * 60) + toInt(parts[2]);\\n    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\\n  }\\n\\n  // Return a moment from input, that is local/utc/zone equivalent to model.\\n  function cloneWithOffset(input, model) {\\n    var res, diff;\\n    if (model._isUTC) {\\n      res = model.clone();\\n      diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\\n      // Use low-level api, because this fn is low-level api.\\n      res._d.setTime(res._d.valueOf() + diff);\\n      hooks.updateOffset(res, false);\\n      return res;\\n    } else {\\n      return createLocal(input).local();\\n    }\\n  }\\n  function getDateOffset(m) {\\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\\n    // https://github.com/moment/moment/pull/1871\\n    return -Math.round(m._d.getTimezoneOffset());\\n  }\\n\\n  // HOOKS\\n\\n  // This function will be called whenever a moment is mutated.\\n  // It is intended to keep the offset in sync with the timezone.\\n  hooks.updateOffset = function () {};\\n\\n  // MOMENTS\\n\\n  // keepLocalTime = true means only change the timezone, without\\n  // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\\n  // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\\n  // +0200, so we adjust the time as needed, to be valid.\\n  //\\n  // Keeping the time actually adds/subtracts (one hour)\\n  // from the actual represented time. That is why we call updateOffset\\n  // a second time. In case it wants us to change the offset again\\n  // _changeInProgress == true case, then we have to adjust, because\\n  // there is no such time in the given timezone.\\n  function getSetOffset(input, keepLocalTime, keepMinutes) {\\n    var offset = this._offset || 0,\\n      localAdjust;\\n    if (!this.isValid()) {\\n      return input != null ? this : NaN;\\n    }\\n    if (input != null) {\\n      if (typeof input === 'string') {\\n        input = offsetFromString(matchShortOffset, input);\\n        if (input === null) {\\n          return this;\\n        }\\n      } else if (Math.abs(input) < 16 && !keepMinutes) {\\n        input = input * 60;\\n      }\\n      if (!this._isUTC && keepLocalTime) {\\n        localAdjust = getDateOffset(this);\\n      }\\n      this._offset = input;\\n      this._isUTC = true;\\n      if (localAdjust != null) {\\n        this.add(localAdjust, 'm');\\n      }\\n      if (offset !== input) {\\n        if (!keepLocalTime || this._changeInProgress) {\\n          addSubtract(this, createDuration(input - offset, 'm'), 1, false);\\n        } else if (!this._changeInProgress) {\\n          this._changeInProgress = true;\\n          hooks.updateOffset(this, true);\\n          this._changeInProgress = null;\\n        }\\n      }\\n      return this;\\n    } else {\\n      return this._isUTC ? offset : getDateOffset(this);\\n    }\\n  }\\n  function getSetZone(input, keepLocalTime) {\\n    if (input != null) {\\n      if (typeof input !== 'string') {\\n        input = -input;\\n      }\\n      this.utcOffset(input, keepLocalTime);\\n      return this;\\n    } else {\\n      return -this.utcOffset();\\n    }\\n  }\\n  function setOffsetToUTC(keepLocalTime) {\\n    return this.utcOffset(0, keepLocalTime);\\n  }\\n  function setOffsetToLocal(keepLocalTime) {\\n    if (this._isUTC) {\\n      this.utcOffset(0, keepLocalTime);\\n      this._isUTC = false;\\n      if (keepLocalTime) {\\n        this.subtract(getDateOffset(this), 'm');\\n      }\\n    }\\n    return this;\\n  }\\n  function setOffsetToParsedOffset() {\\n    if (this._tzm != null) {\\n      this.utcOffset(this._tzm, false, true);\\n    } else if (typeof this._i === 'string') {\\n      var tZone = offsetFromString(matchOffset, this._i);\\n      if (tZone != null) {\\n        this.utcOffset(tZone);\\n      } else {\\n        this.utcOffset(0, true);\\n      }\\n    }\\n    return this;\\n  }\\n  function hasAlignedHourOffset(input) {\\n    if (!this.isValid()) {\\n      return false;\\n    }\\n    input = input ? createLocal(input).utcOffset() : 0;\\n    return (this.utcOffset() - input) % 60 === 0;\\n  }\\n  function isDaylightSavingTime() {\\n    return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\\n  }\\n  function isDaylightSavingTimeShifted() {\\n    if (!isUndefined(this._isDSTShifted)) {\\n      return this._isDSTShifted;\\n    }\\n    var c = {},\\n      other;\\n    copyConfig(c, this);\\n    c = prepareConfig(c);\\n    if (c._a) {\\n      other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\\n      this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\\n    } else {\\n      this._isDSTShifted = false;\\n    }\\n    return this._isDSTShifted;\\n  }\\n  function isLocal() {\\n    return this.isValid() ? !this._isUTC : false;\\n  }\\n  function isUtcOffset() {\\n    return this.isValid() ? this._isUTC : false;\\n  }\\n  function isUtc() {\\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\\n  }\\n\\n  // ASP.NET json date format regex\\n  var aspNetRegex = /^(-|\\\\+)?(?:(\\\\d*)[. ])?(\\\\d+):(\\\\d+)(?::(\\\\d+)(\\\\.\\\\d*)?)?$/,\\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\\n    // and further modified to allow for strings containing both week and day\\n    isoRegex = /^(-|\\\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\\n  function createDuration(input, key) {\\n    var duration = input,\\n      // matching against regexp is expensive, do it on demand\\n      match = null,\\n      sign,\\n      ret,\\n      diffRes;\\n    if (isDuration(input)) {\\n      duration = {\\n        ms: input._milliseconds,\\n        d: input._days,\\n        M: input._months\\n      };\\n    } else if (isNumber(input) || !isNaN(+input)) {\\n      duration = {};\\n      if (key) {\\n        duration[key] = +input;\\n      } else {\\n        duration.milliseconds = +input;\\n      }\\n    } else if (match = aspNetRegex.exec(input)) {\\n      sign = match[1] === '-' ? -1 : 1;\\n      duration = {\\n        y: 0,\\n        d: toInt(match[DATE]) * sign,\\n        h: toInt(match[HOUR]) * sign,\\n        m: toInt(match[MINUTE]) * sign,\\n        s: toInt(match[SECOND]) * sign,\\n        ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\\n      };\\n    } else if (match = isoRegex.exec(input)) {\\n      sign = match[1] === '-' ? -1 : 1;\\n      duration = {\\n        y: parseIso(match[2], sign),\\n        M: parseIso(match[3], sign),\\n        w: parseIso(match[4], sign),\\n        d: parseIso(match[5], sign),\\n        h: parseIso(match[6], sign),\\n        m: parseIso(match[7], sign),\\n        s: parseIso(match[8], sign)\\n      };\\n    } else if (duration == null) {\\n      // checks for null or undefined\\n      duration = {};\\n    } else if (_typeof(duration) === 'object' && ('from' in duration || 'to' in duration)) {\\n      diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\\n      duration = {};\\n      duration.ms = diffRes.milliseconds;\\n      duration.M = diffRes.months;\\n    }\\n    ret = new Duration(duration);\\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\\n      ret._locale = input._locale;\\n    }\\n    if (isDuration(input) && hasOwnProp(input, '_isValid')) {\\n      ret._isValid = input._isValid;\\n    }\\n    return ret;\\n  }\\n  createDuration.fn = Duration.prototype;\\n  createDuration.invalid = createInvalid$1;\\n  function parseIso(inp, sign) {\\n    // We'd normally use ~~inp for this, but unfortunately it also\\n    // converts floats to ints.\\n    // inp may be undefined, so careful calling replace on it.\\n    var res = inp && parseFloat(inp.replace(',', '.'));\\n    // apply sign while we're at it\\n    return (isNaN(res) ? 0 : res) * sign;\\n  }\\n  function positiveMomentsDifference(base, other) {\\n    var res = {};\\n    res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\\n      --res.months;\\n    }\\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\\n    return res;\\n  }\\n  function momentsDifference(base, other) {\\n    var res;\\n    if (!(base.isValid() && other.isValid())) {\\n      return {\\n        milliseconds: 0,\\n        months: 0\\n      };\\n    }\\n    other = cloneWithOffset(other, base);\\n    if (base.isBefore(other)) {\\n      res = positiveMomentsDifference(base, other);\\n    } else {\\n      res = positiveMomentsDifference(other, base);\\n      res.milliseconds = -res.milliseconds;\\n      res.months = -res.months;\\n    }\\n    return res;\\n  }\\n\\n  // TODO: remove 'name' arg after deprecation is removed\\n  function createAdder(direction, name) {\\n    return function (val, period) {\\n      var dur, tmp;\\n      //invert the arguments, but complain about it\\n      if (period !== null && !isNaN(+period)) {\\n        deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\\n        tmp = val;\\n        val = period;\\n        period = tmp;\\n      }\\n      dur = createDuration(val, period);\\n      addSubtract(this, dur, direction);\\n      return this;\\n    };\\n  }\\n  function addSubtract(mom, duration, isAdding, updateOffset) {\\n    var milliseconds = duration._milliseconds,\\n      days = absRound(duration._days),\\n      months = absRound(duration._months);\\n    if (!mom.isValid()) {\\n      // No op\\n      return;\\n    }\\n    updateOffset = updateOffset == null ? true : updateOffset;\\n    if (months) {\\n      setMonth(mom, get(mom, 'Month') + months * isAdding);\\n    }\\n    if (days) {\\n      set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\\n    }\\n    if (milliseconds) {\\n      mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\\n    }\\n    if (updateOffset) {\\n      hooks.updateOffset(mom, days || months);\\n    }\\n  }\\n  var add = createAdder(1, 'add'),\\n    subtract = createAdder(-1, 'subtract');\\n  function isString(input) {\\n    return typeof input === 'string' || input instanceof String;\\n  }\\n\\n  // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\\n  function isMomentInput(input) {\\n    return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\\n  }\\n  function isMomentInputObject(input) {\\n    var objectTest = isObject(input) && !isObjectEmpty(input),\\n      propertyTest = false,\\n      properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\\n      i,\\n      property;\\n    for (i = 0; i < properties.length; i += 1) {\\n      property = properties[i];\\n      propertyTest = propertyTest || hasOwnProp(input, property);\\n    }\\n    return objectTest && propertyTest;\\n  }\\n  function isNumberOrStringArray(input) {\\n    var arrayTest = isArray(input),\\n      dataTypeTest = false;\\n    if (arrayTest) {\\n      dataTypeTest = input.filter(function (item) {\\n        return !isNumber(item) && isString(input);\\n      }).length === 0;\\n    }\\n    return arrayTest && dataTypeTest;\\n  }\\n  function isCalendarSpec(input) {\\n    var objectTest = isObject(input) && !isObjectEmpty(input),\\n      propertyTest = false,\\n      properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\\n      i,\\n      property;\\n    for (i = 0; i < properties.length; i += 1) {\\n      property = properties[i];\\n      propertyTest = propertyTest || hasOwnProp(input, property);\\n    }\\n    return objectTest && propertyTest;\\n  }\\n  function getCalendarFormat(myMoment, now) {\\n    var diff = myMoment.diff(now, 'days', true);\\n    return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\\n  }\\n  function calendar$1(time, formats) {\\n    // Support for single parameter, formats only overload to the calendar function\\n    if (arguments.length === 1) {\\n      if (!arguments[0]) {\\n        time = undefined;\\n        formats = undefined;\\n      } else if (isMomentInput(arguments[0])) {\\n        time = arguments[0];\\n        formats = undefined;\\n      } else if (isCalendarSpec(arguments[0])) {\\n        formats = arguments[0];\\n        time = undefined;\\n      }\\n    }\\n    // We want to compare the start of today, vs this.\\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\\n    var now = time || createLocal(),\\n      sod = cloneWithOffset(now, this).startOf('day'),\\n      format = hooks.calendarFormat(this, sod) || 'sameElse',\\n      output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\\n  }\\n  function clone() {\\n    return new Moment(this);\\n  }\\n  function isAfter(input, units) {\\n    var localInput = isMoment(input) ? input : createLocal(input);\\n    if (!(this.isValid() && localInput.isValid())) {\\n      return false;\\n    }\\n    units = normalizeUnits(units) || 'millisecond';\\n    if (units === 'millisecond') {\\n      return this.valueOf() > localInput.valueOf();\\n    } else {\\n      return localInput.valueOf() < this.clone().startOf(units).valueOf();\\n    }\\n  }\\n  function isBefore(input, units) {\\n    var localInput = isMoment(input) ? input : createLocal(input);\\n    if (!(this.isValid() && localInput.isValid())) {\\n      return false;\\n    }\\n    units = normalizeUnits(units) || 'millisecond';\\n    if (units === 'millisecond') {\\n      return this.valueOf() < localInput.valueOf();\\n    } else {\\n      return this.clone().endOf(units).valueOf() < localInput.valueOf();\\n    }\\n  }\\n  function isBetween(from, to, units, inclusivity) {\\n    var localFrom = isMoment(from) ? from : createLocal(from),\\n      localTo = isMoment(to) ? to : createLocal(to);\\n    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\\n      return false;\\n    }\\n    inclusivity = inclusivity || '()';\\n    return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\\n  }\\n  function isSame(input, units) {\\n    var localInput = isMoment(input) ? input : createLocal(input),\\n      inputMs;\\n    if (!(this.isValid() && localInput.isValid())) {\\n      return false;\\n    }\\n    units = normalizeUnits(units) || 'millisecond';\\n    if (units === 'millisecond') {\\n      return this.valueOf() === localInput.valueOf();\\n    } else {\\n      inputMs = localInput.valueOf();\\n      return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\\n    }\\n  }\\n  function isSameOrAfter(input, units) {\\n    return this.isSame(input, units) || this.isAfter(input, units);\\n  }\\n  function isSameOrBefore(input, units) {\\n    return this.isSame(input, units) || this.isBefore(input, units);\\n  }\\n  function diff(input, units, asFloat) {\\n    var that, zoneDelta, output;\\n    if (!this.isValid()) {\\n      return NaN;\\n    }\\n    that = cloneWithOffset(input, this);\\n    if (!that.isValid()) {\\n      return NaN;\\n    }\\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\\n    units = normalizeUnits(units);\\n    switch (units) {\\n      case 'year':\\n        output = monthDiff(this, that) / 12;\\n        break;\\n      case 'month':\\n        output = monthDiff(this, that);\\n        break;\\n      case 'quarter':\\n        output = monthDiff(this, that) / 3;\\n        break;\\n      case 'second':\\n        output = (this - that) / 1e3;\\n        break;\\n      // 1000\\n      case 'minute':\\n        output = (this - that) / 6e4;\\n        break;\\n      // 1000 * 60\\n      case 'hour':\\n        output = (this - that) / 36e5;\\n        break;\\n      // 1000 * 60 * 60\\n      case 'day':\\n        output = (this - that - zoneDelta) / 864e5;\\n        break;\\n      // 1000 * 60 * 60 * 24, negate dst\\n      case 'week':\\n        output = (this - that - zoneDelta) / 6048e5;\\n        break;\\n      // 1000 * 60 * 60 * 24 * 7, negate dst\\n      default:\\n        output = this - that;\\n    }\\n    return asFloat ? output : absFloor(output);\\n  }\\n  function monthDiff(a, b) {\\n    if (a.date() < b.date()) {\\n      // end-of-month calculations work correct when the start month has more\\n      // days than the end month.\\n      return -monthDiff(b, a);\\n    }\\n    // difference in months\\n    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\\n      // b is in (anchor - 1 month, anchor + 1 month)\\n      anchor = a.clone().add(wholeMonthDiff, 'months'),\\n      anchor2,\\n      adjust;\\n    if (b - anchor < 0) {\\n      anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\\n      // linear across the month\\n      adjust = (b - anchor) / (anchor - anchor2);\\n    } else {\\n      anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\\n      // linear across the month\\n      adjust = (b - anchor) / (anchor2 - anchor);\\n    }\\n\\n    //check for negative zero, return zero if negative zero\\n    return -(wholeMonthDiff + adjust) || 0;\\n  }\\n  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\\n  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\\n  function toString() {\\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\\n  }\\n  function toISOString(keepOffset) {\\n    if (!this.isValid()) {\\n      return null;\\n    }\\n    var utc = keepOffset !== true,\\n      m = utc ? this.clone().utc() : this;\\n    if (m.year() < 0 || m.year() > 9999) {\\n      return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\\n    }\\n    if (isFunction(Date.prototype.toISOString)) {\\n      // native implementation is ~50x faster, use it when we can\\n      if (utc) {\\n        return this.toDate().toISOString();\\n      } else {\\n        return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\\n      }\\n    }\\n    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\\n  }\\n\\n  /**\\r\\n   * Return a human readable representation of a moment that can\\r\\n   * also be evaluated to get a new moment which is the same\\r\\n   *\\r\\n   * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\\r\\n   */\\n  function inspect() {\\n    if (!this.isValid()) {\\n      return 'moment.invalid(/* ' + this._i + ' */)';\\n    }\\n    var func = 'moment',\\n      zone = '',\\n      prefix,\\n      year,\\n      datetime,\\n      suffix;\\n    if (!this.isLocal()) {\\n      func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\\n      zone = 'Z';\\n    }\\n    prefix = '[' + func + '(\\\"]';\\n    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\\n    datetime = '-MM-DD[T]HH:mm:ss.SSS';\\n    suffix = zone + '[\\\")]';\\n    return this.format(prefix + year + datetime + suffix);\\n  }\\n  function format(inputString) {\\n    if (!inputString) {\\n      inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\\n    }\\n    var output = formatMoment(this, inputString);\\n    return this.localeData().postformat(output);\\n  }\\n  function from(time, withoutSuffix) {\\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\\n      return createDuration({\\n        to: this,\\n        from: time\\n      }).locale(this.locale()).humanize(!withoutSuffix);\\n    } else {\\n      return this.localeData().invalidDate();\\n    }\\n  }\\n  function fromNow(withoutSuffix) {\\n    return this.from(createLocal(), withoutSuffix);\\n  }\\n  function to(time, withoutSuffix) {\\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\\n      return createDuration({\\n        from: this,\\n        to: time\\n      }).locale(this.locale()).humanize(!withoutSuffix);\\n    } else {\\n      return this.localeData().invalidDate();\\n    }\\n  }\\n  function toNow(withoutSuffix) {\\n    return this.to(createLocal(), withoutSuffix);\\n  }\\n\\n  // If passed a locale key, it will set the locale for this\\n  // instance.  Otherwise, it will return the locale configuration\\n  // variables for this instance.\\n  function locale(key) {\\n    var newLocaleData;\\n    if (key === undefined) {\\n      return this._locale._abbr;\\n    } else {\\n      newLocaleData = getLocale(key);\\n      if (newLocaleData != null) {\\n        this._locale = newLocaleData;\\n      }\\n      return this;\\n    }\\n  }\\n  var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\\n    if (key === undefined) {\\n      return this.localeData();\\n    } else {\\n      return this.locale(key);\\n    }\\n  });\\n  function localeData() {\\n    return this._locale;\\n  }\\n  var MS_PER_SECOND = 1000,\\n    MS_PER_MINUTE = 60 * MS_PER_SECOND,\\n    MS_PER_HOUR = 60 * MS_PER_MINUTE,\\n    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\\n\\n  // actual modulo - handles negative numbers (for dates before 1970):\\n  function mod$1(dividend, divisor) {\\n    return (dividend % divisor + divisor) % divisor;\\n  }\\n  function localStartOfDate(y, m, d) {\\n    // the date constructor remaps years 0-99 to 1900-1999\\n    if (y < 100 && y >= 0) {\\n      // preserve leap years using a full 400 year cycle, then reset\\n      return new Date(y + 400, m, d) - MS_PER_400_YEARS;\\n    } else {\\n      return new Date(y, m, d).valueOf();\\n    }\\n  }\\n  function utcStartOfDate(y, m, d) {\\n    // Date.UTC remaps years 0-99 to 1900-1999\\n    if (y < 100 && y >= 0) {\\n      // preserve leap years using a full 400 year cycle, then reset\\n      return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\\n    } else {\\n      return Date.UTC(y, m, d);\\n    }\\n  }\\n  function startOf(units) {\\n    var time, startOfDate;\\n    units = normalizeUnits(units);\\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\\n      return this;\\n    }\\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\\n    switch (units) {\\n      case 'year':\\n        time = startOfDate(this.year(), 0, 1);\\n        break;\\n      case 'quarter':\\n        time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\\n        break;\\n      case 'month':\\n        time = startOfDate(this.year(), this.month(), 1);\\n        break;\\n      case 'week':\\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\\n        break;\\n      case 'isoWeek':\\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\\n        break;\\n      case 'day':\\n      case 'date':\\n        time = startOfDate(this.year(), this.month(), this.date());\\n        break;\\n      case 'hour':\\n        time = this._d.valueOf();\\n        time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\\n        break;\\n      case 'minute':\\n        time = this._d.valueOf();\\n        time -= mod$1(time, MS_PER_MINUTE);\\n        break;\\n      case 'second':\\n        time = this._d.valueOf();\\n        time -= mod$1(time, MS_PER_SECOND);\\n        break;\\n    }\\n    this._d.setTime(time);\\n    hooks.updateOffset(this, true);\\n    return this;\\n  }\\n  function endOf(units) {\\n    var time, startOfDate;\\n    units = normalizeUnits(units);\\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\\n      return this;\\n    }\\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\\n    switch (units) {\\n      case 'year':\\n        time = startOfDate(this.year() + 1, 0, 1) - 1;\\n        break;\\n      case 'quarter':\\n        time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\\n        break;\\n      case 'month':\\n        time = startOfDate(this.year(), this.month() + 1, 1) - 1;\\n        break;\\n      case 'week':\\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\\n        break;\\n      case 'isoWeek':\\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\\n        break;\\n      case 'day':\\n      case 'date':\\n        time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\\n        break;\\n      case 'hour':\\n        time = this._d.valueOf();\\n        time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\\n        break;\\n      case 'minute':\\n        time = this._d.valueOf();\\n        time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\\n        break;\\n      case 'second':\\n        time = this._d.valueOf();\\n        time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\\n        break;\\n    }\\n    this._d.setTime(time);\\n    hooks.updateOffset(this, true);\\n    return this;\\n  }\\n  function valueOf() {\\n    return this._d.valueOf() - (this._offset || 0) * 60000;\\n  }\\n  function unix() {\\n    return Math.floor(this.valueOf() / 1000);\\n  }\\n  function toDate() {\\n    return new Date(this.valueOf());\\n  }\\n  function toArray() {\\n    var m = this;\\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\\n  }\\n  function toObject() {\\n    var m = this;\\n    return {\\n      years: m.year(),\\n      months: m.month(),\\n      date: m.date(),\\n      hours: m.hours(),\\n      minutes: m.minutes(),\\n      seconds: m.seconds(),\\n      milliseconds: m.milliseconds()\\n    };\\n  }\\n  function toJSON() {\\n    // new Date(NaN).toJSON() === null\\n    return this.isValid() ? this.toISOString() : null;\\n  }\\n  function isValid$2() {\\n    return isValid(this);\\n  }\\n  function parsingFlags() {\\n    return extend({}, getParsingFlags(this));\\n  }\\n  function invalidAt() {\\n    return getParsingFlags(this).overflow;\\n  }\\n  function creationData() {\\n    return {\\n      input: this._i,\\n      format: this._f,\\n      locale: this._locale,\\n      isUTC: this._isUTC,\\n      strict: this._strict\\n    };\\n  }\\n  addFormatToken('N', 0, 0, 'eraAbbr');\\n  addFormatToken('NN', 0, 0, 'eraAbbr');\\n  addFormatToken('NNN', 0, 0, 'eraAbbr');\\n  addFormatToken('NNNN', 0, 0, 'eraName');\\n  addFormatToken('NNNNN', 0, 0, 'eraNarrow');\\n  addFormatToken('y', ['y', 1], 'yo', 'eraYear');\\n  addFormatToken('y', ['yy', 2], 0, 'eraYear');\\n  addFormatToken('y', ['yyy', 3], 0, 'eraYear');\\n  addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\\n  addRegexToken('N', matchEraAbbr);\\n  addRegexToken('NN', matchEraAbbr);\\n  addRegexToken('NNN', matchEraAbbr);\\n  addRegexToken('NNNN', matchEraName);\\n  addRegexToken('NNNNN', matchEraNarrow);\\n  addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {\\n    var era = config._locale.erasParse(input, token, config._strict);\\n    if (era) {\\n      getParsingFlags(config).era = era;\\n    } else {\\n      getParsingFlags(config).invalidEra = input;\\n    }\\n  });\\n  addRegexToken('y', matchUnsigned);\\n  addRegexToken('yy', matchUnsigned);\\n  addRegexToken('yyy', matchUnsigned);\\n  addRegexToken('yyyy', matchUnsigned);\\n  addRegexToken('yo', matchEraYearOrdinal);\\n  addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\\n  addParseToken(['yo'], function (input, array, config, token) {\\n    var match;\\n    if (config._locale._eraYearOrdinalRegex) {\\n      match = input.match(config._locale._eraYearOrdinalRegex);\\n    }\\n    if (config._locale.eraYearOrdinalParse) {\\n      array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\\n    } else {\\n      array[YEAR] = parseInt(input, 10);\\n    }\\n  });\\n  function localeEras(m, format) {\\n    var i,\\n      l,\\n      date,\\n      eras = this._eras || getLocale('en')._eras;\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      switch (_typeof(eras[i].since)) {\\n        case 'string':\\n          // truncate time\\n          date = hooks(eras[i].since).startOf('day');\\n          eras[i].since = date.valueOf();\\n          break;\\n      }\\n      switch (_typeof(eras[i].until)) {\\n        case 'undefined':\\n          eras[i].until = +Infinity;\\n          break;\\n        case 'string':\\n          // truncate time\\n          date = hooks(eras[i].until).startOf('day').valueOf();\\n          eras[i].until = date.valueOf();\\n          break;\\n      }\\n    }\\n    return eras;\\n  }\\n  function localeErasParse(eraName, format, strict) {\\n    var i,\\n      l,\\n      eras = this.eras(),\\n      name,\\n      abbr,\\n      narrow;\\n    eraName = eraName.toUpperCase();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      name = eras[i].name.toUpperCase();\\n      abbr = eras[i].abbr.toUpperCase();\\n      narrow = eras[i].narrow.toUpperCase();\\n      if (strict) {\\n        switch (format) {\\n          case 'N':\\n          case 'NN':\\n          case 'NNN':\\n            if (abbr === eraName) {\\n              return eras[i];\\n            }\\n            break;\\n          case 'NNNN':\\n            if (name === eraName) {\\n              return eras[i];\\n            }\\n            break;\\n          case 'NNNNN':\\n            if (narrow === eraName) {\\n              return eras[i];\\n            }\\n            break;\\n        }\\n      } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\\n        return eras[i];\\n      }\\n    }\\n  }\\n  function localeErasConvertYear(era, year) {\\n    var dir = era.since <= era.until ? +1 : -1;\\n    if (year === undefined) {\\n      return hooks(era.since).year();\\n    } else {\\n      return hooks(era.since).year() + (year - era.offset) * dir;\\n    }\\n  }\\n  function getEraName() {\\n    var i,\\n      l,\\n      val,\\n      eras = this.localeData().eras();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      // truncate time\\n      val = this.clone().startOf('day').valueOf();\\n      if (eras[i].since <= val && val <= eras[i].until) {\\n        return eras[i].name;\\n      }\\n      if (eras[i].until <= val && val <= eras[i].since) {\\n        return eras[i].name;\\n      }\\n    }\\n    return '';\\n  }\\n  function getEraNarrow() {\\n    var i,\\n      l,\\n      val,\\n      eras = this.localeData().eras();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      // truncate time\\n      val = this.clone().startOf('day').valueOf();\\n      if (eras[i].since <= val && val <= eras[i].until) {\\n        return eras[i].narrow;\\n      }\\n      if (eras[i].until <= val && val <= eras[i].since) {\\n        return eras[i].narrow;\\n      }\\n    }\\n    return '';\\n  }\\n  function getEraAbbr() {\\n    var i,\\n      l,\\n      val,\\n      eras = this.localeData().eras();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      // truncate time\\n      val = this.clone().startOf('day').valueOf();\\n      if (eras[i].since <= val && val <= eras[i].until) {\\n        return eras[i].abbr;\\n      }\\n      if (eras[i].until <= val && val <= eras[i].since) {\\n        return eras[i].abbr;\\n      }\\n    }\\n    return '';\\n  }\\n  function getEraYear() {\\n    var i,\\n      l,\\n      dir,\\n      val,\\n      eras = this.localeData().eras();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      dir = eras[i].since <= eras[i].until ? +1 : -1;\\n\\n      // truncate time\\n      val = this.clone().startOf('day').valueOf();\\n      if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\\n        return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\\n      }\\n    }\\n    return this.year();\\n  }\\n  function erasNameRegex(isStrict) {\\n    if (!hasOwnProp(this, '_erasNameRegex')) {\\n      computeErasParse.call(this);\\n    }\\n    return isStrict ? this._erasNameRegex : this._erasRegex;\\n  }\\n  function erasAbbrRegex(isStrict) {\\n    if (!hasOwnProp(this, '_erasAbbrRegex')) {\\n      computeErasParse.call(this);\\n    }\\n    return isStrict ? this._erasAbbrRegex : this._erasRegex;\\n  }\\n  function erasNarrowRegex(isStrict) {\\n    if (!hasOwnProp(this, '_erasNarrowRegex')) {\\n      computeErasParse.call(this);\\n    }\\n    return isStrict ? this._erasNarrowRegex : this._erasRegex;\\n  }\\n  function matchEraAbbr(isStrict, locale) {\\n    return locale.erasAbbrRegex(isStrict);\\n  }\\n  function matchEraName(isStrict, locale) {\\n    return locale.erasNameRegex(isStrict);\\n  }\\n  function matchEraNarrow(isStrict, locale) {\\n    return locale.erasNarrowRegex(isStrict);\\n  }\\n  function matchEraYearOrdinal(isStrict, locale) {\\n    return locale._eraYearOrdinalRegex || matchUnsigned;\\n  }\\n  function computeErasParse() {\\n    var abbrPieces = [],\\n      namePieces = [],\\n      narrowPieces = [],\\n      mixedPieces = [],\\n      i,\\n      l,\\n      eras = this.eras();\\n    for (i = 0, l = eras.length; i < l; ++i) {\\n      namePieces.push(regexEscape(eras[i].name));\\n      abbrPieces.push(regexEscape(eras[i].abbr));\\n      narrowPieces.push(regexEscape(eras[i].narrow));\\n      mixedPieces.push(regexEscape(eras[i].name));\\n      mixedPieces.push(regexEscape(eras[i].abbr));\\n      mixedPieces.push(regexEscape(eras[i].narrow));\\n    }\\n    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\\n    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\\n    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\\n    this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken(0, ['gg', 2], 0, function () {\\n    return this.weekYear() % 100;\\n  });\\n  addFormatToken(0, ['GG', 2], 0, function () {\\n    return this.isoWeekYear() % 100;\\n  });\\n  function addWeekYearFormatToken(token, getter) {\\n    addFormatToken(0, [token, token.length], 0, getter);\\n  }\\n  addWeekYearFormatToken('gggg', 'weekYear');\\n  addWeekYearFormatToken('ggggg', 'weekYear');\\n  addWeekYearFormatToken('GGGG', 'isoWeekYear');\\n  addWeekYearFormatToken('GGGGG', 'isoWeekYear');\\n\\n  // ALIASES\\n\\n  addUnitAlias('weekYear', 'gg');\\n  addUnitAlias('isoWeekYear', 'GG');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('weekYear', 1);\\n  addUnitPriority('isoWeekYear', 1);\\n\\n  // PARSING\\n\\n  addRegexToken('G', matchSigned);\\n  addRegexToken('g', matchSigned);\\n  addRegexToken('GG', match1to2, match2);\\n  addRegexToken('gg', match1to2, match2);\\n  addRegexToken('GGGG', match1to4, match4);\\n  addRegexToken('gggg', match1to4, match4);\\n  addRegexToken('GGGGG', match1to6, match6);\\n  addRegexToken('ggggg', match1to6, match6);\\n  addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\\n    week[token.substr(0, 2)] = toInt(input);\\n  });\\n  addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\\n    week[token] = hooks.parseTwoDigitYear(input);\\n  });\\n\\n  // MOMENTS\\n\\n  function getSetWeekYear(input) {\\n    return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\\n  }\\n  function getSetISOWeekYear(input) {\\n    return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\\n  }\\n  function getISOWeeksInYear() {\\n    return weeksInYear(this.year(), 1, 4);\\n  }\\n  function getISOWeeksInISOWeekYear() {\\n    return weeksInYear(this.isoWeekYear(), 1, 4);\\n  }\\n  function getWeeksInYear() {\\n    var weekInfo = this.localeData()._week;\\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\\n  }\\n  function getWeeksInWeekYear() {\\n    var weekInfo = this.localeData()._week;\\n    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\\n  }\\n  function getSetWeekYearHelper(input, week, weekday, dow, doy) {\\n    var weeksTarget;\\n    if (input == null) {\\n      return weekOfYear(this, dow, doy).year;\\n    } else {\\n      weeksTarget = weeksInYear(input, dow, doy);\\n      if (week > weeksTarget) {\\n        week = weeksTarget;\\n      }\\n      return setWeekAll.call(this, input, week, weekday, dow, doy);\\n    }\\n  }\\n  function setWeekAll(weekYear, week, weekday, dow, doy) {\\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\\n      date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\\n    this.year(date.getUTCFullYear());\\n    this.month(date.getUTCMonth());\\n    this.date(date.getUTCDate());\\n    return this;\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('Q', 0, 'Qo', 'quarter');\\n\\n  // ALIASES\\n\\n  addUnitAlias('quarter', 'Q');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('quarter', 7);\\n\\n  // PARSING\\n\\n  addRegexToken('Q', match1);\\n  addParseToken('Q', function (input, array) {\\n    array[MONTH] = (toInt(input) - 1) * 3;\\n  });\\n\\n  // MOMENTS\\n\\n  function getSetQuarter(input) {\\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('D', ['DD', 2], 'Do', 'date');\\n\\n  // ALIASES\\n\\n  addUnitAlias('date', 'D');\\n\\n  // PRIORITY\\n  addUnitPriority('date', 9);\\n\\n  // PARSING\\n\\n  addRegexToken('D', match1to2);\\n  addRegexToken('DD', match1to2, match2);\\n  addRegexToken('Do', function (isStrict, locale) {\\n    // TODO: Remove \\\"ordinalParse\\\" fallback in next major release.\\n    return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\\n  });\\n  addParseToken(['D', 'DD'], DATE);\\n  addParseToken('Do', function (input, array) {\\n    array[DATE] = toInt(input.match(match1to2)[0]);\\n  });\\n\\n  // MOMENTS\\n\\n  var getSetDayOfMonth = makeGetSet('Date', true);\\n\\n  // FORMATTING\\n\\n  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\\n\\n  // ALIASES\\n\\n  addUnitAlias('dayOfYear', 'DDD');\\n\\n  // PRIORITY\\n  addUnitPriority('dayOfYear', 4);\\n\\n  // PARSING\\n\\n  addRegexToken('DDD', match1to3);\\n  addRegexToken('DDDD', match3);\\n  addParseToken(['DDD', 'DDDD'], function (input, array, config) {\\n    config._dayOfYear = toInt(input);\\n  });\\n\\n  // HELPERS\\n\\n  // MOMENTS\\n\\n  function getSetDayOfYear(input) {\\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\\n  }\\n\\n  // FORMATTING\\n\\n  addFormatToken('m', ['mm', 2], 0, 'minute');\\n\\n  // ALIASES\\n\\n  addUnitAlias('minute', 'm');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('minute', 14);\\n\\n  // PARSING\\n\\n  addRegexToken('m', match1to2);\\n  addRegexToken('mm', match1to2, match2);\\n  addParseToken(['m', 'mm'], MINUTE);\\n\\n  // MOMENTS\\n\\n  var getSetMinute = makeGetSet('Minutes', false);\\n\\n  // FORMATTING\\n\\n  addFormatToken('s', ['ss', 2], 0, 'second');\\n\\n  // ALIASES\\n\\n  addUnitAlias('second', 's');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('second', 15);\\n\\n  // PARSING\\n\\n  addRegexToken('s', match1to2);\\n  addRegexToken('ss', match1to2, match2);\\n  addParseToken(['s', 'ss'], SECOND);\\n\\n  // MOMENTS\\n\\n  var getSetSecond = makeGetSet('Seconds', false);\\n\\n  // FORMATTING\\n\\n  addFormatToken('S', 0, 0, function () {\\n    return ~~(this.millisecond() / 100);\\n  });\\n  addFormatToken(0, ['SS', 2], 0, function () {\\n    return ~~(this.millisecond() / 10);\\n  });\\n  addFormatToken(0, ['SSS', 3], 0, 'millisecond');\\n  addFormatToken(0, ['SSSS', 4], 0, function () {\\n    return this.millisecond() * 10;\\n  });\\n  addFormatToken(0, ['SSSSS', 5], 0, function () {\\n    return this.millisecond() * 100;\\n  });\\n  addFormatToken(0, ['SSSSSS', 6], 0, function () {\\n    return this.millisecond() * 1000;\\n  });\\n  addFormatToken(0, ['SSSSSSS', 7], 0, function () {\\n    return this.millisecond() * 10000;\\n  });\\n  addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\\n    return this.millisecond() * 100000;\\n  });\\n  addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\\n    return this.millisecond() * 1000000;\\n  });\\n\\n  // ALIASES\\n\\n  addUnitAlias('millisecond', 'ms');\\n\\n  // PRIORITY\\n\\n  addUnitPriority('millisecond', 16);\\n\\n  // PARSING\\n\\n  addRegexToken('S', match1to3, match1);\\n  addRegexToken('SS', match1to3, match2);\\n  addRegexToken('SSS', match1to3, match3);\\n  var token, getSetMillisecond;\\n  for (token = 'SSSS'; token.length <= 9; token += 'S') {\\n    addRegexToken(token, matchUnsigned);\\n  }\\n  function parseMs(input, array) {\\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\\n  }\\n  for (token = 'S'; token.length <= 9; token += 'S') {\\n    addParseToken(token, parseMs);\\n  }\\n  getSetMillisecond = makeGetSet('Milliseconds', false);\\n\\n  // FORMATTING\\n\\n  addFormatToken('z', 0, 0, 'zoneAbbr');\\n  addFormatToken('zz', 0, 0, 'zoneName');\\n\\n  // MOMENTS\\n\\n  function getZoneAbbr() {\\n    return this._isUTC ? 'UTC' : '';\\n  }\\n  function getZoneName() {\\n    return this._isUTC ? 'Coordinated Universal Time' : '';\\n  }\\n  var proto = Moment.prototype;\\n  proto.add = add;\\n  proto.calendar = calendar$1;\\n  proto.clone = clone;\\n  proto.diff = diff;\\n  proto.endOf = endOf;\\n  proto.format = format;\\n  proto.from = from;\\n  proto.fromNow = fromNow;\\n  proto.to = to;\\n  proto.toNow = toNow;\\n  proto.get = stringGet;\\n  proto.invalidAt = invalidAt;\\n  proto.isAfter = isAfter;\\n  proto.isBefore = isBefore;\\n  proto.isBetween = isBetween;\\n  proto.isSame = isSame;\\n  proto.isSameOrAfter = isSameOrAfter;\\n  proto.isSameOrBefore = isSameOrBefore;\\n  proto.isValid = isValid$2;\\n  proto.lang = lang;\\n  proto.locale = locale;\\n  proto.localeData = localeData;\\n  proto.max = prototypeMax;\\n  proto.min = prototypeMin;\\n  proto.parsingFlags = parsingFlags;\\n  proto.set = stringSet;\\n  proto.startOf = startOf;\\n  proto.subtract = subtract;\\n  proto.toArray = toArray;\\n  proto.toObject = toObject;\\n  proto.toDate = toDate;\\n  proto.toISOString = toISOString;\\n  proto.inspect = inspect;\\n  if (typeof Symbol !== 'undefined' && Symbol.for != null) {\\n    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\\n      return 'Moment<' + this.format() + '>';\\n    };\\n  }\\n  proto.toJSON = toJSON;\\n  proto.toString = toString;\\n  proto.unix = unix;\\n  proto.valueOf = valueOf;\\n  proto.creationData = creationData;\\n  proto.eraName = getEraName;\\n  proto.eraNarrow = getEraNarrow;\\n  proto.eraAbbr = getEraAbbr;\\n  proto.eraYear = getEraYear;\\n  proto.year = getSetYear;\\n  proto.isLeapYear = getIsLeapYear;\\n  proto.weekYear = getSetWeekYear;\\n  proto.isoWeekYear = getSetISOWeekYear;\\n  proto.quarter = proto.quarters = getSetQuarter;\\n  proto.month = getSetMonth;\\n  proto.daysInMonth = getDaysInMonth;\\n  proto.week = proto.weeks = getSetWeek;\\n  proto.isoWeek = proto.isoWeeks = getSetISOWeek;\\n  proto.weeksInYear = getWeeksInYear;\\n  proto.weeksInWeekYear = getWeeksInWeekYear;\\n  proto.isoWeeksInYear = getISOWeeksInYear;\\n  proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\\n  proto.date = getSetDayOfMonth;\\n  proto.day = proto.days = getSetDayOfWeek;\\n  proto.weekday = getSetLocaleDayOfWeek;\\n  proto.isoWeekday = getSetISODayOfWeek;\\n  proto.dayOfYear = getSetDayOfYear;\\n  proto.hour = proto.hours = getSetHour;\\n  proto.minute = proto.minutes = getSetMinute;\\n  proto.second = proto.seconds = getSetSecond;\\n  proto.millisecond = proto.milliseconds = getSetMillisecond;\\n  proto.utcOffset = getSetOffset;\\n  proto.utc = setOffsetToUTC;\\n  proto.local = setOffsetToLocal;\\n  proto.parseZone = setOffsetToParsedOffset;\\n  proto.hasAlignedHourOffset = hasAlignedHourOffset;\\n  proto.isDST = isDaylightSavingTime;\\n  proto.isLocal = isLocal;\\n  proto.isUtcOffset = isUtcOffset;\\n  proto.isUtc = isUtc;\\n  proto.isUTC = isUtc;\\n  proto.zoneAbbr = getZoneAbbr;\\n  proto.zoneName = getZoneName;\\n  proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\\n  proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\\n  proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\\n  proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\\n  proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\\n  function createUnix(input) {\\n    return createLocal(input * 1000);\\n  }\\n  function createInZone() {\\n    return createLocal.apply(null, arguments).parseZone();\\n  }\\n  function preParsePostFormat(string) {\\n    return string;\\n  }\\n  var proto$1 = Locale.prototype;\\n  proto$1.calendar = calendar;\\n  proto$1.longDateFormat = longDateFormat;\\n  proto$1.invalidDate = invalidDate;\\n  proto$1.ordinal = ordinal;\\n  proto$1.preparse = preParsePostFormat;\\n  proto$1.postformat = preParsePostFormat;\\n  proto$1.relativeTime = relativeTime;\\n  proto$1.pastFuture = pastFuture;\\n  proto$1.set = set;\\n  proto$1.eras = localeEras;\\n  proto$1.erasParse = localeErasParse;\\n  proto$1.erasConvertYear = localeErasConvertYear;\\n  proto$1.erasAbbrRegex = erasAbbrRegex;\\n  proto$1.erasNameRegex = erasNameRegex;\\n  proto$1.erasNarrowRegex = erasNarrowRegex;\\n  proto$1.months = localeMonths;\\n  proto$1.monthsShort = localeMonthsShort;\\n  proto$1.monthsParse = localeMonthsParse;\\n  proto$1.monthsRegex = monthsRegex;\\n  proto$1.monthsShortRegex = monthsShortRegex;\\n  proto$1.week = localeWeek;\\n  proto$1.firstDayOfYear = localeFirstDayOfYear;\\n  proto$1.firstDayOfWeek = localeFirstDayOfWeek;\\n  proto$1.weekdays = localeWeekdays;\\n  proto$1.weekdaysMin = localeWeekdaysMin;\\n  proto$1.weekdaysShort = localeWeekdaysShort;\\n  proto$1.weekdaysParse = localeWeekdaysParse;\\n  proto$1.weekdaysRegex = weekdaysRegex;\\n  proto$1.weekdaysShortRegex = weekdaysShortRegex;\\n  proto$1.weekdaysMinRegex = weekdaysMinRegex;\\n  proto$1.isPM = localeIsPM;\\n  proto$1.meridiem = localeMeridiem;\\n  function get$1(format, index, field, setter) {\\n    var locale = getLocale(),\\n      utc = createUTC().set(setter, index);\\n    return locale[field](utc, format);\\n  }\\n  function listMonthsImpl(format, index, field) {\\n    if (isNumber(format)) {\\n      index = format;\\n      format = undefined;\\n    }\\n    format = format || '';\\n    if (index != null) {\\n      return get$1(format, index, field, 'month');\\n    }\\n    var i,\\n      out = [];\\n    for (i = 0; i < 12; i++) {\\n      out[i] = get$1(format, i, field, 'month');\\n    }\\n    return out;\\n  }\\n\\n  // ()\\n  // (5)\\n  // (fmt, 5)\\n  // (fmt)\\n  // (true)\\n  // (true, 5)\\n  // (true, fmt, 5)\\n  // (true, fmt)\\n  function listWeekdaysImpl(localeSorted, format, index, field) {\\n    if (typeof localeSorted === 'boolean') {\\n      if (isNumber(format)) {\\n        index = format;\\n        format = undefined;\\n      }\\n      format = format || '';\\n    } else {\\n      format = localeSorted;\\n      index = format;\\n      localeSorted = false;\\n      if (isNumber(format)) {\\n        index = format;\\n        format = undefined;\\n      }\\n      format = format || '';\\n    }\\n    var locale = getLocale(),\\n      shift = localeSorted ? locale._week.dow : 0,\\n      i,\\n      out = [];\\n    if (index != null) {\\n      return get$1(format, (index + shift) % 7, field, 'day');\\n    }\\n    for (i = 0; i < 7; i++) {\\n      out[i] = get$1(format, (i + shift) % 7, field, 'day');\\n    }\\n    return out;\\n  }\\n  function listMonths(format, index) {\\n    return listMonthsImpl(format, index, 'months');\\n  }\\n  function listMonthsShort(format, index) {\\n    return listMonthsImpl(format, index, 'monthsShort');\\n  }\\n  function listWeekdays(localeSorted, format, index) {\\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\\n  }\\n  function listWeekdaysShort(localeSorted, format, index) {\\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\\n  }\\n  function listWeekdaysMin(localeSorted, format, index) {\\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\\n  }\\n  getSetGlobalLocale('en', {\\n    eras: [{\\n      since: '0001-01-01',\\n      until: +Infinity,\\n      offset: 1,\\n      name: 'Anno Domini',\\n      narrow: 'AD',\\n      abbr: 'AD'\\n    }, {\\n      since: '0000-12-31',\\n      until: -Infinity,\\n      offset: 1,\\n      name: 'Before Christ',\\n      narrow: 'BC',\\n      abbr: 'BC'\\n    }],\\n    dayOfMonthOrdinalParse: /\\\\d{1,2}(th|st|nd|rd)/,\\n    ordinal: function ordinal(number) {\\n      var b = number % 10,\\n        output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\\n      return number + output;\\n    }\\n  });\\n\\n  // Side effect imports\\n\\n  hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\\n  hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\\n  var mathAbs = Math.abs;\\n  function abs() {\\n    var data = this._data;\\n    this._milliseconds = mathAbs(this._milliseconds);\\n    this._days = mathAbs(this._days);\\n    this._months = mathAbs(this._months);\\n    data.milliseconds = mathAbs(data.milliseconds);\\n    data.seconds = mathAbs(data.seconds);\\n    data.minutes = mathAbs(data.minutes);\\n    data.hours = mathAbs(data.hours);\\n    data.months = mathAbs(data.months);\\n    data.years = mathAbs(data.years);\\n    return this;\\n  }\\n  function addSubtract$1(duration, input, value, direction) {\\n    var other = createDuration(input, value);\\n    duration._milliseconds += direction * other._milliseconds;\\n    duration._days += direction * other._days;\\n    duration._months += direction * other._months;\\n    return duration._bubble();\\n  }\\n\\n  // supports only 2.0-style add(1, 's') or add(duration)\\n  function add$1(input, value) {\\n    return addSubtract$1(this, input, value, 1);\\n  }\\n\\n  // supports only 2.0-style subtract(1, 's') or subtract(duration)\\n  function subtract$1(input, value) {\\n    return addSubtract$1(this, input, value, -1);\\n  }\\n  function absCeil(number) {\\n    if (number < 0) {\\n      return Math.floor(number);\\n    } else {\\n      return Math.ceil(number);\\n    }\\n  }\\n  function bubble() {\\n    var milliseconds = this._milliseconds,\\n      days = this._days,\\n      months = this._months,\\n      data = this._data,\\n      seconds,\\n      minutes,\\n      hours,\\n      years,\\n      monthsFromDays;\\n\\n    // if we have a mix of positive and negative values, bubble down first\\n    // check: https://github.com/moment/moment/issues/2166\\n    if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\\n      milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\\n      days = 0;\\n      months = 0;\\n    }\\n\\n    // The following code bubbles up values, see the tests for\\n    // examples of what that means.\\n    data.milliseconds = milliseconds % 1000;\\n    seconds = absFloor(milliseconds / 1000);\\n    data.seconds = seconds % 60;\\n    minutes = absFloor(seconds / 60);\\n    data.minutes = minutes % 60;\\n    hours = absFloor(minutes / 60);\\n    data.hours = hours % 24;\\n    days += absFloor(hours / 24);\\n\\n    // convert days to months\\n    monthsFromDays = absFloor(daysToMonths(days));\\n    months += monthsFromDays;\\n    days -= absCeil(monthsToDays(monthsFromDays));\\n\\n    // 12 months -> 1 year\\n    years = absFloor(months / 12);\\n    months %= 12;\\n    data.days = days;\\n    data.months = months;\\n    data.years = years;\\n    return this;\\n  }\\n  function daysToMonths(days) {\\n    // 400 years have 146097 days (taking into account leap year rules)\\n    // 400 years have 12 months === 4800\\n    return days * 4800 / 146097;\\n  }\\n  function monthsToDays(months) {\\n    // the reverse of daysToMonths\\n    return months * 146097 / 4800;\\n  }\\n  function as(units) {\\n    if (!this.isValid()) {\\n      return NaN;\\n    }\\n    var days,\\n      months,\\n      milliseconds = this._milliseconds;\\n    units = normalizeUnits(units);\\n    if (units === 'month' || units === 'quarter' || units === 'year') {\\n      days = this._days + milliseconds / 864e5;\\n      months = this._months + daysToMonths(days);\\n      switch (units) {\\n        case 'month':\\n          return months;\\n        case 'quarter':\\n          return months / 3;\\n        case 'year':\\n          return months / 12;\\n      }\\n    } else {\\n      // handle milliseconds separately because of floating point math errors (issue #1867)\\n      days = this._days + Math.round(monthsToDays(this._months));\\n      switch (units) {\\n        case 'week':\\n          return days / 7 + milliseconds / 6048e5;\\n        case 'day':\\n          return days + milliseconds / 864e5;\\n        case 'hour':\\n          return days * 24 + milliseconds / 36e5;\\n        case 'minute':\\n          return days * 1440 + milliseconds / 6e4;\\n        case 'second':\\n          return days * 86400 + milliseconds / 1000;\\n        // Math.floor prevents floating point math errors here\\n        case 'millisecond':\\n          return Math.floor(days * 864e5) + milliseconds;\\n        default:\\n          throw new Error('Unknown unit ' + units);\\n      }\\n    }\\n  }\\n\\n  // TODO: Use this.as('ms')?\\n  function valueOf$1() {\\n    if (!this.isValid()) {\\n      return NaN;\\n    }\\n    return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\\n  }\\n  function makeAs(alias) {\\n    return function () {\\n      return this.as(alias);\\n    };\\n  }\\n  var asMilliseconds = makeAs('ms'),\\n    asSeconds = makeAs('s'),\\n    asMinutes = makeAs('m'),\\n    asHours = makeAs('h'),\\n    asDays = makeAs('d'),\\n    asWeeks = makeAs('w'),\\n    asMonths = makeAs('M'),\\n    asQuarters = makeAs('Q'),\\n    asYears = makeAs('y');\\n  function clone$1() {\\n    return createDuration(this);\\n  }\\n  function get$2(units) {\\n    units = normalizeUnits(units);\\n    return this.isValid() ? this[units + 's']() : NaN;\\n  }\\n  function makeGetter(name) {\\n    return function () {\\n      return this.isValid() ? this._data[name] : NaN;\\n    };\\n  }\\n  var milliseconds = makeGetter('milliseconds'),\\n    seconds = makeGetter('seconds'),\\n    minutes = makeGetter('minutes'),\\n    hours = makeGetter('hours'),\\n    days = makeGetter('days'),\\n    months = makeGetter('months'),\\n    years = makeGetter('years');\\n  function weeks() {\\n    return absFloor(this.days() / 7);\\n  }\\n  var round = Math.round,\\n    thresholds = {\\n      ss: 44,\\n      // a few seconds to seconds\\n      s: 45,\\n      // seconds to minute\\n      m: 45,\\n      // minutes to hour\\n      h: 22,\\n      // hours to day\\n      d: 26,\\n      // days to month/week\\n      w: null,\\n      // weeks to month\\n      M: 11 // months to year\\n    };\\n\\n  // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\\n  function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\\n  }\\n  function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\\n    var duration = createDuration(posNegDuration).abs(),\\n      seconds = round(duration.as('s')),\\n      minutes = round(duration.as('m')),\\n      hours = round(duration.as('h')),\\n      days = round(duration.as('d')),\\n      months = round(duration.as('M')),\\n      weeks = round(duration.as('w')),\\n      years = round(duration.as('y')),\\n      a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\\n    if (thresholds.w != null) {\\n      a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\\n    }\\n    a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\\n    a[2] = withoutSuffix;\\n    a[3] = +posNegDuration > 0;\\n    a[4] = locale;\\n    return substituteTimeAgo.apply(null, a);\\n  }\\n\\n  // This function allows you to set the rounding function for relative time strings\\n  function getSetRelativeTimeRounding(roundingFunction) {\\n    if (roundingFunction === undefined) {\\n      return round;\\n    }\\n    if (typeof roundingFunction === 'function') {\\n      round = roundingFunction;\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  // This function allows you to set a threshold for relative time strings\\n  function getSetRelativeTimeThreshold(threshold, limit) {\\n    if (thresholds[threshold] === undefined) {\\n      return false;\\n    }\\n    if (limit === undefined) {\\n      return thresholds[threshold];\\n    }\\n    thresholds[threshold] = limit;\\n    if (threshold === 's') {\\n      thresholds.ss = limit - 1;\\n    }\\n    return true;\\n  }\\n  function humanize(argWithSuffix, argThresholds) {\\n    if (!this.isValid()) {\\n      return this.localeData().invalidDate();\\n    }\\n    var withSuffix = false,\\n      th = thresholds,\\n      locale,\\n      output;\\n    if (_typeof(argWithSuffix) === 'object') {\\n      argThresholds = argWithSuffix;\\n      argWithSuffix = false;\\n    }\\n    if (typeof argWithSuffix === 'boolean') {\\n      withSuffix = argWithSuffix;\\n    }\\n    if (_typeof(argThresholds) === 'object') {\\n      th = Object.assign({}, thresholds, argThresholds);\\n      if (argThresholds.s != null && argThresholds.ss == null) {\\n        th.ss = argThresholds.s - 1;\\n      }\\n    }\\n    locale = this.localeData();\\n    output = relativeTime$1(this, !withSuffix, th, locale);\\n    if (withSuffix) {\\n      output = locale.pastFuture(+this, output);\\n    }\\n    return locale.postformat(output);\\n  }\\n  var abs$1 = Math.abs;\\n  function sign(x) {\\n    return (x > 0) - (x < 0) || +x;\\n  }\\n  function toISOString$1() {\\n    // for ISO strings we do not use the normal bubbling rules:\\n    //  * milliseconds bubble up until they become hours\\n    //  * days do not bubble at all\\n    //  * months bubble up until they become years\\n    // This is because there is no context-free conversion between hours and days\\n    // (think of clock changes)\\n    // and also not between days and months (28-31 days per month)\\n    if (!this.isValid()) {\\n      return this.localeData().invalidDate();\\n    }\\n    var seconds = abs$1(this._milliseconds) / 1000,\\n      days = abs$1(this._days),\\n      months = abs$1(this._months),\\n      minutes,\\n      hours,\\n      years,\\n      s,\\n      total = this.asSeconds(),\\n      totalSign,\\n      ymSign,\\n      daysSign,\\n      hmsSign;\\n    if (!total) {\\n      // this is the same as C#'s (Noda) and python (isodate)...\\n      // but not other JS (goog.date)\\n      return 'P0D';\\n    }\\n\\n    // 3600 seconds -> 60 minutes -> 1 hour\\n    minutes = absFloor(seconds / 60);\\n    hours = absFloor(minutes / 60);\\n    seconds %= 60;\\n    minutes %= 60;\\n\\n    // 12 months -> 1 year\\n    years = absFloor(months / 12);\\n    months %= 12;\\n\\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\\n    s = seconds ? seconds.toFixed(3).replace(/\\\\.?0+$/, '') : '';\\n    totalSign = total < 0 ? '-' : '';\\n    ymSign = sign(this._months) !== sign(total) ? '-' : '';\\n    daysSign = sign(this._days) !== sign(total) ? '-' : '';\\n    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\\n    return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\\n  }\\n  var proto$2 = Duration.prototype;\\n  proto$2.isValid = isValid$1;\\n  proto$2.abs = abs;\\n  proto$2.add = add$1;\\n  proto$2.subtract = subtract$1;\\n  proto$2.as = as;\\n  proto$2.asMilliseconds = asMilliseconds;\\n  proto$2.asSeconds = asSeconds;\\n  proto$2.asMinutes = asMinutes;\\n  proto$2.asHours = asHours;\\n  proto$2.asDays = asDays;\\n  proto$2.asWeeks = asWeeks;\\n  proto$2.asMonths = asMonths;\\n  proto$2.asQuarters = asQuarters;\\n  proto$2.asYears = asYears;\\n  proto$2.valueOf = valueOf$1;\\n  proto$2._bubble = bubble;\\n  proto$2.clone = clone$1;\\n  proto$2.get = get$2;\\n  proto$2.milliseconds = milliseconds;\\n  proto$2.seconds = seconds;\\n  proto$2.minutes = minutes;\\n  proto$2.hours = hours;\\n  proto$2.days = days;\\n  proto$2.weeks = weeks;\\n  proto$2.months = months;\\n  proto$2.years = years;\\n  proto$2.humanize = humanize;\\n  proto$2.toISOString = toISOString$1;\\n  proto$2.toString = toISOString$1;\\n  proto$2.toJSON = toISOString$1;\\n  proto$2.locale = locale;\\n  proto$2.localeData = localeData;\\n  proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\\n  proto$2.lang = lang;\\n\\n  // FORMATTING\\n\\n  addFormatToken('X', 0, 0, 'unix');\\n  addFormatToken('x', 0, 0, 'valueOf');\\n\\n  // PARSING\\n\\n  addRegexToken('x', matchSigned);\\n  addRegexToken('X', matchTimestamp);\\n  addParseToken('X', function (input, array, config) {\\n    config._d = new Date(parseFloat(input) * 1000);\\n  });\\n  addParseToken('x', function (input, array, config) {\\n    config._d = new Date(toInt(input));\\n  });\\n\\n  //! moment.js\\n\\n  hooks.version = '2.29.1';\\n  setHookCallback(createLocal);\\n  hooks.fn = proto;\\n  hooks.min = min;\\n  hooks.max = max;\\n  hooks.now = now;\\n  hooks.utc = createUTC;\\n  hooks.unix = createUnix;\\n  hooks.months = listMonths;\\n  hooks.isDate = isDate;\\n  hooks.locale = getSetGlobalLocale;\\n  hooks.invalid = createInvalid;\\n  hooks.duration = createDuration;\\n  hooks.isMoment = isMoment;\\n  hooks.weekdays = listWeekdays;\\n  hooks.parseZone = createInZone;\\n  hooks.localeData = getLocale;\\n  hooks.isDuration = isDuration;\\n  hooks.monthsShort = listMonthsShort;\\n  hooks.weekdaysMin = listWeekdaysMin;\\n  hooks.defineLocale = defineLocale;\\n  hooks.updateLocale = updateLocale;\\n  hooks.locales = listLocales;\\n  hooks.weekdaysShort = listWeekdaysShort;\\n  hooks.normalizeUnits = normalizeUnits;\\n  hooks.relativeTimeRounding = getSetRelativeTimeRounding;\\n  hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\\n  hooks.calendarFormat = getCalendarFormat;\\n  hooks.prototype = proto;\\n\\n  // currently HTML5 input type only supports 24-hour formats\\n  hooks.HTML5_FMT = {\\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\\n    // <input type=\\\"datetime-local\\\" />\\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\\n    // <input type=\\\"datetime-local\\\" step=\\\"1\\\" />\\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\\n    // <input type=\\\"datetime-local\\\" step=\\\"0.001\\\" />\\n    DATE: 'YYYY-MM-DD',\\n    // <input type=\\\"date\\\" />\\n    TIME: 'HH:mm',\\n    // <input type=\\\"time\\\" />\\n    TIME_SECONDS: 'HH:mm:ss',\\n    // <input type=\\\"time\\\" step=\\\"1\\\" />\\n    TIME_MS: 'HH:mm:ss.SSS',\\n    // <input type=\\\"time\\\" step=\\\"0.001\\\" />\\n    WEEK: 'GGGG-[W]WW',\\n    // <input type=\\\"week\\\" />\\n    MONTH: 'YYYY-MM' // <input type=\\\"month\\\" />\\n  };\\n  return hooks;\\n});\"","var map = {\n\t\"./autocomplete-field.js\": 691,\n\t\"./jquery.magnific-popup.js\": 692,\n\t\"./jquery.magnific-popup.min.js\": 693,\n\t\"./jquery.tooltipster.js\": 694,\n\t\"./ko-binding-modal-1.0.0.js\": 695,\n\t\"./ko-bindings-common-1.0.0.js\": 696,\n\t\"./ko-bindings-dates-1.0.0.js\": 697,\n\t\"./ko-component-loader.js\": 698,\n\t\"./ko-components-common-1.0.0.js\": 699,\n\t\"./ko-extension-validation-1.0.0.js\": 700,\n\t\"./moment-plugins.js\": 701,\n\t\"./postbox-topics-1.0.0.js\": 702\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 690;","// autocomplete field\r\n(function($) {\r\n\r\n    $.autocompleteField = function(element, userSettings) {\r\n\r\n        // check required properties\r\n        var requiredProps = ['getOptionsFromResponse'];\r\n        for (var i = 0, len = requiredProps.length; i < len; i++) {\r\n            var prop = requiredProps[i];\r\n            if (!(prop in userSettings)) {\r\n                console.log('\"' + prop + '\" property is required');\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check paired properties\r\n        if (!('url' in userSettings) && !('load' in userSettings)) {\r\n            console.log('\"url\" or \"load\" property must be specified');\r\n            return;\r\n        }\r\n        if (('url' in userSettings) && ('load' in userSettings)) {\r\n            console.log('just one of properties \"url\" or \"load\" must be specified');\r\n            return;\r\n        }\r\n\r\n\r\n        // default settings\r\n        var defaults = {\r\n\r\n            // variables\r\n            minQueryLength: 2,\r\n            maxItemsToDisplay: 20,\r\n\r\n            // events and callbacks\r\n            load: function(response) {},\r\n            onLoad: function(response) {},\r\n            onLoadFail: function(xhr) {},\r\n            getOptionsFromResponse: function(response) {},\r\n            onChange: function(value, updateValueForErrorMessage) {}\r\n        };\r\n\r\n        // \"this\" reference\r\n        var plugin = this;\r\n\r\n        // add user settings to default settings\r\n        plugin.settings = $.extend({}, defaults, userSettings);\r\n\r\n\r\n        // elements\r\n        var wnd = $(window);\r\n        var wrapper = $(element);\r\n        var valueField = wrapper.find('input.autocomplete-field_value-field');\r\n        var textField = wrapper.find('input.autocomplete-field_text-field');\r\n        var arrow = null;\r\n        var listBox = null;\r\n        var list = null;\r\n\r\n\r\n        // variables\r\n        var previousTextValue = '';\r\n        var xhr = null;\r\n        var isLoading = false;\r\n        var isFocused = false;\r\n        var isFirstBlur = null;\r\n\r\n\r\n        // private methods\r\n\r\n        // build value field\r\n        var buildValueField = function() {\r\n            if (valueField.length) {\r\n                return;\r\n            }\r\n\r\n            valueField = $('<input/>', {\r\n                type: 'hidden',\r\n                class: 'autocomplete-field_value-field'\r\n            }).appendTo(wrapper);\r\n        };\r\n\r\n        // build arrow\r\n        var buildArrow = function() {\r\n            var textFieldWrapper = wrapper.find('div.autocomplete-field_text-field-wrapper');\r\n            arrow = $('<div/>', {\r\n                class: 'autocomplete-field_text-field-arrow'\r\n            }).appendTo(textFieldWrapper);\r\n\r\n            arrow.on('click', function() {\r\n                textField.focus();\r\n                return false;\r\n            });\r\n        };\r\n\r\n        // build list box\r\n        var buildListBox = function() {\r\n            var listBoxDiv = $('<div/>', {\r\n                class: 'autocomplete-field_list-box'\r\n            });\r\n\r\n            var ul = $('<ul/>', {\r\n                class: 'autocomplete-field_list'\r\n            }).appendTo(listBoxDiv);\r\n\r\n            listBoxDiv.appendTo(wrapper);\r\n            list = ul;\r\n            listBox = listBoxDiv;\r\n        };\r\n\r\n        // add option\r\n        var addOption = function(value, text, addToTop) {\r\n            var option = $('<li/>', {\r\n                class: 'autocomplete-field_list-item',\r\n                html: text\r\n            });\r\n            option.data('value', value);\r\n            //option.hover(\r\n            //    function() {\r\n            //        markAllOptionsAsUnhovered();\r\n            //        $(this).addClass('hovered');\r\n            //    },\r\n            //    function() {\r\n            //        $(this).removeClass('hovered');\r\n            //    }\r\n            //);\r\n            option.on('mousemove', function() {\r\n                markAllOptionsAsUnhovered();\r\n                $(this).addClass('hovered');\r\n            });\r\n\r\n            if (addToTop) {\r\n                option.prependTo(list);\r\n            } else {\r\n                option.appendTo(list);\r\n            }\r\n        };\r\n\r\n        // get options\r\n        var getOptions = function() {\r\n            return list.find('li');\r\n        };\r\n\r\n        // build all options\r\n        var buildAllOptions = function(options) {\r\n            removeAllOptions();\r\n            var optionsLen = (options.length < plugin.settings.maxItemsToDisplay) ? options.length : plugin.settings.maxItemsToDisplay;\r\n            for (var i = 0, len = optionsLen; i < len; i++) {\r\n                var option = options[i];\r\n                addOption(option.value, option.text);\r\n            }\r\n        };\r\n\r\n        // set value from option\r\n        var setValueFromOption = function(option) {\r\n            if (!option.length) {\r\n                return;\r\n            }\r\n\r\n\r\n            markAllOptionsAsUnselected();\r\n            markOptionAsSelected(option);\r\n            setValueFieldValue(option.data('value'));\r\n            setTextFieldValue(option.html().replace('&amp;', '&'));\r\n        };\r\n\r\n        // remove all options\r\n        var removeAllOptions = function() {\r\n            getOptions().remove();\r\n        };\r\n\r\n        // get hovered option\r\n        var getHoveredOption = function() {\r\n            return list.find('li.hovered');\r\n        };\r\n\r\n        // mark all options as unselected\r\n        var markAllOptionsAsUnselected = function() {\r\n            var options = getOptions();\r\n            options.each(function() {\r\n                $(this).removeClass('selected');\r\n            });\r\n        };\r\n\r\n        // mark option as selected\r\n        var markOptionAsSelected = function(option) {\r\n            option.addClass('selected');\r\n        };\r\n\r\n        // mark all options as unhovered\r\n        var markAllOptionsAsUnhovered = function() {\r\n            var options = getOptions();\r\n            options.each(function() {\r\n                $(this).removeClass('hovered');\r\n            });\r\n        };\r\n\r\n        // mark prev option as hovered\r\n        var markPrevOptionAsHovered = function() {\r\n            var options = getOptions();\r\n            if (!options.length) {\r\n                return;\r\n            }\r\n\r\n            var currentHoveredOption = getHoveredOption();\r\n\r\n            // if there is no hovered option set last option as hovered\r\n            if (!currentHoveredOption.length) {\r\n                options.last().addClass('hovered');\r\n                return;\r\n            }\r\n\r\n            // get prev hovered option\r\n            options.each(function(index) {\r\n                var option = $(this);\r\n                if (option.hasClass('hovered')) {\r\n                    var prevOptionIndex = (index === 0) ? (options.length - 1) : (index - 1);\r\n                    var prevOption = $(options.get(prevOptionIndex));\r\n                    currentHoveredOption.removeClass('hovered');\r\n                    prevOption.addClass('hovered');\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        // mark next option as hovered\r\n        var markNextOptionAsHovered = function() {\r\n            var options = getOptions();\r\n            if (!options.length) {\r\n                return;\r\n            }\r\n\r\n            var currentHoveredOption = getHoveredOption();\r\n\r\n            // if there is no hovered option set first option as hovered\r\n            if (!currentHoveredOption.length) {\r\n                options.first().addClass('hovered');\r\n                return;\r\n            }\r\n\r\n            // get prev hovered option\r\n            options.each(function(index) {\r\n                var option = $(this);\r\n                if (option.hasClass('hovered')) {\r\n                    var nextOptionIndex = (index === (options.length - 1)) ? 0 : (index + 1);\r\n                    var nextOption = $(options.get(nextOptionIndex));\r\n                    currentHoveredOption.removeClass('hovered');\r\n                    nextOption.addClass('hovered');\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        // show list\r\n        var showList = function() {\r\n            var options = getOptions();\r\n            if (!options.length) {\r\n                return;\r\n            }\r\n\r\n            // get height\r\n            listBox.addClass('invisible');\r\n            var listBoxHeight = listBox.outerHeight();\r\n\r\n            // get max height\r\n            listBox.addClass('max-height');\r\n            var listBoxMaxHeight = parseInt(listBox.css('max-height'), 10);\r\n\r\n            // add max-height class\r\n            if (listBoxHeight >= listBoxMaxHeight) {\r\n                listBox.addClass('max-height');\r\n            } else {\r\n                listBox.removeClass('max-height');\r\n            }\r\n\r\n            // show list box\r\n            listBox.removeClass('invisible');\r\n            wrapper.addClass('opened');\r\n        };\r\n\r\n        // hide list\r\n        var hideList = function() {\r\n            wrapper.removeClass('opened');\r\n        };\r\n\r\n        // on focus\r\n        var onFocus = function() {\r\n            isFocused = true;\r\n            wrapper.addClass('focused');\r\n            if (getTextFieldValue().length > plugin.settings.minQueryLength)\r\n                showList();\r\n            else\r\n                hideList();\r\n        };\r\n\r\n        // on blur\r\n        var onBlur = function() {\r\n            setFirstBlurFlagToTrue();\r\n            isFocused = false;\r\n            wrapper.removeClass('focused');\r\n        };\r\n\r\n        // set first blur flag to true\r\n        var setFirstBlurFlagToTrue = function() {\r\n            if (isFirstBlur === null && getTextFieldValue() != '') {\r\n                // console.log('isFirstBlur = true');\r\n                isFirstBlur = true;\r\n            }\r\n        };\r\n\r\n        // set text_field value\r\n        var setTextFieldValue = function(value) {             \r\n            textField.val(value);            \r\n            previousTextValue = value;\r\n            \r\n        };\r\n\r\n        // set value_field value\r\n        var setValueFieldValue = function(value) {\r\n            if (isFirstBlur === true) {\r\n                // console.log('first update');\r\n                isFirstBlur = false;\r\n                plugin.settings.onChange(value, true);\r\n                return;\r\n            }\r\n\r\n            // console.log('compare values: \"' + getValueFieldValue() + '\", \"' + value + '\"');\r\n            if (getValueFieldValue() === value) {\r\n                return;\r\n            }\r\n\r\n            valueField.val(value);\r\n            plugin.settings.onChange(value, false);\r\n        };\r\n\r\n        // get text_field value\r\n        var getTextFieldValue = function() {\r\n            return textField.val();\r\n        };\r\n\r\n        // get value_field value\r\n        var getValueFieldValue = function() {\r\n            return valueField.val();\r\n        };\r\n\r\n        // set values on blur\r\n        var setValuesOnBlur = function() {\r\n            var textFieldValue = getTextFieldValue();\r\n            var valueFieldValue = getValueFieldValue();\r\n            var textFieldValueLowerCase = textFieldValue.toLowerCase();\r\n\r\n            // data is not loading\r\n            // if (!isLoading) {\r\n\r\n                // // field is empty\r\n                // if (!textFieldValue) {\r\n                //     setValueFieldValue('');\r\n\r\n                // // text is entered, but value is not choosen\r\n                // } else if (textFieldValue && !valueFieldValue) {\r\n                //     var options = getOptions();\r\n                //     if (options.length === 1) {\r\n                //         setValueFromOption(options.first());\r\n                //     } else {\r\n                //         setValueFieldValue('');\r\n                //     }\r\n                // }\r\n\r\n                // field is empty\r\n                if (!textFieldValue) {\r\n                    setValueFieldValue('');\r\n\r\n                // text is entered, but value is not choosen\r\n                // } else if (textFieldValue && !valueFieldValue) {\r\n\r\n                // text is entered, value is entered or value is empty\r\n                } else {\r\n\r\n                    // check entered text in options\r\n                    var foundInOptions = false;\r\n                    var options = getOptions();\r\n                    options.each(function() {\r\n                        var option = $(this);\r\n                        // console.log('compare options', textFieldValueLowerCase, option.html().toLowerCase());\r\n\r\n                        // text found in options\r\n                        if (textFieldValueLowerCase === option.text().toLowerCase() || textFieldValueLowerCase === option.html().toLowerCase()) {\r\n                            foundInOptions = true;\r\n                            setValueFromOption(option);\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    // text not found in options\r\n                    if (!foundInOptions) {\r\n                        // console.log('not in options');\r\n                        // setValueFieldValue(textFieldValue);\r\n                        // if (options.length) {\r\n                        //     setValueFieldValue('');\r\n                        // } else {\r\n                        //     setValueFieldValue(textFieldValue);\r\n                        // }\r\n                        setValueFieldValue('');\r\n                    }\r\n                }\r\n            // }\r\n        };\r\n\r\n        // handle ajax response\r\n        var handleAjaxResponse = function(response) {\r\n            plugin.settings.onLoad(response);\r\n            var options = plugin.settings.getOptionsFromResponse(response);\r\n            if (options.length) {\r\n                buildAllOptions(options);\r\n                if (isFocused) {\r\n                    showList();\r\n                } else {\r\n                    setValuesOnBlur();\r\n                }\r\n                buildArrow();\r\n            } else {\r\n                removeAllOptions();\r\n                hideList();\r\n                wrapper.removeClass('autocomplete-field_text-field-arrow');\r\n            }\r\n\r\n            isLoading = false;\r\n            wrapper.removeClass('loading');\r\n        };\r\n\r\n        // delay\r\n        var delay = function(callback, ms) {\r\n            var timer = 0;\r\n            return function() {\r\n                var context = this;\r\n                var args = arguments;\r\n                clearTimeout(timer);\r\n                timer = setTimeout(function() {\r\n                    callback.apply(context, args);\r\n                }, ms || 0);\r\n            };\r\n        };\r\n\r\n        // load data\r\n        var loadData = function() {\r\n            var textValue = getTextFieldValue();\r\n            if (textValue.trim().length > plugin.settings.minQueryLength) {\r\n                isLoading = true;\r\n                wrapper.addClass('loading');\r\n\r\n                // get data by url\r\n                if ('url' in plugin.settings) {\r\n                    if (xhr !== null) {\r\n                        xhr.abort();\r\n                    }\r\n\r\n                    // send ajax query\r\n                    xhr = $.ajax({\r\n                        method: 'POST',\r\n                        url: plugin.settings.url,\r\n                        dataType: 'json',\r\n                        data: {\r\n                            query: textValue\r\n                        }\r\n                    })\r\n                        .done(function (response) {\r\n                            // console.log('success');\r\n                            handleAjaxResponse(response);\r\n                        })\r\n                        .fail(function () {\r\n                            // console.log('ajax fail');\r\n                            // console.log(xhr);\r\n                            isLoading = false;\r\n                            wrapper.removeClass('loading');\r\n                            plugin.settings.onLoadFail(xhr);\r\n                        })\r\n                        .always(function () {\r\n                            // console.log('complete');\r\n                        }\r\n                        );\r\n\r\n                    // get data by function\r\n                } else {\r\n                    plugin.settings.load(textValue, function (response) {\r\n                        // console.log('load callback');\r\n                        handleAjaxResponse(response);\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                hideList();\r\n            }\r\n        };\r\n\r\n\r\n        // public methods\r\n        plugin.addOption = addOption;\r\n        // plugin.removeAllOptions = removeAllOptions;\r\n\r\n\r\n        // plugin init\r\n        plugin.init = function() {\r\n\r\n            // build html-code\r\n            // console.log(plugin.settings);\r\n            buildValueField();\r\n            buildListBox();\r\n\r\n\r\n            // events\r\n\r\n            // text field: on focus\r\n            textField.on('focus', function() {\r\n                onFocus();\r\n            });\r\n\r\n            // text field: on blur\r\n            textField.on('blur', function() {\r\n                onBlur();\r\n            });\r\n\r\n            // text field: on keydown\r\n            textField.on('keydown', function(e) {\r\n                // console.log('keydown: usual');\r\n                if (e.which === 9) {\r\n                    hideList();\r\n                    setFirstBlurFlagToTrue();\r\n                    setValuesOnBlur();\r\n                }\r\n            });\r\n\r\n            // text field: on keyup\r\n            textField.on('keyup', function(e) {\r\n                // console.log('keyup: usual');\r\n                if (e.which === 38) {\r\n                    showList();\r\n                    markPrevOptionAsHovered();\r\n                }\r\n                if (e.which === 40) {\r\n                    showList();\r\n                    markNextOptionAsHovered();\r\n                }\r\n                if (e.which === 13) {\r\n                    setValueFromOption(getHoveredOption());\r\n                    hideList();\r\n                }\r\n            });\r\n\r\n            // text field: on keyup with delay\r\n            textField.on('keyup', delay(function(e) {\r\n                // console.log('keyup: delay');\r\n                if (this.value === previousTextValue) {\r\n                    return;\r\n                }\r\n\r\n                previousTextValue = this.value;\r\n                setValueFieldValue('');\r\n                loadData();\r\n            }, 500));\r\n\r\n            // window: on click\r\n            wnd.on('click', function(e) {\r\n                var clickedElem = $(e.target);\r\n\r\n                // text field click\r\n                if (clickedElem.hasClass('autocomplete-field_text-field')) {\r\n                    // console.log('field click');\r\n                    // do nothing\r\n\r\n                // option click\r\n                } else if (clickedElem.hasClass('autocomplete-field_list-item') && clickedElem.closest('.autocomplete-field').attr('data-bind') === wrapper.closest('.autocomplete-field').attr('data-bind')) {\r\n                    // console.log('option click');\r\n                    setValueFromOption(clickedElem);\r\n                    hideList();\r\n\r\n                // list click (but not option)\r\n                } else if (clickedElem.hasClass('autocomplete-field_list') || \r\n                    clickedElem.hasClass('autocomplete-field_list-box')) {\r\n                    // console.log('list click');\r\n                    // do nothing\r\n\r\n                // outside click (blur)\r\n                } else {\r\n                    // console.log('outside click');\r\n                    hideList();\r\n                    setValuesOnBlur();\r\n                }\r\n            });\r\n\r\n        };\r\n\r\n        // start plugin init\r\n        plugin.init();\r\n\r\n    };\r\n\r\n\r\n    // add plugin to jquery\r\n    $.fn.autocompleteField = function(userSettings) {\r\n\r\n        // dom-elements cycle\r\n        return this.each(function() {\r\n            if (undefined == $(this).data('autocompleteField')) {\r\n                var plugin = new $.autocompleteField(this, userSettings);\r\n                $(this).data('autocompleteField', plugin);\r\n            }\r\n        });\r\n    };\r\n\r\n})(jQuery);\r\n","/*! Magnific Popup - v1.1.0 - 2016-02-20\r\n* http://dimsemenov.com/plugins/magnific-popup/\r\n* Copyright (c) 2016 Dmitry Semenov; */\r\n;(function (factory) { \r\nif (typeof define === 'function' && define.amd) { \r\n // AMD. Register as an anonymous module. \r\n define(['jquery'], factory); \r\n } else if (typeof exports === 'object') { \r\n // Node/CommonJS \r\n factory(require('jquery')); \r\n } else { \r\n // Browser globals \r\n factory(window.jQuery || window.Zepto); \r\n } \r\n }(function($) { \r\n\r\n/*>>core*/\r\n/**\r\n * \r\n * Magnific Popup Core JS file\r\n * \r\n */\r\n\r\n\r\n/**\r\n * Private static constants\r\n */\r\nvar CLOSE_EVENT = 'Close',\r\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\r\n\tAFTER_CLOSE_EVENT = 'AfterClose',\r\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\r\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\r\n\tOPEN_EVENT = 'Open',\r\n\tCHANGE_EVENT = 'Change',\r\n\tNS = 'mfp',\r\n\tEVENT_NS = '.' + NS,\r\n\tREADY_CLASS = 'mfp-ready',\r\n\tREMOVING_CLASS = 'mfp-removing',\r\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\r\n\r\n\r\n/**\r\n * Private vars \r\n */\r\n/*jshint -W079 */\r\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\r\n\tMagnificPopup = function(){},\r\n\t_isJQ = !!(window.jQuery),\r\n\t_prevStatus,\r\n\t_window = $(window),\r\n\t_document,\r\n\t_prevContentType,\r\n\t_wrapClasses,\r\n\t_currPopupType;\r\n\r\n\r\n/**\r\n * Private functions\r\n */\r\nvar _mfpOn = function(name, f) {\r\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\r\n\t},\r\n\t_getEl = function(className, appendTo, html, raw) {\r\n\t\tvar el = document.createElement('div');\r\n\t\tel.className = 'mfp-'+className;\r\n\t\tif(html) {\r\n\t\t\tel.innerHTML = html;\r\n\t\t}\r\n\t\tif(!raw) {\r\n\t\t\tel = $(el);\r\n\t\t\tif(appendTo) {\r\n\t\t\t\tel.appendTo(appendTo);\r\n\t\t\t}\r\n\t\t} else if(appendTo) {\r\n\t\t\tappendTo.appendChild(el);\r\n\t\t}\r\n\t\treturn el;\r\n\t},\r\n\t_mfpTrigger = function(e, data) {\r\n\t\tmfp.ev.triggerHandler(NS + e, data);\r\n\r\n\t\tif(mfp.st.callbacks) {\r\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\r\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\r\n\t\t\tif(mfp.st.callbacks[e]) {\r\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_getCloseBtn = function(type) {\r\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\r\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\r\n\t\t\t_currPopupType = type;\r\n\t\t}\r\n\t\treturn mfp.currTemplate.closeBtn;\r\n\t},\r\n\t// Initialize Magnific Popup only when called at least once\r\n\t_checkInstance = function() {\r\n\t\tif(!$.magnificPopup.instance) {\r\n\t\t\t/*jshint -W020 */\r\n\t\t\tmfp = new MagnificPopup();\r\n\t\t\tmfp.init();\r\n\t\t\t$.magnificPopup.instance = mfp;\r\n\t\t}\r\n\t},\r\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\r\n\tsupportsTransitions = function() {\r\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\r\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\r\n\r\n\t\tif( s['transition'] !== undefined ) {\r\n\t\t\treturn true; \r\n\t\t}\r\n\t\t\t\r\n\t\twhile( v.length ) {\r\n\t\t\tif( v.pop() + 'Transition' in s ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\t\t\r\n\t\treturn false;\r\n\t};\r\n\r\n\r\n\r\n/**\r\n * Public functions\r\n */\r\nMagnificPopup.prototype = {\r\n\r\n\tconstructor: MagnificPopup,\r\n\r\n\t/**\r\n\t * Initializes Magnific Popup plugin. \r\n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\r\n\t */\r\n\tinit: function() {\r\n\t\tvar appVersion = navigator.appVersion;\r\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\r\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\r\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\r\n\t\tmfp.supportsTransition = supportsTransitions();\r\n\r\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\r\n\t\t// If you know a better way of detecting this - let me know.\r\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\r\n\t\t_document = $(document);\r\n\r\n\t\tmfp.popupsCache = {};\r\n\t},\r\n\r\n\t/**\r\n\t * Opens popup\r\n\t * @param  data [description]\r\n\t */\r\n\topen: function(data) {\r\n\r\n\t\tvar i;\r\n\r\n\t\tif(data.isObj === false) { \r\n\t\t\t// convert jQuery collection to array to avoid conflicts later\r\n\t\t\tmfp.items = data.items.toArray();\r\n\r\n\t\t\tmfp.index = 0;\r\n\t\t\tvar items = data.items,\r\n\t\t\t\titem;\r\n\t\t\tfor(i = 0; i < items.length; i++) {\r\n\t\t\t\titem = items[i];\r\n\t\t\t\tif(item.parsed) {\r\n\t\t\t\t\titem = item.el[0];\r\n\t\t\t\t}\r\n\t\t\t\tif(item === data.el[0]) {\r\n\t\t\t\t\tmfp.index = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\r\n\t\t\tmfp.index = data.index || 0;\r\n\t\t}\r\n\r\n\t\t// if popup is already opened - we just update the content\r\n\t\tif(mfp.isOpen) {\r\n\t\t\tmfp.updateItemHTML();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tmfp.types = []; \r\n\t\t_wrapClasses = '';\r\n\t\tif(data.mainEl && data.mainEl.length) {\r\n\t\t\tmfp.ev = data.mainEl.eq(0);\r\n\t\t} else {\r\n\t\t\tmfp.ev = _document;\r\n\t\t}\r\n\r\n\t\tif(data.key) {\r\n\t\t\tif(!mfp.popupsCache[data.key]) {\r\n\t\t\t\tmfp.popupsCache[data.key] = {};\r\n\t\t\t}\r\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\r\n\t\t} else {\r\n\t\t\tmfp.currTemplate = {};\r\n\t\t}\r\n\r\n\r\n\r\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \r\n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\r\n\r\n\t\tif(mfp.st.modal) {\r\n\t\t\tmfp.st.closeOnContentClick = false;\r\n\t\t\tmfp.st.closeOnBgClick = false;\r\n\t\t\tmfp.st.showCloseBtn = false;\r\n\t\t\tmfp.st.enableEscapeKey = false;\r\n\t\t}\r\n\t\t\r\n\r\n\t\t// Building markup\r\n\t\t// main containers are created only once\r\n\t\tif(!mfp.bgOverlay) {\r\n\r\n\t\t\t// Dark overlay\r\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\r\n\t\t\t\tmfp.close();\r\n\t\t\t});\r\n\r\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\r\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\r\n\t\t\t\t\tmfp.close();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\r\n\t\t}\r\n\r\n\t\tmfp.contentContainer = _getEl('content');\r\n\t\tif(mfp.st.preloader) {\r\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\r\n\t\t}\r\n\r\n\r\n\t\t// Initializing modules\r\n\t\tvar modules = $.magnificPopup.modules;\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar n = modules[i];\r\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\r\n\t\t\tmfp['init'+n].call(mfp);\r\n\t\t}\r\n\t\t_mfpTrigger('BeforeOpen');\r\n\r\n\r\n\t\tif(mfp.st.showCloseBtn) {\r\n\t\t\t// Close button\r\n\t\t\tif(!mfp.st.closeBtnInside) {\r\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\r\n\t\t\t} else {\r\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\r\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\r\n\t\t\t\t});\r\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(mfp.st.alignTop) {\r\n\t\t\t_wrapClasses += ' mfp-align-top';\r\n\t\t}\r\n\r\n\t\r\n\r\n\t\tif(mfp.fixedContentPos) {\r\n\t\t\tmfp.wrap.css({\r\n\t\t\t\toverflow: mfp.st.overflowY,\r\n\t\t\t\toverflowX: 'hidden',\r\n\t\t\t\toverflowY: mfp.st.overflowY\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tmfp.wrap.css({ \r\n\t\t\t\ttop: _window.scrollTop(),\r\n\t\t\t\tposition: 'absolute'\r\n\t\t\t});\r\n\t\t}\r\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\r\n\t\t\tmfp.bgOverlay.css({\r\n\t\t\t\theight: _document.height(),\r\n\t\t\t\tposition: 'absolute'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\tif(mfp.st.enableEscapeKey) {\r\n\t\t\t// Close on ESC key\r\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\r\n\t\t\t\tif(e.keyCode === 27) {\r\n\t\t\t\t\tmfp.close();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t_window.on('resize' + EVENT_NS, function() {\r\n\t\t\tmfp.updateSize();\r\n\t\t});\r\n\r\n\r\n\t\tif(!mfp.st.closeOnContentClick) {\r\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\r\n\t\t}\r\n\t\t\r\n\t\tif(_wrapClasses)\r\n\t\t\tmfp.wrap.addClass(_wrapClasses);\r\n\r\n\r\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\r\n\t\tvar windowHeight = mfp.wH = _window.height();\r\n\r\n\t\t\r\n\t\tvar windowStyles = {};\r\n\r\n\t\tif( mfp.fixedContentPos ) {\r\n            if(mfp._hasScrollBar(windowHeight)){\r\n                var s = mfp._getScrollbarSize();\r\n                if(s) {\r\n                    windowStyles.marginRight = s;\r\n                }\r\n            }\r\n        }\r\n\r\n\t\tif(mfp.fixedContentPos) {\r\n\t\t\tif(!mfp.isIE7) {\r\n\t\t\t\twindowStyles.overflow = 'hidden';\r\n\t\t\t} else {\r\n\t\t\t\t// ie7 double-scroll bug\r\n\t\t\t\t$('body, html').css('overflow', 'hidden');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\t\t\r\n\t\tvar classesToadd = mfp.st.mainClass;\r\n\t\tif(mfp.isIE7) {\r\n\t\t\tclassesToadd += ' mfp-ie7';\r\n\t\t}\r\n\t\tif(classesToadd) {\r\n\t\t\tmfp._addClassToMFP( classesToadd );\r\n\t\t}\r\n\r\n\t\t// add content\r\n\t\tmfp.updateItemHTML();\r\n\r\n\t\t_mfpTrigger('BuildControls');\r\n\r\n\t\t// remove scrollbar, add margin e.t.c\r\n\t\t$('html').css(windowStyles);\r\n\t\t\r\n\t\t// add everything to DOM\r\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\r\n\r\n\t\t// Save last focused element\r\n\t\tmfp._lastFocusedEl = document.activeElement;\r\n\t\t\r\n\t\t// Wait for next cycle to allow CSS transition\r\n\t\tsetTimeout(function() {\r\n\t\t\t\r\n\t\t\tif(mfp.content) {\r\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\r\n\t\t\t\tmfp._setFocus();\r\n\t\t\t} else {\r\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\r\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Trap the focus in popup\r\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\r\n\r\n\t\t}, 16);\r\n\r\n\t\tmfp.isOpen = true;\r\n\t\tmfp.updateSize(windowHeight);\r\n\t\t_mfpTrigger(OPEN_EVENT);\r\n\r\n\t\treturn data;\r\n\t},\r\n\r\n\t/**\r\n\t * Closes the popup\r\n\t */\r\n\tclose: function() {\r\n\t\tif(!mfp.isOpen) return;\r\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\r\n\r\n\t\tmfp.isOpen = false;\r\n\t\t// for CSS3 animation\r\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {\r\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tmfp._close();\r\n\t\t\t}, mfp.st.removalDelay);\r\n\t\t} else {\r\n\t\t\tmfp._close();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Helper for close() function\r\n\t */\r\n\t_close: function() {\r\n\t\t_mfpTrigger(CLOSE_EVENT);\r\n\r\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\r\n\r\n\t\tmfp.bgOverlay.detach();\r\n\t\tmfp.wrap.detach();\r\n\t\tmfp.container.empty();\r\n\r\n\t\tif(mfp.st.mainClass) {\r\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\r\n\t\t}\r\n\r\n\t\tmfp._removeClassFromMFP(classesToRemove);\r\n\r\n\t\tif(mfp.fixedContentPos) {\r\n\t\t\tvar windowStyles = {marginRight: ''};\r\n\t\t\tif(mfp.isIE7) {\r\n\t\t\t\t$('body, html').css('overflow', '');\r\n\t\t\t} else {\r\n\t\t\t\twindowStyles.overflow = '';\r\n\t\t\t}\r\n\t\t\t$('html').css(windowStyles);\r\n\t\t}\r\n\t\t\r\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\r\n\t\tmfp.ev.off(EVENT_NS);\r\n\r\n\t\t// clean up DOM elements that aren't removed\r\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\r\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\r\n\t\tmfp.container.attr('class', 'mfp-container');\r\n\r\n\t\t// remove close button from target element\r\n\t\tif(mfp.st.showCloseBtn &&\r\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\r\n\t\t\tif(mfp.currTemplate.closeBtn)\r\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\r\n\t\t}\r\n\r\n\r\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\r\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\r\n\t\t}\r\n\t\tmfp.currItem = null;\t\r\n\t\tmfp.content = null;\r\n\t\tmfp.currTemplate = null;\r\n\t\tmfp.prevHeight = 0;\r\n\r\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\r\n\t},\r\n\t\r\n\tupdateSize: function(winHeight) {\r\n\r\n\t\tif(mfp.isIOS) {\r\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\r\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\r\n\t\t\tvar height = window.innerHeight * zoomLevel;\r\n\t\t\tmfp.wrap.css('height', height);\r\n\t\t\tmfp.wH = height;\r\n\t\t} else {\r\n\t\t\tmfp.wH = winHeight || _window.height();\r\n\t\t}\r\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\r\n\t\tif(!mfp.fixedContentPos) {\r\n\t\t\tmfp.wrap.css('height', mfp.wH);\r\n\t\t}\r\n\r\n\t\t_mfpTrigger('Resize');\r\n\r\n\t},\r\n\r\n\t/**\r\n\t * Set content of popup based on current index\r\n\t */\r\n\tupdateItemHTML: function() {\r\n\t\tvar item = mfp.items[mfp.index];\r\n\r\n\t\t// Detach and perform modifications\r\n\t\tmfp.contentContainer.detach();\r\n\r\n\t\tif(mfp.content)\r\n\t\t\tmfp.content.detach();\r\n\r\n\t\tif(!item.parsed) {\r\n\t\t\titem = mfp.parseEl( mfp.index );\r\n\t\t}\r\n\r\n\t\tvar type = item.type;\r\n\r\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\r\n\t\t// BeforeChange event works like so:\r\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\r\n\r\n\t\tmfp.currItem = item;\r\n\r\n\t\tif(!mfp.currTemplate[type]) {\r\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\r\n\r\n\t\t\t// allows to modify markup\r\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\r\n\r\n\t\t\tif(markup) {\r\n\t\t\t\tmfp.currTemplate[type] = $(markup);\r\n\t\t\t} else {\r\n\t\t\t\t// if there is no markup found we just define that template is parsed\r\n\t\t\t\tmfp.currTemplate[type] = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(_prevContentType && _prevContentType !== item.type) {\r\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\r\n\t\t}\r\n\r\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\r\n\t\tmfp.appendContent(newContent, type);\r\n\r\n\t\titem.preloaded = true;\r\n\r\n\t\t_mfpTrigger(CHANGE_EVENT, item);\r\n\t\t_prevContentType = item.type;\r\n\r\n\t\t// Append container back after its content changed\r\n\t\tmfp.container.prepend(mfp.contentContainer);\r\n\r\n\t\t_mfpTrigger('AfterChange');\r\n\t},\r\n\r\n\r\n\t/**\r\n\t * Set HTML content of popup\r\n\t */\r\n\tappendContent: function(newContent, type) {\r\n\t\tmfp.content = newContent;\r\n\r\n\t\tif(newContent) {\r\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\r\n\t\t\t\tmfp.currTemplate[type] === true) {\r\n\t\t\t\t// if there is no markup, we just append close button element inside\r\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\r\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tmfp.content = newContent;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmfp.content = '';\r\n\t\t}\r\n\r\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\r\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\r\n\r\n\t\tmfp.contentContainer.append(mfp.content);\r\n\t},\r\n\r\n\r\n\t/**\r\n\t * Creates Magnific Popup data object based on given data\r\n\t * @param  {int} index Index of item to parse\r\n\t */\r\n\tparseEl: function(index) {\r\n\t\tvar item = mfp.items[index],\r\n\t\t\ttype;\r\n\r\n\t\tif(item.tagName) {\r\n\t\t\titem = { el: $(item) };\r\n\t\t} else {\r\n\t\t\ttype = item.type;\r\n\t\t\titem = { data: item, src: item.src };\r\n\t\t}\r\n\r\n\t\tif(item.el) {\r\n\t\t\tvar types = mfp.types;\r\n\r\n\t\t\t// check for 'mfp-TYPE' class\r\n\t\t\tfor(var i = 0; i < types.length; i++) {\r\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\r\n\t\t\t\t\ttype = types[i];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\titem.src = item.el.attr('data-mfp-src');\r\n\t\t\tif(!item.src) {\r\n\t\t\t\titem.src = item.el.attr('href');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\titem.type = type || mfp.st.type || 'inline';\r\n\t\titem.index = index;\r\n\t\titem.parsed = true;\r\n\t\tmfp.items[index] = item;\r\n\t\t_mfpTrigger('ElementParse', item);\r\n\r\n\t\treturn mfp.items[index];\r\n\t},\r\n\r\n\r\n\t/**\r\n\t * Initializes single popup or a group of popups\r\n\t */\r\n\taddGroup: function(el, options) {\r\n\t\tvar eHandler = function(e) {\r\n\t\t\te.mfpEl = this;\r\n\t\t\tmfp._openClick(e, el, options);\r\n\t\t};\r\n\r\n\t\tif(!options) {\r\n\t\t\toptions = {};\r\n\t\t}\r\n\r\n\t\tvar eName = 'click.magnificPopup';\r\n\t\toptions.mainEl = el;\r\n\r\n\t\tif(options.items) {\r\n\t\t\toptions.isObj = true;\r\n\t\t\tel.off(eName).on(eName, eHandler);\r\n\t\t} else {\r\n\t\t\toptions.isObj = false;\r\n\t\t\tif(options.delegate) {\r\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\r\n\t\t\t} else {\r\n\t\t\t\toptions.items = el;\r\n\t\t\t\tel.off(eName).on(eName, eHandler);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_openClick: function(e, el, options) {\r\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\r\n\r\n\r\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\r\n\r\n\t\tif(disableOn) {\r\n\t\t\tif($.isFunction(disableOn)) {\r\n\t\t\t\tif( !disableOn.call(mfp) ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else { // else it's number\r\n\t\t\t\tif( _window.width() < disableOn ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(e.type) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\r\n\t\t\tif(mfp.isOpen) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.el = $(e.mfpEl);\r\n\t\tif(options.delegate) {\r\n\t\t\toptions.items = el.find(options.delegate);\r\n\t\t}\r\n\t\tmfp.open(options);\r\n\t},\r\n\r\n\r\n\t/**\r\n\t * Updates text on preloader\r\n\t */\r\n\tupdateStatus: function(status, text) {\r\n\r\n\t\tif(mfp.preloader) {\r\n\t\t\tif(_prevStatus !== status) {\r\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\r\n\t\t\t}\r\n\r\n\t\t\tif(!text && status === 'loading') {\r\n\t\t\t\ttext = mfp.st.tLoading;\r\n\t\t\t}\r\n\r\n\t\t\tvar data = {\r\n\t\t\t\tstatus: status,\r\n\t\t\t\ttext: text\r\n\t\t\t};\r\n\t\t\t// allows to modify status\r\n\t\t\t_mfpTrigger('UpdateStatus', data);\r\n\r\n\t\t\tstatus = data.status;\r\n\t\t\ttext = data.text;\r\n\r\n\t\t\tmfp.preloader.html(text);\r\n\r\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t});\r\n\r\n\t\t\tmfp.container.addClass('mfp-s-'+status);\r\n\t\t\t_prevStatus = status;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t/*\r\n\t\t\"Private\" helpers that aren't private at all\r\n\t */\r\n\t// Check to close popup or not\r\n\t// \"target\" is an element that was clicked\r\n\t_checkIfClose: function(target) {\r\n\r\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\r\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\r\n\r\n\t\tif(closeOnContent && closeOnBg) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\r\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\r\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\t// if click is outside the content\r\n\t\t\tif(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {\r\n\t\t\t\tif(closeOnBg) {\r\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\r\n\t\t\t\t\tif( $.contains(document, target) ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if(closeOnContent) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\t_addClassToMFP: function(cName) {\r\n\t\tmfp.bgOverlay.addClass(cName);\r\n\t\tmfp.wrap.addClass(cName);\r\n\t},\r\n\t_removeClassFromMFP: function(cName) {\r\n\t\tthis.bgOverlay.removeClass(cName);\r\n\t\tmfp.wrap.removeClass(cName);\r\n\t},\r\n\t_hasScrollBar: function(winHeight) {\r\n\t\treturn (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\r\n\t},\r\n\t_setFocus: function() {\r\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\r\n\t},\r\n\t_onFocusIn: function(e) {\r\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\r\n\t\t\tmfp._setFocus();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n\t_parseMarkup: function(template, values, item) {\r\n\t\tvar arr;\r\n\t\tif(item.data) {\r\n\t\t\tvalues = $.extend(item.data, values);\r\n\t\t}\r\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\r\n\r\n\t\t$.each(values, function(key, value) {\r\n\t\t\tif(value === undefined || value === false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tarr = key.split('_');\r\n\t\t\tif(arr.length > 1) {\r\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\r\n\r\n\t\t\t\tif(el.length > 0) {\r\n\t\t\t\t\tvar attr = arr[1];\r\n\t\t\t\t\tif(attr === 'replaceWith') {\r\n\t\t\t\t\t\tif(el[0] !== value[0]) {\r\n\t\t\t\t\t\t\tel.replaceWith(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if(attr === 'img') {\r\n\t\t\t\t\t\tif(el.is('img')) {\r\n\t\t\t\t\t\t\tel.attr('src', value);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tel.attr(arr[1], value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_getScrollbarSize: function() {\r\n\t\t// thx David\r\n\t\tif(mfp.scrollbarSize === undefined) {\r\n\t\t\tvar scrollDiv = document.createElement(\"div\");\r\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\r\n\t\t\tdocument.body.appendChild(scrollDiv);\r\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n\t\t\tdocument.body.removeChild(scrollDiv);\r\n\t\t}\r\n\t\treturn mfp.scrollbarSize;\r\n\t}\r\n\r\n}; /* MagnificPopup core prototype end */\r\n\r\n\r\n\r\n\r\n/**\r\n * Public static functions\r\n */\r\n$.magnificPopup = {\r\n\tinstance: null,\r\n\tproto: MagnificPopup.prototype,\r\n\tmodules: [],\r\n\r\n\topen: function(options, index) {\r\n\t\t_checkInstance();\r\n\r\n\t\tif(!options) {\r\n\t\t\toptions = {};\r\n\t\t} else {\r\n\t\t\toptions = $.extend(true, {}, options);\r\n\t\t}\r\n\r\n\t\toptions.isObj = true;\r\n\t\toptions.index = index || 0;\r\n\t\treturn this.instance.open(options);\r\n\t},\r\n\r\n\tclose: function() {\r\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\r\n\t},\r\n\r\n\tregisterModule: function(name, module) {\r\n\t\tif(module.options) {\r\n\t\t\t$.magnificPopup.defaults[name] = module.options;\r\n\t\t}\r\n\t\t$.extend(this.proto, module.proto);\r\n\t\tthis.modules.push(name);\r\n\t},\r\n\r\n\tdefaults: {\r\n\r\n\t\t// Info about options is in docs:\r\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\r\n\r\n\t\tdisableOn: 0,\r\n\r\n\t\tkey: null,\r\n\r\n\t\tmidClick: false,\r\n\r\n\t\tmainClass: '',\r\n\r\n\t\tpreloader: true,\r\n\r\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\r\n\r\n\t\tcloseOnContentClick: false,\r\n\r\n\t\tcloseOnBgClick: true,\r\n\r\n\t\tcloseBtnInside: true,\r\n\r\n\t\tshowCloseBtn: true,\r\n\r\n\t\tenableEscapeKey: true,\r\n\r\n\t\tmodal: false,\r\n\r\n\t\talignTop: false,\r\n\r\n\t\tremovalDelay: 0,\r\n\r\n\t\tprependTo: null,\r\n\r\n\t\tfixedContentPos: 'auto',\r\n\r\n\t\tfixedBgPos: 'auto',\r\n\r\n\t\toverflowY: 'auto',\r\n\r\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',\r\n\r\n\t\ttClose: 'Close (Esc)',\r\n\r\n\t\ttLoading: 'Loading...',\r\n\r\n\t\tautoFocusLast: true\r\n\r\n\t}\r\n};\r\n\r\n\r\n\r\n$.fn.magnificPopup = function(options) {\r\n\t_checkInstance();\r\n\r\n\tvar jqEl = $(this);\r\n\r\n\t// We call some API method of first param is a string\r\n\tif (typeof options === \"string\" ) {\r\n\r\n\t\tif(options === 'open') {\r\n\t\t\tvar items,\r\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\r\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\r\n\r\n\t\t\tif(itemOpts.items) {\r\n\t\t\t\titems = itemOpts.items[index];\r\n\t\t\t} else {\r\n\t\t\t\titems = jqEl;\r\n\t\t\t\tif(itemOpts.delegate) {\r\n\t\t\t\t\titems = items.find(itemOpts.delegate);\r\n\t\t\t\t}\r\n\t\t\t\titems = items.eq( index );\r\n\t\t\t}\r\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\r\n\t\t} else {\r\n\t\t\tif(mfp.isOpen)\r\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\r\n\t\t}\r\n\r\n\t} else {\r\n\t\t// clone options obj\r\n\t\toptions = $.extend(true, {}, options);\r\n\r\n\t\t/*\r\n\t\t * As Zepto doesn't support .data() method for objects\r\n\t\t * and it works only in normal browsers\r\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\r\n\t\t */\r\n\t\tif(_isJQ) {\r\n\t\t\tjqEl.data('magnificPopup', options);\r\n\t\t} else {\r\n\t\t\tjqEl[0].magnificPopup = options;\r\n\t\t}\r\n\r\n\t\tmfp.addGroup(jqEl, options);\r\n\r\n\t}\r\n\treturn jqEl;\r\n};\r\n\r\n/*>>core*/\r\n\r\n/*>>inline*/\r\n\r\nvar INLINE_NS = 'inline',\r\n\t_hiddenClass,\r\n\t_inlinePlaceholder,\r\n\t_lastInlineElement,\r\n\t_putInlineElementsBack = function() {\r\n\t\tif(_lastInlineElement) {\r\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\r\n\t\t\t_lastInlineElement = null;\r\n\t\t}\r\n\t};\r\n\r\n$.magnificPopup.registerModule(INLINE_NS, {\r\n\toptions: {\r\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\r\n\t\tmarkup: '',\r\n\t\ttNotFound: 'Content not found'\r\n\t},\r\n\tproto: {\r\n\r\n\t\tinitInline: function() {\r\n\t\t\tmfp.types.push(INLINE_NS);\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\r\n\t\t\t\t_putInlineElementsBack();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tgetInline: function(item, template) {\r\n\r\n\t\t\t_putInlineElementsBack();\r\n\r\n\t\t\tif(item.src) {\r\n\t\t\t\tvar inlineSt = mfp.st.inline,\r\n\t\t\t\t\tel = $(item.src);\r\n\r\n\t\t\t\tif(el.length) {\r\n\r\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\r\n\t\t\t\t\tvar parent = el[0].parentNode;\r\n\t\t\t\t\tif(parent && parent.tagName) {\r\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\r\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\r\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\r\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// replace target inline element with placeholder\r\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmfp.updateStatus('ready');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\r\n\t\t\t\t\tel = $('<div>');\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.inlineElement = el;\r\n\t\t\t\treturn el;\r\n\t\t\t}\r\n\r\n\t\t\tmfp.updateStatus('ready');\r\n\t\t\tmfp._parseMarkup(template, {}, item);\r\n\t\t\treturn template;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/*>>inline*/\r\n\r\n/*>>ajax*/\r\nvar AJAX_NS = 'ajax',\r\n\t_ajaxCur,\r\n\t_removeAjaxCursor = function() {\r\n\t\tif(_ajaxCur) {\r\n\t\t\t$(document.body).removeClass(_ajaxCur);\r\n\t\t}\r\n\t},\r\n\t_destroyAjaxRequest = function() {\r\n\t\t_removeAjaxCursor();\r\n\t\tif(mfp.req) {\r\n\t\t\tmfp.req.abort();\r\n\t\t}\r\n\t};\r\n\r\n$.magnificPopup.registerModule(AJAX_NS, {\r\n\r\n\toptions: {\r\n\t\tsettings: null,\r\n\t\tcursor: 'mfp-ajax-cur',\r\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\r\n\t},\r\n\r\n\tproto: {\r\n\t\tinitAjax: function() {\r\n\t\t\tmfp.types.push(AJAX_NS);\r\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\r\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\r\n\t\t},\r\n\t\tgetAjax: function(item) {\r\n\r\n\t\t\tif(_ajaxCur) {\r\n\t\t\t\t$(document.body).addClass(_ajaxCur);\r\n\t\t\t}\r\n\r\n\t\t\tmfp.updateStatus('loading');\r\n\r\n\t\t\tvar opts = $.extend({\r\n\t\t\t\turl: item.src,\r\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\r\n\t\t\t\t\tvar temp = {\r\n\t\t\t\t\t\tdata:data,\r\n\t\t\t\t\t\txhr:jqXHR\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\r\n\r\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\r\n\r\n\t\t\t\t\titem.finished = true;\r\n\r\n\t\t\t\t\t_removeAjaxCursor();\r\n\r\n\t\t\t\t\tmfp._setFocus();\r\n\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\r\n\t\t\t\t\t}, 16);\r\n\r\n\t\t\t\t\tmfp.updateStatus('ready');\r\n\r\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\r\n\t\t\t\t},\r\n\t\t\t\terror: function() {\r\n\t\t\t\t\t_removeAjaxCursor();\r\n\t\t\t\t\titem.finished = item.loadError = true;\r\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\r\n\t\t\t\t}\r\n\t\t\t}, mfp.st.ajax.settings);\r\n\r\n\t\t\tmfp.req = $.ajax(opts);\r\n\r\n\t\t\treturn '';\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/*>>ajax*/\r\n\r\n/*>>image*/\r\nvar _imgInterval,\r\n\t_getTitle = function(item) {\r\n\t\tif(item.data && item.data.title !== undefined)\r\n\t\t\treturn item.data.title;\r\n\r\n\t\tvar src = mfp.st.image.titleSrc;\r\n\r\n\t\tif(src) {\r\n\t\t\tif($.isFunction(src)) {\r\n\t\t\t\treturn src.call(mfp, item);\r\n\t\t\t} else if(item.el) {\r\n\t\t\t\treturn item.el.attr(src) || '';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n$.magnificPopup.registerModule('image', {\r\n\r\n\toptions: {\r\n\t\tmarkup: '<div class=\"mfp-figure\">'+\r\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\r\n\t\t\t\t\t'<figure>'+\r\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\r\n\t\t\t\t\t\t'<figcaption>'+\r\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\r\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\r\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t'</figcaption>'+\r\n\t\t\t\t\t'</figure>'+\r\n\t\t\t\t'</div>',\r\n\t\tcursor: 'mfp-zoom-out-cur',\r\n\t\ttitleSrc: 'title',\r\n\t\tverticalFit: true,\r\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\r\n\t},\r\n\r\n\tproto: {\r\n\t\tinitImage: function() {\r\n\t\t\tvar imgSt = mfp.st.image,\r\n\t\t\t\tns = '.image';\r\n\r\n\t\t\tmfp.types.push('image');\r\n\r\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\r\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\r\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\r\n\t\t\t\tif(imgSt.cursor) {\r\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\r\n\t\t\t\t}\r\n\t\t\t\t_window.off('resize' + EVENT_NS);\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\r\n\t\t\tif(mfp.isLowIE) {\r\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\r\n\t\t\t}\r\n\t\t},\r\n\t\tresizeImage: function() {\r\n\t\t\tvar item = mfp.currItem;\r\n\t\t\tif(!item || !item.img) return;\r\n\r\n\t\t\tif(mfp.st.image.verticalFit) {\r\n\t\t\t\tvar decr = 0;\r\n\t\t\t\t// fix box-sizing in ie7/8\r\n\t\t\t\tif(mfp.isLowIE) {\r\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\r\n\t\t\t\t}\r\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_onImageHasSize: function(item) {\r\n\t\t\tif(item.img) {\r\n\r\n\t\t\t\titem.hasSize = true;\r\n\r\n\t\t\t\tif(_imgInterval) {\r\n\t\t\t\t\tclearInterval(_imgInterval);\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.isCheckingImgSize = false;\r\n\r\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\r\n\r\n\t\t\t\tif(item.imgHidden) {\r\n\t\t\t\t\tif(mfp.content)\r\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\r\n\r\n\t\t\t\t\titem.imgHidden = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Function that loops until the image has size to display elements that rely on it asap\r\n\t\t */\r\n\t\tfindImageSize: function(item) {\r\n\r\n\t\t\tvar counter = 0,\r\n\t\t\t\timg = item.img[0],\r\n\t\t\t\tmfpSetInterval = function(delay) {\r\n\r\n\t\t\t\t\tif(_imgInterval) {\r\n\t\t\t\t\t\tclearInterval(_imgInterval);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// decelerating interval that checks for size of an image\r\n\t\t\t\t\t_imgInterval = setInterval(function() {\r\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\r\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(counter > 200) {\r\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcounter++;\r\n\t\t\t\t\t\tif(counter === 3) {\r\n\t\t\t\t\t\t\tmfpSetInterval(10);\r\n\t\t\t\t\t\t} else if(counter === 40) {\r\n\t\t\t\t\t\t\tmfpSetInterval(50);\r\n\t\t\t\t\t\t} else if(counter === 100) {\r\n\t\t\t\t\t\t\tmfpSetInterval(500);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t};\r\n\r\n\t\t\tmfpSetInterval(1);\r\n\t\t},\r\n\r\n\t\tgetImage: function(item, template) {\r\n\r\n\t\t\tvar guard = 0,\r\n\r\n\t\t\t\t// image load complete handler\r\n\t\t\t\tonLoadComplete = function() {\r\n\t\t\t\t\tif(item) {\r\n\t\t\t\t\t\tif (item.img[0].complete) {\r\n\t\t\t\t\t\t\titem.img.off('.mfploader');\r\n\r\n\t\t\t\t\t\t\tif(item === mfp.currItem){\r\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\r\n\r\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.hasSize = true;\r\n\t\t\t\t\t\t\titem.loaded = true;\r\n\r\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\r\n\t\t\t\t\t\t\tguard++;\r\n\t\t\t\t\t\t\tif(guard < 200) {\r\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tonLoadError();\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\r\n\t\t\t\t// image error handler\r\n\t\t\t\tonLoadError = function() {\r\n\t\t\t\t\tif(item) {\r\n\t\t\t\t\t\titem.img.off('.mfploader');\r\n\t\t\t\t\t\tif(item === mfp.currItem){\r\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\r\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\titem.hasSize = true;\r\n\t\t\t\t\t\titem.loaded = true;\r\n\t\t\t\t\t\titem.loadError = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\timgSt = mfp.st.image;\r\n\r\n\r\n\t\t\tvar el = template.find('.mfp-img');\r\n\t\t\tif(el.length) {\r\n\t\t\t\tvar img = document.createElement('img');\r\n\t\t\t\timg.className = 'mfp-img';\r\n\t\t\t\tif(item.el && item.el.find('img').length) {\r\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\r\n\t\t\t\t}\r\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\r\n\t\t\t\timg.src = item.src;\r\n\r\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\r\n\t\t\t\t// TODO: find a way to avoid such cloning\r\n\t\t\t\tif(el.is('img')) {\r\n\t\t\t\t\titem.img = item.img.clone();\r\n\t\t\t\t}\r\n\r\n\t\t\t\timg = item.img[0];\r\n\t\t\t\tif(img.naturalWidth > 0) {\r\n\t\t\t\t\titem.hasSize = true;\r\n\t\t\t\t} else if(!img.width) {\r\n\t\t\t\t\titem.hasSize = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmfp._parseMarkup(template, {\r\n\t\t\t\ttitle: _getTitle(item),\r\n\t\t\t\timg_replaceWith: item.img\r\n\t\t\t}, item);\r\n\r\n\t\t\tmfp.resizeImage();\r\n\r\n\t\t\tif(item.hasSize) {\r\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\r\n\r\n\t\t\t\tif(item.loadError) {\r\n\t\t\t\t\ttemplate.addClass('mfp-loading');\r\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\r\n\t\t\t\t\tmfp.updateStatus('ready');\r\n\t\t\t\t}\r\n\t\t\t\treturn template;\r\n\t\t\t}\r\n\r\n\t\t\tmfp.updateStatus('loading');\r\n\t\t\titem.loading = true;\r\n\r\n\t\t\tif(!item.hasSize) {\r\n\t\t\t\titem.imgHidden = true;\r\n\t\t\t\ttemplate.addClass('mfp-loading');\r\n\t\t\t\tmfp.findImageSize(item);\r\n\t\t\t}\r\n\r\n\t\t\treturn template;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/*>>image*/\r\n\r\n/*>>zoom*/\r\nvar hasMozTransform,\r\n\tgetHasMozTransform = function() {\r\n\t\tif(hasMozTransform === undefined) {\r\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\r\n\t\t}\r\n\t\treturn hasMozTransform;\r\n\t};\r\n\r\n$.magnificPopup.registerModule('zoom', {\r\n\r\n\toptions: {\r\n\t\tenabled: false,\r\n\t\teasing: 'ease-in-out',\r\n\t\tduration: 300,\r\n\t\topener: function(element) {\r\n\t\t\treturn element.is('img') ? element : element.find('img');\r\n\t\t}\r\n\t},\r\n\r\n\tproto: {\r\n\r\n\t\tinitZoom: function() {\r\n\t\t\tvar zoomSt = mfp.st.zoom,\r\n\t\t\t\tns = '.zoom',\r\n\t\t\t\timage;\r\n\r\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar duration = zoomSt.duration,\r\n\t\t\t\tgetElToAnimate = function(image) {\r\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\r\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\r\n\t\t\t\t\t\tcssObj = {\r\n\t\t\t\t\t\t\tposition: 'fixed',\r\n\t\t\t\t\t\t\tzIndex: 9999,\r\n\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tt = 'transition';\r\n\r\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\r\n\r\n\t\t\t\t\tnewImg.css(cssObj);\r\n\t\t\t\t\treturn newImg;\r\n\t\t\t\t},\r\n\t\t\t\tshowMainContent = function() {\r\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\r\n\t\t\t\t},\r\n\t\t\t\topenTimeout,\r\n\t\t\t\tanimatedImg;\r\n\r\n\t\t\t_mfpOn('BuildControls'+ns, function() {\r\n\t\t\t\tif(mfp._allowZoom()) {\r\n\r\n\t\t\t\t\tclearTimeout(openTimeout);\r\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\r\n\r\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\r\n\r\n\t\t\t\t\timage = mfp._getItemToZoom();\r\n\r\n\t\t\t\t\tif(!image) {\r\n\t\t\t\t\t\tshowMainContent();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\r\n\r\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\r\n\r\n\t\t\t\t\tmfp.wrap.append(animatedImg);\r\n\r\n\t\t\t\t\topenTimeout = setTimeout(function() {\r\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\r\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\r\n\r\n\t\t\t\t\t\t\tshowMainContent();\r\n\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tanimatedImg.remove();\r\n\t\t\t\t\t\t\t\timage = animatedImg = null;\r\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\r\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\r\n\r\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\r\n\r\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\r\n\r\n\r\n\t\t\t\t\t// Lots of timeouts...\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\r\n\t\t\t\tif(mfp._allowZoom()) {\r\n\r\n\t\t\t\t\tclearTimeout(openTimeout);\r\n\r\n\t\t\t\t\tmfp.st.removalDelay = duration;\r\n\r\n\t\t\t\t\tif(!image) {\r\n\t\t\t\t\t\timage = mfp._getItemToZoom();\r\n\t\t\t\t\t\tif(!image) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\r\n\t\t\t\t\tmfp.wrap.append(animatedImg);\r\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\r\n\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\r\n\t\t\t\t\t}, 16);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\r\n\t\t\t\tif(mfp._allowZoom()) {\r\n\t\t\t\t\tshowMainContent();\r\n\t\t\t\t\tif(animatedImg) {\r\n\t\t\t\t\t\tanimatedImg.remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t\timage = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t_allowZoom: function() {\r\n\t\t\treturn mfp.currItem.type === 'image';\r\n\t\t},\r\n\r\n\t\t_getItemToZoom: function() {\r\n\t\t\tif(mfp.currItem.hasSize) {\r\n\t\t\t\treturn mfp.currItem.img;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Get element postion relative to viewport\r\n\t\t_getOffset: function(isLarge) {\r\n\t\t\tvar el;\r\n\t\t\tif(isLarge) {\r\n\t\t\t\tel = mfp.currItem.img;\r\n\t\t\t} else {\r\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\r\n\t\t\t}\r\n\r\n\t\t\tvar offset = el.offset();\r\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\r\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\r\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\r\n\r\n\r\n\t\t\t/*\r\n\r\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\r\n\r\n\t\t\t */\r\n\t\t\tvar obj = {\r\n\t\t\t\twidth: el.width(),\r\n\t\t\t\t// fix Zepto height+padding issue\r\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\r\n\t\t\t};\r\n\r\n\t\t\t// I hate to do this, but there is no another option\r\n\t\t\tif( getHasMozTransform() ) {\r\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\r\n\t\t\t} else {\r\n\t\t\t\tobj.left = offset.left;\r\n\t\t\t\tobj.top = offset.top;\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t}\r\n});\r\n\r\n\r\n\r\n/*>>zoom*/\r\n\r\n/*>>iframe*/\r\n\r\nvar IFRAME_NS = 'iframe',\r\n\t_emptyPage = '//about:blank',\r\n\r\n\t_fixIframeBugs = function(isShowing) {\r\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\r\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\r\n\t\t\tif(el.length) {\r\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\r\n\t\t\t\tif(!isShowing) {\r\n\t\t\t\t\tel[0].src = _emptyPage;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// IE8 black screen bug fix\r\n\t\t\t\tif(mfp.isIE8) {\r\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n$.magnificPopup.registerModule(IFRAME_NS, {\r\n\r\n\toptions: {\r\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\r\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\r\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\r\n\t\t\t\t'</div>',\r\n\r\n\t\tsrcAction: 'iframe_src',\r\n\r\n\t\t// we don't care and support only one default type of URL by default\r\n\t\tpatterns: {\r\n\t\t\tyoutube: {\r\n\t\t\t\tindex: 'youtube.com',\r\n\t\t\t\tid: 'v=',\r\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\r\n\t\t\t},\r\n\t\t\tvimeo: {\r\n\t\t\t\tindex: 'vimeo.com/',\r\n\t\t\t\tid: '/',\r\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\r\n\t\t\t},\r\n\t\t\tgmaps: {\r\n\t\t\t\tindex: '//maps.google.',\r\n\t\t\t\tsrc: '%id%&output=embed'\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tproto: {\r\n\t\tinitIframe: function() {\r\n\t\t\tmfp.types.push(IFRAME_NS);\r\n\r\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\r\n\t\t\t\tif(prevType !== newType) {\r\n\t\t\t\t\tif(prevType === IFRAME_NS) {\r\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\r\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\r\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\r\n\t\t\t\t\t}\r\n\t\t\t\t}// else {\r\n\t\t\t\t\t// iframe source is switched, don't do anything\r\n\t\t\t\t//}\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\r\n\t\t\t\t_fixIframeBugs();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tgetIframe: function(item, template) {\r\n\t\t\tvar embedSrc = item.src;\r\n\t\t\tvar iframeSt = mfp.st.iframe;\r\n\r\n\t\t\t$.each(iframeSt.patterns, function() {\r\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\r\n\t\t\t\t\tif(this.id) {\r\n\t\t\t\t\t\tif(typeof this.id === 'string') {\r\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\r\n\t\t\t\t\treturn false; // break;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar dataObj = {};\r\n\t\t\tif(iframeSt.srcAction) {\r\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\r\n\t\t\t}\r\n\t\t\tmfp._parseMarkup(template, dataObj, item);\r\n\r\n\t\t\tmfp.updateStatus('ready');\r\n\r\n\t\t\treturn template;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n\r\n\r\n/*>>iframe*/\r\n\r\n/*>>gallery*/\r\n/**\r\n * Get looped index depending on number of slides\r\n */\r\nvar _getLoopedId = function(index) {\r\n\t\tvar numSlides = mfp.items.length;\r\n\t\tif(index > numSlides - 1) {\r\n\t\t\treturn index - numSlides;\r\n\t\t} else  if(index < 0) {\r\n\t\t\treturn numSlides + index;\r\n\t\t}\r\n\t\treturn index;\r\n\t},\r\n\t_replaceCurrTotal = function(text, curr, total) {\r\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\r\n\t};\r\n\r\n$.magnificPopup.registerModule('gallery', {\r\n\r\n\toptions: {\r\n\t\tenabled: false,\r\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\r\n\t\tpreload: [0,2],\r\n\t\tnavigateByImgClick: true,\r\n\t\tarrows: true,\r\n\r\n\t\ttPrev: 'Previous (Left arrow key)',\r\n\t\ttNext: 'Next (Right arrow key)',\r\n\t\ttCounter: '%curr% of %total%'\r\n\t},\r\n\r\n\tproto: {\r\n\t\tinitGallery: function() {\r\n\r\n\t\t\tvar gSt = mfp.st.gallery,\r\n\t\t\t\tns = '.mfp-gallery';\r\n\r\n\t\t\tmfp.direction = true; // true - next, false - prev\r\n\r\n\t\t\tif(!gSt || !gSt.enabled ) return false;\r\n\r\n\t\t\t_wrapClasses += ' mfp-gallery';\r\n\r\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\r\n\r\n\t\t\t\tif(gSt.navigateByImgClick) {\r\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\r\n\t\t\t\t\t\tif(mfp.items.length > 1) {\r\n\t\t\t\t\t\t\tmfp.next();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_document.on('keydown'+ns, function(e) {\r\n\t\t\t\t\tif (e.keyCode === 37) {\r\n\t\t\t\t\t\tmfp.prev();\r\n\t\t\t\t\t} else if (e.keyCode === 39) {\r\n\t\t\t\t\t\tmfp.next();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\r\n\t\t\t\tif(data.text) {\r\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\r\n\t\t\t\tvar l = mfp.items.length;\r\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn('BuildControls' + ns, function() {\r\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\r\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\r\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\r\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\r\n\r\n\t\t\t\t\tarrowLeft.click(function() {\r\n\t\t\t\t\t\tmfp.prev();\r\n\t\t\t\t\t});\r\n\t\t\t\t\tarrowRight.click(function() {\r\n\t\t\t\t\t\tmfp.next();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\r\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\r\n\r\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\r\n\t\t\t\t\tmfp.preloadNearbyImages();\r\n\t\t\t\t\tmfp._preloadTimeout = null;\r\n\t\t\t\t}, 16);\r\n\t\t\t});\r\n\r\n\r\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\r\n\t\t\t\t_document.off(ns);\r\n\t\t\t\tmfp.wrap.off('click'+ns);\r\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\r\n\t\t\t});\r\n\r\n\t\t},\r\n\t\tnext: function() {\r\n\t\t\tmfp.direction = true;\r\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\r\n\t\t\tmfp.updateItemHTML();\r\n\t\t},\r\n\t\tprev: function() {\r\n\t\t\tmfp.direction = false;\r\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\r\n\t\t\tmfp.updateItemHTML();\r\n\t\t},\r\n\t\tgoTo: function(newIndex) {\r\n\t\t\tmfp.direction = (newIndex >= mfp.index);\r\n\t\t\tmfp.index = newIndex;\r\n\t\t\tmfp.updateItemHTML();\r\n\t\t},\r\n\t\tpreloadNearbyImages: function() {\r\n\t\t\tvar p = mfp.st.gallery.preload,\r\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\r\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\r\n\t\t\t\ti;\r\n\r\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\r\n\t\t\t\tmfp._preloadItem(mfp.index+i);\r\n\t\t\t}\r\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\r\n\t\t\t\tmfp._preloadItem(mfp.index-i);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_preloadItem: function(index) {\r\n\t\t\tindex = _getLoopedId(index);\r\n\r\n\t\t\tif(mfp.items[index].preloaded) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar item = mfp.items[index];\r\n\t\t\tif(!item.parsed) {\r\n\t\t\t\titem = mfp.parseEl( index );\r\n\t\t\t}\r\n\r\n\t\t\t_mfpTrigger('LazyLoad', item);\r\n\r\n\t\t\tif(item.type === 'image') {\r\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\r\n\t\t\t\t\titem.hasSize = true;\r\n\t\t\t\t}).on('error.mfploader', function() {\r\n\t\t\t\t\titem.hasSize = true;\r\n\t\t\t\t\titem.loadError = true;\r\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\r\n\t\t\t\t}).attr('src', item.src);\r\n\t\t\t}\r\n\r\n\r\n\t\t\titem.preloaded = true;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/*>>gallery*/\r\n\r\n/*>>retina*/\r\n\r\nvar RETINA_NS = 'retina';\r\n\r\n$.magnificPopup.registerModule(RETINA_NS, {\r\n\toptions: {\r\n\t\treplaceSrc: function(item) {\r\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\r\n\t\t},\r\n\t\tratio: 1 // Function or number.  Set to 1 to disable.\r\n\t},\r\n\tproto: {\r\n\t\tinitRetina: function() {\r\n\t\t\tif(window.devicePixelRatio > 1) {\r\n\r\n\t\t\t\tvar st = mfp.st.retina,\r\n\t\t\t\t\tratio = st.ratio;\r\n\r\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\r\n\r\n\t\t\t\tif(ratio > 1) {\r\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\r\n\t\t\t\t\t\titem.img.css({\r\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\r\n\t\t\t\t\t\t\t'width': '100%'\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\r\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/*>>retina*/\r\n _checkInstance(); }));","/*! Magnific Popup - v1.1.0 - 2016-02-20\r\n* http://dimsemenov.com/plugins/magnific-popup/\r\n* Copyright (c) 2016 Dmitry Semenov; */\r\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):a(\"object\"==typeof exports?require(\"jquery\"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h=\"Close\",i=\"BeforeClose\",j=\"AfterClose\",k=\"BeforeAppend\",l=\"MarkupParse\",m=\"Open\",n=\"Change\",o=\"mfp\",p=\".\"+o,q=\"mfp-ready\",r=\"mfp-removing\",s=\"mfp-prevent-close\",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement(\"div\");return f.className=\"mfp-\"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace(\"%title%\",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement(\"p\").style,b=[\"ms\",\"O\",\"Moz\",\"Webkit\"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+\"Transition\"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f=\"\",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos=\"auto\"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x(\"bg\").on(\"click\"+p,function(){b.close()}),b.wrap=x(\"wrap\").attr(\"tabindex\",-1).on(\"click\"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x(\"container\",b.wrap)),b.contentContainer=x(\"content\"),b.st.preloader&&(b.preloader=x(\"preloader\",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b[\"init\"+j].call(b)}y(\"BeforeOpen\"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=\" mfp-close-btn-in\"):b.wrap.append(z())),b.st.alignTop&&(f+=\" mfp-align-top\"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:\"hidden\",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:\"absolute\"}),(b.st.fixedBgPos===!1||\"auto\"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:\"absolute\"}),b.st.enableEscapeKey&&d.on(\"keyup\"+p,function(a){27===a.keyCode&&b.close()}),v.on(\"resize\"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=\" mfp-auto-cursor\"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a(\"body, html\").css(\"overflow\",\"hidden\"):n.overflow=\"hidden\");var r=b.st.mainClass;return b.isIE7&&(r+=\" mfp-ie7\"),r&&b._addClassToMFP(r),b.updateItemHTML(),y(\"BuildControls\"),a(\"html\").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on(\"focusin\"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+\" \"+q+\" \";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+\" \"),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:\"\"};b.isIE7?a(\"body, html\").css(\"overflow\",\"\"):e.overflow=\"\",a(\"html\").css(e)}d.off(\"keyup\"+p+\" focusin\"+p),b.ev.off(p),b.wrap.attr(\"class\",\"mfp-wrap\").removeAttr(\"style\"),b.bgOverlay.attr(\"class\",\"mfp-bg\"),b.container.attr(\"class\",\"mfp-container\"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)},updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css(\"height\",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css(\"height\",b.wH),y(\"Resize\")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y(\"BeforeChange\",[b.currItem?b.currItem.type:\"\",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y(\"FirstMarkupParse\",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass(\"mfp-\"+e+\"-holder\");var g=b[\"get\"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y(\"AfterChange\")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(\".mfp-close\").length||b.content.append(z()):b.content=a:b.content=\"\",y(k),b.container.addClass(\"mfp-\"+c+\"-holder\"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass(\"mfp-\"+f[g])){d=f[g];break}e.src=e.el.attr(\"data-mfp-src\"),e.src||(e.src=e.el.attr(\"href\"))}return e.type=d||b.st.type||\"inline\",e.index=c,e.parsed=!0,b.items[c]=e,y(\"ElementParse\",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e=\"click.magnificPopup\";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass(\"mfp-s-\"+c),d||\"loading\"!==a||(d=b.st.tLoading);var e={status:a,text:d};y(\"UpdateStatus\",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find(\"a\").on(\"click\",function(a){a.stopImmediatePropagation()}),b.container.addClass(\"mfp-s-\"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass(\"mfp-close\")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split(\"_\"),e.length>1){var f=b.find(p+\"-\"+e[0]);if(f.length>0){var g=e[1];\"replaceWith\"===g?f[0]!==d[0]&&f.replaceWith(d):\"img\"===g?f.is(\"img\")?f.attr(\"src\",d):f.replaceWith(a(\"<img>\").attr(\"src\",d).attr(\"class\",f.attr(\"class\"))):f.attr(e[1],d)}}else b.find(p+\"-\"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement(\"div\");a.style.cssText=\"width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;\",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:\"\",preloader:!0,focus:\"\",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:\"auto\",fixedBgPos:\"auto\",overflowY:\"auto\",closeMarkup:'<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',tClose:\"Close (Esc)\",tLoading:\"Loading...\",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if(\"string\"==typeof c)if(\"open\"===c){var e,f=u?d.data(\"magnificPopup\"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data(\"magnificPopup\",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F=\"inline\",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:\"hide\",markup:\"\",tNotFound:\"Content not found\"},proto:{initInline:function(){b.types.push(F),w(h+\".\"+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C=\"mfp-\"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus(\"ready\")}else b.updateStatus(\"error\",e.tNotFound),f=a(\"<div>\");return c.inlineElement=f,f}return b.updateStatus(\"ready\"),b._parseMarkup(d,{},c),d}}});var H,I=\"ajax\",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:\"mfp-ajax-cur\",tError:'<a href=\"%url%\">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+\".\"+I,K),w(\"BeforeChange.\"+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus(\"loading\");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y(\"ParseAjax\",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus(\"ready\"),y(\"AjaxContentAdded\")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus(\"error\",b.st.ajax.tError.replace(\"%url%\",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),\"\"}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||\"\"}return\"\"};a.magnificPopup.registerModule(\"image\",{options:{markup:'<div class=\"mfp-figure\"><div class=\"mfp-close\"></div><figure><div class=\"mfp-img\"></div><figcaption><div class=\"mfp-bottom-bar\"><div class=\"mfp-title\"></div><div class=\"mfp-counter\"></div></div></figcaption></figure></div>',cursor:\"mfp-zoom-out-cur\",titleSrc:\"title\",verticalFit:!0,tError:'<a href=\"%url%\">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=\".image\";b.types.push(\"image\"),w(m+d,function(){\"image\"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off(\"resize\"+p)}),w(\"Resize\"+d,b.resizeImage),b.isLowIE&&w(\"AfterChange\",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css(\"padding-top\"),10)+parseInt(a.img.css(\"padding-bottom\"),10)),a.img.css(\"max-height\",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y(\"ImageHasSize\",a),a.imgHidden&&(b.content&&b.content.removeClass(\"mfp-loading\"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(\".mfploader\"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus(\"ready\")),c.hasSize=!0,c.loaded=!0,y(\"ImageLoadComplete\")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(\".mfploader\"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus(\"error\",h.tError.replace(\"%url%\",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(\".mfp-img\");if(i.length){var j=document.createElement(\"img\");j.className=\"mfp-img\",c.el&&c.el.find(\"img\").length&&(j.alt=c.el.find(\"img\").attr(\"alt\")),c.img=a(j).on(\"load.mfploader\",f).on(\"error.mfploader\",g),j.src=c.src,i.is(\"img\")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass(\"mfp-loading\"),b.updateStatus(\"error\",h.tError.replace(\"%url%\",c.src))):(d.removeClass(\"mfp-loading\"),b.updateStatus(\"ready\")),d):(b.updateStatus(\"loading\"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass(\"mfp-loading\"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement(\"p\").style.MozTransform),N};a.magnificPopup.registerModule(\"zoom\",{options:{enabled:!1,easing:\"ease-in-out\",duration:300,opener:function(a){return a.is(\"img\")?a:a.find(\"img\")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=\".zoom\";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr(\"style\").removeAttr(\"class\").addClass(\"mfp-animated-image\"),d=\"all \"+c.duration/1e3+\"s \"+c.easing,e={position:\"fixed\",zIndex:9999,left:0,top:0,\"-webkit-backface-visibility\":\"hidden\"},f=\"transition\";return e[\"-webkit-\"+f]=e[\"-moz-\"+f]=e[\"-o-\"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css(\"visibility\",\"visible\")};w(\"BuildControls\"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css(\"visibility\",\"hidden\"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y(\"ZoomAnimationEnded\")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css(\"visibility\",\"hidden\"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return\"image\"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css(\"padding-top\"),10),g=parseInt(d.css(\"padding-bottom\"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h[\"-moz-transform\"]=h.transform=\"translate(\"+e.left+\"px,\"+e.top+\"px)\":(h.left=e.left,h.top=e.top),h}}});var P=\"iframe\",Q=\"//about:blank\",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find(\"iframe\");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css(\"display\",a?\"block\":\"none\"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class=\"mfp-iframe-scaler\"><div class=\"mfp-close\"></div><iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe></div>',srcAction:\"iframe_src\",patterns:{youtube:{index:\"youtube.com\",id:\"v=\",src:\"//www.youtube.com/embed/%id%?autoplay=1\"},vimeo:{index:\"vimeo.com/\",id:\"/\",src:\"//player.vimeo.com/video/%id%?autoplay=1\"},gmaps:{index:\"//maps.google.\",src:\"%id%&output=embed\"}}},proto:{initIframe:function(){b.types.push(P),w(\"BeforeChange\",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+\".\"+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e=\"string\"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace(\"%id%\",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus(\"ready\"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule(\"gallery\",{options:{enabled:!1,arrowMarkup:'<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:\"Previous (Left arrow key)\",tNext:\"Next (Right arrow key)\",tCounter:\"%curr% of %total%\"},proto:{initGallery:function(){var c=b.st.gallery,e=\".mfp-gallery\";return b.direction=!0,c&&c.enabled?(f+=\" mfp-gallery\",w(m+e,function(){c.navigateByImgClick&&b.wrap.on(\"click\"+e,\".mfp-img\",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on(\"keydown\"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w(\"UpdateStatus\"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):\"\"}),w(\"BuildControls\"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,\"left\")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,\"right\")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off(\"click\"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y(\"LazyLoad\",d),\"image\"===d.type&&(d.img=a('<img class=\"mfp-img\" />').on(\"load.mfploader\",function(){d.hasSize=!0}).on(\"error.mfploader\",function(){d.hasSize=!0,d.loadError=!0,y(\"LazyLoadError\",d)}).attr(\"src\",d.src)),d.preloaded=!0}}}});var U=\"retina\";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\\.\\w+$/,function(a){return\"@2x\"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w(\"ImageHasSize.\"+U,function(a,b){b.img.css({\"max-width\":b.img[0].naturalWidth/c,width:\"100%\"})}),w(\"ElementParse.\"+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()});","(function ($, window, document) {\r\n\r\n    var pluginName = \"tooltipster\",\r\n        defaults = {\r\n            animation: 'fade',\r\n            arrow: true,\r\n            arrowColor: '',\r\n            autoClose: true,\r\n            content: null,\r\n            contentAsHTML: false,\r\n            contentCloning: true,\r\n            debug: true,\r\n            delay: 200,\r\n            minWidth: 0,\r\n            maxWidth: null,\r\n            functionInit: function (origin, content) { },\r\n            functionBefore: function (origin, continueTooltip) {\r\n                continueTooltip();\r\n            },\r\n            functionReady: function (origin, tooltip) { },\r\n            functionAfter: function (origin) { },\r\n            hideOnClick: false,\r\n            icon: '(?)',\r\n            iconCloning: true,\r\n            iconDesktop: false,\r\n            iconTouch: false,\r\n            iconTheme: 'tooltipster-icon',\r\n            interactive: false,\r\n            interactiveTolerance: 350,\r\n            multiple: false,\r\n            offsetX: 0,\r\n            offsetY: 0,\r\n            onlyOne: false,\r\n            position: 'top',\r\n            positionTracker: false,\r\n            positionTrackerCallback: function (origin) {\r\n                // the default tracker callback will close the tooltip when the trigger is\r\n                // 'hover' (see https://github.com/iamceege/tooltipster/pull/253)\r\n                if (this.option('trigger') == 'hover' && this.option('autoClose')) {\r\n                    this.hide();\r\n                }\r\n            },\r\n            restoration: 'current',\r\n            speed: 350,\r\n            timer: 0,\r\n            theme: 'tooltipster-default',\r\n            touchDevices: true,\r\n            trigger: 'hover',\r\n            updateAnimation: true\r\n        };\r\n\r\n    function Plugin(element, options) {\r\n\r\n        // list of instance variables\r\n\r\n        this.bodyOverflowX;\r\n        // stack of custom callbacks provided as parameters to API methods\r\n        this.callbacks = {\r\n            hide: [],\r\n            show: []\r\n        };\r\n        this.checkInterval = null;\r\n        // this will be the user content shown in the tooltip. A capital \"C\" is used because there is also a method called content()\r\n        this.Content;\r\n        // this is the original element which is being applied the tooltipster plugin\r\n        this.$el = $(element);\r\n        // this will be the element which triggers the appearance of the tooltip on hover/click/custom events.\r\n        // it will be the same as this.$el if icons are not used (see in the options), otherwise it will correspond to the created icon\r\n        this.$elProxy;\r\n        this.elProxyPosition;\r\n        this.enabled = true;\r\n        this.options = $.extend({}, defaults, options);\r\n        this.mouseIsOverProxy = false;\r\n        // a unique namespace per instance, for easy selective unbinding\r\n        this.namespace = 'tooltipster-' + Math.round(Math.random() * 100000);\r\n        // Status (capital S) can be either : appearing, shown, disappearing, hidden\r\n        this.Status = 'hidden';\r\n        this.timerHide = null;\r\n        this.timerShow = null;\r\n        // this will be the tooltip element (jQuery wrapped HTML element)\r\n        this.$tooltip;\r\n\r\n        // for backward compatibility\r\n        this.options.iconTheme = this.options.iconTheme.replace('.', '');\r\n        this.options.theme = this.options.theme.replace('.', '');\r\n\r\n        // launch\r\n\r\n        this._init();\r\n    }\r\n\r\n    Plugin.prototype = {\r\n\r\n        _init: function () {\r\n\r\n            var self = this;\r\n\r\n            // disable the plugin on old browsers (including IE7 and lower)\r\n            if (document.querySelector) {\r\n\r\n                // note : the content is null (empty) by default and can stay that way if the plugin remains initialized but not fed any content. The tooltip will just not appear.\r\n\r\n                // let's save the initial value of the title attribute for later restoration if need be.\r\n                var initialTitle = null;\r\n                // it will already have been saved in case of multiple tooltips\r\n                if (self.$el.data('tooltipster-initialTitle') === undefined) {\r\n\r\n                    initialTitle = self.$el.attr('title');\r\n\r\n                    // we do not want initialTitle to have the value \"undefined\" because of how jQuery's .data() method works\r\n                    if (initialTitle === undefined) initialTitle = null;\r\n\r\n                    self.$el.data('tooltipster-initialTitle', initialTitle);\r\n                }\r\n\r\n                // if content is provided in the options, its has precedence over the title attribute.\r\n                // Note : an empty string is considered content, only 'null' represents the absence of content.\r\n                // Also, an existing title=\"\" attribute will result in an empty string content\r\n                if (self.options.content !== null) {\r\n                    self._content_set(self.options.content);\r\n                }\r\n                else {\r\n                    self._content_set(initialTitle);\r\n                }\r\n\r\n                var c = self.options.functionInit.call(self.$el, self.$el, self.Content);\r\n                if (typeof c !== 'undefined') self._content_set(c);\r\n\r\n                self.$el\r\n                // strip the title off of the element to prevent the default tooltips from popping up\r\n                    .removeAttr('title')\r\n                    // to be able to find all instances on the page later (upon window events in particular)\r\n                    .addClass('tooltipstered');\r\n\r\n                // detect if we're changing the tooltip origin to an icon\r\n                // note about this condition : if the device has touch capability and self.options.iconTouch is false, you'll have no icons event though you may consider your device as a desktop if it also has a mouse. Not sure why someone would have this use case though.\r\n                if ((!deviceHasTouchCapability && self.options.iconDesktop) || (deviceHasTouchCapability && self.options.iconTouch)) {\r\n\r\n                    // TODO : the tooltip should be automatically be given an absolute position to be near the origin. Otherwise, when the origin is floating or what, it's going to be nowhere near it and disturb the position flow of the page elements. It will imply that the icon also detects when its origin moves, to follow it : not trivial.\r\n                    // Until it's done, the icon feature does not really make sense since the user still has most of the work to do by himself\r\n\r\n                    // if the icon provided is in the form of a string\r\n                    if (typeof self.options.icon === 'string') {\r\n                        // wrap it in a span with the icon class\r\n                        self.$elProxy = $('<span class=\"' + self.options.iconTheme + '\"></span>');\r\n                        self.$elProxy.text(self.options.icon);\r\n                    }\r\n                    // if it is an object (sensible choice)\r\n                    else {\r\n                        // (deep) clone the object if iconCloning == true, to make sure every instance has its own proxy. We use the icon without wrapping, no need to. We do not give it a class either, as the user will undoubtedly style the object on his own and since our css properties may conflict with his own\r\n                        if (self.options.iconCloning) self.$elProxy = self.options.icon.clone(true);\r\n                        else self.$elProxy = self.options.icon;\r\n                    }\r\n\r\n                    self.$elProxy.insertAfter(self.$el);\r\n                }\r\n                else {\r\n                    self.$elProxy = self.$el;\r\n                }\r\n\r\n                // for 'click' and 'hover' triggers : bind on events to open the tooltip. Closing is now handled in _showNow() because of its bindings.\r\n                // Notes about touch events :\r\n                // - mouseenter, mouseleave and clicks happen even on pure touch devices because they are emulated. deviceIsPureTouch() is a simple attempt to detect them.\r\n                // - on hybrid devices, we do not prevent touch gesture from opening tooltips. It would be too complex to differentiate real mouse events from emulated ones.\r\n                // - we check deviceIsPureTouch() at each event rather than prior to binding because the situation may change during browsing\r\n                if (self.options.trigger == 'hover') {\r\n\r\n                    // these binding are for mouse interaction only\r\n                    self.$elProxy\r\n                        .on('mouseenter.' + self.namespace, function () {\r\n                            if (!deviceIsPureTouch() || self.options.touchDevices) {\r\n                                self.mouseIsOverProxy = true;\r\n                                self._show();\r\n                            }\r\n                        })\r\n                        .on('mouseleave.' + self.namespace, function () {\r\n                            if (!deviceIsPureTouch() || self.options.touchDevices) {\r\n                                self.mouseIsOverProxy = false;\r\n                            }\r\n                        });\r\n\r\n                    // for touch interaction only\r\n                    if (deviceHasTouchCapability && self.options.touchDevices) {\r\n\r\n                        // for touch devices, we immediately display the tooltip because we cannot rely on mouseleave to handle the delay\r\n                        self.$elProxy.on('touchstart.' + self.namespace, function () {\r\n                            self._showNow();\r\n                        });\r\n                    }\r\n                }\r\n                else if (self.options.trigger == 'click') {\r\n\r\n                    // note : for touch devices, we do not bind on touchstart, we only rely on the emulated clicks (triggered by taps)\r\n                    self.$elProxy.on('click.' + self.namespace, function () {\r\n                        if (!deviceIsPureTouch() || self.options.touchDevices) {\r\n                            self._show();\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n        },\r\n\r\n        // this function will schedule the opening of the tooltip after the delay, if there is one\r\n        _show: function () {\r\n\r\n            var self = this;\r\n\r\n            if (self.Status != 'shown' && self.Status != 'appearing') {\r\n\r\n                if (self.options.delay) {\r\n                    self.timerShow = setTimeout(function () {\r\n\r\n                        // for hover trigger, we check if the mouse is still over the proxy, otherwise we do not show anything\r\n                        if (self.options.trigger == 'click' || (self.options.trigger == 'hover' && self.mouseIsOverProxy)) {\r\n                            self._showNow();\r\n                        }\r\n                    }, self.options.delay);\r\n                }\r\n                else self._showNow();\r\n            }\r\n        },\r\n\r\n        // this function will open the tooltip right away\r\n        _showNow: function (callback) {\r\n\r\n            var self = this;\r\n\r\n            // call our constructor custom function before continuing\r\n            self.options.functionBefore.call(self.$el, self.$el, function () {\r\n\r\n                // continue only if the tooltip is enabled and has any content\r\n                if (self.enabled && self.Content !== null) {\r\n\r\n                    // save the method callback and cancel hide method callbacks\r\n                    if (callback) self.callbacks.show.push(callback);\r\n                    self.callbacks.hide = [];\r\n\r\n                    //get rid of any appearance timer\r\n                    clearTimeout(self.timerShow);\r\n                    self.timerShow = null;\r\n                    clearTimeout(self.timerHide);\r\n                    self.timerHide = null;\r\n\r\n                    // if we only want one tooltip open at a time, close all auto-closing tooltips currently open and not already disappearing\r\n                    if (self.options.onlyOne) {\r\n                        $('.tooltipstered').not(self.$el).each(function (i, el) {\r\n\r\n                            var $el = $(el),\r\n                                nss = $el.data('tooltipster-ns');\r\n\r\n                            // iterate on all tooltips of the element\r\n                            $.each(nss, function (i, ns) {\r\n                                var instance = $el.data(ns),\r\n                                    // we have to use the public methods here\r\n                                    s = instance.status(),\r\n                                    ac = instance.option('autoClose');\r\n\r\n                                if (s !== 'hidden' && s !== 'disappearing' && ac) {\r\n                                    instance.hide();\r\n                                }\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    var finish = function () {\r\n                        self.Status = 'shown';\r\n\r\n                        // trigger any show method custom callbacks and reset them\r\n                        $.each(self.callbacks.show, function (i, c) { c.call(self.$el); });\r\n                        self.callbacks.show = [];\r\n                    };\r\n\r\n                    // if this origin already has its tooltip open\r\n                    if (self.Status !== 'hidden') {\r\n\r\n                        // the timer (if any) will start (or restart) right now\r\n                        var extraTime = 0;\r\n\r\n                        // if it was disappearing, cancel that\r\n                        if (self.Status === 'disappearing') {\r\n\r\n                            self.Status = 'appearing';\r\n\r\n                            if (supportsTransitions()) {\r\n\r\n                                self.$tooltip\r\n                                    .clearQueue()\r\n                                    .removeClass('tooltipster-dying')\r\n                                    .addClass('tooltipster-' + self.options.animation + '-show');\r\n\r\n                                if (self.options.speed > 0) self.$tooltip.delay(self.options.speed);\r\n\r\n                                self.$tooltip.queue(finish);\r\n                            }\r\n                            else {\r\n                                // in case the tooltip was currently fading out, bring it back to life\r\n                                self.$tooltip\r\n                                    .stop()\r\n                                    .fadeIn(finish);\r\n                            }\r\n                        }\r\n                        // if the tooltip is already open, we still need to trigger the method custom callback\r\n                        else if (self.Status === 'shown') {\r\n                            finish();\r\n                        }\r\n                    }\r\n                    // if the tooltip isn't already open, open that sucker up!\r\n                    else {\r\n\r\n                        self.Status = 'appearing';\r\n\r\n                        // the timer (if any) will start when the tooltip has fully appeared after its transition\r\n                        var extraTime = self.options.speed;\r\n\r\n                        // disable horizontal scrollbar to keep overflowing tooltips from jacking with it and then restore it to its previous value\r\n                        self.bodyOverflowX = $('body').css('overflow-x');\r\n                        $('body').css('overflow-x', 'hidden');\r\n\r\n                        // get some other settings related to building the tooltip\r\n                        var animation = 'tooltipster-' + self.options.animation,\r\n                            animationSpeed = '-webkit-transition-duration: ' + self.options.speed + 'ms; -webkit-animation-duration: ' + self.options.speed + 'ms; -moz-transition-duration: ' + self.options.speed + 'ms; -moz-animation-duration: ' + self.options.speed + 'ms; -o-transition-duration: ' + self.options.speed + 'ms; -o-animation-duration: ' + self.options.speed + 'ms; -ms-transition-duration: ' + self.options.speed + 'ms; -ms-animation-duration: ' + self.options.speed + 'ms; transition-duration: ' + self.options.speed + 'ms; animation-duration: ' + self.options.speed + 'ms;',\r\n                            minWidth = self.options.minWidth ? 'min-width:' + Math.round(self.options.minWidth) + 'px;' : '',\r\n                            maxWidth = self.options.maxWidth ? 'max-width:' + Math.round(self.options.maxWidth) + 'px;' : '',\r\n                            pointerEvents = self.options.interactive ? 'pointer-events: auto;' : '';\r\n\r\n                        // build the base of our tooltip\r\n                        self.$tooltip = $('<div class=\"tooltipster-base ' + self.options.theme + '\" style=\"' + minWidth + ' ' + maxWidth + ' ' + pointerEvents + ' ' + animationSpeed + '\"><div class=\"tooltipster-content\"></div></div>');\r\n\r\n                        // only add the animation class if the user has a browser that supports animations\r\n                        if (supportsTransitions()) self.$tooltip.addClass(animation);\r\n\r\n                        // insert the content\r\n                        self._content_insert();\r\n\r\n                        // attach\r\n                        self.$tooltip.appendTo('body');\r\n\r\n                        // do all the crazy calculations and positioning\r\n                        self.reposition();\r\n\r\n                        // call our custom callback since the content of the tooltip is now part of the DOM\r\n                        self.options.functionReady.call(self.$el, self.$el, self.$tooltip);\r\n\r\n                        // animate in the tooltip\r\n                        if (supportsTransitions()) {\r\n\r\n                            self.$tooltip.addClass(animation + '-show');\r\n\r\n                            if (self.options.speed > 0) self.$tooltip.delay(self.options.speed);\r\n\r\n                            self.$tooltip.queue(finish);\r\n                        }\r\n                        else {\r\n                            self.$tooltip.css('display', 'none').fadeIn(self.options.speed, finish);\r\n                        }\r\n\r\n                        // will check if our tooltip origin is removed while the tooltip is shown\r\n                        self._interval_set();\r\n\r\n                        // reposition on scroll (otherwise position:fixed element's tooltips will move away form their origin) and on resize (in case position can/has to be changed)\r\n                        $(window).on('scroll.' + self.namespace + ' resize.' + self.namespace, function () {\r\n                            self.reposition();\r\n                        });\r\n\r\n                        // auto-close bindings\r\n                        if (self.options.autoClose) {\r\n\r\n                            // in case a listener is already bound for autoclosing (mouse or touch, hover or click), unbind it first\r\n                            $('body').off('.' + self.namespace);\r\n\r\n                            // here we'll have to set different sets of bindings for both touch and mouse\r\n                            if (self.options.trigger == 'hover') {\r\n\r\n                                // if the user touches the body, hide\r\n                                if (deviceHasTouchCapability) {\r\n                                    // timeout 0 : explanation below in click section\r\n                                    setTimeout(function () {\r\n                                        // we don't want to bind on click here because the initial touchstart event has not yet triggered its click event, which is thus about to happen\r\n                                        $('body').on('touchstart.' + self.namespace, function () {\r\n                                            self.hide();\r\n                                        });\r\n                                    }, 0);\r\n                                }\r\n\r\n                                // if we have to allow interaction\r\n                                if (self.options.interactive) {\r\n\r\n                                    // touch events inside the tooltip must not close it\r\n                                    if (deviceHasTouchCapability) {\r\n                                        self.$tooltip.on('touchstart.' + self.namespace, function (event) {\r\n                                            event.stopPropagation();\r\n                                        });\r\n                                    }\r\n\r\n                                    // as for mouse interaction, we get rid of the tooltip only after the mouse has spent some time out of it\r\n                                    var tolerance = null;\r\n\r\n                                    self.$elProxy.add(self.$tooltip)\r\n                                    // hide after some time out of the proxy and the tooltip\r\n                                        .on('mouseleave.' + self.namespace + '-autoClose', function () {\r\n                                            clearTimeout(tolerance);\r\n                                            tolerance = setTimeout(function () {\r\n                                                self.hide();\r\n                                            }, self.options.interactiveTolerance);\r\n                                        })\r\n                                        // suspend timeout when the mouse is over the proxy or the tooltip\r\n                                        .on('mouseenter.' + self.namespace + '-autoClose', function () {\r\n                                            clearTimeout(tolerance);\r\n                                        });\r\n                                }\r\n                                // if this is a non-interactive tooltip, get rid of it if the mouse leaves\r\n                                else {\r\n                                    self.$elProxy.on('mouseleave.' + self.namespace + '-autoClose', function () {\r\n                                        self.hide();\r\n                                    });\r\n                                }\r\n\r\n                                // close the tooltip when the proxy gets a click (common behavior of native tooltips)\r\n                                if (self.options.hideOnClick) {\r\n\r\n                                    self.$elProxy.on('click.' + self.namespace + '-autoClose', function () {\r\n                                        self.hide();\r\n                                    });\r\n                                }\r\n                            }\r\n                            // here we'll set the same bindings for both clicks and touch on the body to hide the tooltip\r\n                            else if (self.options.trigger == 'click') {\r\n\r\n                                // use a timeout to prevent immediate closing if the method was called on a click event and if options.delay == 0 (because of bubbling)\r\n                                setTimeout(function () {\r\n                                    $('body').on('click.' + self.namespace + ' touchstart.' + self.namespace, function () {\r\n                                        self.hide();\r\n                                    });\r\n                                }, 0);\r\n\r\n                                // if interactive, we'll stop the events that were emitted from inside the tooltip to stop autoClosing\r\n                                if (self.options.interactive) {\r\n\r\n                                    // note : the touch events will just not be used if the plugin is not enabled on touch devices\r\n                                    self.$tooltip.on('click.' + self.namespace + ' touchstart.' + self.namespace, function (event) {\r\n                                        event.stopPropagation();\r\n                                    });\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    // if we have a timer set, let the countdown begin\r\n                    if (self.options.timer > 0) {\r\n\r\n                        self.timerHide = setTimeout(function () {\r\n                            self.timerHide = null;\r\n                            self.hide();\r\n                        }, self.options.timer + extraTime);\r\n                    }\r\n                }\r\n            });\r\n        },\r\n\r\n        _interval_set: function () {\r\n\r\n            var self = this;\r\n\r\n            self.checkInterval = setInterval(function () {\r\n\r\n                // if the tooltip and/or its interval should be stopped\r\n                if (\r\n                    // if the origin has been removed\r\n                    $('body').find(self.$el).length === 0\r\n                    // if the elProxy has been removed\r\n                    || $('body').find(self.$elProxy).length === 0\r\n                    // if the tooltip has been closed\r\n                    || self.Status == 'hidden'\r\n                    // if the tooltip has somehow been removed\r\n                    || $('body').find(self.$tooltip).length === 0\r\n                ) {\r\n                    // remove the tooltip if it's still here\r\n                    if (self.Status == 'shown' || self.Status == 'appearing') self.hide();\r\n\r\n                    // clear this interval as it is no longer necessary\r\n                    self._interval_cancel();\r\n                }\r\n                // if everything is alright\r\n                else {\r\n                    // compare the former and current positions of the elProxy to reposition the tooltip if need be\r\n                    if (self.options.positionTracker) {\r\n\r\n                        var p = self._repositionInfo(self.$elProxy),\r\n                            identical = false;\r\n\r\n                        // compare size first (a change requires repositioning too)\r\n                        if (areEqual(p.dimension, self.elProxyPosition.dimension)) {\r\n\r\n                            // for elements with a fixed position, we track the top and left properties (relative to window)\r\n                            if (self.$elProxy.css('position') === 'fixed') {\r\n                                if (areEqual(p.position, self.elProxyPosition.position)) identical = true;\r\n                            }\r\n                            // otherwise, track total offset (relative to document)\r\n                            else {\r\n                                if (areEqual(p.offset, self.elProxyPosition.offset)) identical = true;\r\n                            }\r\n                        }\r\n\r\n                        if (!identical) {\r\n                            self.reposition();\r\n                            self.options.positionTrackerCallback.call(self, self.$el);\r\n                        }\r\n                    }\r\n                }\r\n            }, 200);\r\n        },\r\n\r\n        _interval_cancel: function () {\r\n            clearInterval(this.checkInterval);\r\n            // clean delete\r\n            this.checkInterval = null;\r\n        },\r\n\r\n        _content_set: function (content) {\r\n            // clone if asked. Cloning the object makes sure that each instance has its own version of the content (in case a same object were provided for several instances)\r\n            // reminder : typeof null === object\r\n            if (typeof content === 'object' && content !== null && this.options.contentCloning) {\r\n                content = content.clone(true);\r\n            }\r\n            this.Content = content;\r\n        },\r\n\r\n        _content_insert: function () {\r\n\r\n            var self = this,\r\n                $d = this.$tooltip.find('.tooltipster-content');\r\n\r\n            if (typeof self.Content === 'string' && !self.options.contentAsHTML) {\r\n                $d.text(self.Content);\r\n            }\r\n            else {\r\n                $d\r\n                    .empty()\r\n                    .append(self.Content);\r\n            }\r\n        },\r\n\r\n        _update: function (content) {\r\n\r\n            var self = this;\r\n\r\n            // change the content\r\n            self._content_set(content);\r\n\r\n            if (self.Content !== null) {\r\n\r\n                // update the tooltip if it is open\r\n                if (self.Status !== 'hidden') {\r\n\r\n                    // reset the content in the tooltip\r\n                    self._content_insert();\r\n\r\n                    // reposition and resize the tooltip\r\n                    self.reposition();\r\n\r\n                    // if we want to play a little animation showing the content changed\r\n                    if (self.options.updateAnimation) {\r\n\r\n                        if (supportsTransitions()) {\r\n\r\n                            self.$tooltip.css({\r\n                                'width': '',\r\n                                '-webkit-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms',\r\n                                '-moz-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms',\r\n                                '-o-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms',\r\n                                '-ms-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms',\r\n                                'transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms'\r\n                            }).addClass('tooltipster-content-changing');\r\n\r\n                            // reset the CSS transitions and finish the change animation\r\n                            setTimeout(function () {\r\n\r\n                                if (self.Status != 'hidden') {\r\n\r\n                                    self.$tooltip.removeClass('tooltipster-content-changing');\r\n\r\n                                    // after the changing animation has completed, reset the CSS transitions\r\n                                    setTimeout(function () {\r\n\r\n                                        if (self.Status !== 'hidden') {\r\n                                            self.$tooltip.css({\r\n                                                '-webkit-transition': self.options.speed + 'ms',\r\n                                                '-moz-transition': self.options.speed + 'ms',\r\n                                                '-o-transition': self.options.speed + 'ms',\r\n                                                '-ms-transition': self.options.speed + 'ms',\r\n                                                'transition': self.options.speed + 'ms'\r\n                                            });\r\n                                        }\r\n                                    }, self.options.speed);\r\n                                }\r\n                            }, self.options.speed);\r\n                        }\r\n                        else {\r\n                            self.$tooltip.fadeTo(self.options.speed, 0.5, function () {\r\n                                if (self.Status != 'hidden') {\r\n                                    self.$tooltip.fadeTo(self.options.speed, 1);\r\n                                }\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                self.hide();\r\n            }\r\n        },\r\n\r\n        _repositionInfo: function ($el) {\r\n            return {\r\n                dimension: {\r\n                    height: $el.outerHeight(false),\r\n                    width: $el.outerWidth(false)\r\n                },\r\n                offset: $el.offset(),\r\n                position: {\r\n                    left: parseInt($el.css('left')),\r\n                    top: parseInt($el.css('top'))\r\n                }\r\n            };\r\n        },\r\n\r\n        hide: function (callback) {\r\n\r\n            var self = this;\r\n\r\n            // save the method custom callback and cancel any show method custom callbacks\r\n            if (callback) self.callbacks.hide.push(callback);\r\n            self.callbacks.show = [];\r\n\r\n            // get rid of any appearance timeout\r\n            clearTimeout(self.timerShow);\r\n            self.timerShow = null;\r\n            clearTimeout(self.timerHide);\r\n            self.timerHide = null;\r\n\r\n            var finishCallbacks = function () {\r\n                // trigger any hide method custom callbacks and reset them\r\n                $.each(self.callbacks.hide, function (i, c) { c.call(self.$el); });\r\n                self.callbacks.hide = [];\r\n            };\r\n\r\n            // hide\r\n            if (self.Status == 'shown' || self.Status == 'appearing') {\r\n\r\n                self.Status = 'disappearing';\r\n\r\n                var finish = function () {\r\n\r\n                    self.Status = 'hidden';\r\n\r\n                    // detach our content object first, so the next jQuery's remove() call does not unbind its event handlers\r\n                    if (typeof self.Content == 'object' && self.Content !== null) {\r\n                        self.Content.detach();\r\n                    }\r\n\r\n                    self.$tooltip.remove();\r\n                    self.$tooltip = null;\r\n\r\n                    // unbind orientationchange, scroll and resize listeners\r\n                    $(window).off('.' + self.namespace);\r\n\r\n                    $('body')\r\n                    // unbind any auto-closing click/touch listeners\r\n                        .off('.' + self.namespace)\r\n                        .css('overflow-x', self.bodyOverflowX);\r\n\r\n                    // unbind any auto-closing click/touch listeners\r\n                    $('body').off('.' + self.namespace);\r\n\r\n                    // unbind any auto-closing hover listeners\r\n                    self.$elProxy.off('.' + self.namespace + '-autoClose');\r\n\r\n                    // call our constructor custom callback function\r\n                    self.options.functionAfter.call(self.$el, self.$el);\r\n\r\n                    // call our method custom callbacks functions\r\n                    finishCallbacks();\r\n                };\r\n\r\n                if (supportsTransitions()) {\r\n\r\n                    self.$tooltip\r\n                        .clearQueue()\r\n                        .removeClass('tooltipster-' + self.options.animation + '-show')\r\n                        // for transitions only\r\n                        .addClass('tooltipster-dying');\r\n\r\n                    if (self.options.speed > 0) self.$tooltip.delay(self.options.speed);\r\n\r\n                    self.$tooltip.queue(finish);\r\n                }\r\n                else {\r\n                    self.$tooltip\r\n                        .stop()\r\n                        .fadeOut(self.options.speed, finish);\r\n                }\r\n            }\r\n            // if the tooltip is already hidden, we still need to trigger the method custom callback\r\n            else if (self.Status == 'hidden') {\r\n                finishCallbacks();\r\n            }\r\n\r\n            return self;\r\n        },\r\n\r\n        // the public show() method is actually an alias for the private showNow() method\r\n        show: function (callback) {\r\n            this._showNow(callback);\r\n            return this;\r\n        },\r\n\r\n        // 'update' is deprecated in favor of 'content' but is kept for backward compatibility\r\n        update: function (c) {\r\n            return this.content(c);\r\n        },\r\n        content: function (c) {\r\n            // getter method\r\n            if (typeof c === 'undefined') {\r\n                return this.Content;\r\n            }\r\n            // setter method\r\n            else {\r\n                this._update(c);\r\n                return this;\r\n            }\r\n        },\r\n\r\n        reposition: function () {\r\n\r\n            var self = this;\r\n\r\n            // in case the tooltip has been removed from DOM manually\r\n            if ($('body').find(self.$tooltip).length !== 0) {\r\n\r\n                // reset width\r\n                self.$tooltip.css('width', '');\r\n\r\n                // find variables to determine placement\r\n                self.elProxyPosition = self._repositionInfo(self.$elProxy);\r\n                let arrowReposition = null,\r\n                    windowWidth = $(window).width(),\r\n                    // shorthand\r\n                    proxy = self.elProxyPosition,\r\n                    tooltipWidth = self.$tooltip.outerWidth(false),\r\n                    tooltipInnerWidth = self.$tooltip.innerWidth() + 1, // this +1 stops FireFox from sometimes forcing an additional text line\r\n                    tooltipHeight = self.$tooltip.outerHeight(false);\r\n\r\n                // if this is an <area> tag inside a <map>, all hell breaks loose. Recalculate all the measurements based on coordinates\r\n                if (self.$elProxy.is('area')) {\r\n                    var areaShape = self.$elProxy.attr('shape'),\r\n                        mapName = self.$elProxy.parent().attr('name'),\r\n                        map = $('img[usemap=\"#' + mapName + '\"]'),\r\n                        mapOffsetLeft = map.offset().left,\r\n                        mapOffsetTop = map.offset().top,\r\n                        areaMeasurements = self.$elProxy.attr('coords') !== undefined ? self.$elProxy.attr('coords').split(',') : undefined;\r\n\r\n                    if (areaShape == 'circle') {\r\n                        var areaLeft = parseInt(areaMeasurements[0]),\r\n                            areaTop = parseInt(areaMeasurements[1]),\r\n                            areaWidth = parseInt(areaMeasurements[2]);\r\n                        proxy.dimension.height = areaWidth * 2;\r\n                        proxy.dimension.width = areaWidth * 2;\r\n                        proxy.offset.top = mapOffsetTop + areaTop - areaWidth;\r\n                        proxy.offset.left = mapOffsetLeft + areaLeft - areaWidth;\r\n                    }\r\n                    else if (areaShape == 'rect') {\r\n                        var areaLeft = parseInt(areaMeasurements[0]),\r\n                            areaTop = parseInt(areaMeasurements[1]),\r\n                            areaRight = parseInt(areaMeasurements[2]),\r\n                            areaBottom = parseInt(areaMeasurements[3]);\r\n                        proxy.dimension.height = areaBottom - areaTop;\r\n                        proxy.dimension.width = areaRight - areaLeft;\r\n                        proxy.offset.top = mapOffsetTop + areaTop;\r\n                        proxy.offset.left = mapOffsetLeft + areaLeft;\r\n                    }\r\n                    else if (areaShape == 'poly') {\r\n                        var areaXs = [],\r\n                            areaYs = [],\r\n                            areaSmallestX = 0,\r\n                            areaSmallestY = 0,\r\n                            areaGreatestX = 0,\r\n                            areaGreatestY = 0,\r\n                            arrayAlternate = 'even';\r\n\r\n                        for (var i = 0; i < areaMeasurements.length; i++) {\r\n                            var areaNumber = parseInt(areaMeasurements[i]);\r\n\r\n                            if (arrayAlternate == 'even') {\r\n                                if (areaNumber > areaGreatestX) {\r\n                                    areaGreatestX = areaNumber;\r\n                                    if (i === 0) {\r\n                                        areaSmallestX = areaGreatestX;\r\n                                    }\r\n                                }\r\n\r\n                                if (areaNumber < areaSmallestX) {\r\n                                    areaSmallestX = areaNumber;\r\n                                }\r\n\r\n                                arrayAlternate = 'odd';\r\n                            }\r\n                            else {\r\n                                if (areaNumber > areaGreatestY) {\r\n                                    areaGreatestY = areaNumber;\r\n                                    if (i == 1) {\r\n                                        areaSmallestY = areaGreatestY;\r\n                                    }\r\n                                }\r\n\r\n                                if (areaNumber < areaSmallestY) {\r\n                                    areaSmallestY = areaNumber;\r\n                                }\r\n\r\n                                arrayAlternate = 'even';\r\n                            }\r\n                        }\r\n\r\n                        proxy.dimension.height = areaGreatestY - areaSmallestY;\r\n                        proxy.dimension.width = areaGreatestX - areaSmallestX;\r\n                        proxy.offset.top = mapOffsetTop + areaSmallestY;\r\n                        proxy.offset.left = mapOffsetLeft + areaSmallestX;\r\n                    }\r\n                    else {\r\n                        proxy.dimension.height = map.outerHeight(false);\r\n                        proxy.dimension.width = map.outerWidth(false);\r\n                        proxy.offset.top = mapOffsetTop;\r\n                        proxy.offset.left = mapOffsetLeft;\r\n                    }\r\n                }\r\n\r\n                // our function and global vars for positioning our tooltip\r\n                var myLeft = 0,\r\n                    myLeftMirror = 0,\r\n                    myTop = 0,\r\n                    offsetY = parseInt(self.options.offsetY),\r\n                    offsetX = parseInt(self.options.offsetX),\r\n                    // this is the arrow position that will eventually be used. It may differ from the position option if the tooltip cannot be displayed in this position\r\n                    practicalPosition = self.options.position;\r\n\r\n                // a function to detect if the tooltip is going off the screen horizontally. If so, reposition the crap out of it!\r\n                function dontGoOffScreenX() {\r\n\r\n                    var windowLeft = $(window).scrollLeft();\r\n\r\n                    // if the tooltip goes off the left side of the screen, line it up with the left side of the window\r\n                    if ((myLeft - windowLeft) < 0) {\r\n                        arrowReposition = myLeft - windowLeft;\r\n                        myLeft = windowLeft;\r\n                    }\r\n\r\n                    // if the tooltip goes off the right of the screen, line it up with the right side of the window\r\n                    if (((myLeft + tooltipWidth) - windowLeft) > windowWidth) {\r\n                        arrowReposition = myLeft - ((windowWidth + windowLeft) - tooltipWidth);\r\n                        myLeft = (windowWidth + windowLeft) - tooltipWidth;\r\n                    }\r\n                }\r\n\r\n                // a function to detect if the tooltip is going off the screen vertically. If so, switch to the opposite!\r\n                function dontGoOffScreenY(switchTo, switchFrom) {\r\n                    // if it goes off the top off the page\r\n                    if (((proxy.offset.top - $(window).scrollTop() - tooltipHeight - offsetY - 12) < 0) && (switchFrom.indexOf('top') > -1)) {\r\n                        practicalPosition = switchTo;\r\n                    }\r\n\r\n                    // if it goes off the bottom of the page\r\n                    if (((proxy.offset.top + proxy.dimension.height + tooltipHeight + 12 + offsetY) > ($(window).scrollTop() + $(window).height())) && (switchFrom.indexOf('bottom') > -1)) {\r\n                        practicalPosition = switchTo;\r\n                        myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12;\r\n                    }\r\n                }\r\n\r\n                if (practicalPosition == 'top') {\r\n                    var leftDifference = (proxy.offset.left + tooltipWidth) - (proxy.offset.left + proxy.dimension.width);\r\n                    myLeft = (proxy.offset.left + offsetX) - (leftDifference / 2);\r\n                    myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('bottom', 'top');\r\n                }\r\n\r\n                if (practicalPosition == 'top-left') {\r\n                    myLeft = proxy.offset.left + offsetX;\r\n                    myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('bottom-left', 'top-left');\r\n                }\r\n\r\n                if (practicalPosition == 'top-right') {\r\n                    myLeft = (proxy.offset.left + proxy.dimension.width + offsetX) - tooltipWidth;\r\n                    myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('bottom-right', 'top-right');\r\n                }\r\n\r\n                if (practicalPosition == 'bottom') {\r\n                    var leftDifference = (proxy.offset.left + tooltipWidth) - (proxy.offset.left + proxy.dimension.width);\r\n                    myLeft = proxy.offset.left - (leftDifference / 2) + offsetX;\r\n                    myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('top', 'bottom');\r\n                }\r\n\r\n                if (practicalPosition == 'bottom-left') {\r\n                    myLeft = proxy.offset.left + offsetX;\r\n                    myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('top-left', 'bottom-left');\r\n                }\r\n\r\n                if (practicalPosition == 'bottom-right') {\r\n                    myLeft = (proxy.offset.left + proxy.dimension.width + offsetX) - tooltipWidth;\r\n                    myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12;\r\n                    dontGoOffScreenX();\r\n                    dontGoOffScreenY('top-right', 'bottom-right');\r\n                }\r\n\r\n                if (practicalPosition == 'left') {\r\n                    myLeft = proxy.offset.left - offsetX - tooltipWidth - 12;\r\n                    myLeftMirror = proxy.offset.left + offsetX + proxy.dimension.width + 12;\r\n                    var topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height);\r\n                    myTop = proxy.offset.top - (topDifference / 2) - offsetY;\r\n\r\n                    // if the tooltip goes off boths sides of the page\r\n                    if ((myLeft < 0) && ((myLeftMirror + tooltipWidth) > windowWidth)) {\r\n                        var borderWidth = parseFloat(self.$tooltip.css('border-width')) * 2,\r\n                            newWidth = (tooltipWidth + myLeft) - borderWidth;\r\n                        self.$tooltip.css('width', newWidth + 'px');\r\n\r\n                        tooltipHeight = self.$tooltip.outerHeight(false);\r\n                        myLeft = proxy.offset.left - offsetX - newWidth - 12 - borderWidth;\r\n                        topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height);\r\n                        myTop = proxy.offset.top - (topDifference / 2) - offsetY;\r\n                    }\r\n\r\n                    // if it only goes off one side, flip it to the other side\r\n                    else if (myLeft < 0) {\r\n                        myLeft = proxy.offset.left + offsetX + proxy.dimension.width + 12;\r\n                        arrowReposition = 'left';\r\n                    }\r\n                }\r\n\r\n                if (practicalPosition == 'right') {\r\n                    myLeft = proxy.offset.left + offsetX + proxy.dimension.width + 12;\r\n                    myLeftMirror = proxy.offset.left - offsetX - tooltipWidth - 12;\r\n                    var topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height);\r\n                    myTop = proxy.offset.top - (topDifference / 2) - offsetY;\r\n\r\n                    // if the tooltip goes off boths sides of the page\r\n                    if (((myLeft + tooltipWidth) > windowWidth) && (myLeftMirror < 0)) {\r\n                        var borderWidth = parseFloat(self.$tooltip.css('border-width')) * 2,\r\n                            newWidth = (windowWidth - myLeft) - borderWidth;\r\n                        self.$tooltip.css('width', newWidth + 'px');\r\n\r\n                        tooltipHeight = self.$tooltip.outerHeight(false);\r\n                        topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height);\r\n                        myTop = proxy.offset.top - (topDifference / 2) - offsetY;\r\n                    }\r\n\r\n                    // if it only goes off one side, flip it to the other side\r\n                    else if ((myLeft + tooltipWidth) > windowWidth) {\r\n                        myLeft = proxy.offset.left - offsetX - tooltipWidth - 12;\r\n                        arrowReposition = 'right';\r\n                    }\r\n                }\r\n\r\n                // if arrow is set true, style it and append it\r\n                if (self.options.arrow) {\r\n\r\n                    var arrowClass = 'tooltipster-arrow-' + practicalPosition;\r\n\r\n                    // set color of the arrow\r\n                    if (self.options.arrowColor.length < 1) {\r\n                        var arrowColor = self.$tooltip.css('background-color');\r\n                    }\r\n                    else {\r\n                        var arrowColor = self.options.arrowColor;\r\n                    }\r\n\r\n                    // if the tooltip was going off the page and had to re-adjust, we need to update the arrow's position\r\n                    if (!arrowReposition) {\r\n                        arrowReposition = '';\r\n                    }\r\n                    else if (arrowReposition == 'left') {\r\n                        arrowClass = 'tooltipster-arrow-right';\r\n                        arrowReposition = '';\r\n                    }\r\n                    else if (arrowReposition == 'right') {\r\n                        arrowClass = 'tooltipster-arrow-left';\r\n                        arrowReposition = '';\r\n                    }\r\n                    else {\r\n                        arrowReposition = 'left:' + Math.round(arrowReposition) + 'px;';\r\n                    }\r\n\r\n                    // building the logic to create the border around the arrow of the tooltip\r\n                    if ((practicalPosition == 'top') || (practicalPosition == 'top-left') || (practicalPosition == 'top-right')) {\r\n                        var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-bottom-width')),\r\n                            tooltipBorderColor = self.$tooltip.css('border-bottom-color');\r\n                    }\r\n                    else if ((practicalPosition == 'bottom') || (practicalPosition == 'bottom-left') || (practicalPosition == 'bottom-right')) {\r\n                        var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-top-width')),\r\n                            tooltipBorderColor = self.$tooltip.css('border-top-color');\r\n                    }\r\n                    else if (practicalPosition == 'left') {\r\n                        var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-right-width')),\r\n                            tooltipBorderColor = self.$tooltip.css('border-right-color');\r\n                    }\r\n                    else if (practicalPosition == 'right') {\r\n                        var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-left-width')),\r\n                            tooltipBorderColor = self.$tooltip.css('border-left-color');\r\n                    }\r\n                    else {\r\n                        var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-bottom-width')),\r\n                            tooltipBorderColor = self.$tooltip.css('border-bottom-color');\r\n                    }\r\n\r\n                    if (tooltipBorderWidth > 1) {\r\n                        tooltipBorderWidth++;\r\n                    }\r\n\r\n                    var arrowBorder = '';\r\n                    if (tooltipBorderWidth !== 0) {\r\n                        var arrowBorderSize = '',\r\n                            arrowBorderColor = 'border-color: ' + tooltipBorderColor + ';';\r\n                        if (arrowClass.indexOf('bottom') !== -1) {\r\n                            arrowBorderSize = 'margin-top: -' + Math.round(tooltipBorderWidth) + 'px;';\r\n                        }\r\n                        else if (arrowClass.indexOf('top') !== -1) {\r\n                            arrowBorderSize = 'margin-bottom: -' + Math.round(tooltipBorderWidth) + 'px;';\r\n                        }\r\n                        else if (arrowClass.indexOf('left') !== -1) {\r\n                            arrowBorderSize = 'margin-right: -' + Math.round(tooltipBorderWidth) + 'px;';\r\n                        }\r\n                        else if (arrowClass.indexOf('right') !== -1) {\r\n                            arrowBorderSize = 'margin-left: -' + Math.round(tooltipBorderWidth) + 'px;';\r\n                        }\r\n                        arrowBorder = '<span class=\"tooltipster-arrow-border\" style=\"' + arrowBorderSize + ' ' + arrowBorderColor + ';\"></span>';\r\n                    }\r\n\r\n                    // if the arrow already exists, remove and replace it\r\n                    self.$tooltip.find('.tooltipster-arrow').remove();\r\n\r\n                    // build out the arrow and append it\t\t\r\n                    var arrowConstruct = '<div class=\"' + arrowClass + ' tooltipster-arrow\" style=\"' + arrowReposition + '\">' + arrowBorder + '<span style=\"border-color:' + arrowColor + ';\"></span></div>';\r\n                    self.$tooltip.append(arrowConstruct);\r\n                }\r\n\r\n                // position the tooltip\r\n                self.$tooltip.css({ 'top': Math.round(myTop) + 'px', 'left': Math.round(myLeft) + 'px' });\r\n            }\r\n\r\n            return self;\r\n        },\r\n\r\n        enable: function () {\r\n            this.enabled = true;\r\n            return this;\r\n        },\r\n\r\n        disable: function () {\r\n            // hide first, in case the tooltip would not disappear on its own (autoClose false)\r\n            this.hide();\r\n            this.enabled = false;\r\n            return this;\r\n        },\r\n\r\n        destroy: function () {\r\n\r\n            var self = this;\r\n\r\n            self.hide();\r\n\r\n            // remove the icon, if any\r\n            if (self.$el[0] !== self.$elProxy[0]) {\r\n                self.$elProxy.remove();\r\n            }\r\n\r\n            self.$el\r\n                .removeData(self.namespace)\r\n                .off('.' + self.namespace);\r\n\r\n            var ns = self.$el.data('tooltipster-ns');\r\n\r\n            // if there are no more tooltips on this element\r\n            if (ns.length === 1) {\r\n\r\n                // optional restoration of a title attribute\r\n                var title = null;\r\n                if (self.options.restoration === 'previous') {\r\n                    title = self.$el.data('tooltipster-initialTitle');\r\n                }\r\n                else if (self.options.restoration === 'current') {\r\n\r\n                    // old school technique to stringify when outerHTML is not supported\r\n                    title =\r\n                        (typeof self.Content === 'string') ?\r\n                            self.Content :\r\n                            $('<div></div>').append(self.Content).html();\r\n                }\r\n\r\n                if (title) {\r\n                    self.$el.attr('title', title);\r\n                }\r\n\r\n                // final cleaning\r\n                self.$el\r\n                    .removeClass('tooltipstered')\r\n                    .removeData('tooltipster-ns')\r\n                    .removeData('tooltipster-initialTitle');\r\n            }\r\n            else {\r\n                // remove the instance namespace from the list of namespaces of tooltips present on the element\r\n                ns = $.grep(ns, function (el, i) {\r\n                    return el !== self.namespace;\r\n                });\r\n                self.$el.data('tooltipster-ns', ns);\r\n            }\r\n\r\n            return self;\r\n        },\r\n\r\n        elementIcon: function () {\r\n            return (this.$el[0] !== this.$elProxy[0]) ? this.$elProxy[0] : undefined;\r\n        },\r\n\r\n        elementTooltip: function () {\r\n            return this.$tooltip ? this.$tooltip[0] : undefined;\r\n        },\r\n\r\n        // public methods but for internal use only\r\n        // getter if val is ommitted, setter otherwise\r\n        option: function (o, val) {\r\n            if (typeof val == 'undefined') return this.options[o];\r\n            else {\r\n                this.options[o] = val;\r\n                return this;\r\n            }\r\n        },\r\n        status: function () {\r\n            return this.Status;\r\n        }\r\n    };\r\n\r\n    $.fn[pluginName] = function () {\r\n\r\n        // for using in closures\r\n        var args = arguments;\r\n\r\n        // if we are not in the context of jQuery wrapped HTML element(s) :\r\n        // this happens when calling static methods in the form $.fn.tooltipster('methodName'), or when calling $(sel).tooltipster('methodName or options') where $(sel) does not match anything\r\n        if (this.length === 0) {\r\n\r\n            // if the first argument is a method name\r\n            if (typeof args[0] === 'string') {\r\n\r\n                var methodIsStatic = true;\r\n\r\n                // list static methods here (usable by calling $.fn.tooltipster('methodName');)\r\n                switch (args[0]) {\r\n\r\n                    case 'setDefaults':\r\n                        // change default options for all future instances\r\n                        $.extend(defaults, args[1]);\r\n                        break;\r\n\r\n                    default:\r\n                        methodIsStatic = false;\r\n                        break;\r\n                }\r\n\r\n                // $.fn.tooltipster('methodName') calls will return true\r\n                if (methodIsStatic) return true;\r\n                // $(sel).tooltipster('methodName') calls will return the list of objects event though it's empty because chaining should work on empty lists\r\n                else return this;\r\n            }\r\n            // the first argument is undefined or an object of options : we are initalizing but there is no element matched by selector\r\n            else {\r\n                // still chainable : same as above\r\n                return this;\r\n            }\r\n        }\r\n        // this happens when calling $(sel).tooltipster('methodName or options') where $(sel) matches one or more elements\r\n        else {\r\n\r\n            // method calls\r\n            if (typeof args[0] === 'string') {\r\n\r\n                var v = '#*$~&';\r\n\r\n                this.each(function () {\r\n\r\n                    // retrieve the namepaces of the tooltip(s) that exist on that element. We will interact with the first tooltip only.\r\n                    var ns = $(this).data('tooltipster-ns'),\r\n                        // self represents the instance of the first tooltipster plugin associated to the current HTML object of the loop\r\n                        self = ns ? $(this).data(ns[0]) : null;\r\n\r\n                    // if the current element holds a tooltipster instance\r\n                    if (self) {\r\n\r\n                        if (typeof self[args[0]] === 'function') {\r\n                            // note : args[1] and args[2] may not be defined\r\n                            var resp = self[args[0]](args[1], args[2]);\r\n                        }\r\n                        else {\r\n                            throw new Error('Unknown method .tooltipster(\"' + args[0] + '\")');\r\n                        }\r\n\r\n                        // if the function returned anything other than the instance itself (which implies chaining)\r\n                        if (resp !== self) {\r\n                            v = resp;\r\n                            // return false to stop .each iteration on the first element matched by the selector\r\n                            return false;\r\n                        }\r\n                    }\r\n                    else {\r\n                        throw new Error('You called Tooltipster\\'s \"' + args[0] + '\" method on an uninitialized element');\r\n                    }\r\n                });\r\n\r\n                return (v !== '#*$~&') ? v : this;\r\n            }\r\n            // first argument is undefined or an object : the tooltip is initializing\r\n            else {\r\n\r\n                var instances = [],\r\n                    // is there a defined value for the multiple option in the options object ?\r\n                    multipleIsSet = args[0] && typeof args[0].multiple !== 'undefined',\r\n                    // if the multiple option is set to true, or if it's not defined but set to true in the defaults\r\n                    multiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple),\r\n                    // same for debug\r\n                    debugIsSet = args[0] && typeof args[0].debug !== 'undefined',\r\n                    debug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug);\r\n\r\n                // initialize a tooltipster instance for each element if it doesn't already have one or if the multiple option is set, and attach the object to it\r\n                this.each(function () {\r\n\r\n                    var go = false,\r\n                        ns = $(this).data('tooltipster-ns'),\r\n                        instance = null;\r\n\r\n                    if (!ns) {\r\n                        go = true;\r\n                    }\r\n                    else if (multiple) {\r\n                        go = true;\r\n                    }\r\n                    else if (debug) {\r\n                        console.log('Tooltipster: one or more tooltips are already attached to this element: ignoring. Use the \"multiple\" option to attach more tooltips.');\r\n                    }\r\n\r\n                    if (go) {\r\n                        instance = new Plugin(this, args[0]);\r\n\r\n                        // save the reference of the new instance\r\n                        if (!ns) ns = [];\r\n                        ns.push(instance.namespace);\r\n                        $(this).data('tooltipster-ns', ns)\r\n\r\n                        // save the instance itself\r\n                        $(this).data(instance.namespace, instance);\r\n                    }\r\n\r\n                    instances.push(instance);\r\n                });\r\n\r\n                if (multiple) return instances;\r\n                else return this;\r\n            }\r\n        }\r\n    };\r\n\r\n    // quick & dirty compare function (not bijective nor multidimensional)\r\n    function areEqual(a, b) {\r\n        var same = true;\r\n        $.each(a, function (i, el) {\r\n            if (typeof b[i] === 'undefined' || a[i] !== b[i]) {\r\n                same = false;\r\n                return false;\r\n            }\r\n        });\r\n        return same;\r\n    }\r\n\r\n    // detect if this device can trigger touch events\r\n    var deviceHasTouchCapability = !!('ontouchstart' in window);\r\n\r\n    // we'll assume the device has no mouse until we detect any mouse movement\r\n    var deviceHasMouse = false;\r\n    $('body').one('mousemove', function () {\r\n        deviceHasMouse = true;\r\n    });\r\n\r\n    function deviceIsPureTouch() {\r\n        return (!deviceHasMouse && deviceHasTouchCapability);\r\n    }\r\n\r\n    // detecting support for CSS transitions\r\n    function supportsTransitions() {\r\n        var b = document.body || document.documentElement,\r\n            s = b.style,\r\n            p = 'transition';\r\n\r\n        if (typeof s[p] == 'string') { return true; }\r\n\r\n        v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'],\r\n            p = p.charAt(0).toUpperCase() + p.substr(1);\r\n        for (var i = 0; i < v.length; i++) {\r\n            if (typeof s[v[i] + p] == 'string') { return true; }\r\n        }\r\n        return false;\r\n    }\r\n})(jQuery, window, document);\r\n","/* Knockout binding for modal windows.\r\nUsage:\r\n<a href=\"\"\r\n    data-bind=\"modal2: {\r\n        model: object or observable, // knockout model for modal window\r\n        template: 'template-id', // modal window template id\r\n        component: 'component-id' // modal window component id\r\n        preRender: function, // this function is called before popup is opened\r\n                            // if not specified model.preRender will be used\r\n        pageTitle: string, // this value will be shown as page title when rendred as page\r\n                           // if not specified model.pageTitle will be used\r\n    }\">\r\n    add receipt\r\n</a> */\r\n\r\n/* WCP-1621: Next line was added because we don't use mobile positioning for modal windows (in mobile versions we use our own popups). That's why MagnificPopups script must think that users work only on desktop. */\r\n$.magnificPopup.instance.probablyMobile = false;\r\n\r\nko.bindingHandlers.modal2 = {\r\n\r\n    init: function (element, valueAccessor) {\r\n        var headersContainer = [];\r\n        var options = valueAccessor();\r\n        var showAsPage = options.showAsPage || $.cdh.isMobile;\r\n\r\n        function render(el, closeFunc, model) {\r\n            var template = getTemplate(options);\r\n            var sourceModel = ko.unwrap(model);\r\n\r\n            var setClose = sourceModel.setClose;\r\n            if ($.isFunction(setClose)) {\r\n                setClose(closeFunc);\r\n            }\r\n            else if (sourceModel.params) {\r\n                sourceModel.params.closeFunc = closeFunc;\r\n            }\r\n\r\n            var preRender = options.preRender || sourceModel.preRender;\r\n            if ($.isFunction(preRender))\r\n                preRender();\r\n\r\n            ko.renderTemplate(template, model, null, el, 'replaceChildren');\r\n        }\r\n\r\n        function getTemplate(options) {\r\n            return options.component ? 'template-modal2-to-component' : options.template;\r\n        }\r\n\r\n        function getModel(options) {\r\n            var model = options.modelBuilder ? options.modelBuilder() : options.model;\r\n            if (options.component) {\r\n                var componentModel = {\r\n                    component: options.component,\r\n                    params: model\r\n                };\r\n                if (model) {\r\n                    componentModel.preRender = model.preRender;\r\n                    componentModel.pageTitle = model.pageTitle;\r\n                }\r\n                return componentModel;\r\n            }\r\n\r\n            return model;\r\n        }\r\n\r\n        function setPageTitle(title, content, selector) {\r\n            var titleText = ko.unwrap(title);\r\n            if (titleText)\r\n                $(content).find(selector).text(titleText);\r\n        }\r\n\r\n        function isDisable() {\r\n            let disable = ko.unwrap(options.disable);\r\n            if (disable) {\r\n                $(element).removeAttr(\"href\");\r\n            }\r\n            return disable;\r\n        }\r\n\r\n        if (showAsPage) {\r\n            var mainContent = $(\"#main-content\");\r\n            var popupContent = $(\"#popup-content\");\r\n            var $metaTitle = $('title');\r\n            \r\n            var scrollPosition = 0;\r\n            var titleSubscription = null;\r\n\r\n            function close() {\r\n                if (titleSubscription && $.isFunction(titleSubscription.dispose)) {\r\n                    titleSubscription.dispose();\r\n                }\r\n                mainContent.show();\r\n                popupContent.hide();\r\n                \r\n                $.cdh.helper.handleHeadingLevelOnPageStateChange(popupContent, false);\r\n                var title = headersContainer.pop();\r\n                $.cdh.helper.titlePage(title);\r\n\r\n                const storedTitle = $metaTitle.data('title');\r\n\r\n                if(storedTitle) {\r\n                    $metaTitle.text(storedTitle);\r\n                    $metaTitle.removeData('title');\r\n                }\r\n\r\n                if (scrollPosition) {\r\n                    window.scrollTo(0, scrollPosition);\r\n                }\r\n            }\r\n\r\n            $(element).on(\"click\", function () {\r\n                let disable = isDisable();\r\n                if (disable) return false;\r\n\r\n                var model = getModel(options);\r\n                var prevTitle = $(\".title-page\").text();\r\n                headersContainer.push(prevTitle);\r\n   \r\n                render(popupContent[0], close, model);\r\n\r\n                var title = options.pageTitle || ko.unwrap(model).pageTitle;\r\n                if (ko.isObservable(title)) {\r\n                    titleSubscription = title.subscribe($.cdh.helper.titlePage);\r\n                }\r\n                $.cdh.helper.handleHeadingLevelOnPageStateChange(popupContent, true);\r\n                $.cdh.helper.titlePage(ko.unwrap(title));\r\n                const metaTitleText = $metaTitle.text();\r\n                const metaTitlePagePart = metaTitleText.split(' | ')[0];\r\n                const newMetaTitle = metaTitleText.replace(metaTitlePagePart, title);\r\n                $metaTitle.data('title', metaTitleText).html(newMetaTitle);\r\n\r\n                scrollPosition = $(window).scrollTop();\r\n                mainContent.hide();\r\n                popupContent.show();\r\n                tooltipsInit();\r\n                window.scrollTo(0, 0);\r\n\r\n                return false;\r\n            });\r\n\r\n        } else {\r\n            $(element).magnificPopup({\r\n                enableEscapeKey: false,\r\n                closeOnBgClick: false,\r\n                items: {\r\n                    src: '<div></div>',\r\n                    type: 'inline'\r\n                },\r\n                callbacks: {\r\n                    open: function (item) {\r\n                        var renderIn = this.content[0];\r\n                        var model = getModel(options);\r\n                        var magnificPopup = this;\r\n                        var titleId = 'popup-form_title'; /* + Date.now()*/\r\n                        var closeEscButton = $.cdh.languageConstant.getConstant('button.close-esc');\r\n\r\n                        render(renderIn, this.close, model);\r\n                        setTimeout(function() {\r\n                           \r\n                            var title = options.pageTitle || ko.unwrap(model).pageTitle;\r\n                            if (title && title.length > 0)\r\n                                setPageTitle(title, $(\".magnific-popup-container\"), \".popup-form_title\");\r\n\r\n                            tooltipsInit();\r\n                            var popupContainer = $(renderIn).find('.magnific-popup-container');\r\n                            popupContainer.find('.popup-form_title').attr('id', titleId).after(\r\n                                '<button title= ' + closeEscButton + ' type=\"button\" class=\"mfp-close\" aria-label=\"close\">×</button>'\r\n                            );\r\n                            $(popupContainer).on(\"click keydown\", function (e) {\r\n                                var firstFocusable = $(popupContainer).find('.mfp-close');\r\n                                var lastFocusable = $(popupContainer).find(':focusable').eq(-1);\r\n                                if (document.activeElement === firstFocusable[0] && e.shiftKey && e.key === 'Tab') {\r\n                                    lastFocusable.focus();\r\n                                    e.preventDefault();\r\n                                }\r\n\r\n                                else if (document.activeElement === lastFocusable[0] && e.key === 'Tab' && !e.shiftKey) {\r\n                                    firstFocusable.focus();\r\n                                    e.preventDefault();\r\n                                }\r\n                            })\r\n                            \r\n                            if (popupContainer.length) {\r\n                                popupContainer.attr({\r\n                                    'role': 'dialog',\r\n                                    'aria-modal': 'true',\r\n                                    'aria-labelledby': titleId\r\n                                });\r\n                            }\r\n                            // popupContainer.attr('role', 'dialog').attr('aria-modal', 'true').attr('aria-labelledby', 'popup-form_title');\r\n                            // $.cdh.helper.updateMagnificPopupBgHeight();\r\n                        }, 0);\r\n                    }\r\n                },\r\n                disableOn: function () {\r\n                    return !isDisable();\r\n                }\r\n            });\r\n        }\r\n\r\n        $(element).on(\"click\", function (e) { e.stopImmediatePropagation(); });\r\n\r\n        $(element).on('keydown', function (e) {\r\n            if (e.keyCode === 32 || e.keyCode === 13) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                $(element).click();\r\n            }\r\n        });\r\n\r\n        let forceOpen = options.forceOpen;\r\n        if(ko.isSubscribable(forceOpen)) {\r\n            forceOpen.subscribe(function(newValue) {\r\n                if(newValue === true) {\r\n                    $(element).click();\r\n                }\r\n            });\r\n\r\n            if (forceOpen() === true)\r\n                $(element).click();\r\n        }\r\n        else if (forceOpen) {\r\n            $(element).click();\r\n        }\r\n    }\r\n};\r\n\r\nko.bindingHandlers.modalComponent = {\r\n\r\n    init: function (element, valueAccessor) {\r\n        var headersContainer = [];\r\n        var options = valueAccessor();\r\n        var showAsPage = options.showAsPage || $.cdh.isMobile;\r\n\r\n        function render(el, closeFunc, model) {\r\n            var template = getTemplate(options);\r\n\r\n            model = model || {};\r\n\r\n            model.closeFunc = closeFunc;\r\n\r\n            const root = document.createElement('div');\r\n            root.setAttribute('id', 'pop15');\r\n            root.setAttribute('class', `popup-form magnific-popup-container ${options.css}`);\r\n            root.setAttribute('role', 'dialog');\r\n            root.setAttribute('aria-modal', 'true');\r\n            root.setAttribute('aria-labelledby', 'popup-form_title');\r\n            \r\n            const title = document.createElement('h1');\r\n            title.setAttribute('class', 'popup-form_title');\r\n            title.setAttribute('id', 'popup-form_title');\r\n            title.innerHTML = options.title;\r\n\r\n            const body = document.createElement('div')\r\n            body.setAttribute('class', 'popup-form_content');\r\n\r\n            /*var wrap = document.querySelector('.mfp-wrap');\r\n            if (wrap) {\r\n                wrap.setAttribute('role', 'dialog');\r\n                wrap.setAttribute('aria-modal', 'true');\r\n                wrap.setAttribute('aria-labelledby', 'popup-form_title');\r\n            }*/\r\n            \r\n            const component = document.createElement(template);\r\n            component.setAttribute('params', getModelProps(model));\r\n            body.appendChild(component);\r\n\r\n            root.appendChild(title);\r\n            root.appendChild(body);\r\n\r\n            ko.applyBindings(model, root);\r\n\r\n            el.innerHTML = '';\r\n            el.appendChild(root);\r\n\r\n        }\r\n\r\n        function getModelProps(model){\r\n            const keys = Object.keys(model);\r\n            return keys.map(function (k) {\r\n                return k + ': ' + k;\r\n            }).join(', ');\r\n        }\r\n\r\n        function getTemplate(options) {\r\n            return options.component;\r\n        }\r\n\r\n        function getModel(options) {\r\n            return options.params;\r\n        }\r\n\r\n        function setPageTitle(title, content, selector) {\r\n            var titleText = ko.unwrap(title);\r\n            if (titleText)\r\n                $(content).find(selector).text(titleText);\r\n        }\r\n\r\n        if (showAsPage) {\r\n            var mainContent = $(\"#main-content\");\r\n            var popupContent = $(\"#popup-content\");\r\n            var scrollPosition = 0;\r\n            var titleSubscription = null;\r\n\r\n            function close() {\r\n                if (titleSubscription && $.isFunction(titleSubscription.dispose)) {\r\n                    titleSubscription.dispose();\r\n                }\r\n                mainContent.show();\r\n                popupContent.hide();\r\n                var title = headersContainer.pop();\r\n                $.cdh.helper.titlePage(title);\r\n                if (scrollPosition) {\r\n                    window.scrollTo(0, scrollPosition);\r\n                }\r\n            }\r\n\r\n            $(element).on(\"click\", function () {\r\n                let actualOptions = valueAccessor();\r\n                let model = getModel(actualOptions);\r\n                let prevTitle = $(\".title-page\").text();\r\n                headersContainer.push(prevTitle);\r\n\r\n                render(popupContent[0], close, model);\r\n\r\n                let title = actualOptions.pageTitle || ko.unwrap(model).pageTitle;\r\n\r\n                if (ko.isObservable(title)) {\r\n                    titleSubscription = title.subscribe($.cdh.helper.titlePage);\r\n                }\r\n                $.cdh.helper.titlePage(ko.unwrap(title));\r\n\r\n                scrollPosition = $(window).scrollTop();\r\n                mainContent.hide();\r\n                popupContent.show();\r\n                tooltipsInit();\r\n                window.scrollTo(0, 0);\r\n\r\n                return false;\r\n            });\r\n\r\n        } else {\r\n            $(element).magnificPopup({\r\n                enableEscapeKey: false,\r\n                closeOnBgClick: false,\r\n                items: {\r\n                    src: '<div></div>',\r\n                    type: 'inline'\r\n                },\r\n                callbacks: {\r\n                    open: function () {\r\n                        let actualOptions = valueAccessor();\r\n                        let renderIn = this.content[0];\r\n                        let model = getModel(actualOptions);\r\n\r\n                        render(renderIn, this.close, model);\r\n\r\n                        setTimeout(function() {\r\n                            let title = actualOptions.pageTitle || ko.unwrap(model).pageTitle;\r\n\r\n                            if (title && title.length > 0)\r\n                                setPageTitle(title, $(\".magnific-popup-container\"), \".popup-form_title\");\r\n\r\n                            tooltipsInit();\r\n                            var popupContainer = $(renderIn).find('.magnific-popup-container');\r\n                            popupContainer.find('.popup-form_title').attr('id', 'popup-form_title').after('<button title=\"Close (Esc)\" type=\"button\" class=\"mfp-close\" aria-label=\"close\">×</button>');\r\n                            \r\n                            $(popupContainer).on(\"click keydown\", function (e) {\r\n                                var firstFocusable = $(popupContainer).find('.mfp-close');\r\n                                var lastFocusable = $(popupContainer).find(':focusable').eq(-1);\r\n                                if (document.activeElement === firstFocusable[0] && e.shiftKey && e.key === 'Tab') {\r\n                                            lastFocusable.focus();\r\n                                            e.preventDefault();\r\n                                }\r\n\r\n                                else if (document.activeElement === lastFocusable[0] && e.key === 'Tab' && !e.shiftKey) {\r\n                                        firstFocusable.focus();\r\n                                        e.preventDefault();\r\n                                }\r\n                            })\r\n                        }, 0);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        $(element).on(\"click keydown\", function (e) { e.stopImmediatePropagation(); });\r\n\r\n        let forceOpen = options.forceOpen;\r\n        if(ko.isSubscribable(forceOpen)) {\r\n            forceOpen.subscribe(function(newValue) {\r\n                if(newValue === true) {\r\n                    $(element).click();\r\n                }\r\n            });\r\n        }\r\n        else if (forceOpen) {\r\n            $(element).click();\r\n        }\r\n    }\r\n};\r\n\r\nko.bindingHandlers.popup = {\r\n    init: function (element, valueAccessor) {\r\n\r\n        var options = valueAccessor();\r\n        var showAsPage = options.showAsPage || $.cdh.isMobile;\r\n        if (showAsPage) {\r\n            var title = options.title;\r\n            var originTitle = $(\".title-page\").text();\r\n            var mainContent = $(\".content\").children().first();\r\n            var popupContent = $(\"#popup-content\");\r\n            var scrollPosition = 0;\r\n            var titleSubscription = null;\r\n\r\n            function close() {\r\n                if (titleSubscription && $.isFunction(titleSubscription.dispose)) {\r\n                    titleSubscription.dispose();\r\n                }\r\n                $(\".title-page\").text(originTitle);\r\n                $(\"#header-title\").text(originTitle);\r\n                mainContent.show();\r\n                popupContent.hide();\r\n\r\n                /* WCP-2989: when we restore our main layout, we can refresh charts in gridstack widgets */\r\n                $(window).trigger('resize'); // for charts refresh\r\n\r\n                updateContainerHeight(element)();\r\n\r\n                //Scroll on top after all\r\n                if (scrollPosition) {\r\n                    window.scrollTo(0, scrollPosition);\r\n                }\r\n            }\r\n\r\n            function setPageTitle(title) {\r\n                var titleText = ko.unwrap(title);\r\n                if (titleText) {\r\n                    $(\".title-page\").text(titleText);\r\n                    $(\"#header-title\").text(titleText);\r\n                }\r\n            }\r\n\r\n            $(element)\r\n                .on(\"click\",\r\n                    function(e) {\r\n                        var renderIn = popupContent;\r\n                        var binding = ko.unwrap(valueAccessor());\r\n                        var template = ko.unwrap(binding.template);\r\n                        var params = ko.unwrap(binding.params);\r\n\r\n                        binding.title = $.cdh.helper.htmlDecode(binding.title);\r\n\r\n                        var model = binding.modelBuilder != null\r\n                            ? binding.modelBuilder(params)\r\n                            : new binding.model(params);\r\n\r\n                        model.DisplayedAsPage = true;\r\n\r\n                        var setClose = ko.unwrap(model).setClose;\r\n                        if ($.isFunction(setClose))\r\n                            setClose(close);\r\n\r\n                        var preRender = ko.unwrap(model).preRender;\r\n                        if ($.isFunction(preRender))\r\n                            preRender();\r\n                        else{\r\n                            var initialize = ko.unwrap(model).initialize;\r\n                            if($.isFunction(initialize))\r\n                                initialize();\r\n                        }\r\n\r\n                        if (title) {\r\n                            $(\".title-page\").text(title);\r\n                            $(\"#header-title\").text(title);\r\n                        } else {\r\n                            var pageTitle = options.pageTitle || ko.unwrap(model).pageTitle;\r\n                            if (ko.isObservable(pageTitle)) {\r\n                                titleSubscription = pageTitle.subscribe(setPageTitle);\r\n                            }\r\n                            setPageTitle(pageTitle);\r\n                        }\r\n\r\n                        ko.renderTemplate(template, model, {}, renderIn[0], 'replaceChildren');\r\n\r\n                        scrollPosition = $(window).scrollTop();\r\n                        popupContent.show();\r\n                        mainContent.hide();\r\n                        tooltipsInit();\r\n                        /* WCP-2989: Comment that line - it make gridstack to collapse all widgets if it hidden (resize on window make gridstack to resize also) */\r\n                        //$(window).trigger('resize'); // for charts refresh\r\n\r\n                        e.stopImmediatePropagation();\r\n                        return false;\r\n                    });\r\n\r\n        } else {\r\n            $(element)\r\n                .magnificPopup({\r\n                    enableEscapeKey: false,\r\n                    closeOnBgClick: false,\r\n                    items: {\r\n                        src: '<div></div>',\r\n                        type: 'inline'\r\n                    },\r\n                    callbacks: {\r\n                        open: function () {\r\n                            var renderIn = this.content[0];\r\n                            var binding = ko.unwrap(valueAccessor());\r\n                            var template = ko.unwrap(binding.template);\r\n                            var params = ko.unwrap(binding.params);\r\n\r\n                            binding.title = $.cdh.helper.htmlDecode(binding.title);\r\n\r\n                            var model = binding.modelBuilder != null\r\n                                ? binding.modelBuilder(params)\r\n                                : new binding.model(params);\r\n\r\n                            model.DisplayedAsPage = false;\r\n\r\n                            var setClose = ko.unwrap(model).setClose;\r\n                            if ($.isFunction(setClose))\r\n                                setClose(this.close);\r\n\r\n                            var preRender = ko.unwrap(model).preRender;\r\n                            if ($.isFunction(preRender))\r\n                                preRender();\r\n                            else{\r\n                                var initialize = ko.unwrap(model).initialize;\r\n                                if($.isFunction(initialize))\r\n                                    initialize();\r\n                            }\r\n\r\n                            ko.renderTemplate(template, model, {}, renderIn, 'replaceChildren');\r\n                            tooltipsInit();\r\n                            const $popupContainer = $(renderIn).find('.magnific-popup-container');\r\n\r\n                            if ($popupContainer.length) {\r\n                                $popupContainer.attr({\r\n                                    'role': 'dialog',\r\n                                    'aria-modal': 'true',\r\n                                    'aria-labelledby': 'popup-form_title'\r\n                                });\r\n                            }\r\n\r\n                            $popupContainer.find('.popup-form_title').attr('id', 'popup-form_title').after('<button title=\"' + $.cdh.languageConstant.getConstant('button.close-esc') +'\" type=\"button\" class=\"mfp-close\" aria-label=\"close\">×</button>'); \r\n                            $($popupContainer).on(\"click keydown\", function (e) {\r\n                                var firstFocusable = $($popupContainer).find('.mfp-close');\r\n                                var lastFocusable = $($popupContainer).find(':focusable').eq(-1);\r\n                                if (document.activeElement === firstFocusable[0] && e.shiftKey && e.key === 'Tab') {\r\n                                    lastFocusable.focus();\r\n                                    e.preventDefault();\r\n                                }\r\n\r\n                                else if (document.activeElement === lastFocusable[0] && e.key === 'Tab' && !e.shiftKey) {\r\n                                    firstFocusable.focus();\r\n                                    e.preventDefault();\r\n                                }\r\n                            })\r\n                            // $(renderIn).find('.magnific-popup-container').attr('role', 'dialog').attr('aria-modal', 'true').attr('aria-labelledby', 'popup-form_title');\r\n                        }\r\n                    }\r\n                });\r\n        }\r\n\r\n\r\n        $(element)\r\n            .on(\"click\",\r\n                function (e) {\r\n                    e.stopImmediatePropagation();\r\n                    return false;\r\n                });\r\n\r\n        $(element).on('keydown', function (e) {\r\n            if (e.keyCode === 32 || e.keyCode === 13) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                $(element).click();\r\n            }\r\n        });\r\n\r\n        let forceOpen = options.forceOpen;\r\n        if(ko.isSubscribable(forceOpen)) {\r\n            forceOpen.subscribe(function(newValue) {\r\n                if(newValue === true) {\r\n                    $(element).click();\r\n                }\r\n            });\r\n        }\r\n        else if (forceOpen) {\r\n            $(element).click();\r\n        }\r\n    }\r\n};\r\n\r\n\r\n","(function ($) {\r\n\r\n    ko.observableArray.fn.pushAll = function (valuesToPush) {\r\n        var underlyingArray = this();\r\n        this.valueWillMutate();\r\n        ko.utils.arrayPushAll(underlyingArray, valuesToPush);\r\n        this.valueHasMutated();\r\n        return this;\r\n    };\r\n\r\n    ko.bindingHandlers.currency = {\r\n        update: function (element, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor()),\r\n                currency,\r\n                html;\r\n            if (val === 0) {\r\n                html = '<span class=\"currency-span\" title=\"$0.00\">$0.00</span>';\r\n            } else {\r\n                currency = $.cdh.helper.parseCurrency(val);\r\n\r\n                html = '$' + currency.beforeDot + '.' + currency.afterDot;\r\n                if (currency.negative) {\r\n                    html = \"(\" + html + \")\";\r\n                }\r\n                html = `<span class=\"currency-span\" title=${html}>` + html + '</span>';\r\n            }\r\n            $(element).html(html);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.editableText = {\r\n        init: function (element, valueAccessor) {\r\n            function onInput() {\r\n                const observable = valueAccessor();\r\n                observable($(this).text());\r\n            }\r\n\r\n            $(element).on('blur', onInput);\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            const value = ko.utils.unwrapObservable(valueAccessor());\r\n            $(element).text(value);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.currencyText = {\r\n        update: function (element, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            var currency = $.cdh.helper.parseCurrency(val);\r\n\r\n            var val = '$' + currency.beforeDot + '.' + currency.afterDot;\r\n            if (currency.negative) {\r\n                val = \"(\" + val + \")\";\r\n            }\r\n\r\n            $(element).text(val);\r\n        }\r\n    };\r\n    ko.bindingHandlers.phone = {\r\n        update: function (element, valueAccessor) {\r\n            var phone = ko.utils.unwrapObservable(valueAccessor());\r\n            var formatPhone = function () {\r\n                return phone.replace(/(\\d{1})(\\d{3})(\\d{3})(\\d{3})/, \"+$1 $2 $3 $4\");\r\n            }\r\n            ko.bindingHandlers.text.update(element, formatPhone);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.currencySpans = {\r\n        update: function (element, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            if (!val.isInterval || !val.SpendingLimitField) {\r\n                var currency = $.cdh.helper.parseCurrency(val);\r\n                var html = '$' + currency.beforeDot + '.' + currency.afterDot;\r\n                if (currency.negative) {\r\n                    html = \"(\" + html + \")\";\r\n                }\r\n                html = `<span class=\"currency-span\" title=${html}>` + html + '</span>';\r\n            }\r\n            else {\r\n                if (val.AccountPlanYear !== $.cdh.enums.planYear.future) {\r\n                    var currency = $.cdh.helper.parseCurrency(val.balance());\r\n                    var html = '$' + currency.beforeDot + '.' + currency.afterDot;\r\n                    if (currency.negative) {\r\n                        html = \"(\" + html + \")\";\r\n                    }\r\n                    if (val.balance() != null) {\r\n                        html = \"<div><h4>\" + val.SpendingLimitField.Title + `</h4></div><span class='currency-span' title=${html}>` + html + \"</span >\";\r\n                    } else {\r\n                        html = '';\r\n                    }\r\n                }\r\n                else\r\n                    html = \"<div><h4>\" + val.SpendingLimitField.Title + \"</h4></div><span class='currency-span' title='$--.--'>$--.--</span >\";\r\n                \r\n            }\r\n\r\n            $(element).html(html);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.masktrim = {\r\n        init: function (element, valueAccessor) {\r\n        },\r\n        update: function (el, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            if (val.length > 4) {\r\n                val = '*****' + val.slice(val.length - 4, val.length);\r\n            }\r\n            ko.utils.setTextContent(el, val);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.masktrim12 = {\r\n        init: function (element, valueAccessor) {\r\n        },\r\n        update: function (el, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            switch (val.length) {\r\n                case 1:\r\n                    val = '***********' + val;\r\n                    break;\r\n                case 2:\r\n                    val = '**********' + val;\r\n                    break;\r\n                case 3:\r\n                    val = '*********' + val;\r\n                    break;\r\n                default:\r\n                    val = '********' + val.slice(val.length - 4, val.length);\r\n                    break;\r\n            }\r\n            ko.utils.setTextContent(el, val);\r\n        }\r\n    };\r\n\r\n    ko.virtualElements.allowedBindings.masktrim = true;\r\n\r\n    ko.bindingHandlers.mask = {\r\n        count: 4,\r\n        init: function (element, valueAccessor) {\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            var value = ko.unwrap(valueAccessor());\r\n            if ($.type(value) === 'string') {\r\n                var tomask = value.length - ko.bindingHandlers.mask.count;\r\n                if (tomask > 0) {\r\n                    var m = ''; var count = tomask;\r\n                    while (--count >= 0) m += '*';\r\n                    value = m + value.substring(tomask);\r\n                }\r\n            } else {\r\n                // not implemented yet way to customize mask logic\r\n            }\r\n\r\n            ko.utils.setTextContent(element, value);\r\n        }\r\n    };\r\n    ko.virtualElements.allowedBindings.mask = true;\r\n\r\n    ko.bindingHandlers.maskAccountRoutingNumber = {\r\n        length: 8,\r\n        init: function (element, valueAccessor) {\r\n\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            var value = ko.unwrap(valueAccessor());\r\n            if ($.type(value) === 'string') {\r\n                var tomask = ko.bindingHandlers.maskAccountRoutingNumber.length - value.length;\r\n                if (tomask > 0) {\r\n                    var m = ''; var count = tomask;\r\n                    while (--count >= 0) m += '*';\r\n                    value = m + value;\r\n                }\r\n            }\r\n            ko.utils.setTextContent(element, value);\r\n        }\r\n    }\r\n    function bindFiles(fileList, observableArray, onlyOne, onlyOneMessage, acceptMimes, fixedSizeMb, totalFixedSizeMb, invalidFileFormatMessage, onLoadCallback) {\r\n        if (!fileList || fileList.length == 0)\r\n            return;\r\n\r\n        var maxFileSizeMb = $.cdh.const.maxUploadSizeMb;\r\n        if (fixedSizeMb) {\r\n            maxFileSizeMb = fixedSizeMb;\r\n        }\r\n\r\n        var maxTotalFileSizeMb = 128;\r\n        if (totalFixedSizeMb) {\r\n            maxTotalFileSizeMb = totalFixedSizeMb;\r\n        }\r\n\r\n        maxTotalFileSizeMb = maxTotalFileSizeMb.toFixed(1);\r\n\r\n        var totalFileSize = 0;\r\n        var files = observableArray();\r\n        if (files) {\r\n            for (var i = 0; i < files.length; ++i) {\r\n                totalFileSize += files[i].fileSize;\r\n            }\r\n        }\r\n        var totalLimitReached = false;\r\n        $.each(fileList, function (i, file) {\r\n            var reader = new FileReader();\r\n            reader.onload = function (e) {\r\n\r\n                var uploadFile = function () {\r\n                    if (totalLimitReached) return;\r\n                    var fileModel = new $.cdh.models.fileModel(e.target.result, file.name, file.size);\r\n\r\n                    if (acceptMimes != null && fileModel.contentType.search(acceptMimes) != 0) {\r\n                        if (!fileModel.base64) {\r\n                            alert($.cdh.languageConstant.getConstant('extension-validation.zero-file-size'));\r\n                            return;\r\n                        }\r\n                        if (invalidFileFormatMessage) {\r\n                            alert(invalidFileFormatMessage);\r\n                            if (onLoadCallback) {\r\n                                onLoadCallback();\r\n                            }\r\n                        } else {\r\n                            if (onLoadCallback) {\r\n                                onLoadCallback();\r\n                            }\r\n                            alert($.cdh.languageConstant.getConstant('extension-validation.file-type-supported'));\r\n                        }\r\n                        return;\r\n                    }\r\n\r\n                    var fileSize = file.size;\r\n\r\n                    var errorMessage = null;\r\n                    if (fileSize > maxFileSizeMb * 1024 * 1024) {\r\n                        errorMessage = $.cdh.languageConstant.getConstant('extension-validation.file-size-limit', { '0': maxFileSizeMb });\r\n                    } else if (totalFileSize + fileSize > maxTotalFileSizeMb * 1024 * 1024) {\r\n                        errorMessage = $.cdh.languageConstant.getConstant('extension-validation.total-file-size', { '0': maxTotalFileSizeMb });\r\n                    }\r\n\r\n                    if (errorMessage) {\r\n                        alert(errorMessage);\r\n                        totalLimitReached = true\r\n                        if (onLoadCallback) {\r\n                            onLoadCallback();\r\n                        }\r\n                        return;\r\n                    }\r\n\r\n                    observableArray.push(fileModel);\r\n\r\n                    totalFileSize += fileSize;\r\n\r\n                    if (onLoadCallback) {\r\n                        onLoadCallback();\r\n                    }\r\n                }\r\n\r\n                if (onlyOne) {\r\n                    if (observableArray().length > 0) {\r\n                        if (onlyOneMessage) {\r\n                            var okCallback = function () {\r\n                                observableArray([]);\r\n                                uploadFile();\r\n                            };\r\n\r\n                            var cancellCallback = function () {\r\n                                if (onLoadCallback) {\r\n                                    onLoadCallback();\r\n                                }\r\n                            };\r\n\r\n                            $.cdh.helper.confirm(onlyOneMessage, okCallback, cancellCallback);\r\n                        } else {\r\n                            observableArray([]);\r\n                            uploadFile();\r\n                        }\r\n                    } else {\r\n                        uploadFile();\r\n                    }\r\n                } else {\r\n                    uploadFile();\r\n                }\r\n            };\r\n\r\n            reader.readAsDataURL(file);\r\n        });\r\n    }\r\n\r\n    ko.bindingHandlers.file = {\r\n        init: function (element, valueAccessor) {\r\n\r\n            var options = valueAccessor();\r\n            var onlyOne = options.onlyOne;\r\n            var onlyOneMessage = options.onlyOneMessage;\r\n            var fixedSizeMb = options.fixedSizeMb;\r\n            var totalFixedSizeMb = options.totalFixedSizeMb;\r\n            var items = options.items;\r\n            var invalidFileFormatMessage = options.invalidFileFormatMessage;\r\n\r\n            if (onlyOne) {\r\n                $(element).removeAttr(\"multiple\");\r\n            }\r\n\r\n            var input = $(element).is('input:file') ? $(element) : $(element).find('input:file');\r\n            var acceptMimes = null;\r\n            if (input.length > 0) {\r\n                var accept = $(input[0]).attr('accept').replace(/ /g, '');\r\n                if (accept) {\r\n                    var mimes = accept.split(',');\r\n                    $.each(mimes, function (i) { return mimes[i] = $.trim(mimes[i]); });\r\n                    acceptMimes = RegExp(mimes.join('|'));\r\n                }\r\n            }\r\n\r\n            ko.utils.registerEventHandler(element, 'change', function () {\r\n                bindFiles(this.files, items, onlyOne, onlyOneMessage, acceptMimes, fixedSizeMb, totalFixedSizeMb, invalidFileFormatMessage, function () {\r\n                    var control = $(element);\r\n                    control.wrap('<form>').closest('form').get(0).reset();\r\n                    control.unwrap();\r\n                    var updateHeight = updateContainerHeight(control);\r\n                    updateHeight();\r\n                });\r\n            });\r\n\r\n            ko.utils.registerEventHandler(element, 'dragenter', function (e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                e.originalEvent.dataTransfer.dropEffect = \"copy\";\r\n            });\r\n\r\n            ko.utils.registerEventHandler(element, 'dragover', function (e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                e.originalEvent.dataTransfer.dropEffect = \"copy\";\r\n            });\r\n\r\n            ko.utils.registerEventHandler(element, 'drop', function (e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                bindFiles(e.originalEvent.dataTransfer.files, items, onlyOne, onlyOneMessage, acceptMimes, fixedSizeMb, totalFixedSizeMb, invalidFileFormatMessage, function () {\r\n                    var updateHeight = updateContainerHeight($(element));\r\n                    updateHeight();\r\n                });\r\n            });\r\n        }\r\n    }\r\n\r\n    ko.bindingHandlers.printer = {\r\n\r\n        init: function (element, valueAccessor) {\r\n            var selector = ko.unwrap(valueAccessor());\r\n            $(element).on(\"click\", function (e) {\r\n                $(element).closest(selector).printArea();\r\n                e.stopImmediatePropagation();\r\n                return false;\r\n            });\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.numberInput = {\r\n        init: function (element) {\r\n            var $element = $(element);\r\n            $element.keydown(function (e) {\r\n                var maxLength = $(this).attr('maxlength');\r\n                var ctrlKey = e.ctrlKey || e.metaKey;\r\n                if (\r\n                    // Allow: backspace, delete, tab, escape, enter, end,  home, left, right, F5,\r\n                    $.inArray(e.keyCode, [46, 8, 9, 27, 13, 35, 36, 37, 39, 116]) !== -1 ||\r\n                    // Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n                    (ctrlKey === true && $.inArray(e.keyCode, [65, 67, 86, 88]) !== -1)\r\n                ) {\r\n                    return;\r\n                }\r\n                if (\r\n                    // numbers,\r\n                    ((e.keyCode >= 48 && e.keyCode <= 57) && !e.shiftKey) ||\r\n                    // numpad,\r\n                    (e.keyCode >= 96 && e.keyCode <= 105) ||\r\n                    // tablets numpad\r\n                    (e.keyCode == 229)\r\n                ) {\r\n                    if (maxLength && $(this).val().length >= maxLength) {\r\n                        e.preventDefault();\r\n                    }\r\n                    return;\r\n                }\r\n                e.preventDefault();\r\n            });\r\n\r\n            $element.focusout(function () {\r\n                ko.bindingHandlers.numberInput.format($element, $element.val());\r\n            });\r\n\r\n            ko.bindingHandlers.textInput.init.apply(null, arguments);\r\n            ko.bindingHandlers.numberInput.format($element, $element.val());\r\n        },\r\n\r\n        format: function ($element, value) {\r\n            var maxLength = $element.attr('maxlength');\r\n            if (maxLength && value.length > maxLength) {\r\n                value = value.substr(0, maxLength);\r\n            }\r\n            value = value.replace(/[^0-9]/g, '');\r\n            $element.val(value);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.alphanumericInput = {\r\n        init: function (element, valueAccessor) {\r\n            var $element = $(element);\r\n            $element.keydown(function (e) {\r\n                if (\r\n                    // Allow: backspace, delete, tab, escape, enter, end,  home, left, right, F5,\r\n                    $.inArray(e.keyCode, [46, 8, 9, 27, 13, 35, 36, 37, 39, 116]) !== -1 ||\r\n                    // Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n                    (e.ctrlKey === true && $.inArray(e.keyCode, [65, 67, 86, 88]) !== -1)\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                if (/^[0-9a-zA-Z]+$/g.test(e.key)) {\r\n                    return;\r\n                }\r\n                e.preventDefault();\r\n            });\r\n\r\n            $element.focusout(function () {\r\n                ko.bindingHandlers.alphanumericInput.format($element, $element.val());\r\n            });\r\n\r\n            ko.bindingHandlers.textInput.init.apply(null, arguments);\r\n            ko.bindingHandlers.alphanumericInput.format($element, $element.val());\r\n        },\r\n\r\n        format: function ($element, value) {\r\n            var maxLength = $element.attr('maxlength');\r\n            if (maxLength && value.length > maxLength) {\r\n                value = value.substr(0, maxLength);\r\n            }\r\n            //value = value.replace(/^[0-9a-zA-Z]+$/g, '');\r\n            $element.val(value);\r\n        }\r\n    }\r\n\r\n    ko.bindingHandlers.alphanumericUnderscoreInput = {\r\n        init: function (element, valueAccessor) {\r\n            var $element = $(element);\r\n            $element.keydown(function (e) {\r\n                if (\r\n                    // Allow: backspace, delete, tab, escape, enter, end,  home, left, right, F5,\r\n                    $.inArray(e.keyCode, [46, 8, 9, 27, 13, 35, 36, 37, 39, 116]) !== -1 ||\r\n                    // Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n                    (e.ctrlKey === true && $.inArray(e.keyCode, [65, 67, 86, 88]) !== -1)\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                if (/^[0-9a-zA-Z_]+$/g.test(e.key)) {\r\n                    return;\r\n                }\r\n                e.preventDefault();\r\n            });\r\n\r\n            $element.focusout(function () {\r\n                ko.bindingHandlers.alphanumericInput.format($element, $element.val());\r\n            });\r\n\r\n            ko.bindingHandlers.textInput.init.apply(null, arguments);\r\n            ko.bindingHandlers.alphanumericInput.format($element, $element.val());\r\n        },\r\n\r\n        format: function ($element, value) {\r\n            var maxLength = $element.attr('maxlength');\r\n            if (maxLength && value.length > maxLength) {\r\n                value = value.substr(0, maxLength);\r\n            }\r\n            //value = value.replace(/^[0-9a-zA-Z]+$/g, '');\r\n            $element.val(value);\r\n        }\r\n    }\r\n\r\n    ko.bindingHandlers.numberInputWithValueProcessing = {\r\n        // used when we need to use preventDefault for all devices (iPad bug, WCP-1143)\r\n        init: function (element) {\r\n            var $element = $(element);\r\n            $element.on('input', function (e) {\r\n                var value = $(this).val();\r\n                var fixedValue = value.replace(/[^0-9]/g, '');\r\n                var keyCode = $(this).data('key_code');\r\n                var prevValue = $(this).data('prev_value');\r\n                var maxLength = $(this).attr('maxlength');\r\n                var phoneDebugBox = $('#phone_debug_box');\r\n                if (phoneDebugBox.length) {\r\n                    phoneDebugBox.html(value + '/' + prevValue + '_' + keyCode + '_' + value.length + '/' + maxLength);\r\n                }\r\n\r\n                // e-character fix and maxlength check\r\n                if ((keyCode === 69) || (maxLength && value.length > maxLength)) {\r\n                    $(this).val(prevValue);\r\n                    return;\r\n                }\r\n                if (fixedValue !== value) {\r\n                    $(this).val(fixedValue);\r\n                }\r\n                $(this).data('prev_value', fixedValue);\r\n            });\r\n\r\n            $element.on('keydown', function (e) {\r\n                $(this).data('key_code', e.keyCode);\r\n            });\r\n\r\n            $element.focusout(function () {\r\n                ko.bindingHandlers.numberInput.format($element, $element.val());\r\n            });\r\n\r\n            ko.bindingHandlers.textInput.init.apply(null, arguments);\r\n            ko.bindingHandlers.numberInput.format($element, $element.val());\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.currencyInput = {\r\n        init: function (element, valueAccessor) {\r\n            var $element = $(element);\r\n            var allowNegative = $element.attr(\"allowNegative\") == \"true\";\r\n            $element.keydown(function (e) {\r\n                var inputType = $(this).attr('type').toLowerCase();\r\n\r\n                // NOTE: removed this condition because of browsers allow dot and comma as separators.\r\n                // if (inputType !== 'number') {\r\n                var value = (ko.unwrap(valueAccessor()) || '').toString();\r\n                //minus\r\n                if (allowNegative && (e.keyCode === 189 || e.keyCode === 173 || e.keyCode === 109)) {\r\n                    if (value.indexOf('-') === -1)\r\n                        return;\r\n                }\r\n\r\n                // user pressed dot when all text is selected\r\n                // if (e.keyCode === 190 && document.getSelection().toString() === value) {\r\n                //     return;\r\n                // }\r\n                var jsInput = $(this).get(0);\r\n                if ((e.keyCode === 190 || e.keyCode === 110) &&\r\n                    typeof (jsInput.selectionStart) === 'number' &&\r\n                    jsInput.selectionStart == 0 &&\r\n                    jsInput.selectionEnd == jsInput.value.length) {\r\n                    return;\r\n                }\r\n\r\n                var noPoint = value.indexOf('.') === -1;\r\n                if (\r\n                    // Allow: backspace, delete, tab, escape, enter, end,  home, left, right, F5,\r\n                    $.inArray(e.keyCode, [46, 8, 9, 27, 13, 35, 36, 37, 39, 116]) !== -1 ||\r\n                    // only one point for string,\r\n                    ($.inArray(e.keyCode, [110, 190]) !== -1 && noPoint) ||\r\n                    // Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n                    (e.ctrlKey === true && $.inArray(e.keyCode, [65, 67, 86, 88]) !== -1) ||\r\n                    // numbers,\r\n                    ((e.keyCode >= 48 && e.keyCode <= 57) && !e.shiftKey) ||\r\n                    // numpad.\r\n                    (e.keyCode >= 96 && e.keyCode <= 105)\r\n                ) {\r\n                    return;\r\n                }\r\n                e.preventDefault();\r\n                // }\r\n            });\r\n\r\n            $element.focus(function () {\r\n                setTimeout(function () {\r\n                    let nativeElement = $element.get(0);\r\n\r\n                    // WCP-4892 fix\r\n                    if (typeof nativeElement.select === \"function\") {\r\n                        nativeElement.select();\r\n                    } else {\r\n                        let textLen = $(element).val().length;\r\n                        let realType = nativeElement.type;\r\n\r\n                        if ([\"text\", \"search\", \"url\", \"tel\", \"password\"].includes(realType)) {\r\n                            nativeElement.setSelectionRange(0, textLen);\r\n                        } else {\r\n                            nativeElement.type = \"text\";\r\n                            nativeElement.setSelectionRange(0, textLen);\r\n                            nativeElement.type = realType;\r\n                        }\r\n                    }\r\n                }, 0);\r\n            });\r\n\r\n            $element.blur(function () {\r\n                ko.bindingHandlers.currencyInput.format($element, $element.val());\r\n            });\r\n\r\n            ko.bindingHandlers.textInput.init.apply(null, arguments);\r\n            ko.bindingHandlers.currencyInput.format($element, $element.val());\r\n        },\r\n\r\n        format: function ($element, value) {\r\n            var formattedValue = '';\r\n            if ($.type(value) === \"string\") {\r\n                if (value.length > 0) {\r\n                    value = parseFloat(value);\r\n                    if (isNaN(value))\r\n                        value = 0;\r\n                    formattedValue = value.toFixed(2);\r\n                }\r\n            } else if ($.isNumeric(value)) {\r\n                formattedValue = value.toFixed(2);\r\n            } else {\r\n                return;\r\n            }\r\n\r\n            $element.val(formattedValue);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.initTooltipster = {\r\n        init: function (element, valueAccessor) {\r\n            if (valueAccessor().skipInitialization)\r\n                return;\r\n\r\n            var $t = $(element);\r\n            var preventDuplicate = valueAccessor().preventDuplicate;\r\n            if (preventDuplicate && $t.data('tooltipstered') === true) {\r\n                return;\r\n            }\r\n\r\n            var isTouchDevice = ('ontouchend' in window);\r\n            $t.find('.b-tooltip').attr('role', 'tooltip');\r\n\r\n            var tooltipBtn = $t.find('.js-tooltip-btn');\r\n            tooltipBtn.attr('aria-expanded', 'false');\r\n            tooltipBtn.click(function (e) {\r\n                e.stopPropagation();\r\n                if (isTouchDevice) {\r\n                    return;\r\n                }\r\n\r\n                if ($(this).attr('aria-expanded') === 'false') {\r\n                    $t.tooltipster('show');\r\n                } else {\r\n                    $t.tooltipster('hide');\r\n                }\r\n            });\r\n            tooltipBtn.keydown(function(e) {\r\n                e.stopPropagation();\r\n                if (e.keyCode === 27) {\r\n                    $t.tooltipster('hide');\r\n                }\r\n            });\r\n            tooltipBtn.keyup(function(e) {\r\n                if (e.keyCode === 27) {\r\n                    e.stopPropagation();\r\n                }\r\n            });\r\n            tooltipBtn.blur(function(e) {\r\n                $t.tooltipster('hide');\r\n            });\r\n\r\n            tooltipBtn.focus(function(e) {\r\n                $t.tooltipster('show');\r\n            });\r\n\r\n            var tooltipContent = valueAccessor().tooltipContent;\r\n            if (tooltipContent) {\r\n                const parser = document.createElement('textarea');\r\n                parser.innerHTML = tooltipContent;\r\n                $t.find(\".b-tooltip-content\").html(tooltipContent);\r\n            }\r\n\r\n            let tooltipTitle = valueAccessor().tooltipTitle;\r\n            if (tooltipTitle) {\r\n                $t.find(\".b-tooltip-title\").text(tooltipTitle);\r\n            }\r\n\r\n            var contentSelector = valueAccessor().contentSelector;\r\n            if (contentSelector) {\r\n                $t.attr('title', $t.find(contentSelector).html());\r\n            } else {\r\n                $t.attr('title', $t.html());\r\n            }\r\n           \r\n            var activeIfEnabledSelector = valueAccessor().activeIfEnabledSelector;\r\n            var activeIfDisabledSelector = valueAccessor().activeIfDisabledSelector;\r\n\r\n            $t.tooltipster({\r\n                //trigger: 'click',\r\n                //autoClose: false,\r\n                theme: 'tooltip-anthem',\r\n                contentAsHTML: true,\r\n                contentCloning: false,\r\n                speed: 100,\r\n                interactive: true,\r\n                interactiveTolerance: 150,\r\n                // hideOnClick: true,\r\n                functionBefore: function (origin, continueTooltip) {\r\n                    origin.find('.js-tooltip-btn').attr('aria-expanded', 'true');\r\n                    if (!activeIfEnabledSelector && !activeIfDisabledSelector) {\r\n                        continueTooltip();\r\n                    } else {\r\n                        if (activeIfEnabledSelector) {\r\n                            if ($t.find(activeIfEnabledSelector).is(\":enabled\")) {\r\n                                continueTooltip();\r\n                            }\r\n                        } else if (activeIfDisabledSelector) {\r\n                            if ($t.find(activeIfDisabledSelector).is(\":disabled\")) {\r\n                                continueTooltip();\r\n                            }\r\n                        }\r\n                    }\r\n                },\r\n                functionAfter: function (origin) {\r\n                    origin.find('.js-tooltip-btn').attr('aria-expanded', 'false');\r\n                },\r\n                functionReady: function (origin, tooltip) {\r\n                    //#216128 - Remove title attribute to avoid default tooltip with code \r\n                    if ($(origin).attr('title') !== 'undefined')\r\n                        $(origin).removeAttr('title');\r\n\r\n                    tooltip.click(function () {\r\n                        $(origin).tooltipster('hide');\r\n                    });\r\n                }                \r\n            });\r\n\r\n            setTimeout(function() {\r\n                $t.removeAttr('title');\r\n            }, 200);\r\n\r\n            if (preventDuplicate) {\r\n                $t.data('tooltipstered', true);\r\n            }\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.tooltipster = {\r\n        init: function (element, valueAccessor) {\r\n            var options = $.extend({ theme: 'tooltip-anthem', contentAsHTML: true }, valueAccessor());\r\n            $(element).tooltipster(options);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.initTooltipsterBase = {\r\n        init: function (el, valueAccessor) {\r\n            $(el).tooltipster({ theme: 'tooltip-anthem', contentAsHTML: true });\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.accountBalanceTotalSpans = {\r\n        update: function (element, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            var balance = 0;\r\n\r\n            if (val.accountIntervalType()) {\r\n                if (val.AccountPlanYear == $.cdh.enums.planYear.future) {\r\n                    balance = '$--.--'\r\n                }\r\n                else {\r\n                    balance = val.currentSpendingLimit;\r\n                }\r\n            }\r\n            else if (val.AccountType != $.cdh.enums.accountType.parking && val.AccountType != $.cdh.enums.accountType.transit) {\r\n                balance = val.TotalBalance;\r\n            }\r\n            else {\r\n                    balance = val.AvailableBalance;\r\n                }\r\n\r\n\r\n            var newValueAccessor = function () {\r\n                if (val.accountIntervalType()) {\r\n                    return {\r\n                        'SpendingLimitField': val.FieldsAliases.SpendingLimit,\r\n                        balance,\r\n                        isInterval: true,\r\n                        'AccountPlanYear': val.AccountPlanYear\r\n                    }\r\n                }\r\n                return balance; \r\n            };\r\n\r\n            ko.bindingHandlers.currencySpans.update(element, newValueAccessor);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.prependText = {\r\n        update: function (element, valueAccessor) {\r\n            var val = ko.unwrap(valueAccessor());\r\n            var $el = $(element);\r\n            var html = $el.html();\r\n            $el.empty().append(val, html);\r\n        }\r\n    };\r\n\r\n    // WCP-2949 test\r\n    // ko.bindingHandlers.FormEnterKeySubmit = {\r\n    //     update: function (element, valueAccessor) {\r\n    //         var body = $('body');\r\n    //         var $form = $(element);\r\n    //         $(window).keydown(function (e) {\r\n    //             if (e.keyCode == 13 && !body.hasClass('mfp-wait-alert-popup')) {\r\n    //                 var $submit = $form.find('button[type=submit]');\r\n    //                 if ($submit.is(\":visible\") && $submit.is(\":enabled\")) {\r\n    //                     $submit.trigger('click');\r\n    //                     return false;\r\n    //                 }\r\n    //             }\r\n    //         });\r\n    //     }\r\n    // };\r\n    // / WCP-2949 test\r\n\r\n    ko.bindingHandlers.FormEnterKeyCustom = {\r\n        update: function (element, valueAccessor) {\r\n            var body = $('body');\r\n            $(window).keydown(function (e) {\r\n                if (e.keyCode == 13 && !body.hasClass('mfp-wait-alert-popup')) {\r\n                    var resetFocus = valueAccessor().resetFocus;\r\n                    var ifFocusFunc = valueAccessor().ifFocus;\r\n                    var ifNoFocusFunc = valueAccessor().ifNoFocus;\r\n\r\n                    if ($(\":focus\").length > 0 && $.isFunction(ifFocusFunc)) {\r\n                        ifFocusFunc();\r\n                    } else if ($.isFunction(ifNoFocusFunc)) {\r\n                        ifNoFocusFunc();\r\n                    }\r\n\r\n                    if (resetFocus) {\r\n                        $(\":focus\").blur();\r\n                    }\r\n\r\n                    return false;\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.communicationsSummaryStickyTable = {\r\n        update: function (element, valueAccessor) {\r\n            var $tbl = $(element);\r\n            if ($tbl.length) {\r\n                var $win = $(window);\r\n                $win.scroll(function () {\r\n                    if (($win.scrollTop() > $tbl.offset().top) && ($win.scrollTop() < ($tbl.offset().top + $tbl.outerHeight() - 109))) {\r\n                        $tbl.addClass('pfixed');\r\n                    } else {\r\n                        $tbl.removeClass('pfixed');\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.optionsEnum = {\r\n        init: ko.bindingHandlers.options.init,\r\n        update: function (element, valueAccessor, allBindings) {\r\n            var enumName = ko.unwrap(valueAccessor());\r\n            var enumValues = ko.bindingHandlers['enum' + enumName].enumText;\r\n            var extendOptions = allBindings().extendOptions || {};\r\n            let keys = allBindings().keys;\r\n\r\n            enumValues = $.extend({}, enumValues, extendOptions);\r\n            let list = $.map(enumValues, function (value, key) { return { key: key, value: $.cdh.languageConstant.getConstant(`Enum.${enumName}.${value}`) }; });\r\n\r\n            if (keys) {\r\n                list = list.filter(function (item) {\r\n                    return keys.includes(parseInt(item.key));\r\n                });\r\n            }\r\n\r\n            list.sort(function (a, b) { return a.key - b.key });\r\n\r\n            function getList() {\r\n                return list;\r\n            }\r\n\r\n            var settings = {\r\n                optionsText: 'value',\r\n                optionsValue: 'key'\r\n            }\r\n\r\n            function wrapBindings() {\r\n                return allBindings();\r\n            }\r\n\r\n            wrapBindings['has'] = function (key) {\r\n                if (key in settings) return true;\r\n                return allBindings.has(key);\r\n            }\r\n            wrapBindings['get'] = function (key) {\r\n                if (key in settings) return settings[key];\r\n                return allBindings.get(key);\r\n            }\r\n\r\n            ko.bindingHandlers.options.update(element, getList, wrapBindings);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.ifRequired = {\r\n        init: function (element, valueAccessor) {\r\n            var observable = valueAccessor();\r\n            if (!ko.isObservable(observable) || !ko.isObservable(observable.rules)) {\r\n                throw new Error(\"ifRequired binding applies only to observable with validation\");\r\n            }\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            var observable = valueAccessor();\r\n            var rule = ko.utils.arrayFirst(observable.rules(), function (item) {\r\n                return item.rule && item.rule === \"required\";\r\n            });\r\n            ko.bindingHandlers.visible.update(element, function () {\r\n                return rule.params === true && (rule.condition ? rule.condition() : true);\r\n            });\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.requiredAttr = {\r\n        init: function (element, valueAccessor) {\r\n            var observable = valueAccessor();\r\n            if (!ko.isObservable(observable) || !ko.isObservable(observable.rules)) {\r\n                throw new Error(\"ifRequired binding applies only to observable with validation\");\r\n            }\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            var observable = valueAccessor();\r\n            var rule = ko.utils.arrayFirst(observable.rules(), function (item) {\r\n                return item.rule && item.rule === \"required\";\r\n            });\r\n            if (rule.params === true && (rule.condition ? rule.condition() : true)) {\r\n                element.setAttribute('required', 'required');\r\n            } else if (element.hasAttribute('required')) {\r\n                element.removeAttribute('required', 'required');\r\n            }\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.slideIn = {\r\n        init: function (element, valueAccessor) {\r\n            var value = ko.utils.unwrapObservable(valueAccessor());\r\n            $(element).toggle(value);\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            var value = ko.utils.unwrapObservable(valueAccessor());\r\n            value ? $(element).slideDown() : $(element).slideUp();\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.htmlBound = {\r\n        init: function () {\r\n            return { controlsDescendantBindings: true };\r\n        },\r\n        update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n            ko.utils.setHtml(element, valueAccessor());\r\n            ko.applyBindingsToDescendants(bindingContext, element);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.autocompleteField = {\r\n        init: function (element, valueAccessor) {\r\n            var settings = valueAccessor();\r\n            $(element).autocompleteField(settings);\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.cardNumber = {\r\n        init: function (element, valueAccessor) {\r\n            let number = valueAccessor();\r\n            let $element = $(element);\r\n\r\n            $element.on('input', function () {\r\n                let formattedNumber = $.payform.formatCardNumber($element.val());\r\n                $element.val(formattedNumber);\r\n\r\n                if (ko.isObservable(number)) {\r\n                    number($element.val().replace(/\\s/g, ''));\r\n                }\r\n            });\r\n        },\r\n        update: function (element, valueAccessor) {\r\n            let number = valueAccessor();\r\n\r\n            if (ko.isObservable(number)) {\r\n                let $element = $(element);\r\n                let numberValue = number();\r\n                let normalizedValue = $element.val().replace(/\\s/g, '');\r\n                if (numberValue !== normalizedValue) {\r\n                    let formattedNumber = $.payform.formatCardNumber(numberValue);\r\n                    $element.val(formattedNumber);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ko.validation.makeBindingHandlerValidatable('cardNumber');\r\n\r\n    ko.bindingHandlers.visibleIfSet = {\r\n        update: function (element, valueAccessor) {\r\n            let value = ko.utils.unwrapObservable(valueAccessor());\r\n            let isSet = value !== undefined && value !== null && value !== '';\r\n            let isCurrentlyVisible = !(element.style.display == \"none\");\r\n            if (isSet && !isCurrentlyVisible)\r\n                element.style.display = \"\";\r\n            else if ((!isSet) && isCurrentlyVisible)\r\n                element.style.display = \"none\";\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.dynamicTag = {\r\n        update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n            let tagName = ko.utils.unwrapObservable(valueAccessor());\r\n            if (tagName) {\r\n                let tagHtml = `<${tagName}></${tagName}>`;\r\n                ko.utils.setHtml(element, tagHtml);\r\n                ko.applyBindingsToDescendants(bindingContext, element);\r\n            }\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.dropdownMenu = {\r\n        init: function (element, valueAccessor) {\r\n            var options = valueAccessor();\r\n            $.cdh.helper.initMenuAccesibility(element, options);\r\n            $.cdh.helper.initMenuNavigation(element, options);\r\n        }\r\n    }\r\n\r\n\r\n\r\n    ko.bindingHandlers.dropdownFilterGroup = {\r\n        update: function (element, valueAccessor) {\r\n            const openedClassName = 'data-filter__item--opened';\r\n            const openedToLeftClassName = 'data-filter__item--opened--left';\r\n            const itemBtnClassName = 'data-filter__item-text--btn';\r\n            const itemBtnTextClassName = 'data-filter__item-text--btn-text';\r\n\r\n            function getDropdownParent(elem) {\r\n                return elem.closest('div.data-filter__item');\r\n            }\r\n            function isDropdownOpened(elem) {\r\n                return getDropdownParent(elem).hasClass(openedClassName);\r\n            }\r\n            function showDropdown(elem) {\r\n                elem.attr('aria-expanded', 'true');\r\n                let filterItem = getDropdownParent(elem);\r\n                filterItem.addClass(openedClassName);\r\n\r\n                const $menuItems = filterItem.find('[role=\"menuitem\"], [role=\"menuitemradio\"]');\r\n                if ($menuItems.length > 0) {\r\n                    $menuItems.attr('tabindex', -1);\r\n                    $menuItems.first().attr('tabindex', 0);\r\n                }\r\n\r\n                fixDropdownPosition(filterItem);\r\n            }\r\n            function hideDropdown(elem) {\r\n                getDropdownParent(elem)\r\n                    .removeClass(openedClassName)\r\n                    .removeClass(openedToLeftClassName)\r\n                    .find('.' + itemBtnClassName)\r\n                    .removeAttr('aria-expanded');\r\n            }\r\n            function hideAllDropdowns() {\r\n                $('div.data-filter__item--opened')\r\n                    .removeClass(openedClassName)\r\n                    .removeClass(openedToLeftClassName)\r\n                    .find('.' + itemBtnClassName)\r\n                    .removeAttr('aria-expanded');\r\n\r\n            }\r\n            function fixDropdownPosition(filterItem) {\r\n                let dropdown = filterItem.find('div.data-filter__dropdown');\r\n                if (!dropdown.length) {\r\n                    return;\r\n                }\r\n\r\n                dropdown = dropdown.get(0);\r\n                dropdown.style.removeProperty('right');\r\n                let mainElemRect = $('#main-content').get(0).getBoundingClientRect();\r\n                let dropdownRect = dropdown.getBoundingClientRect();\r\n                if (dropdownRect.right > mainElemRect.right) {\r\n                    if ((dropdownRect.right - mainElemRect.right) < (dropdownRect.left - mainElemRect.left)) {\r\n                        filterItem.addClass(openedToLeftClassName);\r\n                        dropdownRect = dropdown.getBoundingClientRect();\r\n                        if (dropdownRect.left < mainElemRect.left) {\r\n                            let diff = mainElemRect.left - dropdownRect.left + 5;\r\n                            dropdown.style.right = '-' + diff + 'px';\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            let filter = $(element);\r\n            const uuid = guid();\r\n            filter.find('.' + itemBtnClassName).each(function (idx) {\r\n                const uId = `${uuid}__${idx}`;\r\n                const buttonId = `button__${uId}`;\r\n                const controlId = `dropdown__${uId}`;\r\n\r\n                const filterItem = getDropdownParent($(this));\r\n                const dropdown = filterItem.find('div.data-filter__dropdown');\r\n\r\n                $(this).attr({\r\n                    id: buttonId,\r\n                    'aria-haspopup': 'true',\r\n                    'aria-controls': controlId,\r\n                });\r\n\r\n                dropdown.attr({\r\n                    'id': controlId,\r\n                    'aria-labelledby': buttonId,\r\n                });\r\n\r\n                $(this).on('click', function () {\r\n                    let isOpened = isDropdownOpened($(this));\r\n                    hideAllDropdowns();\r\n                    if (isOpened) {\r\n                        hideDropdown($(this));\r\n                    } else {\r\n                        showDropdown($(this));\r\n                    }\r\n                });\r\n                $(this).on('keydown', function (e) {\r\n                    if (e.keyCode === 27) {\r\n                        hideDropdown($(this));\r\n                    }\r\n                });\r\n            });\r\n            filter.find('div.data-filter__dropdown').each(function () {\r\n                const $dropdown = $(this);\r\n                const $menu = $dropdown.find('[role=\"menu\"]');\r\n                const $filterItem = getDropdownParent($dropdown);\r\n                $dropdown.on('click', function (e) {\r\n                    e.stopPropagation();\r\n                });\r\n                // $dropdown.find('.data-filter__dropdown-btn'.on('blur', function (e) {\r\n                // Note: hidden inputs produce focus outside of dropdown on click\r\n                // As a workaround we use only buttons and whole container for blur check\r\n                //$filterItem.on('blur', 'button', function (e) {\r\n                //    if (e.relatedTarget && $dropdown[0].contains(e.relatedTarget)) {\r\n                //        return;\r\n                //    }\r\n                //    hideDropdown($(this));\r\n                //});\r\n\r\n                $menu.on('exit', function(){\r\n                    hideDropdown($dropdown);\r\n                });\r\n\r\n            });\r\n\r\n            $(window).on('click', function (e) {\r\n                if ($(e.target).hasClass(itemBtnClassName) || $(e.target).hasClass(itemBtnTextClassName)) {\r\n                    return;\r\n                }\r\n                hideAllDropdowns();\r\n            });\r\n        }\r\n    };\r\n\r\n    ko.bindingHandlers.translationHandler = {\r\n        init: function (element, valueAccessor, allBindingsAccessor) {\r\n            const key = ko.unwrap(typeof (valueAccessor) != 'string' ? valueAccessor() : valueAccessor);     \r\n            const options = allBindingsAccessor != undefined ? allBindingsAccessor().translationOptions : '';           \r\n            const translatedText = $.cdh.languageConstant.getConstant(key, options);\r\n            ko.bindingHandlers.html.update(element, () => translatedText);\r\n        },\r\n        update: function (element, valueAccessor, allBindingsAccessor) {\r\n            const key = ko.unwrap(typeof (valueAccessor) != 'string' ? valueAccessor() : valueAccessor);\r\n            const options = allBindingsAccessor != undefined? allBindingsAccessor().translationOptions:'';  \r\n            const translation = $.cdh.languageConstant.getConstant(key, options);       \r\n            ko.bindingHandlers.html.update(element, () => translation);\r\n        },\r\n    };\r\n\r\n    ko.bindingHandlers.getTranslationInTargetLangauge = {\r\n        //TODO: Redesign the handler to consider all cases like incoming langauge in supported langauges and support for different namespaces, currently using deafult namespace \r\n        init: function (element, valueAccessor, allBindingsAccessor) {\r\n            const key = ko.unwrap(typeof (valueAccessor) != 'string' ? valueAccessor() : valueAccessor);\r\n            const options = allBindingsAccessor != undefined ? allBindingsAccessor().translationOptions : '';\r\n            const targetLang = (allBindingsAccessor != undefined || (typeof (allBindingsAccessor().targetlanguage) == 'string')) ? allBindingsAccessor().targetlanguage : 'en';\r\n            const translation = $.cdh.languageConstant.getResource(key, targetLang, options);\r\n            ko.bindingHandlers.html.update(element, () => translation);\r\n        },\r\n        update: function (element, valueAccessor, allBindingsAccessor) {\r\n            const key = ko.unwrap(typeof (valueAccessor) != 'string' ? valueAccessor() : valueAccessor);\r\n            const options = allBindingsAccessor != undefined ? allBindingsAccessor().translationOptions : '';\r\n            const targetLang = (allBindingsAccessor != undefined || (typeof (allBindingsAccessor().targetlanguage) != 'string')) ? allBindingsAccessor().targetlanguage : 'en';\r\n            const translation = $.cdh.languageConstant.getResource(key, targetLang, options);\r\n            ko.bindingHandlers.html.update(element, () => translation);\r\n        }\r\n    }\r\n    function guid() {\r\n        function s4() {\r\n            return Math.floor((1 + Math.random()) * 0x10000)\r\n                .toString(16)\r\n                .substring(1);\r\n        }\r\n        return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\r\n            s4() + '-' + s4() + s4() + s4();\r\n    }\r\n\r\n}(jQuery));\r\n","/* Knockout bindings for dates */\r\n\r\nko.bindingHandlers.datepicker = {\r\n\r\n    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n        const monthsLabel = {\r\n            January: $.cdh.languageConstant.getConstant('DatePicker.Months.January'),\r\n            February: $.cdh.languageConstant.getConstant('DatePicker.Months.February'),\r\n            March: $.cdh.languageConstant.getConstant('DatePicker.Months.March'),\r\n            April: $.cdh.languageConstant.getConstant('DatePicker.Months.April'),\r\n            May: $.cdh.languageConstant.getConstant('DatePicker.Months.May'),\r\n            June: $.cdh.languageConstant.getConstant('DatePicker.Months.June'),\r\n            July: $.cdh.languageConstant.getConstant('DatePicker.Months.July'),\r\n            August: $.cdh.languageConstant.getConstant('DatePicker.Months.August'),\r\n            September: $.cdh.languageConstant.getConstant('DatePicker.Months.September'),\r\n            October: $.cdh.languageConstant.getConstant('DatePicker.Months.October'),\r\n            November: $.cdh.languageConstant.getConstant('DatePicker.Months.November'),\r\n            December: $.cdh.languageConstant.getConstant('DatePicker.Months.December'),\r\n        }\r\n        const weekDaysLabel = {\r\n            Sunday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Sunday'),\r\n            Monday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Monday'),\r\n            Tuesday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Tuesday'),\r\n            Wednesday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Wednesday'),\r\n            Thursday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Thursday'),\r\n            Friday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Friday'),\r\n            Saturday: $.cdh.languageConstant.getConstant('DatePicker.Week-Days.Saturday'),\r\n        }\r\n\r\n        const weekDaysHoverLabel = {\r\n            Sunday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Sunday'),\r\n            Monday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Monday'),\r\n            Tuesday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Tuesday'),\r\n            Wednesday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Wednesday'),\r\n            Thursday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Thursday'),\r\n            Friday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Friday'),\r\n            Saturday: $.cdh.languageConstant.getConstant('DatePicker.WeekDays-FullName.Saturday'),\r\n        }\r\n\r\n        const selectLabels = {\r\n            SelectYear: $.cdh.languageConstant.getConstant('DatePicker.select-year'),\r\n            SelectMonth: $.cdh.languageConstant.getConstant('DatePicker.select-month'),\r\n            NextMonth: $.cdh.languageConstant.getConstant('DatePicker.next-month'),\r\n            PreviousMonth: $.cdh.languageConstant.getConstant('DatePicker.previous-month')\r\n        }\r\n\r\n        //initialize datepicker\r\n        var options = $.extend(true,\r\n            {\r\n                format: \"mmm d, yyyy\", today: '', close: '', clear: $.cdh.languageConstant.getConstant('DatePicker.Clear'), editable: true, closeOnClear: false,\r\n                monthsFull: [monthsLabel.January, monthsLabel.February, monthsLabel.March, monthsLabel.April, monthsLabel.May, monthsLabel.June, monthsLabel.July, monthsLabel.August, monthsLabel.September, monthsLabel.October, monthsLabel.November, monthsLabel.December],\r\n                weekdaysShort: [weekDaysLabel.Sunday, weekDaysLabel.Monday, weekDaysLabel.Tuesday, weekDaysLabel.Wednesday, weekDaysLabel.Thursday, weekDaysLabel.Friday, weekDaysLabel.Saturday],\r\n                weekdaysFull: [weekDaysHoverLabel.Sunday, weekDaysHoverLabel.Monday, weekDaysHoverLabel.Tuesday, weekDaysHoverLabel.Wednesday, weekDaysHoverLabel.Thursday, weekDaysHoverLabel.Friday, weekDaysHoverLabel.Saturday],\r\n                labelMonthNext: selectLabels.NextMonth,\r\n                labelMonthPrev: selectLabels.PreviousMonth,\r\n                labelMonthSelect: selectLabels.SelectMonth,\r\n                labelYearSelect: selectLabels.SelectYear\r\n            },\r\n            allBindingsAccessor().datepickerOptions);\r\n        const disabledDatepicker = 'disableFields' in bindingContext.$data ? bindingContext.$data.disableFields() : false;\r\n\r\n        var picker = $(element).pickadate(options).pickadate('picker');\r\n        const holder = picker.$root.find('.picker__holder');\r\n        holder.attr('role', 'dialog').attr('aria-modal', 'true');\r\n        \r\n        var labelledBy = picker.$node.attr('aria-labelledby');\r\n        var label = picker.$node.attr('aria-label');\r\n        if (labelledBy) {\r\n            // picker.$node.removeAttr('aria-labelledby');\r\n            holder.attr('aria-labelledby', labelledBy);\r\n        } else if (label) {\r\n            picker.$node.removeAttr('aria-label');\r\n            holder.attr('aria-label', label);\r\n        }\r\n\r\n        // disable manual input for mobile devices\r\n        var readonly = ('ontouchend' in window);\r\n        $(element).prop('readonly', readonly);\r\n        // $(element).attr('aria-readonly', readonly); // possible not necessary (left 'aria-readonly' as 'false' to save our manual input scripts)\r\n\r\n        const adaCompliantAriaLabel = $(element)?.attr('name') || ''\r\n        var openButton = $('<button>', {\r\n            type: 'button',\r\n            class: 'picker__open-button',\r\n            'aria-label': adaCompliantAriaLabel !== '' ? `Open ${adaCompliantAriaLabel} picker` : 'Open calendar',\r\n            text: 'Open calendar',\r\n        });\r\n        openButton.insertAfter($(element));\r\n\r\n        // add the text field for focus on it when datepicker is readonly (to move focus from an another fields)\r\n        if (readonly && $.cdh.isMobile) {\r\n            var focusingInputWrapper = $('<div/>', {\r\n                id: $(element).attr('id') + '_focusing-input-wrapper',\r\n                class: 'datepicker-focusing-input-wrapper'\r\n            });\r\n            var focusingInput = $('<input>', {\r\n                type: 'radio',\r\n                name: $(element).attr('id') + '_focusing-input-wrapper-name',\r\n                id: $(element).attr('id') + '_focusing-input',\r\n                class: 'datepicker-focusing-input',\r\n                tabindex: picker.$node.attr('tabindex')\r\n            });\r\n            focusingInput.appendTo(focusingInputWrapper);\r\n            focusingInputWrapper.insertAfter($(element));\r\n        }\r\n\r\n        // manual input selects fix (datepicker don't set state to 'open' when manual input is enabled. that's why a month and a year selects are generated in disabled state)\r\n        picker.on({\r\n            open: function () {\r\n                if (readonly && $.cdh.isMobile) {\r\n                    focusingInput.focus();\r\n                }\r\n                if ($(element).is(\":disabled\")) {\r\n                    picker.close();\r\n                }\r\n            },\r\n            close: function () {\r\n                $(element).siblings('button').focus();                \r\n            },         \r\n                 \r\n          \r\n            render: function () {\r\n                picker.$holder.find('select.picker__select--month').prop('disabled', false);\r\n                picker.$holder.find('select.picker__select--year').prop('disabled', false);\r\n                makeCalendarAvailable();\r\n                if (disabledDatepicker) {\r\n                    disableCalendarFocusible();\r\n                } else {\r\n                    enableCalendarFocusible();\r\n                }\r\n                \r\n            }\r\n        });\r\n\r\n\r\n\r\n        // NOTE: onClose event doesn't work. that's why we observe picker attributes changes.\r\n        function removeIncorrectInputAttrs() {\r\n            $(element).removeAttr('aria-haspopup').removeAttr('aria-expanded').removeAttr('aria-owns');\r\n        }\r\n\r\n        const pickerObserverConfig = {\r\n            attributes: true,\r\n            childList: false,\r\n            subtree: false\r\n        };\r\n        const pickerObserverCallback = function(mutationsList, observer) {\r\n            for (let i = 0; i < mutationsList.length; i++) {\r\n                const mutation = mutationsList[i];\r\n                if (mutation.type === 'attributes') {\r\n                    if (mutation.attributeName === 'aria-hidden') {\r\n                        removeIncorrectInputAttrs();\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        const pickerObserver = new MutationObserver(pickerObserverCallback);\r\n        pickerObserver.observe(picker.$root.get(0), pickerObserverConfig);\r\n        removeIncorrectInputAttrs();\r\n\r\n\r\n\r\n        function parseDate(date, defaultValue) {\r\n            if (!date) {\r\n                return moment(defaultValue);\r\n            }\r\n\r\n            if (moment.isMoment(date)) {\r\n                return date;\r\n            }\r\n\r\n            let result = moment(date, 'MMM D, YYYY');\r\n            if (result.isValid()) {\r\n                return result;\r\n            }\r\n\r\n            result = moment(date, 'YYYY-MM-DDTHH:mm:ss');\r\n            if (result.isValid()) {\r\n                return result;\r\n            }\r\n\r\n            return moment(date);\r\n        }\r\n        \r\n        function setMin(newMinDate) {\r\n            let newMin = parseDate(newMinDate, 1);\r\n            let min = picker.get('min');\r\n            let minMoment = min ? moment({years: min.year, months: min.month, day: min.date}) : null;\r\n\r\n            if (!minMoment || !newMin.isSame(minMoment)) {\r\n                picker.set('min', newMin.toDate());\r\n            }\r\n\r\n            let selectedDate = ko.unwrap(valueAccessor());\r\n\r\n            // NOTE: WCP-5285 fix.\r\n            // \"new Date(selectedDate).valueOf()\" calculates date with timezone,\r\n            // and returns different value unlinke MomentJS.\r\n            // most notably in dates with big GMT offset. for example, GMT-0700.\r\n            // if (selectedDate && (new Date(selectedDate).valueOf() < newMin.toDate().valueOf()))\r\n            if (selectedDate && (parseDate(selectedDate, 1).toDate().valueOf() < newMin.toDate().valueOf()))\r\n                valueAccessor()('');\r\n        }\r\n\r\n        function setMax(newMaxDate) {\r\n            let newMax = parseDate(newMaxDate, 4200000000000);\r\n            let max = picker.get('max');\r\n            let maxMoment = max ? moment({years: max.year, months: max.month, day: max.date}) : null;\r\n\r\n            if (!maxMoment || !newMax.isSame(maxMoment)) {\r\n                picker.set('max', newMax.toDate());\r\n            }\r\n\r\n            let selectedDate = ko.unwrap(valueAccessor());\r\n\r\n            // NOTE: WCP-5285 fix.\r\n            // \"new Date(selectedDate).valueOf()\" calculates date with timezone,\r\n            // and returns different value unlinke MomentJS.\r\n            // most notably in dates with big GMT offset. for example, GMT-0700.\r\n            // if (selectedDate && (new Date(selectedDate).valueOf() > newMax.toDate().valueOf()))\r\n            if (selectedDate && (parseDate(selectedDate, 1).toDate().valueOf() > newMax.toDate().valueOf()))\r\n                valueAccessor()('');\r\n        }\r\n        \r\n        let bindingMinDate = allBindingsAccessor().minDate;\r\n        if (ko.isObservable(bindingMinDate)) {\r\n            if (bindingMinDate()) {\r\n                setMin(bindingMinDate());\r\n            }\r\n            bindingMinDate.subscribe(setMin);\r\n        } else if(bindingMinDate) {\r\n            setMin(bindingMinDate);\r\n        }\r\n\r\n        let bindingMaxDate = allBindingsAccessor().maxDate;\r\n        if (ko.isObservable(bindingMaxDate)) {\r\n            if (bindingMaxDate()) {\r\n                setMax(bindingMaxDate());\r\n            }\r\n            bindingMaxDate.subscribe(setMax);\r\n        } else if(bindingMaxDate) {\r\n            setMax(bindingMaxDate);\r\n        }\r\n\r\n        var dateFormat = \"MMM D, YYYY\";\r\n        var constInvalidDate = 'Invalid date';\r\n\r\n        if (typeof ko.unwrap(valueAccessor()) != \"string\") {\r\n            var value = moment(ko.unwrap(valueAccessor())).format(dateFormat);\r\n            if (value != constInvalidDate) {\r\n                valueAccessor(value);\r\n            }\r\n        }\r\n\r\n        // onchange event handler\r\n        function onChangeHandler() {\r\n            var pickerValue = picker.get();\r\n            var possibleObservable = valueAccessor();\r\n\r\n            if (!pickerValue) {\r\n                return;\r\n            }\r\n\r\n            var pickerValueCorrected = correctDate(pickerValue);\r\n            if (pickerValueCorrected === false) {\r\n                picker.clear();\r\n                return;\r\n            }\r\n\r\n            let newMoment = moment(pickerValueCorrected.month + '/' + pickerValueCorrected.day + '/' + pickerValueCorrected.year);\r\n            let setDate = new Date(newMoment);\r\n            // correct time\r\n            setDate.setHours(0);\r\n            setDate.setMinutes(0);\r\n            setDate.setSeconds(0);\r\n            setDate.setMilliseconds(0);\r\n            \r\n            if (bindingMinDate) {\r\n                let value = ko.isObservable(bindingMinDate) && bindingMinDate() ? bindingMinDate() : bindingMinDate;\r\n               \r\n                let minDate = moment.isMoment(value) ? value.toDate() : new Date(value);\r\n                minDate.setHours(0);\r\n                minDate.setMinutes(0);\r\n                minDate.setSeconds(0);\r\n                minDate.setMilliseconds(0);\r\n\r\n                if (setDate.valueOf() < minDate.valueOf()){\r\n                    picker.clear();\r\n                    return;\r\n                }\r\n            }\r\n            if (bindingMaxDate) {\r\n                let value = ko.isObservable(bindingMaxDate) && bindingMaxDate() ? bindingMaxDate() : bindingMaxDate;\r\n\r\n                let maxDate = moment.isMoment(value) ? value.toDate() : new Date(value);\r\n                maxDate.setHours(23);\r\n                maxDate.setMinutes(59);\r\n                maxDate.setSeconds(59);\r\n                maxDate.setMilliseconds(999);\r\n\r\n                if (setDate.valueOf() > maxDate.valueOf()) {\r\n                    picker.clear();\r\n                    return;\r\n                }\r\n            }\r\n            \r\n            var formatedDate = newMoment.format(\"MMM D, YYYY\");\r\n\r\n            if (pickerValue == formatedDate) {\r\n                possibleObservable(pickerValue);\r\n                if (hidePicker) {\r\n                    picker.set('select', pickerValue);\r\n                    picker.set('highlight', pickerValue);\r\n                    disableCalendarFocusible();\r\n                }\r\n                return;\r\n            }\r\n\r\n            if (ko.isWritableObservable(possibleObservable)) {\r\n                possibleObservable(''); // Fixes the bug when the current value is equal to the previous but in other format\r\n                //possibleObservable(pickerValue);\r\n                possibleObservable(formatedDate);\r\n            }\r\n        }\r\n\r\n        var hidePicker = true;\r\n        var timeoutDelay = 300;\r\n\r\n        //handle the field blur\r\n        ko.utils.registerEventHandler(element, 'blur', function () {\r\n            onChangeHandler();\r\n            disableCalendarFocusible();\r\n            hidePicker = true;\r\n            picker.close();\r\n        });\r\n\r\n        ko.utils.registerEventHandler(element, 'change', function() {\r\n            var pickerValue = picker.get();\r\n            var possibleObservable = valueAccessor();\r\n            if (!pickerValue) {\r\n                possibleObservable('');\r\n                return;\r\n            }\r\n        });\r\n\r\n        ko.utils.registerEventHandler(openButton, 'click', function (e) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            elementClick();\r\n        });\r\n\r\n        // element click\r\n        function elementClick() {\r\n            if ('openedPicker' in window) {\r\n                window.openedPicker.close();\r\n            }\r\n            window.openedPicker = picker;\r\n            hidePicker = true;\r\n            if (!picker.get('open')) {\r\n                enableCalendarFocusible();\r\n                setFocusInCalendar();\r\n                picker.open(false);\r\n            }\r\n        }\r\n\r\n        function calendarMovingHandler(e) {\r\n            const availableKeyCodes = [37, 38, 39, 40];\r\n            if (!availableKeyCodes.includes(e.keyCode)) {\r\n                return;\r\n            }\r\n\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            const $nextDay = getNextFieldForMovingCalendar(e.target, e.keyCode);\r\n            if ($nextDay) {\r\n                const $prevDay = $(e.target);\r\n                $prevDay.attr('tabindex', '-1');\r\n                $prevDay.removeAttr('aria-selected');\r\n                $prevDay.removeClass('picker__day--highlighted');\r\n\r\n                $nextDay.attr('tabindex', '0');\r\n                $prevDay.attr('aria-selected', 'true');\r\n                $nextDay.addClass('picker__day--highlighted');\r\n\r\n                $nextDay.focus();\r\n            }\r\n        }\r\n\r\n        function getNextFieldForMovingCalendar(currentDay, buttonCode) {\r\n            const $td = $(currentDay.closest('td'));\r\n            const $tr = $td.closest('tr');\r\n            const $tbody = $tr.closest('tbody');\r\n            let currentFieldIndex = $td.index();\r\n            let currentRowIndex = $tr.index();\r\n\r\n            if (buttonCode === 37) { // Left\r\n                if (currentFieldIndex === 0) {\r\n                    return;\r\n                }\r\n                currentFieldIndex--;\r\n            } else if (buttonCode === 39) { // Right\r\n                if (currentFieldIndex === 6) {\r\n                    return;\r\n                }\r\n                currentFieldIndex++;\r\n            } else if (buttonCode === 38) { // Top\r\n                if (currentRowIndex === 0) {\r\n                    return;\r\n                }\r\n                currentRowIndex--;\r\n            } else if (buttonCode === 40) { // Bottom\r\n                if (currentRowIndex === 6) {\r\n                    return;\r\n                }\r\n                currentRowIndex++;\r\n            }\r\n            const $nextDay = $tbody.find('tr').eq(currentRowIndex).find('.picker__day').eq(currentFieldIndex);\r\n\r\n            if ($nextDay.hasClass('picker__day--disabled')) {\r\n                return;\r\n            }\r\n\r\n            return $nextDay\r\n        }\r\n\r\n        function makeCalendarAvailable() {\r\n            const allDays = picker.$root[0].querySelectorAll('.picker__day');\r\n            const prevButton = picker.$root[0].querySelector('.picker__nav--prev');\r\n            const nextButton = picker.$root[0].querySelector('.picker__nav--next');\r\n            const clearButton = picker.$root[0].querySelector('.picker__button--clear');\r\n            const activedescendantElements = picker.$root[0].querySelectorAll('[aria-activedescendant]');\r\n            const yearSelect = picker.$root[0].querySelector(\".picker__select--year\");\r\n            const monthSelect = picker.$root[0].querySelector(\".picker__select--month\");\r\n\r\n            activedescendantElements.forEach(function (el) {\r\n                el.removeAttribute('aria-activedescendant');\r\n            });\r\n\r\n            for (let i = 0; i < allDays.length; i++) {\r\n                allDays[i].setAttribute('role', 'button');\r\n                $(allDays[i]).parent().removeAttr('role');\r\n                allDays[i].setAttribute('tabindex', '-1');\r\n                allDays[i].addEventListener('keydown', calendarMovingHandler);\r\n            }\r\n\r\n            [monthSelect, yearSelect].forEach(function (el) {\r\n                if (!el) {\r\n                    return;\r\n                }\r\n                el.addEventListener('keydown', function (e) {\r\n                    if (e.keyCode === 13 || e.keyCode === 32) {\r\n                        e.stopPropagation();\r\n                    }\r\n                });\r\n            });\r\n\r\n            [clearButton, prevButton, nextButton].forEach(function (el) {\r\n                el.addEventListener('keydown', function (e) {\r\n                    if (e.keyCode === 13 || e.keyCode === 32) {\r\n                        e.preventDefault();\r\n                        e.stopPropagation();\r\n                        const selector = '.' + e.target.classList[0];\r\n                        setTimeout(function () {\r\n                            picker.$root.find(selector).focus();\r\n                        }, 200);\r\n                        e.target.click();\r\n                    }\r\n                });\r\n            });\r\n\r\n            allDays.forEach(function(el) {\r\n                el.addEventListener('keydown', function (e) {\r\n                    if (e.keyCode === 13 || e.keyCode === 32) {\r\n                        e.preventDefault();\r\n                        e.stopPropagation();\r\n                        e.target.click();\r\n                        disableCalendarFocusible();\r\n                    }\r\n                });\r\n            });\r\n\r\n            clearButton.addEventListener('keydown', function (e) {\r\n                if (e.keyCode === 9 && e.shiftKey === false) {\r\n                    e.preventDefault();\r\n                    prevButton.focus();\r\n                }                 \r\n            });\r\n\r\n            prevButton.addEventListener('keydown', function (e) {\r\n                if (e.keyCode === 9 && e.shiftKey === true) {\r\n                    e.preventDefault();\r\n                    clearButton.focus();\r\n                }               \r\n            });\r\n           \r\n            clearButton.removeAttribute('disabled');\r\n            clearButton.addEventListener('click', function (e) {\r\n                picker.$root.find('.picker__button--clear').removeAttr('disabled');\r\n            });\r\n        }\r\n\r\n        function setFocusInCalendar() {\r\n            const focusibleElement = picker.$root[0].querySelector(\".picker__nav--prev\");\r\n            \r\n            if (focusibleElement) {\r\n                focusibleElement.focus();\r\n            }\r\n        }\r\n\r\n        function enableCalendarFocusible() {\r\n            const prevButton = picker.$root[0].querySelector(\".picker__nav--prev\");\r\n            const nextButton = picker.$root[0].querySelector(\".picker__nav--next\");\r\n            const selectedDay = picker.$root[0].querySelector(\".picker__day--highlighted\");\r\n            const clearButton = picker.$root[0].querySelector(\".picker__button--clear\");\r\n            const yearSelect = picker.$root[0].querySelector(\".picker__select--year\");\r\n            const monthSelect = picker.$root[0].querySelector(\".picker__select--month\");\r\n\r\n            if (prevButton) {\r\n                if (prevButton.classList.contains('picker__nav--disabled')) {\r\n                    prevButton.setAttribute('aria-disabled', 'true');\r\n                } else {\r\n                    prevButton.setAttribute('tabindex', '0');\r\n                }\r\n            }\r\n            if (nextButton) {\r\n                if (nextButton.classList.contains('picker__nav--disabled')) {\r\n                    nextButton.setAttribute('aria-disabled', 'true');\r\n                } else {\r\n                    nextButton.setAttribute('tabindex', '0');\r\n                }\r\n            }\r\n            if (selectedDay) {\r\n                selectedDay.setAttribute('tabindex', '0');\r\n            }\r\n            if (clearButton) {\r\n                clearButton.setAttribute('tabindex', '0');\r\n            }\r\n            if (yearSelect) {\r\n                if (prevButton) {\r\n                    $(yearSelect).before(prevButton);\r\n                }\r\n                yearSelect.setAttribute('tabindex', '0');\r\n            }\r\n            if (monthSelect) {\r\n                monthSelect.setAttribute('tabindex', '0');\r\n            }\r\n        }\r\n\r\n        function disableCalendarFocusible() {\r\n            const prevButton = picker.$root[0].querySelector(\".picker__nav--prev\");\r\n            const nextButton = picker.$root[0].querySelector(\".picker__nav--next\");\r\n            const selectedDay = picker.$root[0].querySelector(\".picker__day--highlighted\");\r\n            const clearButton = picker.$root[0].querySelector(\".picker__button--clear\");\r\n            const yearSelect = picker.$root[0].querySelector(\".picker__select--year\");\r\n            const monthSelect = picker.$root[0].querySelector(\".picker__select--month\");\r\n            \r\n            if (prevButton) {\r\n                prevButton.setAttribute('tabindex', '-1');\r\n            }\r\n            if (nextButton) {\r\n                nextButton.setAttribute('tabindex', '-1');\r\n            }\r\n            if (selectedDay) {\r\n                selectedDay.setAttribute('tabindex', '-1');\r\n            }\r\n            if (clearButton) {\r\n                clearButton.setAttribute('tabindex', '-1');\r\n            }\r\n            if (yearSelect) {\r\n                yearSelect.setAttribute('tabindex', '-1');\r\n            }\r\n            if (monthSelect) {\r\n                monthSelect.setAttribute('tabindex', '-1');\r\n            }\r\n        }\r\n\r\n        //handle the document click\r\n        $(document).on('click touchend', function () {\r\n            hidePicker = true;\r\n            picker.close();\r\n            disableCalendarFocusible();\r\n        });\r\n        picker.$holder.on('keydown', function (e) {\r\n            if (e.keyCode == 27) {\r\n                hidePicker = true;\r\n                openButton.focus();\r\n                picker.close();\r\n                disableCalendarFocusible();\r\n            }\r\n        });\r\n\r\n        //handle the picker holder click\r\n        picker.$holder.off('mousedown');\r\n        picker.$holder.on('mousedown touchend', function (e) {\r\n            hidePicker = false;\r\n\r\n            // IE hide picker fix (IE don't hide calendar after date was selected)\r\n            var target = $(e.target);\r\n            var possibleObservable = valueAccessor();\r\n            if (target.hasClass('picker__day') && !target.hasClass('picker__day--disabled')) {\r\n                setTimeout(function () {\r\n                    hidePicker = true;\r\n                    picker.close();\r\n                    possibleObservable(picker.$node.val());\r\n                    disableCalendarFocusible();\r\n                }, timeoutDelay);\r\n            }\r\n            if (target.hasClass('picker__button--clear')) {\r\n                setTimeout(function() {\r\n                    possibleObservable(picker.$node.val());\r\n                }, timeoutDelay);\r\n            }\r\n\r\n            e.stopPropagation();\r\n            if (!target.hasClass('picker__select--month') &&\r\n                !target.hasClass('picker__select--year') &&\r\n                !target.hasClass('picker__nav--prev') &&\r\n                !target.hasClass('picker__nav--next') &&\r\n                !target.hasClass('picker__button--clear')) {\r\n                setTimeout(function() {\r\n                    element.focus();\r\n                }, timeoutDelay);\r\n            }\r\n        });\r\n\r\n        //handle disposal (if KO removes by the template binding)\r\n        ko.utils.domNodeDisposal.addDisposeCallback(element, picker.stop);\r\n    },\r\n\r\n    //update the control when the view model changes\r\n    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n        var picker = $(element).pickadate('picker');\r\n        var date = ko.unwrap(valueAccessor());\r\n        date = $.cdh.helper.removeMillisecondsFromDate(date);\r\n\r\n        var pickerValueCorrected = correctDate(date);\r\n        if (pickerValueCorrected === false) {\r\n            var parseServerFormat = function(date, format) {\r\n                if (moment(date, format).format(format) == date) {\r\n                    return correctDate(moment(date, format).format(\"MMM D, YYYY\"));\r\n                }\r\n\r\n                return false;\r\n            };\r\n\r\n            pickerValueCorrected = parseServerFormat(date, 'YYYY-MM-DDTHH:mm:ss');\r\n            if (!pickerValueCorrected)\r\n                pickerValueCorrected = parseServerFormat(date, 'YYYY-MM-DDTHH:mm:ssZ');\r\n\r\n            //Check service date format\r\n            \r\n            if (pickerValueCorrected === false) {\r\n                picker.clear();\r\n                return;\r\n            }\r\n        }\r\n\r\n        var newMoment = moment(pickerValueCorrected.month + '/' + pickerValueCorrected.day + '/' + pickerValueCorrected.year);\r\n        var newValue = newMoment.isValid() ? newMoment.format(\"MMM D, YYYY\") : '';\r\n        var currentValue = picker.get();\r\n\r\n        if (newValue == currentValue) {\r\n            return;\r\n        }\r\n        if (!newValue) {\r\n            picker.clear();\r\n            return;\r\n        }\r\n\r\n        const openButton = element.parentNode.querySelector('.picker__open-button');\r\n        if (openButton && 'disableFields' in bindingContext.$data) {\r\n            openButton.disabled = bindingContext.$data.disableFields();\r\n        }        \r\n\r\n        picker.set('select', newValue);\r\n        picker.set('highlight', newValue);\r\n    }\r\n};\r\n\r\nko.bindingHandlers.date = {\r\n    update: function (element, valueAccessor) {\r\n        var value = ko.unwrap(valueAccessor());\r\n        var text = value != null ? moment(value).format(\"MMM D, YYYY\") : '';\r\n        ko.utils.setTextContent(element, text);\r\n    }\r\n}\r\n\r\nko.bindingHandlers.dateFormatter = {\r\n    update: function (element, valueAccessor) {\r\n        var binding = ko.unwrap(valueAccessor());\r\n        var value = ko.unwrap(binding.date);\r\n        var dt = value != null ? moment(value).format(\"MMM D, YYYY\") : '';\r\n        var text = binding.formatter(dt);\r\n        ko.utils.setHtml(element, text);\r\n    }\r\n}\r\n\r\nko.bindingHandlers.dateFormat = {\r\n    update: function (element, valueAccessor) {\r\n        let binding = ko.unwrap(valueAccessor());\r\n        let value = ko.unwrap(binding.date);\r\n        let momentValue = value instanceof moment ? value : moment(value);\r\n        let format = ko.unwrap(binding.format);\r\n        let text = value ? momentValue.format(format || \"MMM D, YYYY\") : '';\r\n        ko.utils.setTextContent(element, text);\r\n    }\r\n};\r\n\r\nko.bindingHandlers.datetime = {\r\n    update: function (element, valueAccessor) {\r\n        var value = ko.unwrap(valueAccessor());\r\n        var datetime = value != null\r\n            ? moment(value).format(\"[<span>]MMM D, YYYY[</span> <span>]h:mm a[</span>]\")\r\n            : '';\r\n        $(element).html(datetime);\r\n    }\r\n}\r\n\r\nko.bindingHandlers.time = {\r\n    update: function (element, valueAccessor) {\r\n        var value = ko.unwrap(valueAccessor());\r\n        var text = value != null ? moment(value).format(\"h:mm a\") : '';\r\n        ko.utils.setTextContent(element, text);\r\n    }\r\n}\r\n\r\nko.bindingHandlers.accountPlanDatesRange = {\r\n    update: function(element, valueAccessor) {\r\n        var obj = ko.unwrap(valueAccessor());\r\n        var accountType = obj.AccountType;\r\n        var start = obj.PlanStartDate;\r\n        var end = obj.PlanEndDate;\r\n        var showDeadlines = obj.ShowDeadlines;\r\n\r\n        if (accountType == $.cdh.enums.accountType.transit || !showDeadlines) {\r\n            ko.utils.setTextContent(element, \"\");\r\n            return;\r\n        }\r\n\r\n        var text = '(' + moment(start).format(\"MM/DD/YYYY\") + '-' + moment(end).format(\"MM/DD/YYYY\") + ')';\r\n        ko.utils.setTextContent(element, text);\r\n    }\r\n}","(function ($, ko) {\r\n    \r\n    let urlComponentLoader = {\r\n        loadTemplate: function(name, templateConfig, callback) {\r\n            if (templateConfig.url) {\r\n                // Uses jQuery's ajax facility to load the markup from a file\r\n                let version = $.cdh.version;\r\n                let fullUrl = '/components/' + templateConfig.url + '?v=' + version;\r\n                $.get(fullUrl, function(markupString) {\r\n                    // We need an array of DOM nodes, not a string.\r\n                    // We can use the default loader to convert to the\r\n                    // required format.\r\n                    ko.components.defaultLoader.loadTemplate(name, markupString, callback);\r\n                });\r\n            } else {\r\n                // Unrecognized config format. Let another loader handle it.\r\n                callback(null);\r\n            }\r\n        },\r\n        loadViewModel: function(name, viewModelConfig, callback) {\r\n            if (viewModelConfig && typeof viewModelConfig.createViewModel === 'function') {\r\n                let currentCreateViewModel = viewModelConfig.createViewModel;\r\n                viewModelConfig.createViewModel = function (params, componentInfo) {\r\n                    let widgetInfo = {\r\n                        updateHeight: updateContainerHeight(componentInfo.element),\r\n                        remove: function () {\r\n                            $.cdh.helper.removeWidget($(componentInfo.element));\r\n                        }\r\n                    };\r\n                    return currentCreateViewModel(params, componentInfo, widgetInfo);\r\n                };\r\n                ko.components.defaultLoader.loadViewModel(name, viewModelConfig, callback);\r\n            } else {\r\n                callback(null);\r\n            }\r\n        }\r\n    };\r\n\r\n    ko.components.loaders.unshift(urlComponentLoader);\r\n    \r\n}(jQuery, ko));","(function ($, ko) {\r\n    /* Knockout line-grid component.\r\n    Usage:\r\n    <line-grid params=\"data: [ko.observable | ko.observableArray], pageSize: [number]\">\r\n        ... inline template which will be repeated in <div class=\"claims-bl_sheet\"><div> block.\r\n    </line-grid>\r\n    */\r\n\r\n    ko.components.register('line-grid', {\r\n        template: '<!-- ko if: !isEmpty() -->' +\r\n            '<div class=\"claims-bl_sheet\" data-bind=\"foreach: displayedData\">' +\r\n            '<!-- ko template: { nodes: $componentTemplateNodes, data: $data } --><!-- /ko -->' +\r\n            '</div>' +\r\n            '<div class=\"pager\">' +\r\n            `<div class=\"pager_num\"><p data-bind=\"translationHandler: 'filter.Page'\">Page</p> <strong data-bind=\"text: currentPageIndex() + 1\"></strong> <p data-bind=\"translationHandler: 'filter.of'\">of</p> <strong data-bind=\"text: lastPageIndex() + 1\"></strong></div>` +\r\n            '<button type=\"button\" class=\"pager_prev\" aria-label=\"Previous page\" data-bind=\"click: currentPageIndex() > 0 ? prevPage : noop, css: { inactive: currentPageIndex() <= 0 }, attr: { disabled: currentPageIndex() <= 0 }\"></button>' +\r\n            '<button type=\"button\" class=\"pager_next\" aria-label=\"Next page\" data-bind=\"click: currentPageIndex() < lastPageIndex() ? nextPage : noop, css: { inactive: currentPageIndex() >= lastPageIndex() }, attr: { disabled: currentPageIndex() >= lastPageIndex() }\"></button>' +\r\n            '<div class=\"pager_all\"><a href=\"\" data-bind=\"click: showAll, visible: showAllVisible, translationHandler:\\'link.show-all\\'\">show all</a></div>' +\r\n            '</div>' +\r\n            '<!-- /ko -->' +\r\n            '<!-- ko ifnot: !isEmpty() -->' +\r\n            '<div class=\"b-empty-list\">' +\r\n            '<div class=\"b-empty-list-msg\" data-bind=\"text: message\"></div>' +\r\n            '</div>' +\r\n            '<!-- /ko -->',\r\n        viewModel: function (params) {\r\n            var defaults = {\r\n                pageSize: 4,\r\n                data: ko.observable([]),\r\n                isDataLoading: ko.observable(true),\r\n                displayedDataSubscription: function() {},\r\n                makeAvailableItems: function() {}\r\n            };\r\n\r\n            var o = $.extend(true, defaults, params);\r\n            var pageSize = ko.observable(o.pageSize);\r\n\r\n            if (o.currentPageIndex) {\r\n                this.currentPageIndex = $.isFunction(o.currentPageIndex) ? o.currentPageIndex : ko.observable(o.currentPageIndex);\r\n            } else {\r\n                this.currentPageIndex = ko.observable(0);\r\n            }\r\n\r\n            this.displayedData = ko.computed(function () {\r\n                var skip = this.currentPageIndex() * pageSize();\r\n                return o.data().slice(skip, skip + pageSize());\r\n            }, this);\r\n\r\n            this.isEmpty = ko.computed(function () {\r\n                return o.isDataLoading() === false && o.data().length === 0;\r\n            }, this);\r\n\r\n            this.message = o.messageIfEmpty ? o.messageIfEmpty : $.cdh.languageConstant.getConstant('extension-validation.no-data');\r\n\r\n            o.displayedDataSubscription(this.displayedData());\r\n            this.displayedData.subscribe(o.displayedDataSubscription);\r\n\r\n            this.showAllVisible = ko.pureComputed(function () {\r\n                return !$.cdh.helper.ieBrowser() && this.lastPageIndex() > 0;\r\n            }, this);\r\n\r\n            this.lastPageIndex = ko.pureComputed(function () {\r\n                if (this.isEmpty())\r\n                    return 0;\r\n\r\n                return Math.ceil((o.data().length / pageSize()) || 1) - 1;\r\n            }, this);\r\n\r\n            this.lastPageIndex.subscribe(function (lastIndex) {\r\n                if (this.currentPageIndex() > lastIndex)\r\n                    this.currentPageIndex(lastIndex);\r\n            }, this);\r\n\r\n            this.nextPage = function () {\r\n                this.currentPageIndex(this.currentPageIndex() + 1);\r\n                o.makeAvailableItems(true);\r\n            };\r\n\r\n            this.prevPage = function () {\r\n                this.currentPageIndex(this.currentPageIndex() - 1);\r\n                o.makeAvailableItems(true);\r\n            };\r\n\r\n            this.showAll = function () {\r\n                pageSize(1000000);\r\n                o.makeAvailableItems(true);\r\n            };\r\n\r\n            this.noop = function () {\r\n                o.makeAvailableItems(true);\r\n            };\r\n\r\n            o.makeAvailableItems();\r\n\r\n            if (params.initialized != null)\r\n                params.initialized(this);\r\n        }\r\n    });\r\n\r\n    ko.components.register('load-status', {\r\n        template: { element: 'load-status-template' },\r\n        viewModel: function (params) {\r\n            $.extend(true, this, params );\r\n        }\r\n    });\r\n\r\n    ko.components.register('validation-status', {\r\n        template:\r\n            \"<div class='popup-form_error-title' role='alert' data-bind='attr: { \\\"aria-live\\\": hasErrors() ? \\\"assertive\\\" : \\\"off\\\" }'>\" +\r\n            \"<!-- ko if: hasErrors -->\" +\r\n            \"<span data-bind='text: requiredMessage'>\" +\r\n            \"<br data-bind='visible: additionMessage' /><em data-bind='visible: additionMessage, text: additionMessage'></em>\" +\r\n            \"</span>\" +\r\n            \"<!-- /ko -->\" +\r\n            \"</div>\",\r\n        viewModel: function (params) {\r\n            $.extend(true, this, $.extend(true, params.validation, {\r\n                invalidRequiredFields: ko.observable([]),\r\n                invalidRequiredFieldsLabelText: ko.observable(''),\r\n                additionMessage: ko.observable(params.additionMessage ? params.additionMessage() : ''),\r\n                toBeTranslated: ko.observable(params.translation ? params.translation() : true)\r\n            }));\r\n\r\n            this.requiredMessage = ko.computed(() => {\r\n                if (this.toBeTranslated()) {\r\n                    return $.cdh.languageConstant.getConstant('messages.fill-required-fields');\r\n                }\r\n                else {\r\n                    return $.cdh.languageConstant.getResource('messages.fill-required-fields', 'en');\r\n                }\r\n            });\r\n\r\n            this.errorsList.subscribe((v) => {\r\n                setTimeout(() => {\r\n                    const $errorTitle = $('.popup-form_error-title');\r\n                    let $form = $errorTitle.closest('form');\r\n                    if (!$form.length) {\r\n                        $form = $errorTitle.closest('.popup-form');\r\n                    }\r\n                    const $inputs = $form.find('input, textarea, select');\r\n                    const labelMaxLen = 25;\r\n                    const truncate = (str) => str.substring(0, labelMaxLen) + (str.length > labelMaxLen ? '...' : '');\r\n                    const invalidRequiredFields = $inputs.toArray().map((input) => {\r\n                        const $input = $(input);\r\n                        const labelId = $input.attr('aria-labelledby');\r\n                        const errorId = $input.attr('aria-describedby');\r\n                        const label = labelId ? $('#' + labelId).text().trim() : ($input.attr('aria-label') || null);\r\n                        const isVisuallyRequired = label && label.endsWith('*');\r\n                        const isRequired = $input.is('[required]') || isVisuallyRequired;\r\n                        const isInvalid = errorId ? $('#' + errorId.split(' ')[0]).find('.popup-row_inp-error').length > 0 : false;\r\n\r\n                        if (isRequired && isInvalid) {\r\n                            if (isVisuallyRequired) {\r\n                                return truncate(label.slice(0, -1).trim());\r\n                            }\r\n\r\n                            return truncate(label);\r\n                        }\r\n\r\n                        // TODO: handle non-required errors?\r\n\r\n                        return null;\r\n\r\n                    }).filter(Boolean);\r\n\r\n                    this.invalidRequiredFields(invalidRequiredFields);\r\n                    this.invalidRequiredFieldsLabelText(this.invalidRequiredFields().join(', '));\r\n\r\n                }, 10);\r\n            });\r\n\r\n        }\r\n    });\r\n\r\n\r\n    ko.components.register('validation-status2', {\r\n        template:\r\n            \"<div class='popup-form_error-title' role='alert' data-bind='attr: { \\\"aria-live\\\": validation.hasErrors() ? \\\"assertive\\\" : \\\"off\\\" }'>\" +\r\n            \"<!-- ko if: validation.hasErrors -->\" +\r\n            \"<span data-bind='text: message'></span>\" +\r\n            \"<!-- /ko -->\" +\r\n            \"</div>\",\r\n        viewModel: function (params) {\r\n            var message = $.cdh.languageConstant.getConstant('extension-validation.please-correct-highlighted');\r\n            if (params.message) {\r\n                message = params.message;\r\n            }\r\n            $.extend(true, this, { validation: params.validation, message: message });\r\n        }\r\n    });\r\n\r\n\r\n    ko.components.register('validation-status3', {\r\n        template:\r\n            \"<div class='popup-form_error-title' role='alert' data-bind='attr: { \\\"aria-live\\\": hasErrors() ? \\\"assertive\\\" : \\\"off\\\" }'>\" +\r\n            \"<!-- ko if: hasErrors -->\" +\r\n            \"<span>Enter Zip code to see the results<em data-bind='visible: invalidRequiredFieldsLabelText'>: </em><em data-bind='text: invalidRequiredFieldsLabelText'></em>\" +\r\n            \"<br data-bind='visible: additionMessage' /><em data-bind='visible: additionMessage, text: additionMessage'></em>\" +\r\n            \"</span>\" +\r\n            \"<!-- /ko -->\" +\r\n            \"</div>\",\r\n        viewModel: function (params) {\r\n            $.extend(true, this, $.extend(true, params.validation, {\r\n                invalidRequiredFields: ko.observable([]),\r\n                invalidRequiredFieldsLabelText: ko.observable(''),\r\n                additionMessage: ko.observable(params.additionMessage ? params.additionMessage() : '')\r\n            }));\r\n\r\n            this.errorsList.subscribe((v) => {\r\n                setTimeout(() => {\r\n                    const $errorTitle = $('.popup-form_error-title');\r\n                    let $form = $errorTitle.closest('form');\r\n                    if (!$form.length) {\r\n                        $form = $errorTitle.closest('.popup-form');\r\n                    }\r\n                    const $inputs = $form.find('input, textarea, select');\r\n                    const labelMaxLen = 25;\r\n                    const truncate = (str) => str.substring(0, labelMaxLen) + (str.length > labelMaxLen ? '...' : '');\r\n                    const invalidRequiredFields = $inputs.toArray().map((input) => {\r\n                        const $input = $(input);\r\n                        const labelId = $input.attr('aria-labelledby');\r\n                        const errorId = $input.attr('aria-describedby');\r\n                        const label = labelId ? $('#' + labelId).text().trim() : ($input.attr('aria-label') || null);\r\n                        const isVisuallyRequired = label && label.endsWith('*');\r\n                        const isRequired = $input.is('[required]') || isVisuallyRequired;\r\n                        const isInvalid = errorId ? $('#' + errorId.split(' ')[0]).find('.popup-row_inp-error').length > 0 : false;\r\n\r\n                        if (isRequired && isInvalid) {\r\n                            if (isVisuallyRequired) {\r\n                                return truncate(label.slice(0, -1).trim());\r\n                            }\r\n\r\n                            return truncate(label);\r\n                        }\r\n\r\n                        // TODO: handle non-required errors?\r\n\r\n                        return null;\r\n\r\n                    }).filter(Boolean);\r\n\r\n                    this.invalidRequiredFields(invalidRequiredFields);\r\n                    this.invalidRequiredFieldsLabelText(this.invalidRequiredFields().join(', '));\r\n                }, 10);\r\n            });\r\n\r\n        }\r\n    });\r\n\r\n\r\n    ko.components.register('validation-message-row', {\r\n        template:\r\n            \"<!-- ko if: validationActivated() && !isValid() -->\" +\r\n            \"<div class='popup-row_inp-error clearfix' data-bind='css: cssClass'>\" +\r\n            \"<div  aria-live='polite'>\" + \"</div>\" +\r\n            \"<span data-bind='text: error'></span>\" +\r\n            \"</div>\" +\r\n            \"<!-- /ko -->\",\r\n        viewModel: function (params) {\r\n            this.validationActivated = params.validation.activated;\r\n            this.isValid = params.messageFor.isValid;\r\n            this.error = params.messageFor.error;\r\n            if (params.cssClass) {\r\n                this.cssClass = params.cssClass;\r\n            } else {\r\n                this.cssClass = '';\r\n            }\r\n        }\r\n    });\r\n\r\n    ko.components.register('validation-message-box', {\r\n        template:\r\n            \"<!-- ko if: validationActivated() && !isValid() -->\" +\r\n            \"<div class='popup-row_inp-error box clearfix'>\" +\r\n            \"<span data-bind='text: error'></span>\" +\r\n            \"</div>\" +\r\n            \"<!-- /ko -->\",\r\n        viewModel: function (params) {\r\n            this.validationActivated = params.validation.activated;\r\n            this.isValid = params.messageFor.isValid;\r\n            this.error = params.messageFor.error;\r\n        }\r\n    });\r\n\r\n    ko.components.register('loading-error', {\r\n        template:\r\n            \"<div class='popup-form_error-title' role='alert' data-bind='attr: { \\\"aria-live\\\": (!isEmployee || !maintenance()) && error() ? \\\"assertive\\\" : \\\"off\\\" }'>\" +\r\n            \"<!-- ko if: (!isEmployee || !maintenance()) && error() -->\" +\r\n            \"<p><span aria-live='assertive' data-bind='translationHandler:\\\"messages.api-fail-error\\\"'>We encountered an error.</span></p>\" +\r\n            \"<p><span data-bind='html: errorMessage()' aria-live='assertive'></span></p>\" +\r\n            \"<!-- /ko -->\" +\r\n            \"</div>\",\r\n        viewModel: function (params) {\r\n\r\n            this.error = params.request.error;\r\n            this.errorMessage = ko.pureComputed(function () {\r\n                const errorData = this.error() ? decodeURIComponent(this.error().replace(/\\+/g, ' ')) : null;\r\n                if (params.htmlDecode !== undefined && params.htmlDecode){\r\n                    return $.cdh.helper.htmlDecode (errorData);\r\n                }\r\n                return errorData;\r\n            }, this);\r\n\r\n            this.maintenance = $.cdh.global.maintenance;\r\n            this.isEmployee = $.cdh.user.isEmployee;\r\n        }\r\n    });\r\n\r\n    ko.components.register('user-impersonated-error', {\r\n        template:\r\n            \"<div class='popup-form_error-title' role='alert' data-bind='attr: { \\\"aria-live\\\": $.cdh.user.impersonated ? \\\"assertive\\\" : \\\"off\\\" }'>\" +\r\n            \"<!-- ko if: $.cdh.user.impersonated -->\" +\r\n            `<span aria-live='assertive'>${$.cdh.languageConstant.getConstant('messages.user-impersonated-error')}</span>` +\r\n            \"<!-- /ko -->\" +\r\n            \"</div>\"\r\n    });\r\n\r\n\r\n    // adds 'opened', 'toggleClick', 'onMouseOver' and 'onMouseOut'\r\n    var touchFiendlyToggle = function () {\r\n        var isTouchScreen = ('ontouchend' in window);\r\n        var opened = ko.observable(false);\r\n        let closeTimer;\r\n\r\n        this.opened = opened;\r\n        this.toggleClick = function () {\r\n            if (ko.unwrap(this.disable)) return;\r\n            opened(!opened());\r\n            // IMPORTANT: DO NOT prevent default and stop propogation. It will break existing components.\r\n        };\r\n        this.onMouseOver = function () {\r\n            if (isTouchScreen) return;\r\n            if (ko.unwrap(this.disable)) return;\r\n            clearTimeout(this.closeTimer);\r\n            opened(true);\r\n        };\r\n        this.onMouseOut = function () {\r\n            if (isTouchScreen) return;\r\n            if (ko.unwrap(this.disable)) return;\r\n            clearTimeout(this.closeTimer);\r\n            this.closeTimer = setTimeout(function () {\r\n                opened(false);\r\n            }, 100);\r\n        };\r\n\r\n        var closeEvent = 'click.' + Math.random().toString().substring(2);\r\n        opened.subscribe(function (isOpened) {\r\n            isOpened\r\n                ? setTimeout(function () {\r\n                    $(window).on(closeEvent, opened.bind(null, false));\r\n                }, 0)\r\n                : $(window).off(closeEvent);\r\n        });\r\n    }\r\n\r\n    this.selectManager = function (data, e) {\r\n        if (e.keyCode === 13 || e.keyCode === 32) {\r\n            this.toggleClick();\r\n        }\r\n    }\r\n\r\n    ko.components.register('filter-setter', {\r\n        template: { element: 'template-filter-setter' },\r\n        viewModel: function (params) {\r\n            var id = $.cdh.helper.getUniqueID('filter_setter_');\r\n            var defaults = {\r\n                id: id,\r\n                title: 'Quick filter',\r\n                setters: [{ text: 'All', setter: function () { } }],\r\n                selectedTextObservable: ko.observable($.cdh.languageConstant.getConstant('filter.select-activities')),\r\n                disableObservable: ko.observable(false)\r\n            }\r\n\r\n            $.extend(true, this, defaults, params);\r\n\r\n            touchFiendlyToggle.call(this);\r\n\r\n            this.afterRender = function(){\r\n                $.cdh.helper.addKeyboardNavToMenu('#' + id + '__menu', 'li>span');\r\n                var $menu = $('#' + id + '__menu');\r\n\r\n                this.opened.subscribe(function (isOpened) {\r\n                    var $elToFocus;\r\n                    var $activeOption = $menu.find('li[aria-selected=\"true\"]');\r\n                    var $fallbackOption = $menu.find('li').first();\r\n                    var $needleOption = $activeOption.length > 0 ? $activeOption : $fallbackOption;\r\n                    if(isOpened) {\r\n                        $elToFocus = $needleOption.find('> span');\r\n                    } else {\r\n                        $elToFocus = $('#' + id + '__value_btn');\r\n                    }\r\n\r\n                    $elToFocus.trigger('focus');\r\n                });\r\n\r\n                $menu.on('exit', () => {\r\n                    this.opened(!this.opened());\r\n                });\r\n\r\n            }.bind(this);\r\n\r\n        }\r\n    });\r\n\r\n    ko.components.register('html-dropdown', {\r\n        template: { element: 'template-html-dropdown' },\r\n        viewModel: function (params) {\r\n            var defaults = {\r\n                options: [], // required\r\n                optionsText: '', // required\r\n                optionsCaption: '',\r\n                value: ko.observable(),\r\n                disable: false,\r\n            }\r\n            const self = this;\r\n            this.dropdownId = 'dropdownID_' + Math.random().toString(16).slice(2);\r\n\r\n            $.extend(true, this, defaults, params);\r\n\r\n            this.selectedText = ko.pureComputed(function () {\r\n                return this.value()\r\n                    ? this.value()[this.optionsText]\r\n                    : this.optionsCaption;\r\n            }, this);\r\n\r\n            touchFiendlyToggle.call(this);\r\n\r\n            this.keyboardHandler = function (data, e) {\r\n                if (e.keyCode === 9) { // Tab\r\n                    this.opened(false);\r\n                }\r\n                if (e.keyCode === 13 || e.keyCode === 32) { // Enter - Space\r\n                    const container = $(e.target).closest('html-dropdown')[0];\r\n                    const items = container.querySelectorAll('.select-dropdown ul > li');\r\n                    this.toggleClick();\r\n                    items[0].setAttribute('tabindex', '0');\r\n                    items[0].focus();\r\n\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n            };\r\n\r\n            this.listKeyboardHandler = function (data, e) {\r\n                if (e.keyCode === 27) { // Esc\r\n                    self.opened(false);\r\n                    const container = $(e.target).closest('html-dropdown')[0];\r\n                    removeAvailables(container);\r\n                    const button = container.querySelector('.select-text');\r\n                    if (button) {\r\n                        button.focus();\r\n                    }\r\n                }\r\n\r\n                if (e.keyCode === 38 || e.keyCode === 40) {\r\n                    const container = $(e.target).closest('html-dropdown')[0];\r\n                    const items = container.querySelectorAll('.select-dropdown ul > li');\r\n                    let nextIndex;\r\n                    let currentKey;\r\n                    for (let i = 0; i < items.length; i++) {\r\n                        if (items[i].hasAttribute('tabindex') && items[i].getAttribute('tabindex') == '0') {\r\n                            nextIndex = currentKey = i;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    if (e.keyCode === 38) {\r\n                        nextIndex--;\r\n                    } else if (e.keyCode === 40) {\r\n                        nextIndex++;\r\n                    }\r\n\r\n                    if (items[nextIndex]) {\r\n                        items[currentKey].setAttribute('tabindex', '-1');\r\n                        items[nextIndex].setAttribute('tabindex', '0');\r\n                        items[nextIndex].focus();\r\n                    } else {\r\n                        return false;\r\n                    }\r\n                }\r\n            };\r\n\r\n            this.itemKeybordHandler = function (data, e) {\r\n                if (e.keyCode === 13 || e.keyCode === 32) { // Enter - Space\r\n                    if (e.target.classList.contains('link-icon')) {\r\n                        e.target.click();\r\n                        return false;\r\n                    }\r\n                    e.stopPropagation();\r\n                    self.opened(false);\r\n                    self.value(this);\r\n                    const container = $(e.target).closest('html-dropdown')[0];\r\n                    removeAvailables(container);\r\n                    const button = container.querySelector('.select-text');\r\n                    if (button) {\r\n                        button.focus();\r\n                    }\r\n\r\n                    return false;\r\n                }\r\n\r\n                if (e.keyCode === 9) { // Tab\r\n                    if (e.target.classList.contains('link-icon')) {\r\n                        self.opened(false);\r\n                        const container = $(e.target).closest('html-dropdown')[0];\r\n                        removeAvailables(container);\r\n\r\n                        const $currentRow = $(e.target).parents('.popup-row');\r\n                        if (!$currentRow.length) return;\r\n\r\n                        const $nextRow = $currentRow.next('.popup-row');\r\n                        if (!$nextRow.length) return;\r\n\r\n                        const $formElements = $nextRow.eq(0).find('input, select, button');\r\n                        if (!$formElements.length) return;\r\n\r\n                        $formElements[0].focus();\r\n                    } else {\r\n                        e.stopPropagation();\r\n                        e.preventDefault();\r\n                        const link = e.target.querySelector('a');\r\n                        if (link) {\r\n                            link.focus();\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return true;\r\n            };\r\n\r\n            function removeAvailables(container) {\r\n                const selectedItems = container.querySelectorAll('.select-dropdown ul > li[tabindex=\"0\"]');\r\n                if (selectedItems.length) {\r\n                    selectedItems.forEach(function (item) {\r\n                        item.setAttribute('tabindex', '-1');\r\n                    })\r\n                }\r\n            }\r\n        }\r\n    });\r\n\r\n    ko.components.register('icon-hint', {\r\n        template:\r\n            \"<span class='icon-view' data-bind='css: { opened: opened }, event: { mouseover: onMouseOver, mouseout: onMouseOut }'>\" +\r\n            \"<button type='button' class='icon-view_btn' aria-label='full account number' data-bind='event: { focus: onMouseOver, blur: onMouseOut }, click: toggleClick, attr: { \\\"aria-describedby\\\": id, \\\"aria-expanded\\\": opened().toString() }'></button>\" +\r\n            \"<span class='icon-view_hint' data-bind='text: hintText, attr: { id: id }' role='tooltip'></span>\" +\r\n            \"</span>\",\r\n        viewModel: function (params) {\r\n            this.hintText = params.text;\r\n            this.id = 'icon_view_tooltip_' + Math.random();\r\n            const self = this;\r\n            touchFiendlyToggle.call(this);\r\n            $(window).keyup(function(e) {\r\n                if (e.keyCode === 27) {\r\n                    self.opened(false);\r\n                }\r\n            });\r\n        }\r\n    });\r\n\r\n\r\n    function htmlWidgetModel(afterRender, template) {\r\n\r\n        this.afterRender = afterRender || function(renderedNodesArray, $data) {};\r\n\r\n        this.template = template;\r\n        if (this.template && this.template.customFields && this.template.customFields.length > 0 && $.cdh.user.languagePreference != 'en') {\r\n            this.template.customFields.forEach(w => {\r\n                if (w.value.includes('External2')) {\r\n                    w.value = w.value.replace(\"External2\", \"External2_\" + $.cdh.user.languagePreference);\r\n                }\r\n            });\r\n\r\n        }\r\n        this.templateExtractor = new $.cdh.services.templateExtractor(template);\r\n\r\n        this.getLabel = function (name, value) {\r\n            return this.templateExtractor.getLabel(name, value);\r\n        }.bind(this);\r\n\r\n        this.getTemplate = function (name, value) {\r\n            return this.templateExtractor.getTemplate(name, value);\r\n        }.bind(this);\r\n    }\r\n\r\n    var registerHtmlWidget = function (componentName, afterRender) {\r\n        ko.components.register(componentName, {\r\n            template: \"<!-- ko template: { name: 'template-\" + componentName + \"', afterRender: afterRender } --><!-- /ko -->\",\r\n            viewModel: {\r\n                createViewModel: function (params, componentInfo) {\r\n                    var updateHeight = updateContainerHeight(componentInfo.element);\r\n                    setInterval(updateHeight, 400);\r\n\r\n                    return new htmlWidgetModel(afterRender, params.template);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    $.extend(true, $, {\r\n        cdh: {\r\n            registerHtmlWidget: registerHtmlWidget\r\n        }\r\n    });\r\n\r\n    var captchaComponentIncrementalId = 1;\r\n    ko.components.register('captcha',\r\n        {\r\n            template: \"<!-- ko template: {name: 'template-captcha', afterRender: afterRender} --><!-- /ko -->\",\r\n            viewModel: function(params) {\r\n                this.componentId = \"captcha-\" + (++captchaComponentIncrementalId);\r\n                this.sitekey = null;\r\n                this.widgetId = null;\r\n\r\n                this.initialize = function(sitekey) {\r\n                    this.sitekey = sitekey;\r\n                    return this.componentId;\r\n                }.bind(this);\r\n\r\n                this.initializeRecaptcha = function(){\r\n                    recaptchaStatus.awaitLoad(function() {\r\n                        var $target = $('<div />').appendTo($('#'+this.componentId));\r\n                        this.widgetId = grecaptcha.render($target[0],\r\n                            {\r\n                                sitekey: this.sitekey,\r\n                                callback: params.callback\r\n                            });\r\n                    }.bind(this));\r\n                }.bind(this);\r\n\r\n                this.afterRender = function() {\r\n                    //create recaptcha script element\r\n                    var recaptchaScript = document.createElement('script');\r\n                    recaptchaScript.type = \"text/javascript\";\r\n                    recaptchaScript.src = \"https://www.google.com/recaptcha/api.js?onload=recaptchaOnLoadCallback&render=explicit\";\r\n                    recaptchaScript.setAttribute('defer','');\r\n                    recaptchaScript.setAttribute('async','');\r\n\r\n                    // Seems that onreadystatechange works better on IE 10 onload seems to fire incorrectly\r\n                    if (\"onreadystatechange\" in recaptchaScript) {\r\n                        recaptchaScript.onreadystatechange = function() {\r\n                            if (/loaded|complete/.test(recaptchaScript.readyState)) {\r\n                                this.initializeRecaptcha();\r\n                            }\r\n                        }.bind(this);\r\n                    } else {\r\n                        recaptchaScript.onload = this.initializeRecaptcha;\r\n                    }\r\n\r\n                    (document.getElementsByTagName('head')[0] || document.body).appendChild(recaptchaScript);\r\n                }.bind(this);\r\n\r\n                this.reset = function() {\r\n                    grecaptcha.reset(this.widgetId);\r\n                }.bind(this);\r\n\r\n                params.api.reset = this.reset;\r\n            }\r\n        })\r\n\r\n}(jQuery, ko));\r\n","// ReSharper disable MisuseOfOwnerFunctionThis\r\n(function ($, ko) {\r\n    // custom validation rules\r\n    ko.validation.rules.exactLength = {\r\n        validator: function (val, param) {\r\n\r\n            if (val === null || val === undefined || val.toString().trim().length === 0)\r\n                return true;\r\n\r\n            var isArray = param instanceof Array;\r\n            if (!isArray)\r\n                param = [param];\r\n\r\n            var valid = false;\r\n            for (var i = 0; i < param.length; i++) {\r\n                if (val.toString().trim().length === param[i]) {\r\n                    valid = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return valid;\r\n        },\r\n        message: '{0} chars'\r\n    };\r\n\r\n    ko.validation.rules.minLength = {\r\n        validator: function(val, param) {\r\n            if (val === null || val == undefined)\r\n                return true;\r\n\r\n            if (typeof (val) !== 'string' && !$.isNumeric(val))\r\n                return false;\r\n\r\n            var length = val.toString().trim().length;\r\n            return length >= param;\r\n        },\r\n        message: 'min length {0} chars'\r\n    };\r\n\r\n    ko.validation.rules.betweenLength = {\r\n        validator: function(val, param) {\r\n            if (val === null || val === undefined)\r\n                return true;\r\n\r\n            if (typeof (val) !== 'string' || !$.isNumeric(val))\r\n                return false;\r\n\r\n            var length = val.toString().trim().length;\r\n            return length >= param[0] && length <= param[1];\r\n        },\r\n        message: '{0} to {1} chars'\r\n    };\r\n\r\n    ko.validation.rules.betweenLengthString = {\r\n        validator: function(val, param) {\r\n            if (val === null || val === undefined)\r\n                return true;\r\n\r\n            if (typeof (val) !== 'string')\r\n                return false;\r\n\r\n            var length = val.toString().trim().length;\r\n            return length >= param[0] && length <= param[1];\r\n        },\r\n        message: '{0} to {1} chars'\r\n    };\r\n\r\n    ko.validation.rules.notpattern = {\r\n        validator: function (val, regex) {\r\n            return val === null || val === undefined || val.toString().match(regex) === null;\r\n        },\r\n        message: 'Please check this value.'\r\n    };\r\n\r\n    ko.validation.rules.betWeenDates = {\r\n        validator: function (val, param) {\r\n            if (!val)\r\n                return true;\r\n\r\n            var startDate = ko.unwrap(param[0]);\r\n            var endDate = ko.unwrap(param[1]);\r\n\r\n            var inputDate = moment(val).startOf('day');\r\n            var d1 = moment(startDate).startOf('day');\r\n            var d2 = moment(endDate).startOf('day');\r\n\r\n            return d1 < inputDate && d2 > inputDate;\r\n        },\r\n        message: 'must be numeric'\r\n    };\r\n\r\n    ko.validation.rules.custom = {\r\n        validator: function (val, param) {\r\n            return param(val);\r\n        }\r\n    };\r\n\r\n    ko.validation.rules.ssn = {\r\n        validator: function (val, param) {\r\n            if (!param || val === null || val === undefined || val.toString().trim().length === 0)\r\n                return true;\r\n\r\n            var normalizedVal = val.replace(/-/g, '').trim();\r\n            var area = parseInt(normalizedVal.substring(0, 3));\r\n            var group = parseInt(normalizedVal.substring(3, 5));\r\n            var serial = parseInt(normalizedVal.substring(5, 9));\r\n             \r\n            return (\r\n                // 9 characters\r\n                normalizedVal.length === 9 &&\r\n                    // no set can start with zero\r\n                    normalizedVal.match(/^[0-9]{3}[0-9]{2}[0-9]{4}/) &&                    \r\n                    area !== 0 &&\r\n                    area !== 666 &&\r\n                    // it's over 900\r\n                    area < 900 &&\r\n                    group !== 0 &&\r\n                    serial !== 0 &&\r\n                    normalizedVal !== '078051120' &&\r\n                    // was used in an ad by the Social Security Administration\r\n                    normalizedVal !== '219099999'\r\n            );\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.invalid-ssn')\r\n    };\r\n\r\n    ko.validation.rules.greaterThan = {\r\n        validator: function (val, param) {\r\n            return $.isNumeric(val) && val > param;\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.must-be-greater')\r\n    };\r\n    \r\n    ko.validation.rules.lessThanOrEqual = {\r\n        validator: function(val, param) {\r\n            return $.isNumeric(val) && val <= param;\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.less-than-equal')\r\n    };\r\n\r\n    ko.validation.rules.ssn = {\r\n        validator: function (val, param) {\r\n            if (!param || val === null || val === undefined || val.toString().trim().length === 0)\r\n                return true;\r\n\r\n            var normalizedVal = val.replace(/-/g, '').trim();\r\n            var area = parseInt(normalizedVal.substring(0, 3));\r\n            var group = parseInt(normalizedVal.substring(3, 5));\r\n            var serial = parseInt(normalizedVal.substring(5, 9));\r\n             \r\n            return (\r\n                // 9 characters\r\n                normalizedVal.length === 9 &&\r\n                    // no set can start with zero\r\n                    normalizedVal.match(/^[0-9]{3}[0-9]{2}[0-9]{4}/) &&                    \r\n                    area !== 0 &&\r\n                    area !== 666 &&\r\n                    // it's over 900\r\n                    area < 900 &&\r\n                    group !== 0 &&\r\n                    serial !== 0 &&\r\n                    normalizedVal !== '078051120' &&\r\n                    // was used in an ad by the Social Security Administration\r\n                    normalizedVal !== '219099999'\r\n            );\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.invalid-ssn')\r\n    };\r\n\r\n    ko.validation.rules.numeric = {\r\n        validator: function(val) {\r\n            return $.isNumeric(val);\r\n        },\r\n        message: 'must be numeric'\r\n    };\r\n\r\n    ko.validation.rules.alphanumeric = {\r\n        validator: function (val) {\r\n            return /^$|^[A-Za-z\\d\\s]+$/.test(val);\r\n        },\r\n        message: 'must be alphanumeric'\r\n    };\r\n    ko.validation.rules.usernamevalidation = {\r\n        validator: function (val) {\r\n            return /^[a-zA-Z0-9._@-]+$/.test(val);\r\n        },\r\n        message: 'Username contains invalid characters.'\r\n    };\r\n\r\n    ko.validation.rules.dependentName = {\r\n        validator: function (val) {\r\n            return /^$|^[A-Za-z\\d\\s,.&'-]+$/.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.not-allowed-characters')\r\n    };\r\n\r\n    ko.validation.rules.specialAddress = {\r\n        validator: function (val) {\r\n            return /^$|^[A-Za-z\\d\\s.,#:'/&-]+$/.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.not-allowed-characters')\r\n    };\r\n\r\n    ko.validation.rules.notPostAddress = {\r\n        validator: function (val) {\r\n            return val === null || val === undefined || val.toString().match(/^\\s*(.*((p|post)[-.\\s]*(o|off|office)[-.\\s]*(b|box|bin)[-.\\s]*)|.*((p|post)[-.\\s]*(o|off|office)[-.\\s]*)|.*((p|post)[-.\\s]*(b|box|bin)[-.\\s]*)|(box|bin)[-.\\s]*)(#|n|num|number)?\\s*\\d+/gi) === null;\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.invalid-post-address')\r\n    };\r\n    \r\n    ko.validation.rules.extendedSymbolSet = {\r\n        validator: function(val) {\r\n            return /^$|^[A-Za-z\\d\\s!@#$%^&*()_+-=/|<>?,.~`'[\\]{}]+$/.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.not-allowed-characters')\r\n    };\r\n\r\n    ko.validation.rules.alphabetic = {\r\n        validator: function (val) {\r\n            return /^$|^[a-zA-Z]+$/.test(val);\r\n        },\r\n        message: 'must be alphabetic'\r\n    };\r\n    \r\n    ko.validation.rules.emptyValidation = {\r\n        validator: function(val){\r\n            return true;\r\n        },\r\n        message: ''\r\n    };\r\n\r\n    ko.validation.rules['phoneUS'] = {\r\n        validator: function (phoneNumber, validate) {\r\n            if (!validate) { return true; }\r\n            if (ko.validation.utils.isEmptyVal(phoneNumber)) { return true; } // makes it optional, use 'required' rule if it should be required\r\n            if (typeof (phoneNumber) !== 'string') { return false; }\r\n            phoneNumber = phoneNumber.replace(/\\s+/g, \"\");\r\n            return validate && phoneNumber.length > 9 && phoneNumber.match(/^(1-?)?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})-?[2-9]\\d{2}-?\\d{4}$/);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.valid-phone-number')\r\n    };\r\n\r\n    ko.validation.rules['passwordComplexity'] = {\r\n        validator: function (val, params) {\r\n            this.message = 'See password validation message';\r\n            \r\n            if (val.match(/password/i)) {\r\n                this.message = 'A password cannot contain the word \"password\"';\r\n                return false;\r\n            }\r\n            \r\n            if (params.userName && params.userName()) {\r\n                if (val.toLowerCase().includes(params.userName().toLowerCase())) {\r\n                    this.message = 'A password cannot contain the username';\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            if (/\\w*(\\w)(?=\\w*\\1{2,})\\w*/.test(val)) {\r\n                this.message = 'The same character repeating 3 or more times';\r\n                return false;\r\n            }\r\n\r\n            if (val.length < 8 || val.length > 16) {\r\n                this.message = 'A valid password must contain between 8 and 16 characters.';\r\n                return false;\r\n            }\r\n\r\n            if (val.match(/\\s/)) {\r\n                this.message = 'A password cannot contain spaces';\r\n                return false;\r\n            }\r\n\r\n            if (! /(?=^[^\\s]{8,16}$)(?!.*([A-Za-z0-9])\\1{2})((?=.*?\\d)(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[^\\w\\d\\s])(?=.*?[a-z])|(?=.*?[^\\w\\d\\s])(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[A-Z])(?=.*?[^\\w\\d\\s]))^.*/.test('' + val + '')) {\r\n                this.message = 'The password must contain 3 of the specified character types.';\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        },\r\n        message: 'See password validation message'\r\n    };\r\n\r\n    ko.validation.rules['ccEmail'] = {\r\n        validator: function (val) {\r\n            if (ko.validation.utils.isEmptyVal(val))\r\n                return true;\r\n            var emails = val.split(\",\");\r\n            var result = true;\r\n            $.each(emails, function (i, item) {\r\n                if (!(/^((([a-z]|\\d|[!#\\$%&'\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(item)))\r\n                    result = false;\r\n            });\r\n            return result;\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.enter-proper-email')\r\n    };\r\n\r\n    ko.validation.rules['email'] = {\r\n        validator: function (val) {\r\n            if (ko.validation.utils.isEmptyVal(val)) {\r\n                return true; // Allow empty values if not required\r\n            }\r\n            // Simple email regex pattern\r\n            var emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n            return emailPattern.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.enter-proper-email') // Custom error message\r\n    };\r\n\r\n    ko.validation.rules.url = {\r\n        validator: function(val) {\r\n            return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)$/.test(val);\r\n        },\r\n        message: 'Please enter a proper url'\r\n    };\r\n\r\n    ko.validation.rules['dateGreaterThen'] = {\r\n        validator: function (val, otherVal) {\r\n            if (!val || !otherVal)\r\n                return true;\r\n\r\n            var d1 = moment(val).startOf('day');\r\n            var d2 = moment(otherVal).startOf('day');\r\n            return d1 >= d2;\r\n        },\r\n        message: function () {\r\n            return $.cdh.languageConstant.getConstant('extension-validation.end-date-before-start-date');\r\n        }\r\n    };\r\n\r\n    ko.validation.rules['dateLessThen'] = {\r\n        validator: function (val, otherVal) {\r\n            if (!val)\r\n                return true;\r\n\r\n            var d1 = moment(val).startOf('day');\r\n            var d2 = moment(otherVal).startOf('day');\r\n            return d1 < d2;\r\n        },\r\n        message: function () {\r\n            return $.cdh.languageConstant.getConstant('extension-validation.start-date-greater-end-date');\r\n        }\r\n    };\r\n\r\n    ko.validation.rules['lenghtEqual'] = {\r\n        validator: function (val, otherVal) {\r\n            return val.length === otherVal;\r\n        },\r\n        message: 'must be {0} digits'\r\n    };\r\n\r\n    ko.validation.rules[\"equalIgnoreCase\"] = {\r\n        validator: function(val, otherVal) {\r\n            if (!val)\r\n                val = \"\";\r\n            if (!otherVal)\r\n                otherVal = \"\";\r\n\r\n            return val.toUpperCase() == otherVal.toUpperCase();\r\n        },\r\n        message: 'values should be equals'\r\n    };\r\n\r\n    ko.validation.rules['routingNumber'] = {\r\n        validator: function(val) {\r\n            if ((val || '').length !== 9)\r\n                return false;\r\n\r\n            var checkSum =\r\n                parseInt(val[0]) * 3 +\r\n                parseInt(val[1]) * 7 +\r\n                parseInt(val[2]) +\r\n                parseInt(val[3]) * 3 +\r\n                parseInt(val[4]) * 7 +\r\n                parseInt(val[5]) +\r\n                parseInt(val[6]) * 3 +\r\n                parseInt(val[7]) * 7 +\r\n                parseInt(val[8]);\r\n\r\n            return checkSum % 10 === 0;\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.invalid-routing-number')\r\n    };\r\n\r\n    ko.validation.rules['enumRequired'] = {\r\n        validator: function(val, param) {\r\n            return val != 0 && val != -1 || !param;\r\n        },\r\n        message: 'required'\r\n    };\r\n\r\n    ko.validation.rules['reimbRequired'] = {\r\n        validator: function(val, param) {\r\n            return typeof val !== 'undefined' && param || !param \r\n        },\r\n        message: 'Please select a reimbursement method'\r\n    };\r\n\r\n    ko.validation.rules['checked'] = {\r\n        validator: function (value) {\r\n            return value;\r\n        },\r\n        message: '*'\r\n    };\r\n\r\n    ko.validation.rules['minArrayLength'] = {\r\n        validator: function (obj, params) {\r\n            return obj.length >= params.minLength;\r\n        },\r\n        message: \"Array does not meet minimum length requirements\"\r\n    };\r\n    \r\n    ko.validation.rules.specificAlphanumeric = {\r\n        validator: function (val) {\r\n            return /^[0-9a-zA-Z-.,_]+$/g.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.not-allowed-characters')\r\n    };\r\n\r\n    ko.validation.rules.zipCode = {\r\n        validator: function (val) {\r\n            return !val || /^\\d{9}$/g.test(val) || /^\\d{5}(-\\d{4})?$/g.test(val);\r\n        },\r\n        message: $.cdh.languageConstant.getConstant('extension-validation.5-9-digit-number')\r\n    };\r\n    ko.validation.rules.distance = {\r\n        validator: function (val) {\r\n            return val >= 1 && val <= 50;\r\n        },\r\n        message: 'Distance must be between 1 to 50.'\r\n    };\r\n\r\n    ko.validation.rules.cardType = {\r\n        validator: function (val) {\r\n            if(!val) {\r\n                return true;\r\n            }\r\n\r\n            var cardType = $.payform.parseCardType(val);\r\n            return $.payform.validateCardNumber(val) && (cardType === 'mastercard' || cardType === 'visa' || cardType === 'amex');\r\n        },\r\n        message: 'Invalid card number'\r\n    };\r\n\r\n    // override default validation error message behavior\r\n    ko.validation.insertValidationMessage = function (element) {\r\n        var span = document.createElement('SPAN');\r\n        span.className = ko.validation.utils.getConfigOptions(element).errorMessageClass;\r\n        if (!element.id) {\r\n            element.id = Math.random();\r\n        }\r\n        span.id = element.id + '_validation_message';\r\n        span.setAttribute('role', 'alert');\r\n        var ariaDescribedby = element.getAttribute('aria-describedby') || '';\r\n        if (ariaDescribedby) {\r\n            ariaDescribedby += ' ';\r\n        }\r\n        element.setAttribute('aria-describedby', ariaDescribedby + span.id);\r\n        element.parentNode.insertBefore(span, element);\r\n        return span;\r\n    };\r\n\r\n    ko.validation.rules.required.message = $.cdh.languageConstant.getConstant('extension-validation.required-message');\r\n    ko.validation.rules.min.message = $.cdh.languageConstant.getConstant('extension-validation.must-be-at-least');\r\n    ko.validation.rules.max.message = $.cdh.languageConstant.getConstant('extension-validation.must-be-no-more-than');\r\n\r\n    ko.validation.registerExtenders();\r\n    \r\n    // validation model\r\n    var validationModel = function (obj, on, options) {\r\n        options = $.extend({\r\n            recreateValidation: true\r\n        }, options);\r\n\r\n        var errors = null;\r\n        var createValidationIfNeeded = function () {\r\n            if (errors != null && options.recreateValidation === false)\r\n                return;\r\n\r\n            errors = ko.validation.group(obj, { deep: true });\r\n        }\r\n\r\n        this.activated = ko.observable(false);\r\n        this.errorsList = ko.observable(errors);\r\n\r\n        this.validationValid = ko.pureComputed(function() {\r\n            return this.activated() ? !this.hasErrors() : true;\r\n        }, this);\r\n        this.hasErrors = ko.pureComputed(function () {\r\n            // TODO: refactor this without side effect (this is hotfix workaround, bc. errors is not observable)\r\n            this.errorsList(errors !== null ? errors() : null);\r\n            return this.activated() && errors().length > 0;\r\n        }, this);\r\n\r\n        this.getErrors = ko.pureComputed(function() {\r\n            \r\n            return errors !== null && errors()\r\n        }, this);\r\n\r\n        this.activate = function () {\r\n            if (!this.activated()) {\r\n                createValidationIfNeeded();\r\n\r\n                errors.showAllMessages();\r\n                this.activated(true);\r\n                if (this.hasErrors()) {\r\n                    scrollToError();\r\n                }\r\n            }\r\n            \r\n        }.bind(this);\r\n        \r\n        this.scrollToError = function () {\r\n            scrollToError();\r\n        }.bind(this);\r\n\r\n        this.deactivate = function (forceInitErrors) {\r\n            if (errors === null && forceInitErrors) {\r\n                createValidationIfNeeded();\r\n            }\r\n            if (errors != null) {\r\n                errors.showAllMessages(false);\r\n            }\r\n            this.activated(false);\r\n        }.bind(this);\r\n\r\n        function scrollToError() {\r\n            if ($.magnificPopup.instance.isOpen) {\r\n                scrollToErrorPopup();\r\n            } else {\r\n                scrollToErrorWindow();\r\n            }\r\n        }\r\n        \r\n        function scrollToErrorWindow() {\r\n            const elementToScroll = $(\".popup-form_error-title\")[0];\r\n            if (elementToScroll) {\r\n                $(window).scrollTop($(elementToScroll).offset().top);\r\n            }\r\n        }\r\n        \r\n        function scrollToErrorPopup() {\r\n            const contentContainer = $.magnificPopup.instance.container[0];\r\n            if(!contentContainer) return;\r\n            \r\n            const scroller = $.magnificPopup.instance.container[0].parentElement;\r\n            if(!scroller) return;\r\n            \r\n            const elementToScroll = document.querySelector(\"div.popup-row_inp-error\");\r\n            if(!elementToScroll) return;\r\n            \r\n            scroller.scrollTop = elementToScroll.offsetTop - scroller.offsetTop;\r\n        }\r\n        \r\n        \r\n        if (on === true)\r\n            this.activate();\r\n    };\r\n\r\n    $.extend(true, $, {\r\n        cdh: {\r\n            validation: validationModel\r\n        }\r\n    });\r\n})(jQuery, ko);\r\n// ReSharper restore MisuseOfOwnerFunctionThis\r\n","moment.fn.formatWCP = function () {\r\n   return this.format(\"MMM D, YYYY\").valueOf();\r\n};","(function ($) {\r\n    var topics = {\r\n        accounts: {\r\n            yearFilter: 'accounts-year-filter',\r\n            listFilter: 'accounts-list-filter',\r\n            listFilterOptions: 'accounts-list-filter-options'\r\n        },\r\n        alerts: {\r\n            countValue: 'alerts-count-value',\r\n            countRefresh: 'alerts-count-refresh'\r\n        },\r\n        claims : {\r\n            requiredAttentionItems: 'required-attention-items'\r\n        },\r\n        opportunities: {\r\n            countValue: 'opportunities-count-value'\r\n        },\r\n        notifications: {\r\n            countValue: 'notifications-count-value',\r\n            countRefresh: 'notifications-count-refresh'\r\n        },\r\n    };\r\n\r\n    $.extend(true, $, { cdh: { topics: topics } });\r\n})(jQuery);","/*!\n * Date picker for pickadate.js v3.5.5\n * http://amsul.github.io/pickadate.js/date.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar DAYS_IN_WEEK = 7,\n    WEEKS_IN_CALENDAR = 6,\n    _ = Picker._\n\n\n\n/**\n * The date picker constructor\n */\nfunction DatePicker( picker, settings ) {\n\n    var calendar = this,\n        element = picker.$node[ 0 ],\n        elementValue = element.value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format,\n        isRTL = function() {\n\n            return element.currentStyle ?\n\n                // For IE.\n                element.currentStyle.direction == 'rtl' :\n\n                // For normal browsers.\n                getComputedStyle( picker.$root[0] ).direction == 'rtl'\n        }\n\n    calendar.settings = settings\n    calendar.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    calendar.queue = {\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse navigate create validate',\n        view: 'parse create validate viewset',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    calendar.item = {}\n\n    calendar.item.clear = null\n    calendar.item.disable = ( settings.disable || [] ).slice( 0 )\n    calendar.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( calendar.item.disable )\n\n    calendar.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        calendar.set( 'select', valueString, {\n            format: formatString,\n            defaultValue: true\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        calendar.\n            set( 'select', null ).\n            set( 'highlight', calendar.item.now )\n    }\n\n\n    // The keycode to movement mapping.\n    calendar.key = {\n        40: 7, // Down\n        38: -7, // Up\n        39: function() { return isRTL() ? -1 : 1 }, // Right\n        37: function() { return isRTL() ? 1 : -1 }, // Left\n        go: function( timeChange ) {\n            var highlightedObject = calendar.item.highlight,\n                targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )\n            calendar.set(\n                'highlight',\n                targetDate,\n                { interval: timeChange }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )\n                }\n            })\n            picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )\n                }\n            })\n        }, 1 ).\n        on( 'open', function() {\n            var includeToday = ''\n            if ( calendar.disabled( calendar.get('now') ) ) {\n                includeToday = ':not(.' + settings.klass.buttonToday + ')'\n            }\n            picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button, select' ).attr( 'disabled', true )\n        }, 1 )\n\n} //DatePicker\n\n\n/**\n * Set a datepicker item object.\n */\nDatePicker.prototype.set = function( type, value, options ) {\n\n    var calendar = this,\n        calendarItem = calendar.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        calendarItem[ type ] = value\n        return calendar\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {\n        value = calendar[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        calendar.set( 'highlight', calendarItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        calendar.set( 'view', calendarItem.highlight, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {\n            calendar.set( 'select', calendarItem.select, options )\n        }\n        if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {\n            calendar.set( 'highlight', calendarItem.highlight, options )\n        }\n    }\n\n    return calendar\n} //DatePicker.prototype.set\n\n\n/**\n * Get a datepicker item object.\n */\nDatePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //DatePicker.prototype.get\n\n\n/**\n * Create a picker date object.\n */\nDatePicker.prototype.create = function( type, value, options ) {\n\n    var isInfiniteValue,\n        calendar = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n\n    // If it’s infinity, update the value.\n    if ( value == -Infinity || value == Infinity ) {\n        isInfiniteValue = value\n    }\n\n    // If it’s an object, use the native date object.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.obj\n    }\n\n    // If it’s an array, convert it into a date and make sure\n    // that it’s a valid date – otherwise default to today.\n    else if ( $.isArray( value ) ) {\n        value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )\n        value = _.isDate( value ) ? value : calendar.create().obj\n    }\n\n    // If it’s a number or date object, make a normalized date.\n    else if ( _.isInteger( value ) || _.isDate( value ) ) {\n        value = calendar.normalize( new Date( value ), options )\n    }\n\n    // If it’s a literal true or any other case, set it to now.\n    else /*if ( value === true )*/ {\n        value = calendar.now( type, value, options )\n    }\n\n    // Return the compiled object.\n    return {\n        year: isInfiniteValue || value.getFullYear(),\n        month: isInfiniteValue || value.getMonth(),\n        date: isInfiniteValue || value.getDate(),\n        day: isInfiniteValue || value.getDay(),\n        obj: isInfiniteValue || value,\n        pick: isInfiniteValue || value.getTime()\n    }\n} //DatePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nDatePicker.prototype.createRange = function( from, to ) {\n\n    var calendar = this,\n        createDate = function( date ) {\n            if ( date === true || $.isArray( date ) || _.isDate( date ) ) {\n                return calendar.create( date )\n            }\n            return date\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createDate( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createDate( to )\n    }\n\n    // Create relative dates.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.year, to.month, to.date + from ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.year, from.month, from.date + to ];\n    }\n\n    return {\n        from: createDate( from ),\n        to: createDate( to )\n    }\n} //DatePicker.prototype.createRange\n\n\n/**\n * Check if a date unit falls within a date range object.\n */\nDatePicker.prototype.withinRange = function( range, dateUnit ) {\n    range = this.createRange(range.from, range.to)\n    return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two date range objects overlap.\n */\nDatePicker.prototype.overlapRanges = function( one, two ) {\n\n    var calendar = this\n\n    // Convert the ranges into comparable dates.\n    one = calendar.createRange( one.from, one.to )\n    two = calendar.createRange( two.from, two.to )\n\n    return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||\n        calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )\n}\n\n\n/**\n * Get the date today.\n */\nDatePicker.prototype.now = function( type, value, options ) {\n    value = new Date()\n    if ( options && options.rel ) {\n        value.setDate( value.getDate() + options.rel )\n    }\n    return this.normalize( value, options )\n}\n\n\n/**\n * Navigate to next/prev month.\n */\nDatePicker.prototype.navigate = function( type, value, options ) {\n\n    var targetDateObject,\n        targetYear,\n        targetMonth,\n        targetDate,\n        isTargetArray = $.isArray( value ),\n        isTargetObject = $.isPlainObject( value ),\n        viewsetObject = this.item.view/*,\n        safety = 100*/\n\n\n    if ( isTargetArray || isTargetObject ) {\n\n        if ( isTargetObject ) {\n            targetYear = value.year\n            targetMonth = value.month\n            targetDate = value.date\n        }\n        else {\n            targetYear = +value[0]\n            targetMonth = +value[1]\n            targetDate = +value[2]\n        }\n\n        // If we’re navigating months but the view is in a different\n        // month, navigate to the view’s year and month.\n        if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {\n            targetYear = viewsetObject.year\n            targetMonth = viewsetObject.month\n        }\n\n        // Figure out the expected target year and month.\n        targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )\n        targetYear = targetDateObject.getFullYear()\n        targetMonth = targetDateObject.getMonth()\n\n        // If the month we’re going to doesn’t have enough days,\n        // keep decreasing the date until we reach the month’s last date.\n        while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {\n            targetDate -= 1\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'\n            }*/\n        }\n\n        value = [ targetYear, targetMonth, targetDate ]\n    }\n\n    return value\n} //DatePicker.prototype.navigate\n\n\n/**\n * Normalize a date by setting the hours to midnight.\n */\nDatePicker.prototype.normalize = function( value/*, options*/ ) {\n    value.setHours( 0, 0, 0, 0 )\n    return value\n}\n\n\n/**\n * Measure the range of dates.\n */\nDatePicker.prototype.measure = function( type, value/*, options*/ ) {\n\n    var calendar = this\n\n    // If it’s anything false-y, remove the limits.\n    if ( !value ) {\n        value = type == 'min' ? -Infinity : Infinity\n    }\n\n    // If it’s a string, parse it.\n    else if ( typeof value == 'string' ) {\n        value = calendar.parse( type, value )\n    }\n\n    // If it's an integer, get a date relative to today.\n    else if ( _.isInteger( value ) ) {\n        value = calendar.now( type, value, { rel: value } )\n    }\n\n    return value\n} ///DatePicker.prototype.measure\n\n\n/**\n * Create a viewset object based on navigation.\n */\nDatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {\n    return this.create([ dateObject.year, dateObject.month, 1 ])\n}\n\n\n/**\n * Validate a date as enabled and shift if needed.\n */\nDatePicker.prototype.validate = function( type, dateObject, options ) {\n\n    var calendar = this,\n\n        // Keep a reference to the original date.\n        originalDateObject = dateObject,\n\n        // Make sure we have an interval.\n        interval = options && options.interval ? options.interval : 1,\n\n        // Check if the calendar enabled dates are inverted.\n        isFlippedBase = calendar.item.enable === -1,\n\n        // Check if we have any enabled dates after/before now.\n        hasEnabledBeforeTarget, hasEnabledAfterTarget,\n\n        // The min & max limits.\n        minLimitObject = calendar.item.min,\n        maxLimitObject = calendar.item.max,\n\n        // Check if we’ve reached the limit during shifting.\n        reachedMin, reachedMax,\n\n        // Check if the calendar is inverted and at least one weekday is enabled.\n        hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {\n\n            // If there’s a date, check where it is relative to the target.\n            if ( $.isArray( value ) ) {\n                var dateTime = calendar.create( value ).pick\n                if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true\n                else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true\n            }\n\n            // Return only integers for enabled weekdays.\n            return _.isInteger( value )\n        }).length/*,\n\n        safety = 100*/\n\n\n\n    // Cases to validate for:\n    // [1] Not inverted and date disabled.\n    // [2] Inverted and some dates enabled.\n    // [3] Not inverted and out of range.\n    //\n    // Cases to **not** validate for:\n    // • Navigating months.\n    // • Not inverted and date enabled.\n    // • Inverted and all dates disabled.\n    // • ..and anything else.\n    if ( !options || (!options.nav && !options.defaultValue) ) if (\n        /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||\n        /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||\n        /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )\n    ) {\n\n\n        // When inverted, flip the direction if there aren’t any enabled weekdays\n        // and there are no enabled dates in the direction of the interval.\n        if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {\n            interval *= -1\n        }\n\n\n        // Keep looping until we reach an enabled date.\n        while ( /*safety &&*/ calendar.disabled( dateObject ) ) {\n\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'\n            }*/\n\n\n            // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.\n            if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {\n                dateObject = originalDateObject\n                interval = interval > 0 ? 1 : -1\n            }\n\n\n            // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.\n            if ( dateObject.pick <= minLimitObject.pick ) {\n                reachedMin = true\n                interval = 1\n                dateObject = calendar.create([\n                    minLimitObject.year,\n                    minLimitObject.month,\n                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)\n                ])\n            }\n            else if ( dateObject.pick >= maxLimitObject.pick ) {\n                reachedMax = true\n                interval = -1\n                dateObject = calendar.create([\n                    maxLimitObject.year,\n                    maxLimitObject.month,\n                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)\n                ])\n            }\n\n\n            // If we’ve reached both limits, just break out of the loop.\n            if ( reachedMin && reachedMax ) {\n                break\n            }\n\n\n            // Finally, create the shifted date using the interval and keep looping.\n            dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])\n        }\n\n    } //endif\n\n\n    // Return the date object settled on.\n    return dateObject\n} //DatePicker.prototype.validate\n\n\n/**\n * Check if a date is disabled.\n */\nDatePicker.prototype.disabled = function( dateToVerify ) {\n\n    var\n        calendar = this,\n\n        // Filter through the disabled dates to check if this is one.\n        isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {\n\n            // If the date is a number, match the weekday with 0index and `firstDay` check.\n            if ( _.isInteger( dateToDisable ) ) {\n                return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7\n            }\n\n            // If it’s an array or a native JS date, create and match the exact date.\n            if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {\n                return dateToVerify.pick === calendar.create( dateToDisable ).pick\n            }\n\n            // If it’s an object, match a date within the “from” and “to” range.\n            if ( $.isPlainObject( dateToDisable ) ) {\n                return calendar.withinRange( dateToDisable, dateToVerify )\n            }\n        })\n\n    // If this date matches a disabled date, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {\n        return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||\n            $.isPlainObject( dateToDisable ) && dateToDisable.inverted\n    }).length\n\n    // Check the calendar “enabled” flag and respectively flip the\n    // disabled state. Then also check if it’s beyond the min/max limits.\n    return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        dateToVerify.pick < calendar.item.min.pick ||\n        dateToVerify.pick > calendar.item.max.pick\n\n} //DatePicker.prototype.disabled\n\n\n/**\n * Parse a string into a usable type.\n */\nDatePicker.prototype.parse = function( type, value, options ) {\n\n    var calendar = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = calendar.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    calendar.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            // Grab the formatting label.\n            formattingLabel = calendar.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            parsingObject[ label ] = value.substr( 0, formatLength )\n        }\n\n        // Update the value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Compensate for month 0index.\n    return [\n        parsingObject.yyyy || parsingObject.yy,\n        +( parsingObject.mm || parsingObject.m ) - 1,\n        parsingObject.dd || parsingObject.d\n    ]\n} //DatePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nDatePicker.prototype.formats = (function() {\n\n    // Return the length of the first word in a collection.\n    function getWordLengthFromCollection( string, collection, dateObject ) {\n\n        // Grab the first word from the string.\n        // Regex pattern from http://stackoverflow.com/q/150033\n        var word = string.match( /[^\\x00-\\x7F]+|\\w+/ )[ 0 ]\n\n        // If there's no month index, add it to the date object\n        if ( !dateObject.mm && !dateObject.m ) {\n            dateObject.m = collection.indexOf( word ) + 1\n        }\n\n        // Return the length of the word.\n        return word.length\n    }\n\n    // Get the length of the first word in a string.\n    function getFirstWordLength( string ) {\n        return string.match( /\\w+/ )[ 0 ].length\n    }\n\n    return {\n\n        d: function( string, dateObject ) {\n\n            // If there's string, then get the digits length.\n            // Otherwise return the selected date.\n            return string ? _.digits( string ) : dateObject.date\n        },\n        dd: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected date with a leading zero.\n            return string ? 2 : _.lead( dateObject.date )\n        },\n        ddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the short selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]\n        },\n        dddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the full selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]\n        },\n        m: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the digits\n            // Otherwise return the selected month with 0index compensation.\n            return string ? _.digits( string ) : dateObject.month + 1\n        },\n        mm: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected month with 0index and leading zero.\n            return string ? 2 : _.lead( dateObject.month + 1 )\n        },\n        mmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsShort\n\n            // If there's a string, get length of the relevant month from the short\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        mmmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsFull\n\n            // If there's a string, get length of the relevant month from the full\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        yy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected year by slicing out the first 2 digits.\n            return string ? 2 : ( '' + dateObject.year ).slice( 2 )\n        },\n        yyyy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 4.\n            // Otherwise return the selected year.\n            return string ? 4 : dateObject.year\n        },\n\n        // Create an array by splitting the formatting string passed.\n        toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },\n\n        // Format an object into a string using the formatting options.\n        toString: function ( formatString, itemObject ) {\n            var calendar = this\n            return calendar.formats.toArray( formatString ).map( function( label ) {\n                return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n            }).join( '' )\n        }\n    }\n})() //DatePicker.prototype.formats\n\n\n\n\n/**\n * Check if two date units are the exact.\n */\nDatePicker.prototype.isDateExact = function( one, two ) {\n\n    var calendar = this\n\n    // When we’re working with weekdays, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with date representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return calendar.create( one ).pick === calendar.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two date units overlap.\n */\nDatePicker.prototype.isDateOverlap = function( one, two ) {\n\n    var calendar = this,\n        firstDay = calendar.settings.firstDay ? 1 : 0\n\n    // When we’re working with a weekday index, compare the days.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        one = one % 7 + firstDay\n        return one === calendar.create( two ).day + 1\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        two = two % 7 + firstDay\n        return two === calendar.create( one ).day + 1\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nDatePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of dates as “disabled”.\n */\nDatePicker.prototype.deactivate = function( type, datesToDisable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToDisable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToDisable === false ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToDisable === true ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the dates to disable.\n    else {\n\n        datesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //DatePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of dates as “enabled”.\n */\nDatePicker.prototype.activate = function( type, datesToEnable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToEnable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToEnable === true ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToEnable === false ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled dates.\n    else {\n\n        datesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isExactRange\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isExactRange = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[3] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an exact range of dates,\n            // make sure there are no “inverted” dates because of it.\n            if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //DatePicker.prototype.activate\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nDatePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        calendar = this,\n        settings = calendar.settings,\n        calendarItem = calendar.item,\n        nowObject = calendarItem.now,\n        selectedObject = calendarItem.select,\n        highlightedObject = calendarItem.highlight,\n        viewsetObject = calendarItem.view,\n        disabledCollection = calendarItem.disable,\n        minLimitObject = calendarItem.min,\n        maxLimitObject = calendarItem.max,\n\n\n        // Create the calendar table head using a copy of weekday labels collection.\n        // * We do a copy so we don't mutate the original array.\n        tableHead = (function( collection, fullCollection ) {\n\n            // If the first day should be Monday, move Sunday to the end.\n            if ( settings.firstDay ) {\n                collection.push( collection.shift() )\n                fullCollection.push( fullCollection.shift() )\n            }\n\n            // Create and return the table head group.\n            return _.node(\n                'thead',\n                _.node(\n                    'tr',\n                    _.group({\n                        min: 0,\n                        max: DAYS_IN_WEEK - 1,\n                        i: 1,\n                        node: 'th',\n                        item: function( counter ) {\n                            return [\n                                collection[ counter ],\n                                settings.klass.weekdays,\n                                'scope=col title=\"' + fullCollection[ counter ] + '\"'\n                            ]\n                        }\n                    })\n                )\n            ) //endreturn\n        })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead\n\n\n        // Create the nav for next/prev month.\n        createMonthNav = function( next ) {\n\n            // Otherwise, return the created month tag.\n            return _.node(\n                'div',\n                ' ',\n                settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (\n\n                    // If the focused month is outside the range, disabled the button.\n                    ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||\n                    ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?\n                    ' ' + settings.klass.navDisabled : ''\n                ),\n                'data-nav=' + ( next || -1 ) + ' ' +\n                _.ariaAttr({\n                    role: 'button',\n                    controls: calendar.$node[0].id + '_table'\n                }) + ' ' +\n                'title=\"' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '\"'\n            ) //endreturn\n        }, //createMonthNav\n\n\n        // Create the month label.\n        createMonthLabel = function() {\n\n            var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull\n\n            // If there are months to select, add a dropdown menu.\n            if ( settings.selectMonths ) {\n\n                return _.node( 'select',\n                    _.group({\n                        min: 0,\n                        max: 11,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedMonth ) {\n\n                            return [\n\n                                // The looped month and no classes.\n                                monthsCollection[ loopedMonth ], 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedMonth +\n                                ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +\n                                (\n                                    (\n                                        ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||\n                                        ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )\n                                    ) ?\n                                    ' disabled' : ''\n                                )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectMonth,\n                    ( isOpen ? '' : 'disabled' ) + ' ' +\n                    _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelMonthSelect + '\"'\n                )\n            }\n\n            // If there's a need for a month selector\n            return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )\n        }, //createMonthLabel\n\n\n        // Create the year label.\n        createYearLabel = function() {\n\n            var focusedYear = viewsetObject.year,\n\n            // If years selector is set to a literal \"true\", set it to 5. Otherwise\n            // divide in half to get half before and half after focused year.\n            numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )\n\n            // If there are years to select, add a dropdown menu.\n            if ( numberYears ) {\n\n                var\n                    minYear = minLimitObject.year,\n                    maxYear = maxLimitObject.year,\n                    lowestYear = focusedYear - numberYears,\n                    highestYear = focusedYear + numberYears\n\n                // If the min year is greater than the lowest year, increase the highest year\n                // by the difference and set the lowest year to the min year.\n                if ( minYear > lowestYear ) {\n                    highestYear += minYear - lowestYear\n                    lowestYear = minYear\n                }\n\n                // If the max year is less than the highest year, decrease the lowest year\n                // by the lower of the two: available and needed years. Then set the\n                // highest year to the max year.\n                if ( maxYear < highestYear ) {\n\n                    var availableYears = lowestYear - minYear,\n                        neededYears = highestYear - maxYear\n\n                    lowestYear -= availableYears > neededYears ? neededYears : availableYears\n                    highestYear = maxYear\n                }\n\n                return _.node( 'select',\n                    _.group({\n                        min: lowestYear,\n                        max: highestYear,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedYear ) {\n                            return [\n\n                                // The looped year and no classes.\n                                loopedYear, 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectYear,\n                    ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelYearSelect + '\"'\n                )\n            }\n\n            // Otherwise just return the year focused\n            return _.node( 'div', focusedYear, settings.klass.year )\n        } //createYearLabel\n\n\n    // Create and return the entire calendar.\n    return _.node(\n        'div',\n        ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +\n        createMonthNav() + createMonthNav( 1 ),\n        settings.klass.header\n    ) + _.node(\n        'table',\n        tableHead +\n        _.node(\n            'tbody',\n            _.group({\n                min: 0,\n                max: WEEKS_IN_CALENDAR - 1,\n                i: 1,\n                node: 'tr',\n                item: function( rowCounter ) {\n\n                    // If Monday is the first day and the month starts on Sunday, shift the date back a week.\n                    var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0\n\n                    return [\n                        _.group({\n                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index\n                            max: function() {\n                                return this.min + DAYS_IN_WEEK - 1\n                            },\n                            i: 1,\n                            node: 'td',\n                            item: function( targetDate ) {\n\n                                // Convert the time date from a relative date to a target date.\n                                targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])\n\n                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,\n                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,\n                                    isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,\n                                    formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] )\n\n                                return [\n                                    _.node(\n                                        'div',\n                                        targetDate.date,\n                                        (function( klasses ) {\n\n                                            // Add the `infocus` or `outfocus` classes based on month in view.\n                                            klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )\n\n                                            // Add the `today` class if needed.\n                                            if ( nowObject.pick == targetDate.pick ) {\n                                                klasses.push( settings.klass.now )\n                                            }\n\n                                            // Add the `selected` class if something's selected and the time matches.\n                                            if ( isSelected ) {\n                                                klasses.push( settings.klass.selected )\n                                            }\n\n                                            // Add the `highlighted` class if something's highlighted and the time matches.\n                                            if ( isHighlighted ) {\n                                                klasses.push( settings.klass.highlighted )\n                                            }\n\n                                            // Add the `disabled` class if something's disabled and the object matches.\n                                            if ( isDisabled ) {\n                                                klasses.push( settings.klass.disabled )\n                                            }\n\n                                            return klasses.join( ' ' )\n                                        })([ settings.klass.day ]),\n                                        'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({\n                                            role: 'gridcell',\n                                            label: formattedDate,\n                                            selected: isSelected && calendar.$node.val() === formattedDate ? true : null,\n                                            activedescendant: isHighlighted ? true : null,\n                                            disabled: isDisabled ? true : null\n                                        })\n                                    ),\n                                    '',\n                                    _.ariaAttr({ role: 'presentation' })\n                                ] //endreturn\n                            }\n                        })\n                    ] //endreturn\n                }\n            })\n        ),\n        settings.klass.table,\n        'id=\"' + calendar.$node[0].id + '_table' + '\" ' + _.ariaAttr({\n            role: 'grid',\n            controls: calendar.$node[0].id,\n            readonly: true\n        })\n    ) +\n\n    // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.\n    _.node(\n        'div',\n        _.node( 'button', settings.today, settings.klass.buttonToday,\n            'type=button data-pick=' + nowObject.pick +\n            ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node( 'button', settings.clear, settings.klass.buttonClear,\n            'type=button data-clear=1' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node('button', settings.close, settings.klass.buttonClose,\n            'type=button data-close=true ' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ),\n        settings.klass.footer\n    ) //endreturn\n} //DatePicker.prototype.nodes\n\n\n\n\n/**\n * The date picker defaults.\n */\nDatePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // The title label to use for the month nav buttons\n        labelMonthNext: 'Next month',\n        labelMonthPrev: 'Previous month',\n\n        // The title label to use for the dropdown selectors\n        labelMonthSelect: 'Select a month',\n        labelYearSelect: 'Select a year',\n\n        // Months and weekdays\n        monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n        monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],\n        weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],\n        weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\n        // Today and clear\n        today: 'Today',\n        clear: 'Clear',\n        close: 'Close',\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // The format to show on the `input` element\n        format: 'd mmmm, yyyy',\n\n        // Classes\n        klass: {\n\n            table: prefix + 'table',\n\n            header: prefix + 'header',\n\n            navPrev: prefix + 'nav--prev',\n            navNext: prefix + 'nav--next',\n            navDisabled: prefix + 'nav--disabled',\n\n            month: prefix + 'month',\n            year: prefix + 'year',\n\n            selectMonth: prefix + 'select--month',\n            selectYear: prefix + 'select--year',\n\n            weekdays: prefix + 'weekday',\n\n            day: prefix + 'day',\n            disabled: prefix + 'day--disabled',\n            selected: prefix + 'day--selected',\n            highlighted: prefix + 'day--highlighted',\n            now: prefix + 'day--today',\n            infocus: prefix + 'day--infocus',\n            outfocus: prefix + 'day--outfocus',\n\n            footer: prefix + 'footer',\n\n            buttonClear: prefix + 'button--clear',\n            buttonToday: prefix + 'button--today',\n            buttonClose: prefix + 'button--close'\n        }\n    }\n})( Picker.klasses().picker + '__' )\n\n\n\n\n\n/**\n * Extend the picker to add the date picker.\n */\nPicker.extend( 'pickadate', DatePicker )\n\n\n}));\n\n\n\n"],"sourceRoot":""}