date = new Date();
var calId = '';
var calYear;
var minYear = 1980, maxYear = date.getFullYear()+2;
var calMonth;
var days = ['D', 'L', 'M', 'M', 'J', 'V', 'S'];
var reload = (reload ? reload : false);
document.write('<div id="calDiv" style="position:absolute;z-index:1;display:none;width:150px; height:150px;">&nbsp;</div>');

Calendrier = {
	display: function(inputId, date) {
		// inspired by & modified from www.dynarch.com/projects/calendar and netvibes.com
		// clear du calendrier
		$('calDiv').innerHTML = '';
		var today = new Date();
		if (!date) date = new Date();
		var year = date.getFullYear();
		var firstDayOfWeek = 1;
		var month = date.getMonth();
		var mday = date.getDate();
		if (calMonth == month && calYear == year && $('calDiv').style.display == 'block') {
			hide($('calDiv'));
		}
		else {
			calMonth = month;
			calYear = year;

			// première date à afficher
			date.setDate(1);
			var day1 = (date.getDay() - firstDayOfWeek) % 7;
			if (day1 < 0)
				day1 += 7;
			date.setDate(-day1);
			date.setDate(date.getDate() + 1);

			// navigation left
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.style.textAlign = "left";
			var a = document.createElement("a");
			a.href = "javascript:void()";
			a.onclick = function() {
				Calendrier.display(inputId, new Date(year, month-1, 1));
			};
			a.appendChild(document.createTextNode("<<"));
			td.appendChild(a);
			tr.appendChild(td);

			// navigation center
			// sélecteur de mois
			var select = document.createElement("select");
			for (i=0; i<12; i++){
				var option = document.createElement("option");
				option.value = i;
				option.appendChild(document.createTextNode(abmonths[i]));
				if (i == month) {
					option.selected = true;
				}
				select.appendChild(option);
			}
			select.onchange = function() {
				Calendrier.display(inputId, new Date(year, this.selectedIndex, 1));
			}
			var td = document.createElement("td");
			td.appendChild(select);

			// sélecteur d'année
			var select = document.createElement("select");
			for (i=maxYear; i>=minYear; i--){
				var option = document.createElement("option");
				option.value = i;
				option.appendChild(document.createTextNode(i));
				if (i == year) {
					option.selected = true;
				}
				select.appendChild(option);
			}
			select.onchange = function() {
				Calendrier.display(inputId, new Date(maxYear-this.selectedIndex, month, 1));
			}
			td.appendChild(select);
			td.style.textAlign = "center";
			tr.appendChild(td);

			// navigation right
			var td = document.createElement("td");
			td.style.textAlign = "right";
			var a = document.createElement("a");
			a.href = "javascript:void()";
			a.onclick = function() {
				Calendrier.display(inputId, new Date(year, month+1, 1));
			};
			a.appendChild(document.createTextNode(">>"));
			td.appendChild(a);
			tr.appendChild(td);

			var table = document.createElement("table");
			table.className = "calChanger";
			var tbody = document.createElement("tbody");
			tbody.appendChild(tr);
			table.appendChild(tbody);
			var div = document.createElement("div");
			div.appendChild(table);

			// contenu du calendrier
			// header
			var table = document.createElement("table");
			table.className = "calTable";

			var thead = document.createElement("thead");
			var tr = document.createElement("tr");
			var td, img;
			for (var i = 0; i < 7; ++i) {
				d = (i + firstDayOfWeek) % 7;
				td = document.createElement("td");
				td.innerHTML = days[d];
				tr.appendChild(td);
			}
			thead.appendChild(tr);
			table.appendChild(thead);

			// corps du calendrier
			var tbody = document.createElement("tbody");
			tr = document.createElement("tr");
			var iday = date.getDate();
			var first = true;
			for (var i = 0; i < 42; ++i, date.setDate(iday + 1)) {
				td = document.createElement("td");
				d = date;
				iday = date.getDate();
				var wday = date.getDay();
				var m = date.getMonth();
				if (wday == firstDayOfWeek) {
					if (!first && m != month) {
						break;
					};
					tbody.appendChild(tr);
					tr = document.createElement("tr");
					first = false;
				};
				td.className = "";
				if (m != month) {
					td.className += ' notmonth';
				}
				if (date.getFullYear() == today.getFullYear() && date.getMonth() == today.getMonth() && date.getDate() == today.getDate()) {
					td.className = 'today';
				}
				td.setAttribute("date", d);
				var a = document.createElement("a");
				a.href = "javascript:void()";
				a.id = (iday < 10 ? '0'+iday : iday)+'-'+(m+1 < 10 ? '0'+(m+1) : m+1)+'-'+date.getFullYear();
				a.onclick = function() {
					if (reload)
					{
						var tmp = this.id.split('-');
						var dateurl = tmp[2]+'-'+tmp[1]+'-'+tmp[0];
						window.location.replace('/date/'+dateurl+'/');
					}
					else if ($(inputId))
						$(inputId).value = this.id;
					hide($('calDiv'));
				};
				a.appendChild(document.createTextNode(iday));
				td.appendChild(a);
				tr.appendChild(td);
			}

			tbody.appendChild(tr);
			table.appendChild(tbody);
			div.appendChild(table);
			$('calDiv').appendChild(div);

			// affichage du bloc calendrier
			var x = getLeft($(inputId))+getWidth($(inputId))+5;
			var y = getTop($(inputId))+getHeight($(inputId))-2;
			moveObjTo($('calDiv'),x,y);
			show('calDiv');
		}
	}
}

