/**
 * 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:'EditDate',

	// Angiv tidspunkt på dagen, hvor varerne leveres - Format: tt:mm
	time:{
		1:'16:00', // Mandag
		2:'16:00', // Tirsdag
		3:'16:00', // Onsdag
		4:'16:00', // Torsdag
		5:'16:00', // Fredag
		6:'10: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:':', text2:':', force:true, leading:true},
		'%m':{text:':', text2:':', force:true, leading:true},
		'%s':{text:'', text2:'', force:true, leading:true},
		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
		this.countdown();
		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;
		
		if (tstamp['%s']==''){tstamp['%s']='0';}
		
		// 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.replace(/0/gi,'<b>0<\/b>').replace(/1/gi,'<b>1<\/b>').replace(/2/gi,'<b>2<\/b>').replace(/3/gi,'<b>3<\/b>').replace(/4/gi,'<b>4<\/b>').replace(/5/gi,'<b>5<\/b>').replace(/6/gi,'<b>6<\/b>').replace(/7/gi,'<b>7<\/b>').replace(/8/gi,'<b>8<\/b>').replace(/9/gi,'<b>9<\/b>');

		// 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;
	}
}	

