
if (typeof (ceemeagain) == 'undefined') window.ceemeagain = new Object();
if (typeof (ceemeagain.digitCounter) == 'undefined') {
    ceemeagain.digitCounter = {
        width: 23,
        height: 45,
        containerid: null,
        getRunlist: function(number1, number2) {
            var runlist = new Array();
            for (var i = this.position(number1); i >= this.position(number2); i -= this.height)
                runlist[runlist.length] = i;
            return runlist;
        },
        playItem: function(index, number1, number2, callback, speed) {
            var con = "div#" + this.containerid + "  div.digit-counter-number:eq(" + index + ")";
            var $con = $(con);
            var c = $con.find("div.digit-counter-image");
            if (number2 == undefined) number2 = number1;
            if ($con.length == 1) {
                var runlist = this.getRunlist(number1, number2);

                var a = 0;
                var sp = (runlist.length * 100 > 2000 ? 2200 : runlist.length * 100) / runlist.length;
                if (parseInt(speed) > -1) sp = speed / runlist.length;
                var runFunc = function() {
                    setTimeout(function() {
                        if (a >= runlist.length) { if (typeof (callback) === 'function') callback(); return; }
                        c.css({ marginTop: parseInt(runlist[a++]) + "px" });
                        runFunc();
                    }, sp);
                }

                runFunc();
            }
        },
        goto: function(index, number1, number2, callback) {
            var con = "div#" + this.containerid + "  div.digit-counter-number:eq(" + index + ")";
            var $con = $(con);
            if (number2 == undefined) number2 = number1;
            if ($con.length == 1) {

                if (number1 == number2) return;

                var c = $con.find("div.digit-counter-image");
                this.show(index, number1);


                $con.find("div.digit-counter-currentNo").html(number2);
                if (number1 < number2) {
                    this.playItem(index, number1, number2, callback);
                } else {
                    $this = this;
                    var runlist = this.getRunlist(number1, 10);
                    for (var b in this.getRunlist(0, number2))
                        runlist[runlist.length] = b;

                    var sp = (runlist.length * 100 > 2000 ? 2200 : runlist.length * 100) / runlist.length;
                    this.playItem(index, number1, 10, function() {
                        $this.playItem(index, 0, number2, callback, sp * number2 * 6);
                    }, sp * (10 - number1) * 6);
                }
            }
        },
        show: function(index, number) {
            var con = "div#" + this.containerid + "  div.digit-counter-number:eq(" + index + ")";
            var $con = $(con);
            if ($con.length == 1) {
                $con.find("div.digit-counter-currentNo").html(number);
                $con.find("div.digit-counter-image").css({ marginTop: this.position(number).toString() + "px" });
            }
        },
        position: function(number) {
            return (-(this.height * 6 * number));
        },


        _timeout: null,
        loadData: function(url, timeout) {
            if (this._timeout) clearTimeout(this._timeout);
            $this = this;
            if ($("div#" + this.containerid).length == 1) {
                $.get(url, { cache: new Date().getTime() }, function(data) {
                    var d_arr = data.data;
                    var callback = function() { };
                    var setCallback = function(ind, n1, n2, ca) {
                        return function() {
                            $this.goto(ind, n1, n2, ca);
                        };
                    };

                    var parentCon = $("div#" + $this.containerid);
                    var numDiv = parentCon.find("div.digit-counter-number").length;
                    if (numDiv < d_arr.length) {
                        var $prepend = "";
                        for (var i = 0; i < d_arr.length - numDiv; i++) {
                            if (d_arr.charAt(i) == ',') {
                                $prepend += "<div class=\"digit-counter-number digit-comma\"></div>";
                            } else {
                                $prepend += "<div class=\"digit-counter-number\"><div class=\"digit-counter-image\"></div>";
                                $prepend += "<div class=\"digit-counter-currentNo\">0</div></div>";
                            }
                        }
                        $($prepend).prependTo(parentCon);
                    } else if (numDiv > d_arr.length) {
                        var removeArr = new Array();
                        for (var i = 0; i < numDiv - d_arr.length; i++) {
                            removeArr[removeArr.length] = $("div#" + $this.containerid + " div.digit-counter-number:eq(" + i + ")");
                        }
                        for (var i = 0; i < removeArr.length; i++) removeArr[i].remove();
                    }

                    for (var index = 0; index < d_arr.length; index++) {
                        if (d_arr.charAt(index) == ',') continue;
                        var con = "div#" + $this.containerid + " div.digit-counter-number:eq(" + index + ")";
                        var $con = $(con);
                        var _index = index;
                        setCallback(_index, $con.find('div.digit-counter-currentNo').text(), d_arr.charAt(index), callback)();
                    }

                    //if(typeof(callback)=='function') {callback();}
                    _timeout = setTimeout(function() { $this.loadData(url, timeout); }, timeout);
                }, "json");
            }
        }
    };

}


