{"version":3,"sources":["webpack:///./node_modules/pepjs/dist/pep.js","webpack:///./Scripts/Libs/FormatDotNetStyle.ts","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/iscroll/build/iscroll-probe.js"],"names":["module","exports","MOUSE_PROPS","MOUSE_DEFAULTS","PointerEvent","inType","inDict","Object","create","e","document","createEvent","initEvent","bubbles","cancelable","p","i","length","buttons","pressure","undefined","x","clientX","y","clientY","pointerId","width","height","tiltX","tiltY","twist","tangentialPressure","pointerType","hwTimestamp","isPrimary","detail","PointerMap","window","Map","prototype","forEach","SparseArrayMap","this","array","size","set","k","v","delete","has","get","clear","callback","thisArg","call","CLONE_PROPS","CLONE_DEFAULTS","BOUNDARY_EVENTS","HAS_SVG_INSTANCE","SVGElementInstance","dispatcher","pointermap","eventMap","captureInfo","eventSources","eventSourceList","registerSource","name","source","s","newEvents","events","bind","push","register","element","es","l","unregister","contains","container","contained","ex","down","inEvent","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","event","propagate","enterOver","eventHandler","_handledByPE","type","fn","listen","target","addEvent","unlisten","removeEvent","eventName","addEventListener","boundHandler","removeEventListener","makeEvent","relatedTarget","preventDefault","_target","dispatchEvent","cloneEvent","eventCopy","correspondingUseElement","getTarget","capture","propagateDown","targets","parentNode","reverse","setCapture","inPointerId","inTarget","skipDispatch","releaseCapture","implicitRelease","asyncDispatchEvent","t","requestAnimationFrame","targeting","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget","Boolean","elementFromPoint","targetingShadow","olderShadow","os","olderShadowRoot","se","querySelector","allShadows","shadows","searchRoot","inRoot","st","sr","ssr","owner","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","findTarget","Array","map","toArray","slice","filter","MO","MutationObserver","WebKitMutationObserver","SELECTOR","OBSERVER_INIT","subtree","childList","attributes","attributeOldValue","attributeFilter","Installer","add","remove","changed","binder","addCallback","removeCallback","changedCallback","observer","mutationWatcher","shadowSelector","rule","watchSubtree","observe","enableOnSubtree","readyState","installOnLoad","installNewSubtree","findElements","addElement","querySelectorAll","removeElement","el","elementChanged","oldValue","concatLists","accum","list","concat","isElement","n","ELEMENT_NODE","flattenMutationTree","inNodes","tree","reduce","mutations","mutationHandler","m","addedNodes","removedNodes","attrib2css","selector","value","styles","hasNativePE","MSPointerEvent","hasShadowRoot","ShadowDOMPolyfill","head","createShadowRoot","applyAttributeStyles","r","createElement","textContent","appendChild","DEDUP_DIST","BUTTON_TO_BUTTONS","HAS_BUTTONS","MouseEvent","INSTALLER","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","Math","abs","dy","prepareEvent","pd","webkitForce","WEBKIT_FORCE_AT_MOUSE_DOWN","prepareButtonsForMove","which","mousedown","button","webkitmouseforcechanged","mousemove","mouseup","mouseover","mouseout","deactivateMouse","pointermap$1","DEDUP_TIMEOUT","ATTRIB","UP","DOWN","LEFT","RIGHT","AUTO","touchEvents","elementAdded","a","getAttribute","touchActionToScrollType","_scrollType","elementRemoved","evts","oldSt","scrollTypes","includes","touchAction","split","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","removePrimaryPointer","inPointer","typeToButtons","ret","touchToPointer","cte","currentTouchEvent","id","radiusX","webkitRadiusX","radiusY","webkitRadiusY","force","altitudeAngle","tan","radToDeg","PI","atan","cos","azimuthAngle","sin","touchType","altKey","ctrlKey","metaKey","shiftKey","self","processTouches","inFunction","tl","changedTouches","shouldScroll","currentTarget","dya","dxa","left","right","findTouch","inTL","inId","vacuumTouches","touches","d","key","cancelOut","touchstart","dedupSynthMouse","overDown","outTarget","touchforcechange","touchmove","touchcancel","moveOverOut","pointer","outEvent","touchend","upOut","cleanUpPointer","lt","indexOf","splice","setTimeout","h","pointermap$2","HAS_BITMAP_TYPE","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES","cleanup","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","applyPolyfill","navigator","msPointerEnabled","tp","msMaxTouchPoints","defineProperty","enumerable","ontouchstart","assertActive","error","Error","assertConnected","elem","parent","ownerDocument","inActiveButtonState","applyPolyfill$1","Element","setPointerCapture","defineProperties","msSetPointerCapture","msReleasePointerCapture","targetFinding","factory","cultureCode","FormatDotNetStyle","defaultCultureCode","numberCulture","dateTimeCulture","localizedGroupSize","defaultGroupSizes","localizedDecimalSymbol","localizedGroupSymbol","localizedPercentSymbol","localizedPermilleSymbol","zeroSymbol","poundSymbol","percentSymbol","permilleSymbol","sectionSymbol","position","actualPosition","digitCount","toLowerCase","numberCultures","substr","dateTimeCultureEnUS","dateTimeCultures","trimEnd0","len","getDigitAt","charCodeAt","isDigitAt","c","isLetterAt","pad0","o","toString","pad0t","match","format","code","trimF","last","NumberDecimalSeparator","findIn","ss","toUpperCase","getMarkerWord","w","scanWord","findWord","start","replaceWord","findAny","datetime","findMonthByName","month","MonthGenitiveNames","MonthNames","AbbreviatedMonthGenitiveNames","AbbreviatedMonthNames","findMonthInCulture","formatQuarter","quarter","replaceAll","LongQuarter","Quarters","ShortQuarter","formatDateTime","formatCustomDateTime","ShortDatePattern","LongDatePattern","ShortTimePattern","FullDateTimePattern","MonthDayPattern","b","RFC1123Pattern","SortableDateTimePattern","LongTimePattern","UniversalSortableDateTimePattern","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","YearMonthPattern","unescaped","unescapeDateTime","ddddCode","DayNames","getDay","dCode","dddCode","AbbreviatedDayNames","ddCode","getDate","fffffffCode","getMilliseconds","ffffffCode","fffffCode","ffffCode","fffCode","ffCode","floor","fCode","FFFFFFFCode","FFFFFFCode","FFFFFCode","FFFFCode","FFFCode","FFCode","FCode","ggCode","gCode","GetEraName","Calendar","GetEra","hhCode","geth112","getHours","hCode","HHCode","HCode","KCode","mmCode","getMinutes","mCode","MMMMCode","monthDayInFormat","getMonth","MCode","MMMCode","MMCode","ssCode","getSeconds","sCode","ttCode","AMDesignator","PMDesignator","tCode","am","pm","yyyyyCode","yCode","getFullYear","yyyyCode","yyyCode","yyCode","zzzCode","getTimezoneOffset","zCode","zzCode","pCode","h023","cp","cnn","sq","dq","DateSeparator","TimeSeparator","buffer","parseDateTime","withCheck","year","day","hour","minute","second","millisecond","datePattern","timePattern","marker","scanNumber","pow","setDefault","parts","date","Number","NaN","datePartNames","partName","prevPartName","console","log","toDigits","num","ep","parseInt","replace","pad","formatMulti","getNaNOrInfinitySymbol","NEGATIVE_INFINITY","NegativeInfinitySymbol","POSITIVE_INFINITY","PositiveInfinitySymbol","NaNSymbol","getActualPrecision","precision","sampleE","toExponential","Ep","getActualExponent","formatReverse","formatCountNumeric","f","zeroCode","poundCode","formatRound","round","formatCountPad","formatInsertExtraSymbols","firstDigitIndex","formatDigits","actualPos","actualDigits","groupCode","formatEncoded","encodedFormat","multipleFormats","percentCode","permilleCode","originalnum","isFinite","formatInteger","formatFloat","formatE","j","EE","eprefix","upperECode","lowerECode","ls","rs","decimalPointPosition","decimalCode","fomatPrecision","actualPrecision","top","bottom","negative","zzf","zz","scale","padn","delimitGroups","cg","gsc","gsr","groupSize","groups","lastGroupSize","sf","padf","encoded","formatDotNetStyleCustom","sectionCode","formats","formatP","formatN","formatZ","multimpleFormats","decoded","parseNumber","divide","NegativeSign","dp","dp1","dp2","s1","s2","parseFloat","isNaN","formatNumber","NumberGroupSizes","NumberGroupSeparator","PercentSymbol","PerMilleSymbol","c0u","standard","n2","NumberDecimalDigits","format2","NumberNegativePattern","CurrencyGroupSizes","CurrencyDecimalSeparator","CurrencyGroupSeparator","currency","CurrencySymbol","CurrencyDecimalDigits","CurrencyPositivePattern","CurrencyNegativePattern","PercentGroupSizes","PercentDecimalSeparator","PercentGroupSeparator","PercentDecimalDigits","PercentPositivePattern","PercentNegativePattern","formatTimeSpan","ticks","formatTimeSpanCustom","parseTimeSpan","timespan","days","hours","minutes","seconds","milliseconds","scanNumberLimited","tt","minus","unescapeTimeSpan","minusCode","digitLimit","PositiveSign","Eras","EraNames","NativeCalendarName","ShortestDayNames","CalendarWeekRule","FirstDayOfWeek","OldCookies","Cookies","api","noConflict","extend","result","arguments","decode","decodeURIComponent","init","converter","path","defaults","expires","toUTCString","JSON","stringify","test","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","cookie","json","jar","cookies","join","charAt","read","parse","getJSON","withConverter","rAF","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","utils","me","_elementStyle","style","_vendor","vendors","_prefixStyle","getTime","now","obj","prefixPointerEvent","pointerEvent","momentum","current","time","lowerMargin","wrapperSize","deceleration","destination","duration","distance","speed","_transform","hasTransform","hasPerspective","hasTouch","hasPointer","hasTransition","isBadAndroid","appVersion","safariVersion","transform","transitionTimingFunction","transitionDuration","transitionDelay","transformOrigin","hasClass","RegExp","className","addClass","newclass","removeClass","re","offset","offsetLeft","offsetTop","offsetParent","preventDefaultException","exceptions","eventType","pointerdown","pointermove","pointerup","ease","quadratic","circular","sqrt","back","bounce","elastic","tap","ev","pageX","pageY","click","tagName","initMouseEvent","view","screenX","screenY","_constructed","IScroll","options","wrapper","scroller","children","scrollerStyle","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","disableTouch","disableMouse","startX","startY","scrollY","directionLockThreshold","bounceTime","bounceEasing","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","translateZ","eventPassthrough","scrollX","freeScroll","resizePolling","shrinkScrollbars","invertWheelDirection","probeType","directionX","directionY","_events","_init","refresh","scrollTo","enable","createDefaultScrollbar","direction","interactive","scrollbar","indicator","cssText","pointerEvents","Indicator","wrapperStyle","indicatorStyle","listenX","listenY","resize","defaultScrollbars","shrink","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","durationProp","opacity","version","_initEvents","scrollbars","indicators","_initIndicators","mouseWheel","_initWheel","snap","_initSnap","keyBindings","_initKeys","destroy","clearTimeout","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","_start","enabled","initiated","pos","point","moved","distX","distY","directionLocked","startTime","getComputedPosition","_translate","isAnimating","absStartX","absStartY","pointX","pointY","_move","newX","newY","absDistX","absDistY","deltaX","deltaY","timestamp","endTime","hasHorizontalScroll","hasVerticalScroll","maxScrollX","maxScrollY","_end","momentumX","momentumY","distanceX","distanceY","easing","flick","wrapperWidth","wrapperHeight","max","_nearestSnap","currentPage","snapSpeed","min","_resize","that","disable","offsetHeight","clientWidth","clientHeight","scrollerWidth","offsetWidth","scrollerHeight","wrapperOffset","on","off","index","apply","scrollBy","transitionType","_transitionTimingFunction","_animate","scrollToElement","offsetX","offsetY","transitionTime","updatePosition","matrix","getComputedStyle","interactiveScrollbars","customStyle","fadeScrollbars","_indicatorsMap","wheelTimeout","_wheel","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","goToPage","cx","cy","stepX","snapStepX","stepY","snapStepY","pages","snapThresholdX","snapThresholdY","posX","posY","next","prev","keys","pageUp","pageDown","end","home","_key","prevTime","keyTime","keyAcceleration","keyCode","destX","destY","easingFn","destTime","step","handleEvent","stopPropagation","fadeTimeout","removeChild","lastPointX","lastPointY","_pos","display","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","val","hold","visible","delay"],"mappings":"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","file":"vendors-admin-alertMessage-dataLoadManager-error-mtConsole-studio-themeManager-viewer.js","sourcesContent":["/*!\n * PEP v0.5.1 | https://github.com/jquery/PEP\n * Copyright jQuery Foundation and other contributors | http://jquery.org/license\n */\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.PointerEventsPolyfill = factory());\n}(this, function () { 'use strict';\n\n /**\n * This is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initialization properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor\n * @param {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event} A new PointerEvent of type `inType`, initialized with properties from `inDict`.\n */\n var MOUSE_PROPS = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY'\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n 0,\n 0\n ];\n\n function PointerEvent(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = document.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || false);\n\n // define inherited MouseEvent properties\n // skip bubbles and cancelable since they're set above in initEvent()\n for (var i = 2, p; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.buttons || 0;\n\n // Spec requires that pointers without pressure specified use 0.5 for down\n // state and 0 for up state.\n var pressure = 0;\n\n if (inDict.pressure !== undefined && e.buttons) {\n pressure = inDict.pressure;\n } else {\n pressure = e.buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX/Y\n e.x = e.clientX;\n e.y = e.clientY;\n\n // define the properties of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 1;\n e.height = inDict.height || 1;\n e.pressure = pressure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.twist = inDict.twist || 0;\n e.tangentialPressure = inDict.tangentialPressure || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = inDict.hwTimestamp || 0;\n e.isPrimary = inDict.isPrimary || false;\n e.detail = 0;\n return e;\n }\n\n /**\n * This module implements a map of pointer states\n */\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var PointerMap = USE_MAP ? Map : SparseArrayMap;\n\n function SparseArrayMap() {\n this.array = [];\n this.size = 0;\n }\n\n SparseArrayMap.prototype = {\n set: function(k, v) {\n if (v === undefined) {\n return this.delete(k);\n }\n if (!this.has(k)) {\n this.size++;\n }\n this.array[k] = v;\n },\n has: function(k) {\n return this.array[k] !== undefined;\n },\n delete: function(k) {\n if (this.has(k)) {\n delete this.array[k];\n this.size--;\n }\n },\n get: function(k) {\n return this.array[k];\n },\n clear: function() {\n this.array.length = 0;\n this.size = 0;\n },\n\n // return value, key, map\n forEach: function(callback, thisArg) {\n return this.array.forEach(function(v, k) {\n callback.call(thisArg, v, k, this);\n }, this);\n }\n };\n\n var CLONE_PROPS = [\n\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n\n // DOM Level 3\n 'buttons',\n\n // PointerEvent\n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n\n // event instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp'\n ];\n\n var CLONE_DEFAULTS = [\n\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n\n // DOM Level 3\n 0,\n\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0\n ];\n\n var BOUNDARY_EVENTS = {\n 'pointerover': 1,\n 'pointerout': 1,\n 'pointerenter': 1,\n 'pointerleave': 1\n };\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\n\n /**\n * This module is for normalizing events. Mouse and Touch events will be\n * collected here, and fire PointerEvents that have the same semantics, no\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing is added\n * - pointerup: a pointer is removed\n * - pointermove: a pointer is moved\n * - pointerover: a pointer crosses into an element\n * - pointerout: a pointer leaves an element\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatcher = {\n pointermap: new PointerMap(),\n eventMap: Object.create(null),\n captureInfo: Object.create(null),\n\n // Scope objects for native events.\n // This exists for ease of testing.\n eventSources: Object.create(null),\n eventSourceList: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` array.\n * @param {string} name A name for the event source\n * @param {Object} source A new source of platform events.\n */\n registerSource: function(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEach(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind(s);\n }\n }, this);\n this.eventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n register: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n\n // call eventsource register\n es.register.call(es, element);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n\n // call eventsource register\n es.unregister.call(es, element);\n }\n },\n contains: /*scope.external.contains || */function(container, contained) {\n try {\n return container.contains(contained);\n } catch (ex) {\n\n // most likely: https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n return false;\n }\n },\n\n // EVENTS\n down: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerdown', inEvent);\n },\n move: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointermove', inEvent);\n },\n up: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerup', inEvent);\n },\n enter: function(inEvent) {\n inEvent.bubbles = false;\n this.fireEvent('pointerenter', inEvent);\n },\n leave: function(inEvent) {\n inEvent.bubbles = false;\n this.fireEvent('pointerleave', inEvent);\n },\n over: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerout', inEvent);\n },\n cancel: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n this.out(event);\n this.propagate(event, this.leave, false);\n },\n enterOver: function(event) {\n this.over(event);\n this.propagate(event, this.enter, true);\n },\n\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n\n // This is used to prevent multiple dispatch of pointerevents from\n // platform events. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n if (inEvent._handledByPE) {\n return;\n }\n var type = inEvent.type;\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEvent._handledByPE = true;\n },\n\n // set up event listeners\n listen: function(target, events) {\n events.forEach(function(e) {\n this.addEvent(target, e);\n }, this);\n },\n\n // remove event listeners\n unlisten: function(target, events) {\n events.forEach(function(e) {\n this.removeEvent(target, e);\n }, this);\n },\n addEvent: /*scope.external.addEvent || */function(target, eventName) {\n target.addEventListener(eventName, this.boundHandler);\n },\n removeEvent: /*scope.external.removeEvent || */function(target, eventName) {\n target.removeEventListener(eventName, this.boundHandler);\n },\n\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the information in\n * `inEvent`.\n *\n * @param {string} inType A string representing the type of event to create\n * @param {Event} inEvent A platform event with a target\n * @return {Event} A PointerEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n\n // relatedTarget must be null if pointer is captured\n if (this.captureInfo[inEvent.pointerId]) {\n inEvent.relatedTarget = null;\n }\n var e = new PointerEvent(inType, inEvent);\n if (inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault;\n }\n e._target = e._target || inEvent.target;\n return e;\n },\n\n // make and dispatch an event in one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEvent(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} inEvent An event that contains properties to copy.\n * @return {Object} An object containing shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.create(null);\n var p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n\n // Work around SVGInstanceElement shadow tree\n // Return the element that is represented by the instance for Safari, Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedTarget')) {\n if (eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseElement;\n }\n }\n }\n\n // keep the semantics of preventDefault\n if (inEvent.preventDefault) {\n eventCopy.preventDefault = function() {\n inEvent.preventDefault();\n };\n }\n return eventCopy;\n },\n getTarget: function(inEvent) {\n var capture = this.captureInfo[inEvent.pointerId];\n if (!capture) {\n return inEvent._target;\n }\n if (inEvent._target === capture || !(inEvent.type in BOUNDARY_EVENTS)) {\n return capture;\n }\n },\n propagate: function(event, fn, propagateDown) {\n var target = event.target;\n var targets = [];\n\n // Order of conditions due to document.contains() missing in IE.\n while (target != null && target !== document && !target.contains(event.relatedTarget)) {\n targets.push(target);\n target = target.parentNode;\n\n // Touch: Do not propagate if node is detached.\n if (!target) {\n return;\n }\n }\n if (propagateDown) {\n targets.reverse();\n }\n targets.forEach(function(target) {\n event.target = target;\n fn.call(this, event);\n }, this);\n },\n setCapture: function(inPointerId, inTarget, skipDispatch) {\n if (this.captureInfo[inPointerId]) {\n this.releaseCapture(inPointerId, skipDispatch);\n }\n\n this.captureInfo[inPointerId] = inTarget;\n this.implicitRelease = this.releaseCapture.bind(this, inPointerId, skipDispatch);\n document.addEventListener('pointerup', this.implicitRelease);\n document.addEventListener('pointercancel', this.implicitRelease);\n\n var e = new PointerEvent('gotpointercapture', { bubbles: true });\n e.pointerId = inPointerId;\n e._target = inTarget;\n\n if (!skipDispatch) {\n this.asyncDispatchEvent(e);\n }\n },\n releaseCapture: function(inPointerId, skipDispatch) {\n var t = this.captureInfo[inPointerId];\n if (!t) {\n return;\n }\n\n this.captureInfo[inPointerId] = undefined;\n document.removeEventListener('pointerup', this.implicitRelease);\n document.removeEventListener('pointercancel', this.implicitRelease);\n\n var e = new PointerEvent('lostpointercapture', { bubbles: true });\n e.pointerId = inPointerId;\n e._target = t;\n\n if (!skipDispatch) {\n this.asyncDispatchEvent(e);\n }\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEvent The event to be dispatched.\n * @return {Boolean} True if an event handler returns true, false otherwise.\n */\n dispatchEvent: /*scope.external.dispatchEvent || */function(inEvent) {\n var t = this.getTarget(inEvent);\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\n asyncDispatchEvent: function(inEvent) {\n requestAnimationFrame(this.dispatchEvent.bind(this, inEvent));\n }\n };\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n\n var targeting = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShadow: function(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n return os;\n },\n allShadows: function(element) {\n var shadows = [];\n var s = this.shadow(element);\n while (s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n if (inRoot) {\n var t = inRoot.elementFromPoint(x, y);\n var st, sr;\n\n // is element a shadow host?\n sr = this.targetingShadow(t);\n while (sr) {\n\n // find the the element inside the shadow root\n st = sr.elementFromPoint(x, y);\n if (!st) {\n\n // check for older shadows\n sr = this.olderShadow(sr);\n } else {\n\n // shadowed element may contain a shadow root\n var ssr = this.targetingShadow(st);\n return this.searchRoot(ssr, x, y) || st;\n }\n }\n\n // light dom element is the target\n return t;\n }\n },\n owner: function(element) {\n var s = element;\n\n // walk up until you hit the shadow root or document\n while (s.parentNode) {\n s = s.parentNode;\n }\n\n // the owner element is expected to be a Document or ShadowRoot\n if (s.nodeType !== Node.DOCUMENT_NODE && s.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n findTarget: function(inEvent) {\n var x = inEvent.clientX;\n var y = inEvent.clientY;\n\n // if the listener is in the shadow root, it is much faster to start there\n var s = this.owner(inEvent.target);\n\n // if x, y is not in this root, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n }\n };\n\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var map = Array.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array.prototype.slice.call.bind(Array.prototype.slice);\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n var MO = window.MutationObserver || window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n childList: true,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n function Installer(add, remove, changed, binder) {\n this.addCallback = add.bind(binder);\n this.removeCallback = remove.bind(binder);\n this.changedCallback = changed.bind(binder);\n if (MO) {\n this.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype = {\n watchSubtree: function(target) {\n\n // Only watch scopes that can target find, as these are top-level.\n // Otherwise we can see duplicate additions and removals that add noise.\n //\n // TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see\n // a removal without an insertion when a node is redistributed among\n // shadows. Since it all ends up correct in the document, watching only\n // the document will yield the correct mutations to watch.\n if (this.observer && targeting.canTarget(target)) {\n this.observer.observe(target, OBSERVER_INIT);\n }\n },\n enableOnSubtree: function(target) {\n this.watchSubtree(target);\n if (target === document && document.readyState !== 'complete') {\n this.installOnLoad();\n } else {\n this.installNewSubtree(target);\n }\n },\n installNewSubtree: function(target) {\n forEach(this.findElements(target), this.addElement, this);\n },\n findElements: function(target) {\n if (target.querySelectorAll) {\n return target.querySelectorAll(SELECTOR);\n }\n return [];\n },\n removeElement: function(el) {\n this.removeCallback(el);\n },\n addElement: function(el) {\n this.addCallback(el);\n },\n elementChanged: function(el, oldValue) {\n this.changedCallback(el, oldValue);\n },\n concatLists: function(accum, list) {\n return accum.concat(toArray(list));\n },\n\n // register all touch-action = none nodes on document load\n installOnLoad: function() {\n document.addEventListener('readystatechange', function() {\n if (document.readyState === 'complete') {\n this.installNewSubtree(document);\n }\n }.bind(this));\n },\n isElement: function(n) {\n return n.nodeType === Node.ELEMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n\n // find children with touch-action\n var tree = map(inNodes, this.findElements, this);\n\n // make sure the added nodes are accounted for\n tree.push(filter(inNodes, this.isElement));\n\n // flatten the list\n return tree.reduce(this.concatLists, []);\n },\n mutationWatcher: function(mutations) {\n mutations.forEach(this.mutationHandler, this);\n },\n mutationHandler: function(m) {\n if (m.type === 'childList') {\n var added = this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElement, this);\n var removed = this.flattenMutationTree(m.removedNodes);\n removed.forEach(this.removeElement, this);\n } else if (m.type === 'attributes') {\n this.elementChanged(m.target, m.oldValue);\n }\n }\n };\n\n function shadowSelector(s) {\n return 'body /shadow-deep/ ' + s;\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; }';\n }\n var attrib2css = [\n { selector: '[touch-action=\"none\"]', value: 'none' },\n { selector: '[touch-action=\"auto\"]', value: 'auto' },\n { selector: '[touch-action~=\"pan-x\"]', value: 'pan-x' },\n { selector: '[touch-action~=\"pan-y\"]', value: 'pan-y' },\n { selector: '[touch-action~=\"pan-up\"]', value: 'pan-up' },\n { selector: '[touch-action~=\"pan-down\"]', value: 'pan-down' },\n { selector: '[touch-action~=\"pan-left\"]', value: 'pan-left' },\n { selector: '[touch-action~=\"pan-right\"]', value: 'pan-right' }\n ];\n var styles = '';\n\n // only install stylesheet if the browser has touch action support\n var hasNativePE = window.PointerEvent || window.MSPointerEvent;\n\n // only add shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot;\n\n function applyAttributeStyles() {\n if (hasNativePE) {\n attrib2css.forEach(function(r) {\n styles += r.selector + rule(r.value) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector(r.selector) + rule(r.value) + '\\n';\n }\n });\n\n var el = document.createElement('style');\n el.textContent = styles;\n document.head.appendChild(el);\n }\n }\n\n var pointermap = dispatcher.pointermap;\n\n // radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n // left, middle, right, back, forward\n var BUTTON_TO_BUTTONS = [1, 4, 2, 8, 16];\n\n var HAS_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', { buttons: 1 }).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n 'webkitmouseforcechanged',\n 'mousemove',\n 'mouseup',\n 'mouseover',\n 'mouseout'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n\n // collide with the global mouse listener\n isEventSimulatedFromTouch: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.clientX;\n var y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n\n // forward mouse preventDefault\n var pd = e.preventDefault;\n e.preventDefault = function() {\n inEvent.preventDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n if ('webkitForce' in inEvent) {\n e.pressure = inEvent.webkitForce - MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN;\n }\n return e;\n },\n prepareButtonsForMove: function(e, inEvent) {\n var p = pointermap.get(this.POINTER_ID);\n\n // Update buttons state after possible out-of-document mouseup.\n if (inEvent.which === 0 || !p) {\n e.buttons = 0;\n } else {\n e.buttons = p.buttons;\n }\n inEvent.buttons = e.buttons;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n var e = this.prepareEvent(inEvent);\n if (!HAS_BUTTONS) {\n e.buttons = BUTTON_TO_BUTTONS[e.button];\n if (p) { e.buttons |= p.buttons; }\n inEvent.buttons = e.buttons;\n }\n pointermap.set(this.POINTER_ID, inEvent);\n if (!p || p.buttons === 0) {\n dispatcher.down(e);\n } else {\n dispatcher.move(e);\n }\n }\n },\n\n // This is called when the user force presses without moving x/y\n webkitmouseforcechanged: function(inEvent) {\n this.mousemove(inEvent);\n },\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\n e.button = -1;\n pointermap.set(this.POINTER_ID, inEvent);\n dispatcher.move(e);\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n var e = this.prepareEvent(inEvent);\n if (!HAS_BUTTONS) {\n var up = BUTTON_TO_BUTTONS[e.button];\n\n // Produces wrong state of buttons in Browsers without `buttons` support\n // when a mouse button that was pressed outside the document is released\n // inside and other buttons are still pressed down.\n e.buttons = p ? p.buttons & ~up : 0;\n inEvent.buttons = e.buttons;\n }\n pointermap.set(this.POINTER_ID, inEvent);\n\n // Support: Firefox <=44 only\n // FF Ubuntu includes the lifted button in the `buttons` property on\n // mouseup.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1223366\n e.buttons &= ~BUTTON_TO_BUTTONS[e.button];\n if (e.buttons === 0) {\n dispatcher.up(e);\n } else {\n dispatcher.move(e);\n }\n }\n },\n mouseover: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\n e.button = -1;\n pointermap.set(this.POINTER_ID, inEvent);\n dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\n e.button = -1;\n dispatcher.leaveOut(e);\n }\n },\n cancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.cancel(e);\n this.deactivateMouse();\n },\n deactivateMouse: function() {\n pointermap.delete(this.POINTER_ID);\n }\n };\n\n var captureInfo = dispatcher.captureInfo;\n var findTarget = targeting.findTarget.bind(targeting);\n var allShadows = targeting.allShadows.bind(targeting);\n var pointermap$1 = dispatcher.pointermap;\n\n // this should be long enough to ignore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\n var ATTRIB = 'touch-action';\n var INSTALLER;\n\n // bitmask for _scrollType\n var UP = 1;\n var DOWN = 2;\n var LEFT = 4;\n var RIGHT = 8;\n var AUTO = UP | DOWN | LEFT | RIGHT;\n\n // handler block for native touch events\n var touchEvents = {\n events: [\n 'touchstart',\n 'touchmove',\n 'touchforcechange',\n 'touchend',\n 'touchcancel'\n ],\n register: function(target) {\n INSTALLER.enableOnSubtree(target);\n },\n unregister: function() {\n\n // TODO(dfreedman): is it worth it to disconnect the MO?\n },\n elementAdded: function(el) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n if (typeof st === \"number\") {\n el._scrollType = st;\n dispatcher.listen(el, this.events);\n\n // set touch-action on shadows as well\n allShadows(el).forEach(function(s) {\n s._scrollType = st;\n dispatcher.listen(s, this.events);\n }, this);\n }\n },\n elementRemoved: function(el) {\n\n // In some cases, an element is removed before a touchend.\n // When this is the case, we should wait for the touchend before unlistening,\n // because we still want pointer events to bubble up after removing from DOM.\n if (pointermap$1.size > 0) {\n var evts = this.events;\n el.addEventListener('touchend', function() {\n el._scrollType = undefined;\n dispatcher.unlisten(el, evts);\n });\n } else {\n el._scrollType = undefined;\n dispatcher.unlisten(el, this.events);\n }\n\n // remove touch-action from shadow\n allShadows(el).forEach(function(s) {\n s._scrollType = undefined;\n dispatcher.unlisten(s, this.events);\n }, this);\n },\n elementChanged: function(el, oldValue) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n var oldSt = this.touchActionToScrollType(oldValue);\n\n // simply update scrollType if listeners are already established\n if (typeof st === \"number\" && typeof oldSt === \"number\") {\n el._scrollType = st;\n allShadows(el).forEach(function(s) {\n s._scrollType = st;\n }, this);\n } else if (typeof oldSt === \"number\") {\n this.elementRemoved(el);\n } else if (typeof st === \"number\") {\n this.elementAdded(el);\n }\n },\n scrollTypes: {\n UP: function(s) {\n return s.includes('pan-y') || s.includes('pan-up') ? UP : 0;\n },\n DOWN: function(s) {\n return s.includes('pan-y') || s.includes('pan-down') ? DOWN : 0;\n },\n LEFT: function(s) {\n return s.includes('pan-x') || s.includes('pan-left') ? LEFT : 0;\n },\n RIGHT: function(s) {\n return s.includes('pan-x') || s.includes('pan-right') ? RIGHT : 0;\n }\n },\n touchActionToScrollType: function(touchAction) {\n if (!touchAction) {\n return;\n }\n\n if (touchAction === \"auto\") {\n return AUTO;\n }\n\n if (touchAction === \"none\") {\n return 0;\n }\n\n var s = touchAction.split(' ');\n var st = this.scrollTypes;\n\n // construct a bitmask of allowed scroll directions\n return st.UP(s) | st.DOWN(s) | st.LEFT(s) | st.RIGHT(s);\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: function(inTouch) {\n\n // set primary touch if there no pointers, or the only pointer is the mouse\n if (pointermap$1.size === 0 || (pointermap$1.size === 1 && pointermap$1.has(1))) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = { X: inTouch.clientX, Y: inTouch.clientY };\n this.scrolling = false;\n }\n },\n removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\n }\n },\n typeToButtons: function(type) {\n var ret = 0;\n if (type === 'touchstart' || type === 'touchmove' || type === 'touchforcechange') {\n ret = 1;\n }\n return ret;\n },\n touchToPointer: function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n\n // We reserve pointerId 1 for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touch identifier for compatibility.\n var id = e.pointerId = inTouch.identifier + 2;\n e.target = captureInfo[id] || findTarget(e);\n e.bubbles = true;\n e.cancelable = true;\n e.button = 0;\n e.buttons = this.typeToButtons(cte.type);\n e.width = (inTouch.radiusX || inTouch.webkitRadiusX || 0) * 2;\n e.height = (inTouch.radiusY || inTouch.webkitRadiusY || 0) * 2;\n e.pressure = inTouch.force !== undefined ?\n inTouch.force :\n inTouch.webkitForce !== undefined ?\n inTouch.webkitForce : undefined;\n e.isPrimary = this.isPrimaryTouch(inTouch);\n if (inTouch.altitudeAngle) {\n const tan = Math.tan(inTouch.altitudeAngle);\n const radToDeg = 180 / Math.PI;\n e.tiltX = Math.atan(Math.cos(inTouch.azimuthAngle) / tan) * radToDeg;\n e.tiltY = Math.atan(Math.sin(inTouch.azimuthAngle) / tan) * radToDeg;\n } else {\n e.tiltX = 0;\n e.tiltY = 0;\n }\n if (inTouch.touchType === 'stylus') {\n e.pointerType = 'pen';\n } else {\n e.pointerType = this.POINTER_TYPE;\n }\n\n // forward modifier keys\n e.altKey = cte.altKey;\n e.ctrlKey = cte.ctrlKey;\n e.metaKey = cte.metaKey;\n e.shiftKey = cte.shiftKey;\n\n // forward touch preventDefaults\n var self = this;\n e.preventDefault = function() {\n self.scrolling = false;\n self.firstXY = null;\n cte.preventDefault();\n };\n return e;\n },\n processTouches: function(inEvent, inFunction) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = inEvent;\n for (var i = 0, t; i < tl.length; i++) {\n t = tl[i];\n inFunction.call(this, this.touchToPointer(t));\n }\n },\n\n // For single axis scrollers, determines whether the element should emit\n // pointer events or behave as a scroller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n var ret;\n var st = inEvent.currentTarget._scrollType;\n if (st === 0) {\n\n // this element is a `touch-action: none`, should never scroll\n ret = false;\n } else if (st === AUTO) {\n\n // this element is a `touch-action: auto`, should always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n\n var dy = t.clientY - this.firstXY.Y;\n var dya = Math.abs(dy);\n var dx = t.clientX - this.firstXY.X;\n var dxa = Math.abs(dx);\n\n var up = st & UP;\n var down = st & DOWN;\n var left = st & LEFT;\n var right = st & RIGHT;\n\n if (left && right) {\n\n // should scroll on the x axis\n ret = dxa > dya;\n } else if (left) {\n\n // should scroll left\n ret = dxa > dya && dx > 0;\n } else if (right) {\n\n // should scroll right\n ret = dxa > dya && dx < 0;\n }\n\n if (!ret) {\n if (up && down) {\n\n // should scroll on the y axis\n ret = dxa < dya;\n } else if (up) {\n\n // should scroll up\n ret = dxa < dya && dy > 0;\n } else if (down) {\n\n // should scroll down\n ret = dxa < dya && dy < 0;\n }\n }\n\n }\n this.firstXY = null;\n return ret;\n }\n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n }\n }\n },\n\n // In some instances, a touchstart can happen without a touchend. This\n // leaves the pointermap in a broken state.\n // Therefore, on every touchstart, we remove the touches that did not fire a\n // touchend event.\n // To keep state globally consistent, we fire a\n // pointercancel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = inEvent.touches;\n\n // pointermap.size should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointermap$1.size >= tl.length) {\n var d = [];\n pointermap$1.forEach(function(value, key) {\n\n // Never remove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smaller than their pointerId, which is the\n // index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value.out;\n d.push(p);\n }\n }, this);\n d.forEach(this.cancelOut, this);\n }\n },\n touchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.processTouches(inEvent, this.overDown);\n }\n },\n overDown: function(inPointer) {\n pointermap$1.set(inPointer.pointerId, {\n target: inPointer.target,\n out: inPointer,\n outTarget: inPointer.target\n });\n dispatcher.enterOver(inPointer);\n dispatcher.down(inPointer);\n },\n\n // Called when pressure or tilt changes without the x/y changing\n touchforcechange: function(inEvent) {\n this.touchmove(inEvent);\n },\n touchmove: function(inEvent) {\n if (!this.scrolling) {\n if (this.shouldScroll(inEvent)) {\n this.scrolling = true;\n this.touchcancel(inEvent);\n } else {\n inEvent.preventDefault();\n this.processTouches(inEvent, this.moveOverOut);\n }\n }\n },\n moveOverOut: function(inPointer) {\n var event = inPointer;\n var pointer = pointermap$1.get(event.pointerId);\n\n // a finger drifted off the screen, ignore it\n if (!pointer) {\n return;\n }\n var outEvent = pointer.out;\n var outTarget = pointer.outTarget;\n dispatcher.move(event);\n if (outEvent && outTarget !== event.target) {\n outEvent.relatedTarget = event.target;\n event.relatedTarget = outTarget;\n\n // recover from retargeting by shadow\n outEvent.target = outTarget;\n if (event.target) {\n dispatcher.leaveOut(outEvent);\n dispatcher.enterOver(event);\n } else {\n\n // clean up case when finger leaves the screen\n event.target = outTarget;\n event.relatedTarget = null;\n this.cancelOut(event);\n }\n }\n pointer.out = event;\n pointer.outTarget = event.target;\n },\n touchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent, this.upOut);\n },\n upOut: function(inPointer) {\n if (!this.scrolling) {\n dispatcher.up(inPointer);\n dispatcher.leaveOut(inPointer);\n }\n this.cleanUpPointer(inPointer);\n },\n touchcancel: function(inEvent) {\n this.processTouches(inEvent, this.cancelOut);\n },\n cancelOut: function(inPointer) {\n dispatcher.cancel(inPointer);\n dispatcher.leaveOut(inPointer);\n this.cleanUpPointer(inPointer);\n },\n cleanUpPointer: function(inPointer) {\n pointermap$1.delete(inPointer.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n\n // prevent synth mouse events from creating pointer events\n dedupSynthMouse: function(inEvent) {\n var lts = mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n\n // only the primary finger will synth mouse events\n if (this.isPrimaryTouch(t)) {\n\n // remember x/y of last touch\n var lt = { x: t.clientX, y: t.clientY };\n lts.push(lt);\n var fn = (function(lts, lt) {\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n INSTALLER = new Installer(touchEvents.elementAdded, touchEvents.elementRemoved,\n touchEvents.elementChanged, touchEvents);\n\n var pointermap$2 = dispatcher.pointermap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent &&\n typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerOut',\n 'MSPointerOver',\n 'MSPointerCancel',\n 'MSGotPointerCapture',\n 'MSLostPointerCapture'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEvent;\n if (HAS_BITMAP_TYPE) {\n e = dispatcher.cloneEvent(inEvent);\n e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n return e;\n },\n cleanup: function(id) {\n pointermap$2.delete(id);\n },\n MSPointerDown: function(inEvent) {\n pointermap$2.set(inEvent.pointerId, inEvent);\n var e = this.prepareEvent(inEvent);\n dispatcher.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerOut: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.leaveOut(e);\n },\n MSPointerOver: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n },\n MSPointerCancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n },\n MSLostPointerCapture: function(inEvent) {\n var e = dispatcher.makeEvent('lostpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n },\n MSGotPointerCapture: function(inEvent) {\n var e = dispatcher.makeEvent('gotpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n }\n };\n\n function applyPolyfill() {\n\n // only activate if this platform does not have pointer events\n if (!window.PointerEvent) {\n window.PointerEvent = PointerEvent;\n\n if (window.navigator.msPointerEnabled) {\n var tp = window.navigator.msMaxTouchPoints;\n Object.defineProperty(window.navigator, 'maxTouchPoints', {\n value: tp,\n enumerable: true\n });\n dispatcher.registerSource('ms', msEvents);\n } else {\n Object.defineProperty(window.navigator, 'maxTouchPoints', {\n value: 0,\n enumerable: true\n });\n dispatcher.registerSource('mouse', mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerSource('touch', touchEvents);\n }\n }\n\n dispatcher.register(document);\n }\n }\n\n var n = window.navigator;\n var s;\n var r;\n var h;\n function assertActive(id) {\n if (!dispatcher.pointermap.has(id)) {\n var error = new Error('NotFoundError');\n error.name = 'NotFoundError';\n throw error;\n }\n }\n function assertConnected(elem) {\n var parent = elem.parentNode;\n while (parent && parent !== elem.ownerDocument) {\n parent = parent.parentNode;\n }\n if (!parent) {\n var error = new Error('InvalidStateError');\n error.name = 'InvalidStateError';\n throw error;\n }\n }\n function inActiveButtonState(id) {\n var p = dispatcher.pointermap.get(id);\n return p.buttons !== 0;\n }\n if (n.msPointerEnabled) {\n s = function(pointerId) {\n assertActive(pointerId);\n assertConnected(this);\n if (inActiveButtonState(pointerId)) {\n dispatcher.setCapture(pointerId, this, true);\n this.msSetPointerCapture(pointerId);\n }\n };\n r = function(pointerId) {\n assertActive(pointerId);\n dispatcher.releaseCapture(pointerId, true);\n this.msReleasePointerCapture(pointerId);\n };\n } else {\n s = function setPointerCapture(pointerId) {\n assertActive(pointerId);\n assertConnected(this);\n if (inActiveButtonState(pointerId)) {\n dispatcher.setCapture(pointerId, this);\n }\n };\n r = function releasePointerCapture(pointerId) {\n assertActive(pointerId);\n dispatcher.releaseCapture(pointerId);\n };\n }\n h = function hasPointerCapture(pointerId) {\n return !!dispatcher.captureInfo[pointerId];\n };\n\n function applyPolyfill$1() {\n if (window.Element && !Element.prototype.setPointerCapture) {\n Object.defineProperties(Element.prototype, {\n 'setPointerCapture': {\n value: s\n },\n 'releasePointerCapture': {\n value: r\n },\n 'hasPointerCapture': {\n value: h\n }\n });\n }\n }\n\n applyAttributeStyles();\n applyPolyfill();\n applyPolyfill$1();\n\n var pointerevents = {\n dispatcher: dispatcher,\n Installer: Installer,\n PointerEvent: PointerEvent,\n PointerMap: PointerMap,\n targetFinding: targeting\n };\n\n return pointerevents;\n\n}));","export class DotNetNumberFormat {\r\n public NegativeSign: string;\r\n public PositiveSign: string;\r\n public NegativeInfinitySymbol: string;\r\n public PositiveInfinitySymbol: string;\r\n public NaNSymbol: string;\r\n public CurrencyDecimalDigits: number;\r\n public CurrencyGroupSizes: number[];\r\n public CurrencyNegativePattern: number;\r\n public CurrencyPositivePattern: number;\r\n public CurrencyDecimalSeparator: string;\r\n public CurrencyGroupSeparator: string;\r\n public CurrencySymbol: string;\r\n public NumberDecimalDigits: number;\r\n public NumberGroupSizes: number[];\r\n public NumberNegativePattern: number;\r\n public NumberDecimalSeparator: string;\r\n public NumberGroupSeparator: string;\r\n public PercentDecimalDigits: number;\r\n public PercentGroupSizes: number[];\r\n public PercentNegativePattern: number;\r\n public PercentPositivePattern: number;\r\n public PercentDecimalSeparator: string;\r\n public PercentGroupSeparator: string;\r\n public PercentSymbol: string;\r\n public PerMilleSymbol: string;\r\n}\r\nexport class DotNetCalendar {\r\n public GetEra: (d: Date) => number;\r\n public Eras: number[];\r\n public EraNames: string[];\r\n}\r\nexport class DotNetDateTimeFormat {\r\n public GetEraName: (era: number) => string;\r\n public Calendar: DotNetCalendar;\r\n public NativeCalendarName: string;\r\n public AbbreviatedDayNames: string[];\r\n public DayNames: string[];\r\n public ShortestDayNames: string[];\r\n public MonthNames: string[];\r\n public MonthGenitiveNames: string[];\r\n public AbbreviatedMonthNames: string[];\r\n public AbbreviatedMonthGenitiveNames: string[];\r\n public AMDesignator: string;\r\n public PMDesignator: string;\r\n public DateSeparator: string;\r\n public TimeSeparator: string;\r\n public CalendarWeekRule: number;\r\n public FirstDayOfWeek: number;\r\n public FullDateTimePattern: string;\r\n public LongDatePattern: string;\r\n public LongTimePattern: string;\r\n public MonthDayPattern: string;\r\n public RFC1123Pattern: string;\r\n public ShortDatePattern: string;\r\n public ShortTimePattern: string;\r\n public SortableDateTimePattern: string;\r\n public YearMonthPattern: string;\r\n public UniversalSortableDateTimePattern: string;\r\n public ShortQuarter: string;\r\n public LongQuarter: string;\r\n public Quarters: string[];\r\n}\r\n\r\nexport default class FormatDotNetStyle {\r\n public static numberCultures = {};\r\n private numberCulture: DotNetNumberFormat = null;\r\n public static dateTimeCultures = {};\r\n private static dateTimeCultureEnUS: DotNetDateTimeFormat = null;\r\n private dateTimeCulture: DotNetDateTimeFormat = null;\r\n\r\n public static decimalCode: string = '\\x01';\r\n public static groupCode: string = '\\x02';\r\n public static zeroCode: string = '\\x03';\r\n public static poundCode: string = '\\x04';\r\n public static percentCode: string = '\\x05';\r\n public static permilleCode: string = '\\x06';\r\n public static upperECode: string = '\\x1F';\r\n public static lowerECode: string = '\\x1E';\r\n public static sectionCode: string = '\\x09';\r\n private static defaultGroupSizes: number[] = [3];\r\n public static EE: string[] = [\r\n FormatDotNetStyle.upperECode + '+' + FormatDotNetStyle.zeroCode,\r\n FormatDotNetStyle.lowerECode + '+' + FormatDotNetStyle.zeroCode,\r\n FormatDotNetStyle.upperECode + '-' + FormatDotNetStyle.zeroCode,\r\n FormatDotNetStyle.lowerECode + '-' + FormatDotNetStyle.zeroCode,\r\n FormatDotNetStyle.upperECode + FormatDotNetStyle.zeroCode,\r\n FormatDotNetStyle.lowerECode + FormatDotNetStyle.zeroCode\r\n ];\r\n private localizedGroupSize = FormatDotNetStyle.defaultGroupSizes;\r\n private localizedDecimalSymbol: string = '.';\r\n private localizedGroupSymbol: string = ',';\r\n private localizedPercentSymbol: string = '%';\r\n private localizedPermilleSymbol: string = '‰';\r\n private zeroSymbol: string = '0';\r\n private poundSymbol: string = '#';\r\n private percentSymbol: string = '%';\r\n private permilleSymbol: string = '‰';\r\n private sectionSymbol: string = ';';\r\n\r\n private static minusCode: string = '\\x02';\r\n private static pCode: string = '\\x03';\r\n private static dCode: string = '\\x04';\r\n private static ddCode: string = '\\x04\\x04';\r\n private static dddCode: string = '\\x04\\x04\\x04';\r\n private static ddddCode: string = '\\x04\\x04\\x04\\x04';\r\n private static fCode: string = '\\x05';\r\n private static ffCode: string = '\\x05\\x05';\r\n private static fffCode: string = '\\x05\\x05\\x05';\r\n private static ffffCode: string = '\\x05\\x05\\x05\\x05';\r\n private static fffffCode: string = '\\x05\\x05\\x05\\x05\\x05';\r\n private static ffffffCode: string = '\\x05\\x05\\x05\\x05\\x05\\x05';\r\n private static fffffffCode: string = '\\x05\\x05\\x05\\x05\\x05\\x05\\x05';\r\n private static FCode: string = '\\x06';\r\n private static FFCode: string = '\\x06\\x06';\r\n private static FFFCode: string = '\\x06\\x06\\x06';\r\n private static FFFFCode: string = '\\x06\\x06\\x06\\x06';\r\n private static FFFFFCode: string = '\\x06\\x06\\x06\\x06\\x06';\r\n private static FFFFFFCode: string = '\\x06\\x06\\x06\\x06\\x06\\x06';\r\n private static FFFFFFFCode: string = '\\x06\\x06\\x06\\x06\\x06\\x06\\x06';\r\n private static gCode: string = '\\x08';\r\n private static ggCode: string = '\\x08\\x08';\r\n private static hCode: string = '\\x0B';\r\n private static hhCode: string = '\\x0B\\x0B';\r\n private static HCode: string = '\\x0C';\r\n private static HHCode: string = '\\x0C\\x0C';\r\n private static KCode: string = '\\x0E';\r\n private static mCode: string = '\\x0F';\r\n private static mmCode: string = '\\x0F\\x0F';\r\n private static MCode: string = '\\x10';\r\n private static MMCode: string = '\\x10\\x10';\r\n private static MMMCode: string = '\\x10\\x10\\x10';\r\n private static MMMMCode: string = '\\x10\\x10\\x10\\x10';\r\n private static sCode: string = '\\x11';\r\n private static ssCode: string = '\\x11\\x11';\r\n private static tCode: string = '\\x12';\r\n private static ttCode: string = '\\x12\\x12';\r\n private static yCode: string = '\\x13';\r\n private static yyCode: string = '\\x13\\x13';\r\n private static yyyCode: string = '\\x13\\x13\\x13';\r\n private static yyyyCode: string = '\\x13\\x13\\x13\\x13';\r\n private static yyyyyCode: string = '\\x13\\x13\\x13\\x13\\x13';\r\n private static zCode: string = '\\x14';\r\n private static zzCode: string = '\\x14\\x14';\r\n private static zzzCode: string = '\\x14\\x14\\x14';\r\n private static defaultCultureCode: string = 'en-us';\r\n\r\n private position: number = 0;\r\n private actualPosition: number = 0;\r\n private source: string = '';\r\n private digitCount = 0;\r\n private static trimEnd0(s: string): string {\r\n if (s.length == 0) return s;\r\n let len = s.length - 1;\r\n while (len >= 0 && s[len] == '0') len--;\r\n if (len < s.length) return s.substr(0, len + 1);\r\n return s;\r\n }\r\n private static getDigitAt(s: string, i: number): number {\r\n const c = s.charCodeAt(i);\r\n const d = c - '0'.charCodeAt(0);\r\n return d < 0 || d > 9 ? -1 : d;\r\n }\r\n private static isDigitAt(s: string, i: number): boolean {\r\n const c = s.charCodeAt(i);\r\n return c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0);\r\n }\r\n private static isLetterAt(s: string, i: number): boolean {\r\n const c = s.charCodeAt(i);\r\n return c > 128 || (c < 128 && ((c >= 'A'.charCodeAt(0) && c <= 'Z'.charCodeAt(0)) || (c >= 'a'.charCodeAt(0) && c <= 'z'.charCodeAt(0))));\r\n }\r\n private static pad0(o: number, n: number): string {\r\n let s = Math.abs(o).toString();\r\n const m = o < 0;\r\n for (let i = s.length; i < n; i++) s = '0' + s;\r\n if (m) s = '-' + s;\r\n return s;\r\n }\r\n private static pad0t(o: number, n: number): string {\r\n return FormatDotNetStyle.trimEnd0(FormatDotNetStyle.pad0(o, n));\r\n }\r\n private match(format: string, code: string): boolean {\r\n const i = format.indexOf(code, this.position);\r\n if (i != this.position) return false;\r\n this.position += code.length;\r\n return true;\r\n }\r\n private trimF(s: string): string {\r\n if (s == '') return s;\r\n const last = s.length - 1;\r\n if (s[last] == '.' || s.substr(last, 1) == this.numberCulture.NumberDecimalSeparator) s = s.substr(0, last);\r\n return s;\r\n }\r\n public static findIn(s: string, ss: string[]): number {\r\n for (let i = 0; i < ss.length; i++) if (s.toUpperCase() == ss[i].toUpperCase()) return i;\r\n return -1;\r\n }\r\n\r\n constructor(cultureCode: string = FormatDotNetStyle.defaultCultureCode) {\r\n cultureCode = cultureCode.toLowerCase();\r\n this.numberCulture = FormatDotNetStyle.numberCultures[cultureCode];\r\n if (this.numberCulture == null && cultureCode.length > 2) {\r\n cultureCode = cultureCode.substr(0, 2);\r\n this.numberCulture = FormatDotNetStyle.numberCultures[cultureCode];\r\n }\r\n if (this.numberCulture == null) this.numberCulture = FormatDotNetStyle.numberCultures[FormatDotNetStyle.defaultCultureCode];\r\n\r\n FormatDotNetStyle.dateTimeCultureEnUS = FormatDotNetStyle.dateTimeCultures[FormatDotNetStyle.defaultCultureCode];\r\n this.dateTimeCulture = FormatDotNetStyle.dateTimeCultures[cultureCode];\r\n if (this.dateTimeCulture == null && cultureCode.length > 2) {\r\n cultureCode = cultureCode.substr(0, 2);\r\n this.dateTimeCulture = FormatDotNetStyle.dateTimeCultures[cultureCode];\r\n }\r\n if (this.dateTimeCulture == null) this.dateTimeCulture = FormatDotNetStyle.dateTimeCultures[FormatDotNetStyle.defaultCultureCode];\r\n }\r\n public getMarkerWord(format: string): string {\r\n const p = this.position;\r\n const s = this.source;\r\n this.actualPosition = 0;\r\n this.source = format;\r\n const w = this.scanWord();\r\n this.actualPosition = p;\r\n this.source = s;\r\n return w;\r\n }\r\n public static findWord(s: string, w: string, start: number): number {\r\n if (w.length == 0) return -1;\r\n let p = s.indexOf(w, start);\r\n while (p >= 0) {\r\n if ((p == 0 || !FormatDotNetStyle.isLetterAt(s, p - 1)) && (p + w.length >= s.length || !FormatDotNetStyle.isLetterAt(s, p + w.length)))\r\n return p;\r\n p = s.indexOf(w, p + w.length);\r\n }\r\n return -1;\r\n }\r\n public static replaceWord(s: string, w: string, r: string, start: number): string {\r\n if (w.length == 0) return s;\r\n let p = FormatDotNetStyle.findWord(s, w, start);\r\n while (p >= 0) {\r\n s = s.substr(0, p) + r + s.substr(p + w.length);\r\n p = FormatDotNetStyle.findWord(s, w, p + r.length);\r\n }\r\n return s;\r\n }\r\n public static findAny(datetime: string, list: string[]): number {\r\n datetime = datetime.toUpperCase();\r\n for (let i = 0; i < list.length; i++) {\r\n if (list[i].length < 3) continue;\r\n const n = list[i].toUpperCase();\r\n if (FormatDotNetStyle.findWord(datetime, n, 0) >= 0) return i;\r\n }\r\n return -1;\r\n }\r\n public static findMonthByName(datetime: string, c: DotNetDateTimeFormat): number {\r\n let month = FormatDotNetStyle.findAny(datetime, c.MonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findAny(datetime, c.MonthNames);\r\n if (month < 0) month = FormatDotNetStyle.findAny(datetime, c.AbbreviatedMonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findAny(datetime, c.AbbreviatedMonthNames);\r\n return month;\r\n }\r\n public static findMonthInCulture(m: string, c: DotNetDateTimeFormat): number {\r\n let month = FormatDotNetStyle.findIn(m, c.MonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.MonthNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.AbbreviatedMonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.AbbreviatedMonthNames);\r\n if (month >= 0 || c == FormatDotNetStyle.dateTimeCultureEnUS) return month;\r\n c = FormatDotNetStyle.dateTimeCultureEnUS;\r\n month = FormatDotNetStyle.findIn(m, c.MonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.MonthNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.AbbreviatedMonthGenitiveNames);\r\n if (month < 0) month = FormatDotNetStyle.findIn(m, c.AbbreviatedMonthNames);\r\n return month;\r\n }\r\n\r\n public formatQuarter(format: string, quarter: number): string {\r\n if (format.indexOf('QQQQ') !== -1) {\r\n format = format.replaceAll('QQQQ', this.dateTimeCulture.LongQuarter + ' ' + this.dateTimeCulture.Quarters[quarter - 1]);\r\n }\r\n\r\n if (format.indexOf('QQ') !== -1) {\r\n format = format.replaceAll('QQ', this.dateTimeCulture.ShortQuarter + ' ' + this.dateTimeCulture.Quarters[quarter - 1]);\r\n }\r\n return format;\r\n }\r\n\r\n public formatDateTime(format: string, datetime: Date): string {\r\n if (format.length > 1 || 'dDfFgGmMroORstTuUyY'.indexOf(format) < 0) return this.formatCustomDateTime(format, datetime);\r\n if (format.length == 0) format = 'G';\r\n if (format == 'd') return this.formatCustomDateTime(this.dateTimeCulture.ShortDatePattern, datetime);\r\n if (format == 'D') return this.formatCustomDateTime(this.dateTimeCulture.LongDatePattern, datetime);\r\n if (format == 'f')\r\n return this.formatCustomDateTime(this.dateTimeCulture.LongDatePattern + ' ' + this.dateTimeCulture.ShortTimePattern, datetime);\r\n if (format == 'F') return this.formatCustomDateTime(this.dateTimeCulture.FullDateTimePattern, datetime);\r\n if (format == 'g')\r\n return this.formatCustomDateTime(this.dateTimeCulture.ShortDatePattern + ' ' + this.dateTimeCulture.ShortTimePattern, datetime);\r\n if (format == 'm' || format == 'M') return this.formatCustomDateTime(this.dateTimeCulture.MonthDayPattern, datetime);\r\n if (format == 'o' || format == 'O') return this.formatCustomDateTime(\"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK\", datetime);\r\n if (format == 'r' || format == 'R') {\r\n const b = this.dateTimeCulture;\r\n this.dateTimeCulture = FormatDotNetStyle.dateTimeCultureEnUS;\r\n const r = this.formatCustomDateTime(this.dateTimeCulture.RFC1123Pattern, datetime);\r\n this.dateTimeCulture = b;\r\n return r;\r\n }\r\n if (format == 's') return this.formatCustomDateTime(this.dateTimeCulture.SortableDateTimePattern, datetime);\r\n if (format == 't') return this.formatCustomDateTime(this.dateTimeCulture.ShortTimePattern, datetime);\r\n if (format == 'T') return this.formatCustomDateTime(this.dateTimeCulture.LongTimePattern, datetime);\r\n if (format == 'u') return this.formatCustomDateTime(this.dateTimeCulture.UniversalSortableDateTimePattern, datetime);\r\n if (format == 'U') {\r\n datetime = new Date(\r\n datetime.getUTCFullYear(),\r\n datetime.getUTCMonth(),\r\n datetime.getUTCDate(),\r\n datetime.getUTCHours(),\r\n datetime.getUTCMinutes(),\r\n datetime.getUTCSeconds(),\r\n datetime.getUTCMilliseconds()\r\n );\r\n return this.formatCustomDateTime(this.dateTimeCulture.FullDateTimePattern, datetime);\r\n }\r\n if (format == 'y' || format == 'Y') return this.formatCustomDateTime(this.dateTimeCulture.YearMonthPattern, datetime);\r\n /*if (format == \"G\")*/\r\n return this.formatCustomDateTime(this.dateTimeCulture.ShortDatePattern + ' ' + this.dateTimeCulture.LongTimePattern, datetime);\r\n }\r\n public formatCustomDateTime(format: string, datetime: Date): string {\r\n const unescaped = this.unescapeDateTime(format);\r\n let s = '';\r\n this.position = 0;\r\n while (this.position < unescaped.length) {\r\n if (this.match(unescaped, FormatDotNetStyle.ddddCode)) {\r\n s += this.dateTimeCulture.DayNames[datetime.getDay()];\r\n while (this.match(unescaped, FormatDotNetStyle.dCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.dddCode)) s += this.dateTimeCulture.AbbreviatedDayNames[datetime.getDay()];\r\n else if (this.match(unescaped, FormatDotNetStyle.ddCode)) s += FormatDotNetStyle.pad0(datetime.getDate(), 2);\r\n else if (this.match(unescaped, FormatDotNetStyle.dCode)) s += datetime.getDate();\r\n else if (this.match(unescaped, FormatDotNetStyle.fffffffCode)) s += FormatDotNetStyle.pad0(datetime.getMilliseconds() * 10000, 7);\r\n else if (this.match(unescaped, FormatDotNetStyle.ffffffCode)) s += FormatDotNetStyle.pad0(datetime.getMilliseconds() * 1000, 6);\r\n else if (this.match(unescaped, FormatDotNetStyle.fffffCode)) s += FormatDotNetStyle.pad0(datetime.getMilliseconds() * 100, 5);\r\n else if (this.match(unescaped, FormatDotNetStyle.ffffCode)) s += FormatDotNetStyle.pad0(datetime.getMilliseconds() * 10, 4);\r\n else if (this.match(unescaped, FormatDotNetStyle.fffCode)) s += FormatDotNetStyle.pad0(datetime.getMilliseconds(), 3);\r\n else if (this.match(unescaped, FormatDotNetStyle.ffCode)) s += FormatDotNetStyle.pad0(Math.floor(datetime.getMilliseconds() / 10.0), 2);\r\n else if (this.match(unescaped, FormatDotNetStyle.fCode)) s += Math.floor(datetime.getMilliseconds() / 100.0);\r\n else if (this.match(unescaped, FormatDotNetStyle.FFFFFFFCode)) {\r\n s += FormatDotNetStyle.pad0t(datetime.getMilliseconds() * 10000, 7);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FFFFFFCode)) {\r\n s += FormatDotNetStyle.pad0t(datetime.getMilliseconds() * 1000, 6);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FFFFFCode)) {\r\n s += FormatDotNetStyle.pad0t(datetime.getMilliseconds() * 100, 5);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FFFFCode)) {\r\n s += FormatDotNetStyle.pad0t(datetime.getMilliseconds() * 10, 4);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FFFCode)) {\r\n s += FormatDotNetStyle.pad0t(datetime.getMilliseconds(), 3);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FFCode)) {\r\n s += FormatDotNetStyle.pad0t(Math.floor(datetime.getMilliseconds() / 10.0), 2);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FCode)) {\r\n s += FormatDotNetStyle.pad0t(Math.floor(datetime.getMilliseconds() / 100.0), 1);\r\n s = this.trimF(s);\r\n } else if (this.match(unescaped, FormatDotNetStyle.ggCode) || this.match(unescaped, FormatDotNetStyle.gCode)) {\r\n s += this.dateTimeCulture.GetEraName(this.dateTimeCulture.Calendar.GetEra(datetime));\r\n while (this.match(unescaped, FormatDotNetStyle.gCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.hhCode)) {\r\n s += FormatDotNetStyle.pad0(FormatDotNetStyle.geth112(datetime.getHours()), 2);\r\n while (this.match(unescaped, FormatDotNetStyle.hCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.hCode)) s += FormatDotNetStyle.geth112(datetime.getHours());\r\n else if (this.match(unescaped, FormatDotNetStyle.HHCode)) {\r\n s += FormatDotNetStyle.pad0(datetime.getHours(), 2);\r\n while (this.match(unescaped, FormatDotNetStyle.HCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.HCode)) s += datetime.getHours();\r\n else if (this.match(unescaped, FormatDotNetStyle.KCode)) {\r\n } else if (this.match(unescaped, FormatDotNetStyle.mmCode)) {\r\n s += FormatDotNetStyle.pad0(datetime.getMinutes(), 2);\r\n while (this.match(unescaped, FormatDotNetStyle.mCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.mCode)) s += datetime.getMinutes();\r\n else if (this.match(unescaped, FormatDotNetStyle.MMMMCode)) {\r\n s += FormatDotNetStyle.monthDayInFormat(unescaped)\r\n ? this.dateTimeCulture.MonthGenitiveNames[datetime.getMonth()]\r\n : this.dateTimeCulture.MonthNames[datetime.getMonth()];\r\n while (this.match(unescaped, FormatDotNetStyle.MCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.MMMCode)) {\r\n s += FormatDotNetStyle.monthDayInFormat(unescaped)\r\n ? this.dateTimeCulture.AbbreviatedMonthGenitiveNames[datetime.getMonth()]\r\n : this.dateTimeCulture.AbbreviatedMonthNames[datetime.getMonth()];\r\n } else if (this.match(unescaped, FormatDotNetStyle.MMCode)) {\r\n s += FormatDotNetStyle.pad0(datetime.getMonth() + 1, 2);\r\n } else if (this.match(unescaped, FormatDotNetStyle.MCode)) s += datetime.getMonth() + 1;\r\n else if (this.match(unescaped, FormatDotNetStyle.ssCode)) {\r\n s += FormatDotNetStyle.pad0(datetime.getSeconds(), 2);\r\n while (this.match(unescaped, FormatDotNetStyle.sCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.sCode)) s += datetime.getSeconds();\r\n else if (this.match(unescaped, FormatDotNetStyle.ttCode)) {\r\n s += datetime.getHours() < 12 ? this.dateTimeCulture.AMDesignator : this.dateTimeCulture.PMDesignator;\r\n while (this.match(unescaped, FormatDotNetStyle.tCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.tCode)) {\r\n const am = this.dateTimeCulture.AMDesignator.length > 0 ? '' + this.dateTimeCulture.AMDesignator[0] : '';\r\n const pm = this.dateTimeCulture.PMDesignator.length > 0 ? '' + this.dateTimeCulture.PMDesignator[0] : '';\r\n s += datetime.getHours() < 12 ? am : pm;\r\n } else if (this.match(unescaped, FormatDotNetStyle.yyyyyCode)) {\r\n let n = 0;\r\n while (this.match(unescaped, FormatDotNetStyle.yCode)) n++;\r\n s += FormatDotNetStyle.pad0(datetime.getFullYear(), 5 + n);\r\n } else if (this.match(unescaped, FormatDotNetStyle.yyyyCode)) s += FormatDotNetStyle.pad0(datetime.getFullYear(), 4);\r\n else if (this.match(unescaped, FormatDotNetStyle.yyyCode)) s += FormatDotNetStyle.pad0(datetime.getFullYear(), 3);\r\n else if (this.match(unescaped, FormatDotNetStyle.yyCode)) s += FormatDotNetStyle.pad0(datetime.getFullYear() % 100, 2);\r\n else if (this.match(unescaped, FormatDotNetStyle.yCode)) s += datetime.getFullYear() % 100;\r\n else if (this.match(unescaped, FormatDotNetStyle.zzzCode)) {\r\n if (datetime.getTimezoneOffset() < 0) s += '+';\r\n s +=\r\n FormatDotNetStyle.pad0((-1 * datetime.getTimezoneOffset()) / 60, 2) +\r\n ':' +\r\n FormatDotNetStyle.pad0(datetime.getTimezoneOffset() % 60, 2);\r\n while (this.match(unescaped, FormatDotNetStyle.zCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.zzCode)) {\r\n if (datetime.getTimezoneOffset() < 0) s += '+';\r\n s += FormatDotNetStyle.pad0((-1 * datetime.getTimezoneOffset()) / 60, 2);\r\n } else if (this.match(unescaped, FormatDotNetStyle.zCode)) {\r\n if (datetime.getTimezoneOffset() < 0) s += '+';\r\n s += (-1 * datetime.getTimezoneOffset()) / 60;\r\n } else if (this.match(unescaped, FormatDotNetStyle.pCode)) {\r\n } else {\r\n s += unescaped[this.position];\r\n this.position++;\r\n }\r\n }\r\n return s;\r\n }\r\n private static geth112(h023: number): number {\r\n if (h023 == 0 || h023 == 12) return 12;\r\n if (h023 < 12) return h023;\r\n return h023 - 12;\r\n }\r\n private static monthDayInFormat(unescaped: string): boolean {\r\n for (let i = 0; i < unescaped.length; i++) {\r\n let cp = ' ';\r\n let cnn = ' ';\r\n if (i > 0) cp = unescaped.substr(i - 1, 1);\r\n if (i > 2 && i < unescaped.length - 2) cnn = unescaped.substr(i + 2, 1);\r\n if (unescaped.indexOf(FormatDotNetStyle.dCode, i) == i && cp != FormatDotNetStyle.dCode && cnn != FormatDotNetStyle.dCode) return true;\r\n }\r\n return false;\r\n }\r\n private unescapeDateTime(format: string): string {\r\n let unescaped = '';\r\n let sq = false;\r\n let dq = false;\r\n for (let i = 0; i < format.length; i++) {\r\n if (sq) {\r\n if (format[i] == \"'\") sq = false;\r\n else unescaped += format[i];\r\n } else if (dq) {\r\n if (format[i] == '\"') dq = false;\r\n else unescaped += format[i];\r\n } else {\r\n if (format[i] == \"'\") {\r\n sq = true;\r\n } else if (format[i] == '\"') {\r\n dq = true;\r\n } else if (format[i] == '\\\\') {\r\n if (i < format.length - 1) {\r\n i++;\r\n unescaped += format[i];\r\n }\r\n } else {\r\n if (format[i] == '%') unescaped += FormatDotNetStyle.pCode;\r\n else if (format[i] == '/') unescaped += this.dateTimeCulture.DateSeparator;\r\n else if (format[i] == ':') unescaped += this.dateTimeCulture.TimeSeparator;\r\n else if (format[i] == 'd') unescaped += FormatDotNetStyle.dCode;\r\n else if (format[i] == 'f') unescaped += FormatDotNetStyle.fCode;\r\n else if (format[i] == 'F') unescaped += FormatDotNetStyle.FCode;\r\n else if (format[i] == 'g') unescaped += FormatDotNetStyle.gCode;\r\n else if (format[i] == 'h') unescaped += FormatDotNetStyle.hCode;\r\n else if (format[i] == 'H') unescaped += FormatDotNetStyle.HCode;\r\n else if (format[i] == 'K') unescaped += FormatDotNetStyle.KCode;\r\n else if (format[i] == 'm') unescaped += FormatDotNetStyle.mCode;\r\n else if (format[i] == 'M') unescaped += FormatDotNetStyle.MCode;\r\n else if (format[i] == 's') unescaped += FormatDotNetStyle.sCode;\r\n else if (format[i] == 't') unescaped += FormatDotNetStyle.tCode;\r\n else if (format[i] == 'y') unescaped += FormatDotNetStyle.yCode;\r\n else if (format[i] == 'z') unescaped += FormatDotNetStyle.zCode;\r\n else unescaped += format[i];\r\n }\r\n }\r\n }\r\n if (unescaped.indexOf(FormatDotNetStyle.pCode) >= 0) {\r\n const buffer = unescaped;\r\n unescaped = '';\r\n for (let i = 0; i < buffer.length; i++) {\r\n if (buffer.indexOf(FormatDotNetStyle.pCode, i) == i) {\r\n if (i >= buffer.length - 1) continue;\r\n if ('dfFghHKmMstyz'.indexOf(format[i + 1]) < 0) continue;\r\n unescaped += '' + FormatDotNetStyle.pCode + buffer[i + 1] + '' + FormatDotNetStyle.pCode;\r\n i++;\r\n } else {\r\n unescaped += buffer[i];\r\n }\r\n }\r\n }\r\n return unescaped;\r\n }\r\n\r\n public parseDateTime(datetime: string, format: string = null, { withCheck = false } = {}): Date {\r\n let year = -1;\r\n let month = -1;\r\n let day = -1;\r\n let hour = -1;\r\n let minute = -1;\r\n let second = -1;\r\n let millisecond = -1.0;\r\n if (format == null) {\r\n let datePattern = '';\r\n month = FormatDotNetStyle.findMonthByName(datetime, this.dateTimeCulture);\r\n if (month >= 0) datePattern = this.dateTimeCulture.LongDatePattern;\r\n if (datePattern == '') {\r\n month = FormatDotNetStyle.findMonthByName(datetime, FormatDotNetStyle.dateTimeCultureEnUS);\r\n if (month >= 0) datePattern = FormatDotNetStyle.dateTimeCultureEnUS.LongDatePattern;\r\n }\r\n if (datePattern == '') {\r\n const m = this.getMarkerWord(this.unescapeDateTime(this.dateTimeCulture.LongDatePattern));\r\n if (m.length > 0 && FormatDotNetStyle.findWord(datetime, m, 0) >= 0) datePattern = this.dateTimeCulture.LongDatePattern;\r\n }\r\n if (datePattern == '') {\r\n if (datetime.indexOf(this.dateTimeCulture.DateSeparator) >= 0) datePattern = this.dateTimeCulture.ShortDatePattern;\r\n else if (datetime.indexOf(FormatDotNetStyle.dateTimeCultureEnUS.DateSeparator) >= 0)\r\n datePattern = FormatDotNetStyle.dateTimeCultureEnUS.ShortDatePattern;\r\n }\r\n let timePattern = '';\r\n if (datetime.indexOf(this.dateTimeCulture.TimeSeparator) >= 0) timePattern = this.dateTimeCulture.LongTimePattern;\r\n else if (datetime.indexOf(FormatDotNetStyle.dateTimeCultureEnUS.TimeSeparator) >= 0)\r\n timePattern = FormatDotNetStyle.dateTimeCultureEnUS.LongTimePattern;\r\n format = datePattern + ' ' + timePattern;\r\n }\r\n\r\n let marker = this.getMarkerWord(this.unescapeDateTime(format));\r\n while (marker != '') {\r\n format = FormatDotNetStyle.replaceWord(format, marker, ' ', 0);\r\n datetime = FormatDotNetStyle.replaceWord(datetime, marker, ' ', 0);\r\n marker = this.getMarkerWord(this.unescapeDateTime(format));\r\n }\r\n\r\n this.source = datetime.toUpperCase();\r\n const unescaped = this.unescapeDateTime(format);\r\n this.position = 0;\r\n this.actualPosition = 0;\r\n while (this.position < unescaped.length && this.actualPosition < datetime.length) {\r\n if (this.match(unescaped, FormatDotNetStyle.yyyyCode) || this.match(unescaped, FormatDotNetStyle.yyyCode)) {\r\n year = this.scanNumber();\r\n if (year < 0) break;\r\n while (this.match(unescaped, FormatDotNetStyle.yCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.yyCode) || this.match(unescaped, FormatDotNetStyle.yCode)) {\r\n year = this.scanNumber();\r\n if (year < 0) break;\r\n if (this.digitCount <= 2) {\r\n if (year < 20) year += 2000;\r\n if (year < 100) year += 1900;\r\n }\r\n } else if (this.match(unescaped, FormatDotNetStyle.MMMCode)) {\r\n const m = this.scanWord();\r\n month = FormatDotNetStyle.findMonthInCulture(m, this.dateTimeCulture);\r\n if (month < 0) break;\r\n month++;\r\n while (this.match(unescaped, FormatDotNetStyle.MCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.MCode)) {\r\n month = this.scanNumber();\r\n while (this.match(unescaped, FormatDotNetStyle.MCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.dddCode)) {\r\n this.scanWord();\r\n while (this.match(unescaped, FormatDotNetStyle.dCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.dCode)) {\r\n day = this.scanNumber();\r\n if (day < 0) break;\r\n while (this.match(unescaped, FormatDotNetStyle.dCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.hCode) || this.match(unescaped, FormatDotNetStyle.HCode)) {\r\n hour = this.scanNumber();\r\n if (hour < 0 || hour > 23) break;\r\n while (this.match(unescaped, FormatDotNetStyle.hCode));\r\n while (this.match(unescaped, FormatDotNetStyle.HCode));\r\n if (hour > 0 && hour < 13) {\r\n if (\r\n (this.dateTimeCulture.PMDesignator.length > 0 &&\r\n FormatDotNetStyle.findWord(datetime, this.dateTimeCulture.PMDesignator, this.actualPosition) >= 0) ||\r\n FormatDotNetStyle.findWord(datetime, FormatDotNetStyle.dateTimeCultureEnUS.PMDesignator, this.actualPosition) >= 0\r\n ) {\r\n if (hour < 12) hour += 12;\r\n } else if (\r\n (this.dateTimeCulture.AMDesignator.length > 0 &&\r\n FormatDotNetStyle.findWord(datetime, this.dateTimeCulture.AMDesignator, this.actualPosition) >= 0) ||\r\n FormatDotNetStyle.findWord(datetime, FormatDotNetStyle.dateTimeCultureEnUS.AMDesignator, this.actualPosition) >= 0\r\n ) {\r\n if (hour == 12) hour = 0;\r\n }\r\n }\r\n } else if (this.match(unescaped, FormatDotNetStyle.mCode)) {\r\n minute = this.scanNumber();\r\n if (minute < 0) break;\r\n while (this.match(unescaped, FormatDotNetStyle.mCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.sCode)) {\r\n second = this.scanNumber();\r\n if (second < 0) break;\r\n while (this.match(unescaped, FormatDotNetStyle.sCode));\r\n\r\n if (\r\n this.actualPosition < this.source.length - 1 &&\r\n ':,.'.indexOf(this.source[this.actualPosition]) >= 0 &&\r\n (this.match(unescaped, FormatDotNetStyle.fCode) || this.match(unescaped, FormatDotNetStyle.FCode))\r\n ) {\r\n millisecond = this.scanNumber();\r\n if (millisecond < 0) break;\r\n let o = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.fCode)) o++;\r\n while (this.match(unescaped, FormatDotNetStyle.FCode)) o++;\r\n millisecond /= Math.pow(10, o - 3);\r\n } else {\r\n millisecond = 0;\r\n }\r\n } else {\r\n this.position++;\r\n }\r\n }\r\n\r\n if (year < 0 && month < 0 && day < 0 && hour < 0 && minute < 0 && second < 0 && millisecond < 0) return null;\r\n if (withCheck) {\r\n setDefault();\r\n const parts = [year, --month, day, hour, minute, second, millisecond];\r\n const date: Date = new Date(Number.NaN);\r\n for (let i = 0; i < FormatDotNetStyle.datePartNames.length; i++) {\r\n const partName = FormatDotNetStyle.datePartNames[i];\r\n const prevPartName = FormatDotNetStyle.datePartNames[i - 1];\r\n date[`set${partName}`](parts[i]);\r\n if (prevPartName && date[`get${prevPartName}`]() !== parts[i - 1]) {\r\n console.log(partName, parts[i], datetime, format);\r\n return new Date(Number.NaN);\r\n }\r\n }\r\n return date;\r\n } else {\r\n if (day > 31 && year <= 31) {\r\n const x = year;\r\n year = day;\r\n day = x;\r\n }\r\n if (month > 31 && year <= 12) {\r\n const x = year;\r\n year = month;\r\n month = x;\r\n }\r\n if (month > 12 && month <= 31 && day <= 12) {\r\n const x = month;\r\n month = day;\r\n day = x;\r\n }\r\n if (month > 12 && month <= 31 && day > 12 && year <= 12) {\r\n const x = month;\r\n month = year;\r\n year = month;\r\n }\r\n setDefault();\r\n return new Date(year, month - 1, day, hour, minute, second, millisecond);\r\n }\r\n\r\n function setDefault() {\r\n if (year < 0) year = 1;\r\n if (month < 0) month = 1;\r\n if (day < 0) day = 1;\r\n if (hour < 0) hour = 0;\r\n if (minute < 0) minute = 0;\r\n if (second < 0) second = 0;\r\n if (millisecond < 0) millisecond = 0;\r\n }\r\n }\r\n\r\n private static datePartNames = ['FullYear', 'Month', 'Date', 'Hours', 'Minutes', 'Seconds', 'Milliseconds'];\r\n\r\n public static toDigits(num: number): string {\r\n const s = num.toString().toUpperCase();\r\n let e = -1.0;\r\n let d = s;\r\n let ep = s.indexOf('E');\r\n if (ep >= 0) {\r\n d = s.substr(0, ep);\r\n if (s[ep + 1] == '+') ep++;\r\n e = parseInt(s.substr(ep + 1));\r\n }\r\n if (d.indexOf('.') >= 0) d = d.replace('.', '');\r\n if (e >= 0) {\r\n const pad = e + 1 - d.length;\r\n d += FormatDotNetStyle.formatMulti('0', pad);\r\n }\r\n return d;\r\n }\r\n public getNaNOrInfinitySymbol(d: number): string {\r\n if (d == Number.NEGATIVE_INFINITY) return this.numberCulture.NegativeInfinitySymbol;\r\n if (d == Number.POSITIVE_INFINITY) return this.numberCulture.PositiveInfinitySymbol;\r\n return this.numberCulture.NaNSymbol;\r\n }\r\n private static getActualPrecision(num: number): number {\r\n let precision = 0.0;\r\n const sampleE = num.toExponential().toUpperCase();\r\n const Ep = sampleE.indexOf('E');\r\n precision += Ep;\r\n if (sampleE[0] == '-') precision--;\r\n if (sampleE.indexOf('.') >= 0) precision--;\r\n if (sampleE[Ep + 1] == '-') precision += parseInt(sampleE.substr(Ep + 2));\r\n return precision;\r\n }\r\n private static getActualExponent(num: number): number {\r\n const sampleE = num.toExponential().toUpperCase();\r\n let Ep = sampleE.indexOf('E');\r\n if (sampleE[Ep + 1] == '+') Ep++;\r\n return parseInt(sampleE.substr(Ep + 1));\r\n }\r\n private static formatMulti(c: string, n: number): string {\r\n let s = '';\r\n for (let i = 0; i < n; i++) s += c;\r\n return s;\r\n }\r\n private static formatReverse(s: string): string {\r\n let reverse = '';\r\n for (let i = 0; i < s.length; i++) reverse = s[i] + reverse;\r\n return reverse;\r\n }\r\n private static formatCountNumeric(f: string): number {\r\n let p = 0;\r\n for (let i = 0; i < f.length; i++) if (f[i] == FormatDotNetStyle.zeroCode || f[i] == FormatDotNetStyle.poundCode) p++;\r\n return p;\r\n }\r\n private static formatRound(num: number, round: number): number {\r\n let m = 0;\r\n let a = Math.abs(num);\r\n while (Math.floor(a) != a && m < round) {\r\n a *= 10;\r\n m++;\r\n }\r\n const n = Math.floor(a);\r\n const f = a - n;\r\n a = n;\r\n if (f >= 0.5) a += 1;\r\n if (round >= 0) a /= Math.pow(10, m);\r\n if (num < 0) a = -a;\r\n return a;\r\n }\r\n private static formatCountPad(format: string, right: boolean): number {\r\n let pad = -1;\r\n if (right) format = FormatDotNetStyle.formatReverse(format);\r\n for (let i = 0; i < format.length; i++) {\r\n if (pad == -1 && format[i] == FormatDotNetStyle.zeroCode) pad = 0;\r\n if (pad != -1 && (format[i] == FormatDotNetStyle.zeroCode || format[i] == FormatDotNetStyle.poundCode)) pad++;\r\n }\r\n return pad < 0 ? 0 : pad;\r\n }\r\n private static formatInsertExtraSymbols(num: string, format: string, right: boolean): string {\r\n if (right) {\r\n format = FormatDotNetStyle.formatReverse(format);\r\n num = FormatDotNetStyle.formatReverse(num);\r\n }\r\n let firstDigitIndex = 0;\r\n for (let i = 0; i < format.length; i++)\r\n if (format[i] == FormatDotNetStyle.zeroCode || format[i] == FormatDotNetStyle.poundCode) {\r\n firstDigitIndex = i;\r\n break;\r\n }\r\n let formatDigits = 0;\r\n let actualPos = num.length - 1;\r\n let actualDigits = 0;\r\n for (let i = format.length - 1; i >= firstDigitIndex; i--) {\r\n if (format[i] == FormatDotNetStyle.zeroCode || format[i] == FormatDotNetStyle.poundCode) {\r\n formatDigits++;\r\n } else if (format[i] == FormatDotNetStyle.groupCode) {\r\n } else {\r\n while (actualDigits < formatDigits && actualPos >= 0) {\r\n if (FormatDotNetStyle.isDigitAt(num, actualPos)) actualDigits++;\r\n actualPos--;\r\n }\r\n num = num.substr(0, actualPos + 1) + format[i] + num.substr(actualPos + 1);\r\n }\r\n }\r\n if (firstDigitIndex > 0) num = format.substr(0, firstDigitIndex) + num;\r\n if (right) num = FormatDotNetStyle.formatReverse(num);\r\n return num;\r\n }\r\n private formatEncoded(encodedFormat: string, num: number, multipleFormats: boolean): string {\r\n if (encodedFormat.indexOf(FormatDotNetStyle.percentCode) >= 0) num *= Math.pow(10, 2);\r\n if (encodedFormat.indexOf(FormatDotNetStyle.permilleCode) >= 0) num *= Math.pow(10, 3);\r\n const originalnum = num;\r\n\r\n if (!isFinite(num)) return this.getNaNOrInfinitySymbol(num);\r\n\r\n let formatInteger = '';\r\n let formatFloat = '';\r\n let formatE = '';\r\n for (let j = 0; j < encodedFormat.length - 1; j++) {\r\n for (let i = 0; i < FormatDotNetStyle.EE.length; i++) {\r\n const eprefix = FormatDotNetStyle.EE[i];\r\n let e = true;\r\n for (let k = 0; k < eprefix.length && j + k < encodedFormat.length; k++)\r\n if (encodedFormat[j + k] != eprefix[k]) {\r\n e = false;\r\n break;\r\n }\r\n if (e) {\r\n let l = j + eprefix.length;\r\n while (l < encodedFormat.length && encodedFormat[l] == FormatDotNetStyle.zeroCode) l++;\r\n formatE = encodedFormat\r\n .substr(j, l - j)\r\n .replace(FormatDotNetStyle.upperECode, 'E')\r\n .replace(FormatDotNetStyle.lowerECode, 'e');\r\n const ls = encodedFormat.substr(0, j).replace(FormatDotNetStyle.upperECode, 'E').replace(FormatDotNetStyle.lowerECode, 'e');\r\n const rs = encodedFormat.substr(l).replace(FormatDotNetStyle.upperECode, 'E').replace(FormatDotNetStyle.lowerECode, 'e');\r\n encodedFormat = ls + FormatDotNetStyle.upperECode + rs;\r\n break;\r\n }\r\n }\r\n if (formatE.length > 0) break;\r\n }\r\n\r\n if (formatE.length == 0) encodedFormat = encodedFormat.replace(FormatDotNetStyle.upperECode, 'E').replace(FormatDotNetStyle.lowerECode, 'e');\r\n formatInteger = encodedFormat;\r\n\r\n const decimalPointPosition = encodedFormat.indexOf(FormatDotNetStyle.decimalCode);\r\n if (decimalPointPosition >= 0) {\r\n formatInteger = encodedFormat.substr(0, decimalPointPosition);\r\n formatFloat = encodedFormat.substr(decimalPointPosition + 1);\r\n }\r\n const fomatPrecision = FormatDotNetStyle.formatCountNumeric(formatFloat);\r\n let precision = fomatPrecision;\r\n let actualPrecision = FormatDotNetStyle.getActualPrecision(num);\r\n if (precision > actualPrecision) precision = actualPrecision;\r\n\r\n if (formatE.length > 0) {\r\n const d = FormatDotNetStyle.formatCountNumeric(formatInteger);\r\n const top = Math.pow(10, d);\r\n const bottom = Math.pow(10, d - 1);\r\n let m = 0;\r\n if (num != 0) {\r\n const negative = num < 0;\r\n num = Math.abs(num);\r\n while (num >= top) {\r\n num /= 10;\r\n m++;\r\n }\r\n while (num < bottom) {\r\n num *= 10;\r\n m--;\r\n }\r\n\r\n num = FormatDotNetStyle.formatRound(num, precision);\r\n if (num >= top) {\r\n num /= 10;\r\n m++;\r\n }\r\n\r\n if (negative) num = -num;\r\n }\r\n\r\n formatInteger = formatInteger.replace(FormatDotNetStyle.poundCode, FormatDotNetStyle.zeroCode);\r\n\r\n const zzf = formatE.substr(formatE.indexOf(FormatDotNetStyle.zeroCode));\r\n const zz = this.formatEncoded(zzf, m, false);\r\n formatE = formatE[0] + (formatE[1] == '+' && zz[0] != '-' ? '+' : '') + zz;\r\n }\r\n\r\n let scale = 0;\r\n for (let i = formatInteger.length - 1; i >= 0; i--)\r\n if (formatInteger[i] == FormatDotNetStyle.groupCode) scale++;\r\n else break;\r\n if (scale > 0) num /= Math.pow(10, scale * this.localizedGroupSize[0]);\r\n\r\n if (!isFinite(num)) return this.getNaNOrInfinitySymbol(num);\r\n\r\n actualPrecision = FormatDotNetStyle.getActualPrecision(num);\r\n precision = fomatPrecision;\r\n if (precision > actualPrecision) precision = actualPrecision;\r\n\r\n num = FormatDotNetStyle.formatRound(num, precision);\r\n if (originalnum != 0 && num == 0 && multipleFormats) return '0';\r\n if (FormatDotNetStyle.formatCountNumeric(encodedFormat) == 0) return (num < 0 && !multipleFormats ? '-' : '') + encodedFormat;\r\n\r\n let a = Math.abs(num);\r\n let n = Math.floor(a);\r\n\r\n let s = n == 0 ? '' : FormatDotNetStyle.toDigits(n);\r\n const padn = FormatDotNetStyle.formatCountPad(formatInteger, false);\r\n for (let i = s.length; i < padn; i++) s = '0' + s;\r\n\r\n let delimitGroups = false;\r\n for (let i = 1; i < formatInteger.length - 1; i++)\r\n if (\r\n formatInteger[i] == FormatDotNetStyle.groupCode &&\r\n (formatInteger[i - 1] == FormatDotNetStyle.zeroCode || formatInteger[i - 1] == FormatDotNetStyle.poundCode) &&\r\n (formatInteger[i + 1] == FormatDotNetStyle.zeroCode || formatInteger[i + 1] == FormatDotNetStyle.poundCode)\r\n ) {\r\n delimitGroups = true;\r\n break;\r\n }\r\n if (delimitGroups) {\r\n let cg = 0;\r\n let gsc = '';\r\n let gsr = '';\r\n for (let i = 0; i < this.localizedGroupSize.length - 1 && cg + this.localizedGroupSize[i] <= s.length; i++) {\r\n if (cg > 0) gsc += this.localizedGroupSymbol;\r\n gsc += s.substr(s.length - cg - this.localizedGroupSize[i], this.localizedGroupSize[i]);\r\n cg += this.localizedGroupSize[i];\r\n }\r\n const groupSize = this.localizedGroupSize[this.localizedGroupSize.length - 1];\r\n if (groupSize >= 0) {\r\n let groups = (s.length - cg) / groupSize;\r\n let lastGroupSize = (s.length - cg) % groupSize;\r\n if (lastGroupSize == 0 && groups > 0) {\r\n groups--;\r\n lastGroupSize = groupSize;\r\n }\r\n gsr = s.substr(0, lastGroupSize);\r\n for (let i = lastGroupSize; i < s.length - cg; i += groupSize) gsr = gsr + this.localizedGroupSymbol + s.substr(i, groupSize);\r\n } else {\r\n gsr = s.substr(0, s.length - cg);\r\n }\r\n s = gsr.length > 0 && gsc.length > 0 ? gsr + this.localizedGroupSymbol + gsc : gsr + gsc;\r\n }\r\n\r\n s = FormatDotNetStyle.formatInsertExtraSymbols(s, formatInteger, false);\r\n\r\n if (formatFloat.length > 0) {\r\n // && precision > 0\r\n if (formatE.length > 0) {\r\n const d = FormatDotNetStyle.formatCountNumeric(formatInteger);\r\n const numF = originalnum % Math.pow(10, d);\r\n a = Math.abs(a);\r\n }\r\n let m = 0;\r\n while (Math.floor(a) != a && m < precision) {\r\n a *= 10;\r\n n *= 10;\r\n m++;\r\n }\r\n const f = FormatDotNetStyle.formatRound(a - n, 0);\r\n let sf = '';\r\n if (f != 0) {\r\n sf = FormatDotNetStyle.toDigits(f);\r\n for (let i = sf.length; i < m; i++) sf = '0' + sf;\r\n }\r\n const padf = FormatDotNetStyle.formatCountPad(formatFloat, true);\r\n sf = FormatDotNetStyle.trimEnd0(sf);\r\n for (let i = sf.length; i < padf; i++) sf = sf + '0';\r\n\r\n if (sf.length > 0) sf = this.localizedDecimalSymbol + sf;\r\n sf = FormatDotNetStyle.formatInsertExtraSymbols(sf, formatFloat, true);\r\n if (sf.length > 0) s += sf;\r\n }\r\n\r\n let encoded = (num < 0 && !multipleFormats ? '-' : '') + s;\r\n if (formatE.length > 0) encoded = encoded.replace(FormatDotNetStyle.upperECode, formatE);\r\n return encoded;\r\n }\r\n private formatDotNetStyleCustom(format: string, num: number): string {\r\n let unescaped = '';\r\n let sq = false;\r\n let dq = false;\r\n for (let i = 0; i < format.length; i++) {\r\n if (sq) {\r\n if (format[i] == \"'\") sq = false;\r\n else unescaped += format[i];\r\n } else if (dq) {\r\n if (format[i] == '\"') dq = false;\r\n else unescaped += format[i];\r\n } else {\r\n if (format[i] == \"'\") {\r\n sq = true;\r\n } else if (format[i] == '\"') {\r\n dq = true;\r\n } else if (format[i] == '\\\\') {\r\n if (i < format.length - 1) {\r\n i++;\r\n unescaped += format[i];\r\n }\r\n } else {\r\n if (format[i] == '.') unescaped += FormatDotNetStyle.decimalCode;\r\n else if (format[i] == ',') unescaped += FormatDotNetStyle.groupCode;\r\n else if (format[i] == '0') unescaped += FormatDotNetStyle.zeroCode;\r\n else if (format[i] == '#') unescaped += FormatDotNetStyle.poundCode;\r\n else if (format[i] == ';') unescaped += FormatDotNetStyle.sectionCode;\r\n else if (format[i] == '%') unescaped += FormatDotNetStyle.percentCode;\r\n //% & ‰ are used directly, that is how it is supposed to be, only these are considered format specifiers, not the localized versions\r\n else if (format[i] == '‰') unescaped += FormatDotNetStyle.permilleCode;\r\n else if (format[i] == 'e') unescaped += FormatDotNetStyle.lowerECode;\r\n else if (format[i] == 'E') unescaped += FormatDotNetStyle.upperECode;\r\n else unescaped += format[i];\r\n }\r\n }\r\n }\r\n\r\n const formats = unescaped.split(FormatDotNetStyle.sectionCode);\r\n const formatP = formats[0];\r\n const formatN = formats.length >= 2 && formats[1].length > 0 ? formats[1] : formatP;\r\n const formatZ = formats.length >= 3 && formats[2].length > 0 ? formats[2] : formatP;\r\n const f = num == 0 ? formatZ : num < 0 ? formatN : formatP;\r\n const multimpleFormats = (formats.length >= 3 && formats[2].length > 0) || (formats.length >= 2 && formats[1].length > 0);\r\n\r\n let encoded = this.formatEncoded(f, num, multimpleFormats);\r\n if (formats.length > 1 && num != 0 && encoded == '0') encoded = this.formatEncoded(formatZ, 0, multimpleFormats);\r\n\r\n let decoded = '';\r\n for (let i = 0; i < encoded.length; i++) {\r\n if (encoded[i] == FormatDotNetStyle.decimalCode) {\r\n } //decoded += this.this.localizedDecimalSymbol;\r\n else if (encoded[i] == FormatDotNetStyle.groupCode) {\r\n } //decoded += this.localizedGroupSymbol;\r\n else if (encoded[i] == FormatDotNetStyle.percentCode) decoded += this.localizedPercentSymbol;\r\n else if (encoded[i] == FormatDotNetStyle.permilleCode) decoded += this.localizedPermilleSymbol;\r\n //else if (encoded[i] == FormatNumberDotNetStyle.sectionCode) decoded += ';';\r\n else decoded += encoded[i];\r\n }\r\n return decoded;\r\n }\r\n public parseNumber(s: string): number {\r\n const divide =\r\n s.indexOf('%') >= 0 || s.indexOf(this.localizedPercentSymbol) >= 0\r\n ? 2\r\n : s.indexOf('‰') >= 0 || s.indexOf(this.localizedPermilleSymbol) >= 0\r\n ? 3\r\n : 0;\r\n const negative = s.indexOf('-') >= 0 || (s.indexOf('(') >= 0 && s.indexOf(')') >= 0) || s.indexOf(this.numberCulture.NegativeSign) >= 0;\r\n let dp = s.indexOf(this.localizedDecimalSymbol);\r\n const dp1 = s.indexOf('.');\r\n const dp2 = s.indexOf(',');\r\n if (dp1 >= 0 && dp1 > dp) dp = dp1;\r\n if (dp2 >= 0 && dp2 > dp) dp = dp2;\r\n if (dp >= 0) {\r\n const s1 = s.substr(0, dp);\r\n const s2 = s.substr(dp + 1);\r\n s = s1 + FormatDotNetStyle.decimalCode + s2;\r\n }\r\n let n = '';\r\n for (let i = 0; i < s.length; i++) {\r\n if (FormatDotNetStyle.isDigitAt(s, i)) n += s[i];\r\n else if (s[i] == FormatDotNetStyle.decimalCode) n += '.';\r\n }\r\n if (n.length == 0) return null;\r\n if (n[n.length - 1] == '.') n = n.substr(0, n.length - 1);\r\n if (negative) n = '-' + n;\r\n let r = parseFloat(n);\r\n if (isNaN(r) || !isFinite(r) || typeof r === undefined) r = null;\r\n if (r != null && divide > 0) r /= Math.pow(10, divide);\r\n return r;\r\n }\r\n public formatNumber(format: string, num: number): string {\r\n this.localizedGroupSize = this.numberCulture.NumberGroupSizes;\r\n this.localizedDecimalSymbol = this.numberCulture.NumberDecimalSeparator;\r\n this.localizedGroupSymbol = this.numberCulture.NumberGroupSeparator;\r\n this.localizedPercentSymbol = this.numberCulture.PercentSymbol;\r\n this.localizedPermilleSymbol = this.numberCulture.PerMilleSymbol;\r\n\r\n if (format.length == 0) format = 'G';\r\n\r\n const c0 = format[0];\r\n const c0u = c0.toUpperCase()[0];\r\n if ('CDEFXGNPR'.indexOf(c0u) < 0) return this.formatDotNetStyleCustom(format, num);\r\n let standard = true;\r\n for (let i = 1; i < format.length; i++)\r\n if (!FormatDotNetStyle.isDigitAt(format, i)) {\r\n standard = false;\r\n break;\r\n }\r\n if (!standard) return this.formatDotNetStyleCustom(format, num);\r\n\r\n let n = -1.0;\r\n if (format.length > 1) {\r\n n = parseInt(format.substr(1));\r\n if (n == Number.NaN) return this.formatDotNetStyleCustom(format, num);\r\n }\r\n if (n <= 0) n = -1;\r\n const n2 = FormatDotNetStyle.formatMulti('0', n != -1 ? n : 2);\r\n\r\n if (!isFinite(num)) return this.getNaNOrInfinitySymbol(num);\r\n\r\n if (c0u == 'N') {\r\n format = '#,0.' + FormatDotNetStyle.formatMulti('0', n != -1 ? n : this.numberCulture.NumberDecimalDigits);\r\n if (num >= 0) return this.formatDotNetStyleCustom(format, num);\r\n let format2 = '';\r\n if (this.numberCulture.NumberNegativePattern == 0) format2 = format + ';' + '(' + format + ')';\r\n if (this.numberCulture.NumberNegativePattern == 2) format2 = format + ';' + this.numberCulture.NegativeSign + ' ' + format;\r\n if (this.numberCulture.NumberNegativePattern == 3) format2 = format + ';' + format + this.numberCulture.NegativeSign;\r\n if (this.numberCulture.NumberNegativePattern == 4) format2 = format + ';' + format + ' ' + this.numberCulture.NegativeSign;\r\n format2 = format + ';' + this.numberCulture.NegativeSign + format; //1\r\n return this.formatDotNetStyleCustom(format2, num);\r\n }\r\n if (c0u == 'C') {\r\n this.localizedGroupSize = this.numberCulture.CurrencyGroupSizes;\r\n this.localizedDecimalSymbol = this.numberCulture.CurrencyDecimalSeparator;\r\n this.localizedGroupSymbol = this.numberCulture.CurrencyGroupSeparator;\r\n const currency = \"'\" + this.numberCulture.CurrencySymbol + \"'\";\r\n format = '#,0.' + FormatDotNetStyle.formatMulti('0', n != -1 ? n : this.numberCulture.CurrencyDecimalDigits);\r\n let format2 = '';\r\n if (this.numberCulture.CurrencyPositivePattern == 1) format2 = format + currency;\r\n else if (this.numberCulture.CurrencyPositivePattern == 2) format2 = currency + ' ' + format;\r\n else if (this.numberCulture.CurrencyPositivePattern == 3) format2 = format + ' ' + currency;\r\n else format2 = currency + format; //0\r\n if (num >= 0) return this.formatDotNetStyleCustom(format2, num);\r\n\r\n if (this.numberCulture.CurrencyNegativePattern == 1) format2 = format2 + ';' + this.numberCulture.NegativeSign + currency + format;\r\n else if (this.numberCulture.CurrencyNegativePattern == 2) format2 = format2 + ';' + currency + this.numberCulture.NegativeSign + format;\r\n else if (this.numberCulture.CurrencyNegativePattern == 3) format2 = format2 + ';' + currency + format + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.CurrencyNegativePattern == 4) format2 = format2 + ';' + '(' + format + currency + ')';\r\n else if (this.numberCulture.CurrencyNegativePattern == 5) format2 = format2 + ';' + this.numberCulture.NegativeSign + format + currency;\r\n else if (this.numberCulture.CurrencyNegativePattern == 6) format2 = format2 + ';' + format + this.numberCulture.NegativeSign + currency;\r\n else if (this.numberCulture.CurrencyNegativePattern == 7) format2 = format2 + ';' + format + currency + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.CurrencyNegativePattern == 8)\r\n format2 = format2 + ';' + this.numberCulture.NegativeSign + format + ' ' + currency;\r\n else if (this.numberCulture.CurrencyNegativePattern == 9)\r\n format2 = format2 + ';' + this.numberCulture.NegativeSign + currency + ' ' + format;\r\n else if (this.numberCulture.CurrencyNegativePattern == 10)\r\n format2 = format2 + ';' + format + ' ' + currency + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.CurrencyNegativePattern == 11)\r\n format2 = format2 + ';' + currency + ' ' + format + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.CurrencyNegativePattern == 12)\r\n format2 = format2 + ';' + currency + ' ' + this.numberCulture.NegativeSign + format;\r\n else if (this.numberCulture.CurrencyNegativePattern == 13)\r\n format2 = format2 + ';' + format + this.numberCulture.NegativeSign + ' ' + currency;\r\n else if (this.numberCulture.CurrencyNegativePattern == 14) format2 = format2 + ';' + '(' + currency + ' ' + format + ')';\r\n else if (this.numberCulture.CurrencyNegativePattern == 15) format2 = format2 + ';' + '(' + format + ' ' + currency + ')';\r\n else format2 = format2 + ';' + '(' + currency + format + ')'; //0\r\n return this.formatDotNetStyleCustom(format2, num);\r\n }\r\n if (c0u == 'P') {\r\n this.localizedGroupSize = this.numberCulture.PercentGroupSizes;\r\n this.localizedDecimalSymbol = this.numberCulture.PercentDecimalSeparator;\r\n this.localizedGroupSymbol = this.numberCulture.PercentGroupSeparator;\r\n format = '#,0.' + FormatDotNetStyle.formatMulti('0', n != -1 ? n : this.numberCulture.PercentDecimalDigits);\r\n let format2 = '';\r\n if (this.numberCulture.PercentPositivePattern == 0) format2 = format + ' ' + this.numberCulture.PercentSymbol;\r\n else if (this.numberCulture.PercentPositivePattern == 2) format2 = this.numberCulture.PercentSymbol + format;\r\n else if (this.numberCulture.PercentPositivePattern == 3) format2 = this.numberCulture.PercentSymbol + ' ' + format;\r\n else format2 = format + this.numberCulture.PercentSymbol; //1\r\n if (num >= 0) return this.formatDotNetStyleCustom(format2, num);\r\n\r\n if (this.numberCulture.PercentNegativePattern == 0) format2 = format2 + ';' + this.numberCulture.NegativeSign + format + ' %';\r\n else if (this.numberCulture.PercentNegativePattern == 2) format2 = format2 + ';' + this.numberCulture.NegativeSign + '%' + format;\r\n else if (this.numberCulture.PercentNegativePattern == 3) format2 = format2 + ';' + '%' + this.numberCulture.NegativeSign + format;\r\n else if (this.numberCulture.PercentNegativePattern == 4) format2 = format2 + ';' + '%' + format + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.PercentNegativePattern == 5) format2 = format2 + ';' + format + this.numberCulture.NegativeSign + '%';\r\n else if (this.numberCulture.PercentNegativePattern == 6) format2 = format2 + ';' + format + '%' + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.PercentNegativePattern == 7) format2 = format2 + ';' + this.numberCulture.NegativeSign + '% ' + format;\r\n else if (this.numberCulture.PercentNegativePattern == 8) format2 = format2 + ';' + format + ' %' + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.PercentNegativePattern == 9) format2 = format2 + ';' + '% ' + format + this.numberCulture.NegativeSign;\r\n else if (this.numberCulture.PercentNegativePattern == 10) format2 = format2 + ';' + '% ' + this.numberCulture.NegativeSign + format;\r\n else if (this.numberCulture.PercentNegativePattern == 11) format2 = format2 + ';' + format + this.numberCulture.NegativeSign + ' %';\r\n else format2 = format2 + ';' + this.numberCulture.NegativeSign + format + '%'; //1\r\n return this.formatDotNetStyleCustom(format2, num);\r\n }\r\n if (c0u == 'G' || c0u == 'R') {\r\n if (c0u == 'R' || n == -1 || n > 15) n = 15;\r\n const e = FormatDotNetStyle.getActualExponent(num);\r\n if (e >= n || e <= -5) {\r\n return this.formatDotNetStyleCustom('0.' + FormatDotNetStyle.formatMulti('#', n - 1) + 'E+00', num);\r\n } else {\r\n return this.formatDotNetStyleCustom('0.' + FormatDotNetStyle.formatMulti('#', n - e - 1), num);\r\n }\r\n }\r\n\r\n if (c0u == 'D') format = FormatDotNetStyle.formatMulti('0', n != -1 ? n : 1);\r\n else if (c0u == 'E') format = '0.' + FormatDotNetStyle.formatMulti('0', n != -1 ? n : 6) + FormatDotNetStyle.upperECode + '+000';\r\n else if (c0u == 'F') format = '0.' + n2;\r\n\r\n return this.formatDotNetStyleCustom(format, num);\r\n }\r\n\r\n public formatTimeSpan(format: string, ticks: number): string {\r\n if (format.length > 1 || 'cgG'.indexOf(format) < 0) return this.formatTimeSpanCustom(format, ticks);\r\n if (format.length == 0) format = 'c';\r\n if (format == 'g')\r\n return this.formatTimeSpanCustom('-H\\\\:h\\\\:mm\\\\:ss.MMMMMMM'.replace('.', this.numberCulture.NumberDecimalSeparator), ticks);\r\n if (format == 'G')\r\n return this.formatTimeSpanCustom('-d\\\\:hh\\\\:mm\\\\:ss.fffffff'.replace('.', this.numberCulture.NumberDecimalSeparator), ticks);\r\n /*if (format == \"G\")*/\r\n return this.formatTimeSpanCustom('-H.hh\\\\:mm\\\\:ss\\\\.ggggggg', ticks);\r\n }\r\n public parseTimeSpan(timespan: string): number {\r\n this.position = 0;\r\n this.actualPosition = 0;\r\n this.source = timespan.toUpperCase();\r\n let negative = false;\r\n let days = -1;\r\n let hours = -1;\r\n let minutes = -1;\r\n let seconds = -1;\r\n let milliseconds = -1;\r\n if (this.source.length == 0) return 0;\r\n if (this.source.length > 0 && this.source[0] == '-') negative = true;\r\n let v = this.scanNumber();\r\n if (v < 0) return 0;\r\n\r\n if (this.actualPosition < this.source.length && this.source.substr(this.actualPosition, 1) == ':' && this.source.split(':').length < 4) {\r\n hours = v;\r\n } else if (this.actualPosition < this.source.length && this.source.substr(this.actualPosition, 1) == 'H') {\r\n hours = v;\r\n } else if (this.actualPosition < this.source.length - 1 && this.source.substr(this.actualPosition, 2) == 'MS') {\r\n milliseconds = v;\r\n } else if (this.actualPosition < this.source.length && this.source.substr(this.actualPosition, 1) == 'M') {\r\n minutes = v;\r\n } else if (this.actualPosition < this.source.length && this.source.substr(this.actualPosition, 1) == 'S') {\r\n seconds = v;\r\n } else {\r\n days = v;\r\n }\r\n\r\n if (days >= 0) {\r\n v = this.scanNumber();\r\n if (v >= 0) hours = v;\r\n } else days = 0;\r\n if (hours >= 0) {\r\n v = this.scanNumber();\r\n if (v >= 0) minutes = v;\r\n } else hours = 0;\r\n if (minutes >= 0) {\r\n v = this.scanNumber();\r\n if (v >= 0) seconds = v;\r\n } else minutes = 0;\r\n if (seconds >= 0) {\r\n v = this.scanNumberLimited(3);\r\n if (v >= 0) milliseconds = v;\r\n } else seconds = 0;\r\n if (milliseconds >= 0) {\r\n } else milliseconds = 0;\r\n\r\n let ticks =\r\n days * 10000000.0 * 60 * 60 * 24 + hours * 10000000.0 * 60 * 60 + minutes * 10000000.0 * 60 + seconds * 10000000.0 + milliseconds * 10000;\r\n if (negative) ticks = -1 * ticks;\r\n return ticks;\r\n }\r\n private formatTimeSpanCustom(format: string, ticks: number): string {\r\n const negative = ticks < 0;\r\n ticks = Math.abs(ticks);\r\n const days = Math.floor(ticks / (10000000.0 * 60 * 60 * 24));\r\n const hours = Math.floor((ticks - days * 10000000.0 * 60 * 60 * 24) / (10000000.0 * 60 * 60));\r\n const minutes = Math.floor((ticks - days * 10000000.0 * 60 * 60 * 24 - hours * 10000000.0 * 60 * 60) / (10000000.0 * 60));\r\n const seconds = Math.floor(\r\n (ticks - days * 10000000.0 * 60 * 60 * 24 - hours * 10000000.0 * 60 * 60 - minutes * 10000000.0 * 60) / 10000000.0\r\n );\r\n const tt = Math.floor(\r\n ticks - days * 10000000.0 * 60 * 60 * 24 - hours * 10000000.0 * 60 * 60 - minutes * 10000000.0 * 60 - seconds * 10000000.0\r\n );\r\n\r\n let v = false;\r\n let minus = false;\r\n const unescaped = this.unescapeTimeSpan(format);\r\n let s = '';\r\n this.position = 0;\r\n while (this.position < unescaped.length) {\r\n if (this.match(unescaped, FormatDotNetStyle.minusCode)) {\r\n minus = true;\r\n } else if (this.match(unescaped, FormatDotNetStyle.dCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.dCode)) n++;\r\n s += FormatDotNetStyle.pad0(days, n);\r\n v = v || days > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.HCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.HCode)) n++;\r\n if (days != 0) {\r\n s += FormatDotNetStyle.pad0(days, n);\r\n v = true;\r\n } else {\r\n if (this.match(unescaped, '.')) {\r\n } else if (this.match(unescaped, ':')) {\r\n } else if (this.match(unescaped, this.numberCulture.NumberDecimalSeparator)) {\r\n }\r\n }\r\n } else if (this.match(unescaped, FormatDotNetStyle.hhCode)) {\r\n s += FormatDotNetStyle.pad0(hours, 2);\r\n while (this.match(unescaped, FormatDotNetStyle.hCode));\r\n v = v || hours > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.hCode)) {\r\n s += hours;\r\n v = v || hours > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.mmCode)) {\r\n s += FormatDotNetStyle.pad0(minutes, 2);\r\n while (this.match(unescaped, FormatDotNetStyle.mCode));\r\n v = v || minutes > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.mCode)) {\r\n s += minutes;\r\n v = v || minutes > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.ssCode)) {\r\n s += FormatDotNetStyle.pad0(seconds, 2);\r\n while (this.match(unescaped, FormatDotNetStyle.sCode));\r\n } else if (this.match(unescaped, FormatDotNetStyle.sCode)) {\r\n s += seconds;\r\n v = v || seconds > 0;\r\n } else if (this.match(unescaped, FormatDotNetStyle.fCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.fCode)) n++;\r\n const t = Math.floor(tt / (1000000 / Math.pow(10, n - 1)));\r\n v = v || t > 0;\r\n s += FormatDotNetStyle.pad0(t, n);\r\n } else if (this.match(unescaped, FormatDotNetStyle.FCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.FCode)) n++;\r\n const t = Math.floor(tt / (1000000 / Math.pow(10, n - 1)));\r\n v = v || t > 0;\r\n s += FormatDotNetStyle.pad0t(t, n);\r\n } else if (this.match(unescaped, FormatDotNetStyle.gCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.gCode)) n++;\r\n const t = Math.floor(tt / (1000000 / Math.pow(10, n - 1)));\r\n v = v || t > 0;\r\n const f = FormatDotNetStyle.pad0(t, n);\r\n if (FormatDotNetStyle.trimEnd0(f) == '') s = this.trimF(s);\r\n else s += f;\r\n } else if (this.match(unescaped, FormatDotNetStyle.MCode)) {\r\n let n = 1;\r\n while (this.match(unescaped, FormatDotNetStyle.MCode)) n++;\r\n const t = Math.floor(tt / (1000000 / Math.pow(10, n - 1)));\r\n v = v || t > 0;\r\n const f = FormatDotNetStyle.pad0t(t, n);\r\n if (FormatDotNetStyle.trimEnd0(f) == '') s = this.trimF(s);\r\n else s += f;\r\n } else {\r\n s += unescaped[this.position];\r\n this.position++;\r\n }\r\n }\r\n return (negative && minus && v ? '-' : '') + s;\r\n }\r\n private scanWord(): string {\r\n let w = '';\r\n while (this.actualPosition < this.source.length) {\r\n const l = FormatDotNetStyle.isLetterAt(this.source, this.actualPosition);\r\n if (l) {\r\n w += this.source[this.actualPosition];\r\n } else {\r\n if (w.length > 0) {\r\n return w;\r\n } else {\r\n }\r\n }\r\n this.actualPosition++;\r\n }\r\n return w;\r\n }\r\n private scanNumber(): number {\r\n return this.scanNumberLimited(1000000);\r\n }\r\n private scanNumberLimited(digitLimit: number): number {\r\n let n = -1;\r\n this.digitCount = 0;\r\n while (this.actualPosition < this.source.length) {\r\n const d = FormatDotNetStyle.getDigitAt(this.source, this.actualPosition);\r\n if (d >= 0) {\r\n this.digitCount++;\r\n if (this.digitCount > digitLimit) break;\r\n }\r\n if (n < 0) {\r\n if (d < 0) {\r\n } else {\r\n n = d;\r\n }\r\n } else {\r\n if (d < 0) {\r\n break;\r\n } else {\r\n n = n * 10 + d;\r\n }\r\n }\r\n this.actualPosition++;\r\n }\r\n return n;\r\n }\r\n private unescapeTimeSpan(format: string): string {\r\n let unescaped = '';\r\n let sq = false;\r\n let dq = false;\r\n for (let i = 0; i < format.length; i++) {\r\n if (sq) {\r\n if (format[i] == \"'\") sq = false;\r\n else unescaped += format[i];\r\n } else if (dq) {\r\n if (format[i] == '\"') dq = false;\r\n else unescaped += format[i];\r\n } else {\r\n if (format[i] == \"'\") {\r\n sq = true;\r\n } else if (format[i] == '\"') {\r\n dq = true;\r\n } else if (format[i] == '\\\\') {\r\n if (i < format.length - 1) {\r\n i++;\r\n unescaped += format[i];\r\n }\r\n } else {\r\n if (format[i] == '%') {\r\n } else if (format[i] == '-') unescaped += FormatDotNetStyle.minusCode;\r\n else if (format[i] == 'd') unescaped += FormatDotNetStyle.dCode;\r\n else if (format[i] == 'H') unescaped += FormatDotNetStyle.HCode;\r\n //this hack is used to introduce optional days\r\n else if (format[i] == 'h') unescaped += FormatDotNetStyle.hCode;\r\n else if (format[i] == 'm') unescaped += FormatDotNetStyle.mCode;\r\n else if (format[i] == 's') unescaped += FormatDotNetStyle.sCode;\r\n else if (format[i] == 'f') unescaped += FormatDotNetStyle.fCode;\r\n else if (format[i] == 'g') unescaped += FormatDotNetStyle.gCode;\r\n else if (format[i] == 'F') unescaped += FormatDotNetStyle.FCode;\r\n else if (format[i] == 'M') unescaped += FormatDotNetStyle.MCode;\r\n else unescaped += format[i];\r\n }\r\n }\r\n }\r\n return unescaped;\r\n }\r\n}\r\n\r\nFormatDotNetStyle.numberCultures['ru'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-бесконечность',\r\n PositiveInfinitySymbol: 'бесконечность',\r\n NaNSymbol: 'NaN',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 5,\r\n CurrencyPositivePattern: 1,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: ' ',\r\n CurrencySymbol: 'р.',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: ' ',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: ' ',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['en-us'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infinity',\r\n PositiveInfinitySymbol: 'Infinity',\r\n NaNSymbol: 'NaN',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 0,\r\n CurrencyPositivePattern: 0,\r\n CurrencyDecimalSeparator: '.',\r\n CurrencyGroupSeparator: ',',\r\n CurrencySymbol: '$',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: '.',\r\n NumberGroupSeparator: ',',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 0,\r\n PercentPositivePattern: 0,\r\n PercentDecimalSeparator: '.',\r\n PercentGroupSeparator: ',',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['en-gb'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infinity',\r\n PositiveInfinitySymbol: 'Infinity',\r\n NaNSymbol: 'NaN',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 1,\r\n CurrencyPositivePattern: 0,\r\n CurrencyDecimalSeparator: '.',\r\n CurrencyGroupSeparator: ',',\r\n CurrencySymbol: '£',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: '.',\r\n NumberGroupSeparator: ',',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 0,\r\n PercentPositivePattern: 0,\r\n PercentDecimalSeparator: '.',\r\n PercentGroupSeparator: ',',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['cs'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-nekonečno',\r\n PositiveInfinitySymbol: '+nekonečno',\r\n NaNSymbol: 'Není číslo',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: ' ',\r\n CurrencySymbol: 'Kč',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: ' ',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: ' ',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['pt'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infinito',\r\n PositiveInfinitySymbol: '+Infinito',\r\n NaNSymbol: 'NaN (Não é um número)',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 9,\r\n CurrencyPositivePattern: 2,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: '.',\r\n CurrencySymbol: 'R$',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: '.',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: '.',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['de'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-unendlich',\r\n PositiveInfinitySymbol: '+unendlich',\r\n NaNSymbol: 'n. def.',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: '.',\r\n CurrencySymbol: '€',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: '.',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: '.',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['es'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infinito',\r\n PositiveInfinitySymbol: 'Infinito',\r\n NaNSymbol: 'NeuN',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: '.',\r\n CurrencySymbol: '€',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: '.',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 0,\r\n PercentPositivePattern: 0,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: '.',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['fr'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infini',\r\n PositiveInfinitySymbol: '+Infini',\r\n NaNSymbol: 'Non Numérique',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: ' ',\r\n CurrencySymbol: '€',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: ' ',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 0,\r\n PercentPositivePattern: 0,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: ' ',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['it'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-Infinito',\r\n PositiveInfinitySymbol: '+Infinito',\r\n NaNSymbol: 'Non un numero reale',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 9,\r\n CurrencyPositivePattern: 2,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: '.',\r\n CurrencySymbol: '€',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: '.',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: '.',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['ja'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-∞',\r\n PositiveInfinitySymbol: '+∞',\r\n NaNSymbol: 'NaN (非数値)',\r\n CurrencyDecimalDigits: 0,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 1,\r\n CurrencyPositivePattern: 0,\r\n CurrencyDecimalSeparator: '.',\r\n CurrencyGroupSeparator: ',',\r\n CurrencySymbol: '¥',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: '.',\r\n NumberGroupSeparator: ',',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: '.',\r\n PercentGroupSeparator: ',',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['sv'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-INF',\r\n PositiveInfinitySymbol: 'INF',\r\n NaNSymbol: 'NaN',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: '.',\r\n CurrencySymbol: 'kr',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: ' ',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 0,\r\n PercentPositivePattern: 0,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: ' ',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['pl'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '-nieskończoność',\r\n PositiveInfinitySymbol: '+nieskończoność',\r\n NaNSymbol: 'nie jest liczbą',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 8,\r\n CurrencyPositivePattern: 3,\r\n CurrencyDecimalSeparator: ',',\r\n CurrencyGroupSeparator: ' ',\r\n CurrencySymbol: 'zł',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: ',',\r\n NumberGroupSeparator: ' ',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: ',',\r\n PercentGroupSeparator: ' ',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.numberCultures['zh'] = {\r\n NegativeSign: '-',\r\n PositiveSign: '+',\r\n NegativeInfinitySymbol: '负无穷大',\r\n PositiveInfinitySymbol: '正无穷大',\r\n NaNSymbol: '非数字',\r\n CurrencyDecimalDigits: 2,\r\n CurrencyGroupSizes: [3],\r\n CurrencyNegativePattern: 2,\r\n CurrencyPositivePattern: 0,\r\n CurrencyDecimalSeparator: '.',\r\n CurrencyGroupSeparator: ',',\r\n CurrencySymbol: '¥',\r\n NumberDecimalDigits: 2,\r\n NumberGroupSizes: [3],\r\n NumberNegativePattern: 1,\r\n NumberDecimalSeparator: '.',\r\n NumberGroupSeparator: ',',\r\n PercentDecimalDigits: 2,\r\n PercentGroupSizes: [3],\r\n PercentNegativePattern: 1,\r\n PercentPositivePattern: 1,\r\n PercentDecimalSeparator: '.',\r\n PercentGroupSeparator: ',',\r\n PercentSymbol: '%',\r\n PerMilleSymbol: '‰'\r\n};\r\nFormatDotNetStyle.dateTimeCultures['pt'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['d.C.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'Calendário gregoriano',\r\n AbbreviatedDayNames: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\r\n DayNames: ['domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado'],\r\n ShortestDayNames: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\r\n MonthNames: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro', ''],\r\n MonthGenitiveNames: [\r\n 'janeiro',\r\n 'fevereiro',\r\n 'março',\r\n 'abril',\r\n 'maio',\r\n 'junho',\r\n 'julho',\r\n 'agosto',\r\n 'setembro',\r\n 'outubro',\r\n 'novembro',\r\n 'dezembro',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez', ''],\r\n AbbreviatedMonthGenitiveNames: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 0,\r\n FullDateTimePattern: \"dddd, d' de 'MMMM' de 'yyyy HH:mm:ss\",\r\n LongDatePattern: \"dddd, d' de 'MMMM' de 'yyyy\",\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: \"dd' de 'MMMM\",\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd/MM/yyyy',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: \"MMMM' de 'yyyy\",\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Trimestre',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['ru'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['A.D.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'григорианский календарь',\r\n AbbreviatedDayNames: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\r\n DayNames: ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'],\r\n ShortestDayNames: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\r\n MonthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь', ''],\r\n MonthGenitiveNames: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря', ''],\r\n AbbreviatedMonthNames: ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек', ''],\r\n AbbreviatedMonthGenitiveNames: ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '.',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: \"d MMMM yyyy 'г.' H:mm:ss\",\r\n LongDatePattern: \"d MMMM yyyy 'г.'\",\r\n LongTimePattern: 'H:mm:ss',\r\n MonthDayPattern: 'MMMM dd',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd.MM.yyyy',\r\n ShortTimePattern: 'H:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'К',\r\n LongQuarter: 'Квартал',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['es'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['d.C.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'calendario gregoriano',\r\n AbbreviatedDayNames: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],\r\n DayNames: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],\r\n ShortestDayNames: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sá'],\r\n MonthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre', ''],\r\n MonthGenitiveNames: [\r\n 'enero',\r\n 'febrero',\r\n 'marzo',\r\n 'abril',\r\n 'mayo',\r\n 'junio',\r\n 'julio',\r\n 'agosto',\r\n 'septiembre',\r\n 'octubre',\r\n 'noviembre',\r\n 'diciembre',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic', ''],\r\n AbbreviatedMonthGenitiveNames: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\r\n LongDatePattern: \"dddd, dd' de 'MMMM' de 'yyyy\",\r\n LongTimePattern: 'H:mm:ss',\r\n MonthDayPattern: 'dd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd/MM/yyyy',\r\n ShortTimePattern: 'H:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: \"MMMM' de 'yyyy\",\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Trimestre',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['en-us'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['A.D.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'Gregorian Calendar',\r\n AbbreviatedDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n DayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n ShortestDayNames: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n MonthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', ''],\r\n MonthGenitiveNames: [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ''],\r\n AbbreviatedMonthGenitiveNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ''],\r\n AMDesignator: 'AM',\r\n PMDesignator: 'PM',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 0,\r\n FullDateTimePattern: 'dddd, MMMM dd, yyyy h:mm:ss tt',\r\n LongDatePattern: 'dddd, MMMM dd, yyyy',\r\n LongTimePattern: 'h:mm:ss tt',\r\n MonthDayPattern: 'MMMM dd',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'M/d/yyyy',\r\n ShortTimePattern: 'h:mm tt',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM, yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Quarter',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['cs'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['n. l.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'gregoriánský kalendář',\r\n AbbreviatedDayNames: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],\r\n DayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],\r\n ShortestDayNames: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],\r\n MonthNames: ['leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec', ''],\r\n MonthGenitiveNames: ['ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince', ''],\r\n AbbreviatedMonthNames: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', ''],\r\n AbbreviatedMonthGenitiveNames: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', ''],\r\n AMDesignator: 'dop.',\r\n PMDesignator: 'odp.',\r\n DateSeparator: '.',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'd. MMMM yyyy H:mm:ss',\r\n LongDatePattern: 'd. MMMM yyyy',\r\n LongTimePattern: 'H:mm:ss',\r\n MonthDayPattern: 'dd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'd.M.yyyy',\r\n ShortTimePattern: 'H:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Čtvrtletí',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['en-gb'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['A.D.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'Gregorian Calendar',\r\n AbbreviatedDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n DayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n ShortestDayNames: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n MonthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', ''],\r\n MonthGenitiveNames: [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ''],\r\n AbbreviatedMonthGenitiveNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ''],\r\n AMDesignator: 'AM',\r\n PMDesignator: 'PM',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'dd MMMM yyyy HH:mm:ss',\r\n LongDatePattern: 'dd MMMM yyyy',\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: 'dd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd/MM/yyyy',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Quarter',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['de'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['n. Chr.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'Gregorianischer Kalender',\r\n AbbreviatedDayNames: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\r\n DayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],\r\n ShortestDayNames: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\r\n MonthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember', ''],\r\n MonthGenitiveNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember', ''],\r\n AbbreviatedMonthNames: ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez', ''],\r\n AbbreviatedMonthGenitiveNames: ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '.',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 2,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'dddd, d. MMMM yyyy HH:mm:ss',\r\n LongDatePattern: 'dddd, d. MMMM yyyy',\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: 'dd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd.MM.yyyy',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Quartal',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['fr'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['ap. J.-C.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'calendrier grégorien',\r\n AbbreviatedDayNames: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\r\n DayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\r\n ShortestDayNames: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\r\n MonthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre', ''],\r\n MonthGenitiveNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre', ''],\r\n AbbreviatedMonthNames: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.', ''],\r\n AbbreviatedMonthGenitiveNames: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'dddd d MMMM yyyy HH:mm:ss',\r\n LongDatePattern: 'dddd d MMMM yyyy',\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: 'd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd/MM/yyyy',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Trimestre',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['it'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['d.C.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'calendario gregoriano',\r\n AbbreviatedDayNames: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],\r\n DayNames: ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato'],\r\n ShortestDayNames: ['do', 'lu', 'ma', 'me', 'gi', 've', 'sa'],\r\n MonthNames: [\r\n 'gennaio',\r\n 'febbraio',\r\n 'marzo',\r\n 'aprile',\r\n 'maggio',\r\n 'giugno',\r\n 'luglio',\r\n 'agosto',\r\n 'settembre',\r\n 'ottobre',\r\n 'novembre',\r\n 'dicembre',\r\n ''\r\n ],\r\n MonthGenitiveNames: [\r\n 'gennaio',\r\n 'febbraio',\r\n 'marzo',\r\n 'aprile',\r\n 'maggio',\r\n 'giugno',\r\n 'luglio',\r\n 'agosto',\r\n 'settembre',\r\n 'ottobre',\r\n 'novembre',\r\n 'dicembre',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic', ''],\r\n AbbreviatedMonthGenitiveNames: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 2,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'dddd d MMMM yyyy HH:mm:ss',\r\n LongDatePattern: 'dddd d MMMM yyyy',\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: 'dd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'dd/MM/yyyy',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: 'Trimestre',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['ja'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['西暦'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: '西暦 (日本語)',\r\n AbbreviatedDayNames: ['日', '月', '火', '水', '木', '金', '土'],\r\n DayNames: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],\r\n ShortestDayNames: ['日', '月', '火', '水', '木', '金', '土'],\r\n MonthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月', ''],\r\n MonthGenitiveNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月', ''],\r\n AbbreviatedMonthNames: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', ''],\r\n AbbreviatedMonthGenitiveNames: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', ''],\r\n AMDesignator: '午前',\r\n PMDesignator: '午後',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 0,\r\n FullDateTimePattern: \"yyyy'年'M'月'd'日' H:mm:ss\",\r\n LongDatePattern: \"yyyy'年'M'月'd'日'\",\r\n LongTimePattern: 'H:mm:ss',\r\n MonthDayPattern: \"M'月'd'日'\",\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'yyyy/MM/dd',\r\n ShortTimePattern: 'H:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: \"yyyy'年'M'月'\",\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Q',\r\n LongQuarter: '四半期',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['sv'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['A.D.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'gregoriansk kalender',\r\n AbbreviatedDayNames: ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],\r\n DayNames: ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag'],\r\n ShortestDayNames: ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],\r\n MonthNames: ['januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december', ''],\r\n MonthGenitiveNames: [\r\n 'januari',\r\n 'februari',\r\n 'mars',\r\n 'april',\r\n 'maj',\r\n 'juni',\r\n 'juli',\r\n 'augusti',\r\n 'september',\r\n 'oktober',\r\n 'november',\r\n 'december',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec', ''],\r\n AbbreviatedMonthGenitiveNames: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '-',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 2,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: \"'den 'd MMMM yyyy HH:mm:ss\",\r\n LongDatePattern: \"'den 'd MMMM yyyy\",\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: \"'den 'd MMMM\",\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'yyyy-MM-dd',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Kv',\r\n LongQuarter: 'Kvartal',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['pl'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['A.D.'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: 'Kalendarz gregoriański',\r\n AbbreviatedDayNames: ['N', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'],\r\n DayNames: ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota'],\r\n ShortestDayNames: ['N', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'],\r\n MonthNames: [\r\n 'styczeń',\r\n 'luty',\r\n 'marzec',\r\n 'kwiecień',\r\n 'maj',\r\n 'czerwiec',\r\n 'lipiec',\r\n 'sierpień',\r\n 'wrzesień',\r\n 'październik',\r\n 'listopad',\r\n 'grudzień',\r\n ''\r\n ],\r\n MonthGenitiveNames: [\r\n 'stycznia',\r\n 'lutego',\r\n 'marca',\r\n 'kwietnia',\r\n 'maja',\r\n 'czerwca',\r\n 'lipca',\r\n 'sierpnia',\r\n 'września',\r\n 'października',\r\n 'listopada',\r\n 'grudnia',\r\n ''\r\n ],\r\n AbbreviatedMonthNames: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru', ''],\r\n AbbreviatedMonthGenitiveNames: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru', ''],\r\n AMDesignator: '',\r\n PMDesignator: '',\r\n DateSeparator: '-',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 2,\r\n FirstDayOfWeek: 1,\r\n FullDateTimePattern: 'd MMMM yyyy HH:mm:ss',\r\n LongDatePattern: 'd MMMM yyyy',\r\n LongTimePattern: 'HH:mm:ss',\r\n MonthDayPattern: 'd MMMM',\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'yyyy-MM-dd',\r\n ShortTimePattern: 'HH:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: 'MMMM yyyy',\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: 'Kw',\r\n LongQuarter: 'Kwartał',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\nFormatDotNetStyle.dateTimeCultures['zh'] = {\r\n Calendar: {\r\n Eras: [1],\r\n EraNames: ['公元'],\r\n GetEra: function (x) {\r\n return 0;\r\n }\r\n },\r\n GetEraName: function (x) {\r\n return this.Calendar.EraNames[x];\r\n },\r\n NativeCalendarName: '公历',\r\n AbbreviatedDayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\r\n DayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\r\n ShortestDayNames: ['日', '一', '二', '三', '四', '五', '六'],\r\n MonthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', ''],\r\n MonthGenitiveNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', ''],\r\n AbbreviatedMonthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', ''],\r\n AbbreviatedMonthGenitiveNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', ''],\r\n AMDesignator: '上午',\r\n PMDesignator: '下午',\r\n DateSeparator: '/',\r\n TimeSeparator: ':',\r\n CalendarWeekRule: 0,\r\n FirstDayOfWeek: 0,\r\n FullDateTimePattern: \"yyyy'年'M'月'd'日' H:mm:ss\",\r\n LongDatePattern: \"yyyy'年'M'月'd'日'\",\r\n LongTimePattern: 'H:mm:ss',\r\n MonthDayPattern: \"M'月'd'日'\",\r\n RFC1123Pattern: \"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\r\n ShortDatePattern: 'yyyy/M/d',\r\n ShortTimePattern: 'H:mm',\r\n SortableDateTimePattern: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\r\n YearMonthPattern: \"yyyy'年'M'月'\",\r\n UniversalSortableDateTimePattern: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n ShortQuarter: '季度',\r\n LongQuarter: '季度',\r\n Quarters: ['I', 'II', 'III', 'IV']\r\n};\r\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */\n(function (window, document, Math) {\nvar rAF = window.requestAnimationFrame\t||\n\twindow.webkitRequestAnimationFrame\t||\n\twindow.mozRequestAnimationFrame\t\t||\n\twindow.oRequestAnimationFrame\t\t||\n\twindow.msRequestAnimationFrame\t\t||\n\tfunction (callback) { window.setTimeout(callback, 1000 / 60); };\n\nvar utils = (function () {\n\tvar me = {};\n\n\tvar _elementStyle = document.createElement('div').style;\n\tvar _vendor = (function () {\n\t\tvar vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],\n\t\t\ttransform,\n\t\t\ti = 0,\n\t\t\tl = vendors.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\ttransform = vendors[i] + 'ransform';\n\t\t\tif ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tfunction _prefixStyle (style) {\n\t\tif ( _vendor === false ) return false;\n\t\tif ( _vendor === '' ) return style;\n\t\treturn _vendor + style.charAt(0).toUpperCase() + style.substr(1);\n\t}\n\n\tme.getTime = Date.now || function getTime () { return new Date().getTime(); };\n\n\tme.extend = function (target, obj) {\n\t\tfor ( var i in obj ) {\n\t\t\ttarget[i] = obj[i];\n\t\t}\n\t};\n\n\tme.addEvent = function (el, type, fn, capture) {\n\t\tel.addEventListener(type, fn, !!capture);\n\t};\n\n\tme.removeEvent = function (el, type, fn, capture) {\n\t\tel.removeEventListener(type, fn, !!capture);\n\t};\n\n\tme.prefixPointerEvent = function (pointerEvent) {\n\t\treturn window.MSPointerEvent ?\n\t\t\t'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):\n\t\t\tpointerEvent;\n\t};\n\n\tme.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {\n\t\tvar distance = current - start,\n\t\t\tspeed = Math.abs(distance) / time,\n\t\t\tdestination,\n\t\t\tduration;\n\n\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\n\t\tdestination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );\n\t\tduration = speed / deceleration;\n\n\t\tif ( destination < lowerMargin ) {\n\t\t\tdestination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;\n\t\t\tdistance = Math.abs(destination - current);\n\t\t\tduration = distance / speed;\n\t\t} else if ( destination > 0 ) {\n\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;\n\t\t\tdistance = Math.abs(current) + destination;\n\t\t\tduration = distance / speed;\n\t\t}\n\n\t\treturn {\n\t\t\tdestination: Math.round(destination),\n\t\t\tduration: duration\n\t\t};\n\t};\n\n\tvar _transform = _prefixStyle('transform');\n\n\tme.extend(me, {\n\t\thasTransform: _transform !== false,\n\t\thasPerspective: _prefixStyle('perspective') in _elementStyle,\n\t\thasTouch: 'ontouchstart' in window,\n\t\thasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed\n\t\thasTransition: _prefixStyle('transition') in _elementStyle\n\t});\n\n\t/*\n\tThis should find all Android browsers lower than build 535.19 (both stock browser and webview)\n\t- galaxy S2 is ok\n - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S3 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S4 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S5 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n - galaxy S6 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n */\n\tme.isBadAndroid = (function() {\n\t\tvar appVersion = window.navigator.appVersion;\n\t\t// Android browser is not a chrome browser.\n\t\tif (/Android/.test(appVersion) && !(/Chrome\\/\\d/.test(appVersion))) {\n\t\t\tvar safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n\t\t\tif(safariVersion && typeof safariVersion === \"object\" && safariVersion.length >= 2) {\n\t\t\t\treturn parseFloat(safariVersion[1]) < 535.19;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\tme.extend(me.style = {}, {\n\t\ttransform: _transform,\n\t\ttransitionTimingFunction: _prefixStyle('transitionTimingFunction'),\n\t\ttransitionDuration: _prefixStyle('transitionDuration'),\n\t\ttransitionDelay: _prefixStyle('transitionDelay'),\n\t\ttransformOrigin: _prefixStyle('transformOrigin')\n\t});\n\n\tme.hasClass = function (e, c) {\n\t\tvar re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\");\n\t\treturn re.test(e.className);\n\t};\n\n\tme.addClass = function (e, c) {\n\t\tif ( me.hasClass(e, c) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar newclass = e.className.split(' ');\n\t\tnewclass.push(c);\n\t\te.className = newclass.join(' ');\n\t};\n\n\tme.removeClass = function (e, c) {\n\t\tif ( !me.hasClass(e, c) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\", 'g');\n\t\te.className = e.className.replace(re, ' ');\n\t};\n\n\tme.offset = function (el) {\n\t\tvar left = -el.offsetLeft,\n\t\t\ttop = -el.offsetTop;\n\n\t\t// jshint -W084\n\t\twhile (el = el.offsetParent) {\n\t\t\tleft -= el.offsetLeft;\n\t\t\ttop -= el.offsetTop;\n\t\t}\n\t\t// jshint +W084\n\n\t\treturn {\n\t\t\tleft: left,\n\t\t\ttop: top\n\t\t};\n\t};\n\n\tme.preventDefaultException = function (el, exceptions) {\n\t\tfor ( var i in exceptions ) {\n\t\t\tif ( exceptions[i].test(el[i]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tme.extend(me.eventType = {}, {\n\t\ttouchstart: 1,\n\t\ttouchmove: 1,\n\t\ttouchend: 1,\n\n\t\tmousedown: 2,\n\t\tmousemove: 2,\n\t\tmouseup: 2,\n\n\t\tpointerdown: 3,\n\t\tpointermove: 3,\n\t\tpointerup: 3,\n\n\t\tMSPointerDown: 3,\n\t\tMSPointerMove: 3,\n\t\tMSPointerUp: 3\n\t});\n\n\tme.extend(me.ease = {}, {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function (k) {\n\t\t\t\treturn k * ( 2 - k );\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\t// Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n\t\t\tfn: function (k) {\n\t\t\t\treturn Math.sqrt( 1 - ( --k * k ) );\n\t\t\t}\n\t\t},\n\t\tback: {\n\t\t\tstyle: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n\t\t\tfn: function (k) {\n\t\t\t\tvar b = 4;\n\t\t\t\treturn ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;\n\t\t\t}\n\t\t},\n\t\tbounce: {\n\t\t\tstyle: '',\n\t\t\tfn: function (k) {\n\t\t\t\tif ( ( k /= 1 ) < ( 1 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * k * k;\n\t\t\t\t} else if ( k < ( 2 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n\t\t\t\t} else if ( k < ( 2.5 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\telastic: {\n\t\t\tstyle: '',\n\t\t\tfn: function (k) {\n\t\t\t\tvar f = 0.22,\n\t\t\t\t\te = 0.4;\n\n\t\t\t\tif ( k === 0 ) { return 0; }\n\t\t\t\tif ( k == 1 ) { return 1; }\n\n\t\t\t\treturn ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );\n\t\t\t}\n\t\t}\n\t});\n\n\tme.tap = function (e, eventName) {\n\t\tvar ev = document.createEvent('Event');\n\t\tev.initEvent(eventName, true, true);\n\t\tev.pageX = e.pageX;\n\t\tev.pageY = e.pageY;\n\t\te.target.dispatchEvent(ev);\n\t};\n\n\tme.click = function (e) {\n\t\tvar target = e.target,\n\t\t\tev;\n\n\t\tif ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {\n\t\t\tev = document.createEvent('MouseEvents');\n\t\t\tev.initMouseEvent('click', true, true, e.view, 1,\n\t\t\t\ttarget.screenX, target.screenY, target.clientX, target.clientY,\n\t\t\t\te.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\n\t\t\t\t0, null);\n\n\t\t\tev._constructed = true;\n\t\t\ttarget.dispatchEvent(ev);\n\t\t}\n\t};\n\n\treturn me;\n})();\nfunction IScroll (el, options) {\n\tthis.wrapper = typeof el == 'string' ? document.querySelector(el) : el;\n\tthis.scroller = this.wrapper.children[0];\n\tthis.scrollerStyle = this.scroller.style;\t\t// cache style for better performance\n\n\tthis.options = {\n\n\t\tresizeScrollbars: true,\n\n\t\tmouseWheelSpeed: 20,\n\n\t\tsnapThreshold: 0.334,\n\n// INSERT POINT: OPTIONS\n\t\tdisablePointer : !utils.hasPointer,\n\t\tdisableTouch : utils.hasPointer || !utils.hasTouch,\n\t\tdisableMouse : utils.hasPointer || utils.hasTouch,\n\t\tstartX: 0,\n\t\tstartY: 0,\n\t\tscrollY: true,\n\t\tdirectionLockThreshold: 5,\n\t\tmomentum: true,\n\n\t\tbounce: true,\n\t\tbounceTime: 600,\n\t\tbounceEasing: '',\n\n\t\tpreventDefault: true,\n\t\tpreventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },\n\n\t\tHWCompositing: true,\n\t\tuseTransition: true,\n\t\tuseTransform: true,\n\t\tbindToWrapper: typeof window.onmousedown === \"undefined\"\n\t};\n\n\tfor ( var i in options ) {\n\t\tthis.options[i] = options[i];\n\t}\n\n\t// Normalize options\n\tthis.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';\n\n\tthis.options.useTransition = utils.hasTransition && this.options.useTransition;\n\tthis.options.useTransform = utils.hasTransform && this.options.useTransform;\n\n\tthis.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;\n\tthis.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n\t// If you want eventPassthrough I have to lock one of the axes\n\tthis.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;\n\tthis.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;\n\n\t// With eventPassthrough we also need lockDirection mechanism\n\tthis.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n\tthis.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n\tthis.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;\n\n\tthis.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;\n\n\tif ( this.options.tap === true ) {\n\t\tthis.options.tap = 'tap';\n\t}\n\n\tif ( this.options.shrinkScrollbars == 'scale' ) {\n\t\tthis.options.useTransition = false;\n\t}\n\n\tthis.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;\n\n\tif ( this.options.probeType == 3 ) {\n\t\tthis.options.useTransition = false;\t}\n\n// INSERT POINT: NORMALIZATION\n\n\t// Some defaults\n\tthis.x = 0;\n\tthis.y = 0;\n\tthis.directionX = 0;\n\tthis.directionY = 0;\n\tthis._events = {};\n\n// INSERT POINT: DEFAULTS\n\n\tthis._init();\n\tthis.refresh();\n\n\tthis.scrollTo(this.options.startX, this.options.startY);\n\tthis.enable();\n}\n\nIScroll.prototype = {\n\tversion: '5.2.0',\n\n\t_init: function () {\n\t\tthis._initEvents();\n\n\t\tif ( this.options.scrollbars || this.options.indicators ) {\n\t\t\tthis._initIndicators();\n\t\t}\n\n\t\tif ( this.options.mouseWheel ) {\n\t\t\tthis._initWheel();\n\t\t}\n\n\t\tif ( this.options.snap ) {\n\t\t\tthis._initSnap();\n\t\t}\n\n\t\tif ( this.options.keyBindings ) {\n\t\t\tthis._initKeys();\n\t\t}\n\n// INSERT POINT: _init\n\n\t},\n\n\tdestroy: function () {\n\t\tthis._initEvents(true);\n\t\tclearTimeout(this.resizeTimeout);\n \t\tthis.resizeTimeout = null;\n\t\tthis._execEvent('destroy');\n\t},\n\n\t_transitionEnd: function (e) {\n\t\tif ( e.target != this.scroller || !this.isInTransition ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._transitionTime();\n\t\tif ( !this.resetPosition(this.options.bounceTime) ) {\n\t\t\tthis.isInTransition = false;\n\t\t\tthis._execEvent('scrollEnd');\n\t\t}\n\t},\n\n\t_start: function (e) {\n\t\t// React to left mouse button only\n\t\tif ( utils.eventType[e.type] != 1 ) {\n\t\t // for button property\n\t\t // http://unixpapa.com/js/mouse.html\n\t\t var button;\n\t if (!e.which) {\n\t /* IE case */\n\t button = (e.button < 2) ? 0 :\n\t ((e.button == 4) ? 1 : 2);\n\t } else {\n\t /* All others */\n\t button = e.button;\n\t }\n\t\t\tif ( button !== 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point = e.touches ? e.touches[0] : e,\n\t\t\tpos;\n\n\t\tthis.initiated\t= utils.eventType[e.type];\n\t\tthis.moved\t\t= false;\n\t\tthis.distX\t\t= 0;\n\t\tthis.distY\t\t= 0;\n\t\tthis.directionX = 0;\n\t\tthis.directionY = 0;\n\t\tthis.directionLocked = 0;\n\n\t\tthis.startTime = utils.getTime();\n\n\t\tif ( this.options.useTransition && this.isInTransition ) {\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\tpos = this.getComputedPosition();\n\t\t\tthis._translate(Math.round(pos.x), Math.round(pos.y));\n\t\t\tthis._execEvent('scrollEnd');\n\t\t} else if ( !this.options.useTransition && this.isAnimating ) {\n\t\t\tthis.isAnimating = false;\n\t\t\tthis._execEvent('scrollEnd');\n\t\t}\n\n\t\tthis.startX = this.x;\n\t\tthis.startY = this.y;\n\t\tthis.absStartX = this.x;\n\t\tthis.absStartY = this.y;\n\t\tthis.pointX = point.pageX;\n\t\tthis.pointY = point.pageY;\n\n\t\tthis._execEvent('beforeScrollStart');\n\t},\n\n\t_move: function (e) {\n\t\tif ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault ) {\t// increases performance on Android? TODO: check!\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point\t\t= e.touches ? e.touches[0] : e,\n\t\t\tdeltaX\t\t= point.pageX - this.pointX,\n\t\t\tdeltaY\t\t= point.pageY - this.pointY,\n\t\t\ttimestamp\t= utils.getTime(),\n\t\t\tnewX, newY,\n\t\t\tabsDistX, absDistY;\n\n\t\tthis.pointX\t\t= point.pageX;\n\t\tthis.pointY\t\t= point.pageY;\n\n\t\tthis.distX\t\t+= deltaX;\n\t\tthis.distY\t\t+= deltaY;\n\t\tabsDistX\t\t= Math.abs(this.distX);\n\t\tabsDistY\t\t= Math.abs(this.distY);\n\n\t\t// We need to move at least 10 pixels for the scrolling to initiate\n\t\tif ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If you are scrolling in one direction lock the other\n\t\tif ( !this.directionLocked && !this.options.freeScroll ) {\n\t\t\tif ( absDistX > absDistY + this.options.directionLockThreshold ) {\n\t\t\t\tthis.directionLocked = 'h';\t\t// lock horizontally\n\t\t\t} else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {\n\t\t\t\tthis.directionLocked = 'v';\t\t// lock vertically\n\t\t\t} else {\n\t\t\t\tthis.directionLocked = 'n';\t\t// no lock\n\t\t\t}\n\t\t}\n\n\t\tif ( this.directionLocked == 'h' ) {\n\t\t\tif ( this.options.eventPassthrough == 'vertical' ) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if ( this.options.eventPassthrough == 'horizontal' ) {\n\t\t\t\tthis.initiated = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdeltaY = 0;\n\t\t} else if ( this.directionLocked == 'v' ) {\n\t\t\tif ( this.options.eventPassthrough == 'horizontal' ) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if ( this.options.eventPassthrough == 'vertical' ) {\n\t\t\t\tthis.initiated = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdeltaX = 0;\n\t\t}\n\n\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\n\t\tnewX = this.x + deltaX;\n\t\tnewY = this.y + deltaY;\n\n\t\t// Slow down if outside of the boundaries\n\t\tif ( newX > 0 || newX < this.maxScrollX ) {\n\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t}\n\t\tif ( newY > 0 || newY < this.maxScrollY ) {\n\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t}\n\n\t\tthis.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\n\t\tthis.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\n\n\t\tif ( !this.moved ) {\n\t\t\tthis._execEvent('scrollStart');\n\t\t}\n\n\t\tthis.moved = true;\n\n\t\tthis._translate(newX, newY);\n\n/* REPLACE START: _move */\n\t\tif ( timestamp - this.startTime > 300 ) {\n\t\t\tthis.startTime = timestamp;\n\t\t\tthis.startX = this.x;\n\t\t\tthis.startY = this.y;\n\n\t\t\tif ( this.options.probeType == 1 ) {\n\t\t\t\tthis._execEvent('scroll');\n\t\t\t}\n\t\t}\n\n\t\tif ( this.options.probeType > 1 ) {\n\t\t\tthis._execEvent('scroll');\n\t\t}\n/* REPLACE END: _move */\n\n\t},\n\n\t_end: function (e) {\n\t\tif ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point = e.changedTouches ? e.changedTouches[0] : e,\n\t\t\tmomentumX,\n\t\t\tmomentumY,\n\t\t\tduration = utils.getTime() - this.startTime,\n\t\t\tnewX = Math.round(this.x),\n\t\t\tnewY = Math.round(this.y),\n\t\t\tdistanceX = Math.abs(newX - this.startX),\n\t\t\tdistanceY = Math.abs(newY - this.startY),\n\t\t\ttime = 0,\n\t\t\teasing = '';\n\n\t\tthis.isInTransition = 0;\n\t\tthis.initiated = 0;\n\t\tthis.endTime = utils.getTime();\n\n\t\t// reset if we are outside of the boundaries\n\t\tif ( this.resetPosition(this.options.bounceTime) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY);\t// ensures that the last position is rounded\n\n\t\t// we scrolled less than 10 pixels\n\t\tif ( !this.moved ) {\n\t\t\tif ( this.options.tap ) {\n\t\t\t\tutils.tap(e, this.options.tap);\n\t\t\t}\n\n\t\t\tif ( this.options.click ) {\n\t\t\t\tutils.click(e);\n\t\t\t}\n\n\t\t\tthis._execEvent('scrollCancel');\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {\n\t\t\tthis._execEvent('flick');\n\t\t\treturn;\n\t\t}\n\n\t\t// start momentum animation if needed\n\t\tif ( this.options.momentum && duration < 300 ) {\n\t\t\tmomentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };\n\t\t\tmomentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };\n\t\t\tnewX = momentumX.destination;\n\t\t\tnewY = momentumY.destination;\n\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\tthis.isInTransition = 1;\n\t\t}\n\n\n\t\tif ( this.options.snap ) {\n\t\t\tvar snap = this._nearestSnap(newX, newY);\n\t\t\tthis.currentPage = snap;\n\t\t\ttime = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(newX - snap.x), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(newY - snap.y), 1000)\n\t\t\t\t\t), 300);\n\t\t\tnewX = snap.x;\n\t\t\tnewY = snap.y;\n\n\t\t\tthis.directionX = 0;\n\t\t\tthis.directionY = 0;\n\t\t\teasing = this.options.bounceEasing;\n\t\t}\n\n// INSERT POINT: _end\n\n\t\tif ( newX != this.x || newY != this.y ) {\n\t\t\t// change easing function when scroller goes out of the boundaries\n\t\t\tif ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {\n\t\t\t\teasing = utils.ease.quadratic;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._execEvent('scrollEnd');\n\t},\n\n\t_resize: function () {\n\t\tvar that = this;\n\n\t\tclearTimeout(this.resizeTimeout);\n\n\t\tthis.resizeTimeout = setTimeout(function () {\n\t\t\tthat.refresh();\n\t\t}, this.options.resizePolling);\n\t},\n\n\tresetPosition: function (time) {\n\t\tvar x = this.x,\n\t\t\ty = this.y;\n\n\t\ttime = time || 0;\n\n\t\tif ( !this.hasHorizontalScroll || this.x > 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( this.x < this.maxScrollX ) {\n\t\t\tx = this.maxScrollX;\n\t\t}\n\n\t\tif ( !this.hasVerticalScroll || this.y > 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( this.y < this.maxScrollY ) {\n\t\t\ty = this.maxScrollY;\n\t\t}\n\n\t\tif ( x == this.x && y == this.y ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.scrollTo(x, y, time, this.options.bounceEasing);\n\n\t\treturn true;\n\t},\n\n\tdisable: function () {\n\t\tthis.enabled = false;\n\t},\n\n\tenable: function () {\n\t\tthis.enabled = true;\n\t},\n\n\trefresh: function () {\n\t\tvar rf = this.wrapper.offsetHeight;\t\t// Force reflow\n\n\t\tthis.wrapperWidth\t= this.wrapper.clientWidth;\n\t\tthis.wrapperHeight\t= this.wrapper.clientHeight;\n\n/* REPLACE START: refresh */\n\n\t\tthis.scrollerWidth\t= this.scroller.offsetWidth;\n\t\tthis.scrollerHeight\t= this.scroller.offsetHeight;\n\n\t\tthis.maxScrollX\t\t= this.wrapperWidth - this.scrollerWidth;\n\t\tthis.maxScrollY\t\t= this.wrapperHeight - this.scrollerHeight;\n\n/* REPLACE END: refresh */\n\n\t\tthis.hasHorizontalScroll\t= this.options.scrollX && this.maxScrollX < 0;\n\t\tthis.hasVerticalScroll\t\t= this.options.scrollY && this.maxScrollY < 0;\n\n\t\tif ( !this.hasHorizontalScroll ) {\n\t\t\tthis.maxScrollX = 0;\n\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t}\n\n\t\tif ( !this.hasVerticalScroll ) {\n\t\t\tthis.maxScrollY = 0;\n\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t}\n\n\t\tthis.endTime = 0;\n\t\tthis.directionX = 0;\n\t\tthis.directionY = 0;\n\n\t\tthis.wrapperOffset = utils.offset(this.wrapper);\n\n\t\tthis._execEvent('refresh');\n\n\t\tthis.resetPosition();\n\n// INSERT POINT: _refresh\n\n\t},\n\n\ton: function (type, fn) {\n\t\tif ( !this._events[type] ) {\n\t\t\tthis._events[type] = [];\n\t\t}\n\n\t\tthis._events[type].push(fn);\n\t},\n\n\toff: function (type, fn) {\n\t\tif ( !this._events[type] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar index = this._events[type].indexOf(fn);\n\n\t\tif ( index > -1 ) {\n\t\t\tthis._events[type].splice(index, 1);\n\t\t}\n\t},\n\n\t_execEvent: function (type) {\n\t\tif ( !this._events[type] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = 0,\n\t\t\tl = this._events[type].length;\n\n\t\tif ( !l ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tthis._events[type][i].apply(this, [].slice.call(arguments, 1));\n\t\t}\n\t},\n\n\tscrollBy: function (x, y, time, easing) {\n\t\tx = this.x + x;\n\t\ty = this.y + y;\n\t\ttime = time || 0;\n\n\t\tthis.scrollTo(x, y, time, easing);\n\t},\n\n\tscrollTo: function (x, y, time, easing) {\n\t\teasing = easing || utils.ease.circular;\n\n\t\tthis.isInTransition = this.options.useTransition && time > 0;\n\t\tvar transitionType = this.options.useTransition && easing.style;\n\t\tif ( !time || transitionType ) {\n\t\t\t\tif(transitionType) {\n\t\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\t\tthis._transitionTime(time);\n\t\t\t\t}\n\t\t\tthis._translate(x, y);\n\t\t} else {\n\t\t\tthis._animate(x, y, time, easing.fn);\n\t\t}\n\t},\n\n\tscrollToElement: function (el, time, offsetX, offsetY, easing) {\n\t\tel = el.nodeType ? el : this.scroller.querySelector(el);\n\n\t\tif ( !el ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar pos = utils.offset(el);\n\n\t\tpos.left -= this.wrapperOffset.left;\n\t\tpos.top -= this.wrapperOffset.top;\n\n\t\t// if offsetX/Y are true we center the element to the screen\n\t\tif ( offsetX === true ) {\n\t\t\toffsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n\t\t}\n\t\tif ( offsetY === true ) {\n\t\t\toffsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n\t\t}\n\n\t\tpos.left -= offsetX || 0;\n\t\tpos.top -= offsetY || 0;\n\n\t\tpos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n\t\tpos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n\t\ttime = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;\n\n\t\tthis.scrollTo(pos.left, pos.top, time, easing);\n\t},\n\n\t_transitionTime: function (time) {\n\t\ttime = time || 0;\n\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.scrollerStyle[durationProp] = time + 'ms';\n\n\t\tif ( !time && utils.isBadAndroid ) {\n\t\t\tthis.scrollerStyle[durationProp] = '0.0001ms';\n\t\t\t// remove 0.0001ms\n\t\t\tvar self = this;\n\t\t\trAF(function() {\n\t\t\t\tif(self.scrollerStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.scrollerStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\n\t\tif ( this.indicators ) {\n\t\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t}\n\t\t}\n\n\n// INSERT POINT: _transitionTime\n\n\t},\n\n\t_transitionTimingFunction: function (easing) {\n\t\tthis.scrollerStyle[utils.style.transitionTimingFunction] = easing;\n\n\n\t\tif ( this.indicators ) {\n\t\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t}\n\t\t}\n\n\n// INSERT POINT: _transitionTimingFunction\n\n\t},\n\n\t_translate: function (x, y) {\n\t\tif ( this.options.useTransform ) {\n\n/* REPLACE START: _translate */\n\n\t\t\tthis.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;\n\n/* REPLACE END: _translate */\n\n\t\t} else {\n\t\t\tx = Math.round(x);\n\t\t\ty = Math.round(y);\n\t\t\tthis.scrollerStyle.left = x + 'px';\n\t\t\tthis.scrollerStyle.top = y + 'px';\n\t\t}\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\n\tif ( this.indicators ) {\n\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\tthis.indicators[i].updatePosition();\n\t\t}\n\t}\n\n\n// INSERT POINT: _translate\n\n\t},\n\n\t_initEvents: function (remove) {\n\t\tvar eventType = remove ? utils.removeEvent : utils.addEvent,\n\t\t\ttarget = this.options.bindToWrapper ? this.wrapper : window;\n\n\t\teventType(window, 'orientationchange', this);\n\t\teventType(window, 'resize', this);\n\n\t\tif ( this.options.click ) {\n\t\t\teventType(this.wrapper, 'click', this, true);\n\t\t}\n\n\t\tif ( !this.options.disableMouse ) {\n\t\t\teventType(this.wrapper, 'mousedown', this);\n\t\t\teventType(target, 'mousemove', this);\n\t\t\teventType(target, 'mousecancel', this);\n\t\t\teventType(target, 'mouseup', this);\n\t\t}\n\n\t\tif ( utils.hasPointer && !this.options.disablePointer ) {\n\t\t\teventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointermove'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointercancel'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointerup'), this);\n\t\t}\n\n\t\tif ( utils.hasTouch && !this.options.disableTouch ) {\n\t\t\teventType(this.wrapper, 'touchstart', this);\n\t\t\teventType(target, 'touchmove', this);\n\t\t\teventType(target, 'touchcancel', this);\n\t\t\teventType(target, 'touchend', this);\n\t\t}\n\n\t\teventType(this.scroller, 'transitionend', this);\n\t\teventType(this.scroller, 'webkitTransitionEnd', this);\n\t\teventType(this.scroller, 'oTransitionEnd', this);\n\t\teventType(this.scroller, 'MSTransitionEnd', this);\n\t},\n\n\tgetComputedPosition: function () {\n\t\tvar matrix = window.getComputedStyle(this.scroller, null),\n\t\t\tx, y;\n\n\t\tif ( this.options.useTransform ) {\n\t\t\tmatrix = matrix[utils.style.transform].split(')')[0].split(', ');\n\t\t\tx = +(matrix[12] || matrix[4]);\n\t\t\ty = +(matrix[13] || matrix[5]);\n\t\t} else {\n\t\t\tx = +matrix.left.replace(/[^-\\d.]/g, '');\n\t\t\ty = +matrix.top.replace(/[^-\\d.]/g, '');\n\t\t}\n\n\t\treturn { x: x, y: y };\n\t},\n\t_initIndicators: function () {\n\t\tvar interactive = this.options.interactiveScrollbars,\n\t\t\tcustomStyle = typeof this.options.scrollbars != 'string',\n\t\t\tindicators = [],\n\t\t\tindicator;\n\n\t\tvar that = this;\n\n\t\tthis.indicators = [];\n\n\t\tif ( this.options.scrollbars ) {\n\t\t\t// Vertical scrollbar\n\t\t\tif ( this.options.scrollY ) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: createDefaultScrollbar('v', interactive, this.options.scrollbars),\n\t\t\t\t\tinteractive: interactive,\n\t\t\t\t\tdefaultScrollbars: true,\n\t\t\t\t\tcustomStyle: customStyle,\n\t\t\t\t\tresize: this.options.resizeScrollbars,\n\t\t\t\t\tshrink: this.options.shrinkScrollbars,\n\t\t\t\t\tfade: this.options.fadeScrollbars,\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif ( this.options.scrollX ) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: createDefaultScrollbar('h', interactive, this.options.scrollbars),\n\t\t\t\t\tinteractive: interactive,\n\t\t\t\t\tdefaultScrollbars: true,\n\t\t\t\t\tcustomStyle: customStyle,\n\t\t\t\t\tresize: this.options.resizeScrollbars,\n\t\t\t\t\tshrink: this.options.shrinkScrollbars,\n\t\t\t\t\tfade: this.options.fadeScrollbars,\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\t\t}\n\n\t\tif ( this.options.indicators ) {\n\t\t\t// TODO: check concat compatibility\n\t\t\tindicators = indicators.concat(this.options.indicators);\n\t\t}\n\n\t\tfor ( var i = indicators.length; i--; ) {\n\t\t\tthis.indicators.push( new Indicator(this, indicators[i]) );\n\t\t}\n\n\t\t// TODO: check if we can use array.map (wide compatibility and performance issues)\n\t\tfunction _indicatorsMap (fn) {\n\t\t\tif (that.indicators) {\n\t\t\t\tfor ( var i = that.indicators.length; i--; ) {\n\t\t\t\t\tfn.call(that.indicators[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( this.options.fadeScrollbars ) {\n\t\t\tthis.on('scrollEnd', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('scrollCancel', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('scrollStart', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade(1);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('beforeScrollStart', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade(1, true);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\n\t\tthis.on('refresh', function () {\n\t\t\t_indicatorsMap(function () {\n\t\t\t\tthis.refresh();\n\t\t\t});\n\t\t});\n\n\t\tthis.on('destroy', function () {\n\t\t\t_indicatorsMap(function () {\n\t\t\t\tthis.destroy();\n\t\t\t});\n\n\t\t\tdelete this.indicators;\n\t\t});\n\t},\n\n\t_initWheel: function () {\n\t\tutils.addEvent(this.wrapper, 'wheel', this);\n\t\tutils.addEvent(this.wrapper, 'mousewheel', this);\n\t\tutils.addEvent(this.wrapper, 'DOMMouseScroll', this);\n\n\t\tthis.on('destroy', function () {\n\t\t\tclearTimeout(this.wheelTimeout);\n\t\t\tthis.wheelTimeout = null;\n\t\t\tutils.removeEvent(this.wrapper, 'wheel', this);\n\t\t\tutils.removeEvent(this.wrapper, 'mousewheel', this);\n\t\t\tutils.removeEvent(this.wrapper, 'DOMMouseScroll', this);\n\t\t});\n\t},\n\n\t_wheel: function (e) {\n\t\tif ( !this.enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tvar wheelDeltaX, wheelDeltaY,\n\t\t\tnewX, newY,\n\t\t\tthat = this;\n\n\t\tif ( this.wheelTimeout === undefined ) {\n\t\t\tthat._execEvent('scrollStart');\n\t\t}\n\n\t\t// Execute the scrollEnd event after 400ms the wheel stopped scrolling\n\t\tclearTimeout(this.wheelTimeout);\n\t\tthis.wheelTimeout = setTimeout(function () {\n\t\t\tif(!that.options.snap) {\n\t\t\t\tthat._execEvent('scrollEnd');\n\t\t\t}\n\t\t\tthat.wheelTimeout = undefined;\n\t\t}, 400);\n\n\t\tif ( 'deltaX' in e ) {\n\t\t\tif (e.deltaMode === 1) {\n\t\t\t\twheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;\n\t\t\t\twheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;\n\t\t\t} else {\n\t\t\t\twheelDeltaX = -e.deltaX;\n\t\t\t\twheelDeltaY = -e.deltaY;\n\t\t\t}\n\t\t} else if ( 'wheelDeltaX' in e ) {\n\t\t\twheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;\n\t\t\twheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;\n\t\t} else if ( 'wheelDelta' in e ) {\n\t\t\twheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;\n\t\t} else if ( 'detail' in e ) {\n\t\t\twheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\twheelDeltaX *= this.options.invertWheelDirection;\n\t\twheelDeltaY *= this.options.invertWheelDirection;\n\n\t\tif ( !this.hasVerticalScroll ) {\n\t\t\twheelDeltaX = wheelDeltaY;\n\t\t\twheelDeltaY = 0;\n\t\t}\n\n\t\tif ( this.options.snap ) {\n\t\t\tnewX = this.currentPage.pageX;\n\t\t\tnewY = this.currentPage.pageY;\n\n\t\t\tif ( wheelDeltaX > 0 ) {\n\t\t\t\tnewX--;\n\t\t\t} else if ( wheelDeltaX < 0 ) {\n\t\t\t\tnewX++;\n\t\t\t}\n\n\t\t\tif ( wheelDeltaY > 0 ) {\n\t\t\t\tnewY--;\n\t\t\t} else if ( wheelDeltaY < 0 ) {\n\t\t\t\tnewY++;\n\t\t\t}\n\n\t\t\tthis.goToPage(newX, newY);\n\n\t\t\treturn;\n\t\t}\n\n\t\tnewX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n\t\tnewY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n\t\tthis.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n\t\tthis.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n\t\tif ( newX > 0 ) {\n\t\t\tnewX = 0;\n\t\t} else if ( newX < this.maxScrollX ) {\n\t\t\tnewX = this.maxScrollX;\n\t\t}\n\n\t\tif ( newY > 0 ) {\n\t\t\tnewY = 0;\n\t\t} else if ( newY < this.maxScrollY ) {\n\t\t\tnewY = this.maxScrollY;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY, 0);\n\n\t\tif ( this.options.probeType > 1 ) {\n\t\t\tthis._execEvent('scroll');\n\t\t}\n\n// INSERT POINT: _wheel\n\t},\n\n\t_initSnap: function () {\n\t\tthis.currentPage = {};\n\n\t\tif ( typeof this.options.snap == 'string' ) {\n\t\t\tthis.options.snap = this.scroller.querySelectorAll(this.options.snap);\n\t\t}\n\n\t\tthis.on('refresh', function () {\n\t\t\tvar i = 0, l,\n\t\t\t\tm = 0, n,\n\t\t\t\tcx, cy,\n\t\t\t\tx = 0, y,\n\t\t\t\tstepX = this.options.snapStepX || this.wrapperWidth,\n\t\t\t\tstepY = this.options.snapStepY || this.wrapperHeight,\n\t\t\t\tel;\n\n\t\t\tthis.pages = [];\n\n\t\t\tif ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.snap === true ) {\n\t\t\t\tcx = Math.round( stepX / 2 );\n\t\t\t\tcy = Math.round( stepY / 2 );\n\n\t\t\t\twhile ( x > -this.scrollerWidth ) {\n\t\t\t\t\tthis.pages[i] = [];\n\t\t\t\t\tl = 0;\n\t\t\t\t\ty = 0;\n\n\t\t\t\t\twhile ( y > -this.scrollerHeight ) {\n\t\t\t\t\t\tthis.pages[i][l] = {\n\t\t\t\t\t\t\tx: Math.max(x, this.maxScrollX),\n\t\t\t\t\t\t\ty: Math.max(y, this.maxScrollY),\n\t\t\t\t\t\t\twidth: stepX,\n\t\t\t\t\t\t\theight: stepY,\n\t\t\t\t\t\t\tcx: x - cx,\n\t\t\t\t\t\t\tcy: y - cy\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ty -= stepY;\n\t\t\t\t\t\tl++;\n\t\t\t\t\t}\n\n\t\t\t\t\tx -= stepX;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tel = this.options.snap;\n\t\t\t\tl = el.length;\n\t\t\t\tn = -1;\n\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tif ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {\n\t\t\t\t\t\tm = 0;\n\t\t\t\t\t\tn++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this.pages[m] ) {\n\t\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tx = Math.max(-el[i].offsetLeft, this.maxScrollX);\n\t\t\t\t\ty = Math.max(-el[i].offsetTop, this.maxScrollY);\n\t\t\t\t\tcx = x - Math.round(el[i].offsetWidth / 2);\n\t\t\t\t\tcy = y - Math.round(el[i].offsetHeight / 2);\n\n\t\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\t\tx: x,\n\t\t\t\t\t\ty: y,\n\t\t\t\t\t\twidth: el[i].offsetWidth,\n\t\t\t\t\t\theight: el[i].offsetHeight,\n\t\t\t\t\t\tcx: cx,\n\t\t\t\t\t\tcy: cy\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( x > this.maxScrollX ) {\n\t\t\t\t\t\tm++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);\n\n\t\t\t// Update snap threshold if needed\n\t\t\tif ( this.options.snapThreshold % 1 === 0 ) {\n\t\t\t\tthis.snapThresholdX = this.options.snapThreshold;\n\t\t\t\tthis.snapThresholdY = this.options.snapThreshold;\n\t\t\t} else {\n\t\t\t\tthis.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);\n\t\t\t\tthis.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);\n\t\t\t}\n\t\t});\n\n\t\tthis.on('flick', function () {\n\t\t\tvar time = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(this.x - this.startX), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(this.y - this.startY), 1000)\n\t\t\t\t\t), 300);\n\n\t\t\tthis.goToPage(\n\t\t\t\tthis.currentPage.pageX + this.directionX,\n\t\t\t\tthis.currentPage.pageY + this.directionY,\n\t\t\t\ttime\n\t\t\t);\n\t\t});\n\t},\n\n\t_nearestSnap: function (x, y) {\n\t\tif ( !this.pages.length ) {\n\t\t\treturn { x: 0, y: 0, pageX: 0, pageY: 0 };\n\t\t}\n\n\t\tvar i = 0,\n\t\t\tl = this.pages.length,\n\t\t\tm = 0;\n\n\t\t// Check if we exceeded the snap threshold\n\t\tif ( Math.abs(x - this.absStartX) < this.snapThresholdX &&\n\t\t\tMath.abs(y - this.absStartY) < this.snapThresholdY ) {\n\t\t\treturn this.currentPage;\n\t\t}\n\n\t\tif ( x > 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( x < this.maxScrollX ) {\n\t\t\tx = this.maxScrollX;\n\t\t}\n\n\t\tif ( y > 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( y < this.maxScrollY ) {\n\t\t\ty = this.maxScrollY;\n\t\t}\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( x >= this.pages[i][0].cx ) {\n\t\t\t\tx = this.pages[i][0].x;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tl = this.pages[i].length;\n\n\t\tfor ( ; m < l; m++ ) {\n\t\t\tif ( y >= this.pages[0][m].cy ) {\n\t\t\t\ty = this.pages[0][m].y;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ( i == this.currentPage.pageX ) {\n\t\t\ti += this.directionX;\n\n\t\t\tif ( i < 0 ) {\n\t\t\t\ti = 0;\n\t\t\t} else if ( i >= this.pages.length ) {\n\t\t\t\ti = this.pages.length - 1;\n\t\t\t}\n\n\t\t\tx = this.pages[i][0].x;\n\t\t}\n\n\t\tif ( m == this.currentPage.pageY ) {\n\t\t\tm += this.directionY;\n\n\t\t\tif ( m < 0 ) {\n\t\t\t\tm = 0;\n\t\t\t} else if ( m >= this.pages[0].length ) {\n\t\t\t\tm = this.pages[0].length - 1;\n\t\t\t}\n\n\t\t\ty = this.pages[0][m].y;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tpageX: i,\n\t\t\tpageY: m\n\t\t};\n\t},\n\n\tgoToPage: function (x, y, time, easing) {\n\t\teasing = easing || this.options.bounceEasing;\n\n\t\tif ( x >= this.pages.length ) {\n\t\t\tx = this.pages.length - 1;\n\t\t} else if ( x < 0 ) {\n\t\t\tx = 0;\n\t\t}\n\n\t\tif ( y >= this.pages[x].length ) {\n\t\t\ty = this.pages[x].length - 1;\n\t\t} else if ( y < 0 ) {\n\t\t\ty = 0;\n\t\t}\n\n\t\tvar posX = this.pages[x][y].x,\n\t\t\tposY = this.pages[x][y].y;\n\n\t\ttime = time === undefined ? this.options.snapSpeed || Math.max(\n\t\t\tMath.max(\n\t\t\t\tMath.min(Math.abs(posX - this.x), 1000),\n\t\t\t\tMath.min(Math.abs(posY - this.y), 1000)\n\t\t\t), 300) : time;\n\n\t\tthis.currentPage = {\n\t\t\tx: posX,\n\t\t\ty: posY,\n\t\t\tpageX: x,\n\t\t\tpageY: y\n\t\t};\n\n\t\tthis.scrollTo(posX, posY, time, easing);\n\t},\n\n\tnext: function (time, easing) {\n\t\tvar x = this.currentPage.pageX,\n\t\t\ty = this.currentPage.pageY;\n\n\t\tx++;\n\n\t\tif ( x >= this.pages.length && this.hasVerticalScroll ) {\n\t\t\tx = 0;\n\t\t\ty++;\n\t\t}\n\n\t\tthis.goToPage(x, y, time, easing);\n\t},\n\n\tprev: function (time, easing) {\n\t\tvar x = this.currentPage.pageX,\n\t\t\ty = this.currentPage.pageY;\n\n\t\tx--;\n\n\t\tif ( x < 0 && this.hasVerticalScroll ) {\n\t\t\tx = 0;\n\t\t\ty--;\n\t\t}\n\n\t\tthis.goToPage(x, y, time, easing);\n\t},\n\n\t_initKeys: function (e) {\n\t\t// default key bindings\n\t\tvar keys = {\n\t\t\tpageUp: 33,\n\t\t\tpageDown: 34,\n\t\t\tend: 35,\n\t\t\thome: 36,\n\t\t\tleft: 37,\n\t\t\tup: 38,\n\t\t\tright: 39,\n\t\t\tdown: 40\n\t\t};\n\t\tvar i;\n\n\t\t// if you give me characters I give you keycode\n\t\tif ( typeof this.options.keyBindings == 'object' ) {\n\t\t\tfor ( i in this.options.keyBindings ) {\n\t\t\t\tif ( typeof this.options.keyBindings[i] == 'string' ) {\n\t\t\t\t\tthis.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.options.keyBindings = {};\n\t\t}\n\n\t\tfor ( i in keys ) {\n\t\t\tthis.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];\n\t\t}\n\n\t\tutils.addEvent(window, 'keydown', this);\n\n\t\tthis.on('destroy', function () {\n\t\t\tutils.removeEvent(window, 'keydown', this);\n\t\t});\n\t},\n\n\t_key: function (e) {\n\t\tif ( !this.enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar snap = this.options.snap,\t// we are using this alot, better to cache it\n\t\t\tnewX = snap ? this.currentPage.pageX : this.x,\n\t\t\tnewY = snap ? this.currentPage.pageY : this.y,\n\t\t\tnow = utils.getTime(),\n\t\t\tprevTime = this.keyTime || 0,\n\t\t\tacceleration = 0.250,\n\t\t\tpos;\n\n\t\tif ( this.options.useTransition && this.isInTransition ) {\n\t\t\tpos = this.getComputedPosition();\n\n\t\t\tthis._translate(Math.round(pos.x), Math.round(pos.y));\n\t\t\tthis.isInTransition = false;\n\t\t}\n\n\t\tthis.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;\n\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase this.options.keyBindings.pageUp:\n\t\t\t\tif ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n\t\t\t\t\tnewX += snap ? 1 : this.wrapperWidth;\n\t\t\t\t} else {\n\t\t\t\t\tnewY += snap ? 1 : this.wrapperHeight;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.pageDown:\n\t\t\t\tif ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n\t\t\t\t\tnewX -= snap ? 1 : this.wrapperWidth;\n\t\t\t\t} else {\n\t\t\t\t\tnewY -= snap ? 1 : this.wrapperHeight;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.end:\n\t\t\t\tnewX = snap ? this.pages.length-1 : this.maxScrollX;\n\t\t\t\tnewY = snap ? this.pages[0].length-1 : this.maxScrollY;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.home:\n\t\t\t\tnewX = 0;\n\t\t\t\tnewY = 0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.left:\n\t\t\t\tnewX += snap ? -1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.up:\n\t\t\t\tnewY += snap ? 1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.right:\n\t\t\t\tnewX -= snap ? -1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.down:\n\t\t\t\tnewY -= snap ? 1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif ( snap ) {\n\t\t\tthis.goToPage(newX, newY);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( newX > 0 ) {\n\t\t\tnewX = 0;\n\t\t\tthis.keyAcceleration = 0;\n\t\t} else if ( newX < this.maxScrollX ) {\n\t\t\tnewX = this.maxScrollX;\n\t\t\tthis.keyAcceleration = 0;\n\t\t}\n\n\t\tif ( newY > 0 ) {\n\t\t\tnewY = 0;\n\t\t\tthis.keyAcceleration = 0;\n\t\t} else if ( newY < this.maxScrollY ) {\n\t\t\tnewY = this.maxScrollY;\n\t\t\tthis.keyAcceleration = 0;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY, 0);\n\n\t\tthis.keyTime = now;\n\t},\n\n\t_animate: function (destX, destY, duration, easingFn) {\n\t\tvar that = this,\n\t\t\tstartX = this.x,\n\t\t\tstartY = this.y,\n\t\t\tstartTime = utils.getTime(),\n\t\t\tdestTime = startTime + duration;\n\n\t\tfunction step () {\n\t\t\tvar now = utils.getTime(),\n\t\t\t\tnewX, newY,\n\t\t\t\teasing;\n\n\t\t\tif ( now >= destTime ) {\n\t\t\t\tthat.isAnimating = false;\n\t\t\t\tthat._translate(destX, destY);\n\t\t\t\t\n\t\t\t\tif ( !that.resetPosition(that.options.bounceTime) ) {\n\t\t\t\t\tthat._execEvent('scrollEnd');\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnow = ( now - startTime ) / duration;\n\t\t\teasing = easingFn(now);\n\t\t\tnewX = ( destX - startX ) * easing + startX;\n\t\t\tnewY = ( destY - startY ) * easing + startY;\n\t\t\tthat._translate(newX, newY);\n\n\t\t\tif ( that.isAnimating ) {\n\t\t\t\trAF(step);\n\t\t\t}\n\n\t\t\tif ( that.options.probeType == 3 ) {\n\t\t\t\tthat._execEvent('scroll');\n\t\t\t}\n\t\t}\n\n\t\tthis.isAnimating = true;\n\t\tstep();\n\t},\n\n\thandleEvent: function (e) {\n\t\tswitch ( e.type ) {\n\t\t\tcase 'touchstart':\n\t\t\tcase 'pointerdown':\n\t\t\tcase 'MSPointerDown':\n\t\t\tcase 'mousedown':\n\t\t\t\tthis._start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchmove':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'MSPointerMove':\n\t\t\tcase 'mousemove':\n\t\t\t\tthis._move(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchend':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'MSPointerUp':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'touchcancel':\n\t\t\tcase 'pointercancel':\n\t\t\tcase 'MSPointerCancel':\n\t\t\tcase 'mousecancel':\n\t\t\t\tthis._end(e);\n\t\t\t\tbreak;\n\t\t\tcase 'orientationchange':\n\t\t\tcase 'resize':\n\t\t\t\tthis._resize();\n\t\t\t\tbreak;\n\t\t\tcase 'transitionend':\n\t\t\tcase 'webkitTransitionEnd':\n\t\t\tcase 'oTransitionEnd':\n\t\t\tcase 'MSTransitionEnd':\n\t\t\t\tthis._transitionEnd(e);\n\t\t\t\tbreak;\n\t\t\tcase 'wheel':\n\t\t\tcase 'DOMMouseScroll':\n\t\t\tcase 'mousewheel':\n\t\t\t\tthis._wheel(e);\n\t\t\t\tbreak;\n\t\t\tcase 'keydown':\n\t\t\t\tthis._key(e);\n\t\t\t\tbreak;\n\t\t\tcase 'click':\n\t\t\t\tif ( this.enabled && !e._constructed ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\nfunction createDefaultScrollbar (direction, interactive, type) {\n\tvar scrollbar = document.createElement('div'),\n\t\tindicator = document.createElement('div');\n\n\tif ( type === true ) {\n\t\tscrollbar.style.cssText = 'position:absolute;z-index:9999';\n\t\tindicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';\n\t}\n\n\tindicator.className = 'iScrollIndicator';\n\n\tif ( direction == 'h' ) {\n\t\tif ( type === true ) {\n\t\t\tscrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n\t\t\tindicator.style.height = '100%';\n\t\t}\n\t\tscrollbar.className = 'iScrollHorizontalScrollbar';\n\t} else {\n\t\tif ( type === true ) {\n\t\t\tscrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n\t\t\tindicator.style.width = '100%';\n\t\t}\n\t\tscrollbar.className = 'iScrollVerticalScrollbar';\n\t}\n\n\tscrollbar.style.cssText += ';overflow:hidden';\n\n\tif ( !interactive ) {\n\t\tscrollbar.style.pointerEvents = 'none';\n\t}\n\n\tscrollbar.appendChild(indicator);\n\n\treturn scrollbar;\n}\n\nfunction Indicator (scroller, options) {\n\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\tthis.wrapperStyle = this.wrapper.style;\n\tthis.indicator = this.wrapper.children[0];\n\tthis.indicatorStyle = this.indicator.style;\n\tthis.scroller = scroller;\n\n\tthis.options = {\n\t\tlistenX: true,\n\t\tlistenY: true,\n\t\tinteractive: false,\n\t\tresize: true,\n\t\tdefaultScrollbars: false,\n\t\tshrink: false,\n\t\tfade: false,\n\t\tspeedRatioX: 0,\n\t\tspeedRatioY: 0\n\t};\n\n\tfor ( var i in options ) {\n\t\tthis.options[i] = options[i];\n\t}\n\n\tthis.sizeRatioX = 1;\n\tthis.sizeRatioY = 1;\n\tthis.maxPosX = 0;\n\tthis.maxPosY = 0;\n\n\tif ( this.options.interactive ) {\n\t\tif ( !this.options.disableTouch ) {\n\t\t\tutils.addEvent(this.indicator, 'touchstart', this);\n\t\t\tutils.addEvent(window, 'touchend', this);\n\t\t}\n\t\tif ( !this.options.disablePointer ) {\n\t\t\tutils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\tutils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);\n\t\t}\n\t\tif ( !this.options.disableMouse ) {\n\t\t\tutils.addEvent(this.indicator, 'mousedown', this);\n\t\t\tutils.addEvent(window, 'mouseup', this);\n\t\t}\n\t}\n\n\tif ( this.options.fade ) {\n\t\tthis.wrapperStyle[utils.style.transform] = this.scroller.translateZ;\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';\n\t\t// remove 0.0001ms\n\t\tvar self = this;\n\t\tif(utils.isBadAndroid) {\n\t\t\trAF(function() {\n\t\t\t\tif(self.wrapperStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.wrapperStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.wrapperStyle.opacity = '0';\n\t}\n}\n\nIndicator.prototype = {\n\thandleEvent: function (e) {\n\t\tswitch ( e.type ) {\n\t\t\tcase 'touchstart':\n\t\t\tcase 'pointerdown':\n\t\t\tcase 'MSPointerDown':\n\t\t\tcase 'mousedown':\n\t\t\t\tthis._start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchmove':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'MSPointerMove':\n\t\t\tcase 'mousemove':\n\t\t\t\tthis._move(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchend':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'MSPointerUp':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'touchcancel':\n\t\t\tcase 'pointercancel':\n\t\t\tcase 'MSPointerCancel':\n\t\t\tcase 'mousecancel':\n\t\t\t\tthis._end(e);\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\tdestroy: function () {\n\t\tif ( this.options.fadeScrollbars ) {\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\t\t}\n\t\tif ( this.options.interactive ) {\n\t\t\tutils.removeEvent(this.indicator, 'touchstart', this);\n\t\t\tutils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\tutils.removeEvent(this.indicator, 'mousedown', this);\n\n\t\t\tutils.removeEvent(window, 'touchmove', this);\n\t\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\t\tutils.removeEvent(window, 'mousemove', this);\n\n\t\t\tutils.removeEvent(window, 'touchend', this);\n\t\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);\n\t\t\tutils.removeEvent(window, 'mouseup', this);\n\t\t}\n\n\t\tif ( this.options.defaultScrollbars ) {\n\t\t\tthis.wrapper.parentNode.removeChild(this.wrapper);\n\t\t}\n\t},\n\n\t_start: function (e) {\n\t\tvar point = e.touches ? e.touches[0] : e;\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tthis.transitionTime();\n\n\t\tthis.initiated = true;\n\t\tthis.moved = false;\n\t\tthis.lastPointX\t= point.pageX;\n\t\tthis.lastPointY\t= point.pageY;\n\n\t\tthis.startTime\t= utils.getTime();\n\n\t\tif ( !this.options.disableTouch ) {\n\t\t\tutils.addEvent(window, 'touchmove', this);\n\t\t}\n\t\tif ( !this.options.disablePointer ) {\n\t\t\tutils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\t}\n\t\tif ( !this.options.disableMouse ) {\n\t\t\tutils.addEvent(window, 'mousemove', this);\n\t\t}\n\n\t\tthis.scroller._execEvent('beforeScrollStart');\n\t},\n\n\t_move: function (e) {\n\t\tvar point = e.touches ? e.touches[0] : e,\n\t\t\tdeltaX, deltaY,\n\t\t\tnewX, newY,\n\t\t\ttimestamp = utils.getTime();\n\n\t\tif ( !this.moved ) {\n\t\t\tthis.scroller._execEvent('scrollStart');\n\t\t}\n\n\t\tthis.moved = true;\n\n\t\tdeltaX = point.pageX - this.lastPointX;\n\t\tthis.lastPointX = point.pageX;\n\n\t\tdeltaY = point.pageY - this.lastPointY;\n\t\tthis.lastPointY = point.pageY;\n\n\t\tnewX = this.x + deltaX;\n\t\tnewY = this.y + deltaY;\n\n\t\tthis._pos(newX, newY);\n\n\n\t\tif ( this.scroller.options.probeType == 1 && timestamp - this.startTime > 300 ) {\n\t\t\tthis.startTime = timestamp;\n\t\t\tthis.scroller._execEvent('scroll');\n\t\t} else if ( this.scroller.options.probeType > 1 ) {\n\t\t\tthis.scroller._execEvent('scroll');\n\t\t}\n\n\n// INSERT POINT: indicator._move\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t},\n\n\t_end: function (e) {\n\t\tif ( !this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.initiated = false;\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tutils.removeEvent(window, 'touchmove', this);\n\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\tutils.removeEvent(window, 'mousemove', this);\n\n\t\tif ( this.scroller.options.snap ) {\n\t\t\tvar snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n\t\t\tvar time = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(this.scroller.x - snap.x), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(this.scroller.y - snap.y), 1000)\n\t\t\t\t\t), 300);\n\n\t\t\tif ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {\n\t\t\t\tthis.scroller.directionX = 0;\n\t\t\t\tthis.scroller.directionY = 0;\n\t\t\t\tthis.scroller.currentPage = snap;\n\t\t\t\tthis.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);\n\t\t\t}\n\t\t}\n\n\t\tif ( this.moved ) {\n\t\t\tthis.scroller._execEvent('scrollEnd');\n\t\t}\n\t},\n\n\ttransitionTime: function (time) {\n\t\ttime = time || 0;\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.indicatorStyle[durationProp] = time + 'ms';\n\n\t\tif ( !time && utils.isBadAndroid ) {\n\t\t\tthis.indicatorStyle[durationProp] = '0.0001ms';\n\t\t\t// remove 0.0001ms\n\t\t\tvar self = this;\n\t\t\trAF(function() {\n\t\t\t\tif(self.indicatorStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.indicatorStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\ttransitionTimingFunction: function (easing) {\n\t\tthis.indicatorStyle[utils.style.transitionTimingFunction] = easing;\n\t},\n\n\trefresh: function () {\n\t\tthis.transitionTime();\n\n\t\tif ( this.options.listenX && !this.options.listenY ) {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t} else if ( this.options.listenY && !this.options.listenX ) {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t} else {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t}\n\n\t\tif ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {\n\t\t\tutils.addClass(this.wrapper, 'iScrollBothScrollbars');\n\t\t\tutils.removeClass(this.wrapper, 'iScrollLoneScrollbar');\n\n\t\t\tif ( this.options.defaultScrollbars && this.options.customStyle ) {\n\t\t\t\tif ( this.options.listenX ) {\n\t\t\t\t\tthis.wrapper.style.right = '8px';\n\t\t\t\t} else {\n\t\t\t\t\tthis.wrapper.style.bottom = '8px';\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tutils.removeClass(this.wrapper, 'iScrollBothScrollbars');\n\t\t\tutils.addClass(this.wrapper, 'iScrollLoneScrollbar');\n\n\t\t\tif ( this.options.defaultScrollbars && this.options.customStyle ) {\n\t\t\t\tif ( this.options.listenX ) {\n\t\t\t\t\tthis.wrapper.style.right = '2px';\n\t\t\t\t} else {\n\t\t\t\t\tthis.wrapper.style.bottom = '2px';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar r = this.wrapper.offsetHeight;\t// force refresh\n\n\t\tif ( this.options.listenX ) {\n\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\tif ( this.options.resize ) {\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\t\t\t} else {\n\t\t\t\tthis.indicatorWidth = this.indicator.clientWidth;\n\t\t\t}\n\n\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\tif ( this.options.shrink == 'clip' ) {\n\t\t\t\tthis.minBoundaryX = -this.indicatorWidth + 8;\n\t\t\t\tthis.maxBoundaryX = this.wrapperWidth - 8;\n\t\t\t} else {\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\t\t\t}\n\n\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t}\n\n\t\tif ( this.options.listenY ) {\n\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\tif ( this.options.resize ) {\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\t\t\t} else {\n\t\t\t\tthis.indicatorHeight = this.indicator.clientHeight;\n\t\t\t}\n\n\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\tif ( this.options.shrink == 'clip' ) {\n\t\t\t\tthis.minBoundaryY = -this.indicatorHeight + 8;\n\t\t\t\tthis.maxBoundaryY = this.wrapperHeight - 8;\n\t\t\t} else {\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\t\t\t}\n\n\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t}\n\n\t\tthis.updatePosition();\n\t},\n\n\tupdatePosition: function () {\n\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\tif ( !this.options.ignoreBoundaries ) {\n\t\t\tif ( x < this.minBoundaryX ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\t}\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if ( x > this.maxBoundaryX ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t\t} else {\n\t\t\t\t\tx = this.maxBoundaryX;\n\t\t\t\t}\n\t\t\t} else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif ( y < this.minBoundaryY ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\t}\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if ( y > this.maxBoundaryY ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t\t} else {\n\t\t\t\t\ty = this.maxBoundaryY;\n\t\t\t\t}\n\t\t\t} else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\t\t}\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\tif ( this.scroller.options.useTransform ) {\n\t\t\tthis.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;\n\t\t} else {\n\t\t\tthis.indicatorStyle.left = x + 'px';\n\t\t\tthis.indicatorStyle.top = y + 'px';\n\t\t}\n\t},\n\n\t_pos: function (x, y) {\n\t\tif ( x < 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( x > this.maxPosX ) {\n\t\t\tx = this.maxPosX;\n\t\t}\n\n\t\tif ( y < 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( y > this.maxPosY ) {\n\t\t\ty = this.maxPosY;\n\t\t}\n\n\t\tx = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;\n\t\ty = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;\n\n\t\tthis.scroller.scrollTo(x, y);\n\t},\n\n\tfade: function (val, hold) {\n\t\tif ( hold && !this.visible ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(this.fadeTimeout);\n\t\tthis.fadeTimeout = null;\n\n\t\tvar time = val ? 250 : 500,\n\t\t\tdelay = val ? 0 : 300;\n\n\t\tval = val ? '1' : '0';\n\n\t\tthis.wrapperStyle[utils.style.transitionDuration] = time + 'ms';\n\n\t\tthis.fadeTimeout = setTimeout((function (val) {\n\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\tthis.visible = +val;\n\t\t}).bind(this, val), delay);\n\t}\n};\n\nIScroll.utils = utils;\n\nif ( typeof module != 'undefined' && module.exports ) {\n\tmodule.exports = IScroll;\n} else if ( typeof define == 'function' && define.amd ) {\n define( function () { return IScroll; } );\n} else {\n\twindow.IScroll = IScroll;\n}\n\n})(window, document, Math);\n"],"sourceRoot":""}