
// retanolcounter
// Author: Florian Hauser, Cosmoto, 2011
// 
// usage: new RetanolCounter("counter", <?PHP echo time(); ?> );
//


var RetanolCounter = function (elementID, timestampNow)
{
	// config
	this.timestampStart = new Date(2011, 4 -1, 4, 0, 0, 0);  // new Date(Jahr, Monat, Tag, Stunden, Minuten, Sekunden) // start with monday!!!
	this.valueStart = 29567000;
	this.valuePerDay = 48000;
	
	//
	this.elementID = elementID;
	this.timestampNow = timestampNow * 1000;
	
	//		
	this.timestampStartApp = this.timestampNow;
	
	this.valueCurrent = this.valueStart;
	
	this.valueMofr1 = this.valuePerDay*0.50;
	this.valueMofr2 = this.valuePerDay*0.025;
	this.valueMofr3 = this.valuePerDay*0.30;
	this.valueMofr4 = this.valuePerDay*0.10;
	this.valueMofr5 = this.valuePerDay*0.075;
	this.valueSat1 = this.valuePerDay*0.15;
	this.valueSat2 = this.valuePerDay*0.025;
	
	this.valuePerWeek = this.valuePerDay*5 + (this.valueSat1+this.valueSat2); // mo-fr 100%, sa 17,5%, so 0%
		
	// methods
	
	this.start = function ()
	{
		this.updateCounter();
		
		var o = this;
        setInterval(function(){o.updateCounter();}, 100);
	}

	this.updateCounter = function ()
	{
		//
		this.timestampNow = this.timestampStartApp + this.getTimer();
		
		//
		var days = (this.timestampNow-this.timestampStart) / (1000*60*60*24);
		var daysFull = Math.floor(days);
		
		var weeksFull = Math.floor(daysFull/7);
		var weeksRestDaysFull = daysFull - weeksFull*7;
		
		var valueWeeks = weeksFull * this.valuePerWeek;
		var valueDays = (weeksRestDaysFull <= 5) ? (weeksRestDaysFull * this.valuePerDay) : (this.valuePerWeek);
		
		var valueCurrentDay = 0;
		var millisecRest = Math.floor( this.timestampNow - this.timestampStart - ((weeksFull*7 + weeksRestDaysFull)*24*60*60*1000) );
		
		var dateCurrent = new Date(this.timestampNow);
		
		//
		if(dateCurrent.getDay() == 6) // sat
		{
			if(dateCurrent.getHours() < 7) valueCurrentDay = 0;
			else if(dateCurrent.getHours() >= 7 && dateCurrent.getHours() < 14) valueCurrentDay = this.valueSat1 * (millisecRest - 7*60*60*1000) / (7*60*60*1000);
			else if(dateCurrent.getHours() >= 14 && dateCurrent.getHours() < 17) valueCurrentDay = this.valueSat2 * (millisecRest - 14*60*60*1000) / (3*60*60*1000);
			else if(dateCurrent.getHours() >= 17) valueCurrentDay = this.valueSat1 + this.valueSat2;
		}
		else if(dateCurrent.getDay() == 0) // sun
		{
			valueCurrentDay = 0;
		}
		else // mon-fri
		{
			if(dateCurrent.getHours() < 7) valueCurrentDay = 0;
			else if(dateCurrent.getHours() >= 7 && dateCurrent.getHours() < 12) valueCurrentDay = this.valueMofr1 * (millisecRest - 7*60*60*1000)/(5*60*60*1000);
			else if(dateCurrent.getHours() >= 12 && dateCurrent.getHours() < 13) valueCurrentDay = this.valueMofr1 +this. valueMofr2 * (millisecRest - 12*60*60*1000) / (1*60*60*1000);
			else if(dateCurrent.getHours() >= 13 && dateCurrent.getHours() < 16) valueCurrentDay = this.valueMofr1 + this.valueMofr2 + this.valueMofr3 * (millisecRest - 13*60*60*1000) / (3*60*60*1000);
			else if(dateCurrent.getHours() >= 16 && dateCurrent.getHours() < 18) valueCurrentDay = this.valueMofr1 + this.valueMofr2 + this.valueMofr3 + this.valueMofr4 * (millisecRest - 16*60*60*1000) / (2*60*60*1000);
			else if(dateCurrent.getHours() >= 18 && dateCurrent.getHours() < 20) valueCurrentDay = this.valueMofr1 + this.valueMofr2 + this.valueMofr3 + this.valueMofr4 + this.valueMofr5 * (millisecRest - 18*60*60*1000) / (2*60*60*1000);
			else if(dateCurrent.getHours() >= 20) valueCurrentDay = this.valuePerDay;
		}
		
		//
		valueCurrent =  this.valueStart + valueWeeks + valueDays + valueCurrentDay;
		
		// render
		document.getElementById(this.elementID).firstChild.nodeValue = this.formatCounterString(valueCurrent);
	}

	this.formatCounterString = function (num)
	{
		num = Math.floor(num);
		var numString = "";
		
		var sa = String(num).split("");
		var counter = 0;
		var len = sa.length;
		while(len--)
		{
			numString = sa[len] + numString;
			
			counter++;
			if(counter%3 == 0 && len > 0) numString = "." + numString;
		}

		return numString;
	}

	this.timer = new Date();
	this.getTimer = function ()
	{
		var t = new Date();
		return (t - this.timer);
	}
	
	// start
	
	this.start();
	
}

