{"version":3,"sources":["bowser.min.js","browser-detect.js","bootstrap.min.js","../../js/bootstrap-select.js","bootstrap-datepicker.min.js","/source/node_modules/browser-pack/_prelude.js","/source/node_modules/bootstrap-validator/dist/validator.min.js","/source/node_modules/moment/moment.js","/source/node_modules/mustache/mustache.js","/source/source/javascript/modules/common.js","/source/source/javascript/main.js","/source/source/javascript/modules/mustache-tmpl.js","/source/source/javascript/modules/custom-event-polyfill.js","/source/main.js","/source/source/javascript/modules/date.js","/source/source/javascript/modules/iconmap.js","/source/source/javascript/modules/page-logic.js","/source/source/javascript/modules/menu.js","/source/source/javascript/modules/search.js","/source/source/javascript/modules/state.js","/source/source/javascript/modules/totop.js","/source/source/javascript/modules/unclick.js"],"names":["$","DISALLOWED_ATTRIBUTES","uriAttrs","DefaultWhitelist","*","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","filter","index","value","RegExp","l","length","sanitizeHtml","unsafeElements","whiteList","sanitizeFn","whitelistKeys","Object","keys","len","elements","querySelectorAll","j","len2","el","elName","indexOf","attributeList","slice","call","attributes","whitelistedAttributes","concat","k","len3","removeAttribute","parentNode","removeChild","document","createElement","view","classListProp","protoProp","elemCtrProto","Element","objCtr","classListGetter","$elem","this","add","classes","Array","prototype","arguments","join","addClass","remove","removeClass","toggle","force","toggleClass","contains","hasClass","defineProperty","classListPropDesc","get","enumerable","configurable","ex","undefined","number","__defineGetter__","window","toString","testElement","classList","_add","DOMTokenList","_remove","forEach","bind","_toggle","token","startsWith","search","TypeError","string","String","stringLength","searchString","searchLength","position","pos","Number","start","Math","min","max","charCodeAt","getSelectedOptions","select","ignoreDisabled","opt","selectedOptions","options","disabled","tagName","push","getSelectValues","multiple","object","$defineProperty","result","error","writable","o","r","hasOwnProperty","HTMLSelectElement","valHooks","useDefault","_set","set","elem","data","apply","changedArguments","EventIsSupported","Event","e","stringSearch","method","normalize","stringTypes","searchSuccess","stringType","replace","normalizeToBase","toUpperCase","toInteger","parseInt","fn","triggerNative","eventName","event","dispatchEvent","bubbles","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","deburredLetters","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","reLatin","reComboMark","deburrLetter","key","map","source","testRegexp","replaceRegexp","htmlEscape","&","<",">","\"","'","`","test","escaper","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","keyCodes","version","success","major","full","dropdown","Constructor","VERSION","split","err","selectId","EVENT_KEY","classNames","DISABLED","DIVIDER","SHOW","DROPUP","MENU","MENURIGHT","MENULEFT","BUTTONCLASS","POPOVERHEADER","ICONBASE","TICKICON","Selector","elementTemplates","subtext","whitespace","createTextNode","fragment","createDocumentFragment","noResults","cloneNode","className","setAttribute","text","checkMark","REGEXP_ARROW","REGEXP_TAB_OR_ESCAPE","generateOption","content","optgroup","nodeType","appendChild","innerHTML","inline","insertAdjacentHTML","useFragment","subtextElement","iconElement","textElement","textContent","icon","iconBase","childNodes","label","display","Selectpicker","element","that","$element","$newElement","$button","$menu","selectpicker","main","current","isSearching","keydown","keyHistory","resetKeyHistory","setTimeout","sizeInfo","title","winPad","windowPadding","val","render","refresh","setStyle","selectAll","deselectAll","destroy","show","hide","init","Plugin","option","args","_option","shift","BootstrapVersion","console","warn","toUpdate","DEFAULTS","style","name","tickIcon","chain","each","$this","is","dataAttributes","dataAttr","config","extend","defaults","template","Function","noneSelectedText","noneResultsText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","virtualScroll","sanitize","constructor","id","form","prop","autofocus","createDropdown","buildData","after","prependTo","children","$menuInner","$searchbox","find","checkDisabled","clickListener","liveSearchListener","focusedParent","setWidth","selectPosition","on","isVirtual","menuInner","emptyMenu","firstChild","replaceChild","scrollTop","hide.bs.dropdown","hidden.bs.dropdown","show.bs.dropdown","shown.bs.dropdown","hasAttribute","off","validity","valid","buildList","multiselectable","inputGroup","parent","drop","searchbox","actionsbox","donebutton","setPositionData","canHighlight","firstHighlightIndex","type","height","dividerHeight","dropdownHeaderHeight","liHeight","posinset","createView","setSize","selected","prevActive","active","selectedIndex","liIndex","selectedData","menuInnerHeight","scroll","chunkSize","chunkCount","firstChunk","lastChunk","currentChunk","prevPositions","positionIsDifferent","previousElements","chunks","menuIsDifferent","ceil","round","endOfChunk","position0","position1","activeIndex","prevActiveIndex","defocusItem","visibleElements","setOptionStatus","array1","array2","every","isEqual","marginTop","marginBottom","menuFragment","toSanitize","visibleElementsLen","elText","elementData","lastChild","sanitized","hasScrollBar","menuInnerInnerWidth","offsetWidth","totalMenuWidth","selectWidth","minWidth","actualMenuWidth","newActive","currentActive","focusItem","updateValue","noScroll","liData","noStyle","setPlaceholder","updateIndex","titleOption","selectTitleOption","titleNotAppended","selectedOption","navigation","performance","getEntriesByType","isNotBackForward","defaultSelected","insertBefore","readyState","addEventListener","displayedValue","optionSelector","mainData","optID","startIndex","selectOptions","addDivider","previousData","addOption","divider","getAttribute","cssText","inlineStyle","optionClass","optgroupClass","trim","tokens","addOptgroup","previous","next","headerIndex","lastIndex","item","selectData","mainElements","widestOptionLength","buildElement","liElement","combinedLength","widestOption","findLis","countMax","placeholderSelected","selectedCount","button","buttonInner","querySelector","titleFragment","hasContent","thisData","titleOptions","totalCount","tr8nText","filterExpand","clone","newStyle","status","buttonClass","newElement","previousElementSibling","nextElementSibling","menu","menuInnerInner","dropdownHeader","actions","firstOption","input","body","scrollBarWidth","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","outerHeight","menuStyle","getComputedStyle","menuWidth","menuPadding","vert","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","horiz","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","menuExtras","marginLeft","marginRight","overflowY","selectHeight","getSelectPosition","containerPos","$window","offset","$container","top","left","selectOffsetTop","selectOffsetBot","selectOffsetLeft","scrollLeft","selectOffsetRight","setMenuSize","isAuto","menuHeight","minHeight","_minHeight","maxHeight","menuInnerMinHeight","estimate","isDropup","divHeight","divLength","dropup","max-height","overflow","min-height","overflow-y","_popper","update","requestAnimationFrame","$selectClone","appendTo","btnWidth","outerWidth","$bsContainer","getPlacement","containerPosition","Default","actualHeight","isDisabled","append","detach","selectedOnly","setDisabled","setSelected","activeIndexIsSet","keepActive","$document","setFocus","checkPopperExists","state","isCreated","keyCode","preventDefault","_menu","hoverLi","parentElement","hoverData","retainActive","clickedData","clickedIndex","prevValue","prevIndex","prevOption","triggerChange","stopPropagation","$option","$optgroup","$optgroupOptions","maxOptionsGrp","focus","maxReached","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","currentTarget","target","tabindex","originalEvent","isTrusted","previousValue","searchValue","searchMatch","q","cache","cacheArr","searchStyle","_searchStyle","normalizeSearch","cacheLen","liPrev","liSelectedIndex","changeAll","previousSelected","currentSelected","isActive","liActive","activeLi","isToggle","closest","$items","updateScroll","downOnTab","which","isArrowKey","lastIndexOf","liActiveIndex","scrollHeight","matches","cancel","clearTimeout","charAt","matchIndex","before","removeData","old","keydownHandler","_dataApiKeydownHandler","noConflict","$selectpicker","jQuery","n","t","f","c","require","Error","exports","1","module","d","_typeof","validators","VALIDATORS","custom","$btn","proxy","onInput","onSubmit","reset","$inputs","INPUT_SELECTOR","FOCUS_OFFSET","delay","html","disable","errors","minlength","feedback","native","checkValidity","validationMessage","not","clearErrors","toggleSubmit","validateInput","done","relatedTarget","isDefaultPrevented","g","runValidators","defer","showErrors","detail","typeMismatch","patternMismatch","stepMismatch","rangeOverflow","rangeUnderflow","valueMissing","h","Deferred","reject","fail","always","resolve","promise","validate","when","then","focusError","animate","empty","hasErrors","isIncomplete","removeAttr","validator","2","global","factory","hookCallback","some","hooks","isArray","isObject","hasOwnProp","isObjectEmpty","obj","getOwnPropertyNames","isUndefined","isNumber","isDate","Date","arr","res","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","to","from","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","stack","deprecations","deprecateSimple","isFunction","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","targetLength","forceSign","absNumber","abs","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","matched","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","M","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","_config","parentLocale","names","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","exec","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","property","objectTest","propertyTest","properties","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","define","amd","moment","tail","substring","mustache","objectToString","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","/","=","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","Context","parentContext",".","Writer","eos","scan","scanUntil","lookup","context","lookupHit","clearCache","parse","tags","openingTagRe","closingTagRe","closingCurlyRe","sections","spaces","hasTag","nonSpace","stripSpace","pop","compileTags","tagsToCompile","chr","openSection","scanner","valueLength","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","self","escape","defaultWriter","to_html","send","Mustache","4","./modules/common.js","./modules/custom-event-polyfill.js","./modules/date.js","./modules/iconmap.js","./modules/menu.js","./modules/mustache-tmpl.js","./modules/page-logic.js","./modules/search.js","./modules/totop.js","bootstrap-validator/dist/validator.min.js","5","Unclick","Common","searchPanelBtnClick","btn","applyText","titleElement","parents","collapse","convertByteSize","unitIndex","copyText","scope","sourceValue","dest","maxLen","click","change","keyup","hideList","exceptArray","eleObj","excepts","registerUnclick","dd_panelBody","closePanel","clickText","panelTitleEle","clickElements","date-validate","MvpFE","globalConfiguration","momentExpectFormatGroups","dateValidateMessage","amount-validate","num","decimal","decimalPlaces","range-validate","addComma","date-age-min","age","rebindFunctions","updateValidator","panelId","targetId","applyColSpan","resize","isCusCheckbox","isInLink","location","newValue","tab","decimalPlace","dotIndex","amountIntPart","insertAttrDivToAmount","nextAll","selector","close","resetRadioActive","setTransTimeRadius","print","insertMoreOptions","eles","maxNum","currEle","siblings","prepend","adjustQuickLinks","quickLinks","links","matchCellHeightTablet","trs","tds","height1","height2","inputFileChange","fileName","files","contentWindow","bindSelectPicker","editMain","checked","ele","newClassName","prevValueDiv","prev","selectBindingListItem","list","listItem","bindCusAccordionClicks","allCollapses","targetSelForHide","me","adjustTableCellHeight","allTables","currTitle","oldHeight","oldText","oldPaddingLeft","oldTextTransform","headerTransform","first","newHeight","TmplData","dataVar","6","convertDataToGroupByLetter","CustomEvent","params","cancelable","evt","initCustomEvent","7","ready","bindDatepicker","modifyPostion","winWidth","leftValue","newLeft","datePickerPlaceholder","disableTouchKeyboard","bowser","msie","pickerWidth","datepicker","datePickerFormat","autoclose","forceParse","eq","momentFormat","8","mapIcons","iconMapObj","9","State","activeMenu","slideDown","slideUp","changeActiveStates","wholePageWrapper","mobileMenuBtn","mobileCloseMenuBtn","mobileMenuList","create","addElement","innerWidth","10","rebindEvents","funcName","sortDataByProp","isEmptyObject","rootProp","sortPropName","firstLetter","newData","groups","group","items","firstLetterNew","createTmplDataFunc","sortProp","rootName","tmplId","setTemplateData","rendered","loadTransToData","loadBpayBillers","loadBpayBillersSearchResult","loadChequeToPayees","loadExternalPayees","loadInstitutionPayee","loadInternationalTransferRecipient","loadInternationalSearchBank","loadExternalTransfer","dataMyAccount","dataPayees","dataBillers","dataPayeesSearch","dataPayeesFormated","payees","okBtnStatus","activeDropDown","tableWidth","panelWidth","overflow-x","selectTransMethodMobile","getToDetails","onclick","hiddenPayidBtn","payidContainers","crn","dataNewBillers","dataNewBillersFormated","cheque","credit","reinvest","transfer","clearHiddenFields","updateOkBtnStatus","showCommonFieldInChequeTab","termValue","listGroup","childrenItems","$allCheckBoxes","hasSelected","selectedItems","newCusSwapSteps","activeStep","dataInstitutionPayee","adjustOverlaySize","innerHeight","overlayWidth","observer","MutationObserver","observe","subtree","hiddenBoxes","hasChecked","parentDiv","dataInternationalSearchBank","targetSelector","hideOtherPane","inputClass","PageLogic","_classCallCheck","_createClass","removingData","approveChangeEle","getElementsByClassName","btnUpdateAccessLevel","btnUpdatePassword","btnDeleteLogin","OnlineLending","elemment","pickNowRemovingData","insertNowRemovingData","cancelAddingNewNow","businessViewpointShowBox","applicantDetailsNavHandler","onlineLendingMaximiseApplicantDetails","action","actionBtns","radioBtns","./common.js","./mustache-tmpl.js","12","timer","delayTime","isInArray","str","removeUnmatchedData","ignoreProps","removed","notmatch","splice","insertNoMatchText","searchResult","root","containerSelector","bindSearchInput","inputSelector","excludeProps","dataVarName","searchResultMyAccount","searchResultPayees","myAccountListItem","13","_changeEvent","initialState","activeClass","inactiveClass","_activeClass","_inactiveClass","_elements","_updateClasses","_isActive","__defineSetter__","nState","_dispatchEvents","_elm","_addClass","_removeClass","14","UItoTop","settings","inDelay","outDelay","containerID","containerHoverID","scrollSpeed","easingType","containerIDhash","containerHoverIDHash","stop","opacity","hover","sd","fadeIn","fadeOut","Outdelay","15","_unclicks","_exceptElems","checkUnclick","targ","_elem","child","node","isDescendant","isInExceptElements","unclickEvent","makeUnclickEvent","cb","exceptElems"],"mappings":"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","file":"main.js","sourcesContent":["/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2015\n */\n!function(e,t,n){typeof module!=\"undefined\"&&module.exports?module.exports=n():typeof define==\"function\"&&define.amd?define(t,n):e[t]=n()}(this,\"bowser\",function(){function t(t){function n(e){var n=t.match(e);return n&&n.length>1&&n[1]||\"\"}function r(e){var n=t.match(e);return n&&n.length>1&&n[2]||\"\"}function C(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return undefined}}var i=n(/(ipod|iphone|ipad)/i).toLowerCase(),o=/like android/i.test(t),u=!o&&/android/i.test(t),a=/nexus\\s*[0-6]\\s*/i.test(t),f=!a&&/nexus\\s*[0-9]+/i.test(t),l=/CrOS/.test(t),c=/silk/i.test(t),h=/sailfish/i.test(t),p=/tizen/i.test(t),d=/(web|hpw)(o|0)s/i.test(t),v=/windows phone/i.test(t),m=/SamsungBrowser/i.test(t),g=!v&&/windows/i.test(t),y=!i&&!c&&/macintosh/i.test(t),b=!u&&!h&&!p&&!d&&/linux/i.test(t),w=r(/edg([ea]|ios)\\/(\\d+(\\.\\d+)?)/i),E=n(/version\\/(\\d+(\\.\\d+)?)/i),S=/tablet/i.test(t)&&!/tablet pc/i.test(t),x=!S&&/[^-]mobi/i.test(t),T=/xbox/i.test(t),N;/opera/i.test(t)?N={name:\"Opera\",opera:e,version:E||n(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)}:/opr\\/|opios/i.test(t)?N={name:\"Opera\",opera:e,version:n(/(?:opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)||E}:/SamsungBrowser/i.test(t)?N={name:\"Samsung Internet for Android\",samsungBrowser:e,version:E||n(/(?:SamsungBrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)}:/Whale/i.test(t)?N={name:\"NAVER Whale browser\",whale:e,version:n(/(?:whale)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/MZBrowser/i.test(t)?N={name:\"MZ Browser\",mzbrowser:e,version:n(/(?:MZBrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/coast/i.test(t)?N={name:\"Opera Coast\",coast:e,version:E||n(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)}:/focus/i.test(t)?N={name:\"Focus\",focus:e,version:n(/(?:focus)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/yabrowser/i.test(t)?N={name:\"Yandex Browser\",yandexbrowser:e,version:E||n(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)}:/ucbrowser/i.test(t)?N={name:\"UC Browser\",ucbrowser:e,version:n(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/mxios/i.test(t)?N={name:\"Maxthon\",maxthon:e,version:n(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/epiphany/i.test(t)?N={name:\"Epiphany\",epiphany:e,version:n(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/puffin/i.test(t)?N={name:\"Puffin\",puffin:e,version:n(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)}:/sleipnir/i.test(t)?N={name:\"Sleipnir\",sleipnir:e,version:n(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:/k-meleon/i.test(t)?N={name:\"K-Meleon\",kMeleon:e,version:n(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)}:v?(N={name:\"Windows Phone\",osname:\"Windows Phone\",windowsphone:e},w?(N.msedge=e,N.version=w):(N.msie=e,N.version=n(/iemobile\\/(\\d+(\\.\\d+)?)/i))):/msie|trident/i.test(t)?N={name:\"Internet Explorer\",msie:e,version:n(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)}:l?N={name:\"Chrome\",osname:\"Chrome OS\",chromeos:e,chromeBook:e,chrome:e,version:n(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)}:/edg([ea]|ios)/i.test(t)?N={name:\"Microsoft Edge\",msedge:e,version:w}:/vivaldi/i.test(t)?N={name:\"Vivaldi\",vivaldi:e,version:n(/vivaldi\\/(\\d+(\\.\\d+)?)/i)||E}:h?N={name:\"Sailfish\",osname:\"Sailfish OS\",sailfish:e,version:n(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)}:/seamonkey\\//i.test(t)?N={name:\"SeaMonkey\",seamonkey:e,version:n(/seamonkey\\/(\\d+(\\.\\d+)?)/i)}:/firefox|iceweasel|fxios/i.test(t)?(N={name:\"Firefox\",firefox:e,version:n(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)},/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(t)&&(N.firefoxos=e,N.osname=\"Firefox OS\")):c?N={name:\"Amazon Silk\",silk:e,version:n(/silk\\/(\\d+(\\.\\d+)?)/i)}:/phantom/i.test(t)?N={name:\"PhantomJS\",phantom:e,version:n(/phantomjs\\/(\\d+(\\.\\d+)?)/i)}:/slimerjs/i.test(t)?N={name:\"SlimerJS\",slimer:e,version:n(/slimerjs\\/(\\d+(\\.\\d+)?)/i)}:/blackberry|\\bbb\\d+/i.test(t)||/rim\\stablet/i.test(t)?N={name:\"BlackBerry\",osname:\"BlackBerry OS\",blackberry:e,version:E||n(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)}:d?(N={name:\"WebOS\",osname:\"WebOS\",webos:e,version:E||n(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)},/touchpad\\//i.test(t)&&(N.touchpad=e)):/bada/i.test(t)?N={name:\"Bada\",osname:\"Bada\",bada:e,version:n(/dolfin\\/(\\d+(\\.\\d+)?)/i)}:p?N={name:\"Tizen\",osname:\"Tizen\",tizen:e,version:n(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i)||E}:/qupzilla/i.test(t)?N={name:\"QupZilla\",qupzilla:e,version:n(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i)||E}:/chromium/i.test(t)?N={name:\"Chromium\",chromium:e,version:n(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i)||E}:/chrome|crios|crmo/i.test(t)?N={name:\"Chrome\",chrome:e,version:n(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)}:u?N={name:\"Android\",version:E}:/safari|applewebkit/i.test(t)?(N={name:\"Safari\",safari:e},E&&(N.version=E)):i?(N={name:i==\"iphone\"?\"iPhone\":i==\"ipad\"?\"iPad\":\"iPod\"},E&&(N.version=E)):/googlebot/i.test(t)?N={name:\"Googlebot\",googlebot:e,version:n(/googlebot\\/(\\d+(\\.\\d+))/i)||E}:N={name:n(/^(.*)\\/(.*) /),version:r(/^(.*)\\/(.*) /)},!N.msedge&&/(apple)?webkit/i.test(t)?(/(apple)?webkit\\/537\\.36/i.test(t)?(N.name=N.name||\"Blink\",N.blink=e):(N.name=N.name||\"Webkit\",N.webkit=e),!N.version&&E&&(N.version=E)):!N.opera&&/gecko\\//i.test(t)&&(N.name=N.name||\"Gecko\",N.gecko=e,N.version=N.version||n(/gecko\\/(\\d+(\\.\\d+)?)/i)),!N.windowsphone&&(u||N.silk)?(N.android=e,N.osname=\"Android\"):!N.windowsphone&&i?(N[i]=e,N.ios=e,N.osname=\"iOS\"):y?(N.mac=e,N.osname=\"macOS\"):T?(N.xbox=e,N.osname=\"Xbox\"):g?(N.windows=e,N.osname=\"Windows\"):b&&(N.linux=e,N.osname=\"Linux\");var k=\"\";N.windows?k=C(n(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i)):N.windowsphone?k=n(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i):N.mac?(k=n(/Mac OS X (\\d+([_\\.\\s]\\d+)*)/i),k=k.replace(/[_\\s]/g,\".\")):i?(k=n(/os (\\d+([_\\s]\\d+)*) like mac os x/i),k=k.replace(/[_\\s]/g,\".\")):u?k=n(/android[ \\/-](\\d+(\\.\\d+)*)/i):N.webos?k=n(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i):N.blackberry?k=n(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i):N.bada?k=n(/bada\\/(\\d+(\\.\\d+)*)/i):N.tizen&&(k=n(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i)),k&&(N.osversion=k);var L=!N.windows&&k.split(\".\")[0];if(S||f||i==\"ipad\"||u&&(L==3||L>=4&&!x)||N.silk)N.tablet=e;else if(x||i==\"iphone\"||i==\"ipod\"||u||a||N.blackberry||N.webos||N.bada)N.mobile=e;return N.msedge||N.msie&&N.version>=10||N.yandexbrowser&&N.version>=15||N.vivaldi&&N.version>=1||N.chrome&&N.version>=20||N.samsungBrowser&&N.version>=4||N.whale&&s([N.version,\"1.0\"])===1||N.mzbrowser&&s([N.version,\"6.0\"])===1||N.focus&&s([N.version,\"1.0\"])===1||N.firefox&&N.version>=20||N.safari&&N.version>=6||N.opera&&N.version>=10||N.ios&&N.osversion&&N.osversion.split(\".\")[0]>=6||N.blackberry&&N.version>=10.1||N.chromium&&N.version>=20?N.a=e:N.msie&&N.version<10||N.chrome&&N.version<20||N.firefox&&N.version<20||N.safari&&N.version<6||N.opera&&N.version<10||N.ios&&N.osversion&&N.osversion.split(\".\")[0]<6||N.chromium&&N.version<20?N.c=e:N.x=e,N}function r(e){return e.split(\".\").length}function i(e,t){var n=[],r;if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r=0){if(n[0][t]>n[1][t])return 1;if(n[0][t]!==n[1][t])return-1;if(t===0)return 0}}function o(e,r,i){var o=n;typeof r==\"string\"&&(i=r,r=void 0),r===void 0&&(r=!1),i&&(o=t(i));var u=\"\"+o.version;for(var a in e)if(e.hasOwnProperty(a)&&o[a]){if(typeof e[a]!=\"string\")throw new Error(\"Browser version in the minVersion map should be a string: \"+a+\": \"+String(e));return s([u,e[a]])<0}return r}function u(e,t,n){return!o(e,t,n)}var e=!0,n=t(typeof navigator!=\"undefined\"?navigator.userAgent||\"\":\"\");return n.test=function(e){for(var t=0;tthis.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),n=o.length;n--;){var s=o[n];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,g.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",r=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+\".\"+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),e.tip().hasClass(\"in\")||\"in\"==e.hoverState)e.hoverState=\"in\";else{if(clearTimeout(e.timeout),e.hoverState=\"in\",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){\"in\"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState=\"out\",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){\"out\"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr(\"id\",n),this.$element.attr(\"aria-describedby\",n),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,r=a.test(s);r&&(s=s.replace(a,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+d>c.bottom?\"top\":\"top\"==s&&l.top-dc.width?\"left\":\"left\"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data(\"bs.\"+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass(\"in\")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data(\"bs.tooltip\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.tooltip\",e=new m(this,i)),\"string\"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){\"use strict\";var s=function(t,e){this.init(\"popover\",t,e)};if(!n.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");s.VERSION=\"3.4.1\",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'

'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===o&&(i=this.sanitizeHtml(i))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===o?\"html\":\"append\"](i)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(i);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data(\"bs.popover\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.popover\",e=new s(this,i)),\"string\"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){\"use strict\";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data(\"bs.scrollspy\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.scrollspy\",e=new n(this,i)),\"string\"==typeof o&&e[o]()})}n.VERSION=\"3.4.1\",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o=\"offset\",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o=\"position\",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data(\"target\")||t.attr(\"href\"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(\":visible\")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active\"),n=i&&r.support.transition&&(o.length&&o.hasClass(\"fade\")||!!e.find(\"> .fade\").length);function s(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),t.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),n?(t[0].offsetWidth,t.addClass(\"in\")):t.removeClass(\"fade\"),t.parent(\".dropdown-menu\").length&&t.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&n?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass(\"in\")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),\"show\")};r(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(l){\"use strict\";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",l.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data(\"bs.affix\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.affix\",e=new h(this,i)),\"string\"==typeof o&&e[o]()})}h.VERSION=\"3.4.1\",h.RESET=\"affix affix-top affix-bottom\",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&\"top\"==this.affixed)return n\r\n if (!String.prototype.startsWith) {\r\n (function () {\r\n 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\r\n var defineProperty = (function () {\r\n // IE 8 only supports `Object.defineProperty` on DOM elements\r\n try {\r\n var object = {};\r\n var $defineProperty = Object.defineProperty;\r\n var result = $defineProperty(object, object, object) && $defineProperty;\r\n } catch (error) {\r\n }\r\n return result;\r\n }());\r\n var toString = {}.toString;\r\n var startsWith = function (search) {\r\n if (this == null) {\r\n throw new TypeError();\r\n }\r\n var string = String(this);\r\n if (search && toString.call(search) == '[object RegExp]') {\r\n throw new TypeError();\r\n }\r\n var stringLength = string.length;\r\n var searchString = String(search);\r\n var searchLength = searchString.length;\r\n var position = arguments.length > 1 ? arguments[1] : undefined;\r\n // `ToInteger`\r\n var pos = position ? Number(position) : 0;\r\n if (pos != pos) { // better `isNaN`\r\n pos = 0;\r\n }\r\n var start = Math.min(Math.max(pos, 0), stringLength);\r\n // Avoid the `indexOf` call if no match is possible\r\n if (searchLength + start > stringLength) {\r\n return false;\r\n }\r\n var index = -1;\r\n while (++index < searchLength) {\r\n if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n if (defineProperty) {\r\n defineProperty(String.prototype, 'startsWith', {\r\n 'value': startsWith,\r\n 'configurable': true,\r\n 'writable': true\r\n });\r\n } else {\r\n String.prototype.startsWith = startsWith;\r\n }\r\n }());\r\n }\r\n\r\n if (!Object.keys) {\r\n Object.keys = function (\r\n o, // object\r\n k, // key\r\n r // result array\r\n ) {\r\n // initialize object and result\r\n r = [];\r\n // iterate over object keys\r\n for (k in o) {\r\n // fill result array with non-prototypical keys\r\n r.hasOwnProperty.call(o, k) && r.push(k);\r\n }\r\n // return result\r\n return r;\r\n };\r\n }\r\n\r\n if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {\r\n Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {\r\n get: function () {\r\n return this.querySelectorAll(':checked');\r\n }\r\n });\r\n }\r\n\r\n function getSelectedOptions (select, ignoreDisabled) {\r\n var selectedOptions = select.selectedOptions,\r\n options = [],\r\n opt;\r\n\r\n if (ignoreDisabled) {\r\n for (var i = 0, len = selectedOptions.length; i < len; i++) {\r\n opt = selectedOptions[i];\r\n\r\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\r\n options.push(opt);\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n return selectedOptions;\r\n }\r\n\r\n // much faster than $.val()\r\n function getSelectValues (select, selectedOptions) {\r\n var value = [],\r\n options = selectedOptions || select.selectedOptions,\r\n opt;\r\n\r\n for (var i = 0, len = options.length; i < len; i++) {\r\n opt = options[i];\r\n\r\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\r\n value.push(opt.value);\r\n }\r\n }\r\n\r\n if (!select.multiple) {\r\n return !value.length ? null : value[0];\r\n }\r\n\r\n return value;\r\n }\r\n\r\n // set data-selected on select element if the value has been programmatically selected\r\n // prior to initialization of bootstrap-select\r\n // * consider removing or replacing an alternative method *\r\n var valHooks = {\r\n useDefault: false,\r\n _set: $.valHooks.select.set\r\n };\r\n\r\n $.valHooks.select.set = function (elem, value) {\r\n if (value && !valHooks.useDefault) $(elem).data('selected', true);\r\n\r\n return valHooks._set.apply(this, arguments);\r\n };\r\n\r\n var changedArguments = null;\r\n\r\n var EventIsSupported = (function () {\r\n try {\r\n new Event('change');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n })();\r\n\r\n $.fn.triggerNative = function (eventName) {\r\n var el = this[0],\r\n event;\r\n\r\n if (el.dispatchEvent) { // for modern browsers & IE9+\r\n if (EventIsSupported) {\r\n // For modern browsers\r\n event = new Event(eventName, {\r\n bubbles: true\r\n });\r\n } else {\r\n // For IE since it doesn't support Event constructor\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, false);\r\n }\r\n\r\n el.dispatchEvent(event);\r\n } else if (el.fireEvent) { // for IE8\r\n event = document.createEventObject();\r\n event.eventType = eventName;\r\n el.fireEvent('on' + eventName, event);\r\n } else {\r\n // fall back to jQuery.trigger\r\n this.trigger(eventName);\r\n }\r\n };\r\n // \r\n\r\n function stringSearch (li, searchString, method, normalize) {\r\n var stringTypes = [\r\n 'display',\r\n 'subtext',\r\n 'tokens'\r\n ],\r\n searchSuccess = false;\r\n\r\n for (var i = 0; i < stringTypes.length; i++) {\r\n var stringType = stringTypes[i],\r\n string = li[stringType];\r\n\r\n if (string) {\r\n string = string.toString();\r\n\r\n // Strip HTML tags. This isn't perfect, but it's much faster than any other method\r\n if (stringType === 'display') {\r\n string = string.replace(/<[^>]+>/g, '');\r\n }\r\n\r\n if (normalize) string = normalizeToBase(string);\r\n string = string.toUpperCase();\r\n\r\n if (method === 'contains') {\r\n searchSuccess = string.indexOf(searchString) >= 0;\r\n } else {\r\n searchSuccess = string.startsWith(searchString);\r\n }\r\n\r\n if (searchSuccess) break;\r\n }\r\n }\r\n\r\n return searchSuccess;\r\n }\r\n\r\n function toInteger (value) {\r\n return parseInt(value, 10) || 0;\r\n }\r\n\r\n // Borrowed from Lodash (_.deburr)\r\n /** Used to map Latin Unicode letters to basic Latin letters. */\r\n var deburredLetters = {\r\n // Latin-1 Supplement block.\r\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\r\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\r\n '\\xc7': 'C', '\\xe7': 'c',\r\n '\\xd0': 'D', '\\xf0': 'd',\r\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\r\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\r\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\r\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\r\n '\\xd1': 'N', '\\xf1': 'n',\r\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\r\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\r\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\r\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\r\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\r\n '\\xc6': 'Ae', '\\xe6': 'ae',\r\n '\\xde': 'Th', '\\xfe': 'th',\r\n '\\xdf': 'ss',\r\n // Latin Extended-A block.\r\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\r\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\r\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\r\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\r\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\r\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\r\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\r\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\r\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\r\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\r\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\r\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\r\n '\\u0134': 'J', '\\u0135': 'j',\r\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\r\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\r\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\r\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\r\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\r\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\r\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\r\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\r\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\r\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\r\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\r\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\r\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\r\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\r\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\r\n '\\u0174': 'W', '\\u0175': 'w',\r\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\r\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\r\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\r\n '\\u0132': 'IJ', '\\u0133': 'ij',\r\n '\\u0152': 'Oe', '\\u0153': 'oe',\r\n '\\u0149': \"'n\", '\\u017f': 's'\r\n };\r\n\r\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\r\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\r\n\r\n /** Used to compose unicode character classes. */\r\n var rsComboMarksRange = '\\\\u0300-\\\\u036f',\r\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\r\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\r\n rsComboMarksExtendedRange = '\\\\u1ab0-\\\\u1aff',\r\n rsComboMarksSupplementRange = '\\\\u1dc0-\\\\u1dff',\r\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;\r\n\r\n /** Used to compose unicode capture groups. */\r\n var rsCombo = '[' + rsComboRange + ']';\r\n\r\n /**\r\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\r\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\r\n */\r\n var reComboMark = RegExp(rsCombo, 'g');\r\n\r\n function deburrLetter (key) {\r\n return deburredLetters[key];\r\n };\r\n\r\n function normalizeToBase (string) {\r\n string = string.toString();\r\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\r\n }\r\n\r\n // List of HTML entities for escaping.\r\n var escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n };\r\n\r\n // Functions for escaping and unescaping strings to/from HTML interpolation.\r\n var createEscaper = function (map) {\r\n var escaper = function (match) {\r\n return map[match];\r\n };\r\n // Regexes for identifying a key that needs to be escaped.\r\n var source = '(?:' + Object.keys(map).join('|') + ')';\r\n var testRegexp = RegExp(source);\r\n var replaceRegexp = RegExp(source, 'g');\r\n return function (string) {\r\n string = string == null ? '' : '' + string;\r\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\r\n };\r\n };\r\n\r\n var htmlEscape = createEscaper(escapeMap);\r\n\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Constants\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n var keyCodeMap = {\r\n 32: ' ',\r\n 48: '0',\r\n 49: '1',\r\n 50: '2',\r\n 51: '3',\r\n 52: '4',\r\n 53: '5',\r\n 54: '6',\r\n 55: '7',\r\n 56: '8',\r\n 57: '9',\r\n 59: ';',\r\n 65: 'A',\r\n 66: 'B',\r\n 67: 'C',\r\n 68: 'D',\r\n 69: 'E',\r\n 70: 'F',\r\n 71: 'G',\r\n 72: 'H',\r\n 73: 'I',\r\n 74: 'J',\r\n 75: 'K',\r\n 76: 'L',\r\n 77: 'M',\r\n 78: 'N',\r\n 79: 'O',\r\n 80: 'P',\r\n 81: 'Q',\r\n 82: 'R',\r\n 83: 'S',\r\n 84: 'T',\r\n 85: 'U',\r\n 86: 'V',\r\n 87: 'W',\r\n 88: 'X',\r\n 89: 'Y',\r\n 90: 'Z',\r\n 96: '0',\r\n 97: '1',\r\n 98: '2',\r\n 99: '3',\r\n 100: '4',\r\n 101: '5',\r\n 102: '6',\r\n 103: '7',\r\n 104: '8',\r\n 105: '9'\r\n };\r\n\r\n var keyCodes = {\r\n ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key\r\n ENTER: 13, // KeyboardEvent.which value for Enter key\r\n SPACE: 32, // KeyboardEvent.which value for space key\r\n TAB: 9, // KeyboardEvent.which value for tab key\r\n ARROW_UP: 38, // KeyboardEvent.which value for up arrow key\r\n ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key\r\n }\r\n\r\n var version = {\r\n success: false,\r\n major: '3'\r\n };\r\n\r\n try {\r\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\r\n version.major = version.full[0];\r\n version.success = true;\r\n } catch (err) {\r\n // do nothing\r\n }\r\n\r\n var selectId = 0;\r\n\r\n var EVENT_KEY = '.bs.select';\r\n\r\n var classNames = {\r\n DISABLED: 'disabled',\r\n DIVIDER: 'divider',\r\n SHOW: 'open',\r\n DROPUP: 'dropup',\r\n MENU: 'dropdown-menu',\r\n MENURIGHT: 'dropdown-menu-right',\r\n MENULEFT: 'dropdown-menu-left',\r\n // to-do: replace with more advanced template/customization options\r\n BUTTONCLASS: 'btn-default',\r\n POPOVERHEADER: 'popover-title',\r\n ICONBASE: 'glyphicon',\r\n TICKICON: 'glyphicon-ok'\r\n }\r\n\r\n var Selector = {\r\n MENU: '.' + classNames.MENU\r\n }\r\n\r\n var elementTemplates = {\r\n div: document.createElement('div'),\r\n span: document.createElement('span'),\r\n i: document.createElement('i'),\r\n subtext: document.createElement('small'),\r\n a: document.createElement('a'),\r\n li: document.createElement('li'),\r\n whitespace: document.createTextNode('\\u00A0'),\r\n fragment: document.createDocumentFragment()\r\n }\r\n\r\n elementTemplates.noResults = elementTemplates.li.cloneNode(false);\r\n elementTemplates.noResults.className = 'no-results';\r\n\r\n elementTemplates.a.setAttribute('role', 'option');\r\n elementTemplates.a.className = 'dropdown-item';\r\n\r\n elementTemplates.subtext.className = 'text-muted';\r\n\r\n elementTemplates.text = elementTemplates.span.cloneNode(false);\r\n elementTemplates.text.className = 'text';\r\n\r\n elementTemplates.checkMark = elementTemplates.span.cloneNode(false);\r\n\r\n var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);\r\n var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);\r\n\r\n var generateOption = {\r\n li: function (content, classes, optgroup) {\r\n var li = elementTemplates.li.cloneNode(false);\r\n\r\n if (content) {\r\n if (content.nodeType === 1 || content.nodeType === 11) {\r\n li.appendChild(content);\r\n } else {\r\n li.innerHTML = content;\r\n }\r\n }\r\n\r\n if (typeof classes !== 'undefined' && classes !== '') li.className = classes;\r\n if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);\r\n\r\n return li;\r\n },\r\n\r\n a: function (text, classes, inline) {\r\n var a = elementTemplates.a.cloneNode(true);\r\n\r\n if (text) {\r\n if (text.nodeType === 11) {\r\n a.appendChild(text);\r\n } else {\r\n a.insertAdjacentHTML('beforeend', text);\r\n }\r\n }\r\n\r\n if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\\s+/));\r\n if (inline) a.setAttribute('style', inline);\r\n\r\n return a;\r\n },\r\n\r\n text: function (options, useFragment) {\r\n var textElement = elementTemplates.text.cloneNode(false),\r\n subtextElement,\r\n iconElement;\r\n\r\n if (options.content) {\r\n textElement.innerHTML = options.content;\r\n } else {\r\n textElement.textContent = options.text;\r\n\r\n if (options.icon) {\r\n var whitespace = elementTemplates.whitespace.cloneNode(false);\r\n\r\n // need to use for icons in the button to prevent a breaking change\r\n // note: switch to span in next major release\r\n iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);\r\n iconElement.className = this.options.iconBase + ' ' + options.icon;\r\n\r\n elementTemplates.fragment.appendChild(iconElement);\r\n elementTemplates.fragment.appendChild(whitespace);\r\n }\r\n\r\n if (options.subtext) {\r\n subtextElement = elementTemplates.subtext.cloneNode(false);\r\n subtextElement.textContent = options.subtext;\r\n textElement.appendChild(subtextElement);\r\n }\r\n }\r\n\r\n if (useFragment === true) {\r\n while (textElement.childNodes.length > 0) {\r\n elementTemplates.fragment.appendChild(textElement.childNodes[0]);\r\n }\r\n } else {\r\n elementTemplates.fragment.appendChild(textElement);\r\n }\r\n\r\n return elementTemplates.fragment;\r\n },\r\n\r\n label: function (options) {\r\n var textElement = elementTemplates.text.cloneNode(false),\r\n subtextElement,\r\n iconElement;\r\n\r\n textElement.innerHTML = options.display;\r\n\r\n if (options.icon) {\r\n var whitespace = elementTemplates.whitespace.cloneNode(false);\r\n\r\n iconElement = elementTemplates.span.cloneNode(false);\r\n iconElement.className = this.options.iconBase + ' ' + options.icon;\r\n\r\n elementTemplates.fragment.appendChild(iconElement);\r\n elementTemplates.fragment.appendChild(whitespace);\r\n }\r\n\r\n if (options.subtext) {\r\n subtextElement = elementTemplates.subtext.cloneNode(false);\r\n subtextElement.textContent = options.subtext;\r\n textElement.appendChild(subtextElement);\r\n }\r\n\r\n elementTemplates.fragment.appendChild(textElement);\r\n\r\n return elementTemplates.fragment;\r\n }\r\n }\r\n\r\n function showNoResults (searchMatch, searchValue) {\r\n if (!searchMatch.length) {\r\n elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '\"' + htmlEscape(searchValue) + '\"');\r\n this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);\r\n }\r\n }\r\n\r\n var Selectpicker = function (element, options) {\r\n var that = this;\r\n\r\n // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\r\n if (!valHooks.useDefault) {\r\n $.valHooks.select.set = valHooks._set;\r\n valHooks.useDefault = true;\r\n }\r\n\r\n this.$element = $(element);\r\n this.$newElement = null;\r\n this.$button = null;\r\n this.$menu = null;\r\n this.options = options;\r\n this.selectpicker = {\r\n main: {},\r\n search: {},\r\n current: {}, // current changes if a search is in progress\r\n view: {},\r\n isSearching: false,\r\n keydown: {\r\n keyHistory: '',\r\n resetKeyHistory: {\r\n start: function () {\r\n return setTimeout(function () {\r\n that.selectpicker.keydown.keyHistory = '';\r\n }, 800);\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.sizeInfo = {};\r\n\r\n // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\r\n // data-attribute)\r\n if (this.options.title === null) {\r\n this.options.title = this.$element.attr('title');\r\n }\r\n\r\n // Format window padding\r\n var winPad = this.options.windowPadding;\r\n if (typeof winPad === 'number') {\r\n this.options.windowPadding = [winPad, winPad, winPad, winPad];\r\n }\r\n\r\n // Expose public methods\r\n this.val = Selectpicker.prototype.val;\r\n this.render = Selectpicker.prototype.render;\r\n this.refresh = Selectpicker.prototype.refresh;\r\n this.setStyle = Selectpicker.prototype.setStyle;\r\n this.selectAll = Selectpicker.prototype.selectAll;\r\n this.deselectAll = Selectpicker.prototype.deselectAll;\r\n this.destroy = Selectpicker.prototype.destroy;\r\n this.remove = Selectpicker.prototype.remove;\r\n this.show = Selectpicker.prototype.show;\r\n this.hide = Selectpicker.prototype.hide;\r\n\r\n this.init();\r\n };\r\n\r\n Selectpicker.VERSION = '1.13.18';\r\n\r\n // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\r\n Selectpicker.DEFAULTS = {\r\n noneSelectedText: 'Nothing selected',\r\n noneResultsText: 'No results matched {0}',\r\n countSelectedText: function (numSelected, numTotal) {\r\n return (numSelected == 1) ? '{0} item selected' : '{0} items selected';\r\n },\r\n maxOptionsText: function (numAll, numGroup) {\r\n return [\r\n (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',\r\n (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'\r\n ];\r\n },\r\n selectAllText: 'Select All',\r\n deselectAllText: 'Deselect All',\r\n doneButton: false,\r\n doneButtonText: 'Close',\r\n multipleSeparator: ', ',\r\n styleBase: 'btn',\r\n style: classNames.BUTTONCLASS,\r\n size: 'auto',\r\n title: null,\r\n selectedTextFormat: 'values',\r\n width: false,\r\n container: false,\r\n hideDisabled: false,\r\n showSubtext: false,\r\n showIcon: true,\r\n showContent: true,\r\n dropupAuto: true,\r\n header: false,\r\n liveSearch: false,\r\n liveSearchPlaceholder: null,\r\n liveSearchNormalize: false,\r\n liveSearchStyle: 'contains',\r\n actionsBox: false,\r\n iconBase: classNames.ICONBASE,\r\n tickIcon: classNames.TICKICON,\r\n showTick: false,\r\n template: {\r\n caret: ''\r\n },\r\n maxOptions: false,\r\n mobile: false,\r\n selectOnTab: false,\r\n dropdownAlignRight: false,\r\n windowPadding: 0,\r\n virtualScroll: 600,\r\n display: false,\r\n sanitize: true,\r\n sanitizeFn: null,\r\n whiteList: DefaultWhitelist\r\n };\r\n\r\n Selectpicker.prototype = {\r\n\r\n constructor: Selectpicker,\r\n\r\n init: function () {\r\n var that = this,\r\n id = this.$element.attr('id'),\r\n element = this.$element[0],\r\n form = element.form;\r\n\r\n selectId++;\r\n this.selectId = 'bs-select-' + selectId;\r\n\r\n element.classList.add('bs-select-hidden');\r\n\r\n this.multiple = this.$element.prop('multiple');\r\n this.autofocus = this.$element.prop('autofocus');\r\n\r\n if (element.classList.contains('show-tick')) {\r\n this.options.showTick = true;\r\n }\r\n\r\n this.$newElement = this.createDropdown();\r\n this.buildData();\r\n this.$element\r\n .after(this.$newElement)\r\n .prependTo(this.$newElement);\r\n\r\n // ensure select is associated with form element if it got unlinked after moving it inside newElement\r\n if (form && element.form === null) {\r\n if (!form.id) form.id = 'form-' + this.selectId;\r\n element.setAttribute('form', form.id);\r\n }\r\n\r\n this.$button = this.$newElement.children('button');\r\n this.$menu = this.$newElement.children(Selector.MENU);\r\n this.$menuInner = this.$menu.children('.inner');\r\n this.$searchbox = this.$menu.find('input');\r\n\r\n element.classList.remove('bs-select-hidden');\r\n\r\n if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);\r\n\r\n if (typeof id !== 'undefined') {\r\n this.$button.attr('data-id', id);\r\n }\r\n\r\n this.checkDisabled();\r\n this.clickListener();\r\n\r\n if (this.options.liveSearch) {\r\n this.liveSearchListener();\r\n this.focusedParent = this.$searchbox[0];\r\n } else {\r\n this.focusedParent = this.$menuInner[0];\r\n }\r\n\r\n this.setStyle();\r\n this.render();\r\n this.setWidth();\r\n if (this.options.container) {\r\n this.selectPosition();\r\n } else {\r\n this.$element.on('hide' + EVENT_KEY, function () {\r\n if (that.isVirtual()) {\r\n // empty menu on close\r\n var menuInner = that.$menuInner[0],\r\n emptyMenu = menuInner.firstChild.cloneNode(false);\r\n\r\n // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''\r\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\r\n menuInner.scrollTop = 0;\r\n }\r\n });\r\n }\r\n this.$menu.data('this', this);\r\n this.$newElement.data('this', this);\r\n if (this.options.mobile) this.mobile();\r\n\r\n this.$newElement.on({\r\n 'hide.bs.dropdown': function (e) {\r\n that.$element.trigger('hide' + EVENT_KEY, e);\r\n },\r\n 'hidden.bs.dropdown': function (e) {\r\n that.$element.trigger('hidden' + EVENT_KEY, e);\r\n },\r\n 'show.bs.dropdown': function (e) {\r\n that.$element.trigger('show' + EVENT_KEY, e);\r\n },\r\n 'shown.bs.dropdown': function (e) {\r\n that.$element.trigger('shown' + EVENT_KEY, e);\r\n }\r\n });\r\n\r\n if (element.hasAttribute('required')) {\r\n this.$element.on('invalid' + EVENT_KEY, function () {\r\n that.$button[0].classList.add('bs-invalid');\r\n\r\n that.$element\r\n .on('shown' + EVENT_KEY + '.invalid', function () {\r\n that.$element\r\n .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\r\n .off('shown' + EVENT_KEY + '.invalid');\r\n })\r\n .on('rendered' + EVENT_KEY, function () {\r\n // if select is no longer invalid, remove the bs-invalid class\r\n if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');\r\n that.$element.off('rendered' + EVENT_KEY);\r\n });\r\n\r\n that.$button.on('blur' + EVENT_KEY, function () {\r\n that.$element.trigger('focus').trigger('blur');\r\n that.$button.off('blur' + EVENT_KEY);\r\n });\r\n });\r\n }\r\n\r\n setTimeout(function () {\r\n that.buildList();\r\n that.$element.trigger('loaded' + EVENT_KEY);\r\n });\r\n },\r\n\r\n createDropdown: function () {\r\n // Options\r\n // If we are multiple or showTick option is set, then add the show-tick class\r\n var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',\r\n multiselectable = this.multiple ? ' aria-multiselectable=\"true\"' : '',\r\n inputGroup = '',\r\n autofocus = this.autofocus ? ' autofocus' : '';\r\n\r\n if (version.major < 4 && this.$element.parent().hasClass('input-group')) {\r\n inputGroup = ' input-group-btn';\r\n }\r\n\r\n // Elements\r\n var drop,\r\n header = '',\r\n searchbox = '',\r\n actionsbox = '',\r\n donebutton = '';\r\n\r\n if (this.options.header) {\r\n header =\r\n '
' +\r\n '' +\r\n this.options.header +\r\n '
';\r\n }\r\n\r\n if (this.options.liveSearch) {\r\n searchbox =\r\n '
' +\r\n '' +\r\n '
';\r\n }\r\n\r\n if (this.multiple && this.options.actionsBox) {\r\n actionsbox =\r\n '
' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
';\r\n }\r\n\r\n if (this.multiple && this.options.doneButton) {\r\n donebutton =\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
';\r\n }\r\n\r\n drop =\r\n '
' +\r\n '' +\r\n '
' +\r\n header +\r\n searchbox +\r\n actionsbox +\r\n '
' +\r\n '
    ' +\r\n '
' +\r\n '
' +\r\n donebutton +\r\n '
' +\r\n '
';\r\n\r\n return $(drop);\r\n },\r\n\r\n setPositionData: function () {\r\n this.selectpicker.view.canHighlight = [];\r\n this.selectpicker.view.size = 0;\r\n this.selectpicker.view.firstHighlightIndex = false;\r\n\r\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\r\n var li = this.selectpicker.current.data[i],\r\n canHighlight = true;\r\n\r\n if (li.type === 'divider') {\r\n canHighlight = false;\r\n li.height = this.sizeInfo.dividerHeight;\r\n } else if (li.type === 'optgroup-label') {\r\n canHighlight = false;\r\n li.height = this.sizeInfo.dropdownHeaderHeight;\r\n } else {\r\n li.height = this.sizeInfo.liHeight;\r\n }\r\n\r\n if (li.disabled) canHighlight = false;\r\n\r\n this.selectpicker.view.canHighlight.push(canHighlight);\r\n\r\n if (canHighlight) {\r\n this.selectpicker.view.size++;\r\n li.posinset = this.selectpicker.view.size;\r\n if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i;\r\n }\r\n\r\n li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;\r\n }\r\n },\r\n\r\n isVirtual: function () {\r\n return (this.options.virtualScroll !== false) && (this.selectpicker.main.elements.length >= this.options.virtualScroll) || this.options.virtualScroll === true;\r\n },\r\n\r\n createView: function (isSearching, setSize, refresh) {\r\n var that = this,\r\n scrollTop = 0,\r\n active = [],\r\n selected,\r\n prevActive;\r\n\r\n this.selectpicker.isSearching = isSearching;\r\n this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;\r\n\r\n this.setPositionData();\r\n\r\n if (setSize) {\r\n if (refresh) {\r\n scrollTop = this.$menuInner[0].scrollTop;\r\n } else if (!that.multiple) {\r\n var element = that.$element[0],\r\n selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\r\n\r\n if (typeof selectedIndex === 'number' && that.options.size !== false) {\r\n var selectedData = that.selectpicker.main.data[selectedIndex],\r\n position = selectedData && selectedData.position;\r\n\r\n if (position) {\r\n scrollTop = position - ((that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n scroll(scrollTop, true);\r\n\r\n this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {\r\n if (!that.noScroll) scroll(this.scrollTop, updateValue);\r\n that.noScroll = false;\r\n });\r\n\r\n function scroll (scrollTop, init) {\r\n var size = that.selectpicker.current.elements.length,\r\n chunks = [],\r\n chunkSize,\r\n chunkCount,\r\n firstChunk,\r\n lastChunk,\r\n currentChunk,\r\n prevPositions,\r\n positionIsDifferent,\r\n previousElements,\r\n menuIsDifferent = true,\r\n isVirtual = that.isVirtual();\r\n\r\n that.selectpicker.view.scrollTop = scrollTop;\r\n\r\n chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk\r\n chunkCount = Math.round(size / chunkSize) || 1; // number of chunks\r\n\r\n for (var i = 0; i < chunkCount; i++) {\r\n var endOfChunk = (i + 1) * chunkSize;\r\n\r\n if (i === chunkCount - 1) {\r\n endOfChunk = size;\r\n }\r\n\r\n chunks[i] = [\r\n (i) * chunkSize + (!i ? 0 : 1),\r\n endOfChunk\r\n ];\r\n\r\n if (!size) break;\r\n\r\n if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {\r\n currentChunk = i;\r\n }\r\n }\r\n\r\n if (currentChunk === undefined) currentChunk = 0;\r\n\r\n prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1];\r\n\r\n // always display previous, current, and next chunks\r\n firstChunk = Math.max(0, currentChunk - 1);\r\n lastChunk = Math.min(chunkCount - 1, currentChunk + 1);\r\n\r\n that.selectpicker.view.position0 = isVirtual === false ? 0 : (Math.max(0, chunks[firstChunk][0]) || 0);\r\n that.selectpicker.view.position1 = isVirtual === false ? size : (Math.min(size, chunks[lastChunk][1]) || 0);\r\n\r\n positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;\r\n\r\n if (that.activeIndex !== undefined) {\r\n prevActive = that.selectpicker.main.elements[that.prevActiveIndex];\r\n active = that.selectpicker.main.elements[that.activeIndex];\r\n selected = that.selectpicker.main.elements[that.selectedIndex];\r\n\r\n if (init) {\r\n if (that.activeIndex !== that.selectedIndex) {\r\n that.defocusItem(active);\r\n }\r\n that.activeIndex = undefined;\r\n }\r\n\r\n if (that.activeIndex && that.activeIndex !== that.selectedIndex) {\r\n that.defocusItem(selected);\r\n }\r\n }\r\n\r\n if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {\r\n that.defocusItem(prevActive);\r\n }\r\n\r\n if (init || positionIsDifferent) {\r\n previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];\r\n\r\n if (isVirtual === false) {\r\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements;\r\n } else {\r\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);\r\n }\r\n\r\n that.setOptionStatus();\r\n\r\n // if searching, check to make sure the list has actually been updated before updating DOM\r\n // this prevents unnecessary repaints\r\n if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements);\r\n\r\n // if virtual scroll is disabled and not searching,\r\n // menu should never need to be updated more than once\r\n if ((init || isVirtual === true) && menuIsDifferent) {\r\n var menuInner = that.$menuInner[0],\r\n menuFragment = document.createDocumentFragment(),\r\n emptyMenu = menuInner.firstChild.cloneNode(false),\r\n marginTop,\r\n marginBottom,\r\n elements = that.selectpicker.view.visibleElements,\r\n toSanitize = [];\r\n\r\n // replace the existing UL with an empty one - this is faster than $.empty()\r\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\r\n\r\n for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {\r\n var element = elements[i],\r\n elText,\r\n elementData;\r\n\r\n if (that.options.sanitize) {\r\n elText = element.lastChild;\r\n\r\n if (elText) {\r\n elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];\r\n\r\n if (elementData && elementData.content && !elementData.sanitized) {\r\n toSanitize.push(elText);\r\n elementData.sanitized = true;\r\n }\r\n }\r\n }\r\n\r\n menuFragment.appendChild(element);\r\n }\r\n\r\n if (that.options.sanitize && toSanitize.length) {\r\n sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);\r\n }\r\n\r\n if (isVirtual === true) {\r\n marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position);\r\n marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position);\r\n\r\n menuInner.firstChild.style.marginTop = marginTop + 'px';\r\n menuInner.firstChild.style.marginBottom = marginBottom + 'px';\r\n } else {\r\n menuInner.firstChild.style.marginTop = 0;\r\n menuInner.firstChild.style.marginBottom = 0;\r\n }\r\n\r\n menuInner.firstChild.appendChild(menuFragment);\r\n\r\n // if an option is encountered that is wider than the current menu width, update the menu width accordingly\r\n // switch to ResizeObserver with increased browser support\r\n if (isVirtual === true && that.sizeInfo.hasScrollBar) {\r\n var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;\r\n\r\n if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {\r\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\r\n } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {\r\n // set to 0 to get actual width of menu\r\n that.$menu[0].style.minWidth = 0;\r\n\r\n var actualMenuWidth = menuInner.firstChild.offsetWidth;\r\n\r\n if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {\r\n that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;\r\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\r\n }\r\n\r\n // reset to default CSS styling\r\n that.$menu[0].style.minWidth = '';\r\n }\r\n }\r\n }\r\n }\r\n\r\n that.prevActiveIndex = that.activeIndex;\r\n\r\n if (!that.options.liveSearch) {\r\n that.$menuInner.trigger('focus');\r\n } else if (isSearching && init) {\r\n var index = 0,\r\n newActive;\r\n\r\n if (!that.selectpicker.view.canHighlight[index]) {\r\n index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);\r\n }\r\n\r\n newActive = that.selectpicker.view.visibleElements[index];\r\n\r\n that.defocusItem(that.selectpicker.view.currentActive);\r\n\r\n that.activeIndex = (that.selectpicker.current.data[index] || {}).index;\r\n\r\n that.focusItem(newActive);\r\n }\r\n }\r\n\r\n $(window)\r\n .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView')\r\n .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {\r\n var isActive = that.$newElement.hasClass(classNames.SHOW);\r\n\r\n if (isActive) scroll(that.$menuInner[0].scrollTop);\r\n });\r\n },\r\n\r\n focusItem: function (li, liData, noStyle) {\r\n if (li) {\r\n liData = liData || this.selectpicker.main.data[this.activeIndex];\r\n var a = li.firstChild;\r\n\r\n if (a) {\r\n a.setAttribute('aria-setsize', this.selectpicker.view.size);\r\n a.setAttribute('aria-posinset', liData.posinset);\r\n\r\n if (noStyle !== true) {\r\n this.focusedParent.setAttribute('aria-activedescendant', a.id);\r\n li.classList.add('active');\r\n a.classList.add('active');\r\n }\r\n }\r\n }\r\n },\r\n\r\n defocusItem: function (li) {\r\n if (li) {\r\n li.classList.remove('active');\r\n if (li.firstChild) li.firstChild.classList.remove('active');\r\n }\r\n },\r\n\r\n setPlaceholder: function () {\r\n var that = this,\r\n updateIndex = false;\r\n\r\n if (this.options.title && !this.multiple) {\r\n if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option');\r\n\r\n // this option doesn't create a new
  • element, but does add a new option at the start,\r\n // so startIndex should increase to prevent having to check every option for the bs-title-option class\r\n updateIndex = true;\r\n\r\n var element = this.$element[0],\r\n selectTitleOption = false,\r\n titleNotAppended = !this.selectpicker.view.titleOption.parentNode,\r\n selectedIndex = element.selectedIndex,\r\n selectedOption = element.options[selectedIndex],\r\n navigation = window.performance && window.performance.getEntriesByType('navigation'),\r\n // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation\r\n isNotBackForward = (navigation && navigation.length) ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2;\r\n\r\n if (titleNotAppended) {\r\n // Use native JS to prepend option (faster)\r\n this.selectpicker.view.titleOption.className = 'bs-title-option';\r\n this.selectpicker.view.titleOption.value = '';\r\n\r\n // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\r\n // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\r\n // if so, the select will have the data-selected attribute\r\n selectTitleOption = !selectedOption || (selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined);\r\n }\r\n\r\n if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {\r\n element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);\r\n }\r\n\r\n // Set selected *after* appending to select,\r\n // otherwise the option doesn't get selected in IE\r\n // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11\r\n if (selectTitleOption && isNotBackForward) {\r\n element.selectedIndex = 0;\r\n } else if (document.readyState !== 'complete') {\r\n // if navigation type is back_forward, there's a chance the select will have its value set by BFCache\r\n // wait for that value to be set, then run render again\r\n window.addEventListener('pageshow', function () {\r\n if (that.selectpicker.view.displayedValue !== element.value) that.render();\r\n });\r\n }\r\n }\r\n\r\n return updateIndex;\r\n },\r\n\r\n buildData: function () {\r\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"])',\r\n mainData = [],\r\n optID = 0,\r\n startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop\r\n\r\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\r\n\r\n var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);\r\n\r\n function addDivider (config) {\r\n var previousData = mainData[mainData.length - 1];\r\n\r\n // ensure optgroup doesn't create back-to-back dividers\r\n if (\r\n previousData &&\r\n previousData.type === 'divider' &&\r\n (previousData.optID || config.optID)\r\n ) {\r\n return;\r\n }\r\n\r\n config = config || {};\r\n config.type = 'divider';\r\n\r\n mainData.push(config);\r\n }\r\n\r\n function addOption (option, config) {\r\n config = config || {};\r\n\r\n config.divider = option.getAttribute('data-divider') === 'true';\r\n\r\n if (config.divider) {\r\n addDivider({\r\n optID: config.optID\r\n });\r\n } else {\r\n var liIndex = mainData.length,\r\n cssText = option.style.cssText,\r\n inlineStyle = cssText ? htmlEscape(cssText) : '',\r\n optionClass = (option.className || '') + (config.optgroupClass || '');\r\n\r\n if (config.optID) optionClass = 'opt ' + optionClass;\r\n\r\n config.optionClass = optionClass.trim();\r\n config.inlineStyle = inlineStyle;\r\n config.text = option.textContent;\r\n\r\n config.content = option.getAttribute('data-content');\r\n config.tokens = option.getAttribute('data-tokens');\r\n config.subtext = option.getAttribute('data-subtext');\r\n config.icon = option.getAttribute('data-icon');\r\n\r\n option.liIndex = liIndex;\r\n\r\n config.display = config.content || config.text;\r\n config.type = 'option';\r\n config.index = liIndex;\r\n config.option = option;\r\n config.selected = !!option.selected;\r\n config.disabled = config.disabled || !!option.disabled;\r\n\r\n mainData.push(config);\r\n }\r\n }\r\n\r\n function addOptgroup (index, selectOptions) {\r\n var optgroup = selectOptions[index],\r\n // skip placeholder option\r\n previous = index - 1 < startIndex ? false : selectOptions[index - 1],\r\n next = selectOptions[index + 1],\r\n options = optgroup.querySelectorAll('option' + optionSelector);\r\n\r\n if (!options.length) return;\r\n\r\n var config = {\r\n display: htmlEscape(optgroup.label),\r\n subtext: optgroup.getAttribute('data-subtext'),\r\n icon: optgroup.getAttribute('data-icon'),\r\n type: 'optgroup-label',\r\n optgroupClass: ' ' + (optgroup.className || '')\r\n },\r\n headerIndex,\r\n lastIndex;\r\n\r\n optID++;\r\n\r\n if (previous) {\r\n addDivider({ optID: optID });\r\n }\r\n\r\n config.optID = optID;\r\n\r\n mainData.push(config);\r\n\r\n for (var j = 0, len = options.length; j < len; j++) {\r\n var option = options[j];\r\n\r\n if (j === 0) {\r\n headerIndex = mainData.length - 1;\r\n lastIndex = headerIndex + len;\r\n }\r\n\r\n addOption(option, {\r\n headerIndex: headerIndex,\r\n lastIndex: lastIndex,\r\n optID: config.optID,\r\n optgroupClass: config.optgroupClass,\r\n disabled: optgroup.disabled\r\n });\r\n }\r\n\r\n if (next) {\r\n addDivider({ optID: optID });\r\n }\r\n }\r\n\r\n for (var len = selectOptions.length, i = startIndex; i < len; i++) {\r\n var item = selectOptions[i];\r\n\r\n if (item.tagName !== 'OPTGROUP') {\r\n addOption(item, {});\r\n } else {\r\n addOptgroup(i, selectOptions);\r\n }\r\n }\r\n\r\n this.selectpicker.main.data = this.selectpicker.current.data = mainData;\r\n },\r\n\r\n buildList: function () {\r\n var that = this,\r\n selectData = this.selectpicker.main.data,\r\n mainElements = [],\r\n widestOptionLength = 0;\r\n\r\n if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {\r\n elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';\r\n elementTemplates.a.appendChild(elementTemplates.checkMark);\r\n }\r\n\r\n function buildElement (item) {\r\n var liElement,\r\n combinedLength = 0;\r\n\r\n switch (item.type) {\r\n case 'divider':\r\n liElement = generateOption.li(\r\n false,\r\n classNames.DIVIDER,\r\n (item.optID ? item.optID + 'div' : undefined)\r\n );\r\n\r\n break;\r\n\r\n case 'option':\r\n liElement = generateOption.li(\r\n generateOption.a(\r\n generateOption.text.call(that, item),\r\n item.optionClass,\r\n item.inlineStyle\r\n ),\r\n '',\r\n item.optID\r\n );\r\n\r\n if (liElement.firstChild) {\r\n liElement.firstChild.id = that.selectId + '-' + item.index;\r\n }\r\n\r\n break;\r\n\r\n case 'optgroup-label':\r\n liElement = generateOption.li(\r\n generateOption.label.call(that, item),\r\n 'dropdown-header' + item.optgroupClass,\r\n item.optID\r\n );\r\n\r\n break;\r\n }\r\n\r\n item.element = liElement;\r\n mainElements.push(liElement);\r\n\r\n // count the number of characters in the option - not perfect, but should work in most cases\r\n if (item.display) combinedLength += item.display.length;\r\n if (item.subtext) combinedLength += item.subtext.length;\r\n // if there is an icon, ensure this option's width is checked\r\n if (item.icon) combinedLength += 1;\r\n\r\n if (combinedLength > widestOptionLength) {\r\n widestOptionLength = combinedLength;\r\n\r\n // guess which option is the widest\r\n // use this when calculating menu width\r\n // not perfect, but it's fast, and the width will be updating accordingly when scrolling\r\n that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];\r\n }\r\n }\r\n\r\n for (var len = selectData.length, i = 0; i < len; i++) {\r\n var item = selectData[i];\r\n\r\n buildElement(item);\r\n }\r\n\r\n this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;\r\n },\r\n\r\n findLis: function () {\r\n return this.$menuInner.find('.inner > li');\r\n },\r\n\r\n render: function () {\r\n var that = this,\r\n element = this.$element[0],\r\n // ensure titleOption is appended and selected (if necessary) before getting selectedOptions\r\n placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,\r\n selectedOptions = getSelectedOptions(element, this.options.hideDisabled),\r\n selectedCount = selectedOptions.length,\r\n button = this.$button[0],\r\n buttonInner = button.querySelector('.filter-option-inner-inner'),\r\n multipleSeparator = document.createTextNode(this.options.multipleSeparator),\r\n titleFragment = elementTemplates.fragment.cloneNode(false),\r\n showCount,\r\n countMax,\r\n hasContent = false;\r\n\r\n button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));\r\n\r\n if (!that.multiple && selectedOptions.length === 1) {\r\n that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);\r\n }\r\n\r\n if (this.options.selectedTextFormat === 'static') {\r\n titleFragment = generateOption.text.call(this, { text: this.options.title }, true);\r\n } else {\r\n showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1;\r\n\r\n // determine if the number of selected options will be shown (showCount === true)\r\n if (showCount) {\r\n countMax = this.options.selectedTextFormat.split('>');\r\n showCount = (countMax.length > 1 && selectedCount > countMax[1]) || (countMax.length === 1 && selectedCount >= 2);\r\n }\r\n\r\n // only loop through all selected options if the count won't be shown\r\n if (showCount === false) {\r\n if (!placeholderSelected) {\r\n for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {\r\n if (selectedIndex < 50) {\r\n var option = selectedOptions[selectedIndex],\r\n thisData = this.selectpicker.main.data[option.liIndex],\r\n titleOptions = {};\r\n\r\n if (this.multiple && selectedIndex > 0) {\r\n titleFragment.appendChild(multipleSeparator.cloneNode(false));\r\n }\r\n\r\n if (option.title) {\r\n titleOptions.text = option.title;\r\n } else if (thisData) {\r\n if (thisData.content && that.options.showContent) {\r\n titleOptions.content = thisData.content.toString();\r\n hasContent = true;\r\n } else {\r\n if (that.options.showIcon) {\r\n titleOptions.icon = thisData.icon;\r\n }\r\n if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;\r\n titleOptions.text = option.textContent.trim();\r\n }\r\n }\r\n\r\n titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // add ellipsis\r\n if (selectedCount > 49) {\r\n titleFragment.appendChild(document.createTextNode('...'));\r\n }\r\n }\r\n } else {\r\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"]):not([data-divider=\"true\"])';\r\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\r\n\r\n // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.\r\n var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,\r\n tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;\r\n\r\n titleFragment = generateOption.text.call(this, {\r\n text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())\r\n }, true);\r\n }\r\n }\r\n\r\n if (this.options.title == undefined) {\r\n // use .attr to ensure undefined is returned if title attribute is not set\r\n this.options.title = this.$element.attr('title');\r\n }\r\n\r\n // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText\r\n if (!titleFragment.childNodes.length) {\r\n titleFragment = generateOption.text.call(this, {\r\n text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText\r\n }, true);\r\n }\r\n\r\n // strip all HTML tags and trim the result, then unescape any escaped tags\r\n button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();\r\n\r\n if (this.options.sanitize && hasContent) {\r\n sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);\r\n }\r\n\r\n buttonInner.innerHTML = '';\r\n buttonInner.appendChild(titleFragment);\r\n\r\n if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {\r\n var filterExpand = button.querySelector('.filter-expand'),\r\n clone = buttonInner.cloneNode(true);\r\n\r\n clone.className = 'filter-expand';\r\n\r\n if (filterExpand) {\r\n button.replaceChild(clone, filterExpand);\r\n } else {\r\n button.appendChild(clone);\r\n }\r\n }\r\n\r\n this.$element.trigger('rendered' + EVENT_KEY);\r\n },\r\n\r\n /**\r\n * @param [style]\r\n * @param [status]\r\n */\r\n setStyle: function (newStyle, status) {\r\n var button = this.$button[0],\r\n newElement = this.$newElement[0],\r\n style = this.options.style.trim(),\r\n buttonClass;\r\n\r\n if (this.$element.attr('class')) {\r\n this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\r\n }\r\n\r\n if (version.major < 4) {\r\n newElement.classList.add('bs3');\r\n\r\n if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') &&\r\n (newElement.previousElementSibling || newElement.nextElementSibling) &&\r\n (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')\r\n ) {\r\n newElement.classList.add('bs3-has-addon');\r\n }\r\n }\r\n\r\n if (newStyle) {\r\n buttonClass = newStyle.trim();\r\n } else {\r\n buttonClass = style;\r\n }\r\n\r\n if (status == 'add') {\r\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\r\n } else if (status == 'remove') {\r\n if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));\r\n } else {\r\n if (style) button.classList.remove.apply(button.classList, style.split(' '));\r\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\r\n }\r\n },\r\n\r\n liHeight: function (refresh) {\r\n if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;\r\n\r\n var newElement = elementTemplates.div.cloneNode(false),\r\n menu = elementTemplates.div.cloneNode(false),\r\n menuInner = elementTemplates.div.cloneNode(false),\r\n menuInnerInner = document.createElement('ul'),\r\n divider = elementTemplates.li.cloneNode(false),\r\n dropdownHeader = elementTemplates.li.cloneNode(false),\r\n li,\r\n a = elementTemplates.a.cloneNode(false),\r\n text = elementTemplates.span.cloneNode(false),\r\n header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,\r\n search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,\r\n actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\r\n doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,\r\n firstOption = this.$element.find('option')[0];\r\n\r\n this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;\r\n\r\n text.className = 'text';\r\n a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');\r\n newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;\r\n newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating\r\n if (this.options.width === 'auto') menu.style.minWidth = 0;\r\n menu.className = classNames.MENU + ' ' + classNames.SHOW;\r\n menuInner.className = 'inner ' + classNames.SHOW;\r\n menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');\r\n divider.className = classNames.DIVIDER;\r\n dropdownHeader.className = 'dropdown-header';\r\n\r\n text.appendChild(document.createTextNode('\\u200b'));\r\n\r\n if (this.selectpicker.current.data.length) {\r\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\r\n var data = this.selectpicker.current.data[i];\r\n if (data.type === 'option') {\r\n li = data.element;\r\n break;\r\n }\r\n }\r\n } else {\r\n li = elementTemplates.li.cloneNode(false);\r\n a.appendChild(text);\r\n li.appendChild(a);\r\n }\r\n\r\n dropdownHeader.appendChild(text.cloneNode(true));\r\n\r\n if (this.selectpicker.view.widestOption) {\r\n menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));\r\n }\r\n\r\n menuInnerInner.appendChild(li);\r\n menuInnerInner.appendChild(divider);\r\n menuInnerInner.appendChild(dropdownHeader);\r\n if (header) menu.appendChild(header);\r\n if (search) {\r\n var input = document.createElement('input');\r\n search.className = 'bs-searchbox';\r\n input.className = 'form-control';\r\n search.appendChild(input);\r\n menu.appendChild(search);\r\n }\r\n if (actions) menu.appendChild(actions);\r\n menuInner.appendChild(menuInnerInner);\r\n menu.appendChild(menuInner);\r\n if (doneButton) menu.appendChild(doneButton);\r\n newElement.appendChild(menu);\r\n\r\n document.body.appendChild(newElement);\r\n\r\n var liHeight = li.offsetHeight,\r\n dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,\r\n headerHeight = header ? header.offsetHeight : 0,\r\n searchHeight = search ? search.offsetHeight : 0,\r\n actionsHeight = actions ? actions.offsetHeight : 0,\r\n doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\r\n dividerHeight = $(divider).outerHeight(true),\r\n // fall back to jQuery if getComputedStyle is not supported\r\n menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false,\r\n menuWidth = menu.offsetWidth,\r\n $menu = menuStyle ? null : $(menu),\r\n menuPadding = {\r\n vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +\r\n toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +\r\n toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +\r\n toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\r\n horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) +\r\n toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) +\r\n toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) +\r\n toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\r\n },\r\n menuExtras = {\r\n vert: menuPadding.vert +\r\n toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +\r\n toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\r\n horiz: menuPadding.horiz +\r\n toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) +\r\n toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\r\n },\r\n scrollBarWidth;\r\n\r\n menuInner.style.overflowY = 'scroll';\r\n\r\n scrollBarWidth = menu.offsetWidth - menuWidth;\r\n\r\n document.body.removeChild(newElement);\r\n\r\n this.sizeInfo.liHeight = liHeight;\r\n this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;\r\n this.sizeInfo.headerHeight = headerHeight;\r\n this.sizeInfo.searchHeight = searchHeight;\r\n this.sizeInfo.actionsHeight = actionsHeight;\r\n this.sizeInfo.doneButtonHeight = doneButtonHeight;\r\n this.sizeInfo.dividerHeight = dividerHeight;\r\n this.sizeInfo.menuPadding = menuPadding;\r\n this.sizeInfo.menuExtras = menuExtras;\r\n this.sizeInfo.menuWidth = menuWidth;\r\n this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;\r\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;\r\n this.sizeInfo.scrollBarWidth = scrollBarWidth;\r\n this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;\r\n\r\n this.setPositionData();\r\n },\r\n\r\n getSelectPosition: function () {\r\n var that = this,\r\n $window = $(window),\r\n pos = that.$newElement.offset(),\r\n $container = $(that.options.container),\r\n containerPos;\r\n\r\n if (that.options.container && $container.length && !$container.is('body')) {\r\n containerPos = $container.offset();\r\n containerPos.top += parseInt($container.css('borderTopWidth'));\r\n containerPos.left += parseInt($container.css('borderLeftWidth'));\r\n } else {\r\n containerPos = { top: 0, left: 0 };\r\n }\r\n\r\n var winPad = that.options.windowPadding;\r\n\r\n this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\r\n this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];\r\n this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\r\n this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];\r\n this.sizeInfo.selectOffsetTop -= winPad[0];\r\n this.sizeInfo.selectOffsetLeft -= winPad[3];\r\n },\r\n\r\n setMenuSize: function (isAuto) {\r\n this.getSelectPosition();\r\n\r\n var selectWidth = this.sizeInfo.selectWidth,\r\n liHeight = this.sizeInfo.liHeight,\r\n headerHeight = this.sizeInfo.headerHeight,\r\n searchHeight = this.sizeInfo.searchHeight,\r\n actionsHeight = this.sizeInfo.actionsHeight,\r\n doneButtonHeight = this.sizeInfo.doneButtonHeight,\r\n divHeight = this.sizeInfo.dividerHeight,\r\n menuPadding = this.sizeInfo.menuPadding,\r\n menuInnerHeight,\r\n menuHeight,\r\n divLength = 0,\r\n minHeight,\r\n _minHeight,\r\n maxHeight,\r\n menuInnerMinHeight,\r\n estimate,\r\n isDropup;\r\n\r\n if (this.options.dropupAuto) {\r\n // Get the estimated height of the menu without scrollbars.\r\n // This is useful for smaller menus, where there might be plenty of room\r\n // below the button without setting dropup, but we can't know\r\n // the exact height of the menu until createView is called later\r\n estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert;\r\n\r\n isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot;\r\n\r\n // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)\r\n if (this.selectpicker.isSearching === true) {\r\n isDropup = this.selectpicker.dropup;\r\n }\r\n\r\n this.$newElement.toggleClass(classNames.DROPUP, isDropup);\r\n this.selectpicker.dropup = isDropup;\r\n }\r\n\r\n if (this.options.size === 'auto') {\r\n _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;\r\n menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;\r\n minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\r\n menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);\r\n\r\n if (this.$newElement.hasClass(classNames.DROPUP)) {\r\n menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;\r\n }\r\n\r\n maxHeight = menuHeight;\r\n menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\r\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\r\n for (var i = 0; i < this.options.size; i++) {\r\n if (this.selectpicker.current.data[i].type === 'divider') divLength++;\r\n }\r\n\r\n menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\r\n menuInnerHeight = menuHeight - menuPadding.vert;\r\n maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\r\n minHeight = menuInnerMinHeight = '';\r\n }\r\n\r\n this.$menu.css({\r\n 'max-height': maxHeight + 'px',\r\n 'overflow': 'hidden',\r\n 'min-height': minHeight + 'px'\r\n });\r\n\r\n this.$menuInner.css({\r\n 'max-height': menuInnerHeight + 'px',\r\n 'overflow-y': 'auto',\r\n 'min-height': menuInnerMinHeight + 'px'\r\n });\r\n\r\n // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView\r\n this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);\r\n\r\n if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {\r\n this.sizeInfo.hasScrollBar = true;\r\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;\r\n }\r\n\r\n if (this.options.dropdownAlignRight === 'auto') {\r\n this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < (this.sizeInfo.totalMenuWidth - selectWidth));\r\n }\r\n\r\n if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();\r\n },\r\n\r\n setSize: function (refresh) {\r\n this.liHeight(refresh);\r\n\r\n if (this.options.header) this.$menu.css('padding-top', 0);\r\n\r\n if (this.options.size !== false) {\r\n var that = this,\r\n $window = $(window);\r\n\r\n this.setMenuSize();\r\n\r\n if (this.options.liveSearch) {\r\n this.$searchbox\r\n .off('input.setMenuSize propertychange.setMenuSize')\r\n .on('input.setMenuSize propertychange.setMenuSize', function () {\r\n return that.setMenuSize();\r\n });\r\n }\r\n\r\n if (this.options.size === 'auto') {\r\n $window\r\n .off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize')\r\n .on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {\r\n return that.setMenuSize();\r\n });\r\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\r\n $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');\r\n }\r\n }\r\n\r\n this.createView(false, true, refresh);\r\n },\r\n\r\n setWidth: function () {\r\n var that = this;\r\n\r\n if (this.options.width === 'auto') {\r\n requestAnimationFrame(function () {\r\n that.$menu.css('min-width', '0');\r\n\r\n that.$element.on('loaded' + EVENT_KEY, function () {\r\n that.liHeight();\r\n that.setMenuSize();\r\n\r\n // Get correct width if element is hidden\r\n var $selectClone = that.$newElement.clone().appendTo('body'),\r\n btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();\r\n\r\n $selectClone.remove();\r\n\r\n // Set width to whatever's larger, button title or longest option\r\n that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);\r\n that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');\r\n });\r\n });\r\n } else if (this.options.width === 'fit') {\r\n // Remove inline min-width so width can be changed from 'auto'\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', '').addClass('fit-width');\r\n } else if (this.options.width) {\r\n // Remove inline min-width so width can be changed from 'auto'\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', this.options.width);\r\n } else {\r\n // Remove inline min-width/width so width can be changed\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', '');\r\n }\r\n // Remove fit-width class if width is changed programmatically\r\n if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\r\n this.$newElement[0].classList.remove('fit-width');\r\n }\r\n },\r\n\r\n selectPosition: function () {\r\n this.$bsContainer = $('
    ');\r\n\r\n var that = this,\r\n $container = $(this.options.container),\r\n pos,\r\n containerPos,\r\n actualHeight,\r\n getPlacement = function ($element) {\r\n var containerPosition = {},\r\n // fall back to dropdown's default display setting if display is not manually set\r\n display = that.options.display || (\r\n // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default\r\n $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display\r\n : false\r\n );\r\n\r\n that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));\r\n pos = $element.offset();\r\n\r\n if (!$container.is('body')) {\r\n containerPos = $container.offset();\r\n containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\r\n containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\r\n } else {\r\n containerPos = { top: 0, left: 0 };\r\n }\r\n\r\n actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight;\r\n\r\n // Bootstrap 4+ uses Popper for menu positioning\r\n if (version.major < 4 || display === 'static') {\r\n containerPosition.top = pos.top - containerPos.top + actualHeight;\r\n containerPosition.left = pos.left - containerPos.left;\r\n }\r\n\r\n containerPosition.width = $element[0].offsetWidth;\r\n\r\n that.$bsContainer.css(containerPosition);\r\n };\r\n\r\n this.$button.on('click.bs.dropdown.data-api', function () {\r\n if (that.isDisabled()) {\r\n return;\r\n }\r\n\r\n getPlacement(that.$newElement);\r\n\r\n that.$bsContainer\r\n .appendTo(that.options.container)\r\n .toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW))\r\n .append(that.$menu);\r\n });\r\n\r\n $(window)\r\n .off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId)\r\n .on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {\r\n var isActive = that.$newElement.hasClass(classNames.SHOW);\r\n\r\n if (isActive) getPlacement(that.$newElement);\r\n });\r\n\r\n this.$element.on('hide' + EVENT_KEY, function () {\r\n that.$menu.data('height', that.$menu.height());\r\n that.$bsContainer.detach();\r\n });\r\n },\r\n\r\n setOptionStatus: function (selectedOnly) {\r\n var that = this;\r\n\r\n that.noScroll = false;\r\n\r\n if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {\r\n for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {\r\n var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],\r\n option = liData.option;\r\n\r\n if (option) {\r\n if (selectedOnly !== true) {\r\n that.setDisabled(\r\n liData.index,\r\n liData.disabled\r\n );\r\n }\r\n\r\n that.setSelected(\r\n liData.index,\r\n option.selected\r\n );\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @param {number} index - the index of the option that is being changed\r\n * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n */\r\n setSelected: function (index, selected) {\r\n var li = this.selectpicker.main.elements[index],\r\n liData = this.selectpicker.main.data[index],\r\n activeIndexIsSet = this.activeIndex !== undefined,\r\n thisIsActive = this.activeIndex === index,\r\n prevActive,\r\n a,\r\n // if current option is already active\r\n // OR\r\n // if the current option is being selected, it's NOT multiple, and\r\n // activeIndex is undefined:\r\n // - when the menu is first being opened, OR\r\n // - after a search has been performed, OR\r\n // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex)\r\n keepActive = thisIsActive || (selected && !this.multiple && !activeIndexIsSet);\r\n\r\n liData.selected = selected;\r\n\r\n a = li.firstChild;\r\n\r\n if (selected) {\r\n this.selectedIndex = index;\r\n }\r\n\r\n li.classList.toggle('selected', selected);\r\n\r\n if (keepActive) {\r\n this.focusItem(li, liData);\r\n this.selectpicker.view.currentActive = li;\r\n this.activeIndex = index;\r\n } else {\r\n this.defocusItem(li);\r\n }\r\n\r\n if (a) {\r\n a.classList.toggle('selected', selected);\r\n\r\n if (selected) {\r\n a.setAttribute('aria-selected', true);\r\n } else {\r\n if (this.multiple) {\r\n a.setAttribute('aria-selected', false);\r\n } else {\r\n a.removeAttribute('aria-selected');\r\n }\r\n }\r\n }\r\n\r\n if (!keepActive && !activeIndexIsSet && selected && this.prevActiveIndex !== undefined) {\r\n prevActive = this.selectpicker.main.elements[this.prevActiveIndex];\r\n\r\n this.defocusItem(prevActive);\r\n }\r\n },\r\n\r\n /**\r\n * @param {number} index - the index of the option that is being disabled\r\n * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n */\r\n setDisabled: function (index, disabled) {\r\n var li = this.selectpicker.main.elements[index],\r\n a;\r\n\r\n this.selectpicker.main.data[index].disabled = disabled;\r\n\r\n a = li.firstChild;\r\n\r\n li.classList.toggle(classNames.DISABLED, disabled);\r\n\r\n if (a) {\r\n if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled);\r\n\r\n if (disabled) {\r\n a.setAttribute('aria-disabled', disabled);\r\n a.setAttribute('tabindex', -1);\r\n } else {\r\n a.removeAttribute('aria-disabled');\r\n a.setAttribute('tabindex', 0);\r\n }\r\n }\r\n },\r\n\r\n isDisabled: function () {\r\n return this.$element[0].disabled;\r\n },\r\n\r\n checkDisabled: function () {\r\n if (this.isDisabled()) {\r\n this.$newElement[0].classList.add(classNames.DISABLED);\r\n this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);\r\n } else {\r\n if (this.$button[0].classList.contains(classNames.DISABLED)) {\r\n this.$newElement[0].classList.remove(classNames.DISABLED);\r\n this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);\r\n }\r\n }\r\n },\r\n\r\n clickListener: function () {\r\n var that = this,\r\n $document = $(document);\r\n\r\n $document.data('spaceSelect', false);\r\n\r\n this.$button.on('keyup', function (e) {\r\n if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\r\n e.preventDefault();\r\n $document.data('spaceSelect', false);\r\n }\r\n });\r\n\r\n this.$newElement.on('show.bs.dropdown', function () {\r\n if (version.major > 3 && !that.dropdown) {\r\n that.dropdown = that.$button.data('bs.dropdown');\r\n that.dropdown._menu = that.$menu[0];\r\n }\r\n });\r\n\r\n this.$button.on('click.bs.dropdown.data-api', function () {\r\n if (!that.$newElement.hasClass(classNames.SHOW)) {\r\n that.setSize();\r\n }\r\n });\r\n\r\n function setFocus () {\r\n if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n } else {\r\n that.$menuInner.trigger('focus');\r\n }\r\n }\r\n\r\n function checkPopperExists () {\r\n if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) {\r\n setFocus();\r\n } else {\r\n requestAnimationFrame(checkPopperExists);\r\n }\r\n }\r\n\r\n this.$element.on('shown' + EVENT_KEY, function () {\r\n if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {\r\n that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;\r\n }\r\n\r\n if (version.major > 3) {\r\n requestAnimationFrame(checkPopperExists);\r\n } else {\r\n setFocus();\r\n }\r\n });\r\n\r\n // ensure posinset and setsize are correct before selecting an option via a click\r\n this.$menuInner.on('mouseenter', 'li a', function (e) {\r\n var hoverLi = this.parentElement,\r\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\r\n index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),\r\n hoverData = that.selectpicker.current.data[index + position0];\r\n\r\n that.focusItem(hoverLi, hoverData, true);\r\n });\r\n\r\n this.$menuInner.on('click', 'li a', function (e, retainActive) {\r\n var $this = $(this),\r\n element = that.$element[0],\r\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\r\n clickedData = that.selectpicker.current.data[$this.parent().index() + position0],\r\n clickedIndex = clickedData.index,\r\n prevValue = getSelectValues(element),\r\n prevIndex = element.selectedIndex,\r\n prevOption = element.options[prevIndex],\r\n triggerChange = true;\r\n\r\n // Don't close on multi choice menu\r\n if (that.multiple && that.options.maxOptions !== 1) {\r\n e.stopPropagation();\r\n }\r\n\r\n e.preventDefault();\r\n\r\n // Don't run if the select is disabled\r\n if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {\r\n var option = clickedData.option,\r\n $option = $(option),\r\n state = option.selected,\r\n $optgroup = $option.parent('optgroup'),\r\n $optgroupOptions = $optgroup.find('option'),\r\n maxOptions = that.options.maxOptions,\r\n maxOptionsGrp = $optgroup.data('maxOptions') || false;\r\n\r\n if (clickedIndex === that.activeIndex) retainActive = true;\r\n\r\n if (!retainActive) {\r\n that.prevActiveIndex = that.activeIndex;\r\n that.activeIndex = undefined;\r\n }\r\n\r\n if (!that.multiple) { // Deselect all others if not multi select box\r\n if (prevOption) prevOption.selected = false;\r\n option.selected = true;\r\n that.setSelected(clickedIndex, true);\r\n } else { // Toggle the one we have chosen if we are multi select.\r\n option.selected = !state;\r\n\r\n that.setSelected(clickedIndex, !state);\r\n that.focusedParent.focus();\r\n\r\n if (maxOptions !== false || maxOptionsGrp !== false) {\r\n var maxReached = maxOptions < getSelectedOptions(element).length,\r\n maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\r\n\r\n if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {\r\n if (maxOptions && maxOptions == 1) {\r\n element.selectedIndex = -1;\r\n option.selected = true;\r\n that.setOptionStatus(true);\r\n } else if (maxOptionsGrp && maxOptionsGrp == 1) {\r\n for (var i = 0; i < $optgroupOptions.length; i++) {\r\n var _option = $optgroupOptions[i];\r\n _option.selected = false;\r\n that.setSelected(_option.liIndex, false);\r\n }\r\n\r\n option.selected = true;\r\n that.setSelected(clickedIndex, true);\r\n } else {\r\n var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\r\n maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\r\n maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\r\n maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\r\n $notify = $('
    ');\r\n // If {var} is set in array, replace it\r\n /** @deprecated */\r\n if (maxOptionsArr[2]) {\r\n maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\r\n maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\r\n }\r\n\r\n option.selected = false;\r\n\r\n that.$menu.append($notify);\r\n\r\n if (maxOptions && maxReached) {\r\n $notify.append($('
    ' + maxTxt + '
    '));\r\n triggerChange = false;\r\n that.$element.trigger('maxReached' + EVENT_KEY);\r\n }\r\n\r\n if (maxOptionsGrp && maxReachedGrp) {\r\n $notify.append($('
    ' + maxTxtGrp + '
    '));\r\n triggerChange = false;\r\n that.$element.trigger('maxReachedGrp' + EVENT_KEY);\r\n }\r\n\r\n setTimeout(function () {\r\n that.setSelected(clickedIndex, false);\r\n }, 10);\r\n\r\n $notify[0].classList.add('fadeOut');\r\n\r\n setTimeout(function () {\r\n $notify.remove();\r\n }, 1050);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) {\r\n that.$button.trigger('focus');\r\n } else if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n }\r\n\r\n // Trigger select 'change'\r\n if (triggerChange) {\r\n if (that.multiple || prevIndex !== element.selectedIndex) {\r\n // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.\r\n changedArguments = [option.index, $option.prop('selected'), prevValue];\r\n that.$element\r\n .triggerNative('change');\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {\r\n if (e.currentTarget == this) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (that.options.liveSearch && !$(e.target).hasClass('close')) {\r\n that.$searchbox.trigger('focus');\r\n } else {\r\n that.$button.trigger('focus');\r\n }\r\n }\r\n });\r\n\r\n this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n } else {\r\n that.$button.trigger('focus');\r\n }\r\n });\r\n\r\n this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {\r\n that.$button.trigger('click');\r\n });\r\n\r\n this.$searchbox.on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n this.$menu.on('click', '.actions-btn', function (e) {\r\n if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n } else {\r\n that.$button.trigger('focus');\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if ($(this).hasClass('bs-select-all')) {\r\n that.selectAll();\r\n } else {\r\n that.deselectAll();\r\n }\r\n });\r\n\r\n this.$button\r\n .on('focus' + EVENT_KEY, function (e) {\r\n var tabindex = that.$element[0].getAttribute('tabindex');\r\n\r\n // only change when button is actually focused\r\n if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\r\n // apply select element's tabindex to ensure correct order is followed when tabbing to the next element\r\n this.setAttribute('tabindex', tabindex);\r\n // set element's tabindex to -1 to allow for reverse tabbing\r\n that.$element[0].setAttribute('tabindex', -1);\r\n that.selectpicker.view.tabindex = tabindex;\r\n }\r\n })\r\n .on('blur' + EVENT_KEY, function (e) {\r\n // revert everything to original tabindex\r\n if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\r\n that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);\r\n this.setAttribute('tabindex', -1);\r\n that.selectpicker.view.tabindex = undefined;\r\n }\r\n });\r\n\r\n this.$element\r\n .on('change' + EVENT_KEY, function () {\r\n that.render();\r\n that.$element.trigger('changed' + EVENT_KEY, changedArguments);\r\n changedArguments = null;\r\n })\r\n .on('focus' + EVENT_KEY, function () {\r\n if (!that.options.mobile) that.$button[0].focus();\r\n });\r\n },\r\n\r\n liveSearchListener: function () {\r\n var that = this;\r\n\r\n this.$button.on('click.bs.dropdown.data-api', function () {\r\n if (!!that.$searchbox.val()) {\r\n that.$searchbox.val('');\r\n that.selectpicker.search.previousValue = undefined;\r\n }\r\n });\r\n\r\n this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n this.$searchbox.on('input propertychange', function () {\r\n var searchValue = that.$searchbox[0].value;\r\n\r\n that.selectpicker.search.elements = [];\r\n that.selectpicker.search.data = [];\r\n\r\n if (searchValue) {\r\n var i,\r\n searchMatch = [],\r\n q = searchValue.toUpperCase(),\r\n cache = {},\r\n cacheArr = [],\r\n searchStyle = that._searchStyle(),\r\n normalizeSearch = that.options.liveSearchNormalize;\r\n\r\n if (normalizeSearch) q = normalizeToBase(q);\r\n\r\n for (var i = 0; i < that.selectpicker.main.data.length; i++) {\r\n var li = that.selectpicker.main.data[i];\r\n\r\n if (!cache[i]) {\r\n cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);\r\n }\r\n\r\n if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {\r\n if (li.headerIndex > 0) {\r\n cache[li.headerIndex - 1] = true;\r\n cacheArr.push(li.headerIndex - 1);\r\n }\r\n\r\n cache[li.headerIndex] = true;\r\n cacheArr.push(li.headerIndex);\r\n\r\n cache[li.lastIndex + 1] = true;\r\n }\r\n\r\n if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);\r\n }\r\n\r\n for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {\r\n var index = cacheArr[i],\r\n prevIndex = cacheArr[i - 1],\r\n li = that.selectpicker.main.data[index],\r\n liPrev = that.selectpicker.main.data[prevIndex];\r\n\r\n if (li.type !== 'divider' || (li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i)) {\r\n that.selectpicker.search.data.push(li);\r\n searchMatch.push(that.selectpicker.main.elements[index]);\r\n }\r\n }\r\n\r\n that.activeIndex = undefined;\r\n that.noScroll = true;\r\n that.$menuInner.scrollTop(0);\r\n that.selectpicker.search.elements = searchMatch;\r\n that.createView(true);\r\n showNoResults.call(that, searchMatch, searchValue);\r\n } else if (that.selectpicker.search.previousValue) { // for IE11 (#2402)\r\n that.$menuInner.scrollTop(0);\r\n that.createView(false);\r\n }\r\n\r\n that.selectpicker.search.previousValue = searchValue;\r\n });\r\n },\r\n\r\n _searchStyle: function () {\r\n return this.options.liveSearchStyle || 'contains';\r\n },\r\n\r\n val: function (value) {\r\n var element = this.$element[0];\r\n\r\n if (typeof value !== 'undefined') {\r\n var prevValue = getSelectValues(element);\r\n\r\n changedArguments = [null, null, prevValue];\r\n\r\n this.$element\r\n .val(value)\r\n .trigger('changed' + EVENT_KEY, changedArguments);\r\n\r\n if (this.$newElement.hasClass(classNames.SHOW)) {\r\n if (this.multiple) {\r\n this.setOptionStatus(true);\r\n } else {\r\n var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\r\n\r\n if (typeof liSelectedIndex === 'number') {\r\n this.setSelected(this.selectedIndex, false);\r\n this.setSelected(liSelectedIndex, true);\r\n }\r\n }\r\n }\r\n\r\n this.render();\r\n\r\n changedArguments = null;\r\n\r\n return this.$element;\r\n } else {\r\n return this.$element.val();\r\n }\r\n },\r\n\r\n changeAll: function (status) {\r\n if (!this.multiple) return;\r\n if (typeof status === 'undefined') status = true;\r\n\r\n var element = this.$element[0],\r\n previousSelected = 0,\r\n currentSelected = 0,\r\n prevValue = getSelectValues(element);\r\n\r\n element.classList.add('bs-select-hidden');\r\n\r\n for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {\r\n var liData = data[i],\r\n option = liData.option;\r\n\r\n if (option && !liData.disabled && liData.type !== 'divider') {\r\n if (liData.selected) previousSelected++;\r\n option.selected = status;\r\n if (status === true) currentSelected++;\r\n }\r\n }\r\n\r\n element.classList.remove('bs-select-hidden');\r\n\r\n if (previousSelected === currentSelected) return;\r\n\r\n this.setOptionStatus();\r\n\r\n changedArguments = [null, null, prevValue];\r\n\r\n this.$element\r\n .triggerNative('change');\r\n },\r\n\r\n selectAll: function () {\r\n return this.changeAll(true);\r\n },\r\n\r\n deselectAll: function () {\r\n return this.changeAll(false);\r\n },\r\n\r\n toggle: function (e) {\r\n e = e || window.event;\r\n\r\n if (e) e.stopPropagation();\r\n\r\n this.$button.trigger('click.bs.dropdown.data-api');\r\n },\r\n\r\n keydown: function (e) {\r\n var $this = $(this),\r\n isToggle = $this.hasClass('dropdown-toggle'),\r\n $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),\r\n that = $parent.data('this'),\r\n $items = that.findLis(),\r\n index,\r\n isActive,\r\n liActive,\r\n activeLi,\r\n offset,\r\n updateScroll = false,\r\n downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,\r\n isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,\r\n scrollTop = that.$menuInner[0].scrollTop,\r\n isVirtual = that.isVirtual(),\r\n position0 = isVirtual === true ? that.selectpicker.view.position0 : 0;\r\n\r\n // do nothing if a function key is pressed\r\n if (e.which >= 112 && e.which <= 123) return;\r\n\r\n isActive = that.$newElement.hasClass(classNames.SHOW);\r\n\r\n if (\r\n !isActive &&\r\n (\r\n isArrowKey ||\r\n (e.which >= 48 && e.which <= 57) ||\r\n (e.which >= 96 && e.which <= 105) ||\r\n (e.which >= 65 && e.which <= 90)\r\n )\r\n ) {\r\n that.$button.trigger('click.bs.dropdown.data-api');\r\n\r\n if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n return;\r\n }\r\n }\r\n\r\n if (e.which === keyCodes.ESCAPE && isActive) {\r\n e.preventDefault();\r\n that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');\r\n }\r\n\r\n if (isArrowKey) { // if up or down\r\n if (!$items.length) return;\r\n\r\n liActive = that.selectpicker.main.elements[that.activeIndex];\r\n index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;\r\n\r\n if (index !== -1) {\r\n that.defocusItem(liActive);\r\n }\r\n\r\n if (e.which === keyCodes.ARROW_UP) { // up\r\n if (index !== -1) index--;\r\n if (index + position0 < 0) index += $items.length;\r\n\r\n if (!that.selectpicker.view.canHighlight[index + position0]) {\r\n index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;\r\n if (index === -1) index = $items.length - 1;\r\n }\r\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down\r\n index++;\r\n if (index + position0 >= that.selectpicker.view.canHighlight.length) index = that.selectpicker.view.firstHighlightIndex;\r\n\r\n if (!that.selectpicker.view.canHighlight[index + position0]) {\r\n index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);\r\n }\r\n }\r\n\r\n e.preventDefault();\r\n\r\n var liActiveIndex = position0 + index;\r\n\r\n if (e.which === keyCodes.ARROW_UP) { // up\r\n // scroll to bottom and highlight last option\r\n if (position0 === 0 && index === $items.length - 1) {\r\n that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;\r\n\r\n liActiveIndex = that.selectpicker.current.elements.length - 1;\r\n } else {\r\n activeLi = that.selectpicker.current.data[liActiveIndex];\r\n offset = activeLi.position - activeLi.height;\r\n\r\n updateScroll = offset < scrollTop;\r\n }\r\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down\r\n // scroll to top and highlight first option\r\n if (index === that.selectpicker.view.firstHighlightIndex) {\r\n that.$menuInner[0].scrollTop = 0;\r\n\r\n liActiveIndex = that.selectpicker.view.firstHighlightIndex;\r\n } else {\r\n activeLi = that.selectpicker.current.data[liActiveIndex];\r\n offset = activeLi.position - that.sizeInfo.menuInnerHeight;\r\n\r\n updateScroll = offset > scrollTop;\r\n }\r\n }\r\n\r\n liActive = that.selectpicker.current.elements[liActiveIndex];\r\n\r\n that.activeIndex = that.selectpicker.current.data[liActiveIndex].index;\r\n\r\n that.focusItem(liActive);\r\n\r\n that.selectpicker.view.currentActive = liActive;\r\n\r\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\r\n\r\n if (that.options.liveSearch) {\r\n that.$searchbox.trigger('focus');\r\n } else {\r\n $this.trigger('focus');\r\n }\r\n } else if (\r\n (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which)) ||\r\n (e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory)\r\n ) {\r\n var searchMatch,\r\n matches = [],\r\n keyHistory;\r\n\r\n e.preventDefault();\r\n\r\n that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];\r\n\r\n if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);\r\n that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();\r\n\r\n keyHistory = that.selectpicker.keydown.keyHistory;\r\n\r\n // if all letters are the same, set keyHistory to just the first character when searching\r\n if (/^(.)\\1+$/.test(keyHistory)) {\r\n keyHistory = keyHistory.charAt(0);\r\n }\r\n\r\n // find matches\r\n for (var i = 0; i < that.selectpicker.current.data.length; i++) {\r\n var li = that.selectpicker.current.data[i],\r\n hasMatch;\r\n\r\n hasMatch = stringSearch(li, keyHistory, 'startsWith', true);\r\n\r\n if (hasMatch && that.selectpicker.view.canHighlight[i]) {\r\n matches.push(li.index);\r\n }\r\n }\r\n\r\n if (matches.length) {\r\n var matchIndex = 0;\r\n\r\n $items.removeClass('active').find('a').removeClass('active');\r\n\r\n // either only one key has been pressed or they are all the same key\r\n if (keyHistory.length === 1) {\r\n matchIndex = matches.indexOf(that.activeIndex);\r\n\r\n if (matchIndex === -1 || matchIndex === matches.length - 1) {\r\n matchIndex = 0;\r\n } else {\r\n matchIndex++;\r\n }\r\n }\r\n\r\n searchMatch = matches[matchIndex];\r\n\r\n activeLi = that.selectpicker.main.data[searchMatch];\r\n\r\n if (scrollTop - activeLi.position > 0) {\r\n offset = activeLi.position - activeLi.height;\r\n updateScroll = true;\r\n } else {\r\n offset = activeLi.position - that.sizeInfo.menuInnerHeight;\r\n // if the option is already visible at the current scroll position, just keep it the same\r\n updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;\r\n }\r\n\r\n liActive = that.selectpicker.main.elements[searchMatch];\r\n\r\n that.activeIndex = matches[matchIndex];\r\n\r\n that.focusItem(liActive);\r\n\r\n if (liActive) liActive.firstChild.focus();\r\n\r\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\r\n\r\n $this.trigger('focus');\r\n }\r\n }\r\n\r\n // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\r\n if (\r\n isActive &&\r\n (\r\n (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory) ||\r\n e.which === keyCodes.ENTER ||\r\n (e.which === keyCodes.TAB && that.options.selectOnTab)\r\n )\r\n ) {\r\n if (e.which !== keyCodes.SPACE) e.preventDefault();\r\n\r\n if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {\r\n that.$menuInner.find('.active a').trigger('click', true); // retain active class\r\n $this.trigger('focus');\r\n\r\n if (!that.options.liveSearch) {\r\n // Prevent screen from scrolling if the user hits the spacebar\r\n e.preventDefault();\r\n // Fixes spacebar selection of dropdown items in FF & IE\r\n $(document).data('spaceSelect', true);\r\n }\r\n }\r\n }\r\n },\r\n\r\n mobile: function () {\r\n // ensure mobile is set to true if mobile function is called after init\r\n this.options.mobile = true;\r\n this.$element[0].classList.add('mobile-device');\r\n },\r\n\r\n refresh: function () {\r\n // update options if data attributes have been changed\r\n var config = $.extend({}, this.options, this.$element.data());\r\n this.options = config;\r\n\r\n this.checkDisabled();\r\n this.buildData();\r\n this.setStyle();\r\n this.render();\r\n this.buildList();\r\n this.setWidth();\r\n\r\n this.setSize(true);\r\n\r\n this.$element.trigger('refreshed' + EVENT_KEY);\r\n },\r\n\r\n hide: function () {\r\n this.$newElement.hide();\r\n },\r\n\r\n show: function () {\r\n this.$newElement.show();\r\n },\r\n\r\n remove: function () {\r\n this.$newElement.remove();\r\n this.$element.remove();\r\n },\r\n\r\n destroy: function () {\r\n this.$newElement.before(this.$element).remove();\r\n\r\n if (this.$bsContainer) {\r\n this.$bsContainer.remove();\r\n } else {\r\n this.$menu.remove();\r\n }\r\n\r\n if (this.selectpicker.view.titleOption && this.selectpicker.view.titleOption.parentNode) {\r\n this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption);\r\n }\r\n\r\n this.$element\r\n .off(EVENT_KEY)\r\n .removeData('selectpicker')\r\n .removeClass('bs-select-hidden selectpicker');\r\n\r\n $(window).off(EVENT_KEY + '.' + this.selectId);\r\n }\r\n };\r\n\r\n // SELECTPICKER PLUGIN DEFINITION\r\n // ==============================\r\n function Plugin (option) {\r\n // get the args of the outer function..\r\n var args = arguments;\r\n // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\r\n // to get lost/corrupted in android 2.3 and IE9 #715 #775\r\n var _option = option;\r\n\r\n [].shift.apply(args);\r\n\r\n // if the version was not set successfully\r\n if (!version.success) {\r\n // try to retreive it again\r\n try {\r\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\r\n } catch (err) {\r\n // fall back to use BootstrapVersion if set\r\n if (Selectpicker.BootstrapVersion) {\r\n version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');\r\n } else {\r\n version.full = [version.major, '0', '0'];\r\n\r\n console.warn(\r\n 'There was an issue retrieving Bootstrap\\'s version. ' +\r\n 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' +\r\n 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.',\r\n err\r\n );\r\n }\r\n }\r\n\r\n version.major = version.full[0];\r\n version.success = true;\r\n }\r\n\r\n if (version.major === '4') {\r\n // some defaults need to be changed if using Bootstrap 4\r\n // check to see if they have already been manually changed before forcing them to update\r\n var toUpdate = [];\r\n\r\n if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({ name: 'style', className: 'BUTTONCLASS' });\r\n if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({ name: 'iconBase', className: 'ICONBASE' });\r\n if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({ name: 'tickIcon', className: 'TICKICON' });\r\n\r\n classNames.DIVIDER = 'dropdown-divider';\r\n classNames.SHOW = 'show';\r\n classNames.BUTTONCLASS = 'btn-light';\r\n classNames.POPOVERHEADER = 'popover-header';\r\n classNames.ICONBASE = '';\r\n classNames.TICKICON = 'bs-ok-default';\r\n\r\n for (var i = 0; i < toUpdate.length; i++) {\r\n var option = toUpdate[i];\r\n Selectpicker.DEFAULTS[option.name] = classNames[option.className];\r\n }\r\n }\r\n\r\n var value;\r\n var chain = this.each(function () {\r\n var $this = $(this);\r\n if ($this.is('select')) {\r\n var data = $this.data('selectpicker'),\r\n options = typeof _option == 'object' && _option;\r\n\r\n if (!data) {\r\n var dataAttributes = $this.data();\r\n\r\n for (var dataAttr in dataAttributes) {\r\n if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\r\n delete dataAttributes[dataAttr];\r\n }\r\n }\r\n\r\n var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, dataAttributes, options);\r\n config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), dataAttributes.template, options.template);\r\n $this.data('selectpicker', (data = new Selectpicker(this, config)));\r\n } else if (options) {\r\n for (var i in options) {\r\n if (Object.prototype.hasOwnProperty.call(options, i)) {\r\n data.options[i] = options[i];\r\n }\r\n }\r\n }\r\n\r\n if (typeof _option == 'string') {\r\n if (data[_option] instanceof Function) {\r\n value = data[_option].apply(data, args);\r\n } else {\r\n value = data.options[_option];\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (typeof value !== 'undefined') {\r\n // noinspection JSUnusedAssignment\r\n return value;\r\n } else {\r\n return chain;\r\n }\r\n }\r\n\r\n var old = $.fn.selectpicker;\r\n $.fn.selectpicker = Plugin;\r\n $.fn.selectpicker.Constructor = Selectpicker;\r\n\r\n // SELECTPICKER NO CONFLICT\r\n // ========================\r\n $.fn.selectpicker.noConflict = function () {\r\n $.fn.selectpicker = old;\r\n return this;\r\n };\r\n\r\n // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3\r\n function keydownHandler () {\r\n if ($.fn.dropdown) {\r\n // wait to define until function is called in case Bootstrap isn't loaded yet\r\n var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;\r\n return bootstrapKeydown.apply(this, arguments);\r\n }\r\n }\r\n\r\n $(document)\r\n .off('keydown.bs.dropdown.data-api')\r\n .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [data-toggle=\"dropdown\"]', keydownHandler)\r\n .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler)\r\n .on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown)\r\n .on('focusin.modal', '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n // SELECTPICKER DATA-API\r\n // =====================\r\n $(window).on('load' + EVENT_KEY + '.data-api', function () {\r\n $('.selectpicker').each(function () {\r\n var $selectpicker = $(this);\r\n Plugin.call($selectpicker, $selectpicker.data());\r\n })\r\n });\r\n})(jQuery);\r\n","/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):a(\"object\"==typeof exports?require(\"jquery\"):jQuery)}(function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(c,d){return function(){return d!==b&&a.fn.datepicker.deprecated(d),this[c].apply(this,arguments)}}function g(a){return a&&!isNaN(a.getTime())}function h(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp(\"^\"+c.toLowerCase()+\"([A-Z])\");c=new RegExp(\"^\"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function i(b){var c={};if(q[b]||(b=b.split(\"-\")[0],q[b])){var d=q[b];return a.each(p,function(a,b){b in d&&(c[b]=d[b])}),c}}var j=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;c]/g)||[]).length<=0)return!0;return a(c).length>0}catch(a){return!1}},_process_options:function(b){this._o=a.extend({},this._o,b);var e=this.o=a.extend({},this._o),f=e.language;q[f]||(f=f.split(\"-\")[0],q[f]||(f=o.language)),e.language=f,e.startView=this._resolveViewName(e.startView),e.minViewMode=this._resolveViewName(e.minViewMode),e.maxViewMode=this._resolveViewName(e.maxViewMode),e.startView=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,e.startView)),!0!==e.multidate&&(e.multidate=Number(e.multidate)||!1,!1!==e.multidate&&(e.multidate=Math.max(0,e.multidate))),e.multidateSeparator=String(e.multidateSeparator),e.weekStart%=7,e.weekEnd=(e.weekStart+6)%7;var g=r.parseFormat(e.format);e.startDate!==-1/0&&(e.startDate?e.startDate instanceof Date?e.startDate=this._local_to_utc(this._zero_time(e.startDate)):e.startDate=r.parseDate(e.startDate,g,e.language,e.assumeNearbyYear):e.startDate=-1/0),e.endDate!==1/0&&(e.endDate?e.endDate instanceof Date?e.endDate=this._local_to_utc(this._zero_time(e.endDate)):e.endDate=r.parseDate(e.endDate,g,e.language,e.assumeNearbyYear):e.endDate=1/0),e.daysOfWeekDisabled=this._resolveDaysOfWeek(e.daysOfWeekDisabled||[]),e.daysOfWeekHighlighted=this._resolveDaysOfWeek(e.daysOfWeekHighlighted||[]),e.datesDisabled=e.datesDisabled||[],a.isArray(e.datesDisabled)||(e.datesDisabled=e.datesDisabled.split(\",\")),e.datesDisabled=a.map(e.datesDisabled,function(a){return r.parseDate(a,g,e.language,e.assumeNearbyYear)});var h=String(e.orientation).toLowerCase().split(/\\s+/g),i=e.orientation.toLowerCase();if(h=a.grep(h,function(a){return/^auto|left|right|top|bottom$/.test(a)}),e.orientation={x:\"auto\",y:\"auto\"},i&&\"auto\"!==i)if(1===h.length)switch(h[0]){case\"top\":case\"bottom\":e.orientation.y=h[0];break;case\"left\":case\"right\":e.orientation.x=h[0]}else i=a.grep(h,function(a){return/^left|right$/.test(a)}),e.orientation.x=i[0]||\"auto\",i=a.grep(h,function(a){return/^top|bottom$/.test(a)}),e.orientation.y=i[0]||\"auto\";else;if(e.defaultViewDate instanceof Date||\"string\"==typeof e.defaultViewDate)e.defaultViewDate=r.parseDate(e.defaultViewDate,g,e.language,e.assumeNearbyYear);else if(e.defaultViewDate){var j=e.defaultViewDate.year||(new Date).getFullYear(),k=e.defaultViewDate.month||0,l=e.defaultViewDate.day||1;e.defaultViewDate=c(j,k,l)}else e.defaultViewDate=d()},_applyEvents:function(a){for(var c,d,e,f=0;fe?(this.picker.addClass(\"datepicker-orient-right\"),m+=l-b):this.o.rtl?this.picker.addClass(\"datepicker-orient-right\"):this.picker.addClass(\"datepicker-orient-left\");var o,p=this.o.orientation.y;if(\"auto\"===p&&(o=-f+n-c,p=o<0?\"bottom\":\"top\"),this.picker.addClass(\"datepicker-orient-\"+p),\"top\"===p?n-=c+parseInt(this.picker.css(\"padding-top\")):n+=k,this.o.rtl){var q=e-(m+l);this.picker.css({top:n,right:q,zIndex:i})}else this.picker.css({top:n,left:m,zIndex:i});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data(\"date\")||this.inputField.val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return r.parseDate(a,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),c=a.grep(c,a.proxy(function(a){return!this.dateWithinRange(a)||!a},this),!0),this.dates.replace(c),this.o.updateViewDate&&(this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate),d?(this.setValue(),this.element.change()):this.dates.length&&String(b)!==String(this.dates)&&d&&(this._trigger(\"changeDate\"),this.element.change()),!this.dates.length&&b.length&&(this._trigger(\"clearDate\"),this.element.change()),this.fill(),this},fillDow:function(){if(this.o.showWeekDays){var b=this.o.weekStart,c=\"\";for(this.o.calendarWeeks&&(c+=' ');b\";c+=\"\",this.picker.find(\".datepicker-days thead\").append(c)}},fillMonths:function(){for(var a,b=this._utc_to_local(this.viewDate),c=\"\",d=0;d<12;d++)a=b&&b.getMonth()===d?\" focused\":\"\",c+=''+q[this.o.language].monthsShort[d]+\"\";this.picker.find(\".datepicker-months td\").html(c)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],f=this.viewDate.getUTCFullYear(),g=this.viewDate.getUTCMonth(),h=d();return b.getUTCFullYear()f||b.getUTCFullYear()===f&&b.getUTCMonth()>g)&&c.push(\"new\"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push(\"focused\"),this.o.todayHighlight&&e(b,h)&&c.push(\"today\"),-1!==this.dates.contains(b)&&c.push(\"active\"),this.dateWithinRange(b)||c.push(\"disabled\"),this.dateIsDisabled(b)&&c.push(\"disabled\",\"disabled-date\"),-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekHighlighted)&&c.push(\"highlighted\"),this.range&&(b>this.range[0]&&bh)&&j.push(\"disabled\"),t===r&&j.push(\"focused\"),i!==a.noop&&(l=i(new Date(t,0,1)),l===b?l={}:\"boolean\"==typeof l?l={enabled:l}:\"string\"==typeof l&&(l={classes:l}),!1===l.enabled&&j.push(\"disabled\"),l.classes&&(j=j.concat(l.classes.split(/\\s+/))),l.tooltip&&(k=l.tooltip)),m+='\"+t+\"\";o.find(\".datepicker-switch\").text(p+\"-\"+q),o.find(\"td\").html(m)},fill:function(){var e,f,g=new Date(this.viewDate),h=g.getUTCFullYear(),i=g.getUTCMonth(),j=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,k=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,l=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,m=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,n=q[this.o.language].today||q.en.today||\"\",o=q[this.o.language].clear||q.en.clear||\"\",p=q[this.o.language].titleFormat||q.en.titleFormat,s=d(),t=(!0===this.o.todayBtn||\"linked\"===this.o.todayBtn)&&s>=this.o.startDate&&s<=this.o.endDate&&!this.weekOfDateIsDisabled(s);if(!isNaN(h)&&!isNaN(i)){this.picker.find(\".datepicker-days .datepicker-switch\").text(r.formatDate(g,p,this.o.language)),this.picker.find(\"tfoot .today\").text(n).css(\"display\",t?\"table-cell\":\"none\"),this.picker.find(\"tfoot .clear\").text(o).css(\"display\",!0===this.o.clearBtn?\"table-cell\":\"none\"),this.picker.find(\"thead .datepicker-title\").text(this.o.title).css(\"display\",\"string\"==typeof this.o.title&&\"\"!==this.o.title?\"table-cell\":\"none\"),this.updateNavArrows(),this.fillMonths();var u=c(h,i,0),v=u.getUTCDate();u.setUTCDate(v-(u.getUTCDay()-this.o.weekStart+7)%7);var w=new Date(u);u.getUTCFullYear()<100&&w.setUTCFullYear(u.getUTCFullYear()),w.setUTCDate(w.getUTCDate()+42),w=w.valueOf();for(var x,y,z=[];u.valueOf()\"),this.o.calendarWeeks)){var A=new Date(+u+(this.o.weekStart-x-7)%7*864e5),B=new Date(Number(A)+(11-A.getUTCDay())%7*864e5),C=new Date(Number(C=c(B.getUTCFullYear(),0,1))+(11-C.getUTCDay())%7*864e5),D=(B-C)/864e5/7+1;z.push(''+D+\"\")}y=this.getClassNames(u),y.push(\"day\");var E=u.getUTCDate();this.o.beforeShowDay!==a.noop&&(f=this.o.beforeShowDay(this._utc_to_local(u)),f===b?f={}:\"boolean\"==typeof f?f={enabled:f}:\"string\"==typeof f&&(f={classes:f}),!1===f.enabled&&y.push(\"disabled\"),f.classes&&(y=y.concat(f.classes.split(/\\s+/))),f.tooltip&&(e=f.tooltip),f.content&&(E=f.content)),y=a.isFunction(a.uniqueSort)?a.uniqueSort(y):a.unique(y),z.push(''+E+\"\"),e=null,x===this.o.weekEnd&&z.push(\"\"),u.setUTCDate(u.getUTCDate()+1)}this.picker.find(\".datepicker-days tbody\").html(z.join(\"\"));var F=q[this.o.language].monthsTitle||q.en.monthsTitle||\"Months\",G=this.picker.find(\".datepicker-months\").find(\".datepicker-switch\").text(this.o.maxViewMode<2?F:h).end().find(\"tbody span\").removeClass(\"active\");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===h&&G.eq(b.getUTCMonth()).addClass(\"active\")}),(hl)&&G.addClass(\"disabled\"),h===j&&G.slice(0,k).addClass(\"disabled\"),h===l&&G.slice(m+1).addClass(\"disabled\"),this.o.beforeShowMonth!==a.noop){var H=this;a.each(G,function(c,d){var e=new Date(h,c,1),f=H.o.beforeShowMonth(e);f===b?f={}:\"boolean\"==typeof f?f={enabled:f}:\"string\"==typeof f&&(f={classes:f}),!1!==f.enabled||a(d).hasClass(\"disabled\")||a(d).addClass(\"disabled\"),f.classes&&a(d).addClass(f.classes),f.tooltip&&a(d).prop(\"title\",f.tooltip)})}this._fill_yearsView(\".datepicker-years\",\"year\",10,h,j,l,this.o.beforeShowYear),this._fill_yearsView(\".datepicker-decades\",\"decade\",100,h,j,l,this.o.beforeShowDecade),this._fill_yearsView(\".datepicker-centuries\",\"century\",1e3,h,j,l,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var a,b,c=new Date(this.viewDate),d=c.getUTCFullYear(),e=c.getUTCMonth(),f=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,g=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,h=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,i=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,j=1;switch(this.viewMode){case 4:j*=10;case 3:j*=10;case 2:j*=10;case 1:a=Math.floor(d/j)*j<=f,b=Math.floor(d/j)*j+j>h;break;case 0:a=d<=f&&e<=g,b=d>=h&&e>=i}this.picker.find(\".prev\").toggleClass(\"disabled\",a),this.picker.find(\".next\").toggleClass(\"disabled\",b)}},click:function(b){b.preventDefault(),b.stopPropagation();var e,f,g,h;e=a(b.target),e.hasClass(\"datepicker-switch\")&&this.viewMode!==this.o.maxViewMode&&this.setViewMode(this.viewMode+1),e.hasClass(\"today\")&&!e.hasClass(\"day\")&&(this.setViewMode(0),this._setDate(d(),\"linked\"===this.o.todayBtn?null:\"view\")),e.hasClass(\"clear\")&&this.clearDates(),e.hasClass(\"disabled\")||(e.hasClass(\"month\")||e.hasClass(\"year\")||e.hasClass(\"decade\")||e.hasClass(\"century\"))&&(this.viewDate.setUTCDate(1),f=1,1===this.viewMode?(h=e.parent().find(\"span\").index(e),g=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(h)):(h=0,g=Number(e.text()),this.viewDate.setUTCFullYear(g)),this._trigger(r.viewModes[this.viewMode-1].e,this.viewDate),this.viewMode===this.o.minViewMode?this._setDate(c(g,h,f)):(this.setViewMode(this.viewMode-1),this.fill())),this.picker.is(\":visible\")&&this._focused_from&&this._focused_from.focus(),delete this._focused_from},dayCellClick:function(b){var c=a(b.currentTarget),d=c.data(\"date\"),e=new Date(d);this.o.updateViewDate&&(e.getUTCFullYear()!==this.viewDate.getUTCFullYear()&&this._trigger(\"changeYear\",this.viewDate),e.getUTCMonth()!==this.viewDate.getUTCMonth()&&this._trigger(\"changeMonth\",this.viewDate)),this._setDate(e)},navArrowsClick:function(b){var c=a(b.currentTarget),d=c.hasClass(\"prev\")?-1:1;0!==this.viewMode&&(d*=12*r.viewModes[this.viewMode].navStep),this.viewDate=this.moveMonth(this.viewDate,d),this._trigger(r.viewModes[this.viewMode].e,this.viewDate),this.fill()},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),-1!==b?(!0===this.o.multidate||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):!1===this.o.multidate?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),\"number\"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&\"date\"!==b||this._toggle_multidate(a&&new Date(a)),(!b&&this.o.updateViewDate||\"view\"===b)&&(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&\"view\"===b||this._trigger(\"changeDate\"),this.inputField.trigger(\"change\"),!this.o.autoclose||b&&\"date\"!==b||this.hide()},moveDay:function(a,b){var c=new Date(a);return c.setUTCDate(a.getUTCDate()+b),c},moveWeek:function(a,b){return this.moveDay(a,7*b)},moveMonth:function(a,b){if(!g(a))return this.o.defaultViewDate;if(!b)return a;var c,d,e=new Date(a.valueOf()),f=e.getUTCDate(),h=e.getUTCMonth(),i=Math.abs(b);if(b=b>0?1:-1,1===i)d=-1===b?function(){return e.getUTCMonth()===h}:function(){return e.getUTCMonth()!==c},c=h+b,e.setUTCMonth(c),c=(c+12)%12;else{for(var j=0;j0},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(\":visible\"))return void(40!==a.keyCode&&27!==a.keyCode||(this.show(),a.stopPropagation()));var b,c,d=!1,e=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault(),a.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;b=37===a.keyCode||38===a.keyCode?-1:1,0===this.viewMode?a.ctrlKey?(c=this.moveAvailableDate(e,b,\"moveYear\"))&&this._trigger(\"changeYear\",this.viewDate):a.shiftKey?(c=this.moveAvailableDate(e,b,\"moveMonth\"))&&this._trigger(\"changeMonth\",this.viewDate):37===a.keyCode||39===a.keyCode?c=this.moveAvailableDate(e,b,\"moveDay\"):this.weekOfDateIsDisabled(e)||(c=this.moveAvailableDate(e,b,\"moveWeek\")):1===this.viewMode?(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,\"moveMonth\")):2===this.viewMode&&(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,\"moveYear\")),c&&(this.focusDate=this.viewDate=c,this.setValue(),this.fill(),a.preventDefault());break;case 13:if(!this.o.forceParse)break;e=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(e),d=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(\":visible\")&&(a.preventDefault(),a.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}d&&(this.dates.length?this._trigger(\"changeDate\"):this._trigger(\"clearDate\"),this.inputField.trigger(\"change\"))},setViewMode:function(a){this.viewMode=a,this.picker.children(\"div\").hide().filter(\".datepicker-\"+r.viewModes[this.viewMode].clsName).show(),this.updateNavArrows(),this._trigger(\"changeViewMode\",new Date(this.viewDate))}};var l=function(b,c){a.data(b,\"datepicker\",this),this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,this.keepEmptyValues=c.keepEmptyValues,delete c.keepEmptyValues,n.call(a(this.inputs),c).on(\"changeDate\",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a.data(b,\"datepicker\")}),this.updateDates()};l.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},clearDates:function(){a.each(this.pickers,function(a,b){b.clearDates()})},dateUpdated:function(c){if(!this.updating){this.updating=!0;var d=a.data(c.target,\"datepicker\");if(d!==b){var e=d.getUTCDate(),f=this.keepEmptyValues,g=a.inArray(c.target,this.inputs),h=g-1,i=g+1,j=this.inputs.length;if(-1!==g){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b!==d&&f||b.setUTCDate(e)}),e=0&&ethis.dates[i])for(;ithis.dates[i];)this.pickers[i++].setUTCDate(e);this.updateDates(),delete this.updating}}}},destroy:function(){a.map(this.pickers,function(a){a.destroy()}),a(this.inputs).off(\"changeDate\",this.dateUpdated),delete this.element.data().datepicker},remove:f(\"destroy\",\"Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead\")};var m=a.fn.datepicker,n=function(c){var d=Array.apply(null,arguments);d.shift();var e;if(this.each(function(){var b=a(this),f=b.data(\"datepicker\"),g=\"object\"==typeof c&&c;if(!f){var j=h(this,\"date\"),m=a.extend({},o,j,g),n=i(m.language),p=a.extend({},o,n,j,g);b.hasClass(\"input-daterange\")||p.inputs?(a.extend(p,{inputs:p.inputs||b.find(\"input\").toArray()}),f=new l(this,p)):f=new k(this,p),b.data(\"datepicker\",f)}\"string\"==typeof c&&\"function\"==typeof f[c]&&(e=f[c].apply(f,d))}),e===b||e instanceof k||e instanceof l)return this;if(this.length>1)throw new Error(\"Using only allowed for the collection of a single element (\"+c+\" function)\");return e};a.fn.datepicker=n;var o=a.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,beforeShowYear:a.noop,beforeShowDecade:a.noop,beforeShowCentury:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:\"mm/dd/yyyy\",keepEmptyValues:!1,keyboardNavigation:!0,language:\"en\",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:\",\",orientation:\"auto\",rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,updateViewDate:!0,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:\"body\",immediateUpdates:!1,title:\"\",templates:{leftArrow:\"«\",rightArrow:\"»\"},showWeekDays:!0},p=a.fn.datepicker.locale_opts=[\"format\",\"rtl\",\"weekStart\"];a.fn.datepicker.Constructor=k;var q=a.fn.datepicker.dates={en:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],daysMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],today:\"Today\",clear:\"Clear\",titleFormat:\"MM yyyy\"}},r={viewModes:[{names:[\"days\",\"month\"],clsName:\"days\",e:\"changeMonth\"},{names:[\"months\",\"year\"],clsName:\"months\",e:\"changeYear\",navStep:1},{names:[\"years\",\"decade\"],clsName:\"years\",e:\"changeDecade\",navStep:10},{names:[\"decades\",\"century\"],clsName:\"decades\",e:\"changeCentury\",navStep:100},{names:[\"centuries\",\"millennium\"],clsName:\"centuries\",e:\"changeMillennium\",navStep:1e3}],validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,parseFormat:function(a){if(\"function\"==typeof a.toValue&&\"function\"==typeof a.toDisplay)return a;var b=a.replace(this.validParts,\"\\0\").split(\"\\0\"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error(\"Invalid date format.\");return{separators:b,parts:c}},parseDate:function(c,e,f,g){function h(a,b){return!0===b&&(b=10),a<100&&(a+=2e3)>(new Date).getFullYear()+b&&(a-=100),a}function i(){var a=this.slice(0,j[n].length),b=j[n].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!c)return b;if(c instanceof Date)return c;if(\"string\"==typeof e&&(e=r.parseFormat(e)),e.toValue)return e.toValue(c,e,f);var j,l,m,n,o,p={d:\"moveDay\",m:\"moveMonth\",w:\"moveWeek\",y:\"moveYear\"},s={yesterday:\"-1d\",today:\"+0d\",tomorrow:\"+1d\"};if(c in s&&(c=s[c]),/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(c)){for(j=c.match(/([\\-+]\\d+)([dmwy])/gi),c=new Date,n=0;n'+o.templates.leftArrow+''+o.templates.rightArrow+\"\",contTemplate:'',footTemplate:''};r.template='
    '+r.headTemplate+\"\"+r.footTemplate+'
    '+r.headTemplate+r.contTemplate+r.footTemplate+'
    '+r.headTemplate+r.contTemplate+r.footTemplate+'
    '+r.headTemplate+r.contTemplate+r.footTemplate+'
    '+r.headTemplate+r.contTemplate+r.footTemplate+\"
    \",a.fn.datepicker.DPGlobal=r,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=m,this},a.fn.datepicker.version=\"1.9.0\",a.fn.datepicker.deprecated=function(a){var b=window.console;b&&b.warn&&b.warn(\"DEPRECATED: \"+a)},a(document).on(\"focus.datepicker.data-api click.datepicker.data-api\",'[data-provide=\"datepicker\"]',function(b){var c=a(this);c.data(\"datepicker\")||(b.preventDefault(),n.call(c,\"show\"))}),a(function(){n.call(a('[data-provide=\"datepicker-inline\"]'))})});","(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\").addClass(\"list-unstyled\").append(a.map(d,function(b){return a(\"
  • \")[c](b)})),void 0===f.data(\"bs.validator.originalContent\")&&f.data(\"bs.validator.originalContent\",f.html()),f.empty().append(d),e.addClass(\"has-error has-danger\"),e.hasClass(\"has-feedback\")&&g.removeClass(this.options.feedback.success)&&g.addClass(this.options.feedback.error)&&e.removeClass(\"has-success\"))},d.prototype.clearErrors=function(a){var c=a.closest(\".form-group\"),d=c.find(\".help-block.with-errors\"),e=c.find(\".form-control-feedback\");d.html(d.data(\"bs.validator.originalContent\")),c.removeClass(\"has-error has-danger has-success\"),c.hasClass(\"has-feedback\")&&e.removeClass(this.options.feedback.error)&&e.removeClass(this.options.feedback.success)&&b(a)&&e.addClass(this.options.feedback.success)&&c.addClass(\"has-success\")},d.prototype.hasErrors=function(){function b(){return!!(a(this).data(\"bs.validator.errors\")||[]).length}return!!this.$inputs.filter(b).length},d.prototype.isIncomplete=function(){function c(){var c=b(a(this));return!(\"string\"==typeof c?a.trim(c):c)}return!!this.$inputs.filter(\"[required]\").filter(c).length},d.prototype.onSubmit=function(a){this.validate(),(this.isIncomplete()||this.hasErrors())&&a.preventDefault()},d.prototype.toggleSubmit=function(){this.options.disable&&this.$btn.toggleClass(\"disabled\",this.isIncomplete()||this.hasErrors())},d.prototype.defer=function(b,c){return c=a.proxy(c,this,b),this.options.delay?(window.clearTimeout(b.data(\"bs.validator.timeout\")),void b.data(\"bs.validator.timeout\",window.setTimeout(c,this.options.delay))):c()},d.prototype.reset=function(){return this.$element.find(\".form-control-feedback\").removeClass(this.options.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData([\"bs.validator.errors\",\"bs.validator.deferred\"]).each(function(){var b=a(this),c=b.data(\"bs.validator.timeout\");window.clearTimeout(c)&&b.removeData(\"bs.validator.timeout\")}),this.$element.find(\".help-block.with-errors\").each(function(){var b=a(this),c=b.data(\"bs.validator.originalContent\");b.removeData(\"bs.validator.originalContent\").html(c)}),this.$btn.removeClass(\"disabled\"),this.$element.find(\".has-error, .has-danger, .has-success\").removeClass(\"has-error has-danger has-success\"),this},d.prototype.destroy=function(){return this.reset(),this.$element.removeAttr(\"novalidate\").removeData(\"bs.validator\").off(\".bs.validator\"),this.$inputs.off(\".bs.validator\"),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this.$inputs=null,this};var e=a.fn.validator;a.fn.validator=c,a.fn.validator.Constructor=d,a.fn.validator.noConflict=function(){return a.fn.validator=e,this},a(window).on(\"load\",function(){a('form[data-toggle=\"validator\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery);","//! moment.js\n//! version : 2.28.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\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\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\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\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\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\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\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\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\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\n return false;\n };\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 =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\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\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\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\n function copyConfig(to, from) {\n var i, prop, val;\n\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\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\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\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\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(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\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\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\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(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\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 (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (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\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\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\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\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 () {\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(\n func.apply(this, arguments),\n token\n );\n };\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\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\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\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : 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\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\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\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\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\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\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\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\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\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\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\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\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\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\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\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\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 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\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\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(\n s\n .replace('\\\\', '')\n .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n matched,\n p1,\n p2,\n p3,\n p4\n ) {\n return p1 || p2 || p3 || p4;\n })\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\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 (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\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\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\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\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (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\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\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\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\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\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 '_'\n ),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n '_'\n ),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\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(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\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\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\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(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\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\n if (!mom.isValid()) {\n // No op\n return mom;\n }\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\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\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\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\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\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\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\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\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\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\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\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\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\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n 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\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\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\n return date;\n }\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\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // 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\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\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\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\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\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\n return {\n week: resWeek,\n year: resYear,\n };\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\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n input,\n week,\n config,\n token\n ) {\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\n var defaultLocaleWeek = {\n dow: 0, // 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\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\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\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\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\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\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\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\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\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\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\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\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\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\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\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\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\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(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\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\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\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\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\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\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\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\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\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\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\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\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\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\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\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\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\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\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\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\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\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 (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\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\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 (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\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\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(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\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(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\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\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\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\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\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\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\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\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\n getParsingFlags(m).overflow = overflow;\n }\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 = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\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\n if (match) {\n getParsingFlags(config).iso = true;\n\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\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\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\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\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(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\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(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\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\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\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\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 [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\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\n if (config._d) {\n return;\n }\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\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\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] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : 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\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\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(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\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\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\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\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[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(\n string.indexOf(parsedInput) + parsedInput.length\n );\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 =\n 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 (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\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\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\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\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\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\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\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\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\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\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\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\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\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\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\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\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\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n 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 prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n 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\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\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\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\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\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\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 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\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\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 (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\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 (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\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\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\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 =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : 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\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(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\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\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\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\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\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\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\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 (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\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\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, 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\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(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\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\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\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\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\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 (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\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 (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 =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\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\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\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 (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\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 (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\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; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\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\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\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\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(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\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)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\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\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\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\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\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\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\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\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\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\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\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(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\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\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\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\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 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 +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 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\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\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\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\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\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\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\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n input,\n array,\n config,\n token\n ) {\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\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\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\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\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\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\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\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\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\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\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\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\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\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\n return '';\n }\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\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\n return '';\n }\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\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\n return '';\n }\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\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\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\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\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(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\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\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 2)] = toInt(input);\n });\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(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\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\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\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\n ? Math.ceil((this.month() + 1) / 3)\n : 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\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\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 =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 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\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\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\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\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\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\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(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\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\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\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\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\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\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\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\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\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\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\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\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\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\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 (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\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\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\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\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\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\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\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 (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\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\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\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\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // 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\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 =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\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\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\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\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\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\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\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\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\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\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\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\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.28.0';\n\n setHookCallback(createLocal);\n\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 DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n/*global define: false Mustache: true*/\n\n(function defineMustache (global, factory) {\n if (typeof exports === 'object' && exports && typeof exports.nodeName !== 'string') {\n factory(exports); // CommonJS\n } else if (typeof define === 'function' && define.amd) {\n define(['exports'], factory); // AMD\n } else {\n global.Mustache = {};\n factory(global.Mustache); // script, wsh, asp\n }\n}(this, function mustacheFactory (mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n')\n stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [ type, value, start, scanner.pos ];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit)\n break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null)\n tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render (template, view, partials) {\n var tokens = this.parse(template);\n var context = (view instanceof Context) ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null)\n return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.3.2';\n mustache.tags = [ '{{', '}}' ];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render (template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html (template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n}));\n","/******************************************************************\r\n * Common tools code\r\n *****************************************************************/\r\nvar Unclick = require('./unclick.js');\r\nvar moment = require('moment');\r\nvar Common = {};\r\n\r\n/**\r\n * Export common function\r\n */\r\nmodule.exports = (function () {\r\n //search-panel-with-btn click action in complexSelectList\r\n Common.searchPanelBtnClick = function (btn, applyText) {\r\n //replace select panel's text\r\n var titleElement = $(btn).parents('.panel-selectlist-complex').find('> .panel-heading > .panel-title-section');\r\n if (titleElement && titleElement.length === 1) {\r\n titleElement.empty();\r\n titleElement.append('' + applyText + '');\r\n }\r\n\r\n $(btn).parents('.search-panel-with-btn').collapse('hide');\r\n }\r\n\r\n Common.convertByteSize = function (size) {\r\n var units = ['Bytes', 'KB', 'MB', 'GB', 'TB'],\r\n unitIndex = 0;\r\n\r\n while (size >= 1024) {\r\n size = size / 1024;\r\n unitIndex++;\r\n }\r\n\r\n return Math.round(size) + \" \" + units[unitIndex];\r\n }\r\n\r\n return Common;\r\n})();\r\n\r\n/**\r\n * Same reference for payee feature\r\n */\r\n$(function () {\r\n function copyText(scope) {\r\n var sourceValue = $(scope).parents('.same-refer-container').find('.same-refer-source').val();\r\n if (sourceValue) {\r\n var dest = $(scope).parents('.same-refer-container').find('.same-refer-dest');\r\n if (dest && dest.length) {\r\n var maxLen = dest.attr(\"maxlength\");\r\n sourceValue = sourceValue.substr(0, maxLen);\r\n dest.val(sourceValue);\r\n }\r\n }\r\n }\r\n\r\n $('.same-refer-switcher .label-yes').click(function () {\r\n copyText(this);\r\n });\r\n\r\n $('.same-refer-switcher .label-no').click(function () {\r\n $(this).parents('.same-refer-container').find('.same-refer-dest').val('');\r\n });\r\n\r\n $('.same-refer-source').change(function () {\r\n if ($(this).parents('.same-refer-container').find('.same-refer-switcher .label-yes').hasClass('active') === true) {\r\n copyText(this);\r\n }\r\n });\r\n\r\n $('.same-refer-dest').keyup(function () {\r\n $(this).parents('.same-refer-container').find('.same-refer-switcher .label-no').button('toggle');\r\n });\r\n});\r\n\r\n/**\r\n * Hide search list that is not in a panel\r\n */\r\n$(function () {\r\n function hideList() {\r\n $(this).addClass('hidden');\r\n $(this).parents('.search-input-with-btn-container').removeClass('search-list-open');\r\n }\r\n\r\n var elements = $('.search-input-with-btn-container .search-input-with-btn-list');\r\n\r\n var exceptArray = [];\r\n for (var i = 0; i < elements.length; i++) {\r\n var input = $(elements[i]).parents('.search-input-with-btn-container').find('.search-input-not-in-panel'),\r\n btn = $(elements[i]).parents('.search-input-with-btn-container').find('button'),\r\n eleObj = {\r\n elem: elements[i],\r\n excepts: []\r\n };\r\n\r\n if (input && input.length) {\r\n input.each(function (index, element) {\r\n eleObj.excepts.push($(element).parents('.input-group')[0]);\r\n });\r\n }\r\n\r\n if (btn && btn.length) {\r\n btn.each(function (index) {\r\n eleObj.excepts.push(btn[index]);\r\n });\r\n }\r\n\r\n exceptArray.push(eleObj);\r\n\r\n Unclick.registerUnclick(elements[i], hideList, exceptArray);\r\n }\r\n});\r\n\r\n/*\r\n * close panel-dropdown panel when click on outside\r\n */\r\n$(function () {\r\n var dd_panelBody = $('.panel.panel-dropdown .panel-collapse');\r\n\r\n function closePanel() {\r\n $(this).collapse('hide');\r\n }\r\n\r\n for (var i = 0; i < dd_panelBody.length; i++) {\r\n Unclick.registerUnclick(dd_panelBody[i], closePanel);\r\n }\r\n});\r\n\r\n/*\r\n * process a panel with a group list that can be selected, select item text will apply panel heading\r\n */\r\n$(function () {\r\n //simple\r\n $(document).on('click.simpleSelectList', '.panel-selectlist .list-group-item', function () {\r\n var clickText = $(this).text();\r\n var panelTitleEle = $(this).parents('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n var curText = panelTitleEle.text();\r\n if (curText !== clickText) {\r\n panelTitleEle.text(clickText);\r\n }\r\n $($(this).parents('.collapse')[0]).collapse('hide');\r\n $($(this).parents('.panel-selectlist')[0]).find('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n\r\n //complex\r\n $(document).on('click.complexSelectList', '.panel-selectlist-complex .list-group-item', function () {\r\n var clickElements = $(this).children();\r\n var panelTitleEle = $(this).parents('.panel-selectlist-complex').find('> .panel-heading > .panel-title-section');\r\n\r\n panelTitleEle.empty();\r\n panelTitleEle.append(clickElements.clone());\r\n $($(this).parents('.collapse')[0]).collapse('hide');\r\n $($(this).parents('.panel-selectlist-complex')[0]).find('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n});\r\n\r\n/*\r\n * Init bootstrap validator\r\n */\r\n$(function () {\r\n var defaultDecimalPlaces = 2;\r\n $('form').validator({\r\n custom: {\r\n \"date-validate\": function (elem) {\r\n var m = moment(elem.val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (!m.isValid()) {\r\n return window.MvpFE.globalConfiguration.dateValidateMessage || \"Not a valid date (Choose DD/MM/YYYY or dd mm yyyy)\";\r\n }\r\n },\r\n \"amount-validate\": function (elem) {\r\n var value = elem.val().trim().replace(/,/g, '');\r\n var num = Number(value);\r\n if (isNaN(num) || num < 0) {\r\n return \"Not a valid amount\";\r\n } else {\r\n var pos = value.indexOf('.');\r\n if (pos === -1) {\r\n return;\r\n }\r\n\r\n var decimal = value.substr(pos + 1),\r\n decimalPlaces = elem.data('decimal-places');\r\n\r\n decimalPlaces = decimalPlaces || defaultDecimalPlaces;\r\n if (decimal.length > decimalPlaces) {\r\n return \"Not a valid amount\";\r\n }\r\n }\r\n },\r\n \"range-validate\": function (elem) {\r\n var val = elem.val();\r\n val = val.replace(/,/g, '');\r\n val = parseFloat(val);\r\n var min = parseFloat(elem.attr('data-min'));\r\n var max = parseFloat(elem.attr('data-max'));\r\n\r\n if (val < min) {\r\n return \"Value must be greater than or equal to \" + window.MvpFE.addComma(min);\r\n }\r\n if (val > max) {\r\n return \"Value must be less than or equal to \" + window.MvpFE.addComma(max);\r\n }\r\n },\r\n //This is for date of birth in Online Leading now\r\n \"date-age-min\": function (elem) {\r\n let m = moment(elem.val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (m.isValid()) {\r\n let age = $(elem).data(\"date-age-min\");\r\n let yearNow = new Date().getFullYear();\r\n let yearDob = new Date($(elem).val()).getFullYear();\r\n if (yearNow - yearDob < age) {\r\n return `The applicant must be ${age} years of age or over.`;\r\n }\r\n }\r\n }\r\n },\r\n delay: 1000\r\n });\r\n //This setting has some issue now and some input filed cannot bind event like amount filed\r\n //$.fn.validator.Constructor.INPUT_SELECTOR += ':visible';\r\n //$('form').validator('update');\r\n\r\n //update validator to don't submit hidden fields when tab switch\r\n $('form [data-toggle=\"tab\"]').on('shown.bs.tab', function () {\r\n $('form').validator('update');\r\n });\r\n\r\n function updateValidator() {\r\n $('form').validator('update');\r\n }\r\n window.MvpFE.rebindFunctions.updateValidator = updateValidator;\r\n});\r\n\r\n/*\r\n * Select an select option to show specific panel and hidden others\r\n */\r\n$(function () {\r\n $('.ref-panel').change(function () {\r\n var panelId = $(this).find(':selected').data('refpanelid');\r\n $('.ref-select-option').addClass('hidden');\r\n $('#' + panelId).removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * process close icon\r\n */\r\n$(function () {\r\n $('.close-icon').click(function () {\r\n var targetId = $(this).data('closeid');\r\n $('#' + targetId).hide(400);\r\n });\r\n});\r\n\r\n/*\r\n * dynamic colspan\r\n */\r\n$(function () {\r\n function applyColSpan() {\r\n var winWidth = $(window).width();\r\n if (winWidth < 768) {\r\n $('td[data-mobilespan]').each(function () {\r\n $(this).attr('colspan', $(this).data('mobilespan'));\r\n });\r\n } else {\r\n $('td[data-desktopspan]').each(function () {\r\n $(this).attr('colspan', $(this).data('desktopspan'));\r\n });\r\n }\r\n }\r\n\r\n if ($('td[data-mobilespan]').length > 0) {\r\n $(window).resize(function () {\r\n applyColSpan();\r\n });\r\n applyColSpan();\r\n }\r\n});\r\n\r\n/*\r\n * clickable row process\r\n */\r\n$(function () {\r\n function isCusCheckbox(e) {\r\n if ($(e.target).parents('.checkbox-cus').length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function isInLink(e) {\r\n if ($(e.target).hasClass('link-in-clickable-row') || $(e.target).parents('.link-in-clickable-row').length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n $(document).on('click', '.clickable-row', function (e) {\r\n if (isCusCheckbox(e) || isInLink(e)) {\r\n return;\r\n }\r\n window.location = $(this).data('href');\r\n });\r\n\r\n $(document).on('click', '.clickable-row-desktop', function (e) {\r\n if (isCusCheckbox(e) || isInLink(e)) {\r\n return;\r\n }\r\n if ($(window).width() >= 768) {\r\n window.location = $(this).data('href');\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * change credit card field's value\r\n */\r\n$(function () {\r\n $(document).on('keyup.credit-card-field', '.credit-card-field', function (e) {\r\n var value = $(this).val().replace(/\\s+/g, ''),\r\n len = value.length;\r\n\r\n if (len > 0 && e.key !== 'Backspace') {\r\n var newValue = '';\r\n for (var i = 0; i < len; i++) {\r\n if (i > 0 && i % 4 === 0) {\r\n newValue += ' ';\r\n }\r\n newValue += value[i];\r\n }\r\n $(this).val(newValue);\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * select options tab \r\n */\r\n$(function () {\r\n $(document).on('change.selecttabs', 'select.selecttabs', function () {\r\n var target = $(this).data('selecttab'),\r\n index = $(this).prop('selectedIndex'),\r\n selector = target + ' > li:eq(' + index + ') > a';\r\n\r\n $(selector).tab('show');\r\n });\r\n});\r\n\r\n/*\r\n * Amoutn field\r\n */\r\n$(function () {\r\n var decimalPlace = 2;\r\n function addComma(num) {\r\n var value = num.toString();\r\n var dotIndex = value.indexOf('.');\r\n if (dotIndex === -1 || (dotIndex >= value.length - 2 && value.length >= 2)) {\r\n num = num.toFixed(decimalPlace);\r\n }\r\n value = num.toString();\r\n //get index again becuase of toFixed\r\n dotIndex = value.indexOf('.');\r\n var amountIntPart = value.slice(0, dotIndex);\r\n\r\n for (var i = amountIntPart.length - 3; i > 0; i -= 3) {\r\n amountIntPart = value.slice(0, i) + ',' + amountIntPart.slice(i);\r\n }\r\n\r\n value = amountIntPart + value.slice(dotIndex);\r\n\r\n return value;\r\n }\r\n window.MvpFE.addComma = addComma;\r\n // Automaticly add .00 for account field when user finish the field\r\n $(document).on('change.amount-auto-format', '.amount-auto-format', function () {\r\n var value = $(this).val();\r\n\r\n if (value) {\r\n value = value.replace(/,/g, '');\r\n var num = Number(value);\r\n if (!isNaN(num) && num >= 0) {\r\n value = addComma(num);\r\n $(this).val(value);\r\n }\r\n }\r\n });\r\n\r\n //Insert data attribute and validation infor box to amount field\r\n function insertAttrDivToAmount() {\r\n $('.amount-auto-format').each(function () {\r\n $(this).attr('data-amount-validate', '');\r\n var errorBox = $(this).nextAll('.help-block.with-errors');\r\n if (errorBox.length === 0) {\r\n $(this).after('
    ');\r\n }\r\n })\r\n }\r\n insertAttrDivToAmount();\r\n window.MvpFE.rebindFunctions.insertAttrDivToAmount = insertAttrDivToAmount;\r\n});\r\n\r\n\r\n/*\r\n * Scroll to collapse container\r\n */\r\n$(function () {\r\n $('.scroll-to-here').on('shown.bs.collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('html, body').animate({\r\n scrollTop: $(this).offset().top\r\n }, 500);\r\n });\r\n});\r\n\r\n/**\r\n * Scroll to target when click the element\r\n */\r\n$(function () {\r\n $(document).on('click', '[data-scrollto]', function () {\r\n var selector = $(this).data('scrollto');\r\n if (selector && selector.length > 0) {\r\n setTimeout(function () {\r\n $('html, body').animate({\r\n scrollTop: $(selector).offset().top\r\n }, 500);\r\n }, 10);\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * Close window when click this element\r\n */\r\n$(function () {\r\n $(document).on('click.closeWindow', '.close-window', function () {\r\n window.close();\r\n });\r\n});\r\n\r\n/*\r\n * radio button active init\r\n */\r\n$(function () {\r\n function resetRadioActive() {\r\n var elements = $('[data-toggle=\"buttons\"] > label > input[type=\"radio\"]');\r\n for (var i = 0; i < elements.length; i++) {\r\n if ($(elements[i]).prop('checked')) {\r\n $(elements[i]).parents('[data-toggle=\"buttons\"]').find('label').removeClass('active');\r\n $(elements[i]).parent().addClass('active');\r\n $(elements[i]).parent('[data-toggle=\"tab\"]').tab('show');\r\n }\r\n }\r\n }\r\n resetRadioActive();\r\n window.MvpFE.rebindFunctions.resetRadioActive = resetRadioActive;\r\n});\r\n\r\n/**\r\n * process transfer time radio buttons border radius\r\n */\r\n$(function () {\r\n function setTransTimeRadius() {\r\n $('label[data-target=\"#transfer_now_tab\"]').on('show.bs.tab', function () {\r\n $(this).parent('.btn-group').removeClass('bottom-radius-zero');\r\n });\r\n $('label[data-target=\"#transfer_onceon_tab\"], label[data-target=\"#transfer_recurring\"]').on('show.bs.tab', function () {\r\n $(this).parent('.btn-group').addClass('bottom-radius-zero');\r\n });\r\n }\r\n setTransTimeRadius();\r\n window.MvpFE.rebindFunctions.setTransTimeRadius = setTransTimeRadius;\r\n});\r\n\r\n/**\r\n * search input field is not in a panel common action\r\n */\r\n$(function () {\r\n $(document).on('focus', '.search-input-with-btn-container .input-group input', function () {\r\n $('.search-input-with-btn-container .input-group-addon').addClass('input-focus');\r\n });\r\n\r\n $(document).on('blur', '.search-input-with-btn-container .input-group input', function () {\r\n $('.search-input-with-btn-container .input-group-addon').removeClass('input-focus');\r\n });\r\n});\r\n\r\n/**\r\n * Print page\r\n */\r\n$(function () {\r\n $(document).on('click', '.print-page-btn', function () {\r\n window.print();\r\n });\r\n});\r\n\r\n/**\r\n * quick links\r\n */\r\n$(function () {\r\n function insertMoreOptions(eles, maxNum) {\r\n if (eles && eles.length > 0) {\r\n for (var i = eles.length; i >= maxNum - 1; i--) {\r\n var currEle = eles[i]\r\n $(currEle).removeClass();\r\n $(currEle).addClass('list-group-item text-right');\r\n $(currEle).removeAttr('role');\r\n $(currEle).parent('.quick-links').siblings('.quick-links-more-options').children('.list-group').prepend(currEle);\r\n }\r\n\r\n $(eles[0]).siblings('.quick-links-more-option-btn').removeClass('hidden');\r\n }\r\n\r\n }\r\n\r\n function adjustQuickLinks() {\r\n //The number of quick links on desktop\r\n var maxNum = 5,\r\n maxNumMobile = 3,\r\n quickLinks = $('.quick-links');\r\n\r\n if (!quickLinks || quickLinks.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < quickLinks.length; i++) {\r\n var links = $(quickLinks[i]).children('a:not(.quick-links-more-option-btn)')\r\n if (links && links.length > 0) {\r\n if ($(window).width() >= 768) {\r\n if (links.length > maxNum) {\r\n insertMoreOptions(links, maxNum);\r\n }\r\n } else {\r\n if (links.length > maxNumMobile) {\r\n insertMoreOptions(links, maxNumMobile);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n adjustQuickLinks();\r\n window.MvpFE.rebindFunctions.adjustQuickLinks = adjustQuickLinks;\r\n});\r\n\r\n/* match height for left title table on tablet*/\r\n$(function () {\r\n function matchCellHeightTablet() {\r\n if ($(window).width() < 768 || $(window).width() >= 992) {\r\n $('.table-title-left-tablet tbody tr td:not(.content-only-nopadding)').css('height', '');\r\n return;\r\n }\r\n\r\n var trs = $('.table-title-left-tablet tbody tr');\r\n if (!trs || trs.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < trs.length; i++) {\r\n var tds = $(trs[i]).children('td:not(.content-only-nopadding)');\r\n if (!tds || tds.length === 0) {\r\n continue;\r\n }\r\n\r\n for (var j = 1; j < tds.length; j += 2) {\r\n var height1 = $(tds[j - 1]).height();\r\n var height2 = $(tds[j]).height();\r\n if (height1 !== height2) {\r\n height1 > height2 ? $(tds[j]).height(height1) : $(tds[j - 1]).height(height2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n matchCellHeightTablet();\r\n $(window).resize(function () {\r\n matchCellHeightTablet();\r\n });\r\n});\r\n\r\n// Input file type logic\r\n$(function () {\r\n function inputFileChange() {\r\n var inputs = $('.inputfile');\r\n inputs.each(function (i, input) {\r\n var btn = $(input).next('.inputfile-btn');\r\n $(input).change(function () {\r\n var fileName = $(this).val().split('\\\\').pop();\r\n\r\n if (fileName) {\r\n $(btn).children('.inputfile-btn-text').text(fileName + \" (\" + Common.convertByteSize(this.files[0].size) + \")\");\r\n }\r\n });\r\n });\r\n }\r\n inputFileChange();\r\n window.MvpFE.rebindFunctions.inputFileChange = inputFileChange;\r\n});\r\n\r\n// Adjust iframe's height\r\n$(function () {\r\n $('.iframe-auto-height').on('load', function () {\r\n $(this).height(this.contentWindow.document.body.scrollHeight);\r\n });\r\n});\r\n\r\n// bootstrap-select init\r\n$(function () {\r\n function bindSelectPicker() {\r\n $('.phone-input-areacode select').selectpicker({\r\n style: 'btn-selectpicker'\r\n });\r\n }\r\n\r\n bindSelectPicker();\r\n window.MvpFE.rebindFunctions.bindSelectPicker = bindSelectPicker;\r\n});\r\n\r\n// nicEdit\r\n$(function () {\r\n var editMain = $('.nicEdit-main');\r\n if (editMain.length > 0) {\r\n editMain.parent().addClass('nic-edit-main-container');\r\n }\r\n});\r\n\r\n// Checkbox\r\n$(function () {\r\n // toggle all checkbox\r\n $(document).on('change', '.checkbox-head', function () {\r\n $(this).parents('table').find('tbody .checkbox-cus input[type=\"checkbox\"]').prop('checked', this.checked);\r\n });\r\n});\r\n\r\n// rotate iamge\r\n$(function () {\r\n $('[data-rotate-imageid]').click(function () {\r\n var targetId = $(this).data('rotate-imageid');\r\n var ele = $('#' + targetId);\r\n if (!ele.hasClass('rotate-image')) {\r\n ele.addClass('rotate-image rotate-image-1');\r\n } else {\r\n var className = ele[0].className.match(/rotate-image-(\\d)/);\r\n var newClassName = 'rotate-image-' + ((parseInt(className[1]) % 4) + 1);\r\n ele.removeClass(className[0]);\r\n ele.addClass(newClassName);\r\n }\r\n })\r\n});\r\n\r\n// hack way to insert the value into another row in a confirm container\r\n$(function () {\r\n $('.confirm-info-box .value-merge-to-previous-row').each(function () {\r\n var text = $(this).text();\r\n var prevValueDiv = $(this).parent('.row').prev('.row').children(':last-child');\r\n if (prevValueDiv.length > 0) {\r\n prevValueDiv.html(prevValueDiv.html() + '
    ' + text);\r\n $(this).parent('div').remove();\r\n }\r\n });\r\n});\r\n\r\n// Binding radio buttons with a list-group together, click radio button will select right list-group-list or vice versa \r\n$(function () {\r\n function selectBindingListItem(list, target) {\r\n const panelTitleEle = $(list).parent('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n const listItem = $(list).children(`[href=\"${target}\"]`);\r\n const text = listItem.text();\r\n $(list).children('.list-group-item').removeClass('active');\r\n listItem.addClass('active');\r\n panelTitleEle.text(text);\r\n }\r\n\r\n function setBindingListItem() {\r\n let elements = $('[data-binding-select-list] > label > input[type=radio]');\r\n elements.each(function () {\r\n if ($(this).prop('checked')) {\r\n const target = $(this).parent().data('target');\r\n const list = $(this).parents('[data-binding-select-list]').data('binding-select-list');\r\n selectBindingListItem(list, target);\r\n }\r\n });\r\n }\r\n\r\n setBindingListItem();\r\n\r\n $(document).on('click', '[data-binding-radio-btns=\"true\"] > .list-group-item', function () {\r\n const target = $(this).attr('href');\r\n $(`.btn-group label[data-target=\"${target}\"]`).trigger('click');\r\n });\r\n\r\n $(document).on('click', '[data-binding-select-list] > label', function () {\r\n const target = $(this).data('target');\r\n const list = $(this).parent().data('binding-select-list');\r\n selectBindingListItem(list, target);\r\n });\r\n});\r\n\r\n// Custom Accordion - bootstrap3's accordion needs to use panel, so we create our own\r\n// Don't nest\r\n$(() => {\r\n function bindCusAccordionClicks() {\r\n let allCollapses = $('[data-parent-cus]');\r\n allCollapses.each(function () {\r\n $(this).on('click', function () {\r\n if ($(this).attr('aria-expanded') == 'false') {\r\n let currEle = this;\r\n allCollapses.each(function () {\r\n if (currEle !== this) {\r\n let targetSelForHide = $(this).data('target');\r\n $(targetSelForHide).collapse('hide');\r\n }\r\n });\r\n\r\n let me = this;\r\n setTimeout(function () {\r\n $('html, body').scrollTop($(me).offset().top);\r\n }, 400);\r\n }\r\n });\r\n });\r\n }\r\n window.MvpFE.rebindFunctions.bindCusAccordionClicks = bindCusAccordionClicks;\r\n bindCusAccordionClicks();\r\n});\r\n\r\n// Aujust height of td for table-title-left-mobile table\r\n$(function () {\r\n\r\n $('.panel-collapse').on('click', function () {\r\n if ($(\".panel-title-section\").find('.row')) {\r\n $(this).siblings().addClass('active')\r\n }\r\n })\r\n\r\n if ($(\".panel-title-section\").children().hasClass('row')) {\r\n $(\".panel-title-section\").parent().addClass('active')\r\n }\r\n\r\n\r\n function adjustTableCellHeight() {\r\n if ($(window).width() >= 768) return;\r\n let allTables = $('.table-title-left-mobile.table-match-height-mobile');\r\n if (allTables.length === 0) return;\r\n\r\n allTables.each(function () {\r\n let allCellsInCurr = $(this).find('tbody td:not(.content-only-nopadding)');\r\n allCellsInCurr.each(function () {\r\n let currTitle = $(this).data('title');\r\n let oldHeight = $(this).height();\r\n let oldText = $(this).text();\r\n let oldPaddingLeft = $(this).css('paddingLeft');\r\n let paddingTop = $(this).css('paddingTop');\r\n let oldTextTransform = $(this).css('text-transform');\r\n let headerTransform = $(this).parents('table').find('thead td, thead th').first().css('text-transform');\r\n paddingTop = paddingTop.substring(0, paddingTop.indexOf('px'))\r\n $(this).css('padding-left', $(this).width() + paddingTop * 2 + 10);\r\n $(this).css('text-transform', headerTransform);\r\n $(this).text(currTitle);\r\n let newHeight = $(this).height() + paddingTop * 2;\r\n $(this).css('padding-left', oldPaddingLeft);\r\n $(this).css('text-transform', oldTextTransform);\r\n if (newHeight > oldHeight) {\r\n $(this).css('height', newHeight);\r\n }\r\n $(this).text(oldText);\r\n });\r\n });\r\n }\r\n\r\n adjustTableCellHeight();\r\n $(window).resize(function () {\r\n //when the size of window changed, clear the include style and redo the adjustment if it is a small screen device\r\n let allTables = $('.table-title-left-mobile.table-match-height-mobile');\r\n if (allTables.length > 0) {\r\n allTables.each(function () {\r\n let allCellsInCurr = $(this).find('tbody td:not(.content-only-nopadding)');\r\n allCellsInCurr.each(function () {\r\n $(this).attr('style', '');\r\n });\r\n });\r\n }\r\n adjustTableCellHeight();\r\n });\r\n});","//requre third party modules\r\nrequire('bootstrap-validator/dist/validator.min.js');\r\nrequire('./modules/custom-event-polyfill.js');\r\nrequire('./modules/mustache-tmpl.js');\r\nrequire('./modules/date.js');\r\nrequire('./modules/totop.js');\r\nrequire('./modules/iconmap.js');\r\nrequire('./modules/common.js');\r\nrequire('./modules/menu.js');\r\nrequire('./modules/search.js');\r\nrequire('./modules/page-logic.js');\r\n","/******************************************************************\r\n * process mustache template and load data\r\n *****************************************************************/\r\nvar Mustache = require('mustache');\r\n\r\nwindow.MvpFE = window.MvpFE || {};\r\nwindow.MvpFE.rebindFunctions = {};\r\nwindow.MvpFE.rebindEvents = function () {\r\n for (var funcName in window.MvpFE.rebindFunctions) {\r\n window.MvpFE.rebindFunctions[funcName]();\r\n }\r\n};\r\n\r\nmodule.exports = (function () {\r\n var TmplData = {};\r\n Mustache.tags = ['{[', ']}'];\r\n\r\n // get mustache template and set data to target element\r\n TmplData.setTemplateData = function (tmplId, data, target) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n var template = $('#' + tmplId).html();\r\n if (!template) {\r\n return;\r\n }\r\n\r\n Mustache.parse(template);\r\n var rendered = Mustache.render(template, data);\r\n $(target).html(rendered);\r\n };\r\n\r\n function sortDataByProp(data, prop) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n data = data.sort(function (a, b) {\r\n if (!a[prop]) a[prop] = '';\r\n if (!b[prop]) b[prop] = '';\r\n\r\n return (a[prop].toLowerCase() > b[prop].toLowerCase()) ? 1 : ((a[prop].toLowerCase() < b[prop].toLowerCase()) ? -1 : 0);\r\n });\r\n }\r\n\r\n function convertDataToGroupByLetter(data, rootProp, sortPropName) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n var newData = {\r\n groups: []\r\n };\r\n\r\n var firstLetter;\r\n var group = {\r\n items: []\r\n };\r\n\r\n for (var i = 0; i < data[rootProp].length; i++) {\r\n if (!data[rootProp][i] || $.isEmptyObject(data[rootProp][i])) {\r\n continue;\r\n }\r\n\r\n var firstLetterNew = data[rootProp][i][sortPropName].charAt(0).toUpperCase();\r\n var item = jQuery.extend(true, {}, data[rootProp][i]);\r\n\r\n if (firstLetter !== firstLetterNew) {\r\n firstLetter = firstLetterNew;\r\n group = new Object({\r\n items: []\r\n });\r\n group.firstLetter = firstLetterNew;\r\n newData.groups.push(group);\r\n }\r\n group.items.push(item);\r\n }\r\n\r\n return newData;\r\n }\r\n\r\n function createTmplDataFunc (dataVar, sortProp, rootName, tmplId, selector) {\r\n return function () {\r\n if (!window[dataVar]) {\r\n return;\r\n }\r\n\r\n TmplData[dataVar] = jQuery.extend(true, {}, window[dataVar]);\r\n TmplData[dataVar + 'Formated'] = {};\r\n sortDataByProp(TmplData[dataVar][rootName], sortProp);\r\n TmplData[dataVar + 'Formated'] = convertDataToGroupByLetter(TmplData[dataVar], rootName, sortProp);\r\n TmplData.setTemplateData(tmplId, TmplData[dataVar + 'Formated'], selector);\r\n }\r\n }\r\n\r\n //process data\r\n $(function () {\r\n window.MvpFE.loadTransToData();\r\n window.MvpFE.loadBpayBillers();\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n window.MvpFE.loadChequeToPayees();\r\n window.MvpFE.loadExternalPayees();\r\n window.MvpFE.loadInstitutionPayee();\r\n window.MvpFE.loadInternationalTransferRecipient();\r\n window.MvpFE.loadInternationalSearchBank();\r\n window.MvpFE.loadExternalTransfer();\r\n });\r\n\r\n //Load transfer to account list data from global variable\r\n window.MvpFE.loadTransToData = function () {\r\n if (!window.dataMyAccount && !window.dataPayees && !window.dataBillers) {\r\n return;\r\n }\r\n\r\n //Transfer Money Data\r\n TmplData.dataMyAccount = jQuery.extend(true, {}, window.dataMyAccount);\r\n TmplData.dataPayeesSearch = jQuery.extend(true, {}, window.dataPayees); // for search result template\r\n TmplData.dataPayeesFormated = {}; // for init payees list template\r\n TmplData.setTemplateData('template_payees_myaccount', TmplData.dataMyAccount, '.payees-myaccount');\r\n sortDataByProp(TmplData.dataPayeesSearch.payees, 'nickname');\r\n TmplData.dataPayeesFormated = convertDataToGroupByLetter(TmplData.dataPayeesSearch, 'payees', 'nickname');\r\n TmplData.setTemplateData('template_payees_external_account', TmplData.dataPayeesFormated, '.payees-external-accounts');\r\n };\r\n\r\n //BPAY - billers\r\n window.MvpFE.loadBpayBillers = createTmplDataFunc('dataBillers', 'nickname', 'billers', 'template_billers', '.bpay-biller-list');\r\n\r\n //BPAY - billers search result\r\n window.MvpFE.loadBpayBillersSearchResult = createTmplDataFunc('dataNewBillers', 'name', 'billers', 'template_new_billers', '.bpay-new-billers-list');\r\n\r\n //Term Deposit Maintenance - Cheque tab payees\r\n window.MvpFE.loadChequeToPayees = createTmplDataFunc('dataChequeToPayees', 'nickname', 'payees', 'template_term_deposit_cheque_to_payee', '.term-deposit-cheque-to-payee-list');\r\n \r\n //External Payee - this could be used many places, like Credit External tab, address book\r\n window.MvpFE.loadExternalPayees = createTmplDataFunc('dataExternalPayees', 'nickname', 'payees', 'template_common_external_payee', '.common-external-payee-list');\r\n\r\n //Institution Payee\r\n window.MvpFE.loadInstitutionPayee = createTmplDataFunc('dataInstitutionPayee', 'name', 'payees', 'template_institution_payee', '.institution-payee-list');\r\n\r\n //International Transfer Recipients Payee\r\n window.MvpFE.loadInternationalTransferRecipient = createTmplDataFunc('dataInternationalRecipients', 'nickname', 'internationalRecipients', 'template_international_recipients', '.international-transfer-recipient');\r\n \r\n // International Transfer Search IBAN/Account Bank\r\n window.MvpFE.loadInternationalSearchBank= createTmplDataFunc('dataInternationalSearchBank', 'bankname', 'internationalSearchBank', 'template_iban_select_bank', '.international-transfer-search-bank-list');\r\n \r\n //Transfer External Account - payees\r\n window.MvpFE.loadExternalTransfer = createTmplDataFunc('dataExternalTransfer', 'nickname', 'payees', 'template_external_transfer', '.external-transfer-list');\r\n\r\n return TmplData;\r\n})();","/********************************************************\r\n * CustomeEvent() polyfill in IE\r\n *******************************************************/\r\n\r\n(function () {\r\n if (typeof window.CustomEvent === 'function') return false;\r\n\r\n function CustomEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n detail: undefined\r\n };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n window.CustomEvent = CustomEvent;\r\n})();","(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\").addClass(\"list-unstyled\").append(a.map(d,function(b){return a(\"
  • \")[c](b)})),void 0===f.data(\"bs.validator.originalContent\")&&f.data(\"bs.validator.originalContent\",f.html()),f.empty().append(d),e.addClass(\"has-error has-danger\"),e.hasClass(\"has-feedback\")&&g.removeClass(this.options.feedback.success)&&g.addClass(this.options.feedback.error)&&e.removeClass(\"has-success\"))},d.prototype.clearErrors=function(a){var c=a.closest(\".form-group\"),d=c.find(\".help-block.with-errors\"),e=c.find(\".form-control-feedback\");d.html(d.data(\"bs.validator.originalContent\")),c.removeClass(\"has-error has-danger has-success\"),c.hasClass(\"has-feedback\")&&e.removeClass(this.options.feedback.error)&&e.removeClass(this.options.feedback.success)&&b(a)&&e.addClass(this.options.feedback.success)&&c.addClass(\"has-success\")},d.prototype.hasErrors=function(){function b(){return!!(a(this).data(\"bs.validator.errors\")||[]).length}return!!this.$inputs.filter(b).length},d.prototype.isIncomplete=function(){function c(){var c=b(a(this));return!(\"string\"==typeof c?a.trim(c):c)}return!!this.$inputs.filter(\"[required]\").filter(c).length},d.prototype.onSubmit=function(a){this.validate(),(this.isIncomplete()||this.hasErrors())&&a.preventDefault()},d.prototype.toggleSubmit=function(){this.options.disable&&this.$btn.toggleClass(\"disabled\",this.isIncomplete()||this.hasErrors())},d.prototype.defer=function(b,c){return c=a.proxy(c,this,b),this.options.delay?(window.clearTimeout(b.data(\"bs.validator.timeout\")),void b.data(\"bs.validator.timeout\",window.setTimeout(c,this.options.delay))):c()},d.prototype.reset=function(){return this.$element.find(\".form-control-feedback\").removeClass(this.options.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData([\"bs.validator.errors\",\"bs.validator.deferred\"]).each(function(){var b=a(this),c=b.data(\"bs.validator.timeout\");window.clearTimeout(c)&&b.removeData(\"bs.validator.timeout\")}),this.$element.find(\".help-block.with-errors\").each(function(){var b=a(this),c=b.data(\"bs.validator.originalContent\");b.removeData(\"bs.validator.originalContent\").html(c)}),this.$btn.removeClass(\"disabled\"),this.$element.find(\".has-error, .has-danger, .has-success\").removeClass(\"has-error has-danger has-success\"),this},d.prototype.destroy=function(){return this.reset(),this.$element.removeAttr(\"novalidate\").removeData(\"bs.validator\").off(\".bs.validator\"),this.$inputs.off(\".bs.validator\"),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this.$inputs=null,this};var e=a.fn.validator;a.fn.validator=c,a.fn.validator.Constructor=d,a.fn.validator.noConflict=function(){return a.fn.validator=e,this},a(window).on(\"load\",function(){a('form[data-toggle=\"validator\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery);\n},{}],2:[function(require,module,exports){\n//! moment.js\n//! version : 2.28.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\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\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\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\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\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\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\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\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\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\n return false;\n };\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 =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\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\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\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\n function copyConfig(to, from) {\n var i, prop, val;\n\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\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\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\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\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(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\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\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\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(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\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 (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (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\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\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\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\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 () {\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(\n func.apply(this, arguments),\n token\n );\n };\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\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\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\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : 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\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\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\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\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\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\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\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\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\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\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\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\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\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\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\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\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 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\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\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(\n s\n .replace('\\\\', '')\n .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n matched,\n p1,\n p2,\n p3,\n p4\n ) {\n return p1 || p2 || p3 || p4;\n })\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\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 (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\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\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\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\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (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\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\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\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\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\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 '_'\n ),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n '_'\n ),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\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(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\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\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\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(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\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\n if (!mom.isValid()) {\n // No op\n return mom;\n }\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\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\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\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\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\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\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\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\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\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\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\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\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\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n 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\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\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\n return date;\n }\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\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // 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\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\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\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\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\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\n return {\n week: resWeek,\n year: resYear,\n };\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\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n input,\n week,\n config,\n token\n ) {\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\n var defaultLocaleWeek = {\n dow: 0, // 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\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\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\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\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\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\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\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\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\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\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\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\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\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\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\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\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\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(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\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\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\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\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\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\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\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\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\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\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\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\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\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\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\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\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\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\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\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\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\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 (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\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\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 (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\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\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(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\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(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\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\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\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\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\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\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\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\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\n getParsingFlags(m).overflow = overflow;\n }\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 = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\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\n if (match) {\n getParsingFlags(config).iso = true;\n\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\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\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\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\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(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\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(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\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\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\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\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 [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\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\n if (config._d) {\n return;\n }\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\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\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] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : 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\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\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(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\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\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\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\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[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(\n string.indexOf(parsedInput) + parsedInput.length\n );\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 =\n 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 (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\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\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\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\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\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\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\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\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\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\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\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\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\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\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\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\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\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n 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 prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n 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\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\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\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\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\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\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 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\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\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 (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\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 (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\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\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\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 =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : 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\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(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\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\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\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\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\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\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\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 (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\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\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, 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\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(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\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\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\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\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\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 (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\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 (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 =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\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\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\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 (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\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 (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\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; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\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\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\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\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(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\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)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\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\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\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\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\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\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\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\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\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\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\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(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\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\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\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\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 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 +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 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\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\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\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\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\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\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\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n input,\n array,\n config,\n token\n ) {\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\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\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\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\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\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\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\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\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\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\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\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\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\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\n return '';\n }\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\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\n return '';\n }\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\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\n return '';\n }\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\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\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\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\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(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\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\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 2)] = toInt(input);\n });\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(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\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\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\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\n ? Math.ceil((this.month() + 1) / 3)\n : 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\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\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 =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 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\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\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\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\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\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\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(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\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\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\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\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\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\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\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\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\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\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\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\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\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\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 (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\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\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\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\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\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\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\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 (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\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\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\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\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // 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\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 =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\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\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\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\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\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\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\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\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\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\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\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\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.28.0';\n\n setHookCallback(createLocal);\n\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 DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n\n},{}],3:[function(require,module,exports){\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n/*global define: false Mustache: true*/\n\n(function defineMustache (global, factory) {\n if (typeof exports === 'object' && exports && typeof exports.nodeName !== 'string') {\n factory(exports); // CommonJS\n } else if (typeof define === 'function' && define.amd) {\n define(['exports'], factory); // AMD\n } else {\n global.Mustache = {};\n factory(global.Mustache); // script, wsh, asp\n }\n}(this, function mustacheFactory (mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n')\n stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [ type, value, start, scanner.pos ];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit)\n break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null)\n tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render (template, view, partials) {\n var tokens = this.parse(template);\n var context = (view instanceof Context) ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null)\n return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.3.2';\n mustache.tags = [ '{{', '}}' ];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render (template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html (template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n}));\n\n},{}],4:[function(require,module,exports){\n//requre third party modules\r\nrequire('bootstrap-validator/dist/validator.min.js');\r\nrequire('./modules/custom-event-polyfill.js');\r\nrequire('./modules/mustache-tmpl.js');\r\nrequire('./modules/date.js');\r\nrequire('./modules/totop.js');\r\nrequire('./modules/iconmap.js');\r\nrequire('./modules/common.js');\r\nrequire('./modules/menu.js');\r\nrequire('./modules/search.js');\r\nrequire('./modules/page-logic.js');\r\n\n},{\"./modules/common.js\":5,\"./modules/custom-event-polyfill.js\":6,\"./modules/date.js\":7,\"./modules/iconmap.js\":8,\"./modules/menu.js\":9,\"./modules/mustache-tmpl.js\":10,\"./modules/page-logic.js\":11,\"./modules/search.js\":12,\"./modules/totop.js\":14,\"bootstrap-validator/dist/validator.min.js\":1}],5:[function(require,module,exports){\n/******************************************************************\r\n * Common tools code\r\n *****************************************************************/\r\nvar Unclick = require('./unclick.js');\r\nvar moment = require('moment');\r\nvar Common = {};\r\n\r\n/**\r\n * Export common function\r\n */\r\nmodule.exports = (function () {\r\n //search-panel-with-btn click action in complexSelectList\r\n Common.searchPanelBtnClick = function (btn, applyText) {\r\n //replace select panel's text\r\n var titleElement = $(btn).parents('.panel-selectlist-complex').find('> .panel-heading > .panel-title-section');\r\n if (titleElement && titleElement.length === 1) {\r\n titleElement.empty();\r\n titleElement.append('' + applyText + '');\r\n }\r\n\r\n $(btn).parents('.search-panel-with-btn').collapse('hide');\r\n }\r\n\r\n Common.convertByteSize = function (size) {\r\n var units = ['Bytes', 'KB', 'MB', 'GB', 'TB'],\r\n unitIndex = 0;\r\n\r\n while (size >= 1024) {\r\n size = size / 1024;\r\n unitIndex++;\r\n }\r\n\r\n return Math.round(size) + \" \" + units[unitIndex];\r\n }\r\n\r\n return Common;\r\n})();\r\n\r\n/**\r\n * Same reference for payee feature\r\n */\r\n$(function () {\r\n function copyText(scope) {\r\n var sourceValue = $(scope).parents('.same-refer-container').find('.same-refer-source').val();\r\n if (sourceValue) {\r\n var dest = $(scope).parents('.same-refer-container').find('.same-refer-dest');\r\n if (dest && dest.length) {\r\n var maxLen = dest.attr(\"maxlength\");\r\n sourceValue = sourceValue.substr(0, maxLen);\r\n dest.val(sourceValue);\r\n }\r\n }\r\n }\r\n\r\n $('.same-refer-switcher .label-yes').click(function () {\r\n copyText(this);\r\n });\r\n\r\n $('.same-refer-switcher .label-no').click(function () {\r\n $(this).parents('.same-refer-container').find('.same-refer-dest').val('');\r\n });\r\n\r\n $('.same-refer-source').change(function () {\r\n if ($(this).parents('.same-refer-container').find('.same-refer-switcher .label-yes').hasClass('active') === true) {\r\n copyText(this);\r\n }\r\n });\r\n\r\n $('.same-refer-dest').keyup(function () {\r\n $(this).parents('.same-refer-container').find('.same-refer-switcher .label-no').button('toggle');\r\n });\r\n});\r\n\r\n/**\r\n * Hide search list that is not in a panel\r\n */\r\n$(function () {\r\n function hideList() {\r\n $(this).addClass('hidden');\r\n $(this).parents('.search-input-with-btn-container').removeClass('search-list-open');\r\n }\r\n\r\n var elements = $('.search-input-with-btn-container .search-input-with-btn-list');\r\n\r\n var exceptArray = [];\r\n for (var i = 0; i < elements.length; i++) {\r\n var input = $(elements[i]).parents('.search-input-with-btn-container').find('.search-input-not-in-panel'),\r\n btn = $(elements[i]).parents('.search-input-with-btn-container').find('button'),\r\n eleObj = {\r\n elem: elements[i],\r\n excepts: []\r\n };\r\n\r\n if (input && input.length) {\r\n input.each(function (index, element) {\r\n eleObj.excepts.push($(element).parents('.input-group')[0]);\r\n });\r\n }\r\n\r\n if (btn && btn.length) {\r\n btn.each(function (index) {\r\n eleObj.excepts.push(btn[index]);\r\n });\r\n }\r\n\r\n exceptArray.push(eleObj);\r\n\r\n Unclick.registerUnclick(elements[i], hideList, exceptArray);\r\n }\r\n});\r\n\r\n/*\r\n * close panel-dropdown panel when click on outside\r\n */\r\n$(function () {\r\n var dd_panelBody = $('.panel.panel-dropdown .panel-collapse');\r\n\r\n function closePanel() {\r\n $(this).collapse('hide');\r\n }\r\n\r\n for (var i = 0; i < dd_panelBody.length; i++) {\r\n Unclick.registerUnclick(dd_panelBody[i], closePanel);\r\n }\r\n});\r\n\r\n/*\r\n * process a panel with a group list that can be selected, select item text will apply panel heading\r\n */\r\n$(function () {\r\n //simple\r\n $(document).on('click.simpleSelectList', '.panel-selectlist .list-group-item', function () {\r\n var clickText = $(this).text();\r\n var panelTitleEle = $(this).parents('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n var curText = panelTitleEle.text();\r\n if (curText !== clickText) {\r\n panelTitleEle.text(clickText);\r\n }\r\n $($(this).parents('.collapse')[0]).collapse('hide');\r\n $($(this).parents('.panel-selectlist')[0]).find('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n\r\n //complex\r\n $(document).on('click.complexSelectList', '.panel-selectlist-complex .list-group-item', function () {\r\n var clickElements = $(this).children();\r\n var panelTitleEle = $(this).parents('.panel-selectlist-complex').find('> .panel-heading > .panel-title-section');\r\n\r\n panelTitleEle.empty();\r\n panelTitleEle.append(clickElements.clone());\r\n $($(this).parents('.collapse')[0]).collapse('hide');\r\n $($(this).parents('.panel-selectlist-complex')[0]).find('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n});\r\n\r\n/*\r\n * Init bootstrap validator\r\n */\r\n$(function () {\r\n var defaultDecimalPlaces = 2;\r\n $('form').validator({\r\n custom: {\r\n \"date-validate\": function (elem) {\r\n var m = moment(elem.val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (!m.isValid()) {\r\n return window.MvpFE.globalConfiguration.dateValidateMessage || \"Not a valid date (Choose DD/MM/YYYY or dd mm yyyy)\";\r\n }\r\n },\r\n \"amount-validate\": function (elem) {\r\n var value = elem.val().trim().replace(/,/g, '');\r\n var num = Number(value);\r\n if (isNaN(num) || num < 0) {\r\n return \"Not a valid amount\";\r\n } else {\r\n var pos = value.indexOf('.');\r\n if (pos === -1) {\r\n return;\r\n }\r\n\r\n var decimal = value.substr(pos + 1),\r\n decimalPlaces = elem.data('decimal-places');\r\n\r\n decimalPlaces = decimalPlaces || defaultDecimalPlaces;\r\n if (decimal.length > decimalPlaces) {\r\n return \"Not a valid amount\";\r\n }\r\n }\r\n },\r\n \"range-validate\": function (elem) {\r\n var val = elem.val();\r\n val = val.replace(/,/g, '');\r\n val = parseFloat(val);\r\n var min = parseFloat(elem.attr('data-min'));\r\n var max = parseFloat(elem.attr('data-max'));\r\n\r\n if (val < min) {\r\n return \"Value must be greater than or equal to \" + window.MvpFE.addComma(min);\r\n }\r\n if (val > max) {\r\n return \"Value must be less than or equal to \" + window.MvpFE.addComma(max);\r\n }\r\n },\r\n //This is for date of birth in Online Leading now\r\n \"date-age-min\": function (elem) {\r\n let m = moment(elem.val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (m.isValid()) {\r\n let age = $(elem).data(\"date-age-min\");\r\n let yearNow = new Date().getFullYear();\r\n let yearDob = new Date($(elem).val()).getFullYear();\r\n if (yearNow - yearDob < age) {\r\n return `The applicant must be ${age} years of age or over.`;\r\n }\r\n }\r\n }\r\n },\r\n delay: 1000\r\n });\r\n //This setting has some issue now and some input filed cannot bind event like amount filed\r\n //$.fn.validator.Constructor.INPUT_SELECTOR += ':visible';\r\n //$('form').validator('update');\r\n\r\n //update validator to don't submit hidden fields when tab switch\r\n $('form [data-toggle=\"tab\"]').on('shown.bs.tab', function () {\r\n $('form').validator('update');\r\n });\r\n\r\n function updateValidator() {\r\n $('form').validator('update');\r\n }\r\n window.MvpFE.rebindFunctions.updateValidator = updateValidator;\r\n});\r\n\r\n/*\r\n * Select an select option to show specific panel and hidden others\r\n */\r\n$(function () {\r\n $('.ref-panel').change(function () {\r\n var panelId = $(this).find(':selected').data('refpanelid');\r\n $('.ref-select-option').addClass('hidden');\r\n $('#' + panelId).removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * process close icon\r\n */\r\n$(function () {\r\n $('.close-icon').click(function () {\r\n var targetId = $(this).data('closeid');\r\n $('#' + targetId).hide(400);\r\n });\r\n});\r\n\r\n/*\r\n * dynamic colspan\r\n */\r\n$(function () {\r\n function applyColSpan() {\r\n var winWidth = $(window).width();\r\n if (winWidth < 768) {\r\n $('td[data-mobilespan]').each(function () {\r\n $(this).attr('colspan', $(this).data('mobilespan'));\r\n });\r\n } else {\r\n $('td[data-desktopspan]').each(function () {\r\n $(this).attr('colspan', $(this).data('desktopspan'));\r\n });\r\n }\r\n }\r\n\r\n if ($('td[data-mobilespan]').length > 0) {\r\n $(window).resize(function () {\r\n applyColSpan();\r\n });\r\n applyColSpan();\r\n }\r\n});\r\n\r\n/*\r\n * clickable row process\r\n */\r\n$(function () {\r\n function isCusCheckbox(e) {\r\n if ($(e.target).parents('.checkbox-cus').length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function isInLink(e) {\r\n if ($(e.target).hasClass('link-in-clickable-row') || $(e.target).parents('.link-in-clickable-row').length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n $(document).on('click', '.clickable-row', function (e) {\r\n if (isCusCheckbox(e) || isInLink(e)) {\r\n return;\r\n }\r\n window.location = $(this).data('href');\r\n });\r\n\r\n $(document).on('click', '.clickable-row-desktop', function (e) {\r\n if (isCusCheckbox(e) || isInLink(e)) {\r\n return;\r\n }\r\n if ($(window).width() >= 768) {\r\n window.location = $(this).data('href');\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * change credit card field's value\r\n */\r\n$(function () {\r\n $(document).on('keyup.credit-card-field', '.credit-card-field', function (e) {\r\n var value = $(this).val().replace(/\\s+/g, ''),\r\n len = value.length;\r\n\r\n if (len > 0 && e.key !== 'Backspace') {\r\n var newValue = '';\r\n for (var i = 0; i < len; i++) {\r\n if (i > 0 && i % 4 === 0) {\r\n newValue += ' ';\r\n }\r\n newValue += value[i];\r\n }\r\n $(this).val(newValue);\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * select options tab \r\n */\r\n$(function () {\r\n $(document).on('change.selecttabs', 'select.selecttabs', function () {\r\n var target = $(this).data('selecttab'),\r\n index = $(this).prop('selectedIndex'),\r\n selector = target + ' > li:eq(' + index + ') > a';\r\n\r\n $(selector).tab('show');\r\n });\r\n});\r\n\r\n/*\r\n * Amoutn field\r\n */\r\n$(function () {\r\n var decimalPlace = 2;\r\n function addComma(num) {\r\n var value = num.toString();\r\n var dotIndex = value.indexOf('.');\r\n if (dotIndex === -1 || (dotIndex >= value.length - 2 && value.length >= 2)) {\r\n num = num.toFixed(decimalPlace);\r\n }\r\n value = num.toString();\r\n //get index again becuase of toFixed\r\n dotIndex = value.indexOf('.');\r\n var amountIntPart = value.slice(0, dotIndex);\r\n\r\n for (var i = amountIntPart.length - 3; i > 0; i -= 3) {\r\n amountIntPart = value.slice(0, i) + ',' + amountIntPart.slice(i);\r\n }\r\n\r\n value = amountIntPart + value.slice(dotIndex);\r\n\r\n return value;\r\n }\r\n window.MvpFE.addComma = addComma;\r\n // Automaticly add .00 for account field when user finish the field\r\n $(document).on('change.amount-auto-format', '.amount-auto-format', function () {\r\n var value = $(this).val();\r\n\r\n if (value) {\r\n value = value.replace(/,/g, '');\r\n var num = Number(value);\r\n if (!isNaN(num) && num >= 0) {\r\n value = addComma(num);\r\n $(this).val(value);\r\n }\r\n }\r\n });\r\n\r\n //Insert data attribute and validation infor box to amount field\r\n function insertAttrDivToAmount() {\r\n $('.amount-auto-format').each(function () {\r\n $(this).attr('data-amount-validate', '');\r\n var errorBox = $(this).nextAll('.help-block.with-errors');\r\n if (errorBox.length === 0) {\r\n $(this).after('
    ');\r\n }\r\n })\r\n }\r\n insertAttrDivToAmount();\r\n window.MvpFE.rebindFunctions.insertAttrDivToAmount = insertAttrDivToAmount;\r\n});\r\n\r\n\r\n/*\r\n * Scroll to collapse container\r\n */\r\n$(function () {\r\n $('.scroll-to-here').on('shown.bs.collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('html, body').animate({\r\n scrollTop: $(this).offset().top\r\n }, 500);\r\n });\r\n});\r\n\r\n/**\r\n * Scroll to target when click the element\r\n */\r\n$(function () {\r\n $(document).on('click', '[data-scrollto]', function () {\r\n var selector = $(this).data('scrollto');\r\n if (selector && selector.length > 0) {\r\n setTimeout(function () {\r\n $('html, body').animate({\r\n scrollTop: $(selector).offset().top\r\n }, 500);\r\n }, 10);\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * Close window when click this element\r\n */\r\n$(function () {\r\n $(document).on('click.closeWindow', '.close-window', function () {\r\n window.close();\r\n });\r\n});\r\n\r\n/*\r\n * radio button active init\r\n */\r\n$(function () {\r\n function resetRadioActive() {\r\n var elements = $('[data-toggle=\"buttons\"] > label > input[type=\"radio\"]');\r\n for (var i = 0; i < elements.length; i++) {\r\n if ($(elements[i]).prop('checked')) {\r\n $(elements[i]).parents('[data-toggle=\"buttons\"]').find('label').removeClass('active');\r\n $(elements[i]).parent().addClass('active');\r\n $(elements[i]).parent('[data-toggle=\"tab\"]').tab('show');\r\n }\r\n }\r\n }\r\n resetRadioActive();\r\n window.MvpFE.rebindFunctions.resetRadioActive = resetRadioActive;\r\n});\r\n\r\n/**\r\n * process transfer time radio buttons border radius\r\n */\r\n$(function () {\r\n function setTransTimeRadius() {\r\n $('label[data-target=\"#transfer_now_tab\"]').on('show.bs.tab', function () {\r\n $(this).parent('.btn-group').removeClass('bottom-radius-zero');\r\n });\r\n $('label[data-target=\"#transfer_onceon_tab\"], label[data-target=\"#transfer_recurring\"]').on('show.bs.tab', function () {\r\n $(this).parent('.btn-group').addClass('bottom-radius-zero');\r\n });\r\n }\r\n setTransTimeRadius();\r\n window.MvpFE.rebindFunctions.setTransTimeRadius = setTransTimeRadius;\r\n});\r\n\r\n/**\r\n * search input field is not in a panel common action\r\n */\r\n$(function () {\r\n $(document).on('focus', '.search-input-with-btn-container .input-group input', function () {\r\n $('.search-input-with-btn-container .input-group-addon').addClass('input-focus');\r\n });\r\n\r\n $(document).on('blur', '.search-input-with-btn-container .input-group input', function () {\r\n $('.search-input-with-btn-container .input-group-addon').removeClass('input-focus');\r\n });\r\n});\r\n\r\n/**\r\n * Print page\r\n */\r\n$(function () {\r\n $(document).on('click', '.print-page-btn', function () {\r\n window.print();\r\n });\r\n});\r\n\r\n/**\r\n * quick links\r\n */\r\n$(function () {\r\n function insertMoreOptions(eles, maxNum) {\r\n if (eles && eles.length > 0) {\r\n for (var i = eles.length; i >= maxNum - 1; i--) {\r\n var currEle = eles[i]\r\n $(currEle).removeClass();\r\n $(currEle).addClass('list-group-item text-right');\r\n $(currEle).removeAttr('role');\r\n $(currEle).parent('.quick-links').siblings('.quick-links-more-options').children('.list-group').prepend(currEle);\r\n }\r\n\r\n $(eles[0]).siblings('.quick-links-more-option-btn').removeClass('hidden');\r\n }\r\n\r\n }\r\n\r\n function adjustQuickLinks() {\r\n //The number of quick links on desktop\r\n var maxNum = 5,\r\n maxNumMobile = 3,\r\n quickLinks = $('.quick-links');\r\n\r\n if (!quickLinks || quickLinks.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < quickLinks.length; i++) {\r\n var links = $(quickLinks[i]).children('a:not(.quick-links-more-option-btn)')\r\n if (links && links.length > 0) {\r\n if ($(window).width() >= 768) {\r\n if (links.length > maxNum) {\r\n insertMoreOptions(links, maxNum);\r\n }\r\n } else {\r\n if (links.length > maxNumMobile) {\r\n insertMoreOptions(links, maxNumMobile);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n adjustQuickLinks();\r\n window.MvpFE.rebindFunctions.adjustQuickLinks = adjustQuickLinks;\r\n});\r\n\r\n/* match height for left title table on tablet*/\r\n$(function () {\r\n function matchCellHeightTablet() {\r\n if ($(window).width() < 768 || $(window).width() >= 992) {\r\n $('.table-title-left-tablet tbody tr td:not(.content-only-nopadding)').css('height', '');\r\n return;\r\n }\r\n\r\n var trs = $('.table-title-left-tablet tbody tr');\r\n if (!trs || trs.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < trs.length; i++) {\r\n var tds = $(trs[i]).children('td:not(.content-only-nopadding)');\r\n if (!tds || tds.length === 0) {\r\n continue;\r\n }\r\n\r\n for (var j = 1; j < tds.length; j += 2) {\r\n var height1 = $(tds[j - 1]).height();\r\n var height2 = $(tds[j]).height();\r\n if (height1 !== height2) {\r\n height1 > height2 ? $(tds[j]).height(height1) : $(tds[j - 1]).height(height2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n matchCellHeightTablet();\r\n $(window).resize(function () {\r\n matchCellHeightTablet();\r\n });\r\n});\r\n\r\n// Input file type logic\r\n$(function () {\r\n function inputFileChange() {\r\n var inputs = $('.inputfile');\r\n inputs.each(function (i, input) {\r\n var btn = $(input).next('.inputfile-btn');\r\n $(input).change(function () {\r\n var fileName = $(this).val().split('\\\\').pop();\r\n\r\n if (fileName) {\r\n $(btn).children('.inputfile-btn-text').text(fileName + \" (\" + Common.convertByteSize(this.files[0].size) + \")\");\r\n }\r\n });\r\n });\r\n }\r\n inputFileChange();\r\n window.MvpFE.rebindFunctions.inputFileChange = inputFileChange;\r\n});\r\n\r\n// Adjust iframe's height\r\n$(function () {\r\n $('.iframe-auto-height').on('load', function () {\r\n $(this).height(this.contentWindow.document.body.scrollHeight);\r\n });\r\n});\r\n\r\n// bootstrap-select init\r\n$(function () {\r\n function bindSelectPicker() {\r\n $('.phone-input-areacode select').selectpicker({\r\n style: 'btn-selectpicker'\r\n });\r\n }\r\n\r\n bindSelectPicker();\r\n window.MvpFE.rebindFunctions.bindSelectPicker = bindSelectPicker;\r\n});\r\n\r\n// nicEdit\r\n$(function () {\r\n var editMain = $('.nicEdit-main');\r\n if (editMain.length > 0) {\r\n editMain.parent().addClass('nic-edit-main-container');\r\n }\r\n});\r\n\r\n// Checkbox\r\n$(function () {\r\n // toggle all checkbox\r\n $(document).on('change', '.checkbox-head', function () {\r\n $(this).parents('table').find('tbody .checkbox-cus input[type=\"checkbox\"]').prop('checked', this.checked);\r\n });\r\n});\r\n\r\n// rotate iamge\r\n$(function () {\r\n $('[data-rotate-imageid]').click(function () {\r\n var targetId = $(this).data('rotate-imageid');\r\n var ele = $('#' + targetId);\r\n if (!ele.hasClass('rotate-image')) {\r\n ele.addClass('rotate-image rotate-image-1');\r\n } else {\r\n var className = ele[0].className.match(/rotate-image-(\\d)/);\r\n var newClassName = 'rotate-image-' + ((parseInt(className[1]) % 4) + 1);\r\n ele.removeClass(className[0]);\r\n ele.addClass(newClassName);\r\n }\r\n })\r\n});\r\n\r\n// hack way to insert the value into another row in a confirm container\r\n$(function () {\r\n $('.confirm-info-box .value-merge-to-previous-row').each(function () {\r\n var text = $(this).text();\r\n var prevValueDiv = $(this).parent('.row').prev('.row').children(':last-child');\r\n if (prevValueDiv.length > 0) {\r\n prevValueDiv.html(prevValueDiv.html() + '
    ' + text);\r\n $(this).parent('div').remove();\r\n }\r\n });\r\n});\r\n\r\n// Binding radio buttons with a list-group together, click radio button will select right list-group-list or vice versa \r\n$(function () {\r\n function selectBindingListItem(list, target) {\r\n const panelTitleEle = $(list).parent('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n const listItem = $(list).children(`[href=\"${target}\"]`);\r\n const text = listItem.text();\r\n $(list).children('.list-group-item').removeClass('active');\r\n listItem.addClass('active');\r\n panelTitleEle.text(text);\r\n }\r\n\r\n function setBindingListItem() {\r\n let elements = $('[data-binding-select-list] > label > input[type=radio]');\r\n elements.each(function () {\r\n if ($(this).prop('checked')) {\r\n const target = $(this).parent().data('target');\r\n const list = $(this).parents('[data-binding-select-list]').data('binding-select-list');\r\n selectBindingListItem(list, target);\r\n }\r\n });\r\n }\r\n\r\n setBindingListItem();\r\n\r\n $(document).on('click', '[data-binding-radio-btns=\"true\"] > .list-group-item', function () {\r\n const target = $(this).attr('href');\r\n $(`.btn-group label[data-target=\"${target}\"]`).trigger('click');\r\n });\r\n\r\n $(document).on('click', '[data-binding-select-list] > label', function () {\r\n const target = $(this).data('target');\r\n const list = $(this).parent().data('binding-select-list');\r\n selectBindingListItem(list, target);\r\n });\r\n});\r\n\r\n// Custom Accordion - bootstrap3's accordion needs to use panel, so we create our own\r\n// Don't nest\r\n$(() => {\r\n function bindCusAccordionClicks() {\r\n let allCollapses = $('[data-parent-cus]');\r\n allCollapses.each(function () {\r\n $(this).on('click', function () {\r\n if ($(this).attr('aria-expanded') == 'false') {\r\n let currEle = this;\r\n allCollapses.each(function () {\r\n if (currEle !== this) {\r\n let targetSelForHide = $(this).data('target');\r\n $(targetSelForHide).collapse('hide');\r\n }\r\n });\r\n\r\n let me = this;\r\n setTimeout(function () {\r\n $('html, body').scrollTop($(me).offset().top);\r\n }, 400);\r\n }\r\n });\r\n });\r\n }\r\n window.MvpFE.rebindFunctions.bindCusAccordionClicks = bindCusAccordionClicks;\r\n bindCusAccordionClicks();\r\n});\r\n\r\n// Aujust height of td for table-title-left-mobile table\r\n$(function () {\r\n\r\n $('.panel-collapse').on('click', function () {\r\n if ($(\".panel-title-section\").find('.row')) {\r\n $(this).siblings().addClass('active')\r\n }\r\n })\r\n\r\n if ($(\".panel-title-section\").children().hasClass('row')) {\r\n $(\".panel-title-section\").parent().addClass('active')\r\n }\r\n\r\n\r\n function adjustTableCellHeight() {\r\n if ($(window).width() >= 768) return;\r\n let allTables = $('.table-title-left-mobile.table-match-height-mobile');\r\n if (allTables.length === 0) return;\r\n\r\n allTables.each(function () {\r\n let allCellsInCurr = $(this).find('tbody td:not(.content-only-nopadding)');\r\n allCellsInCurr.each(function () {\r\n let currTitle = $(this).data('title');\r\n let oldHeight = $(this).height();\r\n let oldText = $(this).text();\r\n let oldPaddingLeft = $(this).css('paddingLeft');\r\n let paddingTop = $(this).css('paddingTop');\r\n let oldTextTransform = $(this).css('text-transform');\r\n let headerTransform = $(this).parents('table').find('thead td, thead th').first().css('text-transform');\r\n paddingTop = paddingTop.substring(0, paddingTop.indexOf('px'))\r\n $(this).css('padding-left', $(this).width() + paddingTop * 2 + 10);\r\n $(this).css('text-transform', headerTransform);\r\n $(this).text(currTitle);\r\n let newHeight = $(this).height() + paddingTop * 2;\r\n $(this).css('padding-left', oldPaddingLeft);\r\n $(this).css('text-transform', oldTextTransform);\r\n if (newHeight > oldHeight) {\r\n $(this).css('height', newHeight);\r\n }\r\n $(this).text(oldText);\r\n });\r\n });\r\n }\r\n\r\n adjustTableCellHeight();\r\n $(window).resize(function () {\r\n //when the size of window changed, clear the include style and redo the adjustment if it is a small screen device\r\n let allTables = $('.table-title-left-mobile.table-match-height-mobile');\r\n if (allTables.length > 0) {\r\n allTables.each(function () {\r\n let allCellsInCurr = $(this).find('tbody td:not(.content-only-nopadding)');\r\n allCellsInCurr.each(function () {\r\n $(this).attr('style', '');\r\n });\r\n });\r\n }\r\n adjustTableCellHeight();\r\n });\r\n});\n},{\"./unclick.js\":15,\"moment\":2}],6:[function(require,module,exports){\n/********************************************************\r\n * CustomeEvent() polyfill in IE\r\n *******************************************************/\r\n\r\n(function () {\r\n if (typeof window.CustomEvent === 'function') return false;\r\n\r\n function CustomEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n detail: undefined\r\n };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n window.CustomEvent = CustomEvent;\r\n})();\n},{}],7:[function(require,module,exports){\n/***********************************************\r\n * use bootstrap datepicker\r\n **********************************************/\r\nvar moment = require('moment');\r\n$(document).ready(function () {\r\n function bindDatepicker() {\r\n function modifyPostion(width) {\r\n var winWidth = $(window).width();\r\n if (winWidth < 480) {\r\n var element = $('.datepicker.datepicker-dropdown')[0],\r\n leftValue = $(element).position().left;\r\n\r\n if (leftValue < 0 || leftValue + width > winWidth) {\r\n var newLeft = 0;\r\n if (winWidth >= width || leftValue + width > winWidth) {\r\n $(element).css({\r\n left: newLeft\r\n });\r\n } else {\r\n newLeft = (winWidth - width) / 2;\r\n $(element).css({\r\n left: newLeft\r\n });\r\n }\r\n\r\n var assumpeDiffValue = 110;\r\n if (leftValue < 0 && Math.abs(newLeft - leftValue) > assumpeDiffValue) {\r\n $(element).removeClass('datepicker-orient-right');\r\n $(element).addClass('datepicker-orient-left');\r\n }\r\n }\r\n }\r\n }\r\n\r\n $('input.datepicker').each(function () {\r\n if ($(this).attr('data-cus-placeholder')) {\r\n $(this).attr('placeholder', $(this).attr('data-cus-placeholder'));\r\n } else {\r\n $(this).attr('placeholder', window.MvpFE.globalConfiguration.datePickerPlaceholder || 'DD MM YYYY');\r\n }\r\n });\r\n\r\n var disableTouchKeyboard = true;\r\n /* eslint-disable */\r\n if (bowser.msie && bowser.version === \"11.0\") {\r\n /* eslint-enable */\r\n disableTouchKeyboard = false;\r\n }\r\n var pickerWidth = 0;\r\n\r\n $('input.datepicker').each(function () {\r\n\r\n // console.log($(this).parent());\r\n $(this).datepicker({\r\n format: window.MvpFE.globalConfiguration.datePickerFormat || 'dd M yyyy',\r\n autoclose: true,\r\n forceParse: false,\r\n disableTouchKeyboard: disableTouchKeyboard,\r\n container: $(this).parents().eq(1)\r\n }).on('show', function () {\r\n if (pickerWidth === 0) {\r\n pickerWidth = $('.datepicker.datepicker-dropdown').width();\r\n }\r\n modifyPostion(pickerWidth);\r\n }).on('changeMonth', function () {\r\n modifyPostion(pickerWidth);\r\n });\r\n })\r\n\r\n }\r\n\r\n /* - auto insert slash feature, now discard it\r\n $(document).on('keypress', 'input.datepicker', function (e) {\r\n // Add (e.which > 31 || e.which > 126) condition for Firefox which capture white characters in this event\r\n if ((e.which < 48 ||e.which > 57) && (e.which > 31 || e.which > 126)) {\r\n e.preventDefault();\r\n }\r\n\r\n var value = $(this).val();\r\n // Add (e.which > 31 || e.which > 126) condition for Firefox which capture white characters in this event\r\n if (value.length === 10 && (e.which > 31 || e.which > 126)) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n $(document).on('keyup', 'input.datepicker', function (e) {\r\n console.log(\"key:\" + e.which);\r\n var value = $(this).val();\r\n if (e.which !== 8 && (value.length === 2 || value.length === 5)) {\r\n $(this).val(value + '/');\r\n }\r\n });\r\n */\r\n\r\n $(document).on('change', 'input.datepicker', function () {\r\n var m = moment($(this).val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (m.isValid()) {\r\n $(this).val(m.format(window.MvpFE.globalConfiguration.momentFormat || 'DD MMM yyyy').toUpperCase());\r\n }\r\n });\r\n\r\n bindDatepicker();\r\n window.MvpFE.rebindFunctions.bindDatepicker = bindDatepicker;\r\n});\n},{\"moment\":2}],8:[function(require,module,exports){\n/******************************************************************\r\n * map icons\r\n *****************************************************************/\r\n\r\n//convert data attribute to class name\r\n$(function () {\r\n function mapIcons() {\r\n if (!window.iconMapObj) {\r\n return;\r\n }\r\n\r\n var elements = $('[data-iconmap]');\r\n for (var i = 0; i < elements.length; i++) {\r\n $(elements[i]).addClass(window.iconMapObj[$(elements[i]).data('iconmap')]);\r\n }\r\n }\r\n\r\n mapIcons();\r\n window.MvpFE.mapIcons = mapIcons;\r\n window.MvpFE.rebindFunctions.mapIcons = mapIcons;\r\n});\n},{}],9:[function(require,module,exports){\n/*************************************************\r\n * Menu logic\r\n *************************************************/\r\nvar State = require('./state.js');\r\n\r\n$(document).ready(function () {\r\n //active parent menu\r\n (function () {\r\n var element = $('main div[data-parentmenu]');\r\n if (element && element.length > 0) {\r\n var activeMenu = element.data('parentmenu');\r\n $(activeMenu).addClass('active');\r\n }\r\n })();\r\n\r\n //add animation to second level menu\r\n (function () {\r\n $('header .nav.navbar-nav > li').on('show.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideDown();\r\n });\r\n\r\n $('header .nav.navbar-nav > li').on('hide.bs.dropdown', function () {\r\n if ($(window).width() >= 768) {\r\n $(this).find('.dropdown-menu').first().slideUp(100);\r\n } else {\r\n $(this).find('.dropdown-menu').first().slideUp();\r\n }\r\n });\r\n\r\n $('header .side-nav .nav.nav-pills > li').on('show.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideDown();\r\n });\r\n\r\n $('header .side-nav .nav.nav-pills > li').on('hide.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideUp(100);\r\n });\r\n })();\r\n\r\n //menu active on mobile\r\n (function () {\r\n function changeActiveStates() {\r\n s.isActive = !s.isActive;\r\n\r\n if (s.isActive) {\r\n $('body, html').css('height', '100%');\r\n } else {\r\n $('body, html').css('height', '');\r\n }\r\n }\r\n\r\n var wholePageWrapper = document.body.querySelector('.whole-page-wrapper');\r\n var mobileMenuBtn = document.body.querySelector('a[href=\"#/mobile-menu\"]');\r\n var mobileCloseMenuBtn = document.body.querySelector('.close-mobile-menu');\r\n var mobileMenuList = document.body.querySelector('.nav-region.main-nav');\r\n\r\n if (mobileMenuBtn && mobileCloseMenuBtn) {\r\n var s = Object.create(State);\r\n s.init(null, 'menu-is-active');\r\n\r\n s.addElement(wholePageWrapper);\r\n s.addElement(mobileMenuList);\r\n s.addElement(mobileMenuBtn);\r\n\r\n mobileCloseMenuBtn.addEventListener('click', changeActiveStates);\r\n mobileMenuBtn.addEventListener('click', changeActiveStates);\r\n\r\n window.addEventListener('resize', function () {\r\n if (window.innerWidth > 768) {\r\n s.isActive = false;\r\n }\r\n });\r\n }\r\n })();\r\n});\n},{\"./state.js\":13}],10:[function(require,module,exports){\n/******************************************************************\r\n * process mustache template and load data\r\n *****************************************************************/\r\nvar Mustache = require('mustache');\r\n\r\nwindow.MvpFE = window.MvpFE || {};\r\nwindow.MvpFE.rebindFunctions = {};\r\nwindow.MvpFE.rebindEvents = function () {\r\n for (var funcName in window.MvpFE.rebindFunctions) {\r\n window.MvpFE.rebindFunctions[funcName]();\r\n }\r\n};\r\n\r\nmodule.exports = (function () {\r\n var TmplData = {};\r\n Mustache.tags = ['{[', ']}'];\r\n\r\n // get mustache template and set data to target element\r\n TmplData.setTemplateData = function (tmplId, data, target) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n var template = $('#' + tmplId).html();\r\n if (!template) {\r\n return;\r\n }\r\n\r\n Mustache.parse(template);\r\n var rendered = Mustache.render(template, data);\r\n $(target).html(rendered);\r\n };\r\n\r\n function sortDataByProp(data, prop) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n data = data.sort(function (a, b) {\r\n if (!a[prop]) a[prop] = '';\r\n if (!b[prop]) b[prop] = '';\r\n\r\n return (a[prop].toLowerCase() > b[prop].toLowerCase()) ? 1 : ((a[prop].toLowerCase() < b[prop].toLowerCase()) ? -1 : 0);\r\n });\r\n }\r\n\r\n function convertDataToGroupByLetter(data, rootProp, sortPropName) {\r\n if (!data || $.isEmptyObject(data)) {\r\n return;\r\n }\r\n\r\n var newData = {\r\n groups: []\r\n };\r\n\r\n var firstLetter;\r\n var group = {\r\n items: []\r\n };\r\n\r\n for (var i = 0; i < data[rootProp].length; i++) {\r\n if (!data[rootProp][i] || $.isEmptyObject(data[rootProp][i])) {\r\n continue;\r\n }\r\n\r\n var firstLetterNew = data[rootProp][i][sortPropName].charAt(0).toUpperCase();\r\n var item = jQuery.extend(true, {}, data[rootProp][i]);\r\n\r\n if (firstLetter !== firstLetterNew) {\r\n firstLetter = firstLetterNew;\r\n group = new Object({\r\n items: []\r\n });\r\n group.firstLetter = firstLetterNew;\r\n newData.groups.push(group);\r\n }\r\n group.items.push(item);\r\n }\r\n\r\n return newData;\r\n }\r\n\r\n function createTmplDataFunc (dataVar, sortProp, rootName, tmplId, selector) {\r\n return function () {\r\n if (!window[dataVar]) {\r\n return;\r\n }\r\n\r\n TmplData[dataVar] = jQuery.extend(true, {}, window[dataVar]);\r\n TmplData[dataVar + 'Formated'] = {};\r\n sortDataByProp(TmplData[dataVar][rootName], sortProp);\r\n TmplData[dataVar + 'Formated'] = convertDataToGroupByLetter(TmplData[dataVar], rootName, sortProp);\r\n TmplData.setTemplateData(tmplId, TmplData[dataVar + 'Formated'], selector);\r\n }\r\n }\r\n\r\n //process data\r\n $(function () {\r\n window.MvpFE.loadTransToData();\r\n window.MvpFE.loadBpayBillers();\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n window.MvpFE.loadChequeToPayees();\r\n window.MvpFE.loadExternalPayees();\r\n window.MvpFE.loadInstitutionPayee();\r\n window.MvpFE.loadInternationalTransferRecipient();\r\n window.MvpFE.loadInternationalSearchBank();\r\n window.MvpFE.loadExternalTransfer();\r\n });\r\n\r\n //Load transfer to account list data from global variable\r\n window.MvpFE.loadTransToData = function () {\r\n if (!window.dataMyAccount && !window.dataPayees && !window.dataBillers) {\r\n return;\r\n }\r\n\r\n //Transfer Money Data\r\n TmplData.dataMyAccount = jQuery.extend(true, {}, window.dataMyAccount);\r\n TmplData.dataPayeesSearch = jQuery.extend(true, {}, window.dataPayees); // for search result template\r\n TmplData.dataPayeesFormated = {}; // for init payees list template\r\n TmplData.setTemplateData('template_payees_myaccount', TmplData.dataMyAccount, '.payees-myaccount');\r\n sortDataByProp(TmplData.dataPayeesSearch.payees, 'nickname');\r\n TmplData.dataPayeesFormated = convertDataToGroupByLetter(TmplData.dataPayeesSearch, 'payees', 'nickname');\r\n TmplData.setTemplateData('template_payees_external_account', TmplData.dataPayeesFormated, '.payees-external-accounts');\r\n };\r\n\r\n //BPAY - billers\r\n window.MvpFE.loadBpayBillers = createTmplDataFunc('dataBillers', 'nickname', 'billers', 'template_billers', '.bpay-biller-list');\r\n\r\n //BPAY - billers search result\r\n window.MvpFE.loadBpayBillersSearchResult = createTmplDataFunc('dataNewBillers', 'name', 'billers', 'template_new_billers', '.bpay-new-billers-list');\r\n\r\n //Term Deposit Maintenance - Cheque tab payees\r\n window.MvpFE.loadChequeToPayees = createTmplDataFunc('dataChequeToPayees', 'nickname', 'payees', 'template_term_deposit_cheque_to_payee', '.term-deposit-cheque-to-payee-list');\r\n \r\n //External Payee - this could be used many places, like Credit External tab, address book\r\n window.MvpFE.loadExternalPayees = createTmplDataFunc('dataExternalPayees', 'nickname', 'payees', 'template_common_external_payee', '.common-external-payee-list');\r\n\r\n //Institution Payee\r\n window.MvpFE.loadInstitutionPayee = createTmplDataFunc('dataInstitutionPayee', 'name', 'payees', 'template_institution_payee', '.institution-payee-list');\r\n\r\n //International Transfer Recipients Payee\r\n window.MvpFE.loadInternationalTransferRecipient = createTmplDataFunc('dataInternationalRecipients', 'nickname', 'internationalRecipients', 'template_international_recipients', '.international-transfer-recipient');\r\n \r\n // International Transfer Search IBAN/Account Bank\r\n window.MvpFE.loadInternationalSearchBank= createTmplDataFunc('dataInternationalSearchBank', 'bankname', 'internationalSearchBank', 'template_iban_select_bank', '.international-transfer-search-bank-list');\r\n \r\n //Transfer External Account - payees\r\n window.MvpFE.loadExternalTransfer = createTmplDataFunc('dataExternalTransfer', 'nickname', 'payees', 'template_external_transfer', '.external-transfer-list');\r\n\r\n return TmplData;\r\n})();\n},{\"mustache\":3}],11:[function(require,module,exports){\n/******************************************************************\r\n * Write page logic js here\r\n *****************************************************************/\r\nvar TmplData = require('./mustache-tmpl.js');\r\nvar Common = require('./common.js');\r\n\r\n/*\r\n * Search panel logic on Accounts Overview page,\r\n */\r\n$(function () {\r\n $('.transactions-advanced-search-btn').on('click', function () {\r\n if ($(this).attr('aria-expanded') === 'true') {\r\n $('#search_collapse_panel').collapse('hide');\r\n $(this).removeAttr('aria-expanded');\r\n } else {\r\n $('#search_collapse_panel').collapse('show');\r\n $(this).attr('aria-expanded', 'true');\r\n $('.transactions-qucik-search-btn').removeAttr('aria-expanded');\r\n }\r\n\r\n $('.transaction-search-panel-desc-advanced').removeClass('hidden');\r\n $('.transaction-search-panel-desc-quick').addClass('hidden');\r\n $('.transaction-search-panel-advanced').removeClass('hidden');\r\n });\r\n\r\n $('.transactions-qucik-search-btn').on('click', function () {\r\n if ($(this).attr('aria-expanded') === 'true') {\r\n $('#search_collapse_panel').collapse('hide');\r\n $(this).removeAttr('aria-expanded');\r\n } else {\r\n $('#search_collapse_panel').collapse('show');\r\n $(this).attr('aria-expanded', 'true');\r\n $('.transactions-advanced-search-btn').removeAttr('aria-expanded');\r\n }\r\n $('.transaction-search-panel-desc-quick').removeClass('hidden');\r\n $('.transaction-search-panel-desc-advanced').addClass('hidden');\r\n $('.transaction-search-panel-advanced').addClass('hidden');\r\n });\r\n});\r\n\r\n/*\r\n * Accounts logic\r\n */\r\n$(function () {\r\n // close all sub collpase component when close a account panel\r\n $(document).on('hidden.bs.collapse', '.account-list-details', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n $(this).find('.collapse.in').collapse('hide');\r\n });\r\n\r\n // Capture show event\r\n $(document).on('shown.bs.collapse', '.transaction-table .hidden-row .collapse', function () {\r\n var elem = $(this).find('.transaction-details-table');\r\n if (elem.length > 0) {\r\n var tableWidth = elem.width();\r\n var panelWidth = $(this).parents('.transaction-table').parent().width();\r\n if (tableWidth > panelWidth) {\r\n $(this).find('.transaction-details').css({\r\n 'width': panelWidth,\r\n 'overflow-x': 'auto'\r\n });\r\n } else {\r\n $(this).find('.transaction-details').attr('style');\r\n }\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * Transactions\r\n */\r\n$(function () {\r\n //add class to quicklinks button group when more option list expanded\r\n $(document).on('show.bs.collapse', '.accounts-overview .stand-alone > .collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('.stand-alone .btn-group.btn-group-justified').addClass('more-option-expanded');\r\n });\r\n\r\n $(document).on('hidden.bs.collapse', '.accounts-overview .stand-alone > .collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('.stand-alone .btn-group.btn-group-justified').removeClass('more-option-expanded');\r\n });\r\n});\r\n\r\n/*\r\n * Transfer Money page\r\n */\r\n\r\nfunction activeDropDown() {\r\n setTimeout(function () { $('.panel-heading').addClass('active') }, 200)\r\n}\r\n\r\n$(document).on('click', '.payees-external-accounts .list-group-item', function () {\r\n activeDropDown()\r\n})\r\n\r\n$(function () {\r\n //get To accounts details information when click list item on Account list with serach input panel\r\n $(document).on('click.allAccountList', '.payees-with-search-panel a[data-key]', function () {\r\n var key = $(this).data('key');\r\n if (key && typeof (getToDetails) !== 'undefined') {\r\n /* global getToDetails */\r\n getToDetails(key);\r\n activeDropDown()\r\n }\r\n });\r\n\r\n //show relative tab when click My Account list item\r\n $(document).on('click.myAccountList', '.payees-with-search-panel .payees-myaccount a.list-group-item', function () {\r\n //update validator\r\n $(this).parent().on('shown.bs.tab', function () {\r\n $('form').validator('update');\r\n });\r\n\r\n $('#myaccount_transfer_container').removeClass('hidden');\r\n $('#osko_transfer_container').addClass('hidden');\r\n $(\".transfer-newpayee-container\").addClass('hidden');\r\n\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n\r\n activeDropDown();\r\n });\r\n\r\n //External Accounts list handler\r\n $(document).on('click.externalAccountList', '.payees-with-search-panel .payees-external-accounts .list-group-item', function () {\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n $('#osko_transfer_container').removeClass('hidden');\r\n $(\".transfer-newpayee-container\").addClass('hidden');\r\n $('#myaccount_transfer_container').addClass('hidden');\r\n\r\n });\r\n\r\n //New Payee button Handler\r\n $(document).on('click.newPayeeBtn', '.payees-with-search-panel .new-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add New Payee');\r\n $(\".transfer-newpayee-container\").removeClass('hidden');\r\n $('#myaccount_transfer_container').addClass('hidden');\r\n $('#osko_transfer_container').addClass('hidden');\r\n });\r\n\r\n //process new payee's fields change event, it will show transfer form fileds\r\n $('.newpayee-transfer-details-trigger').change(function () {\r\n //show hidden tranfer form fields\r\n $('.new-payee-transfer-details').removeClass('hidden');\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n });\r\n\r\n //New payee Financial Account radio checked event\r\n $(document).on('click.transfer-to-curr-bank-radio-yes', '.transfer-to-curr-bank-radio-yes', function () {\r\n $('.new-payee-transfer-details').removeClass('hidden');\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n var elem = $('.transfer-to-curr-bank-radio-yes input')[0];\r\n if (elem.onclick) {\r\n elem.onclick.apply(elem);\r\n }\r\n });\r\n $(document).on('click.transfer-to-curr-bank-radio-no', '.transfer-to-curr-bank-radio-no', function () {\r\n var bsbField = $('#payee_financial_radio_no_tab .newpayee-transfer-details-trigger').val();\r\n if (!bsbField) {\r\n $('.new-payee-transfer-details').addClass('hidden');\r\n }\r\n var elem = $('.transfer-to-curr-bank-radio-no input')[0];\r\n if (elem.onclick) {\r\n elem.onclick.apply(elem);\r\n }\r\n });\r\n\r\n $(document).on('hidden.bs.collapse', '.payees-with-search-panel', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n $('.payees-with-search-panel .list-group-item').removeClass('active');\r\n });\r\n\r\n $(document).on('click.newpayee_list_tab_mobile', '#newpayee_list_tab_mobile .list-group-item', function () {\r\n var target = $(this).attr('href');\r\n $('.btn-group-justified label[data-target=\"' + target + '\"]').trigger('click');\r\n });\r\n\r\n function selectTransMethodMobile(text) {\r\n var panelTitleEle = $('#newpayee_list_tab_mobile').parent('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n panelTitleEle.text(text);\r\n }\r\n\r\n function setTransMethodMobile() {\r\n var elements = $('.transfer-type-btn-group > label > input[type=\"radio\"]');\r\n elements.each(function () {\r\n if ($(this).prop('checked')) {\r\n var text = $(this).parent('label').text();\r\n selectTransMethodMobile(text);\r\n }\r\n });\r\n }\r\n\r\n setTransMethodMobile();\r\n\r\n $(document).on('click.newpayee-radio-click', '.transfer-type-btn-group > label', function () {\r\n var text = $(this).text();\r\n selectTransMethodMobile(text);\r\n });\r\n\r\n // Transfer Money without NPP\r\n $(document).on('click', '.transfer-money-without-npp .payees-with-search-panel .payees-external-accounts .list-group-item', function () {\r\n $(\".transfer-details-container\").removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.transfer-money-without-npp .payees-with-search-panel .new-payee-btn', function () {\r\n $(\".transfer-details-container\").removeClass('hidden');\r\n $(\".transfer-buttons-container\").removeClass('hidden');\r\n\r\n });\r\n});\r\n\r\n\r\n\r\n/*\r\n * Manage PayID\r\n */\r\n$(function () {\r\n $('#manage_payid_details_select_listgroup a[data-toggle=\"tab\"]').on('show.bs.tab', function () {\r\n $('.manage-payid-details-global-cancel-btn').addClass('hidden');\r\n });\r\n});\r\n\r\n/* Update Contact Details */\r\n$(function () {\r\n if ($('.update-contact-inserted-rows-container .contact-info-insert-row:not(.hidden)').length === 0) {\r\n $('.update-contact-details-desc-placeholder').hide();\r\n $('.update-contact-details-desc-placeholder').parents('.tab-pane').addClass('desc-placeholder-hidden');\r\n }\r\n\r\n $('.update-contact-add-contact-btn').click(function () {\r\n $('.update-contact-inserted-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $(document).on('click', '.update-contacts-remove-inserted-row-btn', function () {\r\n $('.update-contact-add-contact-btn').prop('disabled', false);\r\n\r\n $(this).parents('.contact-info-insert-row').remove();\r\n });\r\n\r\n $('.update-contact-add-email-btn').click(function () {\r\n $('.update-contact-inserted-email-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-email-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $('.update-contact-add-profile-btn').click(function () {\r\n $('.update-contact-inserted-profile-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-profile-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $(document).on('click', '.swticher-group-parent .switcher-btns .btn:first-child', function () {\r\n var btns = $(this).parents('.swticher-group-parent').find('.switcher-btns .btn:last-child');\r\n btns.button('toggle');\r\n });\r\n\r\n\r\n $(document).on('change', '.contact-info-select', function () {\r\n $(this).attr('readonly', 'readonly');\r\n });\r\n\r\n function hiddenPayidBtn() {\r\n var payidContainers = $('.update-contact-details-payid-btn-container button');\r\n if (payidContainers && payidContainers.length === 0) {\r\n $('.update-contact-details-payid-btn-container').addClass('hidden');\r\n } else {\r\n if ($(window).width() < 768 && $('.contact-info-insert-row .update-contact-details-payid-btn-container button').length === 0) {\r\n $('.contact-info-insert-row .update-contact-details-payid-btn-container').addClass('hidden');\r\n } else {\r\n $('.contact-info-insert-row .update-contact-details-payid-btn-container').removeClass('hidden');\r\n }\r\n }\r\n }\r\n hiddenPayidBtn();\r\n $(window).resize(hiddenPayidBtn);\r\n});\r\n\r\n/* BPAY */\r\n$(function () {\r\n $(document).on('click.bpayBillerList', '.bpay-biller-list .list-group-item', function () {\r\n $('.bpay-transfer-details').removeClass('hidden');\r\n $('.bpay-add-new-biller').addClass('hidden');\r\n $('.bpay-new-billers-list').addClass('hidden');\r\n\r\n //Populate CRN field\r\n var crn = $(this).data('ref');\r\n\r\n $('.bpay-biller-crn').val(crn);\r\n });\r\n\r\n $(document).on('click.bpayNewBillerBtn', '.bpay-new-biller-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Pay New Biller');\r\n $('.bpay-add-new-biller').removeClass('hidden');\r\n $('.bpay-transfer-details').removeClass('hidden');\r\n $('.bpay-biller-crn').val('');\r\n });\r\n\r\n $(document).on('click.btnSearchBiller', '.btn-search-biller', function () {\r\n //Load search result data\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n $('.new-biller-search-input').val('');\r\n });\r\n\r\n $(document).on('focus.newBillerSearchInput', '.new-biller-search-input', function () {\r\n if (!window.dataNewBillers) {\r\n return;\r\n }\r\n\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n $('.bpay-new-billers-list').removeClass('hidden');\r\n activeDropDown();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('click.bpayNewBillers', '.bpay-new-billers-list .list-group-item', function () {\r\n $('.new-biller-search-input').val('');\r\n $('.bpay-new-billers-list').addClass('hidden');\r\n $('.search-input-with-btn-container').removeClass('search-list-open');\r\n $('.bpay-new-biller-info-container').removeClass('hidden');\r\n activeDropDown();\r\n //reload data\r\n TmplData.setTemplateData('template_new_billers', TmplData.dataNewBillersFormated, '.bpay-new-billers-list');\r\n\r\n //Populate new biller fields\r\n var code = $(this).data('code');\r\n var name = $(this).data('name');\r\n\r\n $('.bpay-new-biller-code').val(code);\r\n $('.bpay-new-biller-name').text(name);\r\n });\r\n\r\n // Bpay view biller\r\n $(document).on('click', '.bpay-new-billers-list .list-group-item', function () {\r\n $('.bpay-view-billers-register-required-content').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* SMS Banking Options */\r\n$(function () {\r\n $(document).on('click', '.sms-banking-options-add-mobile', function () {\r\n $(this).addClass('hidden');\r\n $('.sms-banking-options-hidden-mobile').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* Term Deposit Maintenance */\r\n$(function () {\r\n var okBtnStatus = {\r\n cheque: false,\r\n credit: false,\r\n reinvest: false,\r\n transfer: false\r\n };\r\n\r\n function clearHiddenFields() {\r\n $('[data-clear]').val('');\r\n }\r\n\r\n function updateOkBtnStatus(show) {\r\n if (show) {\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n } else {\r\n $('.term-deposit-maintenance-btn-ok').addClass('hidden');\r\n }\r\n }\r\n $(document).on('shown.bs.tab', '#term_deposit_maintenance_payments_list a[data-toggle=\"tab\"]', function (e) {\r\n if ($(e.target).attr('href') == '#term_deposit_cheque_tab') {\r\n updateOkBtnStatus(okBtnStatus.cheque);\r\n } else if ($(e.target).attr('href') == '#term_deposit_credit_external_tab') {\r\n updateOkBtnStatus(okBtnStatus.credit);\r\n } else if ($(e.target).attr('href') == '#term_deposit_reinvest_tab') {\r\n updateOkBtnStatus(okBtnStatus.reinvest);\r\n } else if ($(e.target).attr('href') == '#term_deposit_transfer_tab') {\r\n updateOkBtnStatus(okBtnStatus.transfer);\r\n }\r\n });\r\n\r\n $(document).on('shown.bs.tab', '#term_deposit_maintenance_payments_list a[href=\"#term_deposit_reinvest_tab\"]', function () {\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.reinvest = true;\r\n });\r\n\r\n function showCommonFieldInChequeTab() {\r\n $('.term-deposit-maintenance-cheque-payee-details').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n $('.term-deposit-maintenance-cheque-institution-payee-fields').addClass('hidden');\r\n okBtnStatus.cheque = true;\r\n }\r\n\r\n $(document).on('click', '.term-deposit-cheque-new-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.term-deposit-maintenance-heading-new-payee').removeClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').addClass('hidden');\r\n\r\n // clear filelds\r\n $('.term-deposit-maintenance-cheque-payee-nickname-input').val($(this).data(''));\r\n $('.term-deposit-maintenance-cheque-payee-ref-input').val($(this).data(''));\r\n\r\n showCommonFieldInChequeTab();\r\n });\r\n\r\n $(document).on('click', '.term-deposit-cheque-to-payee-list .list-group-item', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-heading-new-payee').addClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').removeClass('hidden');\r\n showCommonFieldInChequeTab();\r\n\r\n // fill filelds\r\n $('.term-deposit-maintenance-cheque-payee-nickname-input').val($(this).data('nickname'));\r\n $('.term-deposit-maintenance-cheque-payee-ref-input').val($(this).data('ref'));\r\n });\r\n\r\n $(document).on('click', '.term-deposit-cheque-institution-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add Institution Payee');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n $('.term-deposit-maintenance-cheque-institution-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-heading-new-payee').addClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').addClass('hidden');\r\n $('.term-deposit-maintenance-cheque-payee-details').addClass('hidden');\r\n okBtnStatus.cheque = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-credit-new-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.term-deposit-maintenance-credit-new-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-credit-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.credit = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-maintenance .common-external-payee-list .list-group-item', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-credit-new-payee-fields').addClass('hidden');\r\n $('.term-deposit-maintenance-credit-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.credit = true;\r\n })\r\n\r\n $(document).on('click', '.term-deposit-maintenance .new-payee-btn', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-transfer-new-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-transfer-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.transfer = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-maintenance .payees-myaccount, .term-deposit-maintenance .payees-external-accounts', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-transfer-new-payee-fields').addClass('hidden');\r\n $('.term-deposit-maintenance-transfer-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.transfer = true;\r\n });\r\n\r\n $(document).on('change', '.term-deposit-term-options', function () {\r\n let termValue = $(this).val();\r\n if (termValue) {\r\n termValue = termValue.charAt(0).toUpperCase() + termValue.slice(1);\r\n $(this).parents('.row').find('.term-deposit-term-value').text(termValue);\r\n }\r\n });\r\n\r\n $(document).on('change', '.term-deposit-term-options-btn-group input', function () {\r\n let termValue = $(this).val();\r\n if (termValue) {\r\n termValue = termValue.charAt(0).toUpperCase() + termValue.slice(1);\r\n $(this).parents('.row').find('.term-deposit-term-value').text(termValue);\r\n }\r\n });\r\n});\r\n\r\n/* Statements */\r\n$(function () {\r\n // Hidden or show every account list item feature according to All Accounts switcher, this feature may be used on other pages\r\n $('.account-list-all-accounts-switcher .label-yes, .account-list-all-accounts-switcher .label-no').click(function () {\r\n var listGroup = $(this).parents('.list-group');\r\n\r\n if (listGroup.length > 0) {\r\n var childrenItems = listGroup.children('.list-group-item:not(.account-list-all-account-item)');\r\n if ($(this).hasClass('label-yes')) {\r\n childrenItems.addClass('hidden');\r\n } else if ($(this).hasClass('label-no')) {\r\n childrenItems.removeClass('hidden');\r\n }\r\n }\r\n });\r\n\r\n $(document).on('change', '.statements-select-checkbox', function () {\r\n let $allCheckBoxes = $('.statements-select-checkbox');\r\n if ($allCheckBoxes.length > 0) {\r\n let hasSelected = false;\r\n let selectedItems = 0;\r\n $allCheckBoxes.each(function () {\r\n if (this.checked) {\r\n hasSelected = true;\r\n selectedItems++;\r\n }\r\n });\r\n\r\n if (hasSelected) {\r\n $('.statements-email-selected-btn').removeClass('hidden');\r\n } else {\r\n $('.statements-email-selected-btn').addClass('hidden');\r\n }\r\n $('.statements-online-selected-amount').text(selectedItems);\r\n }\r\n });\r\n});\r\n\r\n/* New Savings Account */\r\n$(function () {\r\n window.MvpFE.newCusSwapSteps = function (activeStep) {\r\n //acitveStep only can be 1 or 2 now\r\n if (activeStep == 1) {\r\n $('.new-savings-account-new-customer-step1').removeClass('hidden');\r\n $('.new-savings-account-new-customer-step2').addClass('hidden');\r\n } else if (activeStep == 2) {\r\n $('.new-savings-account-new-customer-step2').removeClass('hidden');\r\n $('.new-savings-account-new-customer-step1').addClass('hidden');\r\n }\r\n }\r\n});\r\n\r\n/* Statement Options */\r\n$(function () {\r\n // account base\r\n // Hide Online Notification Type radios according to Statements Preerence radios' checked status\r\n $(document).on('click', '.statement-options-account-base-preference .text-mail, .statement-options-account-base-preference .text-none', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-account-base-online-type').addClass('hidden');\r\n });\r\n\r\n // Show Online Notification Type radios according to Statements Preerence radios' checked status\r\n $(document).on('click', '.statement-options-account-base-preference .text-online, .statement-options-account-base-preference .text-both', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-account-base-online-type').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-receive-method .text-mail', function () {\r\n $('.statement-options-client-base-online-method').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-account-base-preference .text-mail, .statement-options-account-base-preference .text-online, .statement-options-account-base-preference .text-both', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-statement-frequency').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-account-base-preference .text-none', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-statement-frequency').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-statement-frequency .text-days, .statement-options-statement-frequency .text-months', function () {\r\n $(this).parents('.statement-options-statement-frequency').find('.frequency-input-box').removeClass('hidden');\r\n $(this).parents('.statement-options-statement-frequency').find('.starting-on-box').removeClass('hidden');\r\n })\r\n\r\n $(document).on('click', '.statement-options-statement-frequency .text-last-day', function () {\r\n $(this).parents('.statement-options-statement-frequency').find('.frequency-input-box').addClass('hidden');\r\n $(this).parents('.statement-options-statement-frequency').find('.starting-on-box').addClass('hidden');\r\n })\r\n\r\n //client base\r\n $(document).on('click', '.statement-options-client-base-receive-method .text-online, .statement-options-client-base-receive-method .text-both', function () {\r\n $('.statement-options-client-base-online-method').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-receive-method .btn-group > .btn', function () {\r\n $('.statement-options-statement-frequency').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-online-method .statement-options-email-box .label-yes', function () {\r\n $('.statement-options-email').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-online-method .statement-options-email-box .label-no', function () {\r\n $('.statement-options-email').addClass('hidden');\r\n });\r\n});\r\n\r\n/* Institution Payee Search - this can be used to more than one page */\r\n$(function () {\r\n $(document).on('click', '.btn-search-institution-payee', function () {\r\n //Load search result data\r\n window.MvpFE.loadInstitutionPayee();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('focus', '.institution-search-input', function () {\r\n if (!window.dataInstitutionPayee) {\r\n return;\r\n }\r\n\r\n window.MvpFE.loadInstitutionPayee();\r\n $('.institution-payee-list').removeClass('hidden');\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('click', '.institution-payee-list .list-group-item', function () {\r\n $('.institution-search-input').val('');\r\n $('.institution-payee-list').addClass('hidden');\r\n $('.institution-payee-name-filed').removeClass('hidden');\r\n $('.search-input-with-btn-container').removeClass('search-list-open');\r\n $('.institution-payee-name-filed input').val($(this).data('name'));\r\n $('.institution-payee-key-filed').val($(this).data('key'));\r\n });\r\n});\r\n\r\n// Campaign\r\n$(function () {\r\n var elem = $('.campaign-content');\r\n\r\n if (elem && elem.length > 0) {\r\n $('body').addClass('campaign');\r\n }\r\n});\r\n\r\n/**\r\n * Login page\r\n */\r\n$(function () {\r\n // move login-logout class to body\r\n var elem = $('.login-logout');\r\n if (elem && elem.length > 0) {\r\n $('body').addClass('login-logout');\r\n elem.removeClass('login-logout');\r\n }\r\n\r\n function adjustOverlaySize() {\r\n if ($('body').height() > window.innerHeight) {\r\n var overlayWidth = ($(window).width() - $('.login-logout-main .main-content .row').width()) / 2;\r\n $('.login-logout-main-overlay-box-left, .login-logout-main-overlay-box-right').width(overlayWidth);\r\n } else {\r\n $('.login-logout-main-overlay-box-left, .login-logout-main-overlay-box-right').attr('style', '');\r\n }\r\n }\r\n\r\n if ($(window).width() >= 768 && $('.login-logout').length > 0) {\r\n adjustOverlaySize();\r\n //observing .login-rightobx's dom change\r\n var observer = new MutationObserver(function () {\r\n adjustOverlaySize();\r\n });\r\n\r\n var target = $('.login-rightbox');\r\n if (target.length > 0) {\r\n observer.observe(target[0], {\r\n attributes: true,\r\n subtree: true\r\n });\r\n }\r\n }\r\n});\r\n\r\n/**\r\n * Alerts\r\n */\r\n$(function () {\r\n $(document).on('click', '.alerts-method-mobile-add-btn', function () {\r\n var hiddenBoxes = $('.alerts-method-mobile-additional.hidden');\r\n if (hiddenBoxes.length > 0) {\r\n $(hiddenBoxes[0]).removeClass('hidden');\r\n if ($('.alerts-method-mobile-additional.hidden').length === 0) {\r\n $(this).parents('.alerts-method-mobile-add-btn-box').addClass('hidden');\r\n }\r\n }\r\n });\r\n\r\n $(document).on('click', '.alerts-method-mobile-remove-btn', function () {\r\n $(this).parents('.alerts-method-mobile-additional').addClass('hidden');\r\n $('.alerts-method-mobile-add-btn-box').removeClass('hidden');\r\n });\r\n\r\n $(document).on('change', '.alerts-method-mobile-select-default', function () {\r\n $('.alerts-method-mobile-add-btn-box').removeClass('hidden');\r\n });\r\n});\r\n\r\n/**\r\n * SMS\r\n */\r\n$(function () {\r\n $(document).on('click', '.btn-get-sms', function () {\r\n $('.sms-sent-message').removeClass('hidden');\r\n });\r\n});\r\n\r\n/**\r\n * Secure Messages\r\n */\r\n$(function () {\r\n function hasChecked(container) {\r\n var elements = container.find('.checkbox-cus input[type=\"checkbox\"]');\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].checked) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $(document).on('click', '.secure-messages-select-all-btn', function () {\r\n $(this).parents('.tab-pane').find('table thead .checkbox-cus input[type=\"checkbox\"]').trigger('click');\r\n });\r\n\r\n $(document).on('change', '.secure-messages table .checkbox-cus input[type=\"checkbox\"]', function () {\r\n if (this.checked || hasChecked($(this).parents('tbody'))) {\r\n $(this).parents('.tab-pane').find('.secure-messages-delete-selected-btn').removeClass('hidden');\r\n } else {\r\n $(this).parents('.tab-pane').find('.secure-messages-delete-selected-btn').addClass('hidden');\r\n }\r\n });\r\n\r\n $(document).on('click', '.secure-messages-edit-btn', function () {\r\n $(this).addClass('hidden');\r\n $(this).parents('.tab-pane').find('.secure-messages-select-all-btn').removeClass('hidden-xs');\r\n $(this).parents('.tab-pane').find('tbody .checkbox-cus input[type=\"checkbox\"]').parents('td').removeClass('hidden-xs');\r\n })\r\n\r\n $(document).on('change', '.secure-messages-attach-doc-row input', function () {\r\n var parentDiv = $(this).parent('div');\r\n if (parentDiv.length === 0) return;\r\n\r\n parentDiv.nextAll('div.hidden').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* International Transfer/Payment */\r\n$(function () {\r\n /* To Show Section Transfer Recipient on select of Dropdown from 'To' Menu */\r\n $(document).on('click', '.international-transfer-recipient .list-group-item', function () {\r\n $('.international-transfer-recipient-details').removeClass('hidden');\r\n $('.international-transfer-global-button').removeClass('hidden');\r\n $('.international-transfer-details').removeClass('hidden');\r\n if ($('.international-transfer-new-recipient, .international-transfer-pay-new-recipient-tab').is(':visible')) {\r\n $('.international-transfer-pay-new-recipient-tab').addClass('hidden');\r\n $('.international-transfer-new-recipient').addClass('hidden');\r\n }\r\n });\r\n\r\n $(document).on('click', '.international-transfer-new-recipient-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Pay New Recipient');\r\n $('.international-transfer-new-recipient').removeClass('hidden');\r\n if ($('.international-transfer-global-button, .international-transfer-details, .international-transfer-recipient-details').is(':visible')) {\r\n $('.international-transfer-global-button').addClass('hidden');\r\n $('.international-transfer-details').addClass('hidden');\r\n $('.international-transfer-recipient-details').addClass('hidden');\r\n }\r\n });\r\n\r\n /* Select Payee Details Country */\r\n $(document).on('change', '.international-transfer-pay-country-select', function () {\r\n $('.international-transfer-pay-new-recipient-tab').removeClass('hidden');\r\n });\r\n\r\n /* To Show Transfer Details on Click of List Group of Bank Search */\r\n $(document).on('click', '.international-transfer-search-bank-list .list-group-item, .international-transfer-new-recipient-link', function () {\r\n $('.international-transfer-global-button').removeClass('hidden');\r\n $('.international-transfer-new-recipient-input').removeClass('hidden');\r\n $('.international-transfer-details').removeClass('hidden');\r\n $('.international-transfer-search-bank-list').addClass('hidden');\r\n });\r\n\r\n // To load Additional Details Dropdown Other options\r\n $(document).on('change', '.international-transfer-details-input', function () {\r\n var opt_selected = $(this).val();\r\n if (opt_selected.toLowerCase() === 'other') {\r\n $('.international-transfer-details-other-section').removeClass('hidden');\r\n $('.international-transfer-details-other-input').val('');\r\n } else {\r\n $('.international-transfer-details-other-section').addClass('hidden');\r\n }\r\n });\r\n\r\n // To Search IBAN International Bank List \r\n var international_transfer_search_input_class = '.international-transfer-search-bank-iban-input, .international-transfer-search-bank-swift-input, .international-transfer-search-bank-name-input, .international-transfer-search-bank-city-input';\r\n $(document).on('focus', international_transfer_search_input_class, function () {\r\n if (!window.dataInternationalSearchBank) {\r\n return;\r\n }\r\n window.MvpFE.loadInternationalSearchBank();\r\n $('.international-transfer-search-bank-list').removeClass('hidden');\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $('[data-target=\"#bank_name_tab\"]').on('shown.bs.tab', function (e) {\r\n var targetSelector = $(e.target).data('target');\r\n if (!targetSelector) {\r\n targetSelector = $(e.target).attr('href');\r\n }\r\n\r\n if ($(targetSelector).find('.form-group.has-error').length > 0) {\r\n $('form').validator('validate');\r\n //It seems bootstrap-validator has a bug to do validate again, so add this timeout to invoke again to ignore. \r\n setTimeout(function () {\r\n $('form').validator('validate');\r\n });\r\n }\r\n })\r\n\r\n $(document).on('click', '.btn-search-international-bank', function () {\r\n if ($(this).parents('#bank_name_tab').length > 0) {\r\n $('form').validator('validate');\r\n }\r\n\r\n //Load search result data\r\n window.MvpFE.loadInternationalSearchBank();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n});\r\n\r\n/*\r\n * Setup Security Options\r\n */\r\n$(function () {\r\n $('#security_options_details_select_listgroup a[data-toggle=\"tab\"]').on('show.bs.tab', function () {\r\n $('.security-option-details-global-request-btn').removeClass('hidden');\r\n $('.security-option-details-global-from-account-section').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * Transfer External Account\r\n */\r\n$(function () {\r\n $(document).on('click', '.transfer-external-account-to .list-group-item', function () {\r\n $('.transfer-external-account-details').removeClass('hidden');\r\n });\r\n});\r\n\r\n/*\r\n * International Transfer Address Book\r\n */\r\n$(function () {\r\n $(document).on('change', '.international-transfer-address-book-manage', function () {\r\n $('.international-transfer-address-book-tab').removeClass('hidden');\r\n });\r\n $(document).on('click', '.international-transfer-search-bank-list .list-group-item, .international-transfer-new-recipient-link', function () {\r\n $('.address-book-new-global-btn').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * Cheque and Deposits\r\n */\r\n$(function () {\r\n function hideOtherPane(inputClass) {\r\n $(inputClass).addClass('hidden');\r\n }\r\n $(document).on('click', '.cheque-deposit-cheque-new-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.cheque-deposit-order-cheque-new-payee-details').removeClass('hidden');\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-institution-payee-details');\r\n });\r\n\r\n $(document).on('click', '.cheque-and-deposits .term-deposit-cheque-to-payee-list .list-group-item', function () {\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-order-cheque-new-payee-details');\r\n hideOtherPane('.cheque-deposit-institution-payee-details');\r\n });\r\n\r\n $(document).on('click', '.cheque-and-deposits #account_panel_select_options .list-group-item', function () {\r\n $('.cheque-deposit-order-cheque-book-pane').removeClass('hidden');\r\n $('.cheque-deposit-order-deposit-book-pane').removeClass('hidden');\r\n $('.cheque-deposit-stop-cheque-pane').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.cheque-deposit-institution-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add Institution Payee');\r\n $('.cheque-deposit-institution-payee-details').removeClass('hidden');\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-order-cheque-new-payee-details');\r\n });\r\n});\r\n\r\n// Please add new code at following with ES6 \r\nclass PageLogic {\r\n static pickNowRemovingData(btn) {\r\n if (!btn) {\r\n return null;\r\n }\r\n\r\n const tds = $(btn).parents('tr').children('td');\r\n let data = {\r\n removingData: []\r\n };\r\n tds.each((index, element) => {\r\n if ($(element).data('title') !== undefined) {\r\n data.removingData.push({\r\n title: $(element).data('title'),\r\n text: $(element).text()\r\n })\r\n }\r\n });\r\n\r\n return data;\r\n }\r\n\r\n static insertNowRemovingData(data) {\r\n TmplData.setTemplateData('template_notice_of_withdrawal_remove_confirm_content', data, '.notices-of-withdrawal-confirm-content');\r\n }\r\n\r\n static cancelAddingNewNow(btn) {\r\n $(btn).parents('tr').remove();\r\n }\r\n\r\n static businessViewpointShowBox(elem) {\r\n var approveChangeEle = document.getElementsByClassName('business-viewpoint-approve-change-container')[0];\r\n var btnUpdateAccessLevel = document.getElementsByClassName('business-viewpoint-update-access-level-btn')[0];\r\n var btnUpdatePassword = document.getElementsByClassName('business-viewpoint-update-password-btn')[0];\r\n var btnDeleteLogin = document.getElementsByClassName('business-viewpoint-delete-login-btn')[0];\r\n if ($(elem).attr('href') === '#tab_access_level') {\r\n approveChangeEle.classList.remove('hidden');\r\n btnUpdateAccessLevel.classList.remove('hidden');\r\n btnUpdatePassword.classList.add('hidden');\r\n btnDeleteLogin.classList.add('hidden');\r\n } else if ($(elem).attr('href') === '#tab_update_password') {\r\n approveChangeEle.classList.add('hidden');\r\n btnUpdateAccessLevel.classList.add('hidden');\r\n btnUpdatePassword.classList.remove('hidden');\r\n btnDeleteLogin.classList.add('hidden');\r\n } else if ($(elem).attr('href') === '#tab_delete_login') {\r\n approveChangeEle.classList.remove('hidden');\r\n btnUpdateAccessLevel.classList.add('hidden');\r\n btnUpdatePassword.classList.add('hidden');\r\n btnDeleteLogin.classList.remove('hidden');\r\n } else {\r\n console.error('Error: businessViewpointShowBox');\r\n }\r\n }\r\n}\r\n\r\nclass OnlineLending {\r\n static applicantDetailsNavHandler(elem) {\r\n const siblings = $(elem).siblings();\r\n siblings.each((index, elemment) => {\r\n $($(elemment).data('target')).collapse('hide');\r\n });\r\n $($(elem).data('target')).collapse('show');\r\n\r\n const parentElement = $(elem).parents(\".online-lending-applicant-pane\");\r\n parentElement.find('.online-lending-applicant-min-max-buttons label').removeClass('active');\r\n parentElement.find('.online-lending-applicant-min-max-buttons input').prop('checked', false);\r\n setTimeout(function () {\r\n $('html').animate({\r\n scrollTop: $($(\".online-lending-applicant-details-heading [data-target='\" + $(elem).data('target') + \"']\")[0]).parent().offset().top\r\n }, 200);\r\n }, 400);\r\n }\r\n\r\n static onlineLendingMaximiseApplicantDetails(elem) {\r\n const parentElement = $(elem).closest('.online-lending-applicant-pane');\r\n const label = $(elem).attr('data-label');\r\n\r\n if (label === 'max-all') {\r\n parentElement.find(\".online-lending-applicant-details-pane\").collapse('show');\r\n } else {\r\n parentElement.find(\".online-lending-applicant-details-pane\").collapse('hide');\r\n }\r\n\r\n parentElement.find('.online-lending-applicant-details-nav label').removeClass('active');\r\n parentElement.find('.online-lending-applicant-details-nav input').prop('checked', false);\r\n }\r\n}\r\n\r\n\r\n// document ready\r\n$(() => {\r\n // Notices of withdrawal - Remove\r\n $('#notice_of_withdrawal_remove_confirm').on('show.bs.modal', event => {\r\n const button = event.relatedTarget;\r\n const data = PageLogic.pickNowRemovingData(button);\r\n PageLogic.insertNowRemovingData(data);\r\n });\r\n\r\n $(document).on('click', '.notices-of-withdrawal-cancel-btn', e => {\r\n PageLogic.cancelAddingNewNow(e.currentTarget);\r\n });\r\n\r\n /* Bussiness Viewpoint */\r\n $('#business_viewpoint_modifications > a[data-toggle=\"tab\"]').on('shown.bs.tab', e => {\r\n PageLogic.businessViewpointShowBox(e.target);\r\n });\r\n\r\n /* Online Lending Start*/\r\n $(document).on('click', '.online-lending-applicant-details-nav > label', function () {\r\n OnlineLending.applicantDetailsNavHandler(this);\r\n });\r\n\r\n $(document).on('click', '.online-lending-applicant-details-heading > [data-toggle=\"collapse\"]', function () {\r\n $(this).parents('.online-lending-applicant-pane').find(`.online-lending-applicant-details-nav > [data-target=\"${$(this).data('target')}\"]`).trigger('click');\r\n if ($(this).attr('aria-expanded') === 'false') {\r\n $(this).parents('.online-lending-applicant-pane').find(`.online-lending-applicant-details-nav label`).removeClass('active');\r\n }\r\n });\r\n\r\n $(document).on('click', '.online-lending-applicant-min-max-buttons label', function () {\r\n OnlineLending.onlineLendingMaximiseApplicantDetails(this);\r\n });\r\n\r\n // handler credit card list active status\r\n $(document).on('click', '.online-lending-card-list .list-group-item', function () {\r\n if ($(this).hasClass('active')) return;\r\n\r\n $(this).siblings('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n /* Online Lending End*/\r\n\r\n /* Online ID Start */\r\n $(document).on('click', '.online-identification-content .online-identification-content-max-min-actions .btn', function () {\r\n let action = $(this).data('label');\r\n let actionBtns = $('.online-identification-content [data-parent-cus]');\r\n if (action === 'max-all') {\r\n actionBtns.each(function () {\r\n let target = $(this).data('target');\r\n $(target).collapse('show');\r\n });\r\n } else if (action === 'mini-all') {\r\n actionBtns.each(function () {\r\n let target = $(this).data('target');\r\n $(target).collapse('hide');\r\n });\r\n } else {\r\n console.error('cannot recognize correct action: action is ' + action);\r\n }\r\n });\r\n\r\n $(document).on('click', '[data-parent-cus=\".online-identification-content\"]', function () {\r\n let radioBtns = $(this).parents('.online-identification-content').find('.online-identification-content-max-min-actions .btn');\r\n radioBtns.removeClass('active');\r\n radioBtns.children('input').prop('checked', false);\r\n });\r\n /* Online ID End */\r\n\r\n // Manage Cards Begin\r\n $('.manage-cards a[href=\"#send_to_address_yes\"]').on('shown.bs.tab', function () {\r\n $('.manage-cards .card-order').removeClass('hidden');\r\n });\r\n $('.manage-cards a[href=\"#send_to_address_yes\"]').on('hidden.bs.tab', function () {\r\n $('.manage-cards .card-order').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.manage-cards .order-new-card-btn', function () {\r\n $('.manage-cards .order-a-new-card-box').removeClass('hidden');\r\n $(this).addClass('hidden');\r\n $('.manage-cards .card-order').removeClass('hidden');\r\n });\r\n\r\n $('.manage-cards .enter-expire-date').on('change', function () {\r\n $('.manage-cards .active-card-btn').removeClass('hidden');\r\n });\r\n\r\n $('.manage-cards-action-list .list-group-item').click(function () {\r\n $('.manage-cards-global-buttons').addClass('hidden');\r\n });\r\n\r\n $('.card-lost-stolen-buttons .btn').click(function () {\r\n $('.card-lost-stolen-stop').removeClass('hidden');\r\n });\r\n // Manage Cards End\r\n\r\n //One Time Password Start\r\n $(document).on('click', '.get-otp-btn', function () {\r\n $('.otp-sent-notification-alert').removeClass('hidden');\r\n $('.otp-sent-sms-alert').addClass('hidden');\r\n $('.otp-sent-token-alert').addClass('hidden');\r\n $('.get-opt-password-box').removeClass('hidden');\r\n $('.opt-label').removeClass('hidden');\r\n $('.opt-label-sms').addClass('hidden');\r\n $('.opt-label-token').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.get-otp-sms-btn', function () {\r\n $('.otp-sent-notification-alert').addClass('hidden');\r\n $('.otp-sent-sms-alert').removeClass('hidden');\r\n $('.opt-label').addClass('hidden');\r\n $('.opt-label-sms').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.get-otp-token-btn', function () {\r\n $('.otp-sent-notification-alert').addClass('hidden');\r\n $('.otp-sent-token-alert').removeClass('hidden');\r\n $('.opt-label').addClass('hidden');\r\n $('.opt-label-token').removeClass('hidden');\r\n });\r\n //One Time Password End\r\n});\r\n\r\nmodule.exports = PageLogic;\n},{\"./common.js\":5,\"./mustache-tmpl.js\":10}],12:[function(require,module,exports){\n/******************************************************************\r\n * Input client side search feature\r\n *****************************************************************/\r\nvar TmplData = require('./mustache-tmpl.js');\r\n\r\n$(function () {\r\n var timer,\r\n delayTime = 500;\r\n\r\n function isInArray(str, array) {\r\n if (!array) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n if (array[i] === str) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function removeUnmatchedData(data, ele, ignoreProps) {\r\n var removed = false;\r\n for (var i = data.length - 1; i >= 0; i--) {\r\n var notmatch = true;\r\n for (var prop in data[i]) {\r\n if (isInArray(prop, ignoreProps)) {\r\n continue;\r\n }\r\n\r\n if (data[i][prop].toUpperCase().indexOf($(ele).val().toUpperCase()) !== -1) {\r\n notmatch = false;\r\n break;\r\n }\r\n }\r\n\r\n if (notmatch) {\r\n removed = true;\r\n data.splice(i, 1);\r\n }\r\n }\r\n\r\n return removed;\r\n }\r\n\r\n // insert unmatched text when no data matched\r\n function insertNoMatchText(searchResult, root, containerSelector) {\r\n if (searchResult[root].length === 0) {\r\n $(containerSelector).append(\r\n `
    \r\n \r\n No matching result available.\r\n
    `\r\n );\r\n window.MvpFE.mapIcons();\r\n }\r\n }\r\n\r\n // Bind search input, only for one data source\r\n function bindSearchInput (inputSelector, root, excludeProps, dataVarName, tmplId, containerSelector) {\r\n $(document).on('keyup', inputSelector, function () {\r\n clearTimeout(timer);\r\n var me = this;\r\n\r\n timer = setTimeout(function () {\r\n //deep copy objects\r\n var searchResult = jQuery.extend(true, {}, TmplData[dataVarName]);\r\n\r\n if (searchResult[root]) {\r\n var removedData = removeUnmatchedData(searchResult[root], me, excludeProps);\r\n if (removedData) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData(tmplId + '_search', searchResult, containerSelector);\r\n } else {\r\n TmplData.setTemplateData(tmplId, TmplData[dataVarName + 'Formated'], containerSelector);\r\n }\r\n\r\n insertNoMatchText(searchResult, root, containerSelector);\r\n }\r\n }, delayTime);\r\n });\r\n }\r\n\r\n // Transfer Money payee search - because there are two data source, do not use common function\r\n $(document).on('keyup.payeesSearchInput', '.payees-search-input', function () {\r\n clearTimeout(timer);\r\n var me = this;\r\n\r\n timer = setTimeout(function () {\r\n //deep copy objects\r\n var searchResultMyAccount = jQuery.extend(true, {}, TmplData.dataMyAccount),\r\n searchResultPayees = jQuery.extend(true, {}, TmplData.dataPayeesSearch);\r\n\r\n //my account search\r\n if (searchResultMyAccount.myAccountListItem) {\r\n var removedMyAccounts = removeUnmatchedData(searchResultMyAccount.myAccountListItem, me, ['key']);\r\n if (removedMyAccounts) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData('template_payees_myaccount', searchResultMyAccount, '.payees-myaccount');\r\n } else {\r\n TmplData.setTemplateData('template_payees_myaccount', TmplData.dataMyAccount, '.payees-myaccount');\r\n }\r\n insertNoMatchText(searchResultMyAccount, 'myAccountListItem', '.payees-myaccount');\r\n }\r\n\r\n //external account search\r\n if (searchResultPayees.payees) {\r\n var removedExternalAccounts = removeUnmatchedData(searchResultPayees.payees, me, ['key', 'targetId']);\r\n if (removedExternalAccounts) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData('template_payees_external_account_search', searchResultPayees, '.payees-external-accounts');\r\n } else {\r\n TmplData.setTemplateData('template_payees_external_account', TmplData.dataPayeesFormated, '.payees-external-accounts');\r\n }\r\n insertNoMatchText(searchResultPayees, 'payees', '.payees-external-accounts');\r\n }\r\n }, delayTime);\r\n });\r\n\r\n // BPay biller search\r\n bindSearchInput('.biller-search-input', 'billers', ['key', 'changeUrl', 'payUrl'], \r\n 'dataBillers', 'template_billers', '.bpay-biller-list');\r\n\r\n // Bpay add new biller search\r\n bindSearchInput('.new-biller-search-input', 'billers', ['key', 'ref', 'changeUrl', 'payUrl', 'href'], 'dataNewBillers', \r\n 'template_new_billers', '.bpay-new-billers-list');\r\n\r\n // Term Deposit Maintenance | Cheque and Deposits - Cheque Tab Payee Search\r\n bindSearchInput('.term-deposit-cheque-to-payee-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataChequeToPayees', 'template_term_deposit_cheque_to_payee', '.term-deposit-cheque-to-payee-list');\r\n \r\n // Term Deposit Maintenance - Credit External Tab Payee Search\r\n bindSearchInput('.common-external-payee-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataExternalPayees', 'template_common_external_payee', '.common-external-payee-list');\r\n\r\n // Institution Payee Search\r\n bindSearchInput('.institution-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataInstitutionPayee', 'template_institution_payee', '.institution-payee-list');\r\n\r\n // External Account search\r\n bindSearchInput('.external-account-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataExternalTransfer', 'template_external_transfer', '.external-transfer-list'); \r\n \r\n // International Transfer Recipients Payee Search\r\n bindSearchInput('.international-Recipients-search-input', 'internationalRecipients', ['key', 'changeUrl', 'payUrl'],\r\n 'dataInternationalRecipients', 'template_international_recipients', '.international-transfer-recipient');\r\n\r\n //International Transfer IBAN/Bank Account Search \r\n bindSearchInput('.international-transfer-search-bank-iban-input, .international-transfer-search-bank-swift-input, .international-transfer-search-bank-name-input, .international-transfer-search-bank-city-input', 'internationalSearchBank', ['key', 'changeUrl', 'payUrl'],\r\n 'dataInternationalSearchBank', 'template_iban_select_bank', '.international-transfer-search-bank-list');\r\n \r\n});\n},{\"./mustache-tmpl.js\":10}],13:[function(require,module,exports){\n/***********************************************************\r\n * State tool\r\n ***********************************************************/\r\n\r\nmodule.exports = (function () {\r\n var State = {};\r\n\r\n State._activeClass = 'is-active';\r\n State._inactiveClass = undefined;\r\n\r\n State._isActive = false;\r\n State._elements = [];\r\n\r\n State._changeEvent = new CustomEvent('state_change');\r\n\r\n //\tconstructor\r\n State.init = function (initialState, activeClass, inactiveClass) {\r\n if (initialState !== true) initialState = false;\r\n if (activeClass && typeof (activeClass) == 'string') this._activeClass = activeClass;\r\n if (inactiveClass && typeof (inactiveClass) == 'string') this._inactiveClass = inactiveClass;\r\n };\r\n\r\n State.addElement = function (element) {\r\n this._elements.push(element);\r\n this._updateClasses();\r\n };\r\n\r\n //\tisActive properties\r\n State.__defineGetter__('isActive', function () {\r\n return this._isActive;\r\n });\r\n State.__defineSetter__('isActive', function (nState) {\r\n if (typeof (nState) == 'boolean' && nState != this._isActive) {\r\n this._isActive = nState;\r\n this._updateClasses();\r\n this._dispatchEvents();\r\n }\r\n });\r\n\r\n //\tdispatch change event on all elements\r\n State._dispatchEvents = function () {\r\n this._elements.forEach(function (_elm) {\r\n _elm.dispatchEvent(State._changeEvent);\r\n });\r\n };\r\n\r\n //\tupdate classes for all elements\r\n State._updateClasses = function () {\r\n if (this._isActive) {\r\n this._addClass(this._activeClass);\r\n this._removeClass(this._inactiveClass);\r\n } else {\r\n this._addClass(this._inactiveClass);\r\n this._removeClass(this._activeClass);\r\n }\r\n };\r\n\r\n //\tadd class to elements\r\n State._addClass = function (className) {\r\n if (className)\r\n this._elements.filter(function (_elm) {\r\n if (_elm) return true;\r\n }).forEach(function (_elm) {\r\n _elm.classList.add(className);\r\n });\r\n };\r\n\r\n //\tremove class from elements\r\n State._removeClass = function (className) {\r\n if (className)\r\n this._elements.filter(function (_elm) {\r\n if (_elm) return true;\r\n }).forEach(function (_elm) {\r\n _elm.classList.remove(className);\r\n });\r\n };\r\n\r\n return State;\r\n})();\n},{}],14:[function(require,module,exports){\n/******************************************************************\r\n * To top button feature\r\n *****************************************************************/\r\n(function (jQuery) {\r\n jQuery.fn.UItoTop = function (options) {\r\n\r\n var defaults = {\r\n text: 'To Top',\r\n min: 200,\r\n inDelay: 600,\r\n outDelay: 400,\r\n containerID: 'toTop',\r\n containerHoverID: 'toTopHover',\r\n scrollSpeed: 1200,\r\n easingType: 'linear'\r\n };\r\n\r\n var settings = jQuery.extend(defaults, options);\r\n var containerIDhash = '#' + settings.containerID;\r\n var containerHoverIDHash = '#' + settings.containerHoverID;\r\n\r\n jQuery('body').append('' + settings.text + '');\r\n jQuery(containerIDhash).hide().click(function () {\r\n jQuery('html, body').animate({\r\n scrollTop: 0\r\n }, settings.scrollSpeed, settings.easingType);\r\n jQuery('#' + settings.containerHoverID, this).stop().animate({\r\n 'opacity': 0\r\n }, settings.inDelay, settings.easingType);\r\n return false;\r\n })\r\n .prepend('')\r\n .hover(function () {\r\n jQuery(containerHoverIDHash, this).stop().animate({\r\n 'opacity': 1\r\n }, 600, 'linear');\r\n }, function () {\r\n jQuery(containerHoverIDHash, this).stop().animate({\r\n 'opacity': 0\r\n }, 700, 'linear');\r\n });\r\n\r\n jQuery(window).scroll(function () {\r\n var sd = jQuery(window).scrollTop();\r\n if (typeof document.body.style.maxHeight === 'undefined') {\r\n jQuery(containerIDhash).css({\r\n 'position': 'absolute',\r\n 'top': jQuery(window).scrollTop() + jQuery(window).height() - 48\r\n });\r\n }\r\n if (sd > settings.min)\r\n jQuery(containerIDhash).fadeIn(settings.inDelay);\r\n else\r\n jQuery(containerIDhash).fadeOut(settings.Outdelay);\r\n });\r\n\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * Init totop feature\r\n */\r\n$(function () {\r\n jQuery().UItoTop({\r\n scrollSpeed: 500,\r\n text: ''\r\n });\r\n $('#toTop').append('');\r\n});\n},{}],15:[function(require,module,exports){\n/*******************************************************\r\n * Unclick tool\r\n *******************************************************/\r\n\r\nmodule.exports = (function () {\r\n var Unclick = {},\r\n _unclicks = [],\r\n _exceptElems = [];\r\n\r\n function makeUnclickEvent(targ) {\r\n var unclickEvent = document.createEvent('CustomEvent');\r\n unclickEvent.initEvent('unclick', true, true, {\r\n target: targ\r\n });\r\n return unclickEvent;\r\n }\r\n\r\n function checkUnclick(targ) {\r\n _unclicks.forEach(function (_elem) {\r\n if (targ !== _elem) {\r\n if (!isDescendant(_elem, targ) && !isInExceptElements(_elem, targ)) {\r\n _elem.dispatchEvent(makeUnclickEvent(_elem));\r\n }\r\n }\r\n });\r\n }\r\n\r\n function isDescendant(parent, child) {\r\n var node = child.parentNode;\r\n while (node != null) {\r\n if (node == parent) {\r\n return true;\r\n }\r\n node = node.parentNode;\r\n }\r\n return false;\r\n }\r\n\r\n function isInExceptElements(elem, targ) {\r\n for (var i = 0; i < _exceptElems.length; i++) {\r\n if (elem == _exceptElems[i].elem) {\r\n for (var j = 0; j < _exceptElems[i].excepts.length; j++) {\r\n if (targ == _exceptElems[i].excepts[j] || $(_exceptElems[i].excepts[j]).find(targ).length > 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n window.addEventListener('click', function (e) {\r\n checkUnclick(e.target);\r\n });\r\n\r\n Unclick.registerUnclick = function (element, cb, exceptElems) {\r\n _unclicks.push(element);\r\n\r\n for (var i = 0; exceptElems && i < exceptElems.length; i++) {\r\n _exceptElems.push(exceptElems[i]);\r\n }\r\n\r\n element.addEventListener('unclick', cb);\r\n };\r\n\r\n return Unclick;\r\n})();\n},{}]},{},[4])\n\n","/***********************************************\r\n * use bootstrap datepicker\r\n **********************************************/\r\nvar moment = require('moment');\r\n$(document).ready(function () {\r\n function bindDatepicker() {\r\n function modifyPostion(width) {\r\n var winWidth = $(window).width();\r\n if (winWidth < 480) {\r\n var element = $('.datepicker.datepicker-dropdown')[0],\r\n leftValue = $(element).position().left;\r\n\r\n if (leftValue < 0 || leftValue + width > winWidth) {\r\n var newLeft = 0;\r\n if (winWidth >= width || leftValue + width > winWidth) {\r\n $(element).css({\r\n left: newLeft\r\n });\r\n } else {\r\n newLeft = (winWidth - width) / 2;\r\n $(element).css({\r\n left: newLeft\r\n });\r\n }\r\n\r\n var assumpeDiffValue = 110;\r\n if (leftValue < 0 && Math.abs(newLeft - leftValue) > assumpeDiffValue) {\r\n $(element).removeClass('datepicker-orient-right');\r\n $(element).addClass('datepicker-orient-left');\r\n }\r\n }\r\n }\r\n }\r\n\r\n $('input.datepicker').each(function () {\r\n if ($(this).attr('data-cus-placeholder')) {\r\n $(this).attr('placeholder', $(this).attr('data-cus-placeholder'));\r\n } else {\r\n $(this).attr('placeholder', window.MvpFE.globalConfiguration.datePickerPlaceholder || 'DD MM YYYY');\r\n }\r\n });\r\n\r\n var disableTouchKeyboard = true;\r\n /* eslint-disable */\r\n if (bowser.msie && bowser.version === \"11.0\") {\r\n /* eslint-enable */\r\n disableTouchKeyboard = false;\r\n }\r\n var pickerWidth = 0;\r\n\r\n $('input.datepicker').each(function () {\r\n\r\n // console.log($(this).parent());\r\n $(this).datepicker({\r\n format: window.MvpFE.globalConfiguration.datePickerFormat || 'dd M yyyy',\r\n autoclose: true,\r\n forceParse: false,\r\n disableTouchKeyboard: disableTouchKeyboard,\r\n container: $(this).parents().eq(1)\r\n }).on('show', function () {\r\n if (pickerWidth === 0) {\r\n pickerWidth = $('.datepicker.datepicker-dropdown').width();\r\n }\r\n modifyPostion(pickerWidth);\r\n }).on('changeMonth', function () {\r\n modifyPostion(pickerWidth);\r\n });\r\n })\r\n\r\n }\r\n\r\n /* - auto insert slash feature, now discard it\r\n $(document).on('keypress', 'input.datepicker', function (e) {\r\n // Add (e.which > 31 || e.which > 126) condition for Firefox which capture white characters in this event\r\n if ((e.which < 48 ||e.which > 57) && (e.which > 31 || e.which > 126)) {\r\n e.preventDefault();\r\n }\r\n\r\n var value = $(this).val();\r\n // Add (e.which > 31 || e.which > 126) condition for Firefox which capture white characters in this event\r\n if (value.length === 10 && (e.which > 31 || e.which > 126)) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n $(document).on('keyup', 'input.datepicker', function (e) {\r\n console.log(\"key:\" + e.which);\r\n var value = $(this).val();\r\n if (e.which !== 8 && (value.length === 2 || value.length === 5)) {\r\n $(this).val(value + '/');\r\n }\r\n });\r\n */\r\n\r\n $(document).on('change', 'input.datepicker', function () {\r\n var m = moment($(this).val(), window.MvpFE.globalConfiguration.momentExpectFormatGroups || ['DD MMM yyyy', 'DD/MM/YYYY', 'DD MM YYYY'], true);\r\n if (m.isValid()) {\r\n $(this).val(m.format(window.MvpFE.globalConfiguration.momentFormat || 'DD MMM yyyy').toUpperCase());\r\n }\r\n });\r\n\r\n bindDatepicker();\r\n window.MvpFE.rebindFunctions.bindDatepicker = bindDatepicker;\r\n});","/******************************************************************\r\n * map icons\r\n *****************************************************************/\r\n\r\n//convert data attribute to class name\r\n$(function () {\r\n function mapIcons() {\r\n if (!window.iconMapObj) {\r\n return;\r\n }\r\n\r\n var elements = $('[data-iconmap]');\r\n for (var i = 0; i < elements.length; i++) {\r\n $(elements[i]).addClass(window.iconMapObj[$(elements[i]).data('iconmap')]);\r\n }\r\n }\r\n\r\n mapIcons();\r\n window.MvpFE.mapIcons = mapIcons;\r\n window.MvpFE.rebindFunctions.mapIcons = mapIcons;\r\n});","/******************************************************************\r\n * Write page logic js here\r\n *****************************************************************/\r\nvar TmplData = require('./mustache-tmpl.js');\r\nvar Common = require('./common.js');\r\n\r\n/*\r\n * Search panel logic on Accounts Overview page,\r\n */\r\n$(function () {\r\n $('.transactions-advanced-search-btn').on('click', function () {\r\n if ($(this).attr('aria-expanded') === 'true') {\r\n $('#search_collapse_panel').collapse('hide');\r\n $(this).removeAttr('aria-expanded');\r\n } else {\r\n $('#search_collapse_panel').collapse('show');\r\n $(this).attr('aria-expanded', 'true');\r\n $('.transactions-qucik-search-btn').removeAttr('aria-expanded');\r\n }\r\n\r\n $('.transaction-search-panel-desc-advanced').removeClass('hidden');\r\n $('.transaction-search-panel-desc-quick').addClass('hidden');\r\n $('.transaction-search-panel-advanced').removeClass('hidden');\r\n });\r\n\r\n $('.transactions-qucik-search-btn').on('click', function () {\r\n if ($(this).attr('aria-expanded') === 'true') {\r\n $('#search_collapse_panel').collapse('hide');\r\n $(this).removeAttr('aria-expanded');\r\n } else {\r\n $('#search_collapse_panel').collapse('show');\r\n $(this).attr('aria-expanded', 'true');\r\n $('.transactions-advanced-search-btn').removeAttr('aria-expanded');\r\n }\r\n $('.transaction-search-panel-desc-quick').removeClass('hidden');\r\n $('.transaction-search-panel-desc-advanced').addClass('hidden');\r\n $('.transaction-search-panel-advanced').addClass('hidden');\r\n });\r\n});\r\n\r\n/*\r\n * Accounts logic\r\n */\r\n$(function () {\r\n // close all sub collpase component when close a account panel\r\n $(document).on('hidden.bs.collapse', '.account-list-details', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n $(this).find('.collapse.in').collapse('hide');\r\n });\r\n\r\n // Capture show event\r\n $(document).on('shown.bs.collapse', '.transaction-table .hidden-row .collapse', function () {\r\n var elem = $(this).find('.transaction-details-table');\r\n if (elem.length > 0) {\r\n var tableWidth = elem.width();\r\n var panelWidth = $(this).parents('.transaction-table').parent().width();\r\n if (tableWidth > panelWidth) {\r\n $(this).find('.transaction-details').css({\r\n 'width': panelWidth,\r\n 'overflow-x': 'auto'\r\n });\r\n } else {\r\n $(this).find('.transaction-details').attr('style');\r\n }\r\n }\r\n });\r\n});\r\n\r\n/*\r\n * Transactions\r\n */\r\n$(function () {\r\n //add class to quicklinks button group when more option list expanded\r\n $(document).on('show.bs.collapse', '.accounts-overview .stand-alone > .collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('.stand-alone .btn-group.btn-group-justified').addClass('more-option-expanded');\r\n });\r\n\r\n $(document).on('hidden.bs.collapse', '.accounts-overview .stand-alone > .collapse', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n\r\n $('.stand-alone .btn-group.btn-group-justified').removeClass('more-option-expanded');\r\n });\r\n});\r\n\r\n/*\r\n * Transfer Money page\r\n */\r\n\r\nfunction activeDropDown() {\r\n setTimeout(function () { $('.panel-heading').addClass('active') }, 200)\r\n}\r\n\r\n$(document).on('click', '.payees-external-accounts .list-group-item', function () {\r\n activeDropDown()\r\n})\r\n\r\n$(function () {\r\n //get To accounts details information when click list item on Account list with serach input panel\r\n $(document).on('click.allAccountList', '.payees-with-search-panel a[data-key]', function () {\r\n var key = $(this).data('key');\r\n if (key && typeof (getToDetails) !== 'undefined') {\r\n /* global getToDetails */\r\n getToDetails(key);\r\n activeDropDown()\r\n }\r\n });\r\n\r\n //show relative tab when click My Account list item\r\n $(document).on('click.myAccountList', '.payees-with-search-panel .payees-myaccount a.list-group-item', function () {\r\n //update validator\r\n $(this).parent().on('shown.bs.tab', function () {\r\n $('form').validator('update');\r\n });\r\n\r\n $('#myaccount_transfer_container').removeClass('hidden');\r\n $('#osko_transfer_container').addClass('hidden');\r\n $(\".transfer-newpayee-container\").addClass('hidden');\r\n\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n\r\n activeDropDown();\r\n });\r\n\r\n //External Accounts list handler\r\n $(document).on('click.externalAccountList', '.payees-with-search-panel .payees-external-accounts .list-group-item', function () {\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n $('#osko_transfer_container').removeClass('hidden');\r\n $(\".transfer-newpayee-container\").addClass('hidden');\r\n $('#myaccount_transfer_container').addClass('hidden');\r\n\r\n });\r\n\r\n //New Payee button Handler\r\n $(document).on('click.newPayeeBtn', '.payees-with-search-panel .new-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add New Payee');\r\n $(\".transfer-newpayee-container\").removeClass('hidden');\r\n $('#myaccount_transfer_container').addClass('hidden');\r\n $('#osko_transfer_container').addClass('hidden');\r\n });\r\n\r\n //process new payee's fields change event, it will show transfer form fileds\r\n $('.newpayee-transfer-details-trigger').change(function () {\r\n //show hidden tranfer form fields\r\n $('.new-payee-transfer-details').removeClass('hidden');\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n });\r\n\r\n //New payee Financial Account radio checked event\r\n $(document).on('click.transfer-to-curr-bank-radio-yes', '.transfer-to-curr-bank-radio-yes', function () {\r\n $('.new-payee-transfer-details').removeClass('hidden');\r\n $('.transfer-buttons-container').removeClass('hidden');\r\n var elem = $('.transfer-to-curr-bank-radio-yes input')[0];\r\n if (elem.onclick) {\r\n elem.onclick.apply(elem);\r\n }\r\n });\r\n $(document).on('click.transfer-to-curr-bank-radio-no', '.transfer-to-curr-bank-radio-no', function () {\r\n var bsbField = $('#payee_financial_radio_no_tab .newpayee-transfer-details-trigger').val();\r\n if (!bsbField) {\r\n $('.new-payee-transfer-details').addClass('hidden');\r\n }\r\n var elem = $('.transfer-to-curr-bank-radio-no input')[0];\r\n if (elem.onclick) {\r\n elem.onclick.apply(elem);\r\n }\r\n });\r\n\r\n $(document).on('hidden.bs.collapse', '.payees-with-search-panel', function (e) {\r\n if (!$(this).is(e.target)) return;\r\n $('.payees-with-search-panel .list-group-item').removeClass('active');\r\n });\r\n\r\n $(document).on('click.newpayee_list_tab_mobile', '#newpayee_list_tab_mobile .list-group-item', function () {\r\n var target = $(this).attr('href');\r\n $('.btn-group-justified label[data-target=\"' + target + '\"]').trigger('click');\r\n });\r\n\r\n function selectTransMethodMobile(text) {\r\n var panelTitleEle = $('#newpayee_list_tab_mobile').parent('.panel-selectlist').find('> .panel-heading > .panel-title');\r\n panelTitleEle.text(text);\r\n }\r\n\r\n function setTransMethodMobile() {\r\n var elements = $('.transfer-type-btn-group > label > input[type=\"radio\"]');\r\n elements.each(function () {\r\n if ($(this).prop('checked')) {\r\n var text = $(this).parent('label').text();\r\n selectTransMethodMobile(text);\r\n }\r\n });\r\n }\r\n\r\n setTransMethodMobile();\r\n\r\n $(document).on('click.newpayee-radio-click', '.transfer-type-btn-group > label', function () {\r\n var text = $(this).text();\r\n selectTransMethodMobile(text);\r\n });\r\n\r\n // Transfer Money without NPP\r\n $(document).on('click', '.transfer-money-without-npp .payees-with-search-panel .payees-external-accounts .list-group-item', function () {\r\n $(\".transfer-details-container\").removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.transfer-money-without-npp .payees-with-search-panel .new-payee-btn', function () {\r\n $(\".transfer-details-container\").removeClass('hidden');\r\n $(\".transfer-buttons-container\").removeClass('hidden');\r\n\r\n });\r\n});\r\n\r\n\r\n\r\n/*\r\n * Manage PayID\r\n */\r\n$(function () {\r\n $('#manage_payid_details_select_listgroup a[data-toggle=\"tab\"]').on('show.bs.tab', function () {\r\n $('.manage-payid-details-global-cancel-btn').addClass('hidden');\r\n });\r\n});\r\n\r\n/* Update Contact Details */\r\n$(function () {\r\n if ($('.update-contact-inserted-rows-container .contact-info-insert-row:not(.hidden)').length === 0) {\r\n $('.update-contact-details-desc-placeholder').hide();\r\n $('.update-contact-details-desc-placeholder').parents('.tab-pane').addClass('desc-placeholder-hidden');\r\n }\r\n\r\n $('.update-contact-add-contact-btn').click(function () {\r\n $('.update-contact-inserted-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $(document).on('click', '.update-contacts-remove-inserted-row-btn', function () {\r\n $('.update-contact-add-contact-btn').prop('disabled', false);\r\n\r\n $(this).parents('.contact-info-insert-row').remove();\r\n });\r\n\r\n $('.update-contact-add-email-btn').click(function () {\r\n $('.update-contact-inserted-email-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-email-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $('.update-contact-add-profile-btn').click(function () {\r\n $('.update-contact-inserted-profile-rows-container .contact-info-insert-row.contact-info-insert-row-template').clone()\r\n .appendTo('.update-contact-inserted-profile-rows-container').removeClass('contact-info-insert-row-template');\r\n });\r\n\r\n $(document).on('click', '.swticher-group-parent .switcher-btns .btn:first-child', function () {\r\n var btns = $(this).parents('.swticher-group-parent').find('.switcher-btns .btn:last-child');\r\n btns.button('toggle');\r\n });\r\n\r\n\r\n $(document).on('change', '.contact-info-select', function () {\r\n $(this).attr('readonly', 'readonly');\r\n });\r\n\r\n function hiddenPayidBtn() {\r\n var payidContainers = $('.update-contact-details-payid-btn-container button');\r\n if (payidContainers && payidContainers.length === 0) {\r\n $('.update-contact-details-payid-btn-container').addClass('hidden');\r\n } else {\r\n if ($(window).width() < 768 && $('.contact-info-insert-row .update-contact-details-payid-btn-container button').length === 0) {\r\n $('.contact-info-insert-row .update-contact-details-payid-btn-container').addClass('hidden');\r\n } else {\r\n $('.contact-info-insert-row .update-contact-details-payid-btn-container').removeClass('hidden');\r\n }\r\n }\r\n }\r\n hiddenPayidBtn();\r\n $(window).resize(hiddenPayidBtn);\r\n});\r\n\r\n/* BPAY */\r\n$(function () {\r\n $(document).on('click.bpayBillerList', '.bpay-biller-list .list-group-item', function () {\r\n $('.bpay-transfer-details').removeClass('hidden');\r\n $('.bpay-add-new-biller').addClass('hidden');\r\n $('.bpay-new-billers-list').addClass('hidden');\r\n\r\n //Populate CRN field\r\n var crn = $(this).data('ref');\r\n\r\n $('.bpay-biller-crn').val(crn);\r\n });\r\n\r\n $(document).on('click.bpayNewBillerBtn', '.bpay-new-biller-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Pay New Biller');\r\n $('.bpay-add-new-biller').removeClass('hidden');\r\n $('.bpay-transfer-details').removeClass('hidden');\r\n $('.bpay-biller-crn').val('');\r\n });\r\n\r\n $(document).on('click.btnSearchBiller', '.btn-search-biller', function () {\r\n //Load search result data\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n $('.new-biller-search-input').val('');\r\n });\r\n\r\n $(document).on('focus.newBillerSearchInput', '.new-biller-search-input', function () {\r\n if (!window.dataNewBillers) {\r\n return;\r\n }\r\n\r\n window.MvpFE.loadBpayBillersSearchResult();\r\n $('.bpay-new-billers-list').removeClass('hidden');\r\n activeDropDown();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('click.bpayNewBillers', '.bpay-new-billers-list .list-group-item', function () {\r\n $('.new-biller-search-input').val('');\r\n $('.bpay-new-billers-list').addClass('hidden');\r\n $('.search-input-with-btn-container').removeClass('search-list-open');\r\n $('.bpay-new-biller-info-container').removeClass('hidden');\r\n activeDropDown();\r\n //reload data\r\n TmplData.setTemplateData('template_new_billers', TmplData.dataNewBillersFormated, '.bpay-new-billers-list');\r\n\r\n //Populate new biller fields\r\n var code = $(this).data('code');\r\n var name = $(this).data('name');\r\n\r\n $('.bpay-new-biller-code').val(code);\r\n $('.bpay-new-biller-name').text(name);\r\n });\r\n\r\n // Bpay view biller\r\n $(document).on('click', '.bpay-new-billers-list .list-group-item', function () {\r\n $('.bpay-view-billers-register-required-content').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* SMS Banking Options */\r\n$(function () {\r\n $(document).on('click', '.sms-banking-options-add-mobile', function () {\r\n $(this).addClass('hidden');\r\n $('.sms-banking-options-hidden-mobile').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* Term Deposit Maintenance */\r\n$(function () {\r\n var okBtnStatus = {\r\n cheque: false,\r\n credit: false,\r\n reinvest: false,\r\n transfer: false\r\n };\r\n\r\n function clearHiddenFields() {\r\n $('[data-clear]').val('');\r\n }\r\n\r\n function updateOkBtnStatus(show) {\r\n if (show) {\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n } else {\r\n $('.term-deposit-maintenance-btn-ok').addClass('hidden');\r\n }\r\n }\r\n $(document).on('shown.bs.tab', '#term_deposit_maintenance_payments_list a[data-toggle=\"tab\"]', function (e) {\r\n if ($(e.target).attr('href') == '#term_deposit_cheque_tab') {\r\n updateOkBtnStatus(okBtnStatus.cheque);\r\n } else if ($(e.target).attr('href') == '#term_deposit_credit_external_tab') {\r\n updateOkBtnStatus(okBtnStatus.credit);\r\n } else if ($(e.target).attr('href') == '#term_deposit_reinvest_tab') {\r\n updateOkBtnStatus(okBtnStatus.reinvest);\r\n } else if ($(e.target).attr('href') == '#term_deposit_transfer_tab') {\r\n updateOkBtnStatus(okBtnStatus.transfer);\r\n }\r\n });\r\n\r\n $(document).on('shown.bs.tab', '#term_deposit_maintenance_payments_list a[href=\"#term_deposit_reinvest_tab\"]', function () {\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.reinvest = true;\r\n });\r\n\r\n function showCommonFieldInChequeTab() {\r\n $('.term-deposit-maintenance-cheque-payee-details').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n $('.term-deposit-maintenance-cheque-institution-payee-fields').addClass('hidden');\r\n okBtnStatus.cheque = true;\r\n }\r\n\r\n $(document).on('click', '.term-deposit-cheque-new-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.term-deposit-maintenance-heading-new-payee').removeClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').addClass('hidden');\r\n\r\n // clear filelds\r\n $('.term-deposit-maintenance-cheque-payee-nickname-input').val($(this).data(''));\r\n $('.term-deposit-maintenance-cheque-payee-ref-input').val($(this).data(''));\r\n\r\n showCommonFieldInChequeTab();\r\n });\r\n\r\n $(document).on('click', '.term-deposit-cheque-to-payee-list .list-group-item', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-heading-new-payee').addClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').removeClass('hidden');\r\n showCommonFieldInChequeTab();\r\n\r\n // fill filelds\r\n $('.term-deposit-maintenance-cheque-payee-nickname-input').val($(this).data('nickname'));\r\n $('.term-deposit-maintenance-cheque-payee-ref-input').val($(this).data('ref'));\r\n });\r\n\r\n $(document).on('click', '.term-deposit-cheque-institution-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add Institution Payee');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n $('.term-deposit-maintenance-cheque-institution-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-heading-new-payee').addClass('hidden');\r\n $('.term-deposit-maintenance-heading-payee-details').addClass('hidden');\r\n $('.term-deposit-maintenance-cheque-payee-details').addClass('hidden');\r\n okBtnStatus.cheque = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-credit-new-payee-btn', function () {\r\n clearHiddenFields();\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.term-deposit-maintenance-credit-new-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-credit-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.credit = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-maintenance .common-external-payee-list .list-group-item', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-credit-new-payee-fields').addClass('hidden');\r\n $('.term-deposit-maintenance-credit-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.credit = true;\r\n })\r\n\r\n $(document).on('click', '.term-deposit-maintenance .new-payee-btn', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-transfer-new-payee-fields').removeClass('hidden');\r\n $('.term-deposit-maintenance-transfer-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.transfer = true;\r\n });\r\n\r\n $(document).on('click', '.term-deposit-maintenance .payees-myaccount, .term-deposit-maintenance .payees-external-accounts', function () {\r\n clearHiddenFields();\r\n $('.term-deposit-maintenance-transfer-new-payee-fields').addClass('hidden');\r\n $('.term-deposit-maintenance-transfer-reference-field').removeClass('hidden');\r\n $('.term-deposit-maintenance-btn-ok').removeClass('hidden');\r\n okBtnStatus.transfer = true;\r\n });\r\n\r\n $(document).on('change', '.term-deposit-term-options', function () {\r\n let termValue = $(this).val();\r\n if (termValue) {\r\n termValue = termValue.charAt(0).toUpperCase() + termValue.slice(1);\r\n $(this).parents('.row').find('.term-deposit-term-value').text(termValue);\r\n }\r\n });\r\n\r\n $(document).on('change', '.term-deposit-term-options-btn-group input', function () {\r\n let termValue = $(this).val();\r\n if (termValue) {\r\n termValue = termValue.charAt(0).toUpperCase() + termValue.slice(1);\r\n $(this).parents('.row').find('.term-deposit-term-value').text(termValue);\r\n }\r\n });\r\n});\r\n\r\n/* Statements */\r\n$(function () {\r\n // Hidden or show every account list item feature according to All Accounts switcher, this feature may be used on other pages\r\n $('.account-list-all-accounts-switcher .label-yes, .account-list-all-accounts-switcher .label-no').click(function () {\r\n var listGroup = $(this).parents('.list-group');\r\n\r\n if (listGroup.length > 0) {\r\n var childrenItems = listGroup.children('.list-group-item:not(.account-list-all-account-item)');\r\n if ($(this).hasClass('label-yes')) {\r\n childrenItems.addClass('hidden');\r\n } else if ($(this).hasClass('label-no')) {\r\n childrenItems.removeClass('hidden');\r\n }\r\n }\r\n });\r\n\r\n $(document).on('change', '.statements-select-checkbox', function () {\r\n let $allCheckBoxes = $('.statements-select-checkbox');\r\n if ($allCheckBoxes.length > 0) {\r\n let hasSelected = false;\r\n let selectedItems = 0;\r\n $allCheckBoxes.each(function () {\r\n if (this.checked) {\r\n hasSelected = true;\r\n selectedItems++;\r\n }\r\n });\r\n\r\n if (hasSelected) {\r\n $('.statements-email-selected-btn').removeClass('hidden');\r\n } else {\r\n $('.statements-email-selected-btn').addClass('hidden');\r\n }\r\n $('.statements-online-selected-amount').text(selectedItems);\r\n }\r\n });\r\n});\r\n\r\n/* New Savings Account */\r\n$(function () {\r\n window.MvpFE.newCusSwapSteps = function (activeStep) {\r\n //acitveStep only can be 1 or 2 now\r\n if (activeStep == 1) {\r\n $('.new-savings-account-new-customer-step1').removeClass('hidden');\r\n $('.new-savings-account-new-customer-step2').addClass('hidden');\r\n } else if (activeStep == 2) {\r\n $('.new-savings-account-new-customer-step2').removeClass('hidden');\r\n $('.new-savings-account-new-customer-step1').addClass('hidden');\r\n }\r\n }\r\n});\r\n\r\n/* Statement Options */\r\n$(function () {\r\n // account base\r\n // Hide Online Notification Type radios according to Statements Preerence radios' checked status\r\n $(document).on('click', '.statement-options-account-base-preference .text-mail, .statement-options-account-base-preference .text-none', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-account-base-online-type').addClass('hidden');\r\n });\r\n\r\n // Show Online Notification Type radios according to Statements Preerence radios' checked status\r\n $(document).on('click', '.statement-options-account-base-preference .text-online, .statement-options-account-base-preference .text-both', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-account-base-online-type').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-receive-method .text-mail', function () {\r\n $('.statement-options-client-base-online-method').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-account-base-preference .text-mail, .statement-options-account-base-preference .text-online, .statement-options-account-base-preference .text-both', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-statement-frequency').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-account-base-preference .text-none', function () {\r\n $(this).parents('.list-group-item').find('.statement-options-statement-frequency').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-statement-frequency .text-days, .statement-options-statement-frequency .text-months', function () {\r\n $(this).parents('.statement-options-statement-frequency').find('.frequency-input-box').removeClass('hidden');\r\n $(this).parents('.statement-options-statement-frequency').find('.starting-on-box').removeClass('hidden');\r\n })\r\n\r\n $(document).on('click', '.statement-options-statement-frequency .text-last-day', function () {\r\n $(this).parents('.statement-options-statement-frequency').find('.frequency-input-box').addClass('hidden');\r\n $(this).parents('.statement-options-statement-frequency').find('.starting-on-box').addClass('hidden');\r\n })\r\n\r\n //client base\r\n $(document).on('click', '.statement-options-client-base-receive-method .text-online, .statement-options-client-base-receive-method .text-both', function () {\r\n $('.statement-options-client-base-online-method').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-receive-method .btn-group > .btn', function () {\r\n $('.statement-options-statement-frequency').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-online-method .statement-options-email-box .label-yes', function () {\r\n $('.statement-options-email').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.statement-options-client-base-online-method .statement-options-email-box .label-no', function () {\r\n $('.statement-options-email').addClass('hidden');\r\n });\r\n});\r\n\r\n/* Institution Payee Search - this can be used to more than one page */\r\n$(function () {\r\n $(document).on('click', '.btn-search-institution-payee', function () {\r\n //Load search result data\r\n window.MvpFE.loadInstitutionPayee();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('focus', '.institution-search-input', function () {\r\n if (!window.dataInstitutionPayee) {\r\n return;\r\n }\r\n\r\n window.MvpFE.loadInstitutionPayee();\r\n $('.institution-payee-list').removeClass('hidden');\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $(document).on('click', '.institution-payee-list .list-group-item', function () {\r\n $('.institution-search-input').val('');\r\n $('.institution-payee-list').addClass('hidden');\r\n $('.institution-payee-name-filed').removeClass('hidden');\r\n $('.search-input-with-btn-container').removeClass('search-list-open');\r\n $('.institution-payee-name-filed input').val($(this).data('name'));\r\n $('.institution-payee-key-filed').val($(this).data('key'));\r\n });\r\n});\r\n\r\n// Campaign\r\n$(function () {\r\n var elem = $('.campaign-content');\r\n\r\n if (elem && elem.length > 0) {\r\n $('body').addClass('campaign');\r\n }\r\n});\r\n\r\n/**\r\n * Login page\r\n */\r\n$(function () {\r\n // move login-logout class to body\r\n var elem = $('.login-logout');\r\n if (elem && elem.length > 0) {\r\n $('body').addClass('login-logout');\r\n elem.removeClass('login-logout');\r\n }\r\n\r\n function adjustOverlaySize() {\r\n if ($('body').height() > window.innerHeight) {\r\n var overlayWidth = ($(window).width() - $('.login-logout-main .main-content .row').width()) / 2;\r\n $('.login-logout-main-overlay-box-left, .login-logout-main-overlay-box-right').width(overlayWidth);\r\n } else {\r\n $('.login-logout-main-overlay-box-left, .login-logout-main-overlay-box-right').attr('style', '');\r\n }\r\n }\r\n\r\n if ($(window).width() >= 768 && $('.login-logout').length > 0) {\r\n adjustOverlaySize();\r\n //observing .login-rightobx's dom change\r\n var observer = new MutationObserver(function () {\r\n adjustOverlaySize();\r\n });\r\n\r\n var target = $('.login-rightbox');\r\n if (target.length > 0) {\r\n observer.observe(target[0], {\r\n attributes: true,\r\n subtree: true\r\n });\r\n }\r\n }\r\n});\r\n\r\n/**\r\n * Alerts\r\n */\r\n$(function () {\r\n $(document).on('click', '.alerts-method-mobile-add-btn', function () {\r\n var hiddenBoxes = $('.alerts-method-mobile-additional.hidden');\r\n if (hiddenBoxes.length > 0) {\r\n $(hiddenBoxes[0]).removeClass('hidden');\r\n if ($('.alerts-method-mobile-additional.hidden').length === 0) {\r\n $(this).parents('.alerts-method-mobile-add-btn-box').addClass('hidden');\r\n }\r\n }\r\n });\r\n\r\n $(document).on('click', '.alerts-method-mobile-remove-btn', function () {\r\n $(this).parents('.alerts-method-mobile-additional').addClass('hidden');\r\n $('.alerts-method-mobile-add-btn-box').removeClass('hidden');\r\n });\r\n\r\n $(document).on('change', '.alerts-method-mobile-select-default', function () {\r\n $('.alerts-method-mobile-add-btn-box').removeClass('hidden');\r\n });\r\n});\r\n\r\n/**\r\n * SMS\r\n */\r\n$(function () {\r\n $(document).on('click', '.btn-get-sms', function () {\r\n $('.sms-sent-message').removeClass('hidden');\r\n });\r\n});\r\n\r\n/**\r\n * Secure Messages\r\n */\r\n$(function () {\r\n function hasChecked(container) {\r\n var elements = container.find('.checkbox-cus input[type=\"checkbox\"]');\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].checked) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $(document).on('click', '.secure-messages-select-all-btn', function () {\r\n $(this).parents('.tab-pane').find('table thead .checkbox-cus input[type=\"checkbox\"]').trigger('click');\r\n });\r\n\r\n $(document).on('change', '.secure-messages table .checkbox-cus input[type=\"checkbox\"]', function () {\r\n if (this.checked || hasChecked($(this).parents('tbody'))) {\r\n $(this).parents('.tab-pane').find('.secure-messages-delete-selected-btn').removeClass('hidden');\r\n } else {\r\n $(this).parents('.tab-pane').find('.secure-messages-delete-selected-btn').addClass('hidden');\r\n }\r\n });\r\n\r\n $(document).on('click', '.secure-messages-edit-btn', function () {\r\n $(this).addClass('hidden');\r\n $(this).parents('.tab-pane').find('.secure-messages-select-all-btn').removeClass('hidden-xs');\r\n $(this).parents('.tab-pane').find('tbody .checkbox-cus input[type=\"checkbox\"]').parents('td').removeClass('hidden-xs');\r\n })\r\n\r\n $(document).on('change', '.secure-messages-attach-doc-row input', function () {\r\n var parentDiv = $(this).parent('div');\r\n if (parentDiv.length === 0) return;\r\n\r\n parentDiv.nextAll('div.hidden').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* International Transfer/Payment */\r\n$(function () {\r\n /* To Show Section Transfer Recipient on select of Dropdown from 'To' Menu */\r\n $(document).on('click', '.international-transfer-recipient .list-group-item', function () {\r\n $('.international-transfer-recipient-details').removeClass('hidden');\r\n $('.international-transfer-global-button').removeClass('hidden');\r\n $('.international-transfer-details').removeClass('hidden');\r\n if ($('.international-transfer-new-recipient, .international-transfer-pay-new-recipient-tab').is(':visible')) {\r\n $('.international-transfer-pay-new-recipient-tab').addClass('hidden');\r\n $('.international-transfer-new-recipient').addClass('hidden');\r\n }\r\n });\r\n\r\n $(document).on('click', '.international-transfer-new-recipient-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Pay New Recipient');\r\n $('.international-transfer-new-recipient').removeClass('hidden');\r\n if ($('.international-transfer-global-button, .international-transfer-details, .international-transfer-recipient-details').is(':visible')) {\r\n $('.international-transfer-global-button').addClass('hidden');\r\n $('.international-transfer-details').addClass('hidden');\r\n $('.international-transfer-recipient-details').addClass('hidden');\r\n }\r\n });\r\n\r\n /* Select Payee Details Country */\r\n $(document).on('change', '.international-transfer-pay-country-select', function () {\r\n $('.international-transfer-pay-new-recipient-tab').removeClass('hidden');\r\n });\r\n\r\n /* To Show Transfer Details on Click of List Group of Bank Search */\r\n $(document).on('click', '.international-transfer-search-bank-list .list-group-item, .international-transfer-new-recipient-link', function () {\r\n $('.international-transfer-global-button').removeClass('hidden');\r\n $('.international-transfer-new-recipient-input').removeClass('hidden');\r\n $('.international-transfer-details').removeClass('hidden');\r\n $('.international-transfer-search-bank-list').addClass('hidden');\r\n });\r\n\r\n // To load Additional Details Dropdown Other options\r\n $(document).on('change', '.international-transfer-details-input', function () {\r\n var opt_selected = $(this).val();\r\n if (opt_selected.toLowerCase() === 'other') {\r\n $('.international-transfer-details-other-section').removeClass('hidden');\r\n $('.international-transfer-details-other-input').val('');\r\n } else {\r\n $('.international-transfer-details-other-section').addClass('hidden');\r\n }\r\n });\r\n\r\n // To Search IBAN International Bank List \r\n var international_transfer_search_input_class = '.international-transfer-search-bank-iban-input, .international-transfer-search-bank-swift-input, .international-transfer-search-bank-name-input, .international-transfer-search-bank-city-input';\r\n $(document).on('focus', international_transfer_search_input_class, function () {\r\n if (!window.dataInternationalSearchBank) {\r\n return;\r\n }\r\n window.MvpFE.loadInternationalSearchBank();\r\n $('.international-transfer-search-bank-list').removeClass('hidden');\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n\r\n $('[data-target=\"#bank_name_tab\"]').on('shown.bs.tab', function (e) {\r\n var targetSelector = $(e.target).data('target');\r\n if (!targetSelector) {\r\n targetSelector = $(e.target).attr('href');\r\n }\r\n\r\n if ($(targetSelector).find('.form-group.has-error').length > 0) {\r\n $('form').validator('validate');\r\n //It seems bootstrap-validator has a bug to do validate again, so add this timeout to invoke again to ignore. \r\n setTimeout(function () {\r\n $('form').validator('validate');\r\n });\r\n }\r\n })\r\n\r\n $(document).on('click', '.btn-search-international-bank', function () {\r\n if ($(this).parents('#bank_name_tab').length > 0) {\r\n $('form').validator('validate');\r\n }\r\n\r\n //Load search result data\r\n window.MvpFE.loadInternationalSearchBank();\r\n $('.search-input-with-btn-container').addClass('search-list-open');\r\n });\r\n});\r\n\r\n/*\r\n * Setup Security Options\r\n */\r\n$(function () {\r\n $('#security_options_details_select_listgroup a[data-toggle=\"tab\"]').on('show.bs.tab', function () {\r\n $('.security-option-details-global-request-btn').removeClass('hidden');\r\n $('.security-option-details-global-from-account-section').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * Transfer External Account\r\n */\r\n$(function () {\r\n $(document).on('click', '.transfer-external-account-to .list-group-item', function () {\r\n $('.transfer-external-account-details').removeClass('hidden');\r\n });\r\n});\r\n\r\n/*\r\n * International Transfer Address Book\r\n */\r\n$(function () {\r\n $(document).on('change', '.international-transfer-address-book-manage', function () {\r\n $('.international-transfer-address-book-tab').removeClass('hidden');\r\n });\r\n $(document).on('click', '.international-transfer-search-bank-list .list-group-item, .international-transfer-new-recipient-link', function () {\r\n $('.address-book-new-global-btn').removeClass('hidden');\r\n });\r\n});\r\n\r\n/* \r\n * Cheque and Deposits\r\n */\r\n$(function () {\r\n function hideOtherPane(inputClass) {\r\n $(inputClass).addClass('hidden');\r\n }\r\n $(document).on('click', '.cheque-deposit-cheque-new-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add new Payee');\r\n $('.cheque-deposit-order-cheque-new-payee-details').removeClass('hidden');\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-institution-payee-details');\r\n });\r\n\r\n $(document).on('click', '.cheque-and-deposits .term-deposit-cheque-to-payee-list .list-group-item', function () {\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-order-cheque-new-payee-details');\r\n hideOtherPane('.cheque-deposit-institution-payee-details');\r\n });\r\n\r\n $(document).on('click', '.cheque-and-deposits #account_panel_select_options .list-group-item', function () {\r\n $('.cheque-deposit-order-cheque-book-pane').removeClass('hidden');\r\n $('.cheque-deposit-order-deposit-book-pane').removeClass('hidden');\r\n $('.cheque-deposit-stop-cheque-pane').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.cheque-deposit-institution-payee-btn', function () {\r\n Common.searchPanelBtnClick(this, 'Add Institution Payee');\r\n $('.cheque-deposit-institution-payee-details').removeClass('hidden');\r\n $('.cheque-deposit-order-cheque-transfer-details').removeClass('hidden');\r\n $('.common-cheque-to-payee-global-button').removeClass('hidden');\r\n hideOtherPane('.cheque-deposit-order-cheque-new-payee-details');\r\n });\r\n});\r\n\r\n// Please add new code at following with ES6 \r\nclass PageLogic {\r\n static pickNowRemovingData(btn) {\r\n if (!btn) {\r\n return null;\r\n }\r\n\r\n const tds = $(btn).parents('tr').children('td');\r\n let data = {\r\n removingData: []\r\n };\r\n tds.each((index, element) => {\r\n if ($(element).data('title') !== undefined) {\r\n data.removingData.push({\r\n title: $(element).data('title'),\r\n text: $(element).text()\r\n })\r\n }\r\n });\r\n\r\n return data;\r\n }\r\n\r\n static insertNowRemovingData(data) {\r\n TmplData.setTemplateData('template_notice_of_withdrawal_remove_confirm_content', data, '.notices-of-withdrawal-confirm-content');\r\n }\r\n\r\n static cancelAddingNewNow(btn) {\r\n $(btn).parents('tr').remove();\r\n }\r\n\r\n static businessViewpointShowBox(elem) {\r\n var approveChangeEle = document.getElementsByClassName('business-viewpoint-approve-change-container')[0];\r\n var btnUpdateAccessLevel = document.getElementsByClassName('business-viewpoint-update-access-level-btn')[0];\r\n var btnUpdatePassword = document.getElementsByClassName('business-viewpoint-update-password-btn')[0];\r\n var btnDeleteLogin = document.getElementsByClassName('business-viewpoint-delete-login-btn')[0];\r\n if ($(elem).attr('href') === '#tab_access_level') {\r\n approveChangeEle.classList.remove('hidden');\r\n btnUpdateAccessLevel.classList.remove('hidden');\r\n btnUpdatePassword.classList.add('hidden');\r\n btnDeleteLogin.classList.add('hidden');\r\n } else if ($(elem).attr('href') === '#tab_update_password') {\r\n approveChangeEle.classList.add('hidden');\r\n btnUpdateAccessLevel.classList.add('hidden');\r\n btnUpdatePassword.classList.remove('hidden');\r\n btnDeleteLogin.classList.add('hidden');\r\n } else if ($(elem).attr('href') === '#tab_delete_login') {\r\n approveChangeEle.classList.remove('hidden');\r\n btnUpdateAccessLevel.classList.add('hidden');\r\n btnUpdatePassword.classList.add('hidden');\r\n btnDeleteLogin.classList.remove('hidden');\r\n } else {\r\n console.error('Error: businessViewpointShowBox');\r\n }\r\n }\r\n}\r\n\r\nclass OnlineLending {\r\n static applicantDetailsNavHandler(elem) {\r\n const siblings = $(elem).siblings();\r\n siblings.each((index, elemment) => {\r\n $($(elemment).data('target')).collapse('hide');\r\n });\r\n $($(elem).data('target')).collapse('show');\r\n\r\n const parentElement = $(elem).parents(\".online-lending-applicant-pane\");\r\n parentElement.find('.online-lending-applicant-min-max-buttons label').removeClass('active');\r\n parentElement.find('.online-lending-applicant-min-max-buttons input').prop('checked', false);\r\n setTimeout(function () {\r\n $('html').animate({\r\n scrollTop: $($(\".online-lending-applicant-details-heading [data-target='\" + $(elem).data('target') + \"']\")[0]).parent().offset().top\r\n }, 200);\r\n }, 400);\r\n }\r\n\r\n static onlineLendingMaximiseApplicantDetails(elem) {\r\n const parentElement = $(elem).closest('.online-lending-applicant-pane');\r\n const label = $(elem).attr('data-label');\r\n\r\n if (label === 'max-all') {\r\n parentElement.find(\".online-lending-applicant-details-pane\").collapse('show');\r\n } else {\r\n parentElement.find(\".online-lending-applicant-details-pane\").collapse('hide');\r\n }\r\n\r\n parentElement.find('.online-lending-applicant-details-nav label').removeClass('active');\r\n parentElement.find('.online-lending-applicant-details-nav input').prop('checked', false);\r\n }\r\n}\r\n\r\n\r\n// document ready\r\n$(() => {\r\n // Notices of withdrawal - Remove\r\n $('#notice_of_withdrawal_remove_confirm').on('show.bs.modal', event => {\r\n const button = event.relatedTarget;\r\n const data = PageLogic.pickNowRemovingData(button);\r\n PageLogic.insertNowRemovingData(data);\r\n });\r\n\r\n $(document).on('click', '.notices-of-withdrawal-cancel-btn', e => {\r\n PageLogic.cancelAddingNewNow(e.currentTarget);\r\n });\r\n\r\n /* Bussiness Viewpoint */\r\n $('#business_viewpoint_modifications > a[data-toggle=\"tab\"]').on('shown.bs.tab', e => {\r\n PageLogic.businessViewpointShowBox(e.target);\r\n });\r\n\r\n /* Online Lending Start*/\r\n $(document).on('click', '.online-lending-applicant-details-nav > label', function () {\r\n OnlineLending.applicantDetailsNavHandler(this);\r\n });\r\n\r\n $(document).on('click', '.online-lending-applicant-details-heading > [data-toggle=\"collapse\"]', function () {\r\n $(this).parents('.online-lending-applicant-pane').find(`.online-lending-applicant-details-nav > [data-target=\"${$(this).data('target')}\"]`).trigger('click');\r\n if ($(this).attr('aria-expanded') === 'false') {\r\n $(this).parents('.online-lending-applicant-pane').find(`.online-lending-applicant-details-nav label`).removeClass('active');\r\n }\r\n });\r\n\r\n $(document).on('click', '.online-lending-applicant-min-max-buttons label', function () {\r\n OnlineLending.onlineLendingMaximiseApplicantDetails(this);\r\n });\r\n\r\n // handler credit card list active status\r\n $(document).on('click', '.online-lending-card-list .list-group-item', function () {\r\n if ($(this).hasClass('active')) return;\r\n\r\n $(this).siblings('.list-group-item').removeClass('active');\r\n $(this).addClass('active');\r\n });\r\n /* Online Lending End*/\r\n\r\n /* Online ID Start */\r\n $(document).on('click', '.online-identification-content .online-identification-content-max-min-actions .btn', function () {\r\n let action = $(this).data('label');\r\n let actionBtns = $('.online-identification-content [data-parent-cus]');\r\n if (action === 'max-all') {\r\n actionBtns.each(function () {\r\n let target = $(this).data('target');\r\n $(target).collapse('show');\r\n });\r\n } else if (action === 'mini-all') {\r\n actionBtns.each(function () {\r\n let target = $(this).data('target');\r\n $(target).collapse('hide');\r\n });\r\n } else {\r\n console.error('cannot recognize correct action: action is ' + action);\r\n }\r\n });\r\n\r\n $(document).on('click', '[data-parent-cus=\".online-identification-content\"]', function () {\r\n let radioBtns = $(this).parents('.online-identification-content').find('.online-identification-content-max-min-actions .btn');\r\n radioBtns.removeClass('active');\r\n radioBtns.children('input').prop('checked', false);\r\n });\r\n /* Online ID End */\r\n\r\n // Manage Cards Begin\r\n $('.manage-cards a[href=\"#send_to_address_yes\"]').on('shown.bs.tab', function () {\r\n $('.manage-cards .card-order').removeClass('hidden');\r\n });\r\n $('.manage-cards a[href=\"#send_to_address_yes\"]').on('hidden.bs.tab', function () {\r\n $('.manage-cards .card-order').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.manage-cards .order-new-card-btn', function () {\r\n $('.manage-cards .order-a-new-card-box').removeClass('hidden');\r\n $(this).addClass('hidden');\r\n $('.manage-cards .card-order').removeClass('hidden');\r\n });\r\n\r\n $('.manage-cards .enter-expire-date').on('change', function () {\r\n $('.manage-cards .active-card-btn').removeClass('hidden');\r\n });\r\n\r\n $('.manage-cards-action-list .list-group-item').click(function () {\r\n $('.manage-cards-global-buttons').addClass('hidden');\r\n });\r\n\r\n $('.card-lost-stolen-buttons .btn').click(function () {\r\n $('.card-lost-stolen-stop').removeClass('hidden');\r\n });\r\n // Manage Cards End\r\n\r\n //One Time Password Start\r\n $(document).on('click', '.get-otp-btn', function () {\r\n $('.otp-sent-notification-alert').removeClass('hidden');\r\n $('.otp-sent-sms-alert').addClass('hidden');\r\n $('.otp-sent-token-alert').addClass('hidden');\r\n $('.get-opt-password-box').removeClass('hidden');\r\n $('.opt-label').removeClass('hidden');\r\n $('.opt-label-sms').addClass('hidden');\r\n $('.opt-label-token').addClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.get-otp-sms-btn', function () {\r\n $('.otp-sent-notification-alert').addClass('hidden');\r\n $('.otp-sent-sms-alert').removeClass('hidden');\r\n $('.opt-label').addClass('hidden');\r\n $('.opt-label-sms').removeClass('hidden');\r\n });\r\n\r\n $(document).on('click', '.get-otp-token-btn', function () {\r\n $('.otp-sent-notification-alert').addClass('hidden');\r\n $('.otp-sent-token-alert').removeClass('hidden');\r\n $('.opt-label').addClass('hidden');\r\n $('.opt-label-token').removeClass('hidden');\r\n });\r\n //One Time Password End\r\n});\r\n\r\nmodule.exports = PageLogic;","/*************************************************\r\n * Menu logic\r\n *************************************************/\r\nvar State = require('./state.js');\r\n\r\n$(document).ready(function () {\r\n //active parent menu\r\n (function () {\r\n var element = $('main div[data-parentmenu]');\r\n if (element && element.length > 0) {\r\n var activeMenu = element.data('parentmenu');\r\n $(activeMenu).addClass('active');\r\n }\r\n })();\r\n\r\n //add animation to second level menu\r\n (function () {\r\n $('header .nav.navbar-nav > li').on('show.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideDown();\r\n });\r\n\r\n $('header .nav.navbar-nav > li').on('hide.bs.dropdown', function () {\r\n if ($(window).width() >= 768) {\r\n $(this).find('.dropdown-menu').first().slideUp(100);\r\n } else {\r\n $(this).find('.dropdown-menu').first().slideUp();\r\n }\r\n });\r\n\r\n $('header .side-nav .nav.nav-pills > li').on('show.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideDown();\r\n });\r\n\r\n $('header .side-nav .nav.nav-pills > li').on('hide.bs.dropdown', function () {\r\n $(this).find('.dropdown-menu').first().slideUp(100);\r\n });\r\n })();\r\n\r\n //menu active on mobile\r\n (function () {\r\n function changeActiveStates() {\r\n s.isActive = !s.isActive;\r\n\r\n if (s.isActive) {\r\n $('body, html').css('height', '100%');\r\n } else {\r\n $('body, html').css('height', '');\r\n }\r\n }\r\n\r\n var wholePageWrapper = document.body.querySelector('.whole-page-wrapper');\r\n var mobileMenuBtn = document.body.querySelector('a[href=\"#/mobile-menu\"]');\r\n var mobileCloseMenuBtn = document.body.querySelector('.close-mobile-menu');\r\n var mobileMenuList = document.body.querySelector('.nav-region.main-nav');\r\n\r\n if (mobileMenuBtn && mobileCloseMenuBtn) {\r\n var s = Object.create(State);\r\n s.init(null, 'menu-is-active');\r\n\r\n s.addElement(wholePageWrapper);\r\n s.addElement(mobileMenuList);\r\n s.addElement(mobileMenuBtn);\r\n\r\n mobileCloseMenuBtn.addEventListener('click', changeActiveStates);\r\n mobileMenuBtn.addEventListener('click', changeActiveStates);\r\n\r\n window.addEventListener('resize', function () {\r\n if (window.innerWidth > 768) {\r\n s.isActive = false;\r\n }\r\n });\r\n }\r\n })();\r\n});","/******************************************************************\r\n * Input client side search feature\r\n *****************************************************************/\r\nvar TmplData = require('./mustache-tmpl.js');\r\n\r\n$(function () {\r\n var timer,\r\n delayTime = 500;\r\n\r\n function isInArray(str, array) {\r\n if (!array) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n if (array[i] === str) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function removeUnmatchedData(data, ele, ignoreProps) {\r\n var removed = false;\r\n for (var i = data.length - 1; i >= 0; i--) {\r\n var notmatch = true;\r\n for (var prop in data[i]) {\r\n if (isInArray(prop, ignoreProps)) {\r\n continue;\r\n }\r\n\r\n if (data[i][prop].toUpperCase().indexOf($(ele).val().toUpperCase()) !== -1) {\r\n notmatch = false;\r\n break;\r\n }\r\n }\r\n\r\n if (notmatch) {\r\n removed = true;\r\n data.splice(i, 1);\r\n }\r\n }\r\n\r\n return removed;\r\n }\r\n\r\n // insert unmatched text when no data matched\r\n function insertNoMatchText(searchResult, root, containerSelector) {\r\n if (searchResult[root].length === 0) {\r\n $(containerSelector).append(\r\n `
    \r\n \r\n No matching result available.\r\n
    `\r\n );\r\n window.MvpFE.mapIcons();\r\n }\r\n }\r\n\r\n // Bind search input, only for one data source\r\n function bindSearchInput (inputSelector, root, excludeProps, dataVarName, tmplId, containerSelector) {\r\n $(document).on('keyup', inputSelector, function () {\r\n clearTimeout(timer);\r\n var me = this;\r\n\r\n timer = setTimeout(function () {\r\n //deep copy objects\r\n var searchResult = jQuery.extend(true, {}, TmplData[dataVarName]);\r\n\r\n if (searchResult[root]) {\r\n var removedData = removeUnmatchedData(searchResult[root], me, excludeProps);\r\n if (removedData) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData(tmplId + '_search', searchResult, containerSelector);\r\n } else {\r\n TmplData.setTemplateData(tmplId, TmplData[dataVarName + 'Formated'], containerSelector);\r\n }\r\n\r\n insertNoMatchText(searchResult, root, containerSelector);\r\n }\r\n }, delayTime);\r\n });\r\n }\r\n\r\n // Transfer Money payee search - because there are two data source, do not use common function\r\n $(document).on('keyup.payeesSearchInput', '.payees-search-input', function () {\r\n clearTimeout(timer);\r\n var me = this;\r\n\r\n timer = setTimeout(function () {\r\n //deep copy objects\r\n var searchResultMyAccount = jQuery.extend(true, {}, TmplData.dataMyAccount),\r\n searchResultPayees = jQuery.extend(true, {}, TmplData.dataPayeesSearch);\r\n\r\n //my account search\r\n if (searchResultMyAccount.myAccountListItem) {\r\n var removedMyAccounts = removeUnmatchedData(searchResultMyAccount.myAccountListItem, me, ['key']);\r\n if (removedMyAccounts) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData('template_payees_myaccount', searchResultMyAccount, '.payees-myaccount');\r\n } else {\r\n TmplData.setTemplateData('template_payees_myaccount', TmplData.dataMyAccount, '.payees-myaccount');\r\n }\r\n insertNoMatchText(searchResultMyAccount, 'myAccountListItem', '.payees-myaccount');\r\n }\r\n\r\n //external account search\r\n if (searchResultPayees.payees) {\r\n var removedExternalAccounts = removeUnmatchedData(searchResultPayees.payees, me, ['key', 'targetId']);\r\n if (removedExternalAccounts) {\r\n //only reset template when some data has been removed\r\n TmplData.setTemplateData('template_payees_external_account_search', searchResultPayees, '.payees-external-accounts');\r\n } else {\r\n TmplData.setTemplateData('template_payees_external_account', TmplData.dataPayeesFormated, '.payees-external-accounts');\r\n }\r\n insertNoMatchText(searchResultPayees, 'payees', '.payees-external-accounts');\r\n }\r\n }, delayTime);\r\n });\r\n\r\n // BPay biller search\r\n bindSearchInput('.biller-search-input', 'billers', ['key', 'changeUrl', 'payUrl'], \r\n 'dataBillers', 'template_billers', '.bpay-biller-list');\r\n\r\n // Bpay add new biller search\r\n bindSearchInput('.new-biller-search-input', 'billers', ['key', 'ref', 'changeUrl', 'payUrl', 'href'], 'dataNewBillers', \r\n 'template_new_billers', '.bpay-new-billers-list');\r\n\r\n // Term Deposit Maintenance | Cheque and Deposits - Cheque Tab Payee Search\r\n bindSearchInput('.term-deposit-cheque-to-payee-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataChequeToPayees', 'template_term_deposit_cheque_to_payee', '.term-deposit-cheque-to-payee-list');\r\n \r\n // Term Deposit Maintenance - Credit External Tab Payee Search\r\n bindSearchInput('.common-external-payee-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataExternalPayees', 'template_common_external_payee', '.common-external-payee-list');\r\n\r\n // Institution Payee Search\r\n bindSearchInput('.institution-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataInstitutionPayee', 'template_institution_payee', '.institution-payee-list');\r\n\r\n // External Account search\r\n bindSearchInput('.external-account-search-input', 'payees', ['key', 'changeUrl', 'payUrl'], \r\n 'dataExternalTransfer', 'template_external_transfer', '.external-transfer-list'); \r\n \r\n // International Transfer Recipients Payee Search\r\n bindSearchInput('.international-Recipients-search-input', 'internationalRecipients', ['key', 'changeUrl', 'payUrl'],\r\n 'dataInternationalRecipients', 'template_international_recipients', '.international-transfer-recipient');\r\n\r\n //International Transfer IBAN/Bank Account Search \r\n bindSearchInput('.international-transfer-search-bank-iban-input, .international-transfer-search-bank-swift-input, .international-transfer-search-bank-name-input, .international-transfer-search-bank-city-input', 'internationalSearchBank', ['key', 'changeUrl', 'payUrl'],\r\n 'dataInternationalSearchBank', 'template_iban_select_bank', '.international-transfer-search-bank-list');\r\n \r\n});","/***********************************************************\r\n * State tool\r\n ***********************************************************/\r\n\r\nmodule.exports = (function () {\r\n var State = {};\r\n\r\n State._activeClass = 'is-active';\r\n State._inactiveClass = undefined;\r\n\r\n State._isActive = false;\r\n State._elements = [];\r\n\r\n State._changeEvent = new CustomEvent('state_change');\r\n\r\n //\tconstructor\r\n State.init = function (initialState, activeClass, inactiveClass) {\r\n if (initialState !== true) initialState = false;\r\n if (activeClass && typeof (activeClass) == 'string') this._activeClass = activeClass;\r\n if (inactiveClass && typeof (inactiveClass) == 'string') this._inactiveClass = inactiveClass;\r\n };\r\n\r\n State.addElement = function (element) {\r\n this._elements.push(element);\r\n this._updateClasses();\r\n };\r\n\r\n //\tisActive properties\r\n State.__defineGetter__('isActive', function () {\r\n return this._isActive;\r\n });\r\n State.__defineSetter__('isActive', function (nState) {\r\n if (typeof (nState) == 'boolean' && nState != this._isActive) {\r\n this._isActive = nState;\r\n this._updateClasses();\r\n this._dispatchEvents();\r\n }\r\n });\r\n\r\n //\tdispatch change event on all elements\r\n State._dispatchEvents = function () {\r\n this._elements.forEach(function (_elm) {\r\n _elm.dispatchEvent(State._changeEvent);\r\n });\r\n };\r\n\r\n //\tupdate classes for all elements\r\n State._updateClasses = function () {\r\n if (this._isActive) {\r\n this._addClass(this._activeClass);\r\n this._removeClass(this._inactiveClass);\r\n } else {\r\n this._addClass(this._inactiveClass);\r\n this._removeClass(this._activeClass);\r\n }\r\n };\r\n\r\n //\tadd class to elements\r\n State._addClass = function (className) {\r\n if (className)\r\n this._elements.filter(function (_elm) {\r\n if (_elm) return true;\r\n }).forEach(function (_elm) {\r\n _elm.classList.add(className);\r\n });\r\n };\r\n\r\n //\tremove class from elements\r\n State._removeClass = function (className) {\r\n if (className)\r\n this._elements.filter(function (_elm) {\r\n if (_elm) return true;\r\n }).forEach(function (_elm) {\r\n _elm.classList.remove(className);\r\n });\r\n };\r\n\r\n return State;\r\n})();","/******************************************************************\r\n * To top button feature\r\n *****************************************************************/\r\n(function (jQuery) {\r\n jQuery.fn.UItoTop = function (options) {\r\n\r\n var defaults = {\r\n text: 'To Top',\r\n min: 200,\r\n inDelay: 600,\r\n outDelay: 400,\r\n containerID: 'toTop',\r\n containerHoverID: 'toTopHover',\r\n scrollSpeed: 1200,\r\n easingType: 'linear'\r\n };\r\n\r\n var settings = jQuery.extend(defaults, options);\r\n var containerIDhash = '#' + settings.containerID;\r\n var containerHoverIDHash = '#' + settings.containerHoverID;\r\n\r\n jQuery('body').append('' + settings.text + '');\r\n jQuery(containerIDhash).hide().click(function () {\r\n jQuery('html, body').animate({\r\n scrollTop: 0\r\n }, settings.scrollSpeed, settings.easingType);\r\n jQuery('#' + settings.containerHoverID, this).stop().animate({\r\n 'opacity': 0\r\n }, settings.inDelay, settings.easingType);\r\n return false;\r\n })\r\n .prepend('')\r\n .hover(function () {\r\n jQuery(containerHoverIDHash, this).stop().animate({\r\n 'opacity': 1\r\n }, 600, 'linear');\r\n }, function () {\r\n jQuery(containerHoverIDHash, this).stop().animate({\r\n 'opacity': 0\r\n }, 700, 'linear');\r\n });\r\n\r\n jQuery(window).scroll(function () {\r\n var sd = jQuery(window).scrollTop();\r\n if (typeof document.body.style.maxHeight === 'undefined') {\r\n jQuery(containerIDhash).css({\r\n 'position': 'absolute',\r\n 'top': jQuery(window).scrollTop() + jQuery(window).height() - 48\r\n });\r\n }\r\n if (sd > settings.min)\r\n jQuery(containerIDhash).fadeIn(settings.inDelay);\r\n else\r\n jQuery(containerIDhash).fadeOut(settings.Outdelay);\r\n });\r\n\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * Init totop feature\r\n */\r\n$(function () {\r\n jQuery().UItoTop({\r\n scrollSpeed: 500,\r\n text: ''\r\n });\r\n $('#toTop').append('');\r\n});","/*******************************************************\r\n * Unclick tool\r\n *******************************************************/\r\n\r\nmodule.exports = (function () {\r\n var Unclick = {},\r\n _unclicks = [],\r\n _exceptElems = [];\r\n\r\n function makeUnclickEvent(targ) {\r\n var unclickEvent = document.createEvent('CustomEvent');\r\n unclickEvent.initEvent('unclick', true, true, {\r\n target: targ\r\n });\r\n return unclickEvent;\r\n }\r\n\r\n function checkUnclick(targ) {\r\n _unclicks.forEach(function (_elem) {\r\n if (targ !== _elem) {\r\n if (!isDescendant(_elem, targ) && !isInExceptElements(_elem, targ)) {\r\n _elem.dispatchEvent(makeUnclickEvent(_elem));\r\n }\r\n }\r\n });\r\n }\r\n\r\n function isDescendant(parent, child) {\r\n var node = child.parentNode;\r\n while (node != null) {\r\n if (node == parent) {\r\n return true;\r\n }\r\n node = node.parentNode;\r\n }\r\n return false;\r\n }\r\n\r\n function isInExceptElements(elem, targ) {\r\n for (var i = 0; i < _exceptElems.length; i++) {\r\n if (elem == _exceptElems[i].elem) {\r\n for (var j = 0; j < _exceptElems[i].excepts.length; j++) {\r\n if (targ == _exceptElems[i].excepts[j] || $(_exceptElems[i].excepts[j]).find(targ).length > 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n window.addEventListener('click', function (e) {\r\n checkUnclick(e.target);\r\n });\r\n\r\n Unclick.registerUnclick = function (element, cb, exceptElems) {\r\n _unclicks.push(element);\r\n\r\n for (var i = 0; exceptElems && i < exceptElems.length; i++) {\r\n _exceptElems.push(exceptElems[i]);\r\n }\r\n\r\n element.addEventListener('unclick', cb);\r\n };\r\n\r\n return Unclick;\r\n})();"],"sourceRoot":"/source/"}