{"version":3,"sources":["webpack:///./node_modules/ion-rangeslider/js/ion.rangeSlider.js"],"names":["factory","_typeof","Symbol","iterator","obj","constructor","prototype","$","document","window","navigator","undefined","n","r","plugin_count","is_old_ie","userAgent","search","exec","toString","split","addClass","Function","bind","that","target","this","slice","TypeError","args","call","arguments","bound","F","self","result","apply","concat","Object","Array","indexOf","searchElement","fromIndex","k","O","len","length","Math","abs","Infinity","max","IonRangeSlider","input","options","VERSION","current_plugin","calc_count","update_tm","old_from","old_to","old_min_interval","raf_id","dragging","force_redraw","no_diapason","has_tab_index","is_key","is_update","is_start","is_finish","is_active","is_resize","is_click","$cache","win","body","cont","rs","min","from","to","single","bar","line","s_single","s_from","s_to","shad_single","shad_from","shad_to","edge","grid","grid_labels","coords","x_gap","x_pointer","w_rs","w_rs_old","w_handle","p_gap","p_gap_left","p_gap_right","p_step","p_pointer","p_handle","p_single_fake","p_single_real","p_from_fake","p_from_real","p_to_fake","p_to_real","p_bar_x","p_bar_w","grid_gap","big_num","big","big_w","big_p","big_x","labels","w_min","w_max","w_from","w_to","w_single","p_min","p_max","p_from_left","p_to_left","p_single_left","config","config_from_data","prop","$inp","val","skin","type","step","min_interval","max_interval","drag_interval","values","p_values","from_fixed","from_min","from_max","from_shadow","to_fixed","to_min","to_max","to_shadow","prettify_enabled","prettify_separator","prettify","force_edges","keyboard","grid_margin","grid_num","grid_snap","hide_min_max","hide_from_to","prefix","postfix","max_postfix","decorate_both","values_separator","input_values_separator","disable","block","extra_classes","scope","onStart","onChange","onFinish","onUpdate","nodeName","console","warn","data","hasOwnProperty","extend","update_check","validate","slider","from_percent","from_value","to_percent","to_value","init","convertToPercent","toggleInput","append","setMinMax","calc","callOnUpdate","callOnStart","updateScene","container_html","before","prev","html","find","style","visibility","setTopHandler","display","appendGrid","appendDisableMask","disabled","removeDisableMask","bindEvents","cursor","changeLevel","toFixed","removeClass","remove","off","cancelAnimationFrame","on","pointerMove","pointerUp","pointerClick","pointerFocus","pointerDown","key","e","x","$handle","offset","left","width","preventDefault","pageX","originalEvent","touches","restoreOriginalMinInterval","contains","callOnFinish","button","setTempMinInterval","calcPointerPercent","trigger","altKey","ctrlKey","shiftKey","metaKey","which","moveByKey","right","p","decorate","min_pretty","_prettify","max_pretty","outerWidth","interval","update","calcHandlePercent","handle_x","getHandleX","chooseHandle","w","f","t","checkDiapason","convertToFakePercent","convertToRealPercent","calcWithStep","checkMinInterval","checkMaxInterval","real_x","full","half","new_from","new_to","convertToValue","from_pretty","to_pretty","calcMinMax","calcLabels","isNaN","fake","real","checkEdges","clearTimeout","drawHandles","requestAnimationFrame","setTimeout","drawLabels","calcGridMargin","calcGridLabels","drawShadow","writeToInput","callOnChange","text_single","text_from","text_to","values_num","single_left","to_left","o","c","is_from_min","is_from_max","is_to_min","is_to_max","toggleClass","removeProp","value","no_min","percent","diapason","one_percent","min_length","max_length","min_decimals","max_decimals","avg_decimals","number","string","rounded","round","p_current","p_next","current","next","p_num","num","replace","i","v","vl","push","original","decorated","updateFrom","updateTo","updateResult","z","local_small_max","small_p","total","small_max","ceil","cacheGridLabels","$label","label","start","finish","calcGridCollision","Number","POSITIVE_INFINITY","marginLeft","next_i","reset","destroy","fn","ionRangeSlider","each","lastTime","vendors","callback","element","currTime","Date","getTime","timeToCall","id","jQuery","exports"],"mappings":"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","file":"js/vendors~ion-rangeslider-593033bbcf56f175a112.chunk.js","sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n// Ion.RangeSlider\n// version 2.3.1 Build: 382\n// © Denis Ineshin, 2019\n// https://github.com/IonDen\n//\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\n//\n// Released under MIT licence:\n// http://ionden.com/a/plugins/licence-en.html\n// =====================================================================================================================\n\n;\n(function (factory) {\n  if ((typeof jQuery === 'undefined' || !jQuery) && typeof define === \"function\" && define.amd) {\n    define([\"jquery\"], function (jQuery) {\n      return factory(jQuery, document, window, navigator);\n    });\n  } else if ((typeof jQuery === 'undefined' || !jQuery) && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\") {\n    factory(require(\"jquery\"), document, window, navigator);\n  } else {\n    factory(jQuery, document, window, navigator);\n  }\n})(function ($, document, window, navigator, undefined) {\n  \"use strict\";\n\n  // =================================================================================================================\n  // Service\n  var plugin_count = 0;\n\n  // IE8 fix\n  var is_old_ie = function () {\n    var n = navigator.userAgent,\n      r = /msie\\s\\d+/i,\n      v;\n    if (n.search(r) > 0) {\n      v = r.exec(n).toString();\n      v = v.split(\" \")[1];\n      if (v < 9) {\n        $(\"html\").addClass(\"lt-ie9\");\n        return true;\n      }\n    }\n    return false;\n  }();\n  if (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) {\n      var target = this;\n      var slice = [].slice;\n      if (typeof target != \"function\") {\n        throw new TypeError();\n      }\n      var args = slice.call(arguments, 1),\n        bound = function bound() {\n          if (this instanceof bound) {\n            var F = function F() {};\n            F.prototype = target.prototype;\n            var self = new F();\n            var result = target.apply(self, args.concat(slice.call(arguments)));\n            if (Object(result) === result) {\n              return result;\n            }\n            return self;\n          } else {\n            return target.apply(that, args.concat(slice.call(arguments)));\n          }\n        };\n      return bound;\n    };\n  }\n  if (!Array.prototype.indexOf) {\n    Array.prototype.indexOf = function (searchElement, fromIndex) {\n      var k;\n      if (this == null) {\n        throw new TypeError('\"this\" is null or not defined');\n      }\n      var O = Object(this);\n      var len = O.length >>> 0;\n      if (len === 0) {\n        return -1;\n      }\n      var n = +fromIndex || 0;\n      if (Math.abs(n) === Infinity) {\n        n = 0;\n      }\n      if (n >= len) {\n        return -1;\n      }\n      k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n      while (k < len) {\n        if (k in O && O[k] === searchElement) {\n          return k;\n        }\n        k++;\n      }\n      return -1;\n    };\n  }\n\n  // =================================================================================================================\n  // Template\n\n  var base_html = '<span class=\"irs\">' + '<span class=\"irs-line\" tabindex=\"0\"></span>' + '<span class=\"irs-min\">0</span><span class=\"irs-max\">1</span>' + '<span class=\"irs-from\">0</span><span class=\"irs-to\">0</span><span class=\"irs-single\">0</span>' + '</span>' + '<span class=\"irs-grid\"></span>';\n  var single_html = '<span class=\"irs-bar irs-bar--single\"></span>' + '<span class=\"irs-shadow shadow-single\"></span>' + '<span class=\"irs-handle single\"><i></i><i></i><i></i></span>';\n  var double_html = '<span class=\"irs-bar\"></span>' + '<span class=\"irs-shadow shadow-from\"></span>' + '<span class=\"irs-shadow shadow-to\"></span>' + '<span class=\"irs-handle from\"><i></i><i></i><i></i></span>' + '<span class=\"irs-handle to\"><i></i><i></i><i></i></span>';\n  var disable_html = '<span class=\"irs-disable-mask\"></span>';\n\n  // =================================================================================================================\n  // Core\n\n  /**\n   * Main plugin constructor\n   *\n   * @param input {Object} link to base input element\n   * @param options {Object} slider config\n   * @param plugin_count {Number}\n   * @constructor\n   */\n  var IonRangeSlider = function IonRangeSlider(input, options, plugin_count) {\n    this.VERSION = \"2.3.1\";\n    this.input = input;\n    this.plugin_count = plugin_count;\n    this.current_plugin = 0;\n    this.calc_count = 0;\n    this.update_tm = 0;\n    this.old_from = 0;\n    this.old_to = 0;\n    this.old_min_interval = null;\n    this.raf_id = null;\n    this.dragging = false;\n    this.force_redraw = false;\n    this.no_diapason = false;\n    this.has_tab_index = true;\n    this.is_key = false;\n    this.is_update = false;\n    this.is_start = true;\n    this.is_finish = false;\n    this.is_active = false;\n    this.is_resize = false;\n    this.is_click = false;\n    options = options || {};\n\n    // cache for links to all DOM elements\n    this.$cache = {\n      win: $(window),\n      body: $(document.body),\n      input: $(input),\n      cont: null,\n      rs: null,\n      min: null,\n      max: null,\n      from: null,\n      to: null,\n      single: null,\n      bar: null,\n      line: null,\n      s_single: null,\n      s_from: null,\n      s_to: null,\n      shad_single: null,\n      shad_from: null,\n      shad_to: null,\n      edge: null,\n      grid: null,\n      grid_labels: []\n    };\n\n    // storage for measure variables\n    this.coords = {\n      // left\n      x_gap: 0,\n      x_pointer: 0,\n      // width\n      w_rs: 0,\n      w_rs_old: 0,\n      w_handle: 0,\n      // percents\n      p_gap: 0,\n      p_gap_left: 0,\n      p_gap_right: 0,\n      p_step: 0,\n      p_pointer: 0,\n      p_handle: 0,\n      p_single_fake: 0,\n      p_single_real: 0,\n      p_from_fake: 0,\n      p_from_real: 0,\n      p_to_fake: 0,\n      p_to_real: 0,\n      p_bar_x: 0,\n      p_bar_w: 0,\n      // grid\n      grid_gap: 0,\n      big_num: 0,\n      big: [],\n      big_w: [],\n      big_p: [],\n      big_x: []\n    };\n\n    // storage for labels measure variables\n    this.labels = {\n      // width\n      w_min: 0,\n      w_max: 0,\n      w_from: 0,\n      w_to: 0,\n      w_single: 0,\n      // percents\n      p_min: 0,\n      p_max: 0,\n      p_from_fake: 0,\n      p_from_left: 0,\n      p_to_fake: 0,\n      p_to_left: 0,\n      p_single_fake: 0,\n      p_single_left: 0\n    };\n\n    /**\n     * get and validate config\n     */\n    var $inp = this.$cache.input,\n      val = $inp.prop(\"value\"),\n      config,\n      config_from_data,\n      prop;\n\n    // default config\n    config = {\n      skin: \"flat\",\n      type: \"single\",\n      min: 10,\n      max: 100,\n      from: null,\n      to: null,\n      step: 1,\n      min_interval: 0,\n      max_interval: 0,\n      drag_interval: false,\n      values: [],\n      p_values: [],\n      from_fixed: false,\n      from_min: null,\n      from_max: null,\n      from_shadow: false,\n      to_fixed: false,\n      to_min: null,\n      to_max: null,\n      to_shadow: false,\n      prettify_enabled: true,\n      prettify_separator: \" \",\n      prettify: null,\n      force_edges: false,\n      keyboard: true,\n      grid: false,\n      grid_margin: true,\n      grid_num: 4,\n      grid_snap: false,\n      hide_min_max: false,\n      hide_from_to: false,\n      prefix: \"\",\n      postfix: \"\",\n      max_postfix: \"\",\n      decorate_both: true,\n      values_separator: \" — \",\n      input_values_separator: \";\",\n      disable: false,\n      block: false,\n      extra_classes: \"\",\n      scope: null,\n      onStart: null,\n      onChange: null,\n      onFinish: null,\n      onUpdate: null\n    };\n\n    // check if base element is input\n    if ($inp[0].nodeName !== \"INPUT\") {\n      console && console.warn && console.warn(\"Base element should be <input>!\", $inp[0]);\n    }\n\n    // config from data-attributes extends js config\n    config_from_data = {\n      skin: $inp.data(\"skin\"),\n      type: $inp.data(\"type\"),\n      min: $inp.data(\"min\"),\n      max: $inp.data(\"max\"),\n      from: $inp.data(\"from\"),\n      to: $inp.data(\"to\"),\n      step: $inp.data(\"step\"),\n      min_interval: $inp.data(\"minInterval\"),\n      max_interval: $inp.data(\"maxInterval\"),\n      drag_interval: $inp.data(\"dragInterval\"),\n      values: $inp.data(\"values\"),\n      from_fixed: $inp.data(\"fromFixed\"),\n      from_min: $inp.data(\"fromMin\"),\n      from_max: $inp.data(\"fromMax\"),\n      from_shadow: $inp.data(\"fromShadow\"),\n      to_fixed: $inp.data(\"toFixed\"),\n      to_min: $inp.data(\"toMin\"),\n      to_max: $inp.data(\"toMax\"),\n      to_shadow: $inp.data(\"toShadow\"),\n      prettify_enabled: $inp.data(\"prettifyEnabled\"),\n      prettify_separator: $inp.data(\"prettifySeparator\"),\n      force_edges: $inp.data(\"forceEdges\"),\n      keyboard: $inp.data(\"keyboard\"),\n      grid: $inp.data(\"grid\"),\n      grid_margin: $inp.data(\"gridMargin\"),\n      grid_num: $inp.data(\"gridNum\"),\n      grid_snap: $inp.data(\"gridSnap\"),\n      hide_min_max: $inp.data(\"hideMinMax\"),\n      hide_from_to: $inp.data(\"hideFromTo\"),\n      prefix: $inp.data(\"prefix\"),\n      postfix: $inp.data(\"postfix\"),\n      max_postfix: $inp.data(\"maxPostfix\"),\n      decorate_both: $inp.data(\"decorateBoth\"),\n      values_separator: $inp.data(\"valuesSeparator\"),\n      input_values_separator: $inp.data(\"inputValuesSeparator\"),\n      disable: $inp.data(\"disable\"),\n      block: $inp.data(\"block\"),\n      extra_classes: $inp.data(\"extraClasses\")\n    };\n    config_from_data.values = config_from_data.values && config_from_data.values.split(\",\");\n    for (prop in config_from_data) {\n      if (config_from_data.hasOwnProperty(prop)) {\n        if (config_from_data[prop] === undefined || config_from_data[prop] === \"\") {\n          delete config_from_data[prop];\n        }\n      }\n    }\n\n    // input value extends default config\n    if (val !== undefined && val !== \"\") {\n      val = val.split(config_from_data.input_values_separator || options.input_values_separator || \";\");\n      if (val[0] && val[0] == +val[0]) {\n        val[0] = +val[0];\n      }\n      if (val[1] && val[1] == +val[1]) {\n        val[1] = +val[1];\n      }\n      if (options && options.values && options.values.length) {\n        config.from = val[0] && options.values.indexOf(val[0]);\n        config.to = val[1] && options.values.indexOf(val[1]);\n      } else {\n        config.from = val[0] && +val[0];\n        config.to = val[1] && +val[1];\n      }\n    }\n\n    // js config extends default config\n    $.extend(config, options);\n\n    // data config extends config\n    $.extend(config, config_from_data);\n    this.options = config;\n\n    // validate config, to be sure that all data types are correct\n    this.update_check = {};\n    this.validate();\n\n    // default result object, returned to callbacks\n    this.result = {\n      input: this.$cache.input,\n      slider: null,\n      min: this.options.min,\n      max: this.options.max,\n      from: this.options.from,\n      from_percent: 0,\n      from_value: null,\n      to: this.options.to,\n      to_percent: 0,\n      to_value: null\n    };\n    this.init();\n  };\n  IonRangeSlider.prototype = {\n    /**\n     * Starts or updates the plugin instance\n     *\n     * @param [is_update] {boolean}\n     */\n    init: function init(is_update) {\n      this.no_diapason = false;\n      this.coords.p_step = this.convertToPercent(this.options.step, true);\n      this.target = \"base\";\n      this.toggleInput();\n      this.append();\n      this.setMinMax();\n      if (is_update) {\n        this.force_redraw = true;\n        this.calc(true);\n\n        // callbacks called\n        this.callOnUpdate();\n      } else {\n        this.force_redraw = true;\n        this.calc(true);\n\n        // callbacks called\n        this.callOnStart();\n      }\n      this.updateScene();\n    },\n    /**\n     * Appends slider template to a DOM\n     */\n    append: function append() {\n      var container_html = '<span class=\"irs irs--' + this.options.skin + ' js-irs-' + this.plugin_count + ' ' + this.options.extra_classes + '\"></span>';\n      this.$cache.input.before(container_html);\n      this.$cache.input.prop(\"readonly\", true);\n      this.$cache.cont = this.$cache.input.prev();\n      this.result.slider = this.$cache.cont;\n      this.$cache.cont.html(base_html);\n      this.$cache.rs = this.$cache.cont.find(\".irs\");\n      this.$cache.min = this.$cache.cont.find(\".irs-min\");\n      this.$cache.max = this.$cache.cont.find(\".irs-max\");\n      this.$cache.from = this.$cache.cont.find(\".irs-from\");\n      this.$cache.to = this.$cache.cont.find(\".irs-to\");\n      this.$cache.single = this.$cache.cont.find(\".irs-single\");\n      this.$cache.line = this.$cache.cont.find(\".irs-line\");\n      this.$cache.grid = this.$cache.cont.find(\".irs-grid\");\n      if (this.options.type === \"single\") {\n        this.$cache.cont.append(single_html);\n        this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n        this.$cache.edge = this.$cache.cont.find(\".irs-bar-edge\");\n        this.$cache.s_single = this.$cache.cont.find(\".single\");\n        this.$cache.from[0].style.visibility = \"hidden\";\n        this.$cache.to[0].style.visibility = \"hidden\";\n        this.$cache.shad_single = this.$cache.cont.find(\".shadow-single\");\n      } else {\n        this.$cache.cont.append(double_html);\n        this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n        this.$cache.s_from = this.$cache.cont.find(\".from\");\n        this.$cache.s_to = this.$cache.cont.find(\".to\");\n        this.$cache.shad_from = this.$cache.cont.find(\".shadow-from\");\n        this.$cache.shad_to = this.$cache.cont.find(\".shadow-to\");\n        this.setTopHandler();\n      }\n      if (this.options.hide_from_to) {\n        this.$cache.from[0].style.display = \"none\";\n        this.$cache.to[0].style.display = \"none\";\n        this.$cache.single[0].style.display = \"none\";\n      }\n      this.appendGrid();\n      if (this.options.disable) {\n        this.appendDisableMask();\n        this.$cache.input[0].disabled = true;\n      } else {\n        this.$cache.input[0].disabled = false;\n        this.removeDisableMask();\n        this.bindEvents();\n      }\n\n      // block only if not disabled\n      if (!this.options.disable) {\n        if (this.options.block) {\n          this.appendDisableMask();\n        } else {\n          this.removeDisableMask();\n        }\n      }\n      if (this.options.drag_interval) {\n        this.$cache.bar[0].style.cursor = \"ew-resize\";\n      }\n    },\n    /**\n     * Determine which handler has a priority\n     * works only for double slider type\n     */\n    setTopHandler: function setTopHandler() {\n      var min = this.options.min,\n        max = this.options.max,\n        from = this.options.from,\n        to = this.options.to;\n      if (from > min && to === max) {\n        this.$cache.s_from.addClass(\"type_last\");\n      } else if (to < max) {\n        this.$cache.s_to.addClass(\"type_last\");\n      }\n    },\n    /**\n     * Determine which handles was clicked last\n     * and which handler should have hover effect\n     *\n     * @param target {String}\n     */\n    changeLevel: function changeLevel(target) {\n      switch (target) {\n        case \"single\":\n          this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake);\n          this.$cache.s_single.addClass(\"state_hover\");\n          break;\n        case \"from\":\n          this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n          this.$cache.s_from.addClass(\"state_hover\");\n          this.$cache.s_from.addClass(\"type_last\");\n          this.$cache.s_to.removeClass(\"type_last\");\n          break;\n        case \"to\":\n          this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake);\n          this.$cache.s_to.addClass(\"state_hover\");\n          this.$cache.s_to.addClass(\"type_last\");\n          this.$cache.s_from.removeClass(\"type_last\");\n          break;\n        case \"both\":\n          this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n          this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer);\n          this.$cache.s_to.removeClass(\"type_last\");\n          this.$cache.s_from.removeClass(\"type_last\");\n          break;\n      }\n    },\n    /**\n     * Then slider is disabled\n     * appends extra layer with opacity\n     */\n    appendDisableMask: function appendDisableMask() {\n      this.$cache.cont.append(disable_html);\n      this.$cache.cont.addClass(\"irs-disabled\");\n    },\n    /**\n     * Then slider is not disabled\n     * remove disable mask\n     */\n    removeDisableMask: function removeDisableMask() {\n      this.$cache.cont.remove(\".irs-disable-mask\");\n      this.$cache.cont.removeClass(\"irs-disabled\");\n    },\n    /**\n     * Remove slider instance\n     * and unbind all events\n     */\n    remove: function remove() {\n      this.$cache.cont.remove();\n      this.$cache.cont = null;\n      this.$cache.line.off(\"keydown.irs_\" + this.plugin_count);\n      this.$cache.body.off(\"touchmove.irs_\" + this.plugin_count);\n      this.$cache.body.off(\"mousemove.irs_\" + this.plugin_count);\n      this.$cache.win.off(\"touchend.irs_\" + this.plugin_count);\n      this.$cache.win.off(\"mouseup.irs_\" + this.plugin_count);\n      if (is_old_ie) {\n        this.$cache.body.off(\"mouseup.irs_\" + this.plugin_count);\n        this.$cache.body.off(\"mouseleave.irs_\" + this.plugin_count);\n      }\n      this.$cache.grid_labels = [];\n      this.coords.big = [];\n      this.coords.big_w = [];\n      this.coords.big_p = [];\n      this.coords.big_x = [];\n      cancelAnimationFrame(this.raf_id);\n    },\n    /**\n     * bind all slider events\n     */\n    bindEvents: function bindEvents() {\n      if (this.no_diapason) {\n        return;\n      }\n      this.$cache.body.on(\"touchmove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n      this.$cache.body.on(\"mousemove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n      this.$cache.win.on(\"touchend.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n      this.$cache.win.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n      this.$cache.line.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n      this.$cache.line.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n      this.$cache.line.on(\"focus.irs_\" + this.plugin_count, this.pointerFocus.bind(this));\n      if (this.options.drag_interval && this.options.type === \"double\") {\n        this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n        this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n      } else {\n        this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n      }\n      if (this.options.type === \"single\") {\n        this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n        this.$cache.s_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n        this.$cache.shad_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n        this.$cache.s_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n        this.$cache.edge.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.shad_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n      } else {\n        this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n        this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n        this.$cache.from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n        this.$cache.s_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n        this.$cache.to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n        this.$cache.s_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n        this.$cache.shad_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.shad_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n        this.$cache.s_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n        this.$cache.to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n        this.$cache.s_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n        this.$cache.shad_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n        this.$cache.shad_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n      }\n      if (this.options.keyboard) {\n        this.$cache.line.on(\"keydown.irs_\" + this.plugin_count, this.key.bind(this, \"keyboard\"));\n      }\n      if (is_old_ie) {\n        this.$cache.body.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n        this.$cache.body.on(\"mouseleave.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n      }\n    },\n    /**\n     * Focus with tabIndex\n     *\n     * @param e {Object} event object\n     */\n    pointerFocus: function pointerFocus(e) {\n      if (!this.target) {\n        var x;\n        var $handle;\n        if (this.options.type === \"single\") {\n          $handle = this.$cache.single;\n        } else {\n          $handle = this.$cache.from;\n        }\n        x = $handle.offset().left;\n        x += $handle.width() / 2 - 1;\n        this.pointerClick(\"single\", {\n          preventDefault: function preventDefault() {},\n          pageX: x\n        });\n      }\n    },\n    /**\n     * Mousemove or touchmove\n     * only for handlers\n     *\n     * @param e {Object} event object\n     */\n    pointerMove: function pointerMove(e) {\n      if (!this.dragging) {\n        return;\n      }\n      var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n      this.coords.x_pointer = x - this.coords.x_gap;\n      this.calc();\n    },\n    /**\n     * Mouseup or touchend\n     * only for handlers\n     *\n     * @param e {Object} event object\n     */\n    pointerUp: function pointerUp(e) {\n      if (this.current_plugin !== this.plugin_count) {\n        return;\n      }\n      if (this.is_active) {\n        this.is_active = false;\n      } else {\n        return;\n      }\n      this.$cache.cont.find(\".state_hover\").removeClass(\"state_hover\");\n      this.force_redraw = true;\n      if (is_old_ie) {\n        $(\"*\").prop(\"unselectable\", false);\n      }\n      this.updateScene();\n      this.restoreOriginalMinInterval();\n\n      // callbacks call\n      if ($.contains(this.$cache.cont[0], e.target) || this.dragging) {\n        this.callOnFinish();\n      }\n      this.dragging = false;\n    },\n    /**\n     * Mousedown or touchstart\n     * only for handlers\n     *\n     * @param target {String|null}\n     * @param e {Object} event object\n     */\n    pointerDown: function pointerDown(target, e) {\n      e.preventDefault();\n      var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n      if (e.button === 2) {\n        return;\n      }\n      if (target === \"both\") {\n        this.setTempMinInterval();\n      }\n      if (!target) {\n        target = this.target || \"from\";\n      }\n      this.current_plugin = this.plugin_count;\n      this.target = target;\n      this.is_active = true;\n      this.dragging = true;\n      this.coords.x_gap = this.$cache.rs.offset().left;\n      this.coords.x_pointer = x - this.coords.x_gap;\n      this.calcPointerPercent();\n      this.changeLevel(target);\n      if (is_old_ie) {\n        $(\"*\").prop(\"unselectable\", true);\n      }\n      this.$cache.line.trigger(\"focus\");\n      this.updateScene();\n    },\n    /**\n     * Mousedown or touchstart\n     * for other slider elements, like diapason line\n     *\n     * @param target {String}\n     * @param e {Object} event object\n     */\n    pointerClick: function pointerClick(target, e) {\n      e.preventDefault();\n      var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n      if (e.button === 2) {\n        return;\n      }\n      this.current_plugin = this.plugin_count;\n      this.target = target;\n      this.is_click = true;\n      this.coords.x_gap = this.$cache.rs.offset().left;\n      this.coords.x_pointer = +(x - this.coords.x_gap).toFixed();\n      this.force_redraw = true;\n      this.calc();\n      this.$cache.line.trigger(\"focus\");\n    },\n    /**\n     * Keyborard controls for focused slider\n     *\n     * @param target {String}\n     * @param e {Object} event object\n     * @returns {boolean|undefined}\n     */\n    key: function key(target, e) {\n      if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n        return;\n      }\n      switch (e.which) {\n        case 83: // W\n        case 65: // A\n        case 40: // DOWN\n        case 37:\n          // LEFT\n          e.preventDefault();\n          this.moveByKey(false);\n          break;\n        case 87: // S\n        case 68: // D\n        case 38: // UP\n        case 39:\n          // RIGHT\n          e.preventDefault();\n          this.moveByKey(true);\n          break;\n      }\n      return true;\n    },\n    /**\n     * Move by key\n     *\n     * @param right {boolean} direction to move\n     */\n    moveByKey: function moveByKey(right) {\n      var p = this.coords.p_pointer;\n      var p_step = (this.options.max - this.options.min) / 100;\n      p_step = this.options.step / p_step;\n      if (right) {\n        p += p_step;\n      } else {\n        p -= p_step;\n      }\n      this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p);\n      this.is_key = true;\n      this.calc();\n    },\n    /**\n     * Set visibility and content\n     * of Min and Max labels\n     */\n    setMinMax: function setMinMax() {\n      if (!this.options) {\n        return;\n      }\n      if (this.options.hide_min_max) {\n        this.$cache.min[0].style.display = \"none\";\n        this.$cache.max[0].style.display = \"none\";\n        return;\n      }\n      if (this.options.values.length) {\n        this.$cache.min.html(this.decorate(this.options.p_values[this.options.min]));\n        this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));\n      } else {\n        var min_pretty = this._prettify(this.options.min);\n        var max_pretty = this._prettify(this.options.max);\n        this.result.min_pretty = min_pretty;\n        this.result.max_pretty = max_pretty;\n        this.$cache.min.html(this.decorate(min_pretty, this.options.min));\n        this.$cache.max.html(this.decorate(max_pretty, this.options.max));\n      }\n      this.labels.w_min = this.$cache.min.outerWidth(false);\n      this.labels.w_max = this.$cache.max.outerWidth(false);\n    },\n    /**\n     * Then dragging interval, prevent interval collapsing\n     * using min_interval option\n     */\n    setTempMinInterval: function setTempMinInterval() {\n      var interval = this.result.to - this.result.from;\n      if (this.old_min_interval === null) {\n        this.old_min_interval = this.options.min_interval;\n      }\n      this.options.min_interval = interval;\n    },\n    /**\n     * Restore min_interval option to original\n     */\n    restoreOriginalMinInterval: function restoreOriginalMinInterval() {\n      if (this.old_min_interval !== null) {\n        this.options.min_interval = this.old_min_interval;\n        this.old_min_interval = null;\n      }\n    },\n    // =============================================================================================================\n    // Calculations\n\n    /**\n     * All calculations and measures start here\n     *\n     * @param update {boolean=}\n     */\n    calc: function calc(update) {\n      if (!this.options) {\n        return;\n      }\n      this.calc_count++;\n      if (this.calc_count === 10 || update) {\n        this.calc_count = 0;\n        this.coords.w_rs = this.$cache.rs.outerWidth(false);\n        this.calcHandlePercent();\n      }\n      if (!this.coords.w_rs) {\n        return;\n      }\n      this.calcPointerPercent();\n      var handle_x = this.getHandleX();\n      if (this.target === \"both\") {\n        this.coords.p_gap = 0;\n        handle_x = this.getHandleX();\n      }\n      if (this.target === \"click\") {\n        this.coords.p_gap = this.coords.p_handle / 2;\n        handle_x = this.getHandleX();\n        if (this.options.drag_interval) {\n          this.target = \"both_one\";\n        } else {\n          this.target = this.chooseHandle(handle_x);\n        }\n      }\n      switch (this.target) {\n        case \"base\":\n          var w = (this.options.max - this.options.min) / 100,\n            f = (this.result.from - this.options.min) / w,\n            t = (this.result.to - this.options.min) / w;\n          this.coords.p_single_real = this.toFixed(f);\n          this.coords.p_from_real = this.toFixed(f);\n          this.coords.p_to_real = this.toFixed(t);\n          this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n          this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n          this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n          this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n          this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n          this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n          this.target = null;\n          break;\n        case \"single\":\n          if (this.options.from_fixed) {\n            break;\n          }\n          this.coords.p_single_real = this.convertToRealPercent(handle_x);\n          this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real);\n          this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n          this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n          break;\n        case \"from\":\n          if (this.options.from_fixed) {\n            break;\n          }\n          this.coords.p_from_real = this.convertToRealPercent(handle_x);\n          this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n          if (this.coords.p_from_real > this.coords.p_to_real) {\n            this.coords.p_from_real = this.coords.p_to_real;\n          }\n          this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n          this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n          this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n          this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n          break;\n        case \"to\":\n          if (this.options.to_fixed) {\n            break;\n          }\n          this.coords.p_to_real = this.convertToRealPercent(handle_x);\n          this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n          if (this.coords.p_to_real < this.coords.p_from_real) {\n            this.coords.p_to_real = this.coords.p_from_real;\n          }\n          this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n          this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n          this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n          this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n          break;\n        case \"both\":\n          if (this.options.from_fixed || this.options.to_fixed) {\n            break;\n          }\n          handle_x = this.toFixed(handle_x + this.coords.p_handle * 0.001);\n          this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left;\n          this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n          this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n          this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n          this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n          this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right;\n          this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n          this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n          this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n          this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n          break;\n        case \"both_one\":\n          if (this.options.from_fixed || this.options.to_fixed) {\n            break;\n          }\n          var real_x = this.convertToRealPercent(handle_x),\n            from = this.result.from_percent,\n            to = this.result.to_percent,\n            full = to - from,\n            half = full / 2,\n            new_from = real_x - half,\n            new_to = real_x + half;\n          if (new_from < 0) {\n            new_from = 0;\n            new_to = new_from + full;\n          }\n          if (new_to > 100) {\n            new_to = 100;\n            new_from = new_to - full;\n          }\n          this.coords.p_from_real = this.calcWithStep(new_from);\n          this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n          this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n          this.coords.p_to_real = this.calcWithStep(new_to);\n          this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n          this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n          break;\n      }\n      if (this.options.type === \"single\") {\n        this.coords.p_bar_x = this.coords.p_handle / 2;\n        this.coords.p_bar_w = this.coords.p_single_fake;\n        this.result.from_percent = this.coords.p_single_real;\n        this.result.from = this.convertToValue(this.coords.p_single_real);\n        this.result.from_pretty = this._prettify(this.result.from);\n        if (this.options.values.length) {\n          this.result.from_value = this.options.values[this.result.from];\n        }\n      } else {\n        this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + this.coords.p_handle / 2);\n        this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake);\n        this.result.from_percent = this.coords.p_from_real;\n        this.result.from = this.convertToValue(this.coords.p_from_real);\n        this.result.from_pretty = this._prettify(this.result.from);\n        this.result.to_percent = this.coords.p_to_real;\n        this.result.to = this.convertToValue(this.coords.p_to_real);\n        this.result.to_pretty = this._prettify(this.result.to);\n        if (this.options.values.length) {\n          this.result.from_value = this.options.values[this.result.from];\n          this.result.to_value = this.options.values[this.result.to];\n        }\n      }\n      this.calcMinMax();\n      this.calcLabels();\n    },\n    /**\n     * calculates pointer X in percent\n     */\n    calcPointerPercent: function calcPointerPercent() {\n      if (!this.coords.w_rs) {\n        this.coords.p_pointer = 0;\n        return;\n      }\n      if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer)) {\n        this.coords.x_pointer = 0;\n      } else if (this.coords.x_pointer > this.coords.w_rs) {\n        this.coords.x_pointer = this.coords.w_rs;\n      }\n      this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100);\n    },\n    convertToRealPercent: function convertToRealPercent(fake) {\n      var full = 100 - this.coords.p_handle;\n      return fake / full * 100;\n    },\n    convertToFakePercent: function convertToFakePercent(real) {\n      var full = 100 - this.coords.p_handle;\n      return real / 100 * full;\n    },\n    getHandleX: function getHandleX() {\n      var max = 100 - this.coords.p_handle,\n        x = this.toFixed(this.coords.p_pointer - this.coords.p_gap);\n      if (x < 0) {\n        x = 0;\n      } else if (x > max) {\n        x = max;\n      }\n      return x;\n    },\n    calcHandlePercent: function calcHandlePercent() {\n      if (this.options.type === \"single\") {\n        this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n      } else {\n        this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n      }\n      this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n    },\n    /**\n     * Find closest handle to pointer click\n     *\n     * @param real_x {Number}\n     * @returns {String}\n     */\n    chooseHandle: function chooseHandle(real_x) {\n      if (this.options.type === \"single\") {\n        return \"single\";\n      } else {\n        var m_point = this.coords.p_from_real + (this.coords.p_to_real - this.coords.p_from_real) / 2;\n        if (real_x >= m_point) {\n          return this.options.to_fixed ? \"from\" : \"to\";\n        } else {\n          return this.options.from_fixed ? \"to\" : \"from\";\n        }\n      }\n    },\n    /**\n     * Measure Min and Max labels width in percent\n     */\n    calcMinMax: function calcMinMax() {\n      if (!this.coords.w_rs) {\n        return;\n      }\n      this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100;\n      this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100;\n    },\n    /**\n     * Measure labels width and X in percent\n     */\n    calcLabels: function calcLabels() {\n      if (!this.coords.w_rs || this.options.hide_from_to) {\n        return;\n      }\n      if (this.options.type === \"single\") {\n        this.labels.w_single = this.$cache.single.outerWidth(false);\n        this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n        this.labels.p_single_left = this.coords.p_single_fake + this.coords.p_handle / 2 - this.labels.p_single_fake / 2;\n        this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n      } else {\n        this.labels.w_from = this.$cache.from.outerWidth(false);\n        this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100;\n        this.labels.p_from_left = this.coords.p_from_fake + this.coords.p_handle / 2 - this.labels.p_from_fake / 2;\n        this.labels.p_from_left = this.toFixed(this.labels.p_from_left);\n        this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake);\n        this.labels.w_to = this.$cache.to.outerWidth(false);\n        this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100;\n        this.labels.p_to_left = this.coords.p_to_fake + this.coords.p_handle / 2 - this.labels.p_to_fake / 2;\n        this.labels.p_to_left = this.toFixed(this.labels.p_to_left);\n        this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake);\n        this.labels.w_single = this.$cache.single.outerWidth(false);\n        this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n        this.labels.p_single_left = (this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2 - this.labels.p_single_fake / 2;\n        this.labels.p_single_left = this.toFixed(this.labels.p_single_left);\n        this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n      }\n    },\n    // =============================================================================================================\n    // Drawings\n\n    /**\n     * Main function called in request animation frame\n     * to update everything\n     */\n    updateScene: function updateScene() {\n      if (this.raf_id) {\n        cancelAnimationFrame(this.raf_id);\n        this.raf_id = null;\n      }\n      clearTimeout(this.update_tm);\n      this.update_tm = null;\n      if (!this.options) {\n        return;\n      }\n      this.drawHandles();\n      if (this.is_active) {\n        this.raf_id = requestAnimationFrame(this.updateScene.bind(this));\n      } else {\n        this.update_tm = setTimeout(this.updateScene.bind(this), 300);\n      }\n    },\n    /**\n     * Draw handles\n     */\n    drawHandles: function drawHandles() {\n      this.coords.w_rs = this.$cache.rs.outerWidth(false);\n      if (!this.coords.w_rs) {\n        return;\n      }\n      if (this.coords.w_rs !== this.coords.w_rs_old) {\n        this.target = \"base\";\n        this.is_resize = true;\n      }\n      if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) {\n        this.setMinMax();\n        this.calc(true);\n        this.drawLabels();\n        if (this.options.grid) {\n          this.calcGridMargin();\n          this.calcGridLabels();\n        }\n        this.force_redraw = true;\n        this.coords.w_rs_old = this.coords.w_rs;\n        this.drawShadow();\n      }\n      if (!this.coords.w_rs) {\n        return;\n      }\n      if (!this.dragging && !this.force_redraw && !this.is_key) {\n        return;\n      }\n      if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) {\n        this.drawLabels();\n        this.$cache.bar[0].style.left = this.coords.p_bar_x + \"%\";\n        this.$cache.bar[0].style.width = this.coords.p_bar_w + \"%\";\n        if (this.options.type === \"single\") {\n          this.$cache.bar[0].style.left = 0;\n          this.$cache.bar[0].style.width = this.coords.p_bar_w + this.coords.p_bar_x + \"%\";\n          this.$cache.s_single[0].style.left = this.coords.p_single_fake + \"%\";\n          this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n        } else {\n          this.$cache.s_from[0].style.left = this.coords.p_from_fake + \"%\";\n          this.$cache.s_to[0].style.left = this.coords.p_to_fake + \"%\";\n          if (this.old_from !== this.result.from || this.force_redraw) {\n            this.$cache.from[0].style.left = this.labels.p_from_left + \"%\";\n          }\n          if (this.old_to !== this.result.to || this.force_redraw) {\n            this.$cache.to[0].style.left = this.labels.p_to_left + \"%\";\n          }\n          this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n        }\n        this.writeToInput();\n        if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) {\n          this.$cache.input.trigger(\"change\");\n          this.$cache.input.trigger(\"input\");\n        }\n        this.old_from = this.result.from;\n        this.old_to = this.result.to;\n\n        // callbacks call\n        if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) {\n          this.callOnChange();\n        }\n        if (this.is_key || this.is_click) {\n          this.is_key = false;\n          this.is_click = false;\n          this.callOnFinish();\n        }\n        this.is_update = false;\n        this.is_resize = false;\n        this.is_finish = false;\n      }\n      this.is_start = false;\n      this.is_key = false;\n      this.is_click = false;\n      this.force_redraw = false;\n    },\n    /**\n     * Draw labels\n     * measure labels collisions\n     * collapse close labels\n     */\n    drawLabels: function drawLabels() {\n      if (!this.options) {\n        return;\n      }\n      var values_num = this.options.values.length;\n      var p_values = this.options.p_values;\n      var text_single;\n      var text_from;\n      var text_to;\n      var from_pretty;\n      var to_pretty;\n      if (this.options.hide_from_to) {\n        return;\n      }\n      if (this.options.type === \"single\") {\n        if (values_num) {\n          text_single = this.decorate(p_values[this.result.from]);\n          this.$cache.single.html(text_single);\n        } else {\n          from_pretty = this._prettify(this.result.from);\n          text_single = this.decorate(from_pretty, this.result.from);\n          this.$cache.single.html(text_single);\n        }\n        this.calcLabels();\n        if (this.labels.p_single_left < this.labels.p_min + 1) {\n          this.$cache.min[0].style.visibility = \"hidden\";\n        } else {\n          this.$cache.min[0].style.visibility = \"visible\";\n        }\n        if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) {\n          this.$cache.max[0].style.visibility = \"hidden\";\n        } else {\n          this.$cache.max[0].style.visibility = \"visible\";\n        }\n      } else {\n        if (values_num) {\n          if (this.options.decorate_both) {\n            text_single = this.decorate(p_values[this.result.from]);\n            text_single += this.options.values_separator;\n            text_single += this.decorate(p_values[this.result.to]);\n          } else {\n            text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]);\n          }\n          text_from = this.decorate(p_values[this.result.from]);\n          text_to = this.decorate(p_values[this.result.to]);\n          this.$cache.single.html(text_single);\n          this.$cache.from.html(text_from);\n          this.$cache.to.html(text_to);\n        } else {\n          from_pretty = this._prettify(this.result.from);\n          to_pretty = this._prettify(this.result.to);\n          if (this.options.decorate_both) {\n            text_single = this.decorate(from_pretty, this.result.from);\n            text_single += this.options.values_separator;\n            text_single += this.decorate(to_pretty, this.result.to);\n          } else {\n            text_single = this.decorate(from_pretty + this.options.values_separator + to_pretty, this.result.to);\n          }\n          text_from = this.decorate(from_pretty, this.result.from);\n          text_to = this.decorate(to_pretty, this.result.to);\n          this.$cache.single.html(text_single);\n          this.$cache.from.html(text_from);\n          this.$cache.to.html(text_to);\n        }\n        this.calcLabels();\n        var min = Math.min(this.labels.p_single_left, this.labels.p_from_left),\n          single_left = this.labels.p_single_left + this.labels.p_single_fake,\n          to_left = this.labels.p_to_left + this.labels.p_to_fake,\n          max = Math.max(single_left, to_left);\n        if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) {\n          this.$cache.from[0].style.visibility = \"hidden\";\n          this.$cache.to[0].style.visibility = \"hidden\";\n          this.$cache.single[0].style.visibility = \"visible\";\n          if (this.result.from === this.result.to) {\n            if (this.target === \"from\") {\n              this.$cache.from[0].style.visibility = \"visible\";\n            } else if (this.target === \"to\") {\n              this.$cache.to[0].style.visibility = \"visible\";\n            } else if (!this.target) {\n              this.$cache.from[0].style.visibility = \"visible\";\n            }\n            this.$cache.single[0].style.visibility = \"hidden\";\n            max = to_left;\n          } else {\n            this.$cache.from[0].style.visibility = \"hidden\";\n            this.$cache.to[0].style.visibility = \"hidden\";\n            this.$cache.single[0].style.visibility = \"visible\";\n            max = Math.max(single_left, to_left);\n          }\n        } else {\n          this.$cache.from[0].style.visibility = \"visible\";\n          this.$cache.to[0].style.visibility = \"visible\";\n          this.$cache.single[0].style.visibility = \"hidden\";\n        }\n        if (min < this.labels.p_min + 1) {\n          this.$cache.min[0].style.visibility = \"hidden\";\n        } else {\n          this.$cache.min[0].style.visibility = \"visible\";\n        }\n        if (max > 100 - this.labels.p_max - 1) {\n          this.$cache.max[0].style.visibility = \"hidden\";\n        } else {\n          this.$cache.max[0].style.visibility = \"visible\";\n        }\n      }\n    },\n    /**\n     * Draw shadow intervals\n     */\n    drawShadow: function drawShadow() {\n      var o = this.options,\n        c = this.$cache,\n        is_from_min = typeof o.from_min === \"number\" && !isNaN(o.from_min),\n        is_from_max = typeof o.from_max === \"number\" && !isNaN(o.from_max),\n        is_to_min = typeof o.to_min === \"number\" && !isNaN(o.to_min),\n        is_to_max = typeof o.to_max === \"number\" && !isNaN(o.to_max),\n        from_min,\n        from_max,\n        to_min,\n        to_max;\n      if (o.type === \"single\") {\n        if (o.from_shadow && (is_from_min || is_from_max)) {\n          from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n          from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n          from_min = this.toFixed(from_min - this.coords.p_handle / 100 * from_min);\n          from_max = this.toFixed(from_max - this.coords.p_handle / 100 * from_max);\n          from_min = from_min + this.coords.p_handle / 2;\n          c.shad_single[0].style.display = \"block\";\n          c.shad_single[0].style.left = from_min + \"%\";\n          c.shad_single[0].style.width = from_max + \"%\";\n        } else {\n          c.shad_single[0].style.display = \"none\";\n        }\n      } else {\n        if (o.from_shadow && (is_from_min || is_from_max)) {\n          from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n          from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n          from_min = this.toFixed(from_min - this.coords.p_handle / 100 * from_min);\n          from_max = this.toFixed(from_max - this.coords.p_handle / 100 * from_max);\n          from_min = from_min + this.coords.p_handle / 2;\n          c.shad_from[0].style.display = \"block\";\n          c.shad_from[0].style.left = from_min + \"%\";\n          c.shad_from[0].style.width = from_max + \"%\";\n        } else {\n          c.shad_from[0].style.display = \"none\";\n        }\n        if (o.to_shadow && (is_to_min || is_to_max)) {\n          to_min = this.convertToPercent(is_to_min ? o.to_min : o.min);\n          to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min;\n          to_min = this.toFixed(to_min - this.coords.p_handle / 100 * to_min);\n          to_max = this.toFixed(to_max - this.coords.p_handle / 100 * to_max);\n          to_min = to_min + this.coords.p_handle / 2;\n          c.shad_to[0].style.display = \"block\";\n          c.shad_to[0].style.left = to_min + \"%\";\n          c.shad_to[0].style.width = to_max + \"%\";\n        } else {\n          c.shad_to[0].style.display = \"none\";\n        }\n      }\n    },\n    /**\n     * Write values to input element\n     */\n    writeToInput: function writeToInput() {\n      if (this.options.type === \"single\") {\n        if (this.options.values.length) {\n          this.$cache.input.prop(\"value\", this.result.from_value);\n        } else {\n          this.$cache.input.prop(\"value\", this.result.from);\n        }\n        this.$cache.input.data(\"from\", this.result.from);\n      } else {\n        if (this.options.values.length) {\n          this.$cache.input.prop(\"value\", this.result.from_value + this.options.input_values_separator + this.result.to_value);\n        } else {\n          this.$cache.input.prop(\"value\", this.result.from + this.options.input_values_separator + this.result.to);\n        }\n        this.$cache.input.data(\"from\", this.result.from);\n        this.$cache.input.data(\"to\", this.result.to);\n      }\n    },\n    // =============================================================================================================\n    // Callbacks\n\n    callOnStart: function callOnStart() {\n      this.writeToInput();\n      if (this.options.onStart && typeof this.options.onStart === \"function\") {\n        if (this.options.scope) {\n          this.options.onStart.call(this.options.scope, this.result);\n        } else {\n          this.options.onStart(this.result);\n        }\n      }\n    },\n    callOnChange: function callOnChange() {\n      this.writeToInput();\n      if (this.options.onChange && typeof this.options.onChange === \"function\") {\n        if (this.options.scope) {\n          this.options.onChange.call(this.options.scope, this.result);\n        } else {\n          this.options.onChange(this.result);\n        }\n      }\n    },\n    callOnFinish: function callOnFinish() {\n      this.writeToInput();\n      if (this.options.onFinish && typeof this.options.onFinish === \"function\") {\n        if (this.options.scope) {\n          this.options.onFinish.call(this.options.scope, this.result);\n        } else {\n          this.options.onFinish(this.result);\n        }\n      }\n    },\n    callOnUpdate: function callOnUpdate() {\n      this.writeToInput();\n      if (this.options.onUpdate && typeof this.options.onUpdate === \"function\") {\n        if (this.options.scope) {\n          this.options.onUpdate.call(this.options.scope, this.result);\n        } else {\n          this.options.onUpdate(this.result);\n        }\n      }\n    },\n    // =============================================================================================================\n    // Service methods\n\n    toggleInput: function toggleInput() {\n      this.$cache.input.toggleClass(\"irs-hidden-input\");\n      if (this.has_tab_index) {\n        this.$cache.input.prop(\"tabindex\", -1);\n      } else {\n        this.$cache.input.removeProp(\"tabindex\");\n      }\n      this.has_tab_index = !this.has_tab_index;\n    },\n    /**\n     * Convert real value to percent\n     *\n     * @param value {Number} X in real\n     * @param no_min {boolean=} don't use min value\n     * @returns {Number} X in percent\n     */\n    convertToPercent: function convertToPercent(value, no_min) {\n      var diapason = this.options.max - this.options.min,\n        one_percent = diapason / 100,\n        val,\n        percent;\n      if (!diapason) {\n        this.no_diapason = true;\n        return 0;\n      }\n      if (no_min) {\n        val = value;\n      } else {\n        val = value - this.options.min;\n      }\n      percent = val / one_percent;\n      return this.toFixed(percent);\n    },\n    /**\n     * Convert percent to real values\n     *\n     * @param percent {Number} X in percent\n     * @returns {Number} X in real\n     */\n    convertToValue: function convertToValue(percent) {\n      var min = this.options.min,\n        max = this.options.max,\n        min_decimals = min.toString().split(\".\")[1],\n        max_decimals = max.toString().split(\".\")[1],\n        min_length,\n        max_length,\n        avg_decimals = 0,\n        abs = 0;\n      if (percent === 0) {\n        return this.options.min;\n      }\n      if (percent === 100) {\n        return this.options.max;\n      }\n      if (min_decimals) {\n        min_length = min_decimals.length;\n        avg_decimals = min_length;\n      }\n      if (max_decimals) {\n        max_length = max_decimals.length;\n        avg_decimals = max_length;\n      }\n      if (min_length && max_length) {\n        avg_decimals = min_length >= max_length ? min_length : max_length;\n      }\n      if (min < 0) {\n        abs = Math.abs(min);\n        min = +(min + abs).toFixed(avg_decimals);\n        max = +(max + abs).toFixed(avg_decimals);\n      }\n      var number = (max - min) / 100 * percent + min,\n        string = this.options.step.toString().split(\".\")[1],\n        result;\n      if (string) {\n        number = +number.toFixed(string.length);\n      } else {\n        number = number / this.options.step;\n        number = number * this.options.step;\n        number = +number.toFixed(0);\n      }\n      if (abs) {\n        number -= abs;\n      }\n      if (string) {\n        result = +number.toFixed(string.length);\n      } else {\n        result = this.toFixed(number);\n      }\n      if (result < this.options.min) {\n        result = this.options.min;\n      } else if (result > this.options.max) {\n        result = this.options.max;\n      }\n      return result;\n    },\n    /**\n     * Round percent value with step\n     *\n     * @param percent {Number}\n     * @returns percent {Number} rounded\n     */\n    calcWithStep: function calcWithStep(percent) {\n      var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step;\n      if (rounded > 100) {\n        rounded = 100;\n      }\n      if (percent === 100) {\n        rounded = 100;\n      }\n      return this.toFixed(rounded);\n    },\n    checkMinInterval: function checkMinInterval(p_current, p_next, type) {\n      var o = this.options,\n        current,\n        next;\n      if (!o.min_interval) {\n        return p_current;\n      }\n      current = this.convertToValue(p_current);\n      next = this.convertToValue(p_next);\n      if (type === \"from\") {\n        if (next - current < o.min_interval) {\n          current = next - o.min_interval;\n        }\n      } else {\n        if (current - next < o.min_interval) {\n          current = next + o.min_interval;\n        }\n      }\n      return this.convertToPercent(current);\n    },\n    checkMaxInterval: function checkMaxInterval(p_current, p_next, type) {\n      var o = this.options,\n        current,\n        next;\n      if (!o.max_interval) {\n        return p_current;\n      }\n      current = this.convertToValue(p_current);\n      next = this.convertToValue(p_next);\n      if (type === \"from\") {\n        if (next - current > o.max_interval) {\n          current = next - o.max_interval;\n        }\n      } else {\n        if (current - next > o.max_interval) {\n          current = next + o.max_interval;\n        }\n      }\n      return this.convertToPercent(current);\n    },\n    checkDiapason: function checkDiapason(p_num, min, max) {\n      var num = this.convertToValue(p_num),\n        o = this.options;\n      if (typeof min !== \"number\") {\n        min = o.min;\n      }\n      if (typeof max !== \"number\") {\n        max = o.max;\n      }\n      if (num < min) {\n        num = min;\n      }\n      if (num > max) {\n        num = max;\n      }\n      return this.convertToPercent(num);\n    },\n    toFixed: function toFixed(num) {\n      num = num.toFixed(20);\n      return +num;\n    },\n    _prettify: function _prettify(num) {\n      if (!this.options.prettify_enabled) {\n        return num;\n      }\n      if (this.options.prettify && typeof this.options.prettify === \"function\") {\n        return this.options.prettify(num);\n      } else {\n        return this.prettify(num);\n      }\n    },\n    prettify: function prettify(num) {\n      var n = num.toString();\n      return n.replace(/(\\d{1,3}(?=(?:\\d\\d\\d)+(?!\\d)))/g, \"$1\" + this.options.prettify_separator);\n    },\n    checkEdges: function checkEdges(left, width) {\n      if (!this.options.force_edges) {\n        return this.toFixed(left);\n      }\n      if (left < 0) {\n        left = 0;\n      } else if (left > 100 - width) {\n        left = 100 - width;\n      }\n      return this.toFixed(left);\n    },\n    validate: function validate() {\n      var o = this.options,\n        r = this.result,\n        v = o.values,\n        vl = v.length,\n        value,\n        i;\n      if (typeof o.min === \"string\") o.min = +o.min;\n      if (typeof o.max === \"string\") o.max = +o.max;\n      if (typeof o.from === \"string\") o.from = +o.from;\n      if (typeof o.to === \"string\") o.to = +o.to;\n      if (typeof o.step === \"string\") o.step = +o.step;\n      if (typeof o.from_min === \"string\") o.from_min = +o.from_min;\n      if (typeof o.from_max === \"string\") o.from_max = +o.from_max;\n      if (typeof o.to_min === \"string\") o.to_min = +o.to_min;\n      if (typeof o.to_max === \"string\") o.to_max = +o.to_max;\n      if (typeof o.grid_num === \"string\") o.grid_num = +o.grid_num;\n      if (o.max < o.min) {\n        o.max = o.min;\n      }\n      if (vl) {\n        o.p_values = [];\n        o.min = 0;\n        o.max = vl - 1;\n        o.step = 1;\n        o.grid_num = o.max;\n        o.grid_snap = true;\n        for (i = 0; i < vl; i++) {\n          value = +v[i];\n          if (!isNaN(value)) {\n            v[i] = value;\n            value = this._prettify(value);\n          } else {\n            value = v[i];\n          }\n          o.p_values.push(value);\n        }\n      }\n      if (typeof o.from !== \"number\" || isNaN(o.from)) {\n        o.from = o.min;\n      }\n      if (typeof o.to !== \"number\" || isNaN(o.to)) {\n        o.to = o.max;\n      }\n      if (o.type === \"single\") {\n        if (o.from < o.min) o.from = o.min;\n        if (o.from > o.max) o.from = o.max;\n      } else {\n        if (o.from < o.min) o.from = o.min;\n        if (o.from > o.max) o.from = o.max;\n        if (o.to < o.min) o.to = o.min;\n        if (o.to > o.max) o.to = o.max;\n        if (this.update_check.from) {\n          if (this.update_check.from !== o.from) {\n            if (o.from > o.to) o.from = o.to;\n          }\n          if (this.update_check.to !== o.to) {\n            if (o.to < o.from) o.to = o.from;\n          }\n        }\n        if (o.from > o.to) o.from = o.to;\n        if (o.to < o.from) o.to = o.from;\n      }\n      if (typeof o.step !== \"number\" || isNaN(o.step) || !o.step || o.step < 0) {\n        o.step = 1;\n      }\n      if (typeof o.from_min === \"number\" && o.from < o.from_min) {\n        o.from = o.from_min;\n      }\n      if (typeof o.from_max === \"number\" && o.from > o.from_max) {\n        o.from = o.from_max;\n      }\n      if (typeof o.to_min === \"number\" && o.to < o.to_min) {\n        o.to = o.to_min;\n      }\n      if (typeof o.to_max === \"number\" && o.from > o.to_max) {\n        o.to = o.to_max;\n      }\n      if (r) {\n        if (r.min !== o.min) {\n          r.min = o.min;\n        }\n        if (r.max !== o.max) {\n          r.max = o.max;\n        }\n        if (r.from < r.min || r.from > r.max) {\n          r.from = o.from;\n        }\n        if (r.to < r.min || r.to > r.max) {\n          r.to = o.to;\n        }\n      }\n      if (typeof o.min_interval !== \"number\" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) {\n        o.min_interval = 0;\n      }\n      if (typeof o.max_interval !== \"number\" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) {\n        o.max_interval = 0;\n      }\n      if (o.min_interval && o.min_interval > o.max - o.min) {\n        o.min_interval = o.max - o.min;\n      }\n      if (o.max_interval && o.max_interval > o.max - o.min) {\n        o.max_interval = o.max - o.min;\n      }\n    },\n    decorate: function decorate(num, original) {\n      var decorated = \"\",\n        o = this.options;\n      if (o.prefix) {\n        decorated += o.prefix;\n      }\n      decorated += num;\n      if (o.max_postfix) {\n        if (o.values.length && num === o.p_values[o.max]) {\n          decorated += o.max_postfix;\n          if (o.postfix) {\n            decorated += \" \";\n          }\n        } else if (original === o.max) {\n          decorated += o.max_postfix;\n          if (o.postfix) {\n            decorated += \" \";\n          }\n        }\n      }\n      if (o.postfix) {\n        decorated += o.postfix;\n      }\n      return decorated;\n    },\n    updateFrom: function updateFrom() {\n      this.result.from = this.options.from;\n      this.result.from_percent = this.convertToPercent(this.result.from);\n      this.result.from_pretty = this._prettify(this.result.from);\n      if (this.options.values) {\n        this.result.from_value = this.options.values[this.result.from];\n      }\n    },\n    updateTo: function updateTo() {\n      this.result.to = this.options.to;\n      this.result.to_percent = this.convertToPercent(this.result.to);\n      this.result.to_pretty = this._prettify(this.result.to);\n      if (this.options.values) {\n        this.result.to_value = this.options.values[this.result.to];\n      }\n    },\n    updateResult: function updateResult() {\n      this.result.min = this.options.min;\n      this.result.max = this.options.max;\n      this.updateFrom();\n      this.updateTo();\n    },\n    // =============================================================================================================\n    // Grid\n\n    appendGrid: function appendGrid() {\n      if (!this.options.grid) {\n        return;\n      }\n      var o = this.options,\n        i,\n        z,\n        total = o.max - o.min,\n        big_num = o.grid_num,\n        big_p = 0,\n        big_w = 0,\n        small_max = 4,\n        local_small_max,\n        small_p,\n        small_w = 0,\n        result,\n        html = '';\n      this.calcGridMargin();\n      if (o.grid_snap) {\n        big_num = total / o.step;\n      }\n      if (big_num > 50) big_num = 50;\n      big_p = this.toFixed(100 / big_num);\n      if (big_num > 4) {\n        small_max = 3;\n      }\n      if (big_num > 7) {\n        small_max = 2;\n      }\n      if (big_num > 14) {\n        small_max = 1;\n      }\n      if (big_num > 28) {\n        small_max = 0;\n      }\n      for (i = 0; i < big_num + 1; i++) {\n        local_small_max = small_max;\n        big_w = this.toFixed(big_p * i);\n        if (big_w > 100) {\n          big_w = 100;\n        }\n        this.coords.big[i] = big_w;\n        small_p = (big_w - big_p * (i - 1)) / (local_small_max + 1);\n        for (z = 1; z <= local_small_max; z++) {\n          if (big_w === 0) {\n            break;\n          }\n          small_w = this.toFixed(big_w - small_p * z);\n          html += '<span class=\"irs-grid-pol small\" style=\"left: ' + small_w + '%\"></span>';\n        }\n        html += '<span class=\"irs-grid-pol\" style=\"left: ' + big_w + '%\"></span>';\n        result = this.convertToValue(big_w);\n        if (o.values.length) {\n          result = o.p_values[result];\n        } else {\n          result = this._prettify(result);\n        }\n        html += '<span class=\"irs-grid-text js-grid-text-' + i + '\" style=\"left: ' + big_w + '%\">' + result + '</span>';\n      }\n      this.coords.big_num = Math.ceil(big_num + 1);\n      this.$cache.cont.addClass(\"irs-with-grid\");\n      this.$cache.grid.html(html);\n      this.cacheGridLabels();\n    },\n    cacheGridLabels: function cacheGridLabels() {\n      var $label,\n        i,\n        num = this.coords.big_num;\n      for (i = 0; i < num; i++) {\n        $label = this.$cache.grid.find(\".js-grid-text-\" + i);\n        this.$cache.grid_labels.push($label);\n      }\n      this.calcGridLabels();\n    },\n    calcGridLabels: function calcGridLabels() {\n      var i,\n        label,\n        start = [],\n        finish = [],\n        num = this.coords.big_num;\n      for (i = 0; i < num; i++) {\n        this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false);\n        this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100);\n        this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2);\n        start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]);\n        finish[i] = this.toFixed(start[i] + this.coords.big_p[i]);\n      }\n      if (this.options.force_edges) {\n        if (start[0] < -this.coords.grid_gap) {\n          start[0] = -this.coords.grid_gap;\n          finish[0] = this.toFixed(start[0] + this.coords.big_p[0]);\n          this.coords.big_x[0] = this.coords.grid_gap;\n        }\n        if (finish[num - 1] > 100 + this.coords.grid_gap) {\n          finish[num - 1] = 100 + this.coords.grid_gap;\n          start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]);\n          this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap);\n        }\n      }\n      this.calcGridCollision(2, start, finish);\n      this.calcGridCollision(4, start, finish);\n      for (i = 0; i < num; i++) {\n        label = this.$cache.grid_labels[i][0];\n        if (this.coords.big_x[i] !== Number.POSITIVE_INFINITY) {\n          label.style.marginLeft = -this.coords.big_x[i] + \"%\";\n        }\n      }\n    },\n    // Collisions Calc Beta\n    // TODO: Refactor then have plenty of time\n    calcGridCollision: function calcGridCollision(step, start, finish) {\n      var i,\n        next_i,\n        label,\n        num = this.coords.big_num;\n      for (i = 0; i < num; i += step) {\n        next_i = i + step / 2;\n        if (next_i >= num) {\n          break;\n        }\n        label = this.$cache.grid_labels[next_i][0];\n        if (finish[i] <= start[next_i]) {\n          label.style.visibility = \"visible\";\n        } else {\n          label.style.visibility = \"hidden\";\n        }\n      }\n    },\n    calcGridMargin: function calcGridMargin() {\n      if (!this.options.grid_margin) {\n        return;\n      }\n      this.coords.w_rs = this.$cache.rs.outerWidth(false);\n      if (!this.coords.w_rs) {\n        return;\n      }\n      if (this.options.type === \"single\") {\n        this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n      } else {\n        this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n      }\n      this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n      this.coords.grid_gap = this.toFixed(this.coords.p_handle / 2 - 0.1);\n      this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + \"%\";\n      this.$cache.grid[0].style.left = this.coords.grid_gap + \"%\";\n    },\n    // =============================================================================================================\n    // Public methods\n\n    update: function update(options) {\n      if (!this.input) {\n        return;\n      }\n      this.is_update = true;\n      this.options.from = this.result.from;\n      this.options.to = this.result.to;\n      this.update_check.from = this.result.from;\n      this.update_check.to = this.result.to;\n      this.options = $.extend(this.options, options);\n      this.validate();\n      this.updateResult(options);\n      this.toggleInput();\n      this.remove();\n      this.init(true);\n    },\n    reset: function reset() {\n      if (!this.input) {\n        return;\n      }\n      this.updateResult();\n      this.update();\n    },\n    destroy: function destroy() {\n      if (!this.input) {\n        return;\n      }\n      this.toggleInput();\n      this.$cache.input.prop(\"readonly\", false);\n      $.data(this.input, \"ionRangeSlider\", null);\n      this.remove();\n      this.input = null;\n      this.options = null;\n    }\n  };\n  $.fn.ionRangeSlider = function (options) {\n    return this.each(function () {\n      if (!$.data(this, \"ionRangeSlider\")) {\n        $.data(this, \"ionRangeSlider\", new IonRangeSlider(this, options, plugin_count++));\n      }\n    });\n  };\n\n  // =================================================================================================================\n  // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n  // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n  // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n  // MIT license\n\n  (function () {\n    var lastTime = 0;\n    var vendors = ['ms', 'moz', 'webkit', 'o'];\n    for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n      window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n      window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n    }\n    if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n      var currTime = new Date().getTime();\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      var id = window.setTimeout(function () {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n    if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n      clearTimeout(id);\n    };\n  })();\n});"],"sourceRoot":""}