(function (d) {
    d.widget("ui.slider", d.ui.mouse, {
        widgetEventPrefix: "slide",
        options: {
            animate: false,
            distance: 0,
            max: 100,
            min: 0,
            orientation: "horizontal",
            range: false,
            step: 1,
            value: 0,
            values: null,
            interval: false
        },
        _create: function () {
            var a = this,
                b = this.options;
            this._mouseSliding = this._keySliding = false;
            this._animateOff = true;
            this._handleIndex = null;
            this._detectOrientation();
            this._mouseInit();
            this.element.addClass("ui-slider ui-slider-" + this.orientation + " ui-widget ui-widget-content ui-corner-all");
            b.disabled && this.element.addClass("ui-slider-disabled ui-disabled");
            this.range = d([]);
            if (b.range) {
                if (b.range === true) {
                    this.range = d("<div></div>");
                    if (!b.values) b.values = [this._valueMin(), this._valueMin()];
                    if (b.values.length && b.values.length !== 2) b.values = [b.values[0], b.values[0]]
                } else this.range = d("<div></div>");
                this.range.appendTo(this.element).addClass("ui-slider-range");
                if (b.range === "min" || b.range === "max") this.range.addClass("ui-slider-range-" + b.range);
                this.range.addClass("ui-widget-header")
            }
            d(".ui-slider-handle", this.element).length === 0 && d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
            if (b.values && b.values.length) for (; d(".ui-slider-handle", this.element).length < b.values.length;) d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
            this.handles = d(".ui-slider-handle", this.element).addClass("ui-state-default ui-corner-all");
            this.handle = this.handles.eq(0);
            this.handles.add(this.range).filter("a").click(function (c) {
                c.preventDefault()
            }).hover(function () {
                b.disabled || d(this).addClass("ui-state-hover")
            }, function () {
                d(this).removeClass("ui-state-hover")
            }).focus(function () {
                if (b.disabled) d(this).blur();
                else {
                    d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");
                    d(this).addClass("ui-state-focus")
                }
            }).blur(function () {
                d(this).removeClass("ui-state-focus")
            });
            this.handles.each(function (c) {
                d(this).data("index.ui-slider-handle", c)
            });
            this.handles.keydown(function (c) {
                var e = true,
                    f = d(this).data("index.ui-slider-handle"),
                    h, g, i;
                if (!a.options.disabled) {
                    switch (c.keyCode) {
                    case d.ui.keyCode.HOME:
                    case d.ui.keyCode.END:
                    case d.ui.keyCode.PAGE_UP:
                    case d.ui.keyCode.PAGE_DOWN:
                    case d.ui.keyCode.UP:
                    case d.ui.keyCode.RIGHT:
                    case d.ui.keyCode.DOWN:
                    case d.ui.keyCode.LEFT:
                        e =
                        false;
                        if (!a._keySliding) {
                            a._keySliding = true;
                            d(this).addClass("ui-state-active");
                            h = a._start(c, f);
                            if (h === false) return
                        }
                        break
                    }
                    i = a.options.step;
                    h = a.options.values && a.options.values.length ? (g = a.values(f)) : (g = a.value());
                    switch (c.keyCode) {
                    case d.ui.keyCode.HOME:
                        g = a._valueMin();
                        break;
                    case d.ui.keyCode.END:
                        g = a._valueMax();
                        break;
                    case d.ui.keyCode.PAGE_UP:
                        g = a._trimAlignValue(h + (a._valueMax() - a._valueMin()) / 5);
                        break;
                    case d.ui.keyCode.PAGE_DOWN:
                        g = a._trimAlignValue(h - (a._valueMax() - a._valueMin()) / 5);
                        break;
                    case d.ui.keyCode.UP:
                    case d.ui.keyCode.RIGHT:
                        if (h === a._valueMax()) return;
                        g = a._trimAlignValue(h + i);
                        break;
                    case d.ui.keyCode.DOWN:
                    case d.ui.keyCode.LEFT:
                        if (h === a._valueMin()) return;
                        g = a._trimAlignValue(h - i);
                        break
                    }
                    a._slide(c, f, g);
                    return e
                }
            }).keyup(function (c) {
                var e = d(this).data("index.ui-slider-handle");
                if (a._keySliding) {
                    a._keySliding = false;
                    a._stop(c, e);
                    a._change(c, e);
                    d(this).removeClass("ui-state-active")
                }
            });
            this._refreshValue();
            this._animateOff = false
        },
        destroy: function () {
            this.handles.remove();
            this.range.remove();
            this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
            this._mouseDestroy();
            return this
        },
        _mouseCapture: function (a) {
            var b = this.options,
                c, e, f, h, g;
            if (b.disabled) return false;
            this.elementSize = {
                width: this.element.outerWidth(),
                height: this.element.outerHeight()
            };
            this.elementOffset = this.element.offset();
            c = this._normValueFromMouse({
                x: a.pageX,
                y: a.pageY
            });
            e = this._valueMax() - this._valueMin() + 1;
            h = this;
            this.handles.each(function (i) {
                var j = Math.abs(c - h.values(i));
                if (e > j) {
                    e = j;
                    f = d(this);
                    g = i
                }
            });
            if (b.range === true && this.values(1) === b.min) {
                g += 1;
                f = d(this.handles[g])
            }
            if (this._start(a, g) === false) return false;
            this._mouseSliding = true;
            h._handleIndex = g;
            f.addClass("ui-state-active").focus();
            b = f.offset();
            this._clickOffset = !d(a.target).parents().andSelf().is(".ui-slider-handle") ? {
                left: 0,
                top: 0
            } : {
                left: a.pageX - b.left - f.width() / 2,
                top: a.pageY - b.top - f.height() / 2 - (parseInt(f.css("borderTopWidth"), 10) || 0) - (parseInt(f.css("borderBottomWidth"), 10) || 0) + (parseInt(f.css("marginTop"), 10) || 0)
            };
            this._slide(a, g, c);
            return this._animateOff = true
        },
        _mouseStart: function () {
            return true
        },
        _mouseDrag: function (a) {
            var b =
            this._normValueFromMouse({
                x: a.pageX,
                y: a.pageY
            });
            this._slide(a, this._handleIndex, b);
            return false
        },
        _mouseStop: function (a) {
            this.handles.removeClass("ui-state-active");
            this._mouseSliding = false;
            this._stop(a, this._handleIndex);
            this._change(a, this._handleIndex);
            this._clickOffset = this._handleIndex = null;
            return this._animateOff = false
        },
        _detectOrientation: function () {
            this.orientation = this.options.orientation === "vertical" ? "vertical" : "horizontal"
        },
        _normValueFromMouse: function (a) {
            var b;
            if (this.orientation === "horizontal") {
                b =
                this.elementSize.width;
                a = a.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)
            } else {
                b = this.elementSize.height;
                a = a.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)
            }
            b = a / b;
            if (b > 1) b = 1;
            if (b < 0) b = 0;
            if (this.orientation === "vertical") b = 1 - b;
            a = this._valueMax() - this._valueMin();
            return this._trimAlignValue(this._valueMin() + b * a)
        },
        _start: function (a, b) {
            var c = {
                handle: this.handles[b],
                value: this.value()
            };
            if (this.options.values && this.options.values.length) {
                c.value = this.values(b);
                c.values = this.values()
            }
            return this._trigger("start", a, c)
        },
        _slide: function (a, b, c) {

        	if(this.options.interval) {
				if(c > 50 && c < 60) c = 60;
				if(c > 40 && c < 50) c = 50;
				if(c > 30 && c < 40) c = 40;
				if(c > 20 && c < 30) c = 30;
				if(c > 12 && c < 20) c = 20;
        	}

            var e;
            if (this.options.values && this.options.values.length) {
                e = this.values(b ? 0 : 1);
                if (this.options.values.length === 2 && this.options.range === true && (b === 0 && c > e || b === 1 && c < e)) c = e;
                if (c !== this.values(b)) {
                    e = this.values();
                    e[b] = c;
                    a = this._trigger("slide", a, {
                        handle: this.handles[b],
                        value: c,
                        values: e
                    });
                    this.values(b ? 0 : 1);
                    a !== false && this.values(b, c, true)
                }
            } else if (c !== this.value()) {
                a = this._trigger("slide", a, {
                    handle: this.handles[b],
                    value: c
                });
                a !== false && this.value(c)
            }
        },
        _stop: function (a, b) {
            var c = {
                handle: this.handles[b],
                value: this.value()
            };
            if (this.options.values && this.options.values.length) {
                c.value = this.values(b);
                c.values = this.values()
            }
            this._trigger("stop", a, c)
        },
        _change: function (a, b) {
            if (!this._keySliding && !this._mouseSliding) {
                var c = {
                    handle: this.handles[b],
                    value: this.value()
                };
                if (this.options.values && this.options.values.length) {
                    c.value = this.values(b);
                    c.values = this.values()
                }
                this._trigger("change", a, c)
            }
        },
        value: function (a) {
            if (arguments.length) {
                this.options.value =
                this._trimAlignValue(a);
                this._refreshValue();
                this._change(null, 0)
            }
            return this._value()
        },
        values: function (a, b) {
            var c, e, f;
            if (arguments.length > 1) {
                this.options.values[a] = this._trimAlignValue(b);
                this._refreshValue();
                this._change(null, a)
            }
            if (arguments.length) if (d.isArray(arguments[0])) {
                c = this.options.values;
                e = arguments[0];
                for (f = 0; f < c.length; f += 1) {
                    c[f] = this._trimAlignValue(e[f]);
                    this._change(null, f)
                }
                this._refreshValue()
            } else return this.options.values && this.options.values.length ? this._values(a) : this.value();
            else return this._values()
        },
        _setOption: function (a, b) {
            var c, e = 0;
            if (d.isArray(this.options.values)) e = this.options.values.length;
            d.Widget.prototype._setOption.apply(this, arguments);
            switch (a) {
            case "disabled":
                if (b) {
                    this.handles.filter(".ui-state-focus").blur();
                    this.handles.removeClass("ui-state-hover");
                    this.handles.attr("disabled", "disabled");
                    this.element.addClass("ui-disabled")
                } else {
                    this.handles.removeAttr("disabled");
                    this.element.removeClass("ui-disabled")
                }
                break;
            case "orientation":
                this._detectOrientation();
                this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation);
                this._refreshValue();
                break;
            case "value":
                this._animateOff = true;
                this._refreshValue();
                this._change(null, 0);
                this._animateOff = false;
                break;
            case "values":
                this._animateOff = true;
                this._refreshValue();
                for (c = 0; c < e; c += 1) this._change(null, c);
                this._animateOff = false;
                break
            }
        },
        _value: function () {
            var a = this.options.value;
            return a = this._trimAlignValue(a)
        },
        _values: function (a) {
            var b, c;
            if (arguments.length) {
                b = this.options.values[a];
                return b = this._trimAlignValue(b)
            } else {
                b = this.options.values.slice();
                for (c = 0; c < b.length; c += 1) b[c] = this._trimAlignValue(b[c]);
                return b
            }
        },
        _trimAlignValue: function (a) {
            if (a < this._valueMin()) return this._valueMin();
            if (a > this._valueMax()) return this._valueMax();
            var b = this.options.step > 0 ? this.options.step : 1,
                c = a % b;
            a = a - c;
            if (Math.abs(c) * 2 >= b) a += c > 0 ? b : -b;
            return parseFloat(a.toFixed(5))
        },
        _valueMin: function () {
            return this.options.min
        },
        _valueMax: function () {
            return this.options.max
        },
        _refreshValue: function () {
            var a =
            this.options.range,
                b = this.options,
                c = this,
                e = !this._animateOff ? b.animate : false,
                f, h = {},
                g, i, j, l;
            if (this.options.values && this.options.values.length) this.handles.each(function (k) {
                f = (c.values(k) - c._valueMin()) / (c._valueMax() - c._valueMin()) * 100;
                h[c.orientation === "horizontal" ? "left" : "bottom"] = f + "%";
                d(this).stop(1, 1)[e ? "animate" : "css"](h, b.animate);
                if (c.options.range === true) if (c.orientation === "horizontal") {
                    if (k === 0) c.range.stop(1, 1)[e ? "animate" : "css"]({
                        left: f + "%"
                    }, b.animate);
                    if (k === 1) c.range[e ? "animate" : "css"]({
                        width: f - g + "%"
                    }, {
                        queue: false,
                        duration: b.animate
                    })
                } else {
                    if (k === 0) c.range.stop(1, 1)[e ? "animate" : "css"]({
                        bottom: f + "%"
                    }, b.animate);
                    if (k === 1) c.range[e ? "animate" : "css"]({
                        height: f - g + "%"
                    }, {
                        queue: false,
                        duration: b.animate
                    })
                }
                g = f
            });
            else {
                i = this.value();
                j = this._valueMin();
                l = this._valueMax();
                f = l !== j ? (i - j) / (l - j) * 100 : 0;
                h[c.orientation === "horizontal" ? "left" : "bottom"] = f + "%";
                this.handle.stop(1, 1)[e ? "animate" : "css"](h, b.animate);
                if (a === "min" && this.orientation === "horizontal") this.range.stop(1, 1)[e ? "animate" : "css"]({
                    width: f + "%"
                }, b.animate);
                if (a === "max" && this.orientation === "horizontal") this.range[e ? "animate" : "css"]({
                    width: 100 - f + "%"
                }, {
                    queue: false,
                    duration: b.animate
                });
                if (a === "min" && this.orientation === "vertical") this.range.stop(1, 1)[e ? "animate" : "css"]({
                    height: f + "%"
                }, b.animate);
                if (a === "max" && this.orientation === "vertical") this.range[e ? "animate" : "css"]({
                    height: 100 - f + "%"
                }, {
                    queue: false,
                    duration: b.animate
                })
            }
        }
    });
    d.extend(d.ui.slider, {
        version: "1.8.5"
    })
})(jQuery);
