/*
 *   Beaujolais Nouveau Countdown
 *   Domaine Robert Vallette - Vins du Beaujolais
 *   written by Christoph Lehner (http://elchristo.de)
 */

var message;
var lang = "fr"; // set default language french

// set translation array
// --------------------------------------------------------
var aL = new Array();
aL['fr'] = new Array();
aL['en'] = new Array();
aL['de'] = new Array();

// french (fr)
aL['fr']['moS']    = "mois";
aL['fr']['moPl']   = "mois";
aL['fr']['dS']     = "jour";
aL['fr']['dPl']    = "jours";
aL['fr']['hS']     = "heure";
aL['fr']['hPl']    = "heures";
aL['fr']['minS']   = "minute";
aL['fr']['minPl']  = "minutes";
aL['fr']['sS']     = "seconde";
aL['fr']['sPl']    = "secondes";
aL['fr']['msgSub'] = "avant";
aL['fr']['nov']    = "novembre";

// english (en)
aL['en']['moS']    = "month";
aL['en']['moPl']   = "month";
aL['en']['dS']     = "day";
aL['en']['dPl']    = "days";
aL['en']['hS']     = "hour";
aL['en']['hPl']    = "hours";
aL['en']['minS']   = "minute";
aL['en']['minPl']  = "minutes";
aL['en']['sS']     = "second";
aL['en']['sPl']    = "seconds";
aL['en']['msgSub'] = "till";
aL['en']['nov']    = "november";

// german (de)
aL['de']['moS']    = "Monat";
aL['de']['moPl']   = "Monate";
aL['de']['dS']     = "Tag";
aL['de']['dPl']    = "Tage";
aL['de']['hS']     = "Stunde";
aL['de']['hPl']    = "Stunden";
aL['de']['minS']   = "Minute";
aL['de']['minPl']  = "Minuten";
aL['de']['sS']     = "Sekunde";
aL['de']['sPl']    = "Sekunden";
aL['de']['msgSub'] = "bis";
aL['de']['nov']    = "November";

// --------------------------------------------------------

function getDaysLeft(week, weekday, month) {

	var targetWeek    = week;	 // 3 = 3rd targetWeekday
	var targetWeekday = weekday; // 0 (sunday) - 6 (saturday)
	var targetMonth   = month;	 // 1-12

	var weekCounter = 0;
	var dateCurrent = new Date();
	dateCurrent.setHours(0);
	dateCurrent.setMinutes(0);
	dateCurrent.setSeconds(0);
	dateCurrent.setMilliseconds(0);

	var dateTarget = new Date();
	dateTarget.setMonth(targetMonth-1);
	dateTarget.setDate(1); // first day of month
	dateTarget.setHours(0);
	dateTarget.setMinutes(0);
	dateTarget.setSeconds(0);
	dateTarget.setMilliseconds(0);

	// find and define 3rd thursday in november
	var dayCounter = 1;
	while (dayCounter < 32)	{
		if (dateTarget.getDay() == targetWeekday) {
			if (weekCounter < (targetWeek-1)) weekCounter++;
			else break;
		}
		dayCounter++;
		dateTarget.setDate(dayCounter);
	}

	// later than target day?
	if (dateCurrent.getTime() > dateTarget.getTime())
		dateTarget.setFullYear(dateTarget.getFullYear() + 1);

	if (dateCurrent.getDate() == dateTarget.getDate() && dateCurrent.getMonth() == (targetMonth-1) && (dateCurrent.getFullYear() == dateTarget.getFullYear()) )
		return 0; // today!

	return Math.round(((dateTarget.getTime() - dateCurrent.getTime()) / 1000) / 86400);
}

/*
 * calculate the year when Beaujolais Nouveau arrives next time
 */
function getArriveYear() {
	var today = new Date();

	// secure that we choose the correct year...
	return (today.getMonth() == 11 || (today.getMonth() == 10 && today.getDate() > 19) ) ? (today.getFullYear()+1) : today.getFullYear(); 
}

/*
 * returns the day of the month when Beaujolais Nouveau arrives next time
 */
function getArriveDay(year) {
	var aDays = new Array();
		aDays[2009] = 19;
		aDays[2010] = 18;
		aDays[2011] = 17;
		aDays[2012] = 15;
		aDays[2013] = 21;
		aDays[2014] = 20;
		aDays[2015] = 19;
		aDays[2016] = 17;
		aDays[2017] = 16;
		aDays[2018] = 21;

	return aDays[getArriveYear()];
}

function setLang(l) {
	lang = l;
}
function getLang() {
	return lang;
}

/*
 * displays a countdown for the Beaujolais Nouveau arriving
 */
function getCountdown() {
	//var arriveDate = new Date(Date.UTC(2009,10,19,0,0,0));
	var arriveDate = new Date(getArriveYear(), 10, getArriveDay(), 0, 0, 0);
	var nowDate = new Date();
	var month = 0;
	var days = 0;
	var hours = 0;
	var minutes = 0;
	var seconds = 0;

	// calculate month left
	while (nowDate < arriveDate) {
		month++; 
		nowDate.setMonth(nowDate.getMonth()+1);
	}
	nowDate.setMonth(nowDate.getMonth()-1);
	month--;

	// calculate days left
	while (nowDate.getTime() + (24*60*60*1000) < arriveDate) {
		days++;
		nowDate.setTime(nowDate.getTime() + (24*60*60*1000));
	}

	// calculate hours left
	hours = Math.floor((arriveDate - nowDate) / (60*60*1000));
	nowDate.setTime(nowDate.getTime() + hours*60*60*1000);

	// calculate minutes left
	minutes = Math.floor((arriveDate - nowDate) / (60*1000));
	nowDate.setTime(nowDate.getTime() + minutes*60*1000);

	// calculate seconds left
	seconds = Math.floor((arriveDate-nowDate)/1000);

	// build countdown text
	if (month != -1 && month < 11) {
		var monthTxt = (month != 1) ? aL[lang]["moPl"] : aL[lang]["moS"];
		var daysTxt  = (days != 1) ? aL[lang]["dPl"] : aL[lang]["dS"];
		var hoursTxt = (hours != 1) ? aL[lang]["hPl"] : aL[lang]["hS"];
		var minutesTxt = (minutes != 1) ? aL[lang]["minPl"] : aL[lang]["minS"];
		if (seconds < 10)
			seconds = "0" + seconds;
		var secondsTxt = (seconds != 1) ? aL[lang]["sPl"] : aL[lang]["sS"];

		// output into html
		document.getElementById('month').innerHTML = month+"<span>"+ monthTxt +"</span>";
		document.getElementById('days').innerHTML = days+"<span>"+ daysTxt +"</span>";;
		document.getElementById('hours').innerHTML = hours+"<span>"+ hoursTxt +"</span>";;
		document.getElementById('minutes').innerHTML = minutes+"<span>"+ minutesTxt +"</span>";;
		document.getElementById('seconds').innerHTML = seconds+"<span>"+ secondsTxt +"</span>";;
		document.getElementById('countdownSub').innerHTML = aL[lang]["msgSub"] + " &quot;Le Beaujolais Nouveau est arriv&eacute;&quot;, "+getArriveDay()+".11."+getArriveYear();
	}
	else {
		// it's Beaujolais Nouveau time...
		document.getElementById("countdown").innerHTML = "";
		document.getElementById("countdown").className = "bgCurrent";
	}

	setTimeout(getCountdown,200); // timeout to refresh countdown only every 200 milliseconds
}

window.onload = getCountdown; // call the countdown first time

