
var cal_months = [ "Jan.", "Fev.", "Mars", "Avr.", "Mai", "Juin", "Juil.", "Août", "Sep.", "Oct.", "Nov.", "Déc." ];

var cals = Array();

function Cal(bloc, input) {
	this.bloc = document.getElementById(bloc);
	this.input = document.getElementById(input);
	this.cal_sel_day = 0;
	this.cal_sel_month = 0;
	this.cal_sel_year = 0;
	this.cal_aff = false;
	this.cal_on = false;
}

function cal_switch(id,bloc,input) {
	if(! cals[id]) {
		cals[id] = new Cal(bloc,input);
	}
	if(cals[id].cal_on) {
		// on le masque
		cal_hide(id);
	} else {
		// on l'affiche
		cal_show(id,bloc,input);
	}
}

function cal_show(id, bloc, input) {
	if(! cals[id]) {
		cals[id] = new Cal(bloc,input);
	}
	cals[id].bloc.style.display = 'block';
	if(! cals[id].cal_aff) {
		cal_draw(id);
	}
	cals[id].cal_on = true;
}

function cal_hide(id) {
	cals[id].bloc.style.display = 'none';
	cals[id].cal_on = false;
}

function cal_currmonth(id) {
	var date = new Date();
	cals[id].cal_sel_day = date.getDate();
	cals[id].cal_sel_month = date.getMonth();
	cals[id].cal_sel_year = date.getFullYear();
}

function cal_remplir(jour, mois, annee, id) {
	cals[id].cal_sel_day = jour;
	cals[id].cal_sel_month = mois;
	cals[id].cal_sel_year = annee;
	cals[id].input.value = cal_format_date(jour, mois, annee) ;
}

function cal_format_date(jour, mois, annee) {
	var chaine = annee + '-';
	if(mois+1 < 10) {
		chaine += '0'+(mois+1);
	} else {
		chaine += (mois+1);
	}
	chaine += '-';
	if(jour < 10) {
		chaine += '0' + jour;
	} else {
		chaine += jour;
	}
	return chaine;
}

function cal_tranforme_jour_semaine(jour) {
	if(jour == 0) {
		return 7;
	} else {
		return jour;
	}
}

function cal_nbjours_dans_mois(mois, annee) {
	if(mois==0 || mois==2 || mois==4 || mois==6 || mois==7 || mois==9 || mois==11) {
		return 31;
	} else {
		if(mois==1) {
			//cas de février
			if((annee%4==0 && annee%100!=0)||(annee%400==0)) {
				//annee bissextile
				return 29;
			} else {
				return 28;
			}
		} else {
			return 30;
		}
	}
}

function mois_precedent(id) {
	if(cals[id].cal_sel_month==0) {
		cals[id].cal_sel_month = 11;
		cals[id].cal_sel_year -= 1;
	} else {
		cals[id].cal_sel_month -= 1;
	}
	cal_draw(id);
}

function mois_suivant(id) {
	if(cals[id].cal_sel_month==11) {
		cals[id].cal_sel_month = 0;
		cals[id].cal_sel_year += 1;
	} else {
		cals[id].cal_sel_month += 1;
	}
	cal_draw(id);
}

function annee_precedente(id) {
	cals[id].cal_sel_year -=1;
	cal_draw(id);
}

function annee_suivante(id) {
	cals[id].cal_sel_year +=1;
	cal_draw(id);
}

function cal_draw(id) {
	if(cals[id].cal_sel_year == 0) {
		cal_currmonth(id);
	}
	var prem = new Date(cals[id].cal_sel_year,cals[id].cal_sel_month,1);
	var jour_semaine = cal_tranforme_jour_semaine(prem.getDay());
	var i; //compteur sur les cases tableau;
	var j; //compteur sur les jours
	var nbj = cal_nbjours_dans_mois(prem.getMonth(), prem.getFullYear());
	var tableau ;
	tableau = '<table>';
	tableau += '<tr><td colspan="7" class="cal_head"><a href="javascript:void(0);" onclick="annee_precedente(\''+id+'\');">&lt;&lt;</a> | <a href="javascript:void(0);" onclick="mois_precedent(\''+id+'\');">&lt;</a> | ' + cal_months[prem.getMonth()] + ' ' + prem.getFullYear() + ' | <a href="javascript:void(0);" onclick="mois_suivant(\''+id+'\');">&gt;</a> | <a href="javascript:void(0);" onclick="annee_suivante(\''+id+'\');">&gt;&gt;</a></td></tr>';
	tableau += '<tr><th>L</th><th>M</th><th>M</th><th>J</th><th>V</th><th>S</th><th>D</th></tr>';
	tableau += '<tr>';
	for(i=1; i<jour_semaine; i++) {
		tableau += '<td></td>';
	}
	var today = new Date();
	var flag = false;
	if(cals[id].cal_sel_year == today.getFullYear() && cals[id].cal_sel_month == today.getMonth()) {
		flag = true;
	}
	for(i=jour_semaine, j=1; j<=nbj; i++, j++) {
		tableau += '<td';
		if(flag && j==today.getDate()) {
			tableau += ' class="today"';	
		}
		tableau += '><a href="javascript:void(0);" onclick="cal_remplir('+j+','+prem.getMonth()+','+prem.getFullYear()+', \''+id+'\');">' + j + '</a></td>';
		if(i%7==0) {
			tableau += '</tr><tr>';
		}
		if(j==nbj) {
			for(; i%7!=0; i++) {
				tableau += '<td></td>';
			}
			tableau += '</tr>';
		}
	}
	tableau +='<tr><td colspan="7"><a href="javascript:void(0);" onclick="cal_hide(\''+ id +'\');">Fermer</a></td></tr></table>';
	cals[id].bloc.innerHTML = tableau;
}
