var Ticker = new Class({
    Implements:[Options, Events],
    
    options:
    {
        interval:60000,
        onHasTicked:$empty
    },
    
    counter:
    {
        days:0,
        hours:0,
        minutes:0
    },
    
    current:new Date(),
    
    distance:0,
    
    initialize:function(distance, options)
    {
        if(options != undefined && options != null)
            this.setOptions(options);

        this.distance = distance;

        this.counter = this.distance_to_counter(this.distance);
        
        this.tick();
        //this.next_tick();
    },
    
    counter_to_distance:function()
    {
        var minutes = 0;
        
        minutes += this.counter.days * 24 * 60 * 60 * 1000;
        minutes += this.counter.hours * 60 * 60 * 1000;
        minutes += this.counter.minutes * 60 * 1000;
        
        return minutes;
    },
    
    distance_to_counter:function(distance)
    {
        var value = distance;
        
        var days = Math.floor(value / (1000 * 60 * 60 * 24));
        value = value - (days * 1000 * 60 * 60 * 24); 
        
        var hours = Math.floor(value / 1000 / 60 / 60);
        value = value - (hours * 1000 * 60 * 60);

        var minutes = Math.floor(value / 1000 / 60);
        value = value - (minutes * 1000 * 60);

        days = Math.max(0, days);
        //days = Math.min(days, 99);
        hours = Math.max(0, hours);
        minutes = Math.max(0, Math.floor(minutes));
        
        return { days:days, hours:hours, minutes:minutes };
    },
    
    tick:function()
    {
        //var distance = this.counter_to_distance();
        
        this.distance -= (1000*60);
        
        this.counter = this.distance_to_counter(this.distance);
        
        this.fireEvent("hasTicked", [this.counter]);
        
        this.next_tick();
    },
    
    next_tick:function()
    {
        var self = this;
        setTimeout(function(){ self.tick(); }, this.options.interval);
    },
    
    digits:function(num)
    {
        var str = num.toString();
        if(str.length == 1) str = "0" + str;
        
        return str; //[Math.floor(num / 10), num % 10];
    }
});



function TickerCountdown()
{
    var ticker_days = $$("#ticker_days .cell");
    var ticker_hours = $$("#ticker_hours .cell");
    var ticker_minutes = $$("#ticker_minutes .cell");
    
    if(!$chk(ticker_days) || !$chk(ticker_minutes) || !$chk(ticker_hours)){ return; }
    if(ticker_days.length < 2 || ticker_minutes.length < 2 || ticker_hours.length < 2){ return; }
    
    var d = new Date("May 8, 2010").getTime();
    var distance = (d - new Date().getTime()); 
    
    var tick = new Ticker(distance, {
        onHasTicked:function(counter)
        {
            var day_digits = this.digits(counter.days);
            var hour_digits = this.digits(Math.min(23, counter.hours));
            var minute_digits = this.digits(Math.min(59, counter.minutes));
            
            /*
            ticker_days[0].set("html", day_digits.charAt(0));
            ticker_days[1].set("html", day_digits.charAt(1));
            ticker_hours[0].set("html", hour_digits.charAt(0));
            ticker_hours[1].set("html", hour_digits.charAt(1));
            ticker_minutes[0].set("html", minute_digits.charAt(0));
            ticker_minutes[1].set("html", minute_digits.charAt(1));
            */
            
            ticker_days[0].set("html", 0);
            ticker_days[1].set("html", 0);
            ticker_hours[0].set("html", 0);
            ticker_hours[1].set("html", 0);
            ticker_minutes[0].set("html", 0);
            ticker_minutes[1].set("html", 0);
        }
    });
}
