/**
 * cs_countdown
 *
 **********
 *
 * H�ndterer nedt�lling til n�ste tidspunkt for levering.
 */
cs_countdown={

	// Angiv ID p� det element, der skal vise nedt�llingen
	id:'_cs_countdown',

	// Angiv tidspunkt p� dagen, hvor varerne leveres - Format: tt:mm
	time:{
		1:'17:00', // Mandag
		2:'17:00', // Tirsdag
		3:'17:00', // Onsdag
		4:'17:00', // Torsdag
		5:'17:00', // Fredag
		6:'16:00', // L�rdag
		0:null     // S�ndag
	},

	// Er der nogen gr�nse for, hvorn�r varerne leveres n�ste gang?
	date:null, // Format: dd.mm.���� tt:mm (null for ingen gr�nse)

	// Angiv det format, som nedt�llingen skal vises i
	format:{
		'%h':{value:'tstamp["%d"]*24+tstamp["%h"]',text:' saat', text2:' saat', force:false, leading:false},
		'%m':{text:' dk.', text2:' dk.', force:false, leading:false},
		'%s':{text:' sn.', text2:' sn.', force:false, leading:false},
		separator:', ',
		separator2:'  '
	},

	/**
	 * init()
	 *
	 **********
	 *
	 * Starter nedt�llingen til n�ste tidspunkt for levering.
	 */
	init:function(date){
		// Indl�s en reference til elementet, hvor nedt�llingen skal vises
		this.container=document.getElementById(this.id);

		// Udregn hvor lang tid der er til n�ste levering
		this.date=date;
		this.delivery=this.getTime();

		// Begynd at t�lle ned
		setInterval(function(){cs_countdown.countdown();},1000);
	},

	/**
	 * countdown
	 *
	 **********
	 *
	 * Denne funktion t�ller automatisk ned, hvert sekund.
	 */
	countdown:function(){
		// Hvis timeren er l�bet ud, udregner vi tid til n�ste levering
		if(this.seconds<=0) this.getTime();

		// Udregn dage, timer, minutter og sekunder tilbage
		var tmp=this.seconds;

		var tstamp=new Array();
		tstamp['%d']=Math.floor(tmp/86400); tmp%=86400;
		tstamp['%h']=Math.floor(tmp/3600); tmp%=3600;
		tstamp['%m']=Math.floor(tmp/60);
		tstamp['%s']=tmp%60;

		// Gennemg� de enkelte sektioner af timestampen
		var output="";
		for(var section in tstamp){
			// Indl�s info om denne sektion
			var info=this.format[section];
			if(!info) continue;

			// Formater timestampen
			if(!info.value) var tmp=tstamp[section];
			else var tmp=eval(info.value);

			// Tjek om sektionen skal vises
			if(!tmp&&!info.force) continue;

			// H�ndter separatoren i outputtet
			if(output) output+=this.format.separator;

			// Tjek om der skal tilf�jes "leading-zeroes"
			if(info.leading&&tmp<10) tmp="0"+String(tmp);

			// Tilf�j tallet til outputtet
			output+=String(tmp);

			// Tjek hvilken ben�vnelse der skal bruges (ental/flertal)
			if(parseInt(tmp)!=1||!info['text2']) output+=info['text'];
			else output+=info['text2'];
		}

		// H�ndter differentering i den sidste seperator
		var tmp=output.split(this.format.separator); output="";
		var i=tmp.length; var j=i;

		if(i>0)do{
			output+=tmp[j-i];
			if(i>2||(i==2&&!this.format.separator2)) output+=this.format.separator;
			else if(i==2) output+=this.format.separator2;
		}while(--i);

		// Vis tid tilbage
		this.container.innerHTML=output;

		// Opdater tid tilbage
		this.seconds--;
	},

	/**
	 * getTime
	 *
	 **********
	 *
	 * Denne funktion udregner, hvor mange sekunder der er til n�ste leveringsdato.
	 */
	getTime:function(){
		// Tjek om der er angivet en gr�nse for n�ste levering
		var tmp=null;
		if(this.date){
			// Lav datoen om til et timestamp
			var tmp=new Date();
			tmp.setDate(parseInt(this.date.substr(0,2)));
			tmp.setMonth(parseInt(this.date.substr(3,2))-1);
			tmp.setFullYear(parseInt(this.date.substr(6,4)));
			tmp.setHours(parseInt(this.date.substr(11,2)));
			tmp.setMinutes(parseInt(this.date.substr(14,2)));

			// Tjek om gr�nsen allerede er udl�bet?
			if(parseInt(Date.parse(tmp.toDateString()))<parseInt(Date.parse(new Date().toDateString()))) tmp=null;
		}

		// Hvis der ikke er angivet nogen gyldig gr�nse, udregner vi tidspunktet for n�ste hverdag klokken 16:00
		if(!tmp){
			// Indl�s klokkesl�t
			var tmp=new Date();

			// Er klokkeslet overskredet for i dag?
			var limit=this.time[tmp.getDay()];
		
			if(limit&&(tmp.getHours()>parseInt(limit.substr(0,2))||(tmp.getHours()==parseInt(limit.substr(0,2))&&tmp.getMinutes()>=parseInt(limit.substr(3,2))))) tmp.setDate(tmp.getDate()+1); 

			// Kan der leveres denne dag?
			while(!this.time[tmp.getDay()]) tmp.setDate(tmp.getDate()+1);

			// Indstil tidspunktet
			var limit=this.time[tmp.getDay()];			
			tmp.setHours(parseInt(limit.substr(0,2)));
			tmp.setMinutes(parseInt(limit.substr(3,2)));
		}

		// Udregn hvor mange sekunder der er til dette tidspunkt
		var tmp2=new Date();
		this.seconds=Date.UTC(tmp.getFullYear(),tmp.getMonth(),tmp.getDate(),tmp.getHours(),tmp.getMinutes(),0,0);
		this.seconds-=Date.UTC(tmp2.getFullYear(),tmp2.getMonth(),tmp2.getDate(),tmp2.getHours(),tmp2.getMinutes(),tmp2.getSeconds(),0);

		this.seconds=Math.floor(this.seconds/1000);

		// Ryd hukommelsen
		tmp=null; tmp2=null;
	}
}
