{"version":3,"sources":["jsdelivr-header.js","/npm/jquery.nicescroll@3.7.6/jquery.nicescroll.js"],"names":[],"mappings":"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","file":"/npm/jquery.nicescroll@3.7.6/jquery.nicescroll.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/jquery.nicescroll@3.7.6/jquery.nicescroll.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* jquery.nicescroll\r\n-- version 3.7.6\r\n-- copyright 2017-07-19 InuYaksa*2017\r\n-- licensed under the MIT\r\n--\r\n-- https://nicescroll.areaaperta.com/\r\n-- https://github.com/inuyaksa/jquery.nicescroll\r\n--\r\n*/\r\n\r\n/* jshint expr: true */\r\n\r\n(function (factory) {\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD. Register as anonymous module.\r\n    define(['jquery'], factory);\r\n  } else if (typeof exports === 'object') {\r\n    // Node/CommonJS.\r\n    module.exports = factory(require('jquery'));\r\n  } else {\r\n    // Browser globals.\r\n    factory(jQuery);\r\n  }\r\n}(function (jQuery) {\r\n\r\n  \"use strict\";\r\n\r\n  // globals\r\n  var domfocus = false,\r\n    mousefocus = false,\r\n    tabindexcounter = 0,\r\n    ascrailcounter = 2000,\r\n    globalmaxzindex = 0;\r\n\r\n  var $ = jQuery,       // sandbox\r\n    _doc = document,\r\n    _win = window,\r\n    $window = $(_win);\r\n\r\n  var delegatevents = [];\r\n\r\n  // http://stackoverflow.com/questions/2161159/get-script-path\r\n  function getScriptPath() {\r\n    var scripts = _doc.currentScript || (function () { var s = _doc.getElementsByTagName('script'); return (s.length) ? s[s.length - 1] : false; })();\r\n    var path = scripts ? scripts.src.split('?')[0] : '';\r\n    return (path.split('/').length > 0) ? path.split('/').slice(0, -1).join('/') + '/' : '';\r\n  }\r\n\r\n  // based on code by Paul Irish https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/  \r\n  var setAnimationFrame = _win.requestAnimationFrame || _win.webkitRequestAnimationFrame || _win.mozRequestAnimationFrame || false;\r\n  var clearAnimationFrame = _win.cancelAnimationFrame || _win.webkitCancelAnimationFrame || _win.mozCancelAnimationFrame || false;\r\n\r\n  if (!setAnimationFrame) {\r\n    var anilasttime = 0;\r\n    setAnimationFrame = function (callback, element) {\r\n      var currTime = new Date().getTime();\r\n      var timeToCall = Math.max(0, 16 - (currTime - anilasttime));\r\n      var id = _win.setTimeout(function () { callback(currTime + timeToCall); },\r\n        timeToCall);\r\n      anilasttime = currTime + timeToCall;\r\n      return id;\r\n    };\r\n    clearAnimationFrame = function (id) {\r\n      _win.clearTimeout(id);\r\n    };\r\n  } else {\r\n    if (!_win.cancelAnimationFrame) clearAnimationFrame = function (id) { };\r\n  }\r\n\r\n  var ClsMutationObserver = _win.MutationObserver || _win.WebKitMutationObserver || false;\r\n\r\n  var now = Date.now || function () { return new Date().getTime(); };\r\n\r\n  var _globaloptions = {\r\n    zindex: \"auto\",\r\n    cursoropacitymin: 0,\r\n    cursoropacitymax: 1,\r\n    cursorcolor: \"#424242\",\r\n    cursorwidth: \"6px\",\r\n    cursorborder: \"1px solid #fff\",\r\n    cursorborderradius: \"5px\",\r\n    scrollspeed: 40,\r\n    mousescrollstep: 9 * 3,\r\n    touchbehavior: false,   // deprecated\r\n    emulatetouch: false,    // replacing touchbehavior\r\n    hwacceleration: true,\r\n    usetransition: true,\r\n    boxzoom: false,\r\n    dblclickzoom: true,\r\n    gesturezoom: true,\r\n    grabcursorenabled: true,\r\n    autohidemode: true,\r\n    background: \"\",\r\n    iframeautoresize: true,\r\n    cursorminheight: 32,\r\n    preservenativescrolling: true,\r\n    railoffset: false,\r\n    railhoffset: false,\r\n    bouncescroll: true,\r\n    spacebarenabled: true,\r\n    railpadding: {\r\n      top: 0,\r\n      right: 0,\r\n      left: 0,\r\n      bottom: 0\r\n    },\r\n    disableoutline: true,\r\n    horizrailenabled: true,\r\n    railalign: \"right\",\r\n    railvalign: \"bottom\",\r\n    enabletranslate3d: true,\r\n    enablemousewheel: true,\r\n    enablekeyboard: true,\r\n    smoothscroll: true,\r\n    sensitiverail: true,\r\n    enablemouselockapi: true,\r\n    //      cursormaxheight:false,\r\n    cursorfixedheight: false,\r\n    directionlockdeadzone: 6,\r\n    hidecursordelay: 400,\r\n    nativeparentscrolling: true,\r\n    enablescrollonselection: true,\r\n    overflowx: true,\r\n    overflowy: true,\r\n    cursordragspeed: 0.3,\r\n    rtlmode: \"auto\",\r\n    cursordragontouch: false,\r\n    oneaxismousemode: \"auto\",\r\n    scriptpath: getScriptPath(),\r\n    preventmultitouchscrolling: true,\r\n    disablemutationobserver: false,\r\n    enableobserver: true,\r\n    scrollbarid: false\r\n  };\r\n\r\n  var browserdetected = false;\r\n\r\n  var getBrowserDetection = function () {\r\n\r\n    if (browserdetected) return browserdetected;\r\n\r\n    var _el = _doc.createElement('DIV'),\r\n      _style = _el.style,\r\n      _agent = navigator.userAgent,\r\n      _platform = navigator.platform,\r\n      d = {};\r\n\r\n    d.haspointerlock = \"pointerLockElement\" in _doc || \"webkitPointerLockElement\" in _doc || \"mozPointerLockElement\" in _doc;\r\n\r\n    d.isopera = (\"opera\" in _win); // 12-\r\n    d.isopera12 = (d.isopera && (\"getUserMedia\" in navigator));\r\n    d.isoperamini = (Object.prototype.toString.call(_win.operamini) === \"[object OperaMini]\");\r\n\r\n    d.isie = ((\"all\" in _doc) && (\"attachEvent\" in _el) && !d.isopera); //IE10-\r\n    d.isieold = (d.isie && !(\"msInterpolationMode\" in _style)); // IE6 and older\r\n    d.isie7 = d.isie && !d.isieold && (!(\"documentMode\" in _doc) || (_doc.documentMode === 7));\r\n    d.isie8 = d.isie && (\"documentMode\" in _doc) && (_doc.documentMode === 8);\r\n    d.isie9 = d.isie && (\"performance\" in _win) && (_doc.documentMode === 9);\r\n    d.isie10 = d.isie && (\"performance\" in _win) && (_doc.documentMode === 10);\r\n    d.isie11 = (\"msRequestFullscreen\" in _el) && (_doc.documentMode >= 11); // IE11+\r\n\r\n    d.ismsedge = (\"msCredentials\" in _win);  // MS Edge 14+\r\n\r\n    d.ismozilla = (\"MozAppearance\" in _style);\r\n\r\n    d.iswebkit = !d.ismsedge && (\"WebkitAppearance\" in _style);\r\n\r\n    d.ischrome = d.iswebkit && (\"chrome\" in _win);\r\n    d.ischrome38 = (d.ischrome && (\"touchAction\" in _style)); // behavior changed in touch emulation    \r\n    d.ischrome22 = (!d.ischrome38) && (d.ischrome && d.haspointerlock);\r\n    d.ischrome26 = (!d.ischrome38) && (d.ischrome && (\"transition\" in _style)); // issue with transform detection (maintain prefix)\r\n\r\n    d.cantouch = (\"ontouchstart\" in _doc.documentElement) || (\"ontouchstart\" in _win); // with detection for Chrome Touch Emulation    \r\n    d.hasw3ctouch = (_win.PointerEvent || false) && ((navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); //IE11 pointer events, following W3C Pointer Events spec\r\n    d.hasmstouch = (!d.hasw3ctouch) && (_win.MSPointerEvent || false); // IE10 pointer events\r\n\r\n    d.ismac = /^mac$/i.test(_platform);\r\n\r\n    d.isios = d.cantouch && /iphone|ipad|ipod/i.test(_platform);\r\n    d.isios4 = d.isios && !(\"seal\" in Object);\r\n    d.isios7 = d.isios && (\"webkitHidden\" in _doc);  //iOS 7+\r\n    d.isios8 = d.isios && (\"hidden\" in _doc);  //iOS 8+\r\n    d.isios10 = d.isios && _win.Proxy;  //iOS 10+\r\n\r\n    d.isandroid = (/android/i.test(_agent));\r\n\r\n    d.haseventlistener = (\"addEventListener\" in _el);\r\n\r\n    d.trstyle = false;\r\n    d.hastransform = false;\r\n    d.hastranslate3d = false;\r\n    d.transitionstyle = false;\r\n    d.hastransition = false;\r\n    d.transitionend = false;\r\n\r\n    d.trstyle = \"transform\";\r\n    d.hastransform = (\"transform\" in _style) || (function () {\r\n      var check = ['msTransform', 'webkitTransform', 'MozTransform', 'OTransform'];\r\n      for (var a = 0, c = check.length; a < c; a++) {\r\n        if (_style[check[a]] !== undefined) {\r\n          d.trstyle = check[a];\r\n          break;\r\n        }\r\n      }\r\n      d.hastransform = (!!d.trstyle);\r\n    })();\r\n\r\n    if (d.hastransform) {\r\n      _style[d.trstyle] = \"translate3d(1px,2px,3px)\";\r\n      d.hastranslate3d = /translate3d/.test(_style[d.trstyle]);\r\n    }\r\n\r\n    d.transitionstyle = \"transition\";\r\n    d.prefixstyle = '';\r\n    d.transitionend = \"transitionend\";\r\n\r\n    d.hastransition = (\"transition\" in _style) || (function () {\r\n\r\n      d.transitionend = false;\r\n      var check = ['webkitTransition', 'msTransition', 'MozTransition', 'OTransition', 'OTransition', 'KhtmlTransition'];\r\n      var prefix = ['-webkit-', '-ms-', '-moz-', '-o-', '-o', '-khtml-'];\r\n      var evs = ['webkitTransitionEnd', 'msTransitionEnd', 'transitionend', 'otransitionend', 'oTransitionEnd', 'KhtmlTransitionEnd'];\r\n      for (var a = 0, c = check.length; a < c; a++) {\r\n        if (check[a] in _style) {\r\n          d.transitionstyle = check[a];\r\n          d.prefixstyle = prefix[a];\r\n          d.transitionend = evs[a];\r\n          break;\r\n        }\r\n      }\r\n      if (d.ischrome26) d.prefixstyle = prefix[1];  // always use prefix\r\n\r\n      d.hastransition = (d.transitionstyle);\r\n\r\n    })();\r\n\r\n    function detectCursorGrab() {\r\n      var lst = ['grab', '-webkit-grab', '-moz-grab'];\r\n      if ((d.ischrome && !d.ischrome38) || d.isie) lst = []; // force setting for IE returns false positive and chrome cursor bug\r\n      for (var a = 0, l = lst.length; a < l; a++) {\r\n        var p = lst[a];\r\n        _style.cursor = p;\r\n        if (_style.cursor == p) return p;\r\n      }\r\n      return 'url(https://cdnjs.cloudflare.com/ajax/libs/slider-pro/1.3.0/css/images/openhand.cur),n-resize'; // thanks to https://cdnjs.com/ for the openhand cursor!\r\n    }\r\n    d.cursorgrabvalue = detectCursorGrab();\r\n\r\n    d.hasmousecapture = (\"setCapture\" in _el);\r\n\r\n    d.hasMutationObserver = (ClsMutationObserver !== false);\r\n\r\n    _el = null; //memory released\r\n\r\n    browserdetected = d;\r\n\r\n    return d;\r\n  };\r\n\r\n  var NiceScrollClass = function (myopt, me) {\r\n\r\n    var self = this;\r\n\r\n    this.version = '3.7.6';\r\n    this.name = 'nicescroll';\r\n\r\n    this.me = me;\r\n\r\n    var $body = $(\"body\");\r\n\r\n    var opt = this.opt = {\r\n      doc: $body,\r\n      win: false\r\n    };\r\n\r\n    $.extend(opt, _globaloptions);  // clone opts\r\n\r\n    // Options for internal use\r\n    opt.snapbackspeed = 80;\r\n\r\n    if (myopt || false) {\r\n      for (var a in opt) {\r\n        if (myopt[a] !== undefined) opt[a] = myopt[a];\r\n      }\r\n    }\r\n\r\n    if (opt.disablemutationobserver) ClsMutationObserver = false;\r\n\r\n    this.doc = opt.doc;\r\n    this.iddoc = (this.doc && this.doc[0]) ? this.doc[0].id || '' : '';\r\n    this.ispage = /^BODY|HTML/.test((opt.win) ? opt.win[0].nodeName : this.doc[0].nodeName);\r\n    this.haswrapper = (opt.win !== false);\r\n    this.win = opt.win || (this.ispage ? $window : this.doc);\r\n    this.docscroll = (this.ispage && !this.haswrapper) ? $window : this.win;\r\n    this.body = $body;\r\n    this.viewport = false;\r\n\r\n    this.isfixed = false;\r\n\r\n    this.iframe = false;\r\n    this.isiframe = ((this.doc[0].nodeName == 'IFRAME') && (this.win[0].nodeName == 'IFRAME'));\r\n\r\n    this.istextarea = (this.win[0].nodeName == 'TEXTAREA');\r\n\r\n    this.forcescreen = false; //force to use screen position on events\r\n\r\n    this.canshowonmouseevent = (opt.autohidemode != \"scroll\");\r\n\r\n    // Events jump table    \r\n    this.onmousedown = false;\r\n    this.onmouseup = false;\r\n    this.onmousemove = false;\r\n    this.onmousewheel = false;\r\n    this.onkeypress = false;\r\n    this.ongesturezoom = false;\r\n    this.onclick = false;\r\n\r\n    // Nicescroll custom events\r\n    this.onscrollstart = false;\r\n    this.onscrollend = false;\r\n    this.onscrollcancel = false;\r\n\r\n    this.onzoomin = false;\r\n    this.onzoomout = false;\r\n\r\n    // Let's start!  \r\n    this.view = false;\r\n    this.page = false;\r\n\r\n    this.scroll = {\r\n      x: 0,\r\n      y: 0\r\n    };\r\n    this.scrollratio = {\r\n      x: 0,\r\n      y: 0\r\n    };\r\n    this.cursorheight = 20;\r\n    this.scrollvaluemax = 0;\r\n\r\n    // http://dev.w3.org/csswg/css-writing-modes-3/#logical-to-physical\r\n    // http://dev.w3.org/csswg/css-writing-modes-3/#svg-writing-mode\r\n    if (opt.rtlmode == \"auto\") {\r\n      var target = this.win[0] == _win ? this.body : this.win;\r\n      var writingMode = target.css(\"writing-mode\") || target.css(\"-webkit-writing-mode\") || target.css(\"-ms-writing-mode\") || target.css(\"-moz-writing-mode\");\r\n\r\n      if (writingMode == \"horizontal-tb\" || writingMode == \"lr-tb\" || writingMode === \"\") {\r\n        this.isrtlmode = (target.css(\"direction\") == \"rtl\");\r\n        this.isvertical = false;\r\n      } else {\r\n        this.isrtlmode = (writingMode == \"vertical-rl\" || writingMode == \"tb\" || writingMode == \"tb-rl\" || writingMode == \"rl-tb\");\r\n        this.isvertical = (writingMode == \"vertical-rl\" || writingMode == \"tb\" || writingMode == \"tb-rl\");\r\n      }\r\n    } else {\r\n      this.isrtlmode = (opt.rtlmode === true);\r\n      this.isvertical = false;\r\n    }\r\n    //    this.checkrtlmode = false;\r\n\r\n    this.scrollrunning = false;\r\n\r\n    this.scrollmom = false;\r\n\r\n    this.observer = false;  // observer div changes\r\n    this.observerremover = false;  // observer on parent for remove detection\r\n    this.observerbody = false;  // observer on body for position change\r\n\r\n    if (opt.scrollbarid !== false) {\r\n      this.id = opt.scrollbarid;\r\n    } else {\r\n      do {\r\n        this.id = \"ascrail\" + (ascrailcounter++);\r\n      } while (_doc.getElementById(this.id));\r\n    }\r\n\r\n    this.rail = false;\r\n    this.cursor = false;\r\n    this.cursorfreezed = false;\r\n    this.selectiondrag = false;\r\n\r\n    this.zoom = false;\r\n    this.zoomactive = false;\r\n\r\n    this.hasfocus = false;\r\n    this.hasmousefocus = false;\r\n\r\n    //this.visibility = true;\r\n    this.railslocked = false;  // locked by resize\r\n    this.locked = false;  // prevent lost of locked status sets by user\r\n    this.hidden = false; // rails always hidden\r\n    this.cursoractive = true; // user can interact with cursors\r\n\r\n    this.wheelprevented = false; //prevent mousewheel event\r\n\r\n    this.overflowx = opt.overflowx;\r\n    this.overflowy = opt.overflowy;\r\n\r\n    this.nativescrollingarea = false;\r\n    this.checkarea = 0;\r\n\r\n    this.events = []; // event list for unbind\r\n\r\n    this.saved = {};  // style saved\r\n\r\n    this.delaylist = {};\r\n    this.synclist = {};\r\n\r\n    this.lastdeltax = 0;\r\n    this.lastdeltay = 0;\r\n\r\n    this.detected = getBrowserDetection();\r\n\r\n    var cap = $.extend({}, this.detected);\r\n\r\n    this.canhwscroll = (cap.hastransform && opt.hwacceleration);\r\n    this.ishwscroll = (this.canhwscroll && self.haswrapper);\r\n\r\n    if (!this.isrtlmode) {\r\n      this.hasreversehr = false;\r\n    } else if (this.isvertical) { // RTL mode with reverse horizontal axis\r\n      this.hasreversehr = !(cap.iswebkit || cap.isie || cap.isie11);\r\n    } else {\r\n      this.hasreversehr = !(cap.iswebkit || (cap.isie && !cap.isie10 && !cap.isie11));\r\n    }\r\n\r\n    this.istouchcapable = false; // desktop devices with touch screen support\r\n\r\n    //## Check WebKit-based desktop with touch support\r\n    //## + Firefox 18 nightly build (desktop) false positive (or desktop with touch support)\r\n\r\n    if (!cap.cantouch && (cap.hasw3ctouch || cap.hasmstouch)) {  // desktop device with multiple input\r\n      this.istouchcapable = true;\r\n    } else if (cap.cantouch && !cap.isios && !cap.isandroid && (cap.iswebkit || cap.ismozilla)) {\r\n      this.istouchcapable = true;\r\n    }\r\n\r\n    //## disable MouseLock API on user request\r\n    if (!opt.enablemouselockapi) {\r\n      cap.hasmousecapture = false;\r\n      cap.haspointerlock = false;\r\n    }\r\n\r\n    this.debounced = function (name, fn, tm) {\r\n      if (!self) return;\r\n      var dd = self.delaylist[name] || false;\r\n      if (!dd) {\r\n        self.delaylist[name] = {\r\n          h: setAnimationFrame(function () {\r\n            self.delaylist[name].fn.call(self);\r\n            self.delaylist[name] = false;\r\n          }, tm)\r\n        };\r\n        fn.call(self);\r\n      }\r\n      self.delaylist[name].fn = fn;\r\n    };\r\n\r\n\r\n    this.synched = function (name, fn) {\r\n      if (self.synclist[name]) self.synclist[name] = fn;\r\n      else {\r\n        self.synclist[name] = fn;\r\n        setAnimationFrame(function () {\r\n          if (!self) return;\r\n          self.synclist[name] && self.synclist[name].call(self);\r\n          self.synclist[name] = null;\r\n        });\r\n      }\r\n    };\r\n\r\n    this.unsynched = function (name) {\r\n      if (self.synclist[name]) self.synclist[name] = false;\r\n    };\r\n\r\n    this.css = function (el, pars) { // save & set\r\n      for (var n in pars) {\r\n        self.saved.css.push([el, n, el.css(n)]);\r\n        el.css(n, pars[n]);\r\n      }\r\n    };\r\n\r\n    this.scrollTop = function (val) {\r\n      return (val === undefined) ? self.getScrollTop() : self.setScrollTop(val);\r\n    };\r\n\r\n    this.scrollLeft = function (val) {\r\n      return (val === undefined) ? self.getScrollLeft() : self.setScrollLeft(val);\r\n    };\r\n\r\n    // derived by by Dan Pupius www.pupius.net\r\n    var BezierClass = function (st, ed, spd, p1, p2, p3, p4) {\r\n\r\n      this.st = st;\r\n      this.ed = ed;\r\n      this.spd = spd;\r\n\r\n      this.p1 = p1 || 0;\r\n      this.p2 = p2 || 1;\r\n      this.p3 = p3 || 0;\r\n      this.p4 = p4 || 1;\r\n\r\n      this.ts = now();\r\n      this.df = ed - st;\r\n    };\r\n    BezierClass.prototype = {\r\n      B2: function (t) {\r\n        return 3 * (1 - t) * (1 - t) * t;\r\n      },\r\n      B3: function (t) {\r\n        return 3 * (1 - t) * t * t;\r\n      },\r\n      B4: function (t) {\r\n        return t * t * t;\r\n      },\r\n      getPos: function () {\r\n        return (now() - this.ts) / this.spd;\r\n      },\r\n      getNow: function () {\r\n        var pc = (now() - this.ts) / this.spd;\r\n        var bz = this.B2(pc) + this.B3(pc) + this.B4(pc);\r\n        return (pc >= 1) ? this.ed : this.st + (this.df * bz) | 0;\r\n      },\r\n      update: function (ed, spd) {\r\n        this.st = this.getNow();\r\n        this.ed = ed;\r\n        this.spd = spd;\r\n        this.ts = now();\r\n        this.df = this.ed - this.st;\r\n        return this;\r\n      }\r\n    };\r\n\r\n    //derived from http://stackoverflow.com/questions/11236090/\r\n    function getMatrixValues() {\r\n      var tr = self.doc.css(cap.trstyle);\r\n      if (tr && (tr.substr(0, 6) == \"matrix\")) {\r\n        return tr.replace(/^.*\\((.*)\\)$/g, \"$1\").replace(/px/g, '').split(/, +/);\r\n      }\r\n      return false;\r\n    }\r\n\r\n    if (this.ishwscroll) {    // hw accelerated scroll\r\n\r\n      this.doc.translate = {\r\n        x: 0,\r\n        y: 0,\r\n        tx: \"0px\",\r\n        ty: \"0px\"\r\n      };\r\n\r\n      //this one can help to enable hw accel on ios6 http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/\r\n      if (cap.hastranslate3d && cap.isios) this.doc.css(\"-webkit-backface-visibility\", \"hidden\"); // prevent flickering http://stackoverflow.com/questions/3461441/      \r\n\r\n      this.getScrollTop = function (last) {\r\n        if (!last) {\r\n          var mtx = getMatrixValues();\r\n          if (mtx) return (mtx.length == 16) ? -mtx[13] : -mtx[5]; //matrix3d 16 on IE10\r\n          if (self.timerscroll && self.timerscroll.bz) return self.timerscroll.bz.getNow();\r\n        }\r\n        return self.doc.translate.y;\r\n      };\r\n\r\n      this.getScrollLeft = function (last) {\r\n        if (!last) {\r\n          var mtx = getMatrixValues();\r\n          if (mtx) return (mtx.length == 16) ? -mtx[12] : -mtx[4]; //matrix3d 16 on IE10\r\n          if (self.timerscroll && self.timerscroll.bh) return self.timerscroll.bh.getNow();\r\n        }\r\n        return self.doc.translate.x;\r\n      };\r\n\r\n      this.notifyScrollEvent = function (el) {\r\n        var e = _doc.createEvent(\"UIEvents\");\r\n        e.initUIEvent(\"scroll\", false, false, _win, 1);\r\n        e.niceevent = true;\r\n        el.dispatchEvent(e);\r\n      };\r\n\r\n      var cxscrollleft = (this.isrtlmode) ? 1 : -1;\r\n\r\n      if (cap.hastranslate3d && opt.enabletranslate3d) {\r\n        this.setScrollTop = function (val, silent) {\r\n          self.doc.translate.y = val;\r\n          self.doc.translate.ty = (val * -1) + \"px\";\r\n          self.doc.css(cap.trstyle, \"translate3d(\" + self.doc.translate.tx + \",\" + self.doc.translate.ty + \",0)\");\r\n          if (!silent) self.notifyScrollEvent(self.win[0]);\r\n        };\r\n        this.setScrollLeft = function (val, silent) {\r\n          self.doc.translate.x = val;\r\n          self.doc.translate.tx = (val * cxscrollleft) + \"px\";\r\n          self.doc.css(cap.trstyle, \"translate3d(\" + self.doc.translate.tx + \",\" + self.doc.translate.ty + \",0)\");\r\n          if (!silent) self.notifyScrollEvent(self.win[0]);\r\n        };\r\n      } else {\r\n        this.setScrollTop = function (val, silent) {\r\n          self.doc.translate.y = val;\r\n          self.doc.translate.ty = (val * -1) + \"px\";\r\n          self.doc.css(cap.trstyle, \"translate(\" + self.doc.translate.tx + \",\" + self.doc.translate.ty + \")\");\r\n          if (!silent) self.notifyScrollEvent(self.win[0]);\r\n        };\r\n        this.setScrollLeft = function (val, silent) {\r\n          self.doc.translate.x = val;\r\n          self.doc.translate.tx = (val * cxscrollleft) + \"px\";\r\n          self.doc.css(cap.trstyle, \"translate(\" + self.doc.translate.tx + \",\" + self.doc.translate.ty + \")\");\r\n          if (!silent) self.notifyScrollEvent(self.win[0]);\r\n        };\r\n      }\r\n    } else {    // native scroll\r\n\r\n      this.getScrollTop = function () {\r\n        return self.docscroll.scrollTop();\r\n      };\r\n      this.setScrollTop = function (val) {\r\n        self.docscroll.scrollTop(val);\r\n      };\r\n\r\n      this.getScrollLeft = function () {\r\n        var val;\r\n        if (!self.hasreversehr) {\r\n          val = self.docscroll.scrollLeft();\r\n        } else if (self.detected.ismozilla) {\r\n          val = self.page.maxw - Math.abs(self.docscroll.scrollLeft());\r\n        } else {\r\n          val = self.page.maxw - self.docscroll.scrollLeft();\r\n        }\r\n        return val;\r\n      };\r\n      this.setScrollLeft = function (val) {\r\n        return setTimeout(function () {\r\n          if (!self) return;\r\n          if (self.hasreversehr) {\r\n            if (self.detected.ismozilla) {\r\n              val = -(self.page.maxw - val);\r\n            } else {\r\n              val = self.page.maxw - val;\r\n            }\r\n          }\r\n          return self.docscroll.scrollLeft(val);\r\n        }, 1);\r\n      };\r\n    }\r\n\r\n    this.getTarget = function (e) {\r\n      if (!e) return false;\r\n      if (e.target) return e.target;\r\n      if (e.srcElement) return e.srcElement;\r\n      return false;\r\n    };\r\n\r\n    this.hasParent = function (e, id) {\r\n      if (!e) return false;\r\n      var el = e.target || e.srcElement || e || false;\r\n      while (el && el.id != id) {\r\n        el = el.parentNode || false;\r\n      }\r\n      return (el !== false);\r\n    };\r\n\r\n    function getZIndex() {\r\n      var dom = self.win;\r\n      if (\"zIndex\" in dom) return dom.zIndex(); // use jQuery UI method when available\r\n      while (dom.length > 0) {\r\n        if (dom[0].nodeType == 9) return false;\r\n        var zi = dom.css('zIndex');\r\n        if (!isNaN(zi) && zi !== 0) return parseInt(zi);\r\n        dom = dom.parent();\r\n      }\r\n      return false;\r\n    }\r\n\r\n    //inspired by http://forum.jquery.com/topic/width-includes-border-width-when-set-to-thin-medium-thick-in-ie\r\n    var _convertBorderWidth = {\r\n      \"thin\": 1,\r\n      \"medium\": 3,\r\n      \"thick\": 5\r\n    };\r\n\r\n    function getWidthToPixel(dom, prop, chkheight) {\r\n      var wd = dom.css(prop);\r\n      var px = parseFloat(wd);\r\n      if (isNaN(px)) {\r\n        px = _convertBorderWidth[wd] || 0;\r\n        var brd = (px == 3) ? ((chkheight) ? (self.win.outerHeight() - self.win.innerHeight()) : (self.win.outerWidth() - self.win.innerWidth())) : 1; //DON'T TRUST CSS\r\n        if (self.isie8 && px) px += 1;\r\n        return (brd) ? px : 0;\r\n      }\r\n      return px;\r\n    }\r\n\r\n    this.getDocumentScrollOffset = function () {\r\n      return {\r\n        top: _win.pageYOffset || _doc.documentElement.scrollTop,\r\n        left: _win.pageXOffset || _doc.documentElement.scrollLeft\r\n      };\r\n    };\r\n\r\n    this.getOffset = function () {\r\n      if (self.isfixed) {\r\n        var ofs = self.win.offset();  // fix Chrome auto issue (when right/bottom props only)\r\n        var scrl = self.getDocumentScrollOffset();\r\n        ofs.top -= scrl.top;\r\n        ofs.left -= scrl.left;\r\n        return ofs;\r\n      }\r\n      var ww = self.win.offset();\r\n      if (!self.viewport) return ww;\r\n      var vp = self.viewport.offset();\r\n      return {\r\n        top: ww.top - vp.top,\r\n        left: ww.left - vp.left\r\n      };\r\n    };\r\n\r\n    this.updateScrollBar = function (len) {\r\n      var pos, off;\r\n      if (self.ishwscroll) {\r\n        self.rail.css({\r\n          height: self.win.innerHeight() - (opt.railpadding.top + opt.railpadding.bottom)\r\n        });\r\n        if (self.railh) self.railh.css({\r\n          width: self.win.innerWidth() - (opt.railpadding.left + opt.railpadding.right)\r\n        });\r\n      } else {\r\n        var wpos = self.getOffset();\r\n        pos = {\r\n          top: wpos.top,\r\n          left: wpos.left - (opt.railpadding.left + opt.railpadding.right)\r\n        };\r\n        pos.top += getWidthToPixel(self.win, 'border-top-width', true);\r\n        pos.left += (self.rail.align) ? self.win.outerWidth() - getWidthToPixel(self.win, 'border-right-width') - self.rail.width : getWidthToPixel(self.win, 'border-left-width');\r\n\r\n        off = opt.railoffset;\r\n        if (off) {\r\n          if (off.top) pos.top += off.top;\r\n          if (off.left) pos.left += off.left;\r\n        }\r\n\r\n        if (!self.railslocked) self.rail.css({\r\n          top: pos.top,\r\n          left: pos.left,\r\n          height: ((len) ? len.h : self.win.innerHeight()) - (opt.railpadding.top + opt.railpadding.bottom)\r\n        });\r\n\r\n        if (self.zoom) {\r\n          self.zoom.css({\r\n            top: pos.top + 1,\r\n            left: (self.rail.align == 1) ? pos.left - 20 : pos.left + self.rail.width + 4\r\n          });\r\n        }\r\n\r\n        if (self.railh && !self.railslocked) {\r\n          pos = {\r\n            top: wpos.top,\r\n            left: wpos.left\r\n          };\r\n          off = opt.railhoffset;\r\n          if (off) {\r\n            if (off.top) pos.top += off.top;\r\n            if (off.left) pos.left += off.left;\r\n          }\r\n          var y = (self.railh.align) ? pos.top + getWidthToPixel(self.win, 'border-top-width', true) + self.win.innerHeight() - self.railh.height : pos.top + getWidthToPixel(self.win, 'border-top-width', true);\r\n          var x = pos.left + getWidthToPixel(self.win, 'border-left-width');\r\n          self.railh.css({\r\n            top: y - (opt.railpadding.top + opt.railpadding.bottom),\r\n            left: x,\r\n            width: self.railh.width\r\n          });\r\n        }\r\n\r\n      }\r\n    };\r\n\r\n    this.doRailClick = function (e, dbl, hr) {\r\n      var fn, pg, cur, pos;\r\n\r\n      if (self.railslocked) return;\r\n\r\n      self.cancelEvent(e);\r\n\r\n      if (!(\"pageY\" in e)) {\r\n        e.pageX = e.clientX + _doc.documentElement.scrollLeft;\r\n        e.pageY = e.clientY + _doc.documentElement.scrollTop;\r\n      }\r\n\r\n      if (dbl) {\r\n        fn = (hr) ? self.doScrollLeft : self.doScrollTop;\r\n        cur = (hr) ? ((e.pageX - self.railh.offset().left - (self.cursorwidth / 2)) * self.scrollratio.x) : ((e.pageY - self.rail.offset().top - (self.cursorheight / 2)) * self.scrollratio.y);\r\n        self.unsynched(\"relativexy\");\r\n        fn(cur|0);\r\n      } else {\r\n        fn = (hr) ? self.doScrollLeftBy : self.doScrollBy;\r\n        cur = (hr) ? self.scroll.x : self.scroll.y;\r\n        pos = (hr) ? e.pageX - self.railh.offset().left : e.pageY - self.rail.offset().top;\r\n        pg = (hr) ? self.view.w : self.view.h;\r\n        fn((cur >= pos) ? pg : -pg);\r\n      }\r\n\r\n    };\r\n\r\n    self.newscrolly = self.newscrollx = 0;\r\n\r\n    self.hasanimationframe = (\"requestAnimationFrame\" in _win);\r\n    self.hascancelanimationframe = (\"cancelAnimationFrame\" in _win);\r\n\r\n    self.hasborderbox = false;\r\n\r\n    this.init = function () {\r\n\r\n      self.saved.css = [];\r\n\r\n      if (cap.isoperamini) return true; // SORRY, DO NOT WORK!\r\n      if (cap.isandroid && !(\"hidden\" in _doc)) return true; // Android 3- SORRY, DO NOT WORK!\r\n\r\n      opt.emulatetouch = opt.emulatetouch || opt.touchbehavior;  // mantain compatibility with \"touchbehavior\"      \r\n\r\n      self.hasborderbox = _win.getComputedStyle && (_win.getComputedStyle(_doc.body)['box-sizing'] === \"border-box\");\r\n\r\n      var _scrollyhidden = { 'overflow-y': 'hidden' };\r\n      if (cap.isie11 || cap.isie10) _scrollyhidden['-ms-overflow-style'] = 'none';  // IE 10 & 11 is always a world apart!\r\n\r\n      if (self.ishwscroll) {\r\n        this.doc.css(cap.transitionstyle, cap.prefixstyle + 'transform 0ms ease-out');\r\n        if (cap.transitionend) self.bind(self.doc, cap.transitionend, self.onScrollTransitionEnd, false); //I have got to do something usefull!!\r\n      }\r\n\r\n      self.zindex = \"auto\";\r\n      if (!self.ispage && opt.zindex == \"auto\") {\r\n        self.zindex = getZIndex() || \"auto\";\r\n      } else {\r\n        self.zindex = opt.zindex;\r\n      }\r\n\r\n      if (!self.ispage && self.zindex != \"auto\" && self.zindex > globalmaxzindex) {\r\n        globalmaxzindex = self.zindex;\r\n      }\r\n\r\n      if (self.isie && self.zindex === 0 && opt.zindex == \"auto\") { // fix IE auto == 0\r\n        self.zindex = \"auto\";\r\n      }\r\n\r\n      if (!self.ispage || !cap.isieold) {\r\n\r\n        var cont = self.docscroll;\r\n        if (self.ispage) cont = (self.haswrapper) ? self.win : self.doc;\r\n\r\n        self.css(cont, _scrollyhidden);\r\n\r\n        if (self.ispage && (cap.isie11 || cap.isie)) { // IE 7-11\r\n          self.css($(\"html\"), _scrollyhidden);\r\n        }\r\n\r\n        if (cap.isios && !self.ispage && !self.haswrapper) self.css($body, {\r\n          \"-webkit-overflow-scrolling\": \"touch\"\r\n        }); //force hw acceleration\r\n\r\n        var cursor = $(_doc.createElement('div'));\r\n        cursor.css({\r\n          position: \"relative\",\r\n          top: 0,\r\n          \"float\": \"right\",\r\n          width: opt.cursorwidth,\r\n          height: 0,\r\n          'background-color': opt.cursorcolor,\r\n          border: opt.cursorborder,\r\n          'background-clip': 'padding-box',\r\n          '-webkit-border-radius': opt.cursorborderradius,\r\n          '-moz-border-radius': opt.cursorborderradius,\r\n          'border-radius': opt.cursorborderradius\r\n        });\r\n\r\n        cursor.addClass('nicescroll-cursors');\r\n\r\n        self.cursor = cursor;\r\n\r\n        var rail = $(_doc.createElement('div'));\r\n        rail.attr('id', self.id);\r\n        rail.addClass('nicescroll-rails nicescroll-rails-vr');\r\n\r\n        var v, a, kp = [\"left\", \"right\", \"top\", \"bottom\"];  //**\r\n        for (var n in kp) {\r\n          a = kp[n];\r\n          v = opt.railpadding[a] || 0;\r\n          v && rail.css(\"padding-\" + a, v + \"px\");\r\n        }\r\n\r\n        rail.append(cursor);\r\n\r\n        rail.width = Math.max(parseFloat(opt.cursorwidth), cursor.outerWidth());\r\n        rail.css({\r\n          width: rail.width + \"px\",\r\n          zIndex: self.zindex,\r\n          background: opt.background,\r\n          cursor: \"default\"\r\n        });\r\n\r\n        rail.visibility = true;\r\n        rail.scrollable = true;\r\n\r\n        rail.align = (opt.railalign == \"left\") ? 0 : 1;\r\n\r\n        self.rail = rail;\r\n\r\n        self.rail.drag = false;\r\n\r\n        var zoom = false;\r\n        if (opt.boxzoom && !self.ispage && !cap.isieold) {\r\n          zoom = _doc.createElement('div');\r\n\r\n          self.bind(zoom, \"click\", self.doZoom);\r\n          self.bind(zoom, \"mouseenter\", function () {\r\n            self.zoom.css('opacity', opt.cursoropacitymax);\r\n          });\r\n          self.bind(zoom, \"mouseleave\", function () {\r\n            self.zoom.css('opacity', opt.cursoropacitymin);\r\n          });\r\n\r\n          self.zoom = $(zoom);\r\n          self.zoom.css({\r\n            cursor: \"pointer\",\r\n            zIndex: self.zindex,\r\n            backgroundImage: 'url(' + opt.scriptpath + 'zoomico.png)',\r\n            height: 18,\r\n            width: 18,\r\n            backgroundPosition: '0 0'\r\n          });\r\n          if (opt.dblclickzoom) self.bind(self.win, \"dblclick\", self.doZoom);\r\n          if (cap.cantouch && opt.gesturezoom) {\r\n            self.ongesturezoom = function (e) {\r\n              if (e.scale > 1.5) self.doZoomIn(e);\r\n              if (e.scale < 0.8) self.doZoomOut(e);\r\n              return self.cancelEvent(e);\r\n            };\r\n            self.bind(self.win, \"gestureend\", self.ongesturezoom);\r\n          }\r\n        }\r\n\r\n        // init HORIZ\r\n\r\n        self.railh = false;\r\n        var railh;\r\n\r\n        if (opt.horizrailenabled) {\r\n\r\n          self.css(cont, {\r\n            overflowX: 'hidden'\r\n          });\r\n\r\n          cursor = $(_doc.createElement('div'));\r\n          cursor.css({\r\n            position: \"absolute\",\r\n            top: 0,\r\n            height: opt.cursorwidth,\r\n            width: 0,\r\n            backgroundColor: opt.cursorcolor,\r\n            border: opt.cursorborder,\r\n            backgroundClip: 'padding-box',\r\n            '-webkit-border-radius': opt.cursorborderradius,\r\n            '-moz-border-radius': opt.cursorborderradius,\r\n            'border-radius': opt.cursorborderradius\r\n          });\r\n\r\n          if (cap.isieold) cursor.css('overflow', 'hidden');  //IE6 horiz scrollbar issue\r\n\r\n          cursor.addClass('nicescroll-cursors');\r\n\r\n          self.cursorh = cursor;\r\n\r\n          railh = $(_doc.createElement('div'));\r\n          railh.attr('id', self.id + '-hr');\r\n          railh.addClass('nicescroll-rails nicescroll-rails-hr');\r\n          railh.height = Math.max(parseFloat(opt.cursorwidth), cursor.outerHeight());\r\n          railh.css({\r\n            height: railh.height + \"px\",\r\n            'zIndex': self.zindex,\r\n            \"background\": opt.background\r\n          });\r\n\r\n          railh.append(cursor);\r\n\r\n          railh.visibility = true;\r\n          railh.scrollable = true;\r\n\r\n          railh.align = (opt.railvalign == \"top\") ? 0 : 1;\r\n\r\n          self.railh = railh;\r\n\r\n          self.railh.drag = false;\r\n\r\n        }\r\n\r\n        if (self.ispage) {\r\n\r\n          rail.css({\r\n            position: \"fixed\",\r\n            top: 0,\r\n            height: \"100%\"\r\n          });\r\n\r\n          rail.css((rail.align) ? { right: 0 } : { left: 0 });\r\n\r\n          self.body.append(rail);\r\n          if (self.railh) {\r\n            railh.css({\r\n              position: \"fixed\",\r\n              left: 0,\r\n              width: \"100%\"\r\n            });\r\n\r\n            railh.css((railh.align) ? { bottom: 0 } : { top: 0 });\r\n\r\n            self.body.append(railh);\r\n          }\r\n        } else {\r\n          if (self.ishwscroll) {\r\n            if (self.win.css('position') == 'static') self.css(self.win, { 'position': 'relative' });\r\n            var bd = (self.win[0].nodeName == 'HTML') ? self.body : self.win;\r\n            $(bd).scrollTop(0).scrollLeft(0);  // fix rail position if content already scrolled\r\n            if (self.zoom) {\r\n              self.zoom.css({\r\n                position: \"absolute\",\r\n                top: 1,\r\n                right: 0,\r\n                \"margin-right\": rail.width + 4\r\n              });\r\n              bd.append(self.zoom);\r\n            }\r\n            rail.css({\r\n              position: \"absolute\",\r\n              top: 0\r\n            });\r\n            rail.css((rail.align) ? { right: 0 } : { left: 0 });\r\n            bd.append(rail);\r\n            if (railh) {\r\n              railh.css({\r\n                position: \"absolute\",\r\n                left: 0,\r\n                bottom: 0\r\n              });\r\n              railh.css((railh.align) ? { bottom: 0 } : { top: 0 });\r\n              bd.append(railh);\r\n            }\r\n          } else {\r\n            self.isfixed = (self.win.css(\"position\") == \"fixed\");\r\n            var rlpos = (self.isfixed) ? \"fixed\" : \"absolute\";\r\n\r\n            if (!self.isfixed) self.viewport = self.getViewport(self.win[0]);\r\n            if (self.viewport) {\r\n              self.body = self.viewport;\r\n              if (!(/fixed|absolute/.test(self.viewport.css(\"position\")))) self.css(self.viewport, {\r\n                \"position\": \"relative\"\r\n              });\r\n            }\r\n\r\n            rail.css({\r\n              position: rlpos\r\n            });\r\n            if (self.zoom) self.zoom.css({\r\n              position: rlpos\r\n            });\r\n            self.updateScrollBar();\r\n            self.body.append(rail);\r\n            if (self.zoom) self.body.append(self.zoom);\r\n            if (self.railh) {\r\n              railh.css({\r\n                position: rlpos\r\n              });\r\n              self.body.append(railh);\r\n            }\r\n          }\r\n\r\n          if (cap.isios) self.css(self.win, {\r\n            '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',\r\n            '-webkit-touch-callout': 'none'\r\n          }); // prevent grey layer on click\r\n\r\n          if (opt.disableoutline) {\r\n            if (cap.isie) self.win.attr(\"hideFocus\", \"true\"); // IE, prevent dotted rectangle on focused div\r\n            if (cap.iswebkit) self.win.css('outline', 'none');  // Webkit outline\r\n          }\r\n\r\n        }\r\n\r\n        if (opt.autohidemode === false) {\r\n          self.autohidedom = false;\r\n          self.rail.css({\r\n            opacity: opt.cursoropacitymax\r\n          });\r\n          if (self.railh) self.railh.css({\r\n            opacity: opt.cursoropacitymax\r\n          });\r\n        } else if ((opt.autohidemode === true) || (opt.autohidemode === \"leave\")) {\r\n          self.autohidedom = $().add(self.rail);\r\n          if (cap.isie8) self.autohidedom = self.autohidedom.add(self.cursor);\r\n          if (self.railh) self.autohidedom = self.autohidedom.add(self.railh);\r\n          if (self.railh && cap.isie8) self.autohidedom = self.autohidedom.add(self.cursorh);\r\n        } else if (opt.autohidemode == \"scroll\") {\r\n          self.autohidedom = $().add(self.rail);\r\n          if (self.railh) self.autohidedom = self.autohidedom.add(self.railh);\r\n        } else if (opt.autohidemode == \"cursor\") {\r\n          self.autohidedom = $().add(self.cursor);\r\n          if (self.railh) self.autohidedom = self.autohidedom.add(self.cursorh);\r\n        } else if (opt.autohidemode == \"hidden\") {\r\n          self.autohidedom = false;\r\n          self.hide();\r\n          self.railslocked = false;\r\n        }\r\n\r\n        if (cap.cantouch || self.istouchcapable || opt.emulatetouch || cap.hasmstouch) {\r\n\r\n          self.scrollmom = new ScrollMomentumClass2D(self);\r\n\r\n          var delayedclick = null;\r\n\r\n          self.ontouchstart = function (e) {\r\n\r\n            if (self.locked) return false;\r\n\r\n            //if (e.pointerType && e.pointerType != 2 && e.pointerType != \"touch\") return false;\r\n            if (e.pointerType && (e.pointerType === 'mouse' || e.pointerType === e.MSPOINTER_TYPE_MOUSE)) return false;  // need test on surface!!\r\n\r\n            self.hasmoving = false;\r\n\r\n            if (self.scrollmom.timer) {\r\n              self.triggerScrollEnd();\r\n              self.scrollmom.stop();\r\n            }\r\n\r\n            if (!self.railslocked) {\r\n              var tg = self.getTarget(e);\r\n\r\n              if (tg) {\r\n                var skp = (/INPUT/i.test(tg.nodeName)) && (/range/i.test(tg.type));\r\n                if (skp) return self.stopPropagation(e);\r\n              }\r\n\r\n              var ismouse = (e.type === \"mousedown\");\r\n\r\n              if (!(\"clientX\" in e) && (\"changedTouches\" in e)) {\r\n                e.clientX = e.changedTouches[0].clientX;\r\n                e.clientY = e.changedTouches[0].clientY;\r\n              }\r\n\r\n              if (self.forcescreen) {\r\n                var le = e;\r\n                e = {\r\n                  \"original\": (e.original) ? e.original : e\r\n                };\r\n                e.clientX = le.screenX;\r\n                e.clientY = le.screenY;\r\n              }\r\n\r\n              self.rail.drag = {\r\n                x: e.clientX,\r\n                y: e.clientY,\r\n                sx: self.scroll.x,\r\n                sy: self.scroll.y,\r\n                st: self.getScrollTop(),\r\n                sl: self.getScrollLeft(),\r\n                pt: 2,\r\n                dl: false,\r\n                tg: tg\r\n              };\r\n\r\n              if (self.ispage || !opt.directionlockdeadzone) {\r\n\r\n                self.rail.drag.dl = \"f\";\r\n\r\n              } else {\r\n\r\n                var view = {\r\n                  w: $window.width(),\r\n                  h: $window.height()\r\n                };\r\n\r\n                var page = self.getContentSize();\r\n\r\n                var maxh = page.h - view.h;\r\n                var maxw = page.w - view.w;\r\n\r\n                if (self.rail.scrollable && !self.railh.scrollable) self.rail.drag.ck = (maxh > 0) ? \"v\" : false;\r\n                else if (!self.rail.scrollable && self.railh.scrollable) self.rail.drag.ck = (maxw > 0) ? \"h\" : false;\r\n                else self.rail.drag.ck = false;\r\n\r\n              }\r\n\r\n              if (opt.emulatetouch && self.isiframe && cap.isie) {\r\n                var wp = self.win.position();\r\n                self.rail.drag.x += wp.left;\r\n                self.rail.drag.y += wp.top;\r\n              }\r\n\r\n              self.hasmoving = false;\r\n              self.lastmouseup = false;\r\n              self.scrollmom.reset(e.clientX, e.clientY);\r\n\r\n              if (tg&&ismouse) {\r\n\r\n                var ip = /INPUT|SELECT|BUTTON|TEXTAREA/i.test(tg.nodeName);\r\n                if (!ip) {\r\n                  if (cap.hasmousecapture) tg.setCapture();\r\n                  if (opt.emulatetouch) {\r\n                    if (tg.onclick && !(tg._onclick || false)) { // intercept DOM0 onclick event\r\n                      tg._onclick = tg.onclick;\r\n                      tg.onclick = function (e) {\r\n                        if (self.hasmoving) return false;\r\n                        tg._onclick.call(this, e);\r\n                      };\r\n                    }\r\n                    return self.cancelEvent(e);\r\n                  }\r\n                  return self.stopPropagation(e);\r\n                }\r\n\r\n                if (/SUBMIT|CANCEL|BUTTON/i.test($(tg).attr('type'))) {\r\n                  self.preventclick = {\r\n                    \"tg\": tg,\r\n                    \"click\": false\r\n                  };\r\n                }\r\n\r\n              }\r\n            }\r\n\r\n          };\r\n\r\n          self.ontouchend = function (e) {\r\n\r\n            if (!self.rail.drag) return true;\r\n\r\n            if (self.rail.drag.pt == 2) {\r\n              //if (e.pointerType && e.pointerType != 2 && e.pointerType != \"touch\") return false;\r\n              if (e.pointerType && (e.pointerType === 'mouse' || e.pointerType === e.MSPOINTER_TYPE_MOUSE)) return false;\r\n\r\n              self.rail.drag = false;\r\n\r\n              var ismouse = (e.type === \"mouseup\");\r\n\r\n              if (self.hasmoving) {\r\n                self.scrollmom.doMomentum();\r\n                self.lastmouseup = true;\r\n                self.hideCursor();\r\n                if (cap.hasmousecapture) _doc.releaseCapture();\r\n                if (ismouse) return self.cancelEvent(e);\r\n              }\r\n\r\n            }\r\n            else if (self.rail.drag.pt == 1) {\r\n              return self.onmouseup(e);\r\n            }\r\n\r\n          };\r\n\r\n          var moveneedoffset = (opt.emulatetouch && self.isiframe && !cap.hasmousecapture);\r\n\r\n          var locktollerance = opt.directionlockdeadzone * 0.3 | 0;\r\n\r\n          self.ontouchmove = function (e, byiframe) {\r\n\r\n            if (!self.rail.drag) return true;\r\n\r\n            if (e.targetTouches && opt.preventmultitouchscrolling) {\r\n              if (e.targetTouches.length > 1) return true; // multitouch\r\n            }\r\n\r\n            //if (e.pointerType && e.pointerType != 2 && e.pointerType != \"touch\") return false;\r\n            if (e.pointerType && (e.pointerType === 'mouse' || e.pointerType === e.MSPOINTER_TYPE_MOUSE)) return true;\r\n\r\n            if (self.rail.drag.pt == 2) {\r\n\r\n              if ((\"changedTouches\" in e)) {\r\n                e.clientX = e.changedTouches[0].clientX;\r\n                e.clientY = e.changedTouches[0].clientY;\r\n              }\r\n\r\n              var ofy, ofx;\r\n              ofx = ofy = 0;\r\n\r\n              if (moveneedoffset && !byiframe) {\r\n                var wp = self.win.position();\r\n                ofx = -wp.left;\r\n                ofy = -wp.top;\r\n              }\r\n\r\n              var fy = e.clientY + ofy;\r\n              var my = (fy - self.rail.drag.y);\r\n              var fx = e.clientX + ofx;\r\n              var mx = (fx - self.rail.drag.x);\r\n\r\n              var ny = self.rail.drag.st - my;\r\n\r\n              if (self.ishwscroll && opt.bouncescroll) {\r\n                if (ny < 0) {\r\n                  ny = Math.round(ny / 2);\r\n                } else if (ny > self.page.maxh) {\r\n                  ny = self.page.maxh + Math.round((ny - self.page.maxh) / 2);\r\n                }\r\n              } else {\r\n                if (ny < 0) {\r\n                  ny = 0;\r\n                  fy = 0;\r\n                }\r\n                else if (ny > self.page.maxh) {\r\n                  ny = self.page.maxh;\r\n                  fy = 0;\r\n                }\r\n                if (fy === 0 && !self.hasmoving) {\r\n                  if (!self.ispage) self.rail.drag = false;\r\n                  return true;\r\n                }\r\n              }\r\n\r\n              var nx = self.getScrollLeft();\r\n\r\n              if (self.railh && self.railh.scrollable) {\r\n                nx = (self.isrtlmode) ? mx - self.rail.drag.sl : self.rail.drag.sl - mx;\r\n\r\n                if (self.ishwscroll && opt.bouncescroll) {\r\n                  if (nx < 0) {\r\n                    nx = Math.round(nx / 2);\r\n                  } else if (nx > self.page.maxw) {\r\n                    nx = self.page.maxw + Math.round((nx - self.page.maxw) / 2);\r\n                  }\r\n                } else {\r\n                  if (nx < 0) {\r\n                    nx = 0;\r\n                    fx = 0;\r\n                  }\r\n                  if (nx > self.page.maxw) {\r\n                    nx = self.page.maxw;\r\n                    fx = 0;\r\n                  }\r\n                }\r\n\r\n              }\r\n\r\n\r\n              if (!self.hasmoving) {\r\n\r\n                if (self.rail.drag.y === e.clientY && self.rail.drag.x === e.clientX) return self.cancelEvent(e);  // prevent first useless move event \r\n\r\n                var ay = Math.abs(my);\r\n                var ax = Math.abs(mx);\r\n                var dz = opt.directionlockdeadzone;\r\n\r\n                if (!self.rail.drag.ck) {\r\n                  if (ay > dz && ax > dz) self.rail.drag.dl = \"f\";\r\n                  else if (ay > dz) self.rail.drag.dl = (ax > locktollerance) ? \"f\" : \"v\";\r\n                  else if (ax > dz) self.rail.drag.dl = (ay > locktollerance) ? \"f\" : \"h\";\r\n                }\r\n                else if (self.rail.drag.ck == \"v\") {\r\n                  if (ax > dz && ay <= locktollerance) {\r\n                    self.rail.drag = false;\r\n                  }\r\n                  else if (ay > dz) self.rail.drag.dl = \"v\";\r\n\r\n                }\r\n                else if (self.rail.drag.ck == \"h\") {\r\n\r\n                  if (ay > dz && ax <= locktollerance) {\r\n                    self.rail.drag = false;\r\n                  }\r\n                  else if (ax > dz) self.rail.drag.dl = \"h\";\r\n\r\n                }\r\n\r\n                if (!self.rail.drag.dl) return self.cancelEvent(e);\r\n\r\n                self.triggerScrollStart(e.clientX, e.clientY, 0, 0, 0);\r\n                self.hasmoving = true;\r\n              }\r\n\r\n              if (self.preventclick && !self.preventclick.click) {\r\n                self.preventclick.click = self.preventclick.tg.onclick || false;\r\n                self.preventclick.tg.onclick = self.onpreventclick;\r\n              }\r\n\r\n              if (self.rail.drag.dl) {\r\n                if (self.rail.drag.dl == \"v\") nx = self.rail.drag.sl;\r\n                else if (self.rail.drag.dl == \"h\") ny = self.rail.drag.st;\r\n              }\r\n\r\n              self.synched(\"touchmove\", function () {\r\n                if (self.rail.drag && (self.rail.drag.pt == 2)) {\r\n                  if (self.prepareTransition) self.resetTransition();\r\n                  if (self.rail.scrollable) self.setScrollTop(ny);\r\n                  self.scrollmom.update(fx, fy);\r\n                  if (self.railh && self.railh.scrollable) {\r\n                    self.setScrollLeft(nx);\r\n                    self.showCursor(ny, nx);\r\n                  } else {\r\n                    self.showCursor(ny);\r\n                  }\r\n                  if (cap.isie10) _doc.selection.clear();\r\n                }\r\n              });\r\n\r\n              return self.cancelEvent(e);\r\n\r\n            }\r\n            else if (self.rail.drag.pt == 1) { // drag on cursor\r\n              return self.onmousemove(e);\r\n            }\r\n\r\n          };\r\n\r\n          self.ontouchstartCursor = function (e, hronly) {\r\n            if (self.rail.drag && self.rail.drag.pt != 3) return;\r\n            if (self.locked) return self.cancelEvent(e);\r\n            self.cancelScroll();\r\n            self.rail.drag = {\r\n              x: e.touches[0].clientX,\r\n              y: e.touches[0].clientY,\r\n              sx: self.scroll.x,\r\n              sy: self.scroll.y,\r\n              pt: 3,\r\n              hr: (!!hronly)\r\n            };\r\n            var tg = self.getTarget(e);\r\n            if (!self.ispage && cap.hasmousecapture) tg.setCapture();\r\n            if (self.isiframe && !cap.hasmousecapture) {\r\n              self.saved.csspointerevents = self.doc.css(\"pointer-events\");\r\n              self.css(self.doc, { \"pointer-events\": \"none\" });\r\n            }\r\n            return self.cancelEvent(e);\r\n          };\r\n\r\n          self.ontouchendCursor = function (e) {\r\n            if (self.rail.drag) {\r\n              if (cap.hasmousecapture) _doc.releaseCapture();\r\n              if (self.isiframe && !cap.hasmousecapture) self.doc.css(\"pointer-events\", self.saved.csspointerevents);\r\n              if (self.rail.drag.pt != 3) return;\r\n              self.rail.drag = false;\r\n              return self.cancelEvent(e);\r\n            }\r\n          };\r\n\r\n          self.ontouchmoveCursor = function (e) {\r\n            if (self.rail.drag) {\r\n              if (self.rail.drag.pt != 3) return;\r\n\r\n              self.cursorfreezed = true;\r\n\r\n              if (self.rail.drag.hr) {\r\n                self.scroll.x = self.rail.drag.sx + (e.touches[0].clientX - self.rail.drag.x);\r\n                if (self.scroll.x < 0) self.scroll.x = 0;\r\n                var mw = self.scrollvaluemaxw;\r\n                if (self.scroll.x > mw) self.scroll.x = mw;\r\n              } else {\r\n                self.scroll.y = self.rail.drag.sy + (e.touches[0].clientY - self.rail.drag.y);\r\n                if (self.scroll.y < 0) self.scroll.y = 0;\r\n                var my = self.scrollvaluemax;\r\n                if (self.scroll.y > my) self.scroll.y = my;\r\n              }\r\n\r\n              self.synched('touchmove', function () {\r\n                if (self.rail.drag && (self.rail.drag.pt == 3)) {\r\n                  self.showCursor();\r\n                  if (self.rail.drag.hr) self.doScrollLeft(Math.round(self.scroll.x * self.scrollratio.x), opt.cursordragspeed);\r\n                  else self.doScrollTop(Math.round(self.scroll.y * self.scrollratio.y), opt.cursordragspeed);\r\n                }\r\n              });\r\n\r\n              return self.cancelEvent(e);\r\n            }\r\n\r\n          };\r\n\r\n        }\r\n\r\n        self.onmousedown = function (e, hronly) {\r\n          if (self.rail.drag && self.rail.drag.pt != 1) return;\r\n          if (self.railslocked) return self.cancelEvent(e);\r\n          self.cancelScroll();\r\n          self.rail.drag = {\r\n            x: e.clientX,\r\n            y: e.clientY,\r\n            sx: self.scroll.x,\r\n            sy: self.scroll.y,\r\n            pt: 1,\r\n            hr: hronly || false\r\n          };\r\n          var tg = self.getTarget(e);\r\n\r\n          if (cap.hasmousecapture) tg.setCapture();\r\n          if (self.isiframe && !cap.hasmousecapture) {\r\n            self.saved.csspointerevents = self.doc.css(\"pointer-events\");\r\n            self.css(self.doc, {\r\n              \"pointer-events\": \"none\"\r\n            });\r\n          }\r\n          self.hasmoving = false;\r\n          return self.cancelEvent(e);\r\n        };\r\n\r\n        self.onmouseup = function (e) {\r\n          if (self.rail.drag) {\r\n            if (self.rail.drag.pt != 1) return true;\r\n\r\n            if (cap.hasmousecapture) _doc.releaseCapture();\r\n            if (self.isiframe && !cap.hasmousecapture) self.doc.css(\"pointer-events\", self.saved.csspointerevents);\r\n            self.rail.drag = false;\r\n            self.cursorfreezed = false;\r\n            if (self.hasmoving) self.triggerScrollEnd();\r\n            return self.cancelEvent(e);\r\n          }\r\n        };\r\n\r\n        self.onmousemove = function (e) {\r\n          if (self.rail.drag) {\r\n            if (self.rail.drag.pt !== 1) return;\r\n\r\n            if (cap.ischrome && e.which === 0) return self.onmouseup(e);\r\n\r\n            self.cursorfreezed = true;\r\n\r\n            if (!self.hasmoving) self.triggerScrollStart(e.clientX, e.clientY, 0, 0, 0);\r\n\r\n            self.hasmoving = true;\r\n\r\n            if (self.rail.drag.hr) {\r\n              self.scroll.x = self.rail.drag.sx + (e.clientX - self.rail.drag.x);\r\n              if (self.scroll.x < 0) self.scroll.x = 0;\r\n              var mw = self.scrollvaluemaxw;\r\n              if (self.scroll.x > mw) self.scroll.x = mw;\r\n            } else {\r\n              self.scroll.y = self.rail.drag.sy + (e.clientY - self.rail.drag.y);\r\n              if (self.scroll.y < 0) self.scroll.y = 0;\r\n              var my = self.scrollvaluemax;\r\n              if (self.scroll.y > my) self.scroll.y = my;\r\n            }\r\n\r\n            self.synched('mousemove', function () {\r\n\r\n              if (self.cursorfreezed) {\r\n                self.showCursor();\r\n\r\n                if (self.rail.drag.hr) {\r\n                  self.scrollLeft(Math.round(self.scroll.x * self.scrollratio.x));\r\n                } else {\r\n                  self.scrollTop(Math.round(self.scroll.y * self.scrollratio.y));\r\n                }\r\n\r\n              }\r\n            });\r\n\r\n            return self.cancelEvent(e);\r\n          }\r\n          else {\r\n            self.checkarea = 0;\r\n          }\r\n        };\r\n\r\n        if (cap.cantouch || opt.emulatetouch) {\r\n\r\n          self.onpreventclick = function (e) {\r\n            if (self.preventclick) {\r\n              self.preventclick.tg.onclick = self.preventclick.click;\r\n              self.preventclick = false;\r\n              return self.cancelEvent(e);\r\n            }\r\n          };\r\n\r\n          self.onclick = (cap.isios) ? false : function (e) {  // it needs to check IE11 ???\r\n            if (self.lastmouseup) {\r\n              self.lastmouseup = false;\r\n              return self.cancelEvent(e);\r\n            } else {\r\n              return true;\r\n            }\r\n          };\r\n\r\n          if (opt.grabcursorenabled && cap.cursorgrabvalue) {\r\n            self.css((self.ispage) ? self.doc : self.win, {\r\n              'cursor': cap.cursorgrabvalue\r\n            });\r\n            self.css(self.rail, {\r\n              'cursor': cap.cursorgrabvalue\r\n            });\r\n          }\r\n\r\n        } else {\r\n\r\n          var checkSelectionScroll = function (e) {\r\n            if (!self.selectiondrag) return;\r\n\r\n            if (e) {\r\n              var ww = self.win.outerHeight();\r\n              var df = (e.pageY - self.selectiondrag.top);\r\n              if (df > 0 && df < ww) df = 0;\r\n              if (df >= ww) df -= ww;\r\n              self.selectiondrag.df = df;\r\n            }\r\n            if (self.selectiondrag.df === 0) return;\r\n\r\n            var rt = -(self.selectiondrag.df*2/6)|0;\r\n            self.doScrollBy(rt);\r\n\r\n            self.debounced(\"doselectionscroll\", function () {\r\n              checkSelectionScroll();\r\n            }, 50);\r\n          };\r\n\r\n          if (\"getSelection\" in _doc) { // A grade - Major browsers\r\n            self.hasTextSelected = function () {\r\n              return (_doc.getSelection().rangeCount > 0);\r\n            };\r\n          } else if (\"selection\" in _doc) { //IE9-\r\n            self.hasTextSelected = function () {\r\n              return (_doc.selection.type != \"None\");\r\n            };\r\n          } else {\r\n            self.hasTextSelected = function () { // no support\r\n              return false;\r\n            };\r\n          }\r\n\r\n          self.onselectionstart = function (e) {\r\n            //  More testing - severe chrome issues           \r\n            /* \r\n                          if (!self.haswrapper&&(e.which&&e.which==2)) {  // fool browser to manage middle button scrolling\r\n                            self.win.css({'overflow':'auto'});\r\n                            setTimeout(function(){\r\n                              self.win.css({'overflow':'hidden'});\r\n                            },10);                \r\n                            return true;\r\n                          }            \r\n            */\r\n            if (self.ispage) return;\r\n            self.selectiondrag = self.win.offset();\r\n          };\r\n\r\n          self.onselectionend = function (e) {\r\n            self.selectiondrag = false;\r\n          };\r\n          self.onselectiondrag = function (e) {\r\n            if (!self.selectiondrag) return;\r\n            if (self.hasTextSelected()) self.debounced(\"selectionscroll\", function () {\r\n              checkSelectionScroll(e);\r\n            }, 250);\r\n          };\r\n        }\r\n\r\n        if (cap.hasw3ctouch) { //IE11+\r\n          self.css((self.ispage) ? $(\"html\") : self.win, { 'touch-action': 'none' });\r\n          self.css(self.rail, {\r\n            'touch-action': 'none'\r\n          });\r\n          self.css(self.cursor, {\r\n            'touch-action': 'none'\r\n          });\r\n          self.bind(self.win, \"pointerdown\", self.ontouchstart);\r\n          self.bind(_doc, \"pointerup\", self.ontouchend);\r\n          self.delegate(_doc, \"pointermove\", self.ontouchmove);\r\n        } else if (cap.hasmstouch) { //IE10\r\n          self.css((self.ispage) ? $(\"html\") : self.win, { '-ms-touch-action': 'none' });\r\n          self.css(self.rail, {\r\n            '-ms-touch-action': 'none'\r\n          });\r\n          self.css(self.cursor, {\r\n            '-ms-touch-action': 'none'\r\n          });\r\n          self.bind(self.win, \"MSPointerDown\", self.ontouchstart);\r\n          self.bind(_doc, \"MSPointerUp\", self.ontouchend);\r\n          self.delegate(_doc, \"MSPointerMove\", self.ontouchmove);\r\n          self.bind(self.cursor, \"MSGestureHold\", function (e) {\r\n            e.preventDefault();\r\n          });\r\n          self.bind(self.cursor, \"contextmenu\", function (e) {\r\n            e.preventDefault();\r\n          });\r\n        } else if (cap.cantouch) { // smartphones/touch devices\r\n          self.bind(self.win, \"touchstart\", self.ontouchstart, false, true);\r\n          self.bind(_doc, \"touchend\", self.ontouchend, false, true);\r\n          self.bind(_doc, \"touchcancel\", self.ontouchend, false, true);\r\n          self.delegate(_doc, \"touchmove\", self.ontouchmove, false, true);\r\n        }\r\n\r\n        if (opt.emulatetouch) {\r\n          self.bind(self.win, \"mousedown\", self.ontouchstart, false, true);\r\n          self.bind(_doc, \"mouseup\", self.ontouchend, false, true);\r\n          self.bind(_doc, \"mousemove\", self.ontouchmove, false, true);\r\n        }\r\n\r\n        if (opt.cursordragontouch || (!cap.cantouch && !opt.emulatetouch)) {\r\n\r\n          self.rail.css({\r\n            cursor: \"default\"\r\n          });\r\n          self.railh && self.railh.css({\r\n            cursor: \"default\"\r\n          });\r\n\r\n          self.jqbind(self.rail, \"mouseenter\", function () {\r\n            if (!self.ispage && !self.win.is(\":visible\")) return false;\r\n            if (self.canshowonmouseevent) self.showCursor();\r\n            self.rail.active = true;\r\n          });\r\n          self.jqbind(self.rail, \"mouseleave\", function () {\r\n            self.rail.active = false;\r\n            if (!self.rail.drag) self.hideCursor();\r\n          });\r\n\r\n          if (opt.sensitiverail) {\r\n            self.bind(self.rail, \"click\", function (e) {\r\n              self.doRailClick(e, false, false);\r\n            });\r\n            self.bind(self.rail, \"dblclick\", function (e) {\r\n              self.doRailClick(e, true, false);\r\n            });\r\n            self.bind(self.cursor, \"click\", function (e) {\r\n              self.cancelEvent(e);\r\n            });\r\n            self.bind(self.cursor, \"dblclick\", function (e) {\r\n              self.cancelEvent(e);\r\n            });\r\n          }\r\n\r\n          if (self.railh) {\r\n            self.jqbind(self.railh, \"mouseenter\", function () {\r\n              if (!self.ispage && !self.win.is(\":visible\")) return false;\r\n              if (self.canshowonmouseevent) self.showCursor();\r\n              self.rail.active = true;\r\n            });\r\n            self.jqbind(self.railh, \"mouseleave\", function () {\r\n              self.rail.active = false;\r\n              if (!self.rail.drag) self.hideCursor();\r\n            });\r\n\r\n            if (opt.sensitiverail) {\r\n              self.bind(self.railh, \"click\", function (e) {\r\n                self.doRailClick(e, false, true);\r\n              });\r\n              self.bind(self.railh, \"dblclick\", function (e) {\r\n                self.doRailClick(e, true, true);\r\n              });\r\n              self.bind(self.cursorh, \"click\", function (e) {\r\n                self.cancelEvent(e);\r\n              });\r\n              self.bind(self.cursorh, \"dblclick\", function (e) {\r\n                self.cancelEvent(e);\r\n              });\r\n            }\r\n\r\n          }\r\n\r\n        }\r\n\r\n        if (opt.cursordragontouch && (this.istouchcapable || cap.cantouch)) {\r\n          self.bind(self.cursor, \"touchstart\", self.ontouchstartCursor);\r\n          self.bind(self.cursor, \"touchmove\", self.ontouchmoveCursor);\r\n          self.bind(self.cursor, \"touchend\", self.ontouchendCursor);\r\n          self.cursorh && self.bind(self.cursorh, \"touchstart\", function (e) {\r\n            self.ontouchstartCursor(e, true);\r\n          });\r\n          self.cursorh && self.bind(self.cursorh, \"touchmove\", self.ontouchmoveCursor);\r\n          self.cursorh && self.bind(self.cursorh, \"touchend\", self.ontouchendCursor);\r\n        }\r\n\r\n//        if (!cap.cantouch && !opt.emulatetouch) {\r\n        if (!opt.emulatetouch && !cap.isandroid && !cap.isios) {\r\n\r\n          self.bind((cap.hasmousecapture) ? self.win : _doc, \"mouseup\", self.onmouseup);\r\n          self.bind(_doc, \"mousemove\", self.onmousemove);\r\n          if (self.onclick) self.bind(_doc, \"click\", self.onclick);\r\n\r\n          self.bind(self.cursor, \"mousedown\", self.onmousedown);\r\n          self.bind(self.cursor, \"mouseup\", self.onmouseup);\r\n\r\n          if (self.railh) {\r\n            self.bind(self.cursorh, \"mousedown\", function (e) {\r\n              self.onmousedown(e, true);\r\n            });\r\n            self.bind(self.cursorh, \"mouseup\", self.onmouseup);\r\n          }\r\n\r\n          if (!self.ispage && opt.enablescrollonselection) {\r\n            self.bind(self.win[0], \"mousedown\", self.onselectionstart);\r\n            self.bind(_doc, \"mouseup\", self.onselectionend);\r\n            self.bind(self.cursor, \"mouseup\", self.onselectionend);\r\n            if (self.cursorh) self.bind(self.cursorh, \"mouseup\", self.onselectionend);\r\n            self.bind(_doc, \"mousemove\", self.onselectiondrag);\r\n          }\r\n\r\n          if (self.zoom) {\r\n            self.jqbind(self.zoom, \"mouseenter\", function () {\r\n              if (self.canshowonmouseevent) self.showCursor();\r\n              self.rail.active = true;\r\n            });\r\n            self.jqbind(self.zoom, \"mouseleave\", function () {\r\n              self.rail.active = false;\r\n              if (!self.rail.drag) self.hideCursor();\r\n            });\r\n          }\r\n\r\n        } else {\r\n\r\n          self.bind((cap.hasmousecapture) ? self.win : _doc, \"mouseup\", self.ontouchend);\r\n          if (self.onclick) self.bind(_doc, \"click\", self.onclick);\r\n\r\n          if (opt.cursordragontouch) {\r\n            self.bind(self.cursor, \"mousedown\", self.onmousedown);\r\n            self.bind(self.cursor, \"mouseup\", self.onmouseup);\r\n            self.cursorh && self.bind(self.cursorh, \"mousedown\", function (e) {\r\n              self.onmousedown(e, true);\r\n            });\r\n            self.cursorh && self.bind(self.cursorh, \"mouseup\", self.onmouseup);\r\n          } else {\r\n            self.bind(self.rail, \"mousedown\", function (e) { e.preventDefault(); });  // prevent text selection             \r\n            self.railh && self.bind(self.railh, \"mousedown\", function (e) { e.preventDefault(); });\r\n          }\r\n\r\n        }\r\n\r\n\r\n        if (opt.enablemousewheel) {\r\n          if (!self.isiframe) self.mousewheel((cap.isie && self.ispage) ? _doc : self.win, self.onmousewheel);\r\n          self.mousewheel(self.rail, self.onmousewheel);\r\n          if (self.railh) self.mousewheel(self.railh, self.onmousewheelhr);\r\n        }\r\n\r\n        if (!self.ispage && !cap.cantouch && !(/HTML|^BODY/.test(self.win[0].nodeName))) {\r\n          if (!self.win.attr(\"tabindex\")) self.win.attr({\r\n            \"tabindex\": ++tabindexcounter\r\n          });\r\n\r\n          self.bind(self.win, \"focus\", function (e) {  // better using native events\r\n            domfocus = (self.getTarget(e)).id || self.getTarget(e) || false;\r\n            self.hasfocus = true;\r\n            if (self.canshowonmouseevent) self.noticeCursor();\r\n          });\r\n          self.bind(self.win, \"blur\", function (e) {  // *\r\n            domfocus = false;\r\n            self.hasfocus = false;\r\n          });\r\n\r\n          self.bind(self.win, \"mouseenter\", function (e) {   // *\r\n            mousefocus = (self.getTarget(e)).id || self.getTarget(e) || false;\r\n            self.hasmousefocus = true;\r\n            if (self.canshowonmouseevent) self.noticeCursor();\r\n          });\r\n          self.bind(self.win, \"mouseleave\", function (e) {   // *       \r\n            mousefocus = false;\r\n            self.hasmousefocus = false;\r\n            if (!self.rail.drag) self.hideCursor();\r\n          });\r\n\r\n        }\r\n\r\n\r\n        //Thanks to http://www.quirksmode.org !!\r\n        self.onkeypress = function (e) {\r\n          if (self.railslocked && self.page.maxh === 0) return true;\r\n\r\n          e = e || _win.event;\r\n          var tg = self.getTarget(e);\r\n          if (tg && /INPUT|TEXTAREA|SELECT|OPTION/.test(tg.nodeName)) {\r\n            var tp = tg.getAttribute('type') || tg.type || false;\r\n            if ((!tp) || !(/submit|button|cancel/i.tp)) return true;\r\n          }\r\n\r\n          if ($(tg).attr('contenteditable')) return true;\r\n\r\n          if (self.hasfocus || (self.hasmousefocus && !domfocus) || (self.ispage && !domfocus && !mousefocus)) {\r\n            var key = e.keyCode;\r\n\r\n            if (self.railslocked && key != 27) return self.cancelEvent(e);\r\n\r\n            var ctrl = e.ctrlKey || false;\r\n            var shift = e.shiftKey || false;\r\n\r\n            var ret = false;\r\n            switch (key) {\r\n              case 38:\r\n              case 63233: //safari\r\n                self.doScrollBy(24 * 3);\r\n                ret = true;\r\n                break;\r\n              case 40:\r\n              case 63235: //safari\r\n                self.doScrollBy(-24 * 3);\r\n                ret = true;\r\n                break;\r\n              case 37:\r\n              case 63232: //safari\r\n                if (self.railh) {\r\n                  (ctrl) ? self.doScrollLeft(0) : self.doScrollLeftBy(24 * 3);\r\n                  ret = true;\r\n                }\r\n                break;\r\n              case 39:\r\n              case 63234: //safari\r\n                if (self.railh) {\r\n                  (ctrl) ? self.doScrollLeft(self.page.maxw) : self.doScrollLeftBy(-24 * 3);\r\n                  ret = true;\r\n                }\r\n                break;\r\n              case 33:\r\n              case 63276: // safari\r\n                self.doScrollBy(self.view.h);\r\n                ret = true;\r\n                break;\r\n              case 34:\r\n              case 63277: // safari\r\n                self.doScrollBy(-self.view.h);\r\n                ret = true;\r\n                break;\r\n              case 36:\r\n              case 63273: // safari                \r\n                (self.railh && ctrl) ? self.doScrollPos(0, 0) : self.doScrollTo(0);\r\n                ret = true;\r\n                break;\r\n              case 35:\r\n              case 63275: // safari\r\n                (self.railh && ctrl) ? self.doScrollPos(self.page.maxw, self.page.maxh) : self.doScrollTo(self.page.maxh);\r\n                ret = true;\r\n                break;\r\n              case 32:\r\n                if (opt.spacebarenabled) {\r\n                  (shift) ? self.doScrollBy(self.view.h) : self.doScrollBy(-self.view.h);\r\n                  ret = true;\r\n                }\r\n                break;\r\n              case 27: // ESC\r\n                if (self.zoomactive) {\r\n                  self.doZoom();\r\n                  ret = true;\r\n                }\r\n                break;\r\n            }\r\n            if (ret) return self.cancelEvent(e);\r\n          }\r\n        };\r\n\r\n        if (opt.enablekeyboard) self.bind(_doc, (cap.isopera && !cap.isopera12) ? \"keypress\" : \"keydown\", self.onkeypress);\r\n\r\n        self.bind(_doc, \"keydown\", function (e) {\r\n          var ctrl = e.ctrlKey || false;\r\n          if (ctrl) self.wheelprevented = true;\r\n        });\r\n        self.bind(_doc, \"keyup\", function (e) {\r\n          var ctrl = e.ctrlKey || false;\r\n          if (!ctrl) self.wheelprevented = false;\r\n        });\r\n        self.bind(_win, \"blur\", function (e) {\r\n          self.wheelprevented = false;\r\n        });\r\n\r\n        self.bind(_win, 'resize', self.onscreenresize);\r\n        self.bind(_win, 'orientationchange', self.onscreenresize);\r\n\r\n        self.bind(_win, \"load\", self.lazyResize);\r\n\r\n        if (cap.ischrome && !self.ispage && !self.haswrapper) { //chrome void scrollbar bug - it persists in version 26\r\n          var tmp = self.win.attr(\"style\");\r\n          var ww = parseFloat(self.win.css(\"width\")) + 1;\r\n          self.win.css('width', ww);\r\n          self.synched(\"chromefix\", function () {\r\n            self.win.attr(\"style\", tmp);\r\n          });\r\n        }\r\n\r\n\r\n        // Trying a cross-browser implementation - good luck!\r\n\r\n        self.onAttributeChange = function (e) {\r\n          self.lazyResize(self.isieold ? 250 : 30);\r\n        };\r\n\r\n        if (opt.enableobserver) {\r\n\r\n          if ((!self.isie11) && (ClsMutationObserver !== false)) {  // IE11 crashes  #568\r\n            self.observerbody = new ClsMutationObserver(function (mutations) {\r\n              mutations.forEach(function (mut) {\r\n                if (mut.type == \"attributes\") {\r\n                  return ($body.hasClass(\"modal-open\") && $body.hasClass(\"modal-dialog\") && !$.contains($('.modal-dialog')[0], self.doc[0])) ? self.hide() : self.show();  // Support for Bootstrap modal; Added check if the nice scroll element is inside a modal\r\n                }\r\n              });\r\n              if (self.me.clientWidth != self.page.width || self.me.clientHeight != self.page.height) return self.lazyResize(30);\r\n            });\r\n            self.observerbody.observe(_doc.body, {\r\n              childList: true,\r\n              subtree: true,\r\n              characterData: false,\r\n              attributes: true,\r\n              attributeFilter: ['class']\r\n            });\r\n          }\r\n\r\n          if (!self.ispage && !self.haswrapper) {\r\n\r\n            var _dom = self.win[0];\r\n\r\n            // redesigned MutationObserver for Chrome18+/Firefox14+/iOS6+ with support for: remove div, add/remove content\r\n            if (ClsMutationObserver !== false) {\r\n              self.observer = new ClsMutationObserver(function (mutations) {\r\n                mutations.forEach(self.onAttributeChange);\r\n              });\r\n              self.observer.observe(_dom, {\r\n                childList: true,\r\n                characterData: false,\r\n                attributes: true,\r\n                subtree: false\r\n              });\r\n              self.observerremover = new ClsMutationObserver(function (mutations) {\r\n                mutations.forEach(function (mo) {\r\n                  if (mo.removedNodes.length > 0) {\r\n                    for (var dd in mo.removedNodes) {\r\n                      if (!!self && (mo.removedNodes[dd] === _dom)) return self.remove();\r\n                    }\r\n                  }\r\n                });\r\n              });\r\n              self.observerremover.observe(_dom.parentNode, {\r\n                childList: true,\r\n                characterData: false,\r\n                attributes: false,\r\n                subtree: false\r\n              });\r\n            } else {\r\n              self.bind(_dom, (cap.isie && !cap.isie9) ? \"propertychange\" : \"DOMAttrModified\", self.onAttributeChange);\r\n              if (cap.isie9) _dom.attachEvent(\"onpropertychange\", self.onAttributeChange); //IE9 DOMAttrModified bug\r\n              self.bind(_dom, \"DOMNodeRemoved\", function (e) {\r\n                if (e.target === _dom) self.remove();\r\n              });\r\n            }\r\n          }\r\n\r\n        }\r\n\r\n        //\r\n\r\n        if (!self.ispage && opt.boxzoom) self.bind(_win, \"resize\", self.resizeZoom);\r\n        if (self.istextarea) {\r\n          self.bind(self.win, \"keydown\", self.lazyResize);\r\n          self.bind(self.win, \"mouseup\", self.lazyResize);\r\n        }\r\n\r\n        self.lazyResize(30);\r\n\r\n      }\r\n\r\n      if (this.doc[0].nodeName == 'IFRAME') {\r\n        var oniframeload = function () {\r\n          self.iframexd = false;\r\n          var doc;\r\n          try {\r\n            doc = 'contentDocument' in this ? this.contentDocument : this.contentWindow._doc;\r\n            var a = doc.domain;\r\n          } catch (e) {\r\n            self.iframexd = true;\r\n            doc = false;\r\n          }\r\n\r\n          if (self.iframexd) {\r\n            if (\"console\" in _win) console.log('NiceScroll error: policy restriced iframe');\r\n            return true; //cross-domain - I can't manage this        \r\n          }\r\n\r\n          self.forcescreen = true;\r\n\r\n          if (self.isiframe) {\r\n            self.iframe = {\r\n              \"doc\": $(doc),\r\n              \"html\": self.doc.contents().find('html')[0],\r\n              \"body\": self.doc.contents().find('body')[0]\r\n            };\r\n            self.getContentSize = function () {\r\n              return {\r\n                w: Math.max(self.iframe.html.scrollWidth, self.iframe.body.scrollWidth),\r\n                h: Math.max(self.iframe.html.scrollHeight, self.iframe.body.scrollHeight)\r\n              };\r\n            };\r\n            self.docscroll = $(self.iframe.body);\r\n          }\r\n\r\n          if (!cap.isios && opt.iframeautoresize && !self.isiframe) {\r\n            self.win.scrollTop(0); // reset position\r\n            self.doc.height(\"\"); //reset height to fix browser bug\r\n            var hh = Math.max(doc.getElementsByTagName('html')[0].scrollHeight, doc.body.scrollHeight);\r\n            self.doc.height(hh);\r\n          }\r\n          self.lazyResize(30);\r\n\r\n          self.css($(self.iframe.body), _scrollyhidden);\r\n\r\n          if (cap.isios && self.haswrapper) {\r\n            self.css($(doc.body), {\r\n              '-webkit-transform': 'translate3d(0,0,0)'\r\n            }); // avoid iFrame content clipping - thanks to http://blog.derraab.com/2012/04/02/avoid-iframe-content-clipping-with-css-transform-on-ios/\r\n          }\r\n\r\n          if ('contentWindow' in this) {\r\n            self.bind(this.contentWindow, \"scroll\", self.onscroll); //IE8 & minor\r\n          } else {\r\n            self.bind(doc, \"scroll\", self.onscroll);\r\n          }\r\n\r\n          if (opt.enablemousewheel) {\r\n            self.mousewheel(doc, self.onmousewheel);\r\n          }\r\n\r\n          if (opt.enablekeyboard) self.bind(doc, (cap.isopera) ? \"keypress\" : \"keydown\", self.onkeypress);\r\n\r\n          if (cap.cantouch) {\r\n            self.bind(doc, \"touchstart\", self.ontouchstart);\r\n            self.bind(doc, \"touchmove\", self.ontouchmove);\r\n          }\r\n          else if (opt.emulatetouch) {\r\n            self.bind(doc, \"mousedown\", self.ontouchstart);\r\n            self.bind(doc, \"mousemove\", function (e) {\r\n              return self.ontouchmove(e, true);\r\n            });\r\n            if (opt.grabcursorenabled && cap.cursorgrabvalue) self.css($(doc.body), {\r\n              'cursor': cap.cursorgrabvalue\r\n            });\r\n          }\r\n\r\n          self.bind(doc, \"mouseup\", self.ontouchend);\r\n\r\n          if (self.zoom) {\r\n            if (opt.dblclickzoom) self.bind(doc, 'dblclick', self.doZoom);\r\n            if (self.ongesturezoom) self.bind(doc, \"gestureend\", self.ongesturezoom);\r\n          }\r\n        };\r\n\r\n        if (this.doc[0].readyState && this.doc[0].readyState === \"complete\") {\r\n          setTimeout(function () {\r\n            oniframeload.call(self.doc[0], false);\r\n          }, 500);\r\n        }\r\n        self.bind(this.doc, \"load\", oniframeload);\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this.showCursor = function (py, px) {\r\n      if (self.cursortimeout) {\r\n        clearTimeout(self.cursortimeout);\r\n        self.cursortimeout = 0;\r\n      }\r\n      if (!self.rail) return;\r\n      if (self.autohidedom) {\r\n        self.autohidedom.stop().css({\r\n          opacity: opt.cursoropacitymax\r\n        });\r\n        self.cursoractive = true;\r\n      }\r\n\r\n      if (!self.rail.drag || self.rail.drag.pt != 1) {\r\n        if (py !== undefined && py !== false) {\r\n          self.scroll.y = (py / self.scrollratio.y) | 0;\r\n        }\r\n        if (px !== undefined) {\r\n          self.scroll.x = (px / self.scrollratio.x) | 0;\r\n        }\r\n      }\r\n\r\n      self.cursor.css({\r\n        height: self.cursorheight,\r\n        top: self.scroll.y\r\n      });\r\n      if (self.cursorh) {\r\n        var lx = (self.hasreversehr) ? self.scrollvaluemaxw - self.scroll.x : self.scroll.x;\r\n        self.cursorh.css({\r\n          width: self.cursorwidth,\r\n          left: (!self.rail.align && self.rail.visibility) ? lx + self.rail.width : lx\r\n        });\r\n        self.cursoractive = true;\r\n      }\r\n\r\n      if (self.zoom) self.zoom.stop().css({\r\n        opacity: opt.cursoropacitymax\r\n      });\r\n    };\r\n\r\n    this.hideCursor = function (tm) {\r\n      if (self.cursortimeout) return;\r\n      if (!self.rail) return;\r\n      if (!self.autohidedom) return;\r\n\r\n      if (self.hasmousefocus && opt.autohidemode === \"leave\") return;\r\n      self.cursortimeout = setTimeout(function () {\r\n        if (!self.rail.active || !self.showonmouseevent) {\r\n          self.autohidedom.stop().animate({\r\n            opacity: opt.cursoropacitymin\r\n          });\r\n          if (self.zoom) self.zoom.stop().animate({\r\n            opacity: opt.cursoropacitymin\r\n          });\r\n          self.cursoractive = false;\r\n        }\r\n        self.cursortimeout = 0;\r\n      }, tm || opt.hidecursordelay);\r\n    };\r\n\r\n    this.noticeCursor = function (tm, py, px) {\r\n      self.showCursor(py, px);\r\n      if (!self.rail.active) self.hideCursor(tm);\r\n    };\r\n\r\n    this.getContentSize =\r\n      (self.ispage) ?\r\n        function () {\r\n          return {\r\n            w: Math.max(_doc.body.scrollWidth, _doc.documentElement.scrollWidth),\r\n            h: Math.max(_doc.body.scrollHeight, _doc.documentElement.scrollHeight)\r\n          };\r\n        } : (self.haswrapper) ?\r\n          function () {\r\n            return {\r\n              w: self.doc[0].offsetWidth,\r\n              h: self.doc[0].offsetHeight\r\n            };\r\n          } : function () {\r\n            return {\r\n              w: self.docscroll[0].scrollWidth,\r\n              h: self.docscroll[0].scrollHeight\r\n            };\r\n          };\r\n\r\n    this.onResize = function (e, page) {\r\n\r\n      if (!self || !self.win) return false;\r\n\r\n      var premaxh = self.page.maxh,\r\n          premaxw = self.page.maxw,\r\n          previewh = self.view.h,\r\n          previeww = self.view.w;\r\n\r\n      self.view = {\r\n        w: (self.ispage) ? self.win.width() : self.win[0].clientWidth,\r\n        h: (self.ispage) ? self.win.height() : self.win[0].clientHeight\r\n      };\r\n\r\n      self.page = (page) ? page : self.getContentSize();\r\n\r\n      self.page.maxh = Math.max(0, self.page.h - self.view.h);\r\n      self.page.maxw = Math.max(0, self.page.w - self.view.w);\r\n\r\n      if ((self.page.maxh == premaxh) && (self.page.maxw == premaxw) && (self.view.w == previeww) && (self.view.h == previewh)) {\r\n        // test position        \r\n        if (!self.ispage) {\r\n          var pos = self.win.offset();\r\n          if (self.lastposition) {\r\n            var lst = self.lastposition;\r\n            if ((lst.top == pos.top) && (lst.left == pos.left)) return self; //nothing to do            \r\n          }\r\n          self.lastposition = pos;\r\n        } else {\r\n          return self; //nothing to do\r\n        }\r\n      }\r\n\r\n      if (self.page.maxh === 0) {\r\n        self.hideRail();\r\n        self.scrollvaluemax = 0;\r\n        self.scroll.y = 0;\r\n        self.scrollratio.y = 0;\r\n        self.cursorheight = 0;\r\n        self.setScrollTop(0);\r\n        if (self.rail) self.rail.scrollable = false;\r\n      } else {\r\n        self.page.maxh -= (opt.railpadding.top + opt.railpadding.bottom);\r\n        self.rail.scrollable = true;\r\n      }\r\n\r\n      if (self.page.maxw === 0) {\r\n        self.hideRailHr();\r\n        self.scrollvaluemaxw = 0;\r\n        self.scroll.x = 0;\r\n        self.scrollratio.x = 0;\r\n        self.cursorwidth = 0;\r\n        self.setScrollLeft(0);\r\n        if (self.railh) {\r\n          self.railh.scrollable = false;\r\n        }\r\n      } else {\r\n        self.page.maxw -= (opt.railpadding.left + opt.railpadding.right);\r\n        if (self.railh) self.railh.scrollable = (opt.horizrailenabled);\r\n      }\r\n\r\n      self.railslocked = (self.locked) || ((self.page.maxh === 0) && (self.page.maxw === 0));\r\n      if (self.railslocked) {\r\n        if (!self.ispage) self.updateScrollBar(self.view);\r\n        return false;\r\n      }\r\n\r\n      if (!self.hidden) {\r\n        if (!self.rail.visibility) self.showRail();\r\n        if (self.railh && !self.railh.visibility) self.showRailHr();\r\n      }\r\n\r\n      if (self.istextarea && self.win.css('resize') && self.win.css('resize') != 'none') self.view.h -= 20;\r\n\r\n      self.cursorheight = Math.min(self.view.h, Math.round(self.view.h * (self.view.h / self.page.h)));\r\n      self.cursorheight = (opt.cursorfixedheight) ? opt.cursorfixedheight : Math.max(opt.cursorminheight, self.cursorheight);\r\n\r\n      self.cursorwidth = Math.min(self.view.w, Math.round(self.view.w * (self.view.w / self.page.w)));\r\n      self.cursorwidth = (opt.cursorfixedheight) ? opt.cursorfixedheight : Math.max(opt.cursorminheight, self.cursorwidth);\r\n\r\n      self.scrollvaluemax = self.view.h - self.cursorheight - (opt.railpadding.top + opt.railpadding.bottom);\r\n      if (!self.hasborderbox) self.scrollvaluemax -= self.cursor[0].offsetHeight - self.cursor[0].clientHeight;\r\n\r\n      if (self.railh) {\r\n        self.railh.width = (self.page.maxh > 0) ? (self.view.w - self.rail.width) : self.view.w;\r\n        self.scrollvaluemaxw = self.railh.width - self.cursorwidth - (opt.railpadding.left + opt.railpadding.right);\r\n      }\r\n\r\n      if (!self.ispage) self.updateScrollBar(self.view);\r\n\r\n      self.scrollratio = {\r\n        x: (self.page.maxw / self.scrollvaluemaxw),\r\n        y: (self.page.maxh / self.scrollvaluemax)\r\n      };\r\n\r\n      var sy = self.getScrollTop();\r\n      if (sy > self.page.maxh) {\r\n        self.doScrollTop(self.page.maxh);\r\n      } else {\r\n        self.scroll.y = (self.getScrollTop() / self.scrollratio.y) | 0;\r\n        self.scroll.x = (self.getScrollLeft() / self.scrollratio.x) | 0;\r\n        if (self.cursoractive) self.noticeCursor();\r\n      }\r\n\r\n      if (self.scroll.y && (self.getScrollTop() === 0)) self.doScrollTo((self.scroll.y * self.scrollratio.y)|0);\r\n\r\n      return self;\r\n    };\r\n\r\n    this.resize = self.onResize;\r\n\r\n    var hlazyresize = 0;\r\n\r\n    this.onscreenresize = function(e) {\r\n      clearTimeout(hlazyresize);\r\n\r\n      var hiderails = (!self.ispage && !self.haswrapper);\r\n      if (hiderails) self.hideRails();\r\n\r\n      hlazyresize = setTimeout(function () {\r\n        if (self) {\r\n          if (hiderails) self.showRails();\r\n          self.resize();\r\n        }\r\n        hlazyresize=0;\r\n      }, 120);\r\n    };\r\n\r\n    this.lazyResize = function (tm) { // event debounce\r\n\r\n      clearTimeout(hlazyresize);\r\n\r\n      tm = isNaN(tm) ? 240 : tm;\r\n\r\n      hlazyresize = setTimeout(function () {\r\n        self && self.resize();\r\n        hlazyresize=0;\r\n      }, tm);\r\n\r\n      return self;\r\n\r\n    };\r\n\r\n    // derived by MDN https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/wheel\r\n    function _modernWheelEvent(dom, name, fn, bubble) {\r\n      self._bind(dom, name, function (e) {\r\n        e = e || _win.event;\r\n        var event = {\r\n          original: e,\r\n          target: e.target || e.srcElement,\r\n          type: \"wheel\",\r\n          deltaMode: e.type == \"MozMousePixelScroll\" ? 0 : 1,\r\n          deltaX: 0,\r\n          deltaZ: 0,\r\n          preventDefault: function () {\r\n            e.preventDefault ? e.preventDefault() : e.returnValue = false;\r\n            return false;\r\n          },\r\n          stopImmediatePropagation: function () {\r\n            (e.stopImmediatePropagation) ? e.stopImmediatePropagation() : e.cancelBubble = true;\r\n          }\r\n        };\r\n\r\n        if (name == \"mousewheel\") {\r\n          e.wheelDeltaX && (event.deltaX = -1 / 40 * e.wheelDeltaX);\r\n          e.wheelDeltaY && (event.deltaY = -1 / 40 * e.wheelDeltaY);\r\n          !event.deltaY && !event.deltaX && (event.deltaY = -1 / 40 * e.wheelDelta);\r\n        } else {\r\n          event.deltaY = e.detail;\r\n        }\r\n\r\n        return fn.call(dom, event);\r\n      }, bubble);\r\n    }\r\n\r\n\r\n\r\n    this.jqbind = function (dom, name, fn) { // use jquery bind for non-native events (mouseenter/mouseleave)\r\n      self.events.push({\r\n        e: dom,\r\n        n: name,\r\n        f: fn,\r\n        q: true\r\n      });\r\n      $(dom).on(name, fn);\r\n    };\r\n\r\n    this.mousewheel = function (dom, fn, bubble) { // bind mousewheel\r\n      var el = (\"jquery\" in dom) ? dom[0] : dom;\r\n      if (\"onwheel\" in _doc.createElement(\"div\")) { // Modern browsers support \"wheel\"\r\n        self._bind(el, \"wheel\", fn, bubble || false);\r\n      } else {\r\n        var wname = (_doc.onmousewheel !== undefined) ? \"mousewheel\" : \"DOMMouseScroll\"; // older Webkit+IE support or older Firefox          \r\n        _modernWheelEvent(el, wname, fn, bubble || false);\r\n        if (wname == \"DOMMouseScroll\") _modernWheelEvent(el, \"MozMousePixelScroll\", fn, bubble || false); // Firefox legacy\r\n      }\r\n    };\r\n\r\n    var passiveSupported = false;\r\n\r\n    if (cap.haseventlistener) {  // W3C standard event model\r\n\r\n      // thanks to https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n      try { var options = Object.defineProperty({}, \"passive\", { get: function () { passiveSupported = !0; } }); _win.addEventListener(\"test\", null, options); } catch (err) { }\r\n\r\n      this.stopPropagation = function (e) {\r\n        if (!e) return false;\r\n        e = (e.original) ? e.original : e;\r\n        e.stopPropagation();\r\n        return false;\r\n      };\r\n\r\n      this.cancelEvent = function(e) {\r\n        if (e.cancelable) e.preventDefault();\r\n        e.stopImmediatePropagation();\r\n        if (e.preventManipulation) e.preventManipulation();  // IE10+\r\n        return false;\r\n      };      \r\n\r\n    } else {\r\n\r\n      // inspired from https://gist.github.com/jonathantneal/2415137      \r\n\r\n      Event.prototype.preventDefault = function () {\r\n        this.returnValue = false;\r\n      };\r\n\r\n      Event.prototype.stopPropagation = function () {\r\n        this.cancelBubble = true;\r\n      };\r\n\r\n      _win.constructor.prototype.addEventListener = _doc.constructor.prototype.addEventListener = Element.prototype.addEventListener = function (type, listener, useCapture) {\r\n        this.attachEvent(\"on\" + type, listener);\r\n      };\r\n      _win.constructor.prototype.removeEventListener = _doc.constructor.prototype.removeEventListener = Element.prototype.removeEventListener = function (type, listener, useCapture) {\r\n        this.detachEvent(\"on\" + type, listener);\r\n      };\r\n\r\n      // Thanks to http://www.switchonthecode.com !!\r\n      this.cancelEvent = function (e) {\r\n        e = e || _win.event;\r\n        if (e) {          \r\n          e.cancelBubble = true;\r\n          e.cancel = true;\r\n          e.returnValue = false;\r\n        }  \r\n        return false;\r\n      };\r\n\r\n      this.stopPropagation = function (e) {\r\n        e = e || _win.event;\r\n        if (e) e.cancelBubble = true;\r\n        return false;\r\n      };\r\n\r\n    }\r\n\r\n    this.delegate = function (dom, name, fn, bubble, active) {\r\n\r\n      var de = delegatevents[name] || false;\r\n\r\n      if (!de) {\r\n\r\n        de = {\r\n          a: [],\r\n          l: [],\r\n          f: function (e) {\r\n            var lst = de.l, l = lst.length - 1;\r\n            var r = false;\r\n            for (var a = l; a >= 0; a--) {\r\n              r = lst[a].call(e.target, e);\r\n              if (r === false) return false;\r\n            }\r\n            return r;\r\n          }\r\n        };\r\n\r\n        self.bind(dom, name, de.f, bubble, active);\r\n\r\n        delegatevents[name] = de;\r\n\r\n      }\r\n\r\n      if (self.ispage) {\r\n        de.a = [self.id].concat(de.a);\r\n        de.l = [fn].concat(de.l);\r\n      } else {\r\n        de.a.push(self.id);\r\n        de.l.push(fn);        \r\n      }\r\n\r\n    };\r\n\r\n    this.undelegate = function (dom, name, fn, bubble, active) {\r\n      var de = delegatevents[name]||false;\r\n      if (de&&de.l) {  // quick fix #683\r\n        for (var a=0,l=de.l.length;a<l;a++) {\r\n          if (de.a[a] === self.id) {\r\n            de.a.splice(a);\r\n            de.l.splice(a);\r\n            if (de.a.length===0) {\r\n              self._unbind(dom,name,de.l.f);\r\n              delegatevents[name] = null;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    this.bind = function (dom, name, fn, bubble, active) {\r\n      var el = (\"jquery\" in dom) ? dom[0] : dom;\r\n      self._bind(el, name, fn, bubble || false, active || false);\r\n    };\r\n\r\n    this._bind = function (el, name, fn, bubble, active) { // primitive bind\r\n\r\n      self.events.push({\r\n        e: el,\r\n        n: name,\r\n        f: fn,\r\n        b: bubble,\r\n        q: false\r\n      });\r\n\r\n      (passiveSupported && active) ? el.addEventListener(name, fn, { passive: false, capture: bubble }) : el.addEventListener(name, fn, bubble || false);\r\n    };\r\n\r\n    this._unbind = function (el, name, fn, bub) { // primitive unbind\r\n      if (delegatevents[name]) self.undelegate(el, name, fn, bub);\r\n      else el.removeEventListener(name, fn, bub);\r\n    };\r\n\r\n    this.unbindAll = function () {\r\n      for (var a = 0; a < self.events.length; a++) {\r\n        var r = self.events[a];\r\n        (r.q) ? r.e.unbind(r.n, r.f) : self._unbind(r.e, r.n, r.f, r.b);\r\n      }\r\n    };\r\n\r\n    this.showRails = function () {\r\n      return self.showRail().showRailHr();\r\n    };\r\n\r\n    this.showRail = function () {\r\n      if ((self.page.maxh !== 0) && (self.ispage || self.win.css('display') != 'none')) {\r\n        //self.visibility = true;\r\n        self.rail.visibility = true;\r\n        self.rail.css('display', 'block');\r\n      }\r\n      return self;\r\n    };\r\n\r\n    this.showRailHr = function () {\r\n      if (self.railh) {\r\n        if ((self.page.maxw !== 0) && (self.ispage || self.win.css('display') != 'none')) {\r\n          self.railh.visibility = true;\r\n          self.railh.css('display', 'block');\r\n        }\r\n      }\r\n      return self;\r\n    };\r\n\r\n    this.hideRails = function () {\r\n      return self.hideRail().hideRailHr();\r\n    };\r\n\r\n    this.hideRail = function () {\r\n      //self.visibility = false;\r\n      self.rail.visibility = false;\r\n      self.rail.css('display', 'none');\r\n      return self;\r\n    };\r\n\r\n    this.hideRailHr = function () {\r\n      if (self.railh) {\r\n        self.railh.visibility = false;\r\n        self.railh.css('display', 'none');\r\n      }\r\n      return self;\r\n    };\r\n\r\n    this.show = function () {\r\n      self.hidden = false;\r\n      self.railslocked = false;\r\n      return self.showRails();\r\n    };\r\n\r\n    this.hide = function () {\r\n      self.hidden = true;\r\n      self.railslocked = true;\r\n      return self.hideRails();\r\n    };\r\n\r\n    this.toggle = function () {\r\n      return (self.hidden) ? self.show() : self.hide();\r\n    };\r\n\r\n    this.remove = function () {\r\n      self.stop();\r\n      if (self.cursortimeout) clearTimeout(self.cursortimeout);\r\n      for (var n in self.delaylist) if (self.delaylist[n]) clearAnimationFrame(self.delaylist[n].h);\r\n      self.doZoomOut();\r\n      self.unbindAll();\r\n\r\n      if (cap.isie9) self.win[0].detachEvent(\"onpropertychange\", self.onAttributeChange); //IE9 DOMAttrModified bug\r\n\r\n      if (self.observer !== false) self.observer.disconnect();\r\n      if (self.observerremover !== false) self.observerremover.disconnect();\r\n      if (self.observerbody !== false) self.observerbody.disconnect();\r\n\r\n      self.events = null;\r\n\r\n      if (self.cursor) {\r\n        self.cursor.remove();\r\n      }\r\n      if (self.cursorh) {\r\n        self.cursorh.remove();\r\n      }\r\n      if (self.rail) {\r\n        self.rail.remove();\r\n      }\r\n      if (self.railh) {\r\n        self.railh.remove();\r\n      }\r\n      if (self.zoom) {\r\n        self.zoom.remove();\r\n      }\r\n      for (var a = 0; a < self.saved.css.length; a++) {\r\n        var d = self.saved.css[a];\r\n        d[0].css(d[1], (d[2] === undefined) ? '' : d[2]);\r\n      }\r\n      self.saved = false;\r\n      self.me.data('__nicescroll', ''); //erase all traces\r\n\r\n      // memory leak fixed by GianlucaGuarini - thanks a lot!\r\n      // remove the current nicescroll from the $.nicescroll array & normalize array\r\n      var lst = $.nicescroll;\r\n      lst.each(function (i) {\r\n        if (!this) return;\r\n        if (this.id === self.id) {\r\n          delete lst[i];\r\n          for (var b = ++i; b < lst.length; b++ , i++) lst[i] = lst[b];\r\n          lst.length--;\r\n          if (lst.length) delete lst[lst.length];\r\n        }\r\n      });\r\n\r\n      for (var i in self) {\r\n        self[i] = null;\r\n        delete self[i];\r\n      }\r\n\r\n      self = null;\r\n\r\n    };\r\n\r\n    this.scrollstart = function (fn) {\r\n      this.onscrollstart = fn;\r\n      return self;\r\n    };\r\n    this.scrollend = function (fn) {\r\n      this.onscrollend = fn;\r\n      return self;\r\n    };\r\n    this.scrollcancel = function (fn) {\r\n      this.onscrollcancel = fn;\r\n      return self;\r\n    };\r\n\r\n    this.zoomin = function (fn) {\r\n      this.onzoomin = fn;\r\n      return self;\r\n    };\r\n    this.zoomout = function (fn) {\r\n      this.onzoomout = fn;\r\n      return self;\r\n    };\r\n\r\n    this.isScrollable = function (e) {\r\n      var dom = (e.target) ? e.target : e;\r\n      if (dom.nodeName == 'OPTION') return true;\r\n      while (dom && (dom.nodeType == 1) && (dom !== this.me[0]) && !(/^BODY|HTML/.test(dom.nodeName))) {\r\n        var dd = $(dom);\r\n        var ov = dd.css('overflowY') || dd.css('overflowX') || dd.css('overflow') || '';\r\n        if (/scroll|auto/.test(ov)) return (dom.clientHeight != dom.scrollHeight);\r\n        dom = (dom.parentNode) ? dom.parentNode : false;\r\n      }\r\n      return false;\r\n    };\r\n\r\n    this.getViewport = function (me) {\r\n      var dom = (me && me.parentNode) ? me.parentNode : false;\r\n      while (dom && (dom.nodeType == 1) && !(/^BODY|HTML/.test(dom.nodeName))) {\r\n        var dd = $(dom);\r\n        if (/fixed|absolute/.test(dd.css(\"position\"))) return dd;\r\n        var ov = dd.css('overflowY') || dd.css('overflowX') || dd.css('overflow') || '';\r\n        if ((/scroll|auto/.test(ov)) && (dom.clientHeight != dom.scrollHeight)) return dd;\r\n        if (dd.getNiceScroll().length > 0) return dd;\r\n        dom = (dom.parentNode) ? dom.parentNode : false;\r\n      }\r\n      return false;\r\n    };\r\n\r\n    this.triggerScrollStart = function (cx, cy, rx, ry, ms) {\r\n\r\n      if (self.onscrollstart) {\r\n        var info = {\r\n          type: \"scrollstart\",\r\n          current: {\r\n            x: cx,\r\n            y: cy\r\n          },\r\n          request: {\r\n            x: rx,\r\n            y: ry\r\n          },\r\n          end: {\r\n            x: self.newscrollx,\r\n            y: self.newscrolly\r\n          },\r\n          speed: ms\r\n        };\r\n        self.onscrollstart.call(self, info);\r\n      }\r\n\r\n    };\r\n\r\n    this.triggerScrollEnd = function () {\r\n      if (self.onscrollend) {\r\n\r\n        var px = self.getScrollLeft();\r\n        var py = self.getScrollTop();\r\n\r\n        var info = {\r\n          type: \"scrollend\",\r\n          current: {\r\n            x: px,\r\n            y: py\r\n          },\r\n          end: {\r\n            x: px,\r\n            y: py\r\n          }\r\n        };\r\n\r\n        self.onscrollend.call(self, info);\r\n\r\n      }\r\n\r\n    };\r\n\r\n    var scrolldiry = 0, scrolldirx = 0, scrolltmr = 0, scrollspd = 1;\r\n\r\n    function doScrollRelative(px, py, chkscroll, iswheel) {\r\n\r\n      if (!self.scrollrunning) {\r\n        self.newscrolly = self.getScrollTop();\r\n        self.newscrollx = self.getScrollLeft();\r\n        scrolltmr = now();\r\n      }\r\n\r\n      var gap = (now() - scrolltmr);\r\n      scrolltmr = now();\r\n\r\n      if (gap > 350) {\r\n        scrollspd = 1;\r\n      } else {\r\n        scrollspd += (2 - scrollspd) / 10;\r\n      }\r\n\r\n      px = px * scrollspd | 0;\r\n      py = py * scrollspd | 0;\r\n\r\n      if (px) {\r\n\r\n        if (iswheel) { // mouse-only\r\n          if (px < 0) {  // fix apple magic mouse swipe back/forward\r\n            if (self.getScrollLeft() >= self.page.maxw) return true;\r\n          } else {\r\n            if (self.getScrollLeft() <= 0) return true;\r\n          }\r\n        }\r\n\r\n        var dx = px > 0 ? 1 : -1;\r\n\r\n        if (scrolldirx !== dx) {\r\n          if (self.scrollmom) self.scrollmom.stop();\r\n          self.newscrollx = self.getScrollLeft();\r\n          scrolldirx = dx;\r\n        }\r\n\r\n        self.lastdeltax -= px;\r\n\r\n      }\r\n\r\n      if (py) {\r\n\r\n        var chk = (function () {\r\n          var top = self.getScrollTop();\r\n          if (py < 0) {\r\n            if (top >= self.page.maxh) return true;\r\n          } else {\r\n            if (top <= 0) return true;\r\n          }\r\n        })();\r\n\r\n        if (chk) {\r\n          if (opt.nativeparentscrolling && chkscroll && !self.ispage && !self.zoomactive) return true;\r\n          var ny = self.view.h >> 1;\r\n          if (self.newscrolly < -ny) { self.newscrolly = -ny; py = -1; }\r\n          else if (self.newscrolly > self.page.maxh + ny) { self.newscrolly = self.page.maxh + ny; py = 1; }\r\n          else py = 0;\r\n        }\r\n\r\n        var dy = py > 0 ? 1 : -1;\r\n\r\n        if (scrolldiry !== dy) {\r\n          if (self.scrollmom) self.scrollmom.stop();\r\n          self.newscrolly = self.getScrollTop();\r\n          scrolldiry = dy;\r\n        }\r\n\r\n        self.lastdeltay -= py;\r\n\r\n      }\r\n\r\n      if (py || px) {\r\n        self.synched(\"relativexy\", function () {\r\n\r\n          var dty = self.lastdeltay + self.newscrolly;\r\n          self.lastdeltay = 0;\r\n\r\n          var dtx = self.lastdeltax + self.newscrollx;\r\n          self.lastdeltax = 0;\r\n\r\n          if (!self.rail.drag) self.doScrollPos(dtx, dty);\r\n\r\n        });\r\n      }\r\n\r\n    }\r\n\r\n    var hasparentscrollingphase = false;\r\n\r\n    function execScrollWheel(e, hr, chkscroll) {\r\n      var px, py;\r\n\r\n      if (!chkscroll && hasparentscrollingphase) return true;\r\n\r\n      if (e.deltaMode === 0) { // PIXEL\r\n        px = -(e.deltaX * (opt.mousescrollstep / (18 * 3))) | 0;\r\n        py = -(e.deltaY * (opt.mousescrollstep / (18 * 3))) | 0;\r\n      } else if (e.deltaMode === 1) { // LINE\r\n        px = -(e.deltaX * opt.mousescrollstep * 50 / 80) | 0;\r\n        py = -(e.deltaY * opt.mousescrollstep * 50 / 80) | 0;\r\n      }\r\n\r\n      if (hr && opt.oneaxismousemode && (px === 0) && py) { // classic vertical-only mousewheel + browser with x/y support \r\n        px = py;\r\n        py = 0;\r\n\r\n        if (chkscroll) {\r\n          var hrend = (px < 0) ? (self.getScrollLeft() >= self.page.maxw) : (self.getScrollLeft() <= 0);\r\n          if (hrend) {  // preserve vertical scrolling\r\n            py = px;\r\n            px = 0;\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n      // invert horizontal direction for rtl mode\r\n      if (self.isrtlmode) px = -px;\r\n\r\n      var chk = doScrollRelative(px, py, chkscroll, true);\r\n\r\n      if (chk) {\r\n        if (chkscroll) hasparentscrollingphase = true;\r\n      } else {\r\n        hasparentscrollingphase = false;\r\n        e.stopImmediatePropagation();\r\n        return e.preventDefault();\r\n      }\r\n\r\n    }\r\n\r\n    this.onmousewheel = function (e) {\r\n      if (self.wheelprevented||self.locked) return false;\r\n      if (self.railslocked) {\r\n        self.debounced(\"checkunlock\", self.resize, 250);\r\n        return false;\r\n      }\r\n      if (self.rail.drag) return self.cancelEvent(e);\r\n\r\n      if (opt.oneaxismousemode === \"auto\" && e.deltaX !== 0) opt.oneaxismousemode = false; // check two-axis mouse support (not very elegant)\r\n\r\n      if (opt.oneaxismousemode && e.deltaX === 0) {\r\n        if (!self.rail.scrollable) {\r\n          if (self.railh && self.railh.scrollable) {\r\n            return self.onmousewheelhr(e);\r\n          } else {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n\r\n      var nw = now();\r\n      var chk = false;\r\n      if (opt.preservenativescrolling && ((self.checkarea + 600) < nw)) {\r\n        self.nativescrollingarea = self.isScrollable(e);\r\n        chk = true;\r\n      }\r\n      self.checkarea = nw;\r\n      if (self.nativescrollingarea) return true; // this isn't my business\r\n      var ret = execScrollWheel(e, false, chk);\r\n      if (ret) self.checkarea = 0;\r\n      return ret;\r\n    };\r\n\r\n    this.onmousewheelhr = function (e) {\r\n      if (self.wheelprevented) return;\r\n      if (self.railslocked || !self.railh.scrollable) return true;\r\n      if (self.rail.drag) return self.cancelEvent(e);\r\n\r\n      var nw = now();\r\n      var chk = false;\r\n      if (opt.preservenativescrolling && ((self.checkarea + 600) < nw)) {\r\n        self.nativescrollingarea = self.isScrollable(e);\r\n        chk = true;\r\n      }\r\n      self.checkarea = nw;\r\n      if (self.nativescrollingarea) return true; // this is not my business\r\n      if (self.railslocked) return self.cancelEvent(e);\r\n\r\n      return execScrollWheel(e, true, chk);\r\n    };\r\n\r\n    this.stop = function () {\r\n      self.cancelScroll();\r\n      if (self.scrollmon) self.scrollmon.stop();\r\n      self.cursorfreezed = false;\r\n      self.scroll.y = Math.round(self.getScrollTop() * (1 / self.scrollratio.y));\r\n      self.noticeCursor();\r\n      return self;\r\n    };\r\n\r\n    this.getTransitionSpeed = function (dif) {\r\n\r\n      return 80 + (dif / 72) * opt.scrollspeed |0;\r\n\r\n    };\r\n\r\n    if (!opt.smoothscroll) {\r\n      this.doScrollLeft = function (x, spd) { //direct\r\n        var y = self.getScrollTop();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n      this.doScrollTop = function (y, spd) { //direct\r\n        var x = self.getScrollLeft();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n      this.doScrollPos = function (x, y, spd) { //direct\r\n        var nx = (x > self.page.maxw) ? self.page.maxw : x;\r\n        if (nx < 0) nx = 0;\r\n        var ny = (y > self.page.maxh) ? self.page.maxh : y;\r\n        if (ny < 0) ny = 0;\r\n        self.synched('scroll', function () {\r\n          self.setScrollTop(ny);\r\n          self.setScrollLeft(nx);\r\n        });\r\n      };\r\n      this.cancelScroll = function () { }; // direct\r\n\r\n    } else if (self.ishwscroll && cap.hastransition && opt.usetransition && !!opt.smoothscroll) {\r\n\r\n      var lasttransitionstyle = '';\r\n\r\n      this.resetTransition = function () {\r\n        lasttransitionstyle = '';\r\n        self.doc.css(cap.prefixstyle + 'transition-duration', '0ms');\r\n      };\r\n\r\n      this.prepareTransition = function (dif, istime) {\r\n        var ex = (istime) ? dif : self.getTransitionSpeed(dif);\r\n        var trans = ex + 'ms';\r\n        if (lasttransitionstyle !== trans) {\r\n          lasttransitionstyle = trans;\r\n          self.doc.css(cap.prefixstyle + 'transition-duration', trans);\r\n        }\r\n        return ex;\r\n      };\r\n\r\n      this.doScrollLeft = function (x, spd) { //trans\r\n        var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n\r\n      this.doScrollTop = function (y, spd) { //trans\r\n        var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n\r\n      this.cursorupdate = {\r\n        running: false,\r\n        start: function () {\r\n          var m = this;\r\n\r\n          if (m.running) return;\r\n          m.running = true;\r\n\r\n          var loop = function () {\r\n            if (m.running) setAnimationFrame(loop);\r\n            self.showCursor(self.getScrollTop(), self.getScrollLeft());\r\n            self.notifyScrollEvent(self.win[0]);\r\n          };\r\n\r\n          setAnimationFrame(loop);\r\n        },\r\n        stop: function () {\r\n          this.running = false;\r\n        }\r\n      };\r\n\r\n      this.doScrollPos = function (x, y, spd) { //trans\r\n\r\n        var py = self.getScrollTop();\r\n        var px = self.getScrollLeft();\r\n\r\n        if (((self.newscrolly - py) * (y - py) < 0) || ((self.newscrollx - px) * (x - px) < 0)) self.cancelScroll(); //inverted movement detection      \r\n\r\n        if (!opt.bouncescroll) {\r\n          if (y < 0) y = 0;\r\n          else if (y > self.page.maxh) y = self.page.maxh;\r\n          if (x < 0) x = 0;\r\n          else if (x > self.page.maxw) x = self.page.maxw;\r\n        } else {\r\n          if (y < 0) y = y / 2 | 0;\r\n          else if (y > self.page.maxh) y = self.page.maxh + (y - self.page.maxh) / 2 | 0;\r\n          if (x < 0) x = x / 2 | 0;\r\n          else if (x > self.page.maxw) x = self.page.maxw + (x - self.page.maxw) / 2 | 0;\r\n        }\r\n\r\n        if (self.scrollrunning && x == self.newscrollx && y == self.newscrolly) return false;\r\n\r\n        self.newscrolly = y;\r\n        self.newscrollx = x;\r\n\r\n        var top = self.getScrollTop();\r\n        var lft = self.getScrollLeft();\r\n\r\n        var dst = {};\r\n        dst.x = x - lft;\r\n        dst.y = y - top;\r\n\r\n        var dd = Math.sqrt((dst.x * dst.x) + (dst.y * dst.y)) | 0;\r\n\r\n        var ms = self.prepareTransition(dd);\r\n\r\n        if (!self.scrollrunning) {\r\n          self.scrollrunning = true;\r\n          self.triggerScrollStart(lft, top, x, y, ms);\r\n          self.cursorupdate.start();\r\n        }\r\n\r\n        self.scrollendtrapped = true;\r\n\r\n        if (!cap.transitionend) {\r\n          if (self.scrollendtrapped) clearTimeout(self.scrollendtrapped);\r\n          self.scrollendtrapped = setTimeout(self.onScrollTransitionEnd, ms); // simulate transitionend event\r\n        }\r\n\r\n        self.setScrollTop(self.newscrolly);\r\n        self.setScrollLeft(self.newscrollx);\r\n\r\n      };\r\n\r\n      this.cancelScroll = function () {\r\n        if (!self.scrollendtrapped) return true;\r\n        var py = self.getScrollTop();\r\n        var px = self.getScrollLeft();\r\n        self.scrollrunning = false;\r\n        if (!cap.transitionend) clearTimeout(cap.transitionend);\r\n        self.scrollendtrapped = false;\r\n        self.resetTransition();\r\n        self.setScrollTop(py); // fire event onscroll\r\n        if (self.railh) self.setScrollLeft(px);\r\n        if (self.timerscroll && self.timerscroll.tm) clearInterval(self.timerscroll.tm);\r\n        self.timerscroll = false;\r\n\r\n        self.cursorfreezed = false;\r\n\r\n        self.cursorupdate.stop();\r\n        self.showCursor(py, px);\r\n        return self;\r\n      };\r\n\r\n      this.onScrollTransitionEnd = function () {\r\n\r\n        if (!self.scrollendtrapped) return;\r\n\r\n        var py = self.getScrollTop();\r\n        var px = self.getScrollLeft();\r\n\r\n        if (py < 0) py = 0;\r\n        else if (py > self.page.maxh) py = self.page.maxh;\r\n        if (px < 0) px = 0;\r\n        else if (px > self.page.maxw) px = self.page.maxw;\r\n        if ((py != self.newscrolly) || (px != self.newscrollx)) return self.doScrollPos(px, py, opt.snapbackspeed);\r\n\r\n        if (self.scrollrunning) self.triggerScrollEnd();\r\n        self.scrollrunning = false;\r\n\r\n        self.scrollendtrapped = false;\r\n        self.resetTransition();\r\n        self.timerscroll = false;\r\n        self.setScrollTop(py); // fire event onscroll        \r\n        if (self.railh) self.setScrollLeft(px); // fire event onscroll left\r\n\r\n        self.cursorupdate.stop();\r\n        self.noticeCursor(false, py, px);\r\n\r\n        self.cursorfreezed = false;\r\n\r\n      };\r\n\r\n    } else {\r\n\r\n      this.doScrollLeft = function (x, spd) { //no-trans\r\n        var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n\r\n      this.doScrollTop = function (y, spd) { //no-trans\r\n        var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();\r\n        self.doScrollPos(x, y, spd);\r\n      };\r\n\r\n      this.doScrollPos = function (x, y, spd) { //no-trans\r\n\r\n        var py = self.getScrollTop();\r\n        var px = self.getScrollLeft();\r\n\r\n        if (((self.newscrolly - py) * (y - py) < 0) || ((self.newscrollx - px) * (x - px) < 0)) self.cancelScroll(); //inverted movement detection\r\n\r\n        var clipped = false;\r\n\r\n        if (!self.bouncescroll || !self.rail.visibility) {\r\n          if (y < 0) {\r\n            y = 0;\r\n            clipped = true;\r\n          } else if (y > self.page.maxh) {\r\n            y = self.page.maxh;\r\n            clipped = true;\r\n          }\r\n        }\r\n        if (!self.bouncescroll || !self.railh.visibility) {\r\n          if (x < 0) {\r\n            x = 0;\r\n            clipped = true;\r\n          } else if (x > self.page.maxw) {\r\n            x = self.page.maxw;\r\n            clipped = true;\r\n          }\r\n        }\r\n\r\n        if (self.scrollrunning && (self.newscrolly === y) && (self.newscrollx === x)) return true;\r\n\r\n        self.newscrolly = y;\r\n        self.newscrollx = x;\r\n\r\n        self.dst = {};\r\n        self.dst.x = x - px;\r\n        self.dst.y = y - py;\r\n        self.dst.px = px;\r\n        self.dst.py = py;\r\n\r\n        var dd = Math.sqrt((self.dst.x * self.dst.x) + (self.dst.y * self.dst.y)) | 0;\r\n        var ms = self.getTransitionSpeed(dd);\r\n\r\n        self.bzscroll = {};\r\n\r\n        var p3 = (clipped) ? 1 : 0.58;\r\n        self.bzscroll.x = new BezierClass(px, self.newscrollx, ms, 0, 0, p3, 1);\r\n        self.bzscroll.y = new BezierClass(py, self.newscrolly, ms, 0, 0, p3, 1);\r\n\r\n        var loopid = now();\r\n\r\n        var loop = function () {\r\n\r\n          if (!self.scrollrunning) return;\r\n          var x = self.bzscroll.y.getPos();\r\n\r\n          self.setScrollLeft(self.bzscroll.x.getNow());\r\n          self.setScrollTop(self.bzscroll.y.getNow());\r\n\r\n          if (x <= 1) {\r\n            self.timer = setAnimationFrame(loop);\r\n          } else {\r\n            self.scrollrunning = false;\r\n            self.timer = 0;\r\n            self.triggerScrollEnd();\r\n          }\r\n\r\n        };\r\n\r\n        if (!self.scrollrunning) {\r\n          self.triggerScrollStart(px, py, x, y, ms);\r\n          self.scrollrunning = true;\r\n          self.timer = setAnimationFrame(loop);\r\n        }\r\n\r\n      };\r\n\r\n      this.cancelScroll = function () {\r\n        if (self.timer) clearAnimationFrame(self.timer);\r\n        self.timer = 0;\r\n        self.bzscroll = false;\r\n        self.scrollrunning = false;\r\n        return self;\r\n      };\r\n\r\n    }\r\n\r\n    this.doScrollBy = function (stp, relative) {\r\n      doScrollRelative(0, stp);\r\n    };\r\n\r\n    this.doScrollLeftBy = function (stp, relative) {\r\n      doScrollRelative(stp, 0);\r\n    };\r\n\r\n    this.doScrollTo = function (pos, relative) {\r\n      var ny = (relative) ? Math.round(pos * self.scrollratio.y) : pos;\r\n      if (ny < 0) ny = 0;\r\n      else if (ny > self.page.maxh) ny = self.page.maxh;\r\n      self.cursorfreezed = false;\r\n      self.doScrollTop(pos);\r\n    };\r\n\r\n    this.checkContentSize = function () {\r\n      var pg = self.getContentSize();\r\n      if ((pg.h != self.page.h) || (pg.w != self.page.w)) self.resize(false, pg);\r\n    };\r\n\r\n    self.onscroll = function (e) {\r\n      if (self.rail.drag) return;\r\n      if (!self.cursorfreezed) {\r\n        self.synched('scroll', function () {\r\n          self.scroll.y = Math.round(self.getScrollTop() / self.scrollratio.y);\r\n          if (self.railh) self.scroll.x = Math.round(self.getScrollLeft() / self.scrollratio.x);\r\n          self.noticeCursor();\r\n        });\r\n      }\r\n    };\r\n    self.bind(self.docscroll, \"scroll\", self.onscroll);\r\n\r\n    this.doZoomIn = function (e) {\r\n      if (self.zoomactive) return;\r\n      self.zoomactive = true;\r\n\r\n      self.zoomrestore = {\r\n        style: {}\r\n      };\r\n      var lst = ['position', 'top', 'left', 'zIndex', 'backgroundColor', 'marginTop', 'marginBottom', 'marginLeft', 'marginRight'];\r\n      var win = self.win[0].style;\r\n      for (var a in lst) {\r\n        var pp = lst[a];\r\n        self.zoomrestore.style[pp] = (win[pp] !== undefined) ? win[pp] : '';\r\n      }\r\n\r\n      self.zoomrestore.style.width = self.win.css('width');\r\n      self.zoomrestore.style.height = self.win.css('height');\r\n\r\n      self.zoomrestore.padding = {\r\n        w: self.win.outerWidth() - self.win.width(),\r\n        h: self.win.outerHeight() - self.win.height()\r\n      };\r\n\r\n      if (cap.isios4) {\r\n        self.zoomrestore.scrollTop = $window.scrollTop();\r\n        $window.scrollTop(0);\r\n      }\r\n\r\n      self.win.css({\r\n        position: (cap.isios4) ? \"absolute\" : \"fixed\",\r\n        top: 0,\r\n        left: 0,\r\n        zIndex: globalmaxzindex + 100,\r\n        margin: 0\r\n      });\r\n      var bkg = self.win.css(\"backgroundColor\");\r\n      if (\"\" === bkg || /transparent|rgba\\(0, 0, 0, 0\\)|rgba\\(0,0,0,0\\)/.test(bkg)) self.win.css(\"backgroundColor\", \"#fff\");\r\n      self.rail.css({\r\n        zIndex: globalmaxzindex + 101\r\n      });\r\n      self.zoom.css({\r\n        zIndex: globalmaxzindex + 102\r\n      });\r\n      self.zoom.css('backgroundPosition', '0 -18px');\r\n      self.resizeZoom();\r\n\r\n      if (self.onzoomin) self.onzoomin.call(self);\r\n\r\n      return self.cancelEvent(e);\r\n    };\r\n\r\n    this.doZoomOut = function (e) {\r\n      if (!self.zoomactive) return;\r\n      self.zoomactive = false;\r\n\r\n      self.win.css(\"margin\", \"\");\r\n      self.win.css(self.zoomrestore.style);\r\n\r\n      if (cap.isios4) {\r\n        $window.scrollTop(self.zoomrestore.scrollTop);\r\n      }\r\n\r\n      self.rail.css({\r\n        \"z-index\": self.zindex\r\n      });\r\n      self.zoom.css({\r\n        \"z-index\": self.zindex\r\n      });\r\n      self.zoomrestore = false;\r\n      self.zoom.css('backgroundPosition', '0 0');\r\n      self.onResize();\r\n\r\n      if (self.onzoomout) self.onzoomout.call(self);\r\n\r\n      return self.cancelEvent(e);\r\n    };\r\n\r\n    this.doZoom = function (e) {\r\n      return (self.zoomactive) ? self.doZoomOut(e) : self.doZoomIn(e);\r\n    };\r\n\r\n    this.resizeZoom = function () {\r\n      if (!self.zoomactive) return;\r\n\r\n      var py = self.getScrollTop(); //preserve scrolling position\r\n      self.win.css({\r\n        width: $window.width() - self.zoomrestore.padding.w + \"px\",\r\n        height: $window.height() - self.zoomrestore.padding.h + \"px\"\r\n      });\r\n      self.onResize();\r\n\r\n      self.setScrollTop(Math.min(self.page.maxh, py));\r\n    };\r\n\r\n    this.init();\r\n\r\n    $.nicescroll.push(this);\r\n\r\n  };\r\n\r\n  // Inspired by the work of Kin Blas\r\n  // http://webpro.host.adobe.com/people/jblas/momentum/includes/jquery.momentum.0.7.js  \r\n  var ScrollMomentumClass2D = function (nc) {\r\n    var self = this;\r\n    this.nc = nc;\r\n\r\n    this.lastx = 0;\r\n    this.lasty = 0;\r\n    this.speedx = 0;\r\n    this.speedy = 0;\r\n    this.lasttime = 0;\r\n    this.steptime = 0;\r\n    this.snapx = false;\r\n    this.snapy = false;\r\n    this.demulx = 0;\r\n    this.demuly = 0;\r\n\r\n    this.lastscrollx = -1;\r\n    this.lastscrolly = -1;\r\n\r\n    this.chkx = 0;\r\n    this.chky = 0;\r\n\r\n    this.timer = 0;\r\n\r\n    this.reset = function (px, py) {\r\n      self.stop();\r\n      self.steptime = 0;\r\n      self.lasttime = now();\r\n      self.speedx = 0;\r\n      self.speedy = 0;\r\n      self.lastx = px;\r\n      self.lasty = py;\r\n      self.lastscrollx = -1;\r\n      self.lastscrolly = -1;\r\n    };\r\n\r\n    this.update = function (px, py) {\r\n      var tm = now();\r\n      self.steptime = tm - self.lasttime;\r\n      self.lasttime = tm;\r\n      var dy = py - self.lasty;\r\n      var dx = px - self.lastx;\r\n      var sy = self.nc.getScrollTop();\r\n      var sx = self.nc.getScrollLeft();\r\n      var newy = sy + dy;\r\n      var newx = sx + dx;\r\n      self.snapx = (newx < 0) || (newx > self.nc.page.maxw);\r\n      self.snapy = (newy < 0) || (newy > self.nc.page.maxh);\r\n      self.speedx = dx;\r\n      self.speedy = dy;\r\n      self.lastx = px;\r\n      self.lasty = py;\r\n    };\r\n\r\n    this.stop = function () {\r\n      self.nc.unsynched(\"domomentum2d\");\r\n      if (self.timer) clearTimeout(self.timer);\r\n      self.timer = 0;\r\n      self.lastscrollx = -1;\r\n      self.lastscrolly = -1;\r\n    };\r\n\r\n    this.doSnapy = function (nx, ny) {\r\n      var snap = false;\r\n\r\n      if (ny < 0) {\r\n        ny = 0;\r\n        snap = true;\r\n      } else if (ny > self.nc.page.maxh) {\r\n        ny = self.nc.page.maxh;\r\n        snap = true;\r\n      }\r\n\r\n      if (nx < 0) {\r\n        nx = 0;\r\n        snap = true;\r\n      } else if (nx > self.nc.page.maxw) {\r\n        nx = self.nc.page.maxw;\r\n        snap = true;\r\n      }\r\n\r\n      (snap) ? self.nc.doScrollPos(nx, ny, self.nc.opt.snapbackspeed) : self.nc.triggerScrollEnd();\r\n    };\r\n\r\n    this.doMomentum = function (gp) {\r\n      var t = now();\r\n      var l = (gp) ? t + gp : self.lasttime;\r\n\r\n      var sl = self.nc.getScrollLeft();\r\n      var st = self.nc.getScrollTop();\r\n\r\n      var pageh = self.nc.page.maxh;\r\n      var pagew = self.nc.page.maxw;\r\n\r\n      self.speedx = (pagew > 0) ? Math.min(60, self.speedx) : 0;\r\n      self.speedy = (pageh > 0) ? Math.min(60, self.speedy) : 0;\r\n\r\n      var chk = l && (t - l) <= 60;\r\n\r\n      if ((st < 0) || (st > pageh) || (sl < 0) || (sl > pagew)) chk = false;\r\n\r\n      var sy = (self.speedy && chk) ? self.speedy : false;\r\n      var sx = (self.speedx && chk) ? self.speedx : false;\r\n\r\n      if (sy || sx) {\r\n        var tm = Math.max(16, self.steptime); //timeout granularity\r\n\r\n        if (tm > 50) { // do smooth\r\n          var xm = tm / 50;\r\n          self.speedx *= xm;\r\n          self.speedy *= xm;\r\n          tm = 50;\r\n        }\r\n\r\n        self.demulxy = 0;\r\n\r\n        self.lastscrollx = self.nc.getScrollLeft();\r\n        self.chkx = self.lastscrollx;\r\n        self.lastscrolly = self.nc.getScrollTop();\r\n        self.chky = self.lastscrolly;\r\n\r\n        var nx = self.lastscrollx;\r\n        var ny = self.lastscrolly;\r\n\r\n        var onscroll = function () {\r\n          var df = ((now() - t) > 600) ? 0.04 : 0.02;\r\n\r\n          if (self.speedx) {\r\n            nx = Math.floor(self.lastscrollx - (self.speedx * (1 - self.demulxy)));\r\n            self.lastscrollx = nx;\r\n            if ((nx < 0) || (nx > pagew)) df = 0.10;\r\n          }\r\n\r\n          if (self.speedy) {\r\n            ny = Math.floor(self.lastscrolly - (self.speedy * (1 - self.demulxy)));\r\n            self.lastscrolly = ny;\r\n            if ((ny < 0) || (ny > pageh)) df = 0.10;\r\n          }\r\n\r\n          self.demulxy = Math.min(1, self.demulxy + df);\r\n\r\n          self.nc.synched(\"domomentum2d\", function () {\r\n\r\n            if (self.speedx) {\r\n              var scx = self.nc.getScrollLeft();\r\n              //              if (scx != self.chkx) self.stop();\r\n              self.chkx = nx;\r\n              self.nc.setScrollLeft(nx);\r\n            }\r\n\r\n            if (self.speedy) {\r\n              var scy = self.nc.getScrollTop();\r\n              //              if (scy != self.chky) self.stop();\r\n              self.chky = ny;\r\n              self.nc.setScrollTop(ny);\r\n            }\r\n\r\n            if (!self.timer) {\r\n              self.nc.hideCursor();\r\n              self.doSnapy(nx, ny);\r\n            }\r\n\r\n          });\r\n\r\n          if (self.demulxy < 1) {\r\n            self.timer = setTimeout(onscroll, tm);\r\n          } else {\r\n            self.stop();\r\n            self.nc.hideCursor();\r\n            self.doSnapy(nx, ny);\r\n          }\r\n        };\r\n\r\n        onscroll();\r\n\r\n      } else {\r\n        self.doSnapy(self.nc.getScrollLeft(), self.nc.getScrollTop());\r\n      }\r\n\r\n    };\r\n\r\n  };\r\n\r\n\r\n  // override jQuery scrollTop\r\n  var _scrollTop = jQuery.fn.scrollTop; // preserve original function\r\n\r\n  jQuery.cssHooks.pageYOffset = {\r\n    get: function (elem, computed, extra) {\r\n      var nice = $.data(elem, '__nicescroll') || false;\r\n      return (nice && nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(elem);\r\n    },\r\n    set: function (elem, value) {\r\n      var nice = $.data(elem, '__nicescroll') || false;\r\n      (nice && nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call(elem, value);\r\n      return this;\r\n    }\r\n  };\r\n\r\n  jQuery.fn.scrollTop = function (value) {\r\n    if (value === undefined) {\r\n      var nice = (this[0]) ? $.data(this[0], '__nicescroll') || false : false;\r\n      return (nice && nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(this);\r\n    } else {\r\n      return this.each(function () {\r\n        var nice = $.data(this, '__nicescroll') || false;\r\n        (nice && nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call($(this), value);\r\n      });\r\n    }\r\n  };\r\n\r\n  // override jQuery scrollLeft\r\n  var _scrollLeft = jQuery.fn.scrollLeft; // preserve original function\r\n\r\n  $.cssHooks.pageXOffset = {\r\n    get: function (elem, computed, extra) {\r\n      var nice = $.data(elem, '__nicescroll') || false;\r\n      return (nice && nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(elem);\r\n    },\r\n    set: function (elem, value) {\r\n      var nice = $.data(elem, '__nicescroll') || false;\r\n      (nice && nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call(elem, value);\r\n      return this;\r\n    }\r\n  };\r\n\r\n  jQuery.fn.scrollLeft = function (value) {\r\n    if (value === undefined) {\r\n      var nice = (this[0]) ? $.data(this[0], '__nicescroll') || false : false;\r\n      return (nice && nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(this);\r\n    } else {\r\n      return this.each(function () {\r\n        var nice = $.data(this, '__nicescroll') || false;\r\n        (nice && nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call($(this), value);\r\n      });\r\n    }\r\n  };\r\n\r\n  var NiceScrollArray = function (doms) {\r\n    var self = this;\r\n    this.length = 0;\r\n    this.name = \"nicescrollarray\";\r\n\r\n    this.each = function (fn) {\r\n      $.each(self, fn);\r\n      return self;\r\n    };\r\n\r\n    this.push = function (nice) {\r\n      self[self.length] = nice;\r\n      self.length++;\r\n    };\r\n\r\n    this.eq = function (idx) {\r\n      return self[idx];\r\n    };\r\n\r\n    if (doms) {\r\n      for (var a = 0; a < doms.length; a++) {\r\n        var nice = $.data(doms[a], '__nicescroll') || false;\r\n        if (nice) {\r\n          this[this.length] = nice;\r\n          this.length++;\r\n        }\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  function mplex(el, lst, fn) {\r\n    for (var a = 0, l = lst.length; a < l; a++) fn(el, lst[a]);\r\n  }\r\n  mplex(\r\n    NiceScrollArray.prototype, ['show', 'hide', 'toggle', 'onResize', 'resize', 'remove', 'stop', 'doScrollPos'],\r\n    function (e, n) {\r\n      e[n] = function () {\r\n        var args = arguments;\r\n        return this.each(function () {\r\n          this[n].apply(this, args);\r\n        });\r\n      };\r\n    }\r\n  );\r\n\r\n  jQuery.fn.getNiceScroll = function (index) {\r\n    if (index === undefined) {\r\n      return new NiceScrollArray(this);\r\n    } else {\r\n      return this[index] && $.data(this[index], '__nicescroll') || false;\r\n    }\r\n  };\r\n\r\n  var pseudos = jQuery.expr.pseudos || jQuery.expr[':'];  // jQuery 3 migration\r\n  pseudos.nicescroll = function (a) {\r\n    return $.data(a, '__nicescroll') !== undefined;\r\n  };\r\n\r\n  $.fn.niceScroll = function (wrapper, _opt) {\r\n    if (_opt === undefined && typeof wrapper == \"object\" && !(\"jquery\" in wrapper)) {\r\n      _opt = wrapper;\r\n      wrapper = false;\r\n    }\r\n\r\n    var ret = new NiceScrollArray();\r\n\r\n    this.each(function () {\r\n      var $this = $(this);\r\n\r\n      var opt = $.extend({}, _opt); // cloning\r\n\r\n      if (wrapper || false) {\r\n        var wrp = $(wrapper);\r\n        opt.doc = (wrp.length > 1) ? $(wrapper, $this) : wrp;\r\n        opt.win = $this;\r\n      }\r\n      var docundef = !(\"doc\" in opt);\r\n      if (!docundef && !(\"win\" in opt)) opt.win = $this;\r\n\r\n      var nice = $this.data('__nicescroll') || false;\r\n      if (!nice) {\r\n        opt.doc = opt.doc || $this;\r\n        nice = new NiceScrollClass(opt, $this);\r\n        $this.data('__nicescroll', nice);\r\n      }\r\n      ret.push(nice);\r\n    });\r\n\r\n    return (ret.length === 1) ? ret[0] : ret;\r\n  };\r\n\r\n  _win.NiceScroll = {\r\n    getjQuery: function () {\r\n      return jQuery;\r\n    }\r\n  };\r\n\r\n  if (!$.nicescroll) {\r\n    $.nicescroll = new NiceScrollArray();\r\n    $.nicescroll.options = _globaloptions;\r\n  }\r\n\r\n}));"]}