{"version":3,"sources":["iscroll-probe.js"],"names":["window","document","Math","IScroll","el","options","this","wrapper","querySelector","scroller","children","scrollerStyle","style","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","utils","hasPointer","disableTouch","hasTouch","disableMouse","startX","startY","scrollY","directionLockThreshold","momentum","bounce","bounceTime","bounceEasing","preventDefault","preventDefaultException","tagName","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","i","translateZ","hasPerspective","hasTransition","hasTransform","eventPassthrough","scrollX","freeScroll","ease","circular","resizePolling","undefined","tap","test","position","shrinkScrollbars","invertWheelDirection","probeType","x","y","directionX","directionY","_events","_init","refresh","scrollTo","enable","createDefaultScrollbar","direction","interactive","type","scrollbar","createElement","indicator","cssText","className","height","width","pointerEvents","appendChild","Indicator","wrapperStyle","indicatorStyle","listenX","listenY","resize","defaultScrollbars","shrink","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","addEvent","prefixPointerEvent","transform","durationProp","transitionDuration","isBadAndroid","self","rAF","opacity","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","setTimeout","_prefixStyle","_vendor","charAt","toUpperCase","substr","me","_elementStyle","vendors","l","length","getTime","Date","now","extend","target","obj","fn","capture","addEventListener","removeEvent","removeEventListener","pointerEvent","MSPointerEvent","current","start","time","lowerMargin","wrapperSize","deceleration","destination","duration","distance","speed","abs","round","_transform","PointerEvent","appVersion","navigator","safariVersion","match","parseFloat","transitionTimingFunction","transitionDelay","transformOrigin","touchAction","hasClass","e","c","RegExp","addClass","newclass","split","push","join","removeClass","re","replace","offset","left","offsetLeft","top","offsetTop","offsetParent","exceptions","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","pointerdown","pointermove","pointerup","MSPointerDown","MSPointerMove","MSPointerUp","quadratic","k","sqrt","back","elastic","pow","sin","f","PI","eventName","ev","createEvent","initEvent","pageX","pageY","dispatchEvent","click","MouseEvent","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","_constructed","getTouchAction","addPinch","getRect","SVGElement","rect","getBoundingClientRect","offsetWidth","offsetHeight","prototype","version","_initEvents","scrollbars","indicators","_initIndicators","mouseWheel","_initWheel","snap","_initSnap","keyBindings","_initKeys","destroy","clearTimeout","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","_start","which","enabled","initiated","pos","point","touches","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","changedTouches","momentumX","momentumY","distanceX","distanceY","easing","flick","wrapperWidth","wrapperHeight","max","_nearestSnap","currentPage","snapSpeed","min","_resize","that","disable","clientWidth","clientHeight","scrollerWidth","scrollerHeight","wrapperOffset","on","off","index","indexOf","splice","apply","slice","call","arguments","scrollBy","transitionType","_transitionTimingFunction","_animate","scrollToElement","offsetX","offsetY","nodeType","elRect","wrapperRect","transitionTime","updatePosition","remove","matrix","getComputedStyle","_indicatorsMap","interactiveScrollbars","customStyle","fadeScrollbars","concat","wheelTimeout","_wheel","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","goToPage","querySelectorAll","n","cx","cy","m","stepX","snapStepX","stepY","snapStepY","pages","snapThresholdX","snapThresholdY","posX","posY","next","prev","keys","pageUp","pageDown","end","home","up","right","down","charCodeAt","_key","prevTime","keyTime","keyAcceleration","keyCode","destX","destY","easingFn","step","destTime","handleEvent","stopPropagation","fadeTimeout","parentNode","removeChild","lastPointX","lastPointY","_pos","display","bottom","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","val","hold","visible","delay","bind","module","exports","define","amd"],"mappings":"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","file":"../iscroll-probe.min.js","sourcesContent":["/*! iScroll v5.2.0-snapshot ~ (c) 2008-2017 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\ttouchAction: _prefixStyle('touchAction')\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\t// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent\n\t\t\t// initMouseEvent is deprecated.\n\t\t\tev = document.createEvent(window.MouseEvent ? 'MouseEvents' : 'Event');\n\t\t\tev.initEvent('click', true, true);\n\t\t\tev.view = e.view || window;\n\t\t\tev.detail = 1;\n\t\t\tev.screenX = target.screenX || 0;\n\t\t\tev.screenY = target.screenY || 0;\n\t\t\tev.clientX = target.clientX || 0;\n\t\t\tev.clientY = target.clientY || 0;\n\t\t\tev.ctrlKey = !!e.ctrlKey;\n\t\t\tev.altKey = !!e.altKey;\n\t\t\tev.shiftKey = !!e.shiftKey;\n\t\t\tev.metaKey = !!e.metaKey;\n\t\t\tev.button = 0;\n\t\t\tev.relatedTarget = null;\n\t\t\tev._constructed = true;\n\t\t\ttarget.dispatchEvent(ev);\n\t\t}\n\t};\n\n\tme.getTouchAction = function(eventPassthrough, addPinch) {\n\t\tvar touchAction = 'none';\n\t\tif ( eventPassthrough === 'vertical' ) {\n\t\t\ttouchAction = 'pan-y';\n\t\t} else if (eventPassthrough === 'horizontal' ) {\n\t\t\ttouchAction = 'pan-x';\n\t\t}\n\t\tif (addPinch && touchAction != 'none') {\n\t\t\t// add pinch-zoom support if the browser supports it, but if not (eg. Chrome <55) do nothing\n\t\t\ttouchAction += ' pinch-zoom';\n\t\t}\n\t\treturn touchAction;\n\t};\n\n\tme.getRect = function(el) {\n\t\tif (el instanceof SVGElement) {\n\t\t\tvar rect = el.getBoundingClientRect();\n\t\t\treturn {\n\t\t\t\ttop : rect.top,\n\t\t\t\tleft : rect.left,\n\t\t\t\twidth : rect.width,\n\t\t\t\theight : rect.height\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttop : el.offsetTop,\n\t\t\t\tleft : el.offsetLeft,\n\t\t\t\twidth : el.offsetWidth,\n\t\t\t\theight : el.offsetHeight\n\t\t\t};\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\t// https://github.com/cubiq/iscroll/issues/1029\n\tif (!this.options.useTransition && !this.options.useTransform) {\n\t\tif(!(/relative|absolute/i).test(this.scrollerStyle.position)) {\n\t\t\tthis.scrollerStyle.position = \"relative\";\n\t\t}\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-snapshot',\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\tutils.getRect(this.wrapper);\t\t// Force reflow\n\n\t\tthis.wrapperWidth\t= this.wrapper.clientWidth;\n\t\tthis.wrapperHeight\t= this.wrapper.clientHeight;\n\n\t\tvar rect = utils.getRect(this.scroller);\n/* REPLACE START: refresh */\n\n\t\tthis.scrollerWidth\t= rect.width;\n\t\tthis.scrollerHeight\t= rect.height;\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\tif(utils.hasPointer && !this.options.disablePointer) {\n\t\t\t// The wrapper should have `touchAction` property for using pointerEvent.\n\t\t\tthis.wrapper.style[utils.style.touchAction] = utils.getTouchAction(this.options.eventPassthrough, true);\n\n\t\t\t// case. not support 'pinch-zoom'\n\t\t\t// https://github.com/cubiq/iscroll/issues/1118#issuecomment-270057583\n\t\t\tif (!this.wrapper.style[utils.style.touchAction]) {\n\t\t\t\tthis.wrapper.style[utils.style.touchAction] = utils.getTouchAction(this.options.eventPassthrough, false);\n\t\t\t}\n\t\t}\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\tvar elRect = utils.getRect(el);\n\t\tvar wrapperRect = utils.getRect(this.wrapper);\n\t\tif ( offsetX === true ) {\n\t\t\toffsetX = Math.round(elRect.width / 2 - wrapperRect.width / 2);\n\t\t}\n\t\tif ( offsetY === true ) {\n\t\t\toffsetY = Math.round(elRect.height / 2 - wrapperRect.height / 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\tif (!this.options.useTransition) {\n\t\t\treturn;\n\t\t}\n\t\ttime = time || 0;\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tif(!durationProp) {\n\t\t\treturn;\n\t\t}\n\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\t\t\t\trect;\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\trect = utils.getRect(el[i]);\n\t\t\t\t\tif ( i === 0 || rect.left <= utils.getRect(el[i-1]).left ) {\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(-rect.left, this.maxScrollX);\n\t\t\t\t\ty = Math.max(-rect.top, this.maxScrollY);\n\t\t\t\t\tcx = x - Math.round(rect.width / 2);\n\t\t\t\t\tcy = y - Math.round(rect.height / 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: rect.width,\n\t\t\t\t\t\theight: rect.height,\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\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\tif(!durationProp) {\n\t\t\treturn;\n\t\t}\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 && this.wrapper.parentNode ) {\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\tif(!durationProp) {\n\t\t\treturn;\n\t\t}\n\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\tutils.getRect(this.wrapper);\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"]}