﻿/*
jQuery UI Spinner 1.20

Copyright (c) 2009-2010 Brant Burnett
Dual licensed under the MIT or GPL Version 2 licenses.
*/
(function (j) {
    var s = "ui-state-active", l = j.ui.keyCode, C = l.UP, D = l.DOWN, t = l.RIGHT, E = l.LEFT, u = l.PAGE_UP, v = l.PAGE_DOWN, J = l.HOME, K = l.END, L = j.browser.msie, M = j.browser.mozilla ? "DOMMouseScroll" : "mousewheel", N = [C, D, t, E, u, v, J, K, l.BACKSPACE, l.DELETE, l.TAB], O; j.widget("ui.spinner", { options: { min: null, max: null, allowNull: false, group: "", point: ".", prefix: "", suffix: "", places: null, defaultStep: 1, largeStep: 10, mouseWheel: true, increment: "slow", className: null, showOn: "always", width: 16, upIconClass: "ui-icon-triangle-1-n", downIconClass: "ui-icon-triangle-1-s",
        format: function (a, b) { var d = /(\d+)(\d{3})/, g = (isNaN(a) ? 0 : Math.abs(a)).toFixed(b) + ""; for (g = g.replace(".", this.point); d.test(g) && this.group; g = g.replace(d, "$1" + this.group + "$2")); return (a < 0 ? "-" : "") + this.prefix + g + this.suffix }, parse: function (a) { if (this.group == ".") a = a.replace(".", ""); if (this.point != ".") a = a.replace(this.point, "."); return parseFloat(a.replace(/[^0-9\-\.]/g, "")) } 
    }, _create: function () {
        var a = this.element, b = a.attr("type"); if (!a.is("input") || b != "text" && b != "number") console.error("Invalid target for ui.spinner");
        else { this._procOptions(true); this._createButtons(a); a.is(":enabled") || this.disable() } 
    }, _createButtons: function (a) {
        function b(e) { return e == "auto" ? 0 : parseInt(e) } function d(e) { for (var h = 0; h < N.length; h++) if (N[h] == e) return true; return false } function g(e, h) { if (F) return false; var m = String.fromCharCode(h || e), o = c.options; if (m >= "0" && m <= "9" || m == "-") return false; if (c.places > 0 && m == o.point || m == o.group) return false; return true } function i(e) {
            function h() { w = 0; e() } if (w) { if (e === P) return; clearTimeout(w) } P = e; w = setTimeout(h,
100)
        } function p() { if (!f.disabled) { var e = c.element[0], h = this === x ? 1 : -1; e.focus(); e.select(); j(this).addClass(s); G = true; c._startSpin(h) } return false } function q() { if (G) { j(this).removeClass(s); c._stopSpin(); G = false } return false } var c = this, f = c.options, r = f.className, y = f.width, n = f.showOn, H = j.support.boxModel, Q = a.outerHeight(), R = c.oMargin = b(a.css("margin-right")), I = c.wrapper = a.css({ width: (c.oWidth = H ? a.width() : a.outerWidth()) - y, marginRight: R + y, textAlign: "right" }).after('<span class="ui-spinner ui-widget"></span>').next(),
z = c.btnContainer = j('<div class="ui-spinner-buttons"><div class="ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr"><span class="ui-icon ' + f.upIconClass + '">&nbsp;</span></div><div class="ui-spinner-down ui-spinner-button ui-state-default ui-corner-br"><span class="ui-icon ' + f.downIconClass + '">&nbsp;</span></div></div>'), x, S, k, w, P, A, B, F, G, T = a[0].dir == "rtl"; r && I.addClass(r); I.append(z.css({ height: Q, left: -y - R, top: a.offset().top - I.offset().top + "px" })); k = c.buttons = z.find(".ui-spinner-button");
        k.css({ width: y - (H ? k.outerWidth() - k.width() : 0), height: Q / 2 - (H ? k.outerHeight() - k.height() : 0) }); x = k[0]; S = k[1]; r = k.find(".ui-icon"); r.css({ marginLeft: (k.innerWidth() - r.width()) / 2, marginTop: (k.innerHeight() - r.height()) / 2 }); z.width(k.outerWidth()); n != "always" && z.css("opacity", 0); if (n == "hover" || n == "both") k.add(a).bind("mouseenter.uispinner", function () { i(function () { A = true; if (!c.focused || n == "hover") c.showButtons() }) }).bind("mouseleave.uispinner", function () { i(function () { A = false; if (!c.focused || n == "hover") c.hideButtons() }) });
        k.hover(function () { c.buttons.removeClass("ui-state-hover"); f.disabled || j(this).addClass("ui-state-hover") }, function () { j(this).removeClass("ui-state-hover") }).mousedown(p).mouseup(q).mouseout(q); L && k.dblclick(function () { if (!f.disabled) { c._change(); c._doSpin((this === x ? 1 : -1) * f.step) } return false }).bind("selectstart", function () { return false }); a.bind("keydown.uispinner", function (e) {
            var h, m, o = e.keyCode; if (e.ctrl || e.alt) return true; if (d(o)) F = true; if (B) return false; switch (o) {
                case C: case u: h = 1; m = o == u; break;
                case D: case v: h = -1; m = o == v; break; case t: case E: h = o == t ^ T ? 1 : -1; break; case J: e = c.options.min; e != null && c._setValue(e); return false; case K: e = c.options.max; e != null && c._setValue(e); return false
            } if (h) { if (!B && !f.disabled) { keyDir = h; j(h > 0 ? x : S).addClass(s); B = true; c._startSpin(h, m) } return false } 
        }).bind("keyup.uispinner", function (e) { if (e.ctrl || e.alt) return true; if (d(l)) F = false; switch (e.keyCode) { case C: case t: case u: case D: case E: case v: k.removeClass(s); c._stopSpin(); return B = false } }).bind("keypress.uispinner", function (e) {
            if (g(e.keyCode,
e.charCode)) return false
        }).bind("change.uispinner", function () { c._change() }).bind("focus.uispinner", function () { function e() { c.element.select() } L ? e() : setTimeout(e, 0); c.focused = true; O = c; if (!A && (n == "focus" || n == "both")) c.showButtons() }).bind("blur.uispinner", function () { c.focused = false; if (!A && (n == "focus" || n == "both")) c.hideButtons() })
    }, _procOptions: function (a) {
        var b = this.element, d = this.options, g = d.min, i = d.max, p = d.step, q = d.places, c = -1, f; if (d.increment == "slow") d.increment = [{ count: 1, mult: 1, delay: 250 }, { count: 3,
            mult: 1, delay: 100
        }, { count: 0, mult: 1, delay: 50}]; else if (d.increment == "fast") d.increment = [{ count: 1, mult: 1, delay: 250 }, { count: 19, mult: 1, delay: 100 }, { count: 80, mult: 1, delay: 20 }, { count: 100, mult: 10, delay: 20 }, { count: 0, mult: 100, delay: 20}]; if (g == null && (f = b.attr("min")) != null) g = parseFloat(f); if (i == null && (f = b.attr("max")) != null) i = parseFloat(f); if (!p && (f = b.attr("step")) != null) if (f != "any") { p = parseFloat(f); d.largeStep *= p } d.step = p = p || d.defaultStep; if (q == null && (f = p + "").indexOf(".") != -1) q = f.length - f.indexOf(".") - 1; this.places =
q; if (i != null && g != null) { if (g > i) g = i; c = Math.max(Math.max(c, d.format(i, q, b).length), d.format(g, q, b).length) } if (a) this.inputMaxLength = b[0].maxLength; f = this.inputMaxLength; if (f > 0) { c = c > 0 ? Math.min(f, c) : f; f = Math.pow(10, c) - 1; if (i == null || i > f) i = f; f = -(f + 1) / 10 + 1; if (g == null || g < f) g = f } c > 0 && b.attr("maxlength", c); d.min = g; d.max = i; this._change(); b.unbind(M + ".uispinner"); d.mouseWheel && b.bind(M + ".uispinner", this._mouseWheel)
    }, _mouseWheel: function (a) {
        var b = j.data(this, "spinner"); if (!b.options.disabled && b.focused && O === b) {
            b._change();
            b._doSpin(((a.wheelDelta || -a.detail) > 0 ? 1 : -1) * b.options.step); return false
        } 
    }, _setTimer: function (a, b, d) { function g() { i._spin(b, d) } var i = this; i._stopSpin(); i.timer = setInterval(g, a) }, _stopSpin: function () { if (this.timer) { clearInterval(this.timer); this.timer = 0 } }, _startSpin: function (a, b) { var d = this.options.increment; this._change(); this._doSpin(a * (b ? this.options.largeStep : this.options.step)); if (d && d.length > 0) { this.incCounter = this.counter = 0; this._setTimer(d[0].delay, a, b) } }, _spin: function (a, b) {
        var d = this.options.increment,
g = d[this.incCounter]; this._doSpin(a * g.mult * (b ? this.options.largeStep : this.options.step)); this.counter++; if (this.counter > g.count && this.incCounter < d.length - 1) { this.counter = 0; g = d[++this.incCounter]; this._setTimer(g.delay, a, b) } 
    }, _doSpin: function (a) { var b = this.curvalue; if (b == null) b = (a > 0 ? this.options.min : this.options.max) || 0; this._setValue(b + a) }, _parseValue: function () { var a = this.element.val(); return a ? this.options.parse(a, this.element) : null }, _validate: function (a) {
        var b = this.options, d = b.min, g = b.max; if (a ==
null && !b.allowNull) a = this.curvalue != null ? this.curvalue : d || g || 0; return g != null && a > g ? g : d != null && a < d ? d : a
    }, _change: function () { var a = this._parseValue(); if (!this.selfChange) { if (isNaN(a)) a = this.curvalue; this._setValue(a, true) } }, _setOption: function (a, b) { j.Widget.prototype._setOption.call(this, a, b); this._procOptions() }, increment: function () { this._doSpin(this.options.step) }, decrement: function () { this._doSpin(-this.options.step) }, showButtons: function (a) {
        var b = this.btnContainer.stop(); a ? b.css("opacity", 1) : b.fadeTo("fast",
1)
    }, hideButtons: function (a) { var b = this.btnContainer.stop(); a ? b.css("opacity", 0) : b.fadeTo("fast", 0); this.buttons.removeClass("ui-state-hover") }, _setValue: function (a, b) { this.curvalue = a = this._validate(a); this.element.val(a != null ? this.options.format(a, this.places, this.element) : ""); if (!b) { this.selfChange = true; this.element.change(); this.selfChange = false } }, value: function (a) { if (arguments.length) { this._setValue(a); return this.element } return this.curvalue }, enable: function () {
        this.buttons.removeClass("ui-state-disabled");
        this.element[0].disabled = false; j.Widget.prototype.enable.call(this)
    }, disable: function () { this.buttons.addClass("ui-state-disabled").removeClass("ui-state-hover"); this.element[0].disabled = true; j.Widget.prototype.disable.call(this) }, destroy: function () { this.wrapper.remove(); this.element.unbind(".uispinner").css({ width: this.oWidth, marginRight: this.oMargin }); j.Widget.prototype.destroy.call(this) } 
    })
})(jQuery);
