MooCountdown = new Class({

	Implements: [Events, Options],
	container : 'countdown',
	
  	options: {
    	//public options
		futureDate : $empty,
		onlySeconds : false,
		dayText : 'days',
		hourText : 'hours',
		minuteText : 'minutes',
		secondText : 'seconds',
    	onCompleteText : '',
		duration : 1000,
		onComplete : $empty,
		numbersClass: 'numbers',
		titlesClass: 'titles',
    	//private options
		amount : $empty,
		amountTotal : $empty,
    	days : $empty,
    	hours : $empty,
    	minutes : $empty,
    	seconds : $empty
	},
	
	initialize : function(container,options){
		this.setOptions(options);
		this.container = $(container);
		
		this.drawTable();
		

		
		if(this.options.onlySeconds === true) {
		  this.options.amountTotal = this.options.futureDate;
		  this.startOnlySeconds();
		}
		else {
		  this.getCount();
		}
	},
	
	
  	drawTable: function() {
  		var td = new Element("td", {'align':"center"});
  		var numbers_div = new Element("div", {'class':this.options.numbersClass});
    	var table_out = new Element("table", {'border':"0",'class':'counter-table'});
    	var tbody_out = new Element("tbody");
    		var top_tr_out = new Element("tr", {'class':"spacer1"});
    			this.div_dd = numbers_div.clone();
    			var td_dd = td.clone().adopt(this.div_dd);
    			td_dd.inject(top_tr_out, 'bottom');
    			this.div_dh = numbers_div.clone();
    			var td_dh = td.clone().adopt(this.div_dh);
    			td_dh.inject(top_tr_out, 'bottom');
    			this.div_dm = numbers_div.clone();
    			var td_dm = td.clone().adopt(this.div_dm);
    			td_dm.inject(top_tr_out, 'bottom');
    			this.div_ds = numbers_div.clone();
    			var td_ds = td.clone().adopt(this.div_ds);
    			td_ds.inject(top_tr_out, 'bottom');
    		var bot_tr_out = new Element("tr", {'class':"spacer2"});
    			var div_d = new Element("div", {'class':this.options.titlesClass,'text':this.options.dayText});
    			var td_d = td.clone().adopt(div_d);
    			td_d.inject(bot_tr_out, 'bottom');
    			var div_h = new Element("div", {'class':this.options.titlesClass,'text':this.options.hourText});
    			var td_h = td.clone().adopt(div_h);
    			td_h.inject(bot_tr_out, 'bottom');
    			var div_m = new Element("div", {'class':this.options.titlesClass,'text':this.options.minuteText});
    			var td_m = td.clone().adopt(div_m);
    			td_m.inject(bot_tr_out, 'bottom');
    			var div_s = new Element("div", {'class':this.options.titlesClass,'text':this.options.secondText});
    			var td_s = td.clone().adopt(div_s);
    			td_s.inject(bot_tr_out, 'bottom');   
    	top_tr_out.inject(tbody_out, "bottom");
    	bot_tr_out.inject(tbody_out, "bottom");
    	table_out.adopt(tbody_out);   
    	//$(this.options.container).empty();
    	$(this.container).adopt(table_out);
  	},
  getCount : function(){
  
    this.now = new Date();
    
    //Calcul du temps restant en millisecondes
    this.options.amount = this.options.futureDate - this.now.getTime();

    //On récupère le temps en seconde
    this.options.amount = Math.floor(this.options.amount/1000);
    this.options.amountTotal = this.options.amount;
  
    //calcul des jours
    this.options.days = Math.floor(this.options.amount/86400);
    this.options.amount = this.options.amount%86400; 
    
    //calcul des heures
    this.options.hours = Math.floor(this.options.amount/3600);
    this.options.amount = this.options.amount%3600;
    
    //calcul des minutes
    this.options.minutes = Math.floor(this.options.amount/60);
    this.options.amount = this.options.amount%60;
    
    //calcul des secondes
    this.options.seconds = this.options.amount;
    //alert(this.div_dd);
    //var container = this.container;
    this.div_dd.set('text',this.options.days);
    this.div_dh.set('text',this.options.hours);
    this.div_dm.set('text',this.options.minutes);
    this.div_ds.set('text',this.options.seconds);
    	

    this.options.amountTotal--; 

	var fx = new Fx({
        duration: this.options.duration,
        onComplete: function() { 
          if(this.options.amountTotal >= 0) {         
            this.getCount();
          }
          else {
             this.container.set('text',this.options.onCompleteText);
             this.fireEvent('complete');
          }
        }.bind(this)
     }).start(1);
	
  },
  
  startOnlySeconds : function(){
    
    this.container.set('text',this.options.amountTotal);
    
    this.options.amountTotal--; 

	var fx = new Fx({
        duration: this.options.duration,
        onComplete: function() { 
          if(this.options.amountTotal >= 0) {         
            this.startOnlySeconds();
          }
          else {
             this.container.set('text',this.options.onCompleteText);
             this.fireEvent('complete');
          }
        }.bind(this)
     }).start(1);
	 
  }

});
