// Ion.RangeSlider, 2.3.0, © Denis Ineshin, 2010 - 2018, IonDen.com, Build date: 2018-12-11 23:11:14
!(function (i) {
	!jQuery && "function" == typeof define && define.amd
		? define(["jquery"], function (t) {
				return i(t, document, window, navigator);
		  })
		: jQuery || "object" != typeof exports
		? i(jQuery, document, window, navigator)
		: i(require("jquery"), document, window, navigator);
})(function (a, c, l, t, _) {
	"use strict";
	var i,
		s,
		o = 0,
		e =
			((i = t.userAgent),
			(s = /msie\s\d+/i),
			0 < i.search(s) &&
				s.exec(i).toString().split(" ")[1] < 9 &&
				(a("html").addClass("lt-ie9"), !0));
	Function.prototype.bind ||
		(Function.prototype.bind = function (o) {
			var e = this,
				h = [].slice;
			if ("function" != typeof e) throw new TypeError();
			var r = h.call(arguments, 1),
				n = function () {
					if (this instanceof n) {
						var t = function () {};
						t.prototype = e.prototype;
						var i = new t(),
							s = e.apply(i, r.concat(h.call(arguments)));
						return Object(s) === s ? s : i;
					}
					return e.apply(o, r.concat(h.call(arguments)));
				};
			return n;
		}),
		Array.prototype.indexOf ||
			(Array.prototype.indexOf = function (t, i) {
				var s;
				if (null == this)
					throw new TypeError('"this" is null or not defined');
				var o = Object(this),
					e = o.length >>> 0;
				if (0 === e) return -1;
				var h = +i || 0;
				if ((Math.abs(h) === 1 / 0 && (h = 0), e <= h)) return -1;
				for (s = Math.max(0 <= h ? h : e - Math.abs(h), 0); s < e; ) {
					if (s in o && o[s] === t) return s;
					s++;
				}
				return -1;
			});
	var h = function (t, i, s) {
		(this.VERSION = "2.3.0"),
			(this.input = t),
			(this.plugin_count = s),
			(this.current_plugin = 0),
			(this.calc_count = 0),
			(this.update_tm = 0),
			(this.old_from = 0),
			(this.old_to = 0),
			(this.old_min_interval = null),
			(this.raf_id = null),
			(this.dragging = !1),
			(this.force_redraw = !1),
			(this.no_diapason = !1),
			(this.has_tab_index = !0),
			(this.is_key = !1),
			(this.is_update = !1),
			(this.is_start = !0),
			(this.is_finish = !1),
			(this.is_active = !1),
			(this.is_resize = !1),
			(this.is_click = !1),
			(i = i || {}),
			(this.$cache = {
				win: a(l),
				body: a(c.body),
				input: a(t),
				cont: null,
				rs: null,
				min: null,
				max: null,
				from: null,
				to: null,
				single: null,
				bar: null,
				line: null,
				s_single: null,
				s_from: null,
				s_to: null,
				shad_single: null,
				shad_from: null,
				shad_to: null,
				edge: null,
				grid: null,
				grid_labels: [],
			}),
			(this.coords = {
				x_gap: 0,
				x_pointer: 0,
				w_rs: 0,
				w_rs_old: 0,
				w_handle: 0,
				p_gap: 0,
				p_gap_left: 0,
				p_gap_right: 0,
				p_step: 0,
				p_pointer: 0,
				p_handle: 0,
				p_single_fake: 0,
				p_single_real: 0,
				p_from_fake: 0,
				p_from_real: 0,
				p_to_fake: 0,
				p_to_real: 0,
				p_bar_x: 0,
				p_bar_w: 0,
				grid_gap: 0,
				big_num: 0,
				big: [],
				big_w: [],
				big_p: [],
				big_x: [],
			}),
			(this.labels = {
				w_min: 0,
				w_max: 0,
				w_from: 0,
				w_to: 0,
				w_single: 0,
				p_min: 0,
				p_max: 0,
				p_from_fake: 0,
				p_from_left: 0,
				p_to_fake: 0,
				p_to_left: 0,
				p_single_fake: 0,
				p_single_left: 0,
			});
		var o,
			e,
			h,
			r = this.$cache.input,
			n = r.prop("value");
		for (h in ((o = {
			skin: "flat",
			type: "single",
			min: 10,
			max: 100,
			from: null,
			to: null,
			step: 1,
			min_interval: 0,
			max_interval: 0,
			drag_interval: !1,
			values: [],
			p_values: [],
			from_fixed: !1,
			from_min: null,
			from_max: null,
			from_shadow: !1,
			to_fixed: !1,
			to_min: null,
			to_max: null,
			to_shadow: !1,
			prettify_enabled: !0,
			prettify_separator: " ",
			prettify: null,
			force_edges: !1,
			keyboard: !0,
			grid: !1,
			grid_margin: !0,
			grid_num: 4,
			grid_snap: !1,
			hide_min_max: !1,
			hide_from_to: !1,
			prefix: "",
			postfix: "",
			max_postfix: "",
			decorate_both: !0,
			values_separator: " — ",
			input_values_separator: ";",
			disable: !1,
			block: !1,
			extra_classes: "",
			scope: null,
			onStart: null,
			onChange: null,
			onFinish: null,
			onUpdate: null,
		}),
		"INPUT" !== r[0].nodeName &&
			console &&
			console.warn &&
			console.warn("Base element should be <input>!", r[0]),
		((e = {
			skin: r.data("skin"),
			type: r.data("type"),
			min: r.data("min"),
			max: r.data("max"),
			from: r.data("from"),
			to: r.data("to"),
			step: r.data("step"),
			min_interval: r.data("minInterval"),
			max_interval: r.data("maxInterval"),
			drag_interval: r.data("dragInterval"),
			values: r.data("values"),
			from_fixed: r.data("fromFixed"),
			from_min: r.data("fromMin"),
			from_max: r.data("fromMax"),
			from_shadow: r.data("fromShadow"),
			to_fixed: r.data("toFixed"),
			to_min: r.data("toMin"),
			to_max: r.data("toMax"),
			to_shadow: r.data("toShadow"),
			prettify_enabled: r.data("prettifyEnabled"),
			prettify_separator: r.data("prettifySeparator"),
			force_edges: r.data("forceEdges"),
			keyboard: r.data("keyboard"),
			grid: r.data("grid"),
			grid_margin: r.data("gridMargin"),
			grid_num: r.data("gridNum"),
			grid_snap: r.data("gridSnap"),
			hide_min_max: r.data("hideMinMax"),
			hide_from_to: r.data("hideFromTo"),
			prefix: r.data("prefix"),
			postfix: r.data("postfix"),
			max_postfix: r.data("maxPostfix"),
			decorate_both: r.data("decorateBoth"),
			values_separator: r.data("valuesSeparator"),
			input_values_separator: r.data("inputValuesSeparator"),
			disable: r.data("disable"),
			block: r.data("block"),
			extra_classes: r.data("extraClasses"),
		}).values = e.values && e.values.split(",")),
		e))
			e.hasOwnProperty(h) && ((e[h] !== _ && "" !== e[h]) || delete e[h]);
		n !== _ &&
			"" !== n &&
			((n = n.split(
				e.input_values_separator || i.input_values_separator || ";"
			))[0] &&
				n[0] == +n[0] &&
				(n[0] = +n[0]),
			n[1] && n[1] == +n[1] && (n[1] = +n[1]),
			i && i.values && i.values.length
				? ((o.from = n[0] && i.values.indexOf(n[0])),
				  (o.to = n[1] && i.values.indexOf(n[1])))
				: ((o.from = n[0] && +n[0]), (o.to = n[1] && +n[1]))),
			a.extend(o, i),
			a.extend(o, e),
			(this.options = o),
			(this.update_check = {}),
			this.validate(),
			(this.result = {
				input: this.$cache.input,
				slider: null,
				min: this.options.min,
				max: this.options.max,
				from: this.options.from,
				from_percent: 0,
				from_value: null,
				to: this.options.to,
				to_percent: 0,
				to_value: null,
			}),
			this.init();
	};
	(h.prototype = {
		init: function (t) {
			(this.no_diapason = !1),
				(this.coords.p_step = this.convertToPercent(
					this.options.step,
					!0
				)),
				(this.target = "base"),
				this.toggleInput(),
				this.append(),
				this.setMinMax(),
				t
					? ((this.force_redraw = !0),
					  this.calc(!0),
					  this.callOnUpdate())
					: ((this.force_redraw = !0),
					  this.calc(!0),
					  this.callOnStart()),
				this.updateScene();
		},
		append: function () {
			var t =
				'<span class="irs irs--' +
				this.options.skin +
				" js-irs-" +
				this.plugin_count +
				" " +
				this.options.extra_classes +
				'"></span>';
			this.$cache.input.before(t),
				this.$cache.input.prop("readonly", !0),
				(this.$cache.cont = this.$cache.input.prev()),
				(this.result.slider = this.$cache.cont),
				this.$cache.cont.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>'
				),
				(this.$cache.rs = this.$cache.cont.find(".irs")),
				(this.$cache.min = this.$cache.cont.find(".irs-min")),
				(this.$cache.max = this.$cache.cont.find(".irs-max")),
				(this.$cache.from = this.$cache.cont.find(".irs-from")),
				(this.$cache.to = this.$cache.cont.find(".irs-to")),
				(this.$cache.single = this.$cache.cont.find(".irs-single")),
				(this.$cache.line = this.$cache.cont.find(".irs-line")),
				(this.$cache.grid = this.$cache.cont.find(".irs-grid")),
				"single" === this.options.type
					? (this.$cache.cont.append(
							'<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>'
					  ),
					  (this.$cache.bar = this.$cache.cont.find(".irs-bar")),
					  (this.$cache.edge = this.$cache.cont.find(
							".irs-bar-edge"
					  )),
					  (this.$cache.s_single = this.$cache.cont.find(".single")),
					  (this.$cache.from[0].style.visibility = "hidden"),
					  (this.$cache.to[0].style.visibility = "hidden"),
					  (this.$cache.shad_single = this.$cache.cont.find(
							".shadow-single"
					  )))
					: (this.$cache.cont.append(
							'<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>'
					  ),
					  (this.$cache.bar = this.$cache.cont.find(".irs-bar")),
					  (this.$cache.s_from = this.$cache.cont.find(".from")),
					  (this.$cache.s_to = this.$cache.cont.find(".to")),
					  (this.$cache.shad_from = this.$cache.cont.find(
							".shadow-from"
					  )),
					  (this.$cache.shad_to = this.$cache.cont.find(
							".shadow-to"
					  )),
					  this.setTopHandler()),
				this.options.hide_from_to &&
					((this.$cache.from[0].style.display = "none"),
					(this.$cache.to[0].style.display = "none"),
					(this.$cache.single[0].style.display = "none")),
				this.appendGrid(),
				this.options.disable
					? (this.appendDisableMask(),
					  (this.$cache.input[0].disabled = !0))
					: ((this.$cache.input[0].disabled = !1),
					  this.removeDisableMask(),
					  this.bindEvents()),
				this.options.disable ||
					(this.options.block
						? this.appendDisableMask()
						: this.removeDisableMask()),
				this.options.drag_interval &&
					(this.$cache.bar[0].style.cursor = "ew-resize");
		},
		setTopHandler: function () {
			var t = this.options.min,
				i = this.options.max,
				s = this.options.from,
				o = this.options.to;
			t < s && o === i
				? this.$cache.s_from.addClass("type_last")
				: o < i && this.$cache.s_to.addClass("type_last");
		},
		changeLevel: function (t) {
			switch (t) {
				case "single":
					(this.coords.p_gap = this.toFixed(
						this.coords.p_pointer - this.coords.p_single_fake
					)),
						this.$cache.s_single.addClass("state_hover");
					break;
				case "from":
					(this.coords.p_gap = this.toFixed(
						this.coords.p_pointer - this.coords.p_from_fake
					)),
						this.$cache.s_from.addClass("state_hover"),
						this.$cache.s_from.addClass("type_last"),
						this.$cache.s_to.removeClass("type_last");
					break;
				case "to":
					(this.coords.p_gap = this.toFixed(
						this.coords.p_pointer - this.coords.p_to_fake
					)),
						this.$cache.s_to.addClass("state_hover"),
						this.$cache.s_to.addClass("type_last"),
						this.$cache.s_from.removeClass("type_last");
					break;
				case "both":
					(this.coords.p_gap_left = this.toFixed(
						this.coords.p_pointer - this.coords.p_from_fake
					)),
						(this.coords.p_gap_right = this.toFixed(
							this.coords.p_to_fake - this.coords.p_pointer
						)),
						this.$cache.s_to.removeClass("type_last"),
						this.$cache.s_from.removeClass("type_last");
			}
		},
		appendDisableMask: function () {
			this.$cache.cont.append('<span class="irs-disable-mask"></span>'),
				this.$cache.cont.addClass("irs-disabled");
		},
		removeDisableMask: function () {
			this.$cache.cont.remove(".irs-disable-mask"),
				this.$cache.cont.removeClass("irs-disabled");
		},
		remove: function () {
			this.$cache.cont.remove(),
				(this.$cache.cont = null),
				this.$cache.line.off("keydown.irs_" + this.plugin_count),
				this.$cache.body.off("touchmove.irs_" + this.plugin_count),
				this.$cache.body.off("mousemove.irs_" + this.plugin_count),
				this.$cache.win.off("touchend.irs_" + this.plugin_count),
				this.$cache.win.off("mouseup.irs_" + this.plugin_count),
				e &&
					(this.$cache.body.off("mouseup.irs_" + this.plugin_count),
					this.$cache.body.off(
						"mouseleave.irs_" + this.plugin_count
					)),
				(this.$cache.grid_labels = []),
				(this.coords.big = []),
				(this.coords.big_w = []),
				(this.coords.big_p = []),
				(this.coords.big_x = []),
				cancelAnimationFrame(this.raf_id);
		},
		bindEvents: function () {
			this.no_diapason ||
				(this.$cache.body.on(
					"touchmove.irs_" + this.plugin_count,
					this.pointerMove.bind(this)
				),
				this.$cache.body.on(
					"mousemove.irs_" + this.plugin_count,
					this.pointerMove.bind(this)
				),
				this.$cache.win.on(
					"touchend.irs_" + this.plugin_count,
					this.pointerUp.bind(this)
				),
				this.$cache.win.on(
					"mouseup.irs_" + this.plugin_count,
					this.pointerUp.bind(this)
				),
				this.$cache.line.on(
					"touchstart.irs_" + this.plugin_count,
					this.pointerClick.bind(this, "click")
				),
				this.$cache.line.on(
					"mousedown.irs_" + this.plugin_count,
					this.pointerClick.bind(this, "click")
				),
				this.$cache.line.on(
					"focus.irs_" + this.plugin_count,
					this.pointerFocus.bind(this)
				),
				this.options.drag_interval && "double" === this.options.type
					? (this.$cache.bar.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "both")
					  ),
					  this.$cache.bar.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "both")
					  ))
					: (this.$cache.bar.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.bar.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  )),
				"single" === this.options.type
					? (this.$cache.single.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "single")
					  ),
					  this.$cache.s_single.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "single")
					  ),
					  this.$cache.shad_single.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.single.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "single")
					  ),
					  this.$cache.s_single.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "single")
					  ),
					  this.$cache.edge.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.shad_single.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ))
					: (this.$cache.single.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, null)
					  ),
					  this.$cache.single.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, null)
					  ),
					  this.$cache.from.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "from")
					  ),
					  this.$cache.s_from.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "from")
					  ),
					  this.$cache.to.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "to")
					  ),
					  this.$cache.s_to.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "to")
					  ),
					  this.$cache.shad_from.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.shad_to.on(
							"touchstart.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.from.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "from")
					  ),
					  this.$cache.s_from.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "from")
					  ),
					  this.$cache.to.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "to")
					  ),
					  this.$cache.s_to.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerDown.bind(this, "to")
					  ),
					  this.$cache.shad_from.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  ),
					  this.$cache.shad_to.on(
							"mousedown.irs_" + this.plugin_count,
							this.pointerClick.bind(this, "click")
					  )),
				this.options.keyboard &&
					this.$cache.line.on(
						"keydown.irs_" + this.plugin_count,
						this.key.bind(this, "keyboard")
					),
				e &&
					(this.$cache.body.on(
						"mouseup.irs_" + this.plugin_count,
						this.pointerUp.bind(this)
					),
					this.$cache.body.on(
						"mouseleave.irs_" + this.plugin_count,
						this.pointerUp.bind(this)
					)));
		},
		pointerFocus: function (t) {
			var i, s;
			this.target ||
				((i = (s =
					"single" === this.options.type
						? this.$cache.single
						: this.$cache.from).offset().left),
				(i += s.width() / 2 - 1),
				this.pointerClick("single", {
					preventDefault: function () {},
					pageX: i,
				}));
		},
		pointerMove: function (t) {
			if (this.dragging) {
				var i =
					t.pageX ||
					(t.originalEvent.touches &&
						t.originalEvent.touches[0].pageX);
				(this.coords.x_pointer = i - this.coords.x_gap), this.calc();
			}
		},
		pointerUp: function (t) {
			this.current_plugin === this.plugin_count &&
				this.is_active &&
				((this.is_active = !1),
				this.$cache.cont
					.find(".state_hover")
					.removeClass("state_hover"),
				(this.force_redraw = !0),
				e && a("*").prop("unselectable", !1),
				this.updateScene(),
				this.restoreOriginalMinInterval(),
				(a.contains(this.$cache.cont[0], t.target) || this.dragging) &&
					this.callOnFinish(),
				(this.dragging = !1));
		},
		pointerDown: function (t, i) {
			i.preventDefault();
			var s =
				i.pageX ||
				(i.originalEvent.touches && i.originalEvent.touches[0].pageX);
			2 !== i.button &&
				("both" === t && this.setTempMinInterval(),
				t || (t = this.target || "from"),
				(this.current_plugin = this.plugin_count),
				(this.target = t),
				(this.is_active = !0),
				(this.dragging = !0),
				(this.coords.x_gap = this.$cache.rs.offset().left),
				(this.coords.x_pointer = s - this.coords.x_gap),
				this.calcPointerPercent(),
				this.changeLevel(t),
				e && a("*").prop("unselectable", !0),
				this.$cache.line.trigger("focus"),
				this.updateScene());
		},
		pointerClick: function (t, i) {
			i.preventDefault();
			var s =
				i.pageX ||
				(i.originalEvent.touches && i.originalEvent.touches[0].pageX);
			2 !== i.button &&
				((this.current_plugin = this.plugin_count),
				(this.target = t),
				(this.is_click = !0),
				(this.coords.x_gap = this.$cache.rs.offset().left),
				(this.coords.x_pointer = +(s - this.coords.x_gap).toFixed()),
				(this.force_redraw = !0),
				this.calc(),
				this.$cache.line.trigger("focus"));
		},
		key: function (t, i) {
			if (
				!(
					this.current_plugin !== this.plugin_count ||
					i.altKey ||
					i.ctrlKey ||
					i.shiftKey ||
					i.metaKey
				)
			) {
				switch (i.which) {
					case 83:
					case 65:
					case 40:
					case 37:
						i.preventDefault(), this.moveByKey(!1);
						break;
					case 87:
					case 68:
					case 38:
					case 39:
						i.preventDefault(), this.moveByKey(!0);
				}
				return !0;
			}
		},
		moveByKey: function (t) {
			var i = this.coords.p_pointer,
				s = (this.options.max - this.options.min) / 100;
			(s = this.options.step / s),
				t ? (i += s) : (i -= s),
				(this.coords.x_pointer = this.toFixed(
					(this.coords.w_rs / 100) * i
				)),
				(this.is_key = !0),
				this.calc();
		},
		setMinMax: function () {
			if (this.options) {
				if (this.options.hide_min_max)
					return (
						(this.$cache.min[0].style.display = "none"),
						void (this.$cache.max[0].style.display = "none")
					);
				if (this.options.values.length)
					this.$cache.min.html(
						this.decorate(this.options.p_values[this.options.min])
					),
						this.$cache.max.html(
							this.decorate(
								this.options.p_values[this.options.max]
							)
						);
				else {
					var t = this._prettify(this.options.min),
						i = this._prettify(this.options.max);
					(this.result.min_pretty = t),
						(this.result.max_pretty = i),
						this.$cache.min.html(
							this.decorate(t, this.options.min)
						),
						this.$cache.max.html(
							this.decorate(i, this.options.max)
						);
				}
				(this.labels.w_min = this.$cache.min.outerWidth(!1)),
					(this.labels.w_max = this.$cache.max.outerWidth(!1));
			}
		},
		setTempMinInterval: function () {
			var t = this.result.to - this.result.from;
			null === this.old_min_interval &&
				(this.old_min_interval = this.options.min_interval),
				(this.options.min_interval = t);
		},
		restoreOriginalMinInterval: function () {
			null !== this.old_min_interval &&
				((this.options.min_interval = this.old_min_interval),
				(this.old_min_interval = null));
		},
		calc: function (t) {
			if (
				this.options &&
				(this.calc_count++,
				(10 === this.calc_count || t) &&
					((this.calc_count = 0),
					(this.coords.w_rs = this.$cache.rs.outerWidth(!1)),
					this.calcHandlePercent()),
				this.coords.w_rs)
			) {
				this.calcPointerPercent();
				var i = this.getHandleX();
				switch (
					("both" === this.target &&
						((this.coords.p_gap = 0), (i = this.getHandleX())),
					"click" === this.target &&
						((this.coords.p_gap = this.coords.p_handle / 2),
						(i = this.getHandleX()),
						this.options.drag_interval
							? (this.target = "both_one")
							: (this.target = this.chooseHandle(i))),
					this.target)
				) {
					case "base":
						var s = (this.options.max - this.options.min) / 100,
							o = (this.result.from - this.options.min) / s,
							e = (this.result.to - this.options.min) / s;
						(this.coords.p_single_real = this.toFixed(o)),
							(this.coords.p_from_real = this.toFixed(o)),
							(this.coords.p_to_real = this.toFixed(e)),
							(this.coords.p_single_real = this.checkDiapason(
								this.coords.p_single_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_from_real = this.checkDiapason(
								this.coords.p_from_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_to_real = this.checkDiapason(
								this.coords.p_to_real,
								this.options.to_min,
								this.options.to_max
							)),
							(this.coords.p_single_fake = this.convertToFakePercent(
								this.coords.p_single_real
							)),
							(this.coords.p_from_fake = this.convertToFakePercent(
								this.coords.p_from_real
							)),
							(this.coords.p_to_fake = this.convertToFakePercent(
								this.coords.p_to_real
							)),
							(this.target = null);
						break;
					case "single":
						if (this.options.from_fixed) break;
						(this.coords.p_single_real = this.convertToRealPercent(
							i
						)),
							(this.coords.p_single_real = this.calcWithStep(
								this.coords.p_single_real
							)),
							(this.coords.p_single_real = this.checkDiapason(
								this.coords.p_single_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_single_fake = this.convertToFakePercent(
								this.coords.p_single_real
							));
						break;
					case "from":
						if (this.options.from_fixed) break;
						(this.coords.p_from_real = this.convertToRealPercent(
							i
						)),
							(this.coords.p_from_real = this.calcWithStep(
								this.coords.p_from_real
							)),
							this.coords.p_from_real > this.coords.p_to_real &&
								(this.coords.p_from_real = this.coords.p_to_real),
							(this.coords.p_from_real = this.checkDiapason(
								this.coords.p_from_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_from_real = this.checkMinInterval(
								this.coords.p_from_real,
								this.coords.p_to_real,
								"from"
							)),
							(this.coords.p_from_real = this.checkMaxInterval(
								this.coords.p_from_real,
								this.coords.p_to_real,
								"from"
							)),
							(this.coords.p_from_fake = this.convertToFakePercent(
								this.coords.p_from_real
							));
						break;
					case "to":
						if (this.options.to_fixed) break;
						(this.coords.p_to_real = this.convertToRealPercent(i)),
							(this.coords.p_to_real = this.calcWithStep(
								this.coords.p_to_real
							)),
							this.coords.p_to_real < this.coords.p_from_real &&
								(this.coords.p_to_real = this.coords.p_from_real),
							(this.coords.p_to_real = this.checkDiapason(
								this.coords.p_to_real,
								this.options.to_min,
								this.options.to_max
							)),
							(this.coords.p_to_real = this.checkMinInterval(
								this.coords.p_to_real,
								this.coords.p_from_real,
								"to"
							)),
							(this.coords.p_to_real = this.checkMaxInterval(
								this.coords.p_to_real,
								this.coords.p_from_real,
								"to"
							)),
							(this.coords.p_to_fake = this.convertToFakePercent(
								this.coords.p_to_real
							));
						break;
					case "both":
						if (this.options.from_fixed || this.options.to_fixed)
							break;
						(i = this.toFixed(i + 0.001 * this.coords.p_handle)),
							(this.coords.p_from_real =
								this.convertToRealPercent(i) -
								this.coords.p_gap_left),
							(this.coords.p_from_real = this.calcWithStep(
								this.coords.p_from_real
							)),
							(this.coords.p_from_real = this.checkDiapason(
								this.coords.p_from_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_from_real = this.checkMinInterval(
								this.coords.p_from_real,
								this.coords.p_to_real,
								"from"
							)),
							(this.coords.p_from_fake = this.convertToFakePercent(
								this.coords.p_from_real
							)),
							(this.coords.p_to_real =
								this.convertToRealPercent(i) +
								this.coords.p_gap_right),
							(this.coords.p_to_real = this.calcWithStep(
								this.coords.p_to_real
							)),
							(this.coords.p_to_real = this.checkDiapason(
								this.coords.p_to_real,
								this.options.to_min,
								this.options.to_max
							)),
							(this.coords.p_to_real = this.checkMinInterval(
								this.coords.p_to_real,
								this.coords.p_from_real,
								"to"
							)),
							(this.coords.p_to_fake = this.convertToFakePercent(
								this.coords.p_to_real
							));
						break;
					case "both_one":
						if (this.options.from_fixed || this.options.to_fixed)
							break;
						var h = this.convertToRealPercent(i),
							r = this.result.from_percent,
							n = this.result.to_percent - r,
							a = n / 2,
							c = h - a,
							l = h + a;
						c < 0 && (l = (c = 0) + n),
							100 < l && (c = (l = 100) - n),
							(this.coords.p_from_real = this.calcWithStep(c)),
							(this.coords.p_from_real = this.checkDiapason(
								this.coords.p_from_real,
								this.options.from_min,
								this.options.from_max
							)),
							(this.coords.p_from_fake = this.convertToFakePercent(
								this.coords.p_from_real
							)),
							(this.coords.p_to_real = this.calcWithStep(l)),
							(this.coords.p_to_real = this.checkDiapason(
								this.coords.p_to_real,
								this.options.to_min,
								this.options.to_max
							)),
							(this.coords.p_to_fake = this.convertToFakePercent(
								this.coords.p_to_real
							));
				}
				"single" === this.options.type
					? ((this.coords.p_bar_x = this.coords.p_handle / 2),
					  (this.coords.p_bar_w = this.coords.p_single_fake),
					  (this.result.from_percent = this.coords.p_single_real),
					  (this.result.from = this.convertToValue(
							this.coords.p_single_real
					  )),
					  (this.result.from_pretty = this._prettify(
							this.result.from
					  )),
					  this.options.values.length &&
							(this.result.from_value = this.options.values[
								this.result.from
							]))
					: ((this.coords.p_bar_x = this.toFixed(
							this.coords.p_from_fake + this.coords.p_handle / 2
					  )),
					  (this.coords.p_bar_w = this.toFixed(
							this.coords.p_to_fake - this.coords.p_from_fake
					  )),
					  (this.result.from_percent = this.coords.p_from_real),
					  (this.result.from = this.convertToValue(
							this.coords.p_from_real
					  )),
					  (this.result.from_pretty = this._prettify(
							this.result.from
					  )),
					  (this.result.to_percent = this.coords.p_to_real),
					  (this.result.to = this.convertToValue(
							this.coords.p_to_real
					  )),
					  (this.result.to_pretty = this._prettify(this.result.to)),
					  this.options.values.length &&
							((this.result.from_value = this.options.values[
								this.result.from
							]),
							(this.result.to_value = this.options.values[
								this.result.to
							]))),
					this.calcMinMax(),
					this.calcLabels();
			}
		},
		calcPointerPercent: function () {
			this.coords.w_rs
				? (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer)
						? (this.coords.x_pointer = 0)
						: this.coords.x_pointer > this.coords.w_rs &&
						  (this.coords.x_pointer = this.coords.w_rs),
				  (this.coords.p_pointer = this.toFixed(
						(this.coords.x_pointer / this.coords.w_rs) * 100
				  )))
				: (this.coords.p_pointer = 0);
		},
		convertToRealPercent: function (t) {
			return (t / (100 - this.coords.p_handle)) * 100;
		},
		convertToFakePercent: function (t) {
			return (t / 100) * (100 - this.coords.p_handle);
		},
		getHandleX: function () {
			var t = 100 - this.coords.p_handle,
				i = this.toFixed(this.coords.p_pointer - this.coords.p_gap);
			return i < 0 ? (i = 0) : t < i && (i = t), i;
		},
		calcHandlePercent: function () {
			"single" === this.options.type
				? (this.coords.w_handle = this.$cache.s_single.outerWidth(!1))
				: (this.coords.w_handle = this.$cache.s_from.outerWidth(!1)),
				(this.coords.p_handle = this.toFixed(
					(this.coords.w_handle / this.coords.w_rs) * 100
				));
		},
		chooseHandle: function (t) {
			return "single" === this.options.type
				? "single"
				: this.coords.p_from_real +
						(this.coords.p_to_real - this.coords.p_from_real) / 2 <=
				  t
				? this.options.to_fixed
					? "from"
					: "to"
				: this.options.from_fixed
				? "to"
				: "from";
		},
		calcMinMax: function () {
			this.coords.w_rs &&
				((this.labels.p_min =
					(this.labels.w_min / this.coords.w_rs) * 100),
				(this.labels.p_max =
					(this.labels.w_max / this.coords.w_rs) * 100));
		},
		calcLabels: function () {
			this.coords.w_rs &&
				!this.options.hide_from_to &&
				("single" === this.options.type
					? ((this.labels.w_single = this.$cache.single.outerWidth(
							!1
					  )),
					  (this.labels.p_single_fake =
							(this.labels.w_single / this.coords.w_rs) * 100),
					  (this.labels.p_single_left =
							this.coords.p_single_fake +
							this.coords.p_handle / 2 -
							this.labels.p_single_fake / 2))
					: ((this.labels.w_from = this.$cache.from.outerWidth(!1)),
					  (this.labels.p_from_fake =
							(this.labels.w_from / this.coords.w_rs) * 100),
					  (this.labels.p_from_left =
							this.coords.p_from_fake +
							this.coords.p_handle / 2 -
							this.labels.p_from_fake / 2),
					  (this.labels.p_from_left = this.toFixed(
							this.labels.p_from_left
					  )),
					  (this.labels.p_from_left = this.checkEdges(
							this.labels.p_from_left,
							this.labels.p_from_fake
					  )),
					  (this.labels.w_to = this.$cache.to.outerWidth(!1)),
					  (this.labels.p_to_fake =
							(this.labels.w_to / this.coords.w_rs) * 100),
					  (this.labels.p_to_left =
							this.coords.p_to_fake +
							this.coords.p_handle / 2 -
							this.labels.p_to_fake / 2),
					  (this.labels.p_to_left = this.toFixed(
							this.labels.p_to_left
					  )),
					  (this.labels.p_to_left = this.checkEdges(
							this.labels.p_to_left,
							this.labels.p_to_fake
					  )),
					  (this.labels.w_single = this.$cache.single.outerWidth(
							!1
					  )),
					  (this.labels.p_single_fake =
							(this.labels.w_single / this.coords.w_rs) * 100),
					  (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),
					  (this.labels.p_single_left = this.toFixed(
							this.labels.p_single_left
					  ))),
				(this.labels.p_single_left = this.checkEdges(
					this.labels.p_single_left,
					this.labels.p_single_fake
				)));
		},
		updateScene: function () {
			this.raf_id &&
				(cancelAnimationFrame(this.raf_id), (this.raf_id = null)),
				clearTimeout(this.update_tm),
				(this.update_tm = null),
				this.options &&
					(this.drawHandles(),
					this.is_active
						? (this.raf_id = requestAnimationFrame(
								this.updateScene.bind(this)
						  ))
						: (this.update_tm = setTimeout(
								this.updateScene.bind(this),
								300
						  )));
		},
		drawHandles: function () {
			(this.coords.w_rs = this.$cache.rs.outerWidth(!1)),
				this.coords.w_rs &&
					(this.coords.w_rs !== this.coords.w_rs_old &&
						((this.target = "base"), (this.is_resize = !0)),
					(this.coords.w_rs !== this.coords.w_rs_old ||
						this.force_redraw) &&
						(this.setMinMax(),
						this.calc(!0),
						this.drawLabels(),
						this.options.grid &&
							(this.calcGridMargin(), this.calcGridLabels()),
						(this.force_redraw = !0),
						(this.coords.w_rs_old = this.coords.w_rs),
						this.drawShadow()),
					this.coords.w_rs &&
						(this.dragging || this.force_redraw || this.is_key) &&
						((this.old_from !== this.result.from ||
							this.old_to !== this.result.to ||
							this.force_redraw ||
							this.is_key) &&
							(this.drawLabels(),
							(this.$cache.bar[0].style.left =
								this.coords.p_bar_x + "%"),
							(this.$cache.bar[0].style.width =
								this.coords.p_bar_w + "%"),
							"single" === this.options.type
								? ((this.$cache.bar[0].style.left = 0),
								  (this.$cache.bar[0].style.width =
										this.coords.p_bar_w +
										this.coords.p_bar_x +
										"%"),
								  (this.$cache.s_single[0].style.left =
										this.coords.p_single_fake + "%"))
								: ((this.$cache.s_from[0].style.left =
										this.coords.p_from_fake + "%"),
								  (this.$cache.s_to[0].style.left =
										this.coords.p_to_fake + "%"),
								  (this.old_from !== this.result.from ||
										this.force_redraw) &&
										(this.$cache.from[0].style.left =
											this.labels.p_from_left + "%"),
								  (this.old_to !== this.result.to ||
										this.force_redraw) &&
										(this.$cache.to[0].style.left =
											this.labels.p_to_left + "%")),
							(this.$cache.single[0].style.left =
								this.labels.p_single_left + "%"),
							this.writeToInput(),
							(this.old_from === this.result.from &&
								this.old_to === this.result.to) ||
								this.is_start ||
								(this.$cache.input.trigger("change"),
								this.$cache.input.trigger("input")),
							(this.old_from = this.result.from),
							(this.old_to = this.result.to),
							this.is_resize ||
								this.is_update ||
								this.is_start ||
								this.is_finish ||
								this.callOnChange(),
							(this.is_key || this.is_click) &&
								((this.is_key = !1),
								(this.is_click = !1),
								this.callOnFinish()),
							(this.is_update = !1),
							(this.is_resize = !1),
							(this.is_finish = !1)),
						(this.is_start = !1),
						(this.is_key = !1),
						(this.is_click = !1),
						(this.force_redraw = !1)));
		},
		drawLabels: function () {
			if (this.options) {
				var t,
					i,
					s,
					o,
					e,
					h = this.options.values.length,
					r = this.options.p_values;
				if (!this.options.hide_from_to)
					if ("single" === this.options.type)
						(t = h
							? this.decorate(r[this.result.from])
							: ((o = this._prettify(this.result.from)),
							  this.decorate(o, this.result.from))),
							this.$cache.single.html(t),
							this.calcLabels(),
							this.labels.p_single_left < this.labels.p_min + 1
								? (this.$cache.min[0].style.visibility =
										"hidden")
								: (this.$cache.min[0].style.visibility =
										"visible"),
							this.labels.p_single_left +
								this.labels.p_single_fake >
							100 - this.labels.p_max - 1
								? (this.$cache.max[0].style.visibility =
										"hidden")
								: (this.$cache.max[0].style.visibility =
										"visible");
					else {
						(s = h
							? (this.options.decorate_both
									? ((t = this.decorate(r[this.result.from])),
									  (t += this.options.values_separator),
									  (t += this.decorate(r[this.result.to])))
									: (t = this.decorate(
											r[this.result.from] +
												this.options.values_separator +
												r[this.result.to]
									  )),
							  (i = this.decorate(r[this.result.from])),
							  this.decorate(r[this.result.to]))
							: ((o = this._prettify(this.result.from)),
							  (e = this._prettify(this.result.to)),
							  this.options.decorate_both
									? ((t = this.decorate(o, this.result.from)),
									  (t += this.options.values_separator),
									  (t += this.decorate(e, this.result.to)))
									: (t = this.decorate(
											o +
												this.options.values_separator +
												e,
											this.result.to
									  )),
							  (i = this.decorate(o, this.result.from)),
							  this.decorate(e, this.result.to))),
							this.$cache.single.html(t),
							this.$cache.from.html(i),
							this.$cache.to.html(s),
							this.calcLabels();
						var n = Math.min(
								this.labels.p_single_left,
								this.labels.p_from_left
							),
							a =
								this.labels.p_single_left +
								this.labels.p_single_fake,
							c = this.labels.p_to_left + this.labels.p_to_fake,
							l = Math.max(a, c);
						this.labels.p_from_left + this.labels.p_from_fake >=
						this.labels.p_to_left
							? ((this.$cache.from[0].style.visibility =
									"hidden"),
							  (this.$cache.to[0].style.visibility = "hidden"),
							  (this.$cache.single[0].style.visibility =
									"visible"),
							  (l =
									this.result.from === this.result.to
										? ("from" === this.target
												? (this.$cache.from[0].style.visibility =
														"visible")
												: "to" === this.target
												? (this.$cache.to[0].style.visibility =
														"visible")
												: this.target ||
												  (this.$cache.from[0].style.visibility =
														"visible"),
										  (this.$cache.single[0].style.visibility =
												"hidden"),
										  c)
										: ((this.$cache.from[0].style.visibility =
												"hidden"),
										  (this.$cache.to[0].style.visibility =
												"hidden"),
										  (this.$cache.single[0].style.visibility =
												"visible"),
										  Math.max(a, c))))
							: ((this.$cache.from[0].style.visibility =
									"visible"),
							  (this.$cache.to[0].style.visibility = "visible"),
							  (this.$cache.single[0].style.visibility =
									"hidden")),
							n < this.labels.p_min + 1
								? (this.$cache.min[0].style.visibility =
										"hidden")
								: (this.$cache.min[0].style.visibility =
										"visible"),
							l > 100 - this.labels.p_max - 1
								? (this.$cache.max[0].style.visibility =
										"hidden")
								: (this.$cache.max[0].style.visibility =
										"visible");
					}
			}
		},
		drawShadow: function () {
			var t,
				i,
				s,
				o,
				e = this.options,
				h = this.$cache,
				r = "number" == typeof e.from_min && !isNaN(e.from_min),
				n = "number" == typeof e.from_max && !isNaN(e.from_max),
				a = "number" == typeof e.to_min && !isNaN(e.to_min),
				c = "number" == typeof e.to_max && !isNaN(e.to_max);
			"single" === e.type
				? e.from_shadow && (r || n)
					? ((t = this.convertToPercent(r ? e.from_min : e.min)),
					  (i = this.convertToPercent(n ? e.from_max : e.max) - t),
					  (t = this.toFixed(t - (this.coords.p_handle / 100) * t)),
					  (i = this.toFixed(i - (this.coords.p_handle / 100) * i)),
					  (t += this.coords.p_handle / 2),
					  (h.shad_single[0].style.display = "block"),
					  (h.shad_single[0].style.left = t + "%"),
					  (h.shad_single[0].style.width = i + "%"))
					: (h.shad_single[0].style.display = "none")
				: (e.from_shadow && (r || n)
						? ((t = this.convertToPercent(r ? e.from_min : e.min)),
						  (i =
								this.convertToPercent(n ? e.from_max : e.max) -
								t),
						  (t = this.toFixed(
								t - (this.coords.p_handle / 100) * t
						  )),
						  (i = this.toFixed(
								i - (this.coords.p_handle / 100) * i
						  )),
						  (t += this.coords.p_handle / 2),
						  (h.shad_from[0].style.display = "block"),
						  (h.shad_from[0].style.left = t + "%"),
						  (h.shad_from[0].style.width = i + "%"))
						: (h.shad_from[0].style.display = "none"),
				  e.to_shadow && (a || c)
						? ((s = this.convertToPercent(a ? e.to_min : e.min)),
						  (o = this.convertToPercent(c ? e.to_max : e.max) - s),
						  (s = this.toFixed(
								s - (this.coords.p_handle / 100) * s
						  )),
						  (o = this.toFixed(
								o - (this.coords.p_handle / 100) * o
						  )),
						  (s += this.coords.p_handle / 2),
						  (h.shad_to[0].style.display = "block"),
						  (h.shad_to[0].style.left = s + "%"),
						  (h.shad_to[0].style.width = o + "%"))
						: (h.shad_to[0].style.display = "none"));
		},
		writeToInput: function () {
			"single" === this.options.type
				? (this.options.values.length
						? this.$cache.input.prop(
								"value",
								this.result.from_value
						  )
						: this.$cache.input.prop("value", this.result.from),
				  this.$cache.input.data("from", this.result.from))
				: (this.options.values.length
						? this.$cache.input.prop(
								"value",
								this.result.from_value +
									this.options.input_values_separator +
									this.result.to_value
						  )
						: this.$cache.input.prop(
								"value",
								this.result.from +
									this.options.input_values_separator +
									this.result.to
						  ),
				  this.$cache.input.data("from", this.result.from),
				  this.$cache.input.data("to", this.result.to));
		},
		callOnStart: function () {
			this.writeToInput(),
				this.options.onStart &&
					"function" == typeof this.options.onStart &&
					(this.options.scope
						? this.options.onStart.call(
								this.options.scope,
								this.result
						  )
						: this.options.onStart(this.result));
		},
		callOnChange: function () {
			this.writeToInput(),
				this.options.onChange &&
					"function" == typeof this.options.onChange &&
					(this.options.scope
						? this.options.onChange.call(
								this.options.scope,
								this.result
						  )
						: this.options.onChange(this.result));
		},
		callOnFinish: function () {
			this.writeToInput(),
				this.options.onFinish &&
					"function" == typeof this.options.onFinish &&
					(this.options.scope
						? this.options.onFinish.call(
								this.options.scope,
								this.result
						  )
						: this.options.onFinish(this.result));
		},
		callOnUpdate: function () {
			this.writeToInput(),
				this.options.onUpdate &&
					"function" == typeof this.options.onUpdate &&
					(this.options.scope
						? this.options.onUpdate.call(
								this.options.scope,
								this.result
						  )
						: this.options.onUpdate(this.result));
		},
		toggleInput: function () {
			this.$cache.input.toggleClass("irs-hidden-input"),
				this.has_tab_index
					? this.$cache.input.prop("tabindex", -1)
					: this.$cache.input.removeProp("tabindex"),
				(this.has_tab_index = !this.has_tab_index);
		},
		convertToPercent: function (t, i) {
			var s,
				o = this.options.max - this.options.min,
				e = o / 100;
			return o
				? ((s = (i ? t : t - this.options.min) / e), this.toFixed(s))
				: ((this.no_diapason = !0), 0);
		},
		convertToValue: function (t) {
			var i,
				s,
				o = this.options.min,
				e = this.options.max,
				h = o.toString().split(".")[1],
				r = e.toString().split(".")[1],
				n = 0,
				a = 0;
			if (0 === t) return this.options.min;
			if (100 === t) return this.options.max;
			h && (n = i = h.length),
				r && (n = s = r.length),
				i && s && (n = s <= i ? i : s),
				o < 0 &&
					((o = +(o + (a = Math.abs(o))).toFixed(n)),
					(e = +(e + a).toFixed(n)));
			var c,
				l = ((e - o) / 100) * t + o,
				_ = this.options.step.toString().split(".")[1];
			return (
				(l = _
					? +l.toFixed(_.length)
					: ((l /= this.options.step),
					  +(l *= this.options.step).toFixed(0))),
				a && (l -= a),
				(c = _ ? +l.toFixed(_.length) : this.toFixed(l)) <
				this.options.min
					? (c = this.options.min)
					: c > this.options.max && (c = this.options.max),
				c
			);
		},
		calcWithStep: function (t) {
			var i = Math.round(t / this.coords.p_step) * this.coords.p_step;
			return (
				100 < i && (i = 100), 100 === t && (i = 100), this.toFixed(i)
			);
		},
		checkMinInterval: function (t, i, s) {
			var o,
				e,
				h = this.options;
			return h.min_interval
				? ((o = this.convertToValue(t)),
				  (e = this.convertToValue(i)),
				  "from" === s
						? e - o < h.min_interval && (o = e - h.min_interval)
						: o - e < h.min_interval && (o = e + h.min_interval),
				  this.convertToPercent(o))
				: t;
		},
		checkMaxInterval: function (t, i, s) {
			var o,
				e,
				h = this.options;
			return h.max_interval
				? ((o = this.convertToValue(t)),
				  (e = this.convertToValue(i)),
				  "from" === s
						? e - o > h.max_interval && (o = e - h.max_interval)
						: o - e > h.max_interval && (o = e + h.max_interval),
				  this.convertToPercent(o))
				: t;
		},
		checkDiapason: function (t, i, s) {
			var o = this.convertToValue(t),
				e = this.options;
			return (
				"number" != typeof i && (i = e.min),
				"number" != typeof s && (s = e.max),
				o < i && (o = i),
				s < o && (o = s),
				this.convertToPercent(o)
			);
		},
		toFixed: function (t) {
			return +(t = t.toFixed(20));
		},
		_prettify: function (t) {
			return this.options.prettify_enabled
				? this.options.prettify &&
				  "function" == typeof this.options.prettify
					? this.options.prettify(t)
					: this.prettify(t)
				: t;
		},
		prettify: function (t) {
			return t
				.toString()
				.replace(
					/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,
					"$1" + this.options.prettify_separator
				);
		},
		checkEdges: function (t, i) {
			return (
				this.options.force_edges &&
					(t < 0 ? (t = 0) : 100 - i < t && (t = 100 - i)),
				this.toFixed(t)
			);
		},
		validate: function () {
			var t,
				i,
				s = this.options,
				o = this.result,
				e = s.values,
				h = e.length;
			if (
				("string" == typeof s.min && (s.min = +s.min),
				"string" == typeof s.max && (s.max = +s.max),
				"string" == typeof s.from && (s.from = +s.from),
				"string" == typeof s.to && (s.to = +s.to),
				"string" == typeof s.step && (s.step = +s.step),
				"string" == typeof s.from_min && (s.from_min = +s.from_min),
				"string" == typeof s.from_max && (s.from_max = +s.from_max),
				"string" == typeof s.to_min && (s.to_min = +s.to_min),
				"string" == typeof s.to_max && (s.to_max = +s.to_max),
				"string" == typeof s.grid_num && (s.grid_num = +s.grid_num),
				s.max < s.min && (s.max = s.min),
				h)
			)
				for (
					s.p_values = [],
						s.min = 0,
						s.max = h - 1,
						s.step = 1,
						s.grid_num = s.max,
						s.grid_snap = !0,
						i = 0;
					i < h;
					i++
				)
					(t = +e[i]),
						(t = isNaN(t) ? e[i] : ((e[i] = t), this._prettify(t))),
						s.p_values.push(t);
			("number" != typeof s.from || isNaN(s.from)) && (s.from = s.min),
				("number" != typeof s.to || isNaN(s.to)) && (s.to = s.max),
				"single" === s.type
					? (s.from < s.min && (s.from = s.min),
					  s.from > s.max && (s.from = s.max))
					: (s.from < s.min && (s.from = s.min),
					  s.from > s.max && (s.from = s.max),
					  s.to < s.min && (s.to = s.min),
					  s.to > s.max && (s.to = s.max),
					  this.update_check.from &&
							(this.update_check.from !== s.from &&
								s.from > s.to &&
								(s.from = s.to),
							this.update_check.to !== s.to &&
								s.to < s.from &&
								(s.to = s.from)),
					  s.from > s.to && (s.from = s.to),
					  s.to < s.from && (s.to = s.from)),
				("number" != typeof s.step ||
					isNaN(s.step) ||
					!s.step ||
					s.step < 0) &&
					(s.step = 1),
				"number" == typeof s.from_min &&
					s.from < s.from_min &&
					(s.from = s.from_min),
				"number" == typeof s.from_max &&
					s.from > s.from_max &&
					(s.from = s.from_max),
				"number" == typeof s.to_min &&
					s.to < s.to_min &&
					(s.to = s.to_min),
				"number" == typeof s.to_max &&
					s.from > s.to_max &&
					(s.to = s.to_max),
				o &&
					(o.min !== s.min && (o.min = s.min),
					o.max !== s.max && (o.max = s.max),
					(o.from < o.min || o.from > o.max) && (o.from = s.from),
					(o.to < o.min || o.to > o.max) && (o.to = s.to)),
				("number" != typeof s.min_interval ||
					isNaN(s.min_interval) ||
					!s.min_interval ||
					s.min_interval < 0) &&
					(s.min_interval = 0),
				("number" != typeof s.max_interval ||
					isNaN(s.max_interval) ||
					!s.max_interval ||
					s.max_interval < 0) &&
					(s.max_interval = 0),
				s.min_interval &&
					s.min_interval > s.max - s.min &&
					(s.min_interval = s.max - s.min),
				s.max_interval &&
					s.max_interval > s.max - s.min &&
					(s.max_interval = s.max - s.min);
		},
		decorate: function (t, i) {
			var s = "",
				o = this.options;
			return (
				o.prefix && (s += o.prefix),
				(s += t),
				o.max_postfix &&
					(o.values.length && t === o.p_values[o.max]
						? ((s += o.max_postfix), o.postfix && (s += " "))
						: i === o.max &&
						  ((s += o.max_postfix), o.postfix && (s += " "))),
				o.postfix && (s += o.postfix),
				s
			);
		},
		updateFrom: function () {
			(this.result.from = this.options.from),
				(this.result.from_percent = this.convertToPercent(
					this.result.from
				)),
				(this.result.from_pretty = this._prettify(this.result.from)),
				this.options.values &&
					(this.result.from_value = this.options.values[
						this.result.from
					]);
		},
		updateTo: function () {
			(this.result.to = this.options.to),
				(this.result.to_percent = this.convertToPercent(
					this.result.to
				)),
				(this.result.to_pretty = this._prettify(this.result.to)),
				this.options.values &&
					(this.result.to_value = this.options.values[
						this.result.to
					]);
		},
		updateResult: function () {
			(this.result.min = this.options.min),
				(this.result.max = this.options.max),
				this.updateFrom(),
				this.updateTo();
		},
		appendGrid: function () {
			if (this.options.grid) {
				var t,
					i,
					s,
					o,
					e,
					h,
					r = this.options,
					n = r.max - r.min,
					a = r.grid_num,
					c = 0,
					l = 4,
					_ = "";
				for (
					this.calcGridMargin(),
						r.grid_snap && (a = n / r.step),
						50 < a && (a = 50),
						s = this.toFixed(100 / a),
						4 < a && (l = 3),
						7 < a && (l = 2),
						14 < a && (l = 1),
						28 < a && (l = 0),
						t = 0;
					t < a + 1;
					t++
				) {
					for (
						o = l,
							100 < (c = this.toFixed(s * t)) && (c = 100),
							e =
								((this.coords.big[t] = c) - s * (t - 1)) /
								(o + 1),
							i = 1;
						i <= o && 0 !== c;
						i++
					)
						_ +=
							'<span class="irs-grid-pol small" style="left: ' +
							this.toFixed(c - e * i) +
							'%"></span>';
					(_ +=
						'<span class="irs-grid-pol" style="left: ' +
						c +
						'%"></span>'),
						(h = this.convertToValue(c)),
						(_ +=
							'<span class="irs-grid-text js-grid-text-' +
							t +
							'" style="left: ' +
							c +
							'%">' +
							(h = r.values.length
								? r.p_values[h]
								: this._prettify(h)) +
							"</span>");
				}
				(this.coords.big_num = Math.ceil(a + 1)),
					this.$cache.cont.addClass("irs-with-grid"),
					this.$cache.grid.html(_),
					this.cacheGridLabels();
			}
		},
		cacheGridLabels: function () {
			var t,
				i,
				s = this.coords.big_num;
			for (i = 0; i < s; i++)
				(t = this.$cache.grid.find(".js-grid-text-" + i)),
					this.$cache.grid_labels.push(t);
			this.calcGridLabels();
		},
		calcGridLabels: function () {
			var t,
				i,
				s = [],
				o = [],
				e = this.coords.big_num;
			for (t = 0; t < e; t++)
				(this.coords.big_w[t] = this.$cache.grid_labels[t].outerWidth(
					!1
				)),
					(this.coords.big_p[t] = this.toFixed(
						(this.coords.big_w[t] / this.coords.w_rs) * 100
					)),
					(this.coords.big_x[t] = this.toFixed(
						this.coords.big_p[t] / 2
					)),
					(s[t] = this.toFixed(
						this.coords.big[t] - this.coords.big_x[t]
					)),
					(o[t] = this.toFixed(s[t] + this.coords.big_p[t]));
			for (
				this.options.force_edges &&
					(s[0] < -this.coords.grid_gap &&
						((s[0] = -this.coords.grid_gap),
						(o[0] = this.toFixed(s[0] + this.coords.big_p[0])),
						(this.coords.big_x[0] = this.coords.grid_gap)),
					o[e - 1] > 100 + this.coords.grid_gap &&
						((o[e - 1] = 100 + this.coords.grid_gap),
						(s[e - 1] = this.toFixed(
							o[e - 1] - this.coords.big_p[e - 1]
						)),
						(this.coords.big_x[e - 1] = this.toFixed(
							this.coords.big_p[e - 1] - this.coords.grid_gap
						)))),
					this.calcGridCollision(2, s, o),
					this.calcGridCollision(4, s, o),
					t = 0;
				t < e;
				t++
			)
				(i = this.$cache.grid_labels[t][0]),
					this.coords.big_x[t] !== Number.POSITIVE_INFINITY &&
						(i.style.marginLeft = -this.coords.big_x[t] + "%");
		},
		calcGridCollision: function (t, i, s) {
			var o,
				e,
				h,
				r = this.coords.big_num;
			for (o = 0; o < r && !(r <= (e = o + t / 2)); o += t)
				(h = this.$cache.grid_labels[e][0]),
					s[o] <= i[e]
						? (h.style.visibility = "visible")
						: (h.style.visibility = "hidden");
		},
		calcGridMargin: function () {
			this.options.grid_margin &&
				((this.coords.w_rs = this.$cache.rs.outerWidth(!1)),
				this.coords.w_rs &&
					("single" === this.options.type
						? (this.coords.w_handle = this.$cache.s_single.outerWidth(
								!1
						  ))
						: (this.coords.w_handle = this.$cache.s_from.outerWidth(
								!1
						  )),
					(this.coords.p_handle = this.toFixed(
						(this.coords.w_handle / this.coords.w_rs) * 100
					)),
					(this.coords.grid_gap = this.toFixed(
						this.coords.p_handle / 2 - 0.1
					)),
					(this.$cache.grid[0].style.width =
						this.toFixed(100 - this.coords.p_handle) + "%"),
					(this.$cache.grid[0].style.left =
						this.coords.grid_gap + "%")));
		},
		update: function (t) {
			this.input &&
				((this.is_update = !0),
				(this.options.from = this.result.from),
				(this.options.to = this.result.to),
				(this.update_check.from = this.result.from),
				(this.update_check.to = this.result.to),
				(this.options = a.extend(this.options, t)),
				this.validate(),
				this.updateResult(t),
				this.toggleInput(),
				this.remove(),
				this.init(!0));
		},
		reset: function () {
			this.input && (this.updateResult(), this.update());
		},
		destroy: function () {
			this.input &&
				(this.toggleInput(),
				this.$cache.input.prop("readonly", !1),
				a.data(this.input, "ionRangeSlider", null),
				this.remove(),
				(this.input = null),
				(this.options = null));
		},
	}),
		(a.fn.ionRangeSlider = function (t) {
			return this.each(function () {
				a.data(this, "ionRangeSlider") ||
					a.data(this, "ionRangeSlider", new h(this, t, o++));
			});
		}),
		(function () {
			for (
				var h = 0, t = ["ms", "moz", "webkit", "o"], i = 0;
				i < t.length && !l.requestAnimationFrame;
				++i
			)
				(l.requestAnimationFrame = l[t[i] + "RequestAnimationFrame"]),
					(l.cancelAnimationFrame =
						l[t[i] + "CancelAnimationFrame"] ||
						l[t[i] + "CancelRequestAnimationFrame"]);
			l.requestAnimationFrame ||
				(l.requestAnimationFrame = function (t, i) {
					var s = new Date().getTime(),
						o = Math.max(0, 16 - (s - h)),
						e = l.setTimeout(function () {
							t(s + o);
						}, o);
					return (h = s + o), e;
				}),
				l.cancelAnimationFrame ||
					(l.cancelAnimationFrame = function (t) {
						clearTimeout(t);
					});
		})();
});
