﻿/*! odometer 0.4.8 */
(function () {
    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G = [].slice;
    q = '<span class="odometer-value"></span>',
        n = '<span class="odometer-ribbon"><span class="odometer-ribbon-inner">' + q + "</span></span>",
        d = '<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner">' + n + "</span></span>",
        g = '<span class="odometer-formatting-mark"></span>',
        c = "(,ddd).dd",
        h = /^\(?([^)]*)\)?(?:(.)(d+))?$/,
        i = 30,
        f = 2e3,
        a = 20,
        j = 2,
        e = .5,
        k = 1e3 / i,
        b = 1e3 / a,
        o = "transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",
        y = document.createElement("div").style,
        p = null != y.transition || null != y.webkitTransition || null != y.mozTransition || null != y.oTransition,
        w = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame,
        l = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
        s = function (a) {
            var b;
            return b = document.createElement("div"),
                b.innerHTML = a,
                b.children[0]
        }
        ,
        v = function (a, b) {
            return a.className = a.className.replace(new RegExp("(^| )" + b.split(" ").join("|") + "( |$)", "gi"), " ")
        }
        ,
        r = function (a, b) {
            return v(a, b),
                a.className += " " + b
        }
        ,
        z = function (a, b) {
            var c;
            return null != document.createEvent ? (c = document.createEvent("HTMLEvents"),
                c.initEvent(b, !0, !0),
                a.dispatchEvent(c)) : void 0
        }
        ,
        u = function () {
            var a, b;
            return null != (a = null != (b = window.performance) && "function" == typeof b.now ? b.now() : void 0) ? a : +new Date
        }
        ,
        x = function (a, b) {
            return null == b && (b = 0),
                b ? (a *= Math.pow(10, b),
                    a += .5,
                    a = Math.floor(a),
                    a /= Math.pow(10, b)) : Math.round(a)
        }
        ,
        A = function (a) {
            return 0 > a ? Math.ceil(a) : Math.floor(a)
        }
        ,
        t = function (a) {
            return a - x(a)
        }
        ,
        C = !1,
        (B = function () {
            var a, b, c, d, e;
            if (!C && null != window.jQuery) {
                for (C = !0,
                    d = ["html", "text"],
                    e = [],
                    b = 0,
                    c = d.length; c > b; b++)
                    a = d[b],
                        e.push(function (a) {
                            var b;
                            return b = window.jQuery.fn[a],
                                window.jQuery.fn[a] = function (a) {
                                    var c;
                                    return null == a || null == (null != (c = this[0]) ? c.odometer : void 0) ? b.apply(this, arguments) : this[0].odometer.update(a)
                                }
                        }(a));
                return e
            }
        }
        )(),
        setTimeout(B, 0),
        m = function () {
            function a(b) {
                var c, d, e, g, h, i, l, m, n, o, p = this;
                if (this.options = b,
                    this.el = this.options.el,
                    null != this.el.odometer)
                    return this.el.odometer;
                this.el.odometer = this,
                    m = a.options;
                for (d in m)
                    g = m[d],
                        null == this.options[d] && (this.options[d] = g);
                null == (h = this.options).duration && (h.duration = f),
                    this.MAX_VALUES = this.options.duration / k / j | 0,
                    this.resetFormat(),
                    this.value = this.cleanValue(null != (n = this.options.value) ? n : ""),
                    this.renderInside(),
                    this.render();
                try {
                    for (o = ["innerHTML", "innerText", "textContent"],
                        i = 0,
                        l = o.length; l > i; i++)
                        e = o[i],
                            null != this.el[e] && !function (a) {
                                return Object.defineProperty(p.el, a, {
                                    get: function () {
                                        var b;
                                        return "innerHTML" === a ? p.inside.outerHTML : null != (b = p.inside.innerText) ? b : p.inside.textContent
                                    },
                                    set: function (a) {
                                        return p.update(a)
                                    }
                                })
                            }(e)
                } catch (q) {
                    c = q,
                        this.watchForMutations()
                }
            }
            return a.prototype.renderInside = function () {
                return this.inside = document.createElement("div"),
                    this.inside.className = "odometer-inside",
                    this.el.innerHTML = "",
                    this.el.appendChild(this.inside)
            }
                ,
                a.prototype.watchForMutations = function () {
                    var a, b = this;
                    if (null != l)
                        try {
                            return null == this.observer && (this.observer = new l(function (a) {
                                var c;
                                return c = b.el.innerText,
                                    b.renderInside(),
                                    b.render(b.value),
                                    b.update(c)
                            }
                            )),
                                this.watchMutations = !0,
                                this.startWatchingMutations()
                        } catch (c) {
                            a = c
                        }
                }
                ,
                a.prototype.startWatchingMutations = function () {
                    return this.watchMutations ? this.observer.observe(this.el, {
                        childList: !0
                    }) : void 0
                }
                ,
                a.prototype.stopWatchingMutations = function () {
                    var a;
                    return null != (a = this.observer) ? a.disconnect() : void 0
                }
                ,
                a.prototype.cleanValue = function (a) {
                    var b;
                    return "string" == typeof a && (a = a.replace(null != (b = this.format.radix) ? b : ".", "<radix>"),
                        a = a.replace(/[.,]/g, ""),
                        a = a.replace("<radix>", "."),
                        a = parseFloat(a, 10) || 0),
                        x(a, this.format.precision)
                }
                ,
                a.prototype.bindTransitionEnd = function () {
                    var a, b, c, d, e, f, g = this;
                    if (!this.transitionEndBound) {
                        for (this.transitionEndBound = !0,
                            b = !1,
                            e = o.split(" "),
                            f = [],
                            c = 0,
                            d = e.length; d > c; c++)
                            a = e[c],
                                f.push(this.el.addEventListener(a, function () {
                                    return b ? !0 : (b = !0,
                                        setTimeout(function () {
                                            return g.render(),
                                                b = !1,
                                                z(g.el, "odometerdone")
                                        }, 0),
                                        !0)
                                }, !1));
                        return f
                    }
                }
                ,
                a.prototype.resetFormat = function () {
                    var a, b, d, e, f, g, i, j;
                    if (a = null != (i = this.options.format) ? i : c,
                        a || (a = "d"),
                        d = h.exec(a),
                        !d)
                        throw new Error("Odometer: Unparsable digit format");
                    return j = d.slice(1, 4),
                        g = j[0],
                        f = j[1],
                        b = j[2],
                        e = (null != b ? b.length : void 0) || 0,
                        this.format = {
                            repeating: g,
                            radix: f,
                            precision: e
                        }
                }
                ,
                a.prototype.render = function (a) {
                    var b, c, d, e, f, g, h;
                    for (null == a && (a = this.value),
                        this.stopWatchingMutations(),
                        this.resetFormat(),
                        this.inside.innerHTML = "",
                        f = this.options.theme,
                        b = this.el.className.split(" "),
                        e = [],
                        g = 0,
                        h = b.length; h > g; g++)
                        c = b[g],
                            c.length && ((d = /^odometer-theme-(.+)$/.exec(c)) ? f = d[1] : /^odometer(-|$)/.test(c) || e.push(c));
                    return e.push("odometer"),
                        p || e.push("odometer-no-transitions"),
                        f ? e.push("odometer-theme-" + f) : e.push("odometer-auto-theme"),
                        this.el.className = e.join(" "),
                        this.ribbons = {},
                        this.formatDigits(a),
                        this.startWatchingMutations()
                }
                ,
                a.prototype.formatDigits = function (a) {
                    var b, c, d, e, f, g, h, i, j, k;
                    if (this.digits = [],
                        this.options.formatFunction)
                        for (d = this.options.formatFunction(a),
                            j = d.split("").reverse(),
                            f = 0,
                            h = j.length; h > f; f++)
                            c = j[f],
                                c.match(/0-9/) ? (b = this.renderDigit(),
                                    b.querySelector(".odometer-value").innerHTML = c,
                                    this.digits.push(b),
                                    this.insertDigit(b)) : this.addSpacer(c);
                    else
                        for (e = !this.format.precision || !t(a) || !1,
                            k = a.toString().split("").reverse(),
                            g = 0,
                            i = k.length; i > g; g++)
                            b = k[g],
                                "." === b && (e = !0),
                                this.addDigit(b, e)
                }
                ,
                a.prototype.update = function (a) {
                    var b, c = this;
                    return a = this.cleanValue(a),
                        (b = a - this.value) ? (v(this.el, "odometer-animating-up odometer-animating-down odometer-animating"),
                            b > 0 ? r(this.el, "odometer-animating-up") : r(this.el, "odometer-animating-down"),
                            this.stopWatchingMutations(),
                            this.animate(a),
                            this.startWatchingMutations(),
                            setTimeout(function () {
                                return c.el.offsetHeight,
                                    r(c.el, "odometer-animating")
                            }, 0),
                            this.value = a) : void 0
                }
                ,
                a.prototype.renderDigit = function () {
                    return s(d)
                }
                ,
                a.prototype.insertDigit = function (a, b) {
                    return null != b ? this.inside.insertBefore(a, b) : this.inside.children.length ? this.inside.insertBefore(a, this.inside.children[0]) : this.inside.appendChild(a)
                }
                ,
                a.prototype.addSpacer = function (a, b, c) {
                    var d;
                    return d = s(g),
                        d.innerHTML = a,
                        c && r(d, c),
                        this.insertDigit(d, b)
                }
                ,
                a.prototype.addDigit = function (a, b) {
                    var c, d, e, f;
                    if (null == b && (b = !0),
                        "-" === a)
                        return this.addSpacer(a, null, "odometer-negation-mark");
                    if ("." === a)
                        return this.addSpacer(null != (f = this.format.radix) ? f : ".", null, "odometer-radix-mark");
                    if (b)
                        for (e = !1; ;) {
                            if (!this.format.repeating.length) {
                                if (e)
                                    throw new Error("Bad odometer format without digits");
                                this.resetFormat(),
                                    e = !0
                            }
                            if (c = this.format.repeating[this.format.repeating.length - 1],
                                this.format.repeating = this.format.repeating.substring(0, this.format.repeating.length - 1),
                                "d" === c)
                                break;
                            this.addSpacer(c)
                        }
                    return d = this.renderDigit(),
                        d.querySelector(".odometer-value").innerHTML = a,
                        this.digits.push(d),
                        this.insertDigit(d)
                }
                ,
                a.prototype.animate = function (a) {
                    return p && "count" !== this.options.animation ? this.animateSlide(a) : this.animateCount(a)
                }
                ,
                a.prototype.animateCount = function (a) {
                    var c, d, e, f, g, h = this;
                    if (d = +a - this.value)
                        return f = e = u(),
                            c = this.value,
                            (g = function () {
                                var i, j, k;
                                return u() - f > h.options.duration ? (h.value = a,
                                    h.render(),
                                    void z(h.el, "odometerdone")) : (i = u() - e,
                                        i > b && (e = u(),
                                            k = i / h.options.duration,
                                            j = d * k,
                                            c += j,
                                            h.render(Math.round(c))),
                                        null != w ? w(g) : setTimeout(g, b))
                            }
                            )()
                }
                ,
                a.prototype.getDigitCount = function () {
                    var a, b, c, d, e, f;
                    for (d = 1 <= arguments.length ? G.call(arguments, 0) : [],
                        a = e = 0,
                        f = d.length; f > e; a = ++e)
                        c = d[a],
                            d[a] = Math.abs(c);
                    return b = Math.max.apply(Math, d),
                        Math.ceil(Math.log(b + 1) / Math.log(10))
                }
                ,
                a.prototype.getFractionalDigitCount = function () {
                    var a, b, c, d, e, f, g;
                    for (e = 1 <= arguments.length ? G.call(arguments, 0) : [],
                        b = /^\-?\d*\.(\d*?)0*$/,
                        a = f = 0,
                        g = e.length; g > f; a = ++f)
                        d = e[a],
                            e[a] = d.toString(),
                            c = b.exec(e[a]),
                            null == c ? e[a] = 0 : e[a] = c[1].length;
                    return Math.max.apply(Math, e)
                }
                ,
                a.prototype.resetDigits = function () {
                    return this.digits = [],
                        this.ribbons = [],
                        this.inside.innerHTML = "",
                        this.resetFormat()
                }
                ,
                a.prototype.animateSlide = function (a) {
                    var b, c, d, f, g, h, i, j, k, l, m, n, o, p, q, s, t, u, v, w, x, y, z, B, C, D, E;
                    if (s = this.value,
                        j = this.getFractionalDigitCount(s, a),
                        j && (a *= Math.pow(10, j),
                            s *= Math.pow(10, j)),
                        d = a - s) {
                        for (this.bindTransitionEnd(),
                            f = this.getDigitCount(s, a),
                            g = [],
                            b = 0,
                            m = v = 0; f >= 0 ? f > v : v > f; m = f >= 0 ? ++v : --v) {
                            if (t = A(s / Math.pow(10, f - m - 1)),
                                i = A(a / Math.pow(10, f - m - 1)),
                                h = i - t,
                                Math.abs(h) > this.MAX_VALUES) {
                                for (l = [],
                                    n = h / (this.MAX_VALUES + this.MAX_VALUES * b * e),
                                    c = t; h > 0 && i > c || 0 > h && c > i;)
                                    l.push(Math.round(c)),
                                        c += n;
                                l[l.length - 1] !== i && l.push(i),
                                    b++
                            } else
                                l = function () {
                                    E = [];
                                    for (var a = t; i >= t ? i >= a : a >= i; i >= t ? a++ : a--)
                                        E.push(a);
                                    return E
                                }
                                    .apply(this);
                            for (m = w = 0,
                                y = l.length; y > w; m = ++w)
                                k = l[m],
                                    l[m] = Math.abs(k % 10);
                            g.push(l)
                        }
                        for (this.resetDigits(),
                            D = g.reverse(),
                            m = x = 0,
                            z = D.length; z > x; m = ++x)
                            for (l = D[m],
                                this.digits[m] || this.addDigit(" ", m >= j),
                                null == (u = this.ribbons)[m] && (u[m] = this.digits[m].querySelector(".odometer-ribbon-inner")),
                                this.ribbons[m].innerHTML = "",
                                0 > d && (l = l.reverse()),
                                o = C = 0,
                                B = l.length; B > C; o = ++C)
                                k = l[o],
                                    q = document.createElement("div"),
                                    q.className = "odometer-value",
                                    q.innerHTML = k,
                                    this.ribbons[m].appendChild(q),
                                    o === l.length - 1 && r(q, "odometer-last-value"),
                                    0 === o && r(q, "odometer-first-value");
                        return 0 > t && this.addDigit("-"),
                            p = this.inside.querySelector(".odometer-radix-mark"),
                            null != p && p.parent.removeChild(p),
                            j ? this.addSpacer(this.format.radix, this.digits[j - 1], "odometer-radix-mark") : void 0
                    }
                }
                ,
                a
        }(),
        m.options = null != (E = window.odometerOptions) ? E : {},
        setTimeout(function () {
            var a, b, c, d, e;
            if (window.odometerOptions) {
                d = window.odometerOptions,
                    e = [];
                for (a in d)
                    b = d[a],
                        e.push(null != (c = m.options)[a] ? (c = m.options)[a] : c[a] = b);
                return e
            }
        }, 0),
        m.init = function () {
            var a, b, c, d, e, f;
            if (null != document.querySelectorAll) {
                for (b = document.querySelectorAll(m.options.selector || ".odometer"),
                    f = [],
                    c = 0,
                    d = b.length; d > c; c++)
                    a = b[c],
                        f.push(a.odometer = new m({
                            el: a,
                            value: null != (e = a.innerText) ? e : a.textContent
                        }));
                return f
            }
        }
        ,
        null != (null != (F = document.documentElement) ? F.doScroll : void 0) && null != document.createEventObject ? (D = document.onreadystatechange,
            document.onreadystatechange = function () {
                return "complete" === document.readyState && m.options.auto !== !1 && m.init(),
                    null != D ? D.apply(this, arguments) : void 0
            }
        ) : document.addEventListener("DOMContentLoaded", function () {
            return m.options.auto !== !1 ? m.init() : void 0
        }, !1),
        "function" == typeof define && define.amd ? define([], function () {
            return m
        }) : "undefined" != typeof exports && null !== exports ? module.exports = m : window.Odometer = m
}
).call(this);
