// Calendrier type date picker
// date de création : juin 2005
// dernière modification : janvier 2006
// auteur : Nathalie
// description : fait apparaitre un calendrier dans un div

//VARIABLES
var arr_mois = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
var arr_jours = ["Di","Lu", "Ma", "Me", "Je", "Ve" , "Sa"];
var int_debutSemaine = 1; // la semaine commence le lundi
var cptClic = 0;
var whichIsVisible;

// show
// IN : la référence au champ texte, la valeur du champ, le nom du div dans lequel le datepicker apparait, la valeur du champ à prendre en compte
// OUT : -
// description : crée le tableau du calendrier
function show(obj_targetInput,val_targetDiv, val_DateChamp) {
	var val_Date;
	var date_dateActu ;
	var i,j;
	
	//récupère le nom du div dans lequel le datepicker apparait si il est précisé en arg
	if(val_targetDiv == "" || val_targetDiv == null){
		var dom = document.getElementById("span_Calendrier"); //défaut
		var str_targetDiv = "span_Calendrier";
	}else{
		var dom = document.getElementById(val_targetDiv); //dom
		var str_targetDiv = val_targetDiv;
	}
	//récupère la valeur du champ texte si elle n'est pas précisée en arg
	if(val_DateChamp == "" || val_DateChamp == null){
		val_Date = eval(obj_targetInput).value;
	}else{
		val_Date = val_DateChamp;
	}
	//si on change de cal
	if(whichIsVisible != val_targetDiv){
		cptClic = 0;	
	}
	cptClic++;
	if(cptClic == 1 ){
		//indique l'élement visible (un seul à la fois)
		whichIsVisible = val_targetDiv;
		//clear le calendrier visible
		clear();
		//init la date
		if(val_Date == null || val_Date == "" || val_Date == "00/00/0000" || val_Date == "0000-00-00"){
			date_dateActu = new Date();
		}else{
			date_dateActu = convertStringToDate(val_Date);
		}
		//définit les années précédentes et suivantes
		var date_anPrec = new Date(date_dateActu);
		date_anPrec.setYear(date_dateActu.getFullYear()-1);
		var date_anSuiv = new Date(date_dateActu);
		date_anSuiv.setYear(date_dateActu.getFullYear()+1);
		
		//définit les mois précédents et suivants
		//var date_moisPrec = new Date(date_dateActu);
		//date_moisPrec.setMonth(date_dateActu.getMonth()-1);
		//var date_moisSuiv = new Date(date_dateActu);
		//date_moisSuiv.setMonth(date_dateActu.getMonth()+1);
		
		//définit les mois précédents et suivants
		var date_moisPrec = new Date(date_dateActu);
		date_moisPrec.setMonth(date_dateActu.getMonth()-1);	
		
		var date_moisSuiv = new Date(date_dateActu);
		var mois_suiv = date_dateActu.getMonth() + 1; // mémorise le mois précédent  (KSL 30/01/09)
		date_moisSuiv.setMonth(date_dateActu.getMonth()+1);
		if (date_moisSuiv.getMonth() != mois_suiv) // KSL 30/01/09
		{	
			date_moisSuiv.setDate(0); // KSL 30/01/09
		}
		
		//définit le premier jour et dernier jour du mois en cours
		var date_premierJour = new Date(date_dateActu);
		date_premierJour.setDate(1);
		date_premierJour.setDate(1-(7+date_premierJour.getDay()-int_debutSemaine)%7);
		var date_dernierJour = new Date(date_moisSuiv);
		date_dernierJour.setDate(0);
		
		// génére l'html à placer dans le div
		var str_temp;
		str_temp = "<table>";
		str_temp += "<tr><td class='enteteCal' colspan='7'><a href=\"javascript:clear();\"<img src='"+REP_LIBRAIRIES+"calendrier/icn_Cal_Fermer.gif' border='0'></td></tr>";
		str_temp += "<tr>";
		str_temp += "<td class='titreCalAnnee' width='11'>";
		str_temp += "<a href=\"javascript:cptClic=0;show('"+convertQuote(obj_targetInput)+"', '"+str_targetDiv+"', '"+convertDateToString(date_anPrec)+"');\">";
		str_temp += "<img src='"+REP_LIBRAIRIES+"calendrier/icn_Cal_FlecheGaucheBLC.gif' width='11' height='11' border='0'></a></td>";
		str_temp += "<td class='titreCalAnnee' colspan='5'>"+date_dateActu.getFullYear()+"</td>";
		str_temp += "<td class='titreCalAnnee' width='11'>";
		str_temp += "<a href=\"javascript:cptClic=0;show('"+convertQuote(obj_targetInput)+"', '"+str_targetDiv+"', '"+convertDateToString(date_anSuiv)+"');\">";
		str_temp += "<img src='"+REP_LIBRAIRIES+"calendrier/icn_Cal_FlecheDroiteBLC.gif' width='11' height='11' border='0'>";
		str_temp += "</a></td></tr>";
		str_temp += "<tr>";
		str_temp += "<td class='titreCalMois' width='11'>";
		str_temp += "<a href=\"javascript:cptClic=0;show('"+convertQuote(obj_targetInput)+"', '"+str_targetDiv+"', '"+convertDateToString(date_moisPrec)+"');\">";
		str_temp += "<img src='"+REP_LIBRAIRIES+"calendrier/icn_Cal_FlecheGaucheBLC.gif' width='11' height='11' border='0'></a></td>";
		str_temp += "<td class='titreCalMois' colspan='5'>"+arr_mois[date_dateActu.getMonth()]+"</td>";
		str_temp += "<td class='titreCalMois' width='11'>";
		str_temp += "<a href=\"javascript:cptClic=0;show('"+convertQuote(obj_targetInput)+"', '"+str_targetDiv+"', '"+convertDateToString(date_moisSuiv)+"');\">";
		str_temp += "<img src='"+REP_LIBRAIRIES+"calendrier/icn_Cal_FlecheDroiteBLC.gif' width='11' height='11' border='0'>";
		str_temp += "</a></td></tr>";
		
		var date_jourCourant = new Date(date_premierJour);
		//affiche les jours de la semaine
		str_temp += "<tr>";
		for (i=0; i<7; i++){
			str_temp += "<td class='jourDeLaSemaine'>";
			str_temp += arr_jours[(int_debutSemaine+i)%7]+"</td>";
		}
		str_temp += "</tr>";
		// calendrier
		while (date_jourCourant.getMonth() == date_dateActu.getMonth() || date_jourCourant.getMonth() == date_premierJour.getMonth()) {
			str_temp += "<tr>";
			for (j=0; j<7; j++) {
					//bkg
					if (date_jourCourant.getDate() == date_dateActu.getDate() &&
						date_jourCourant.getMonth() == date_dateActu.getMonth()){
						//jour selectioné
						str_temp += "<td class='jourActu'>";
					}else if (date_jourCourant.getDay() == 0 || date_jourCourant.getDay() == 6){
						//we
						str_temp += "<td class='bkgWe'>";
					}else{
						//jour ouvré autre
						str_temp += "<td class='bkgJourOuvre'>";
					}
					//lien href
					
					str_temp += "<a href=\"javascript:cptClic=0;"+obj_targetInput+".value='"+convertDateToString(date_jourCourant)+"';clear();\" ";				
					if (date_jourCourant.getDate() == date_dateActu.getDate() &&
						date_jourCourant.getMonth() == date_dateActu.getMonth()){
						//jour selectioné
						str_temp += " class='jourActu'>";
					} else if (date_jourCourant.getMonth() == date_dateActu.getMonth()){
						//jours du mois en cours en noir
						str_temp += " class='fontMoisEnCours'>";
					}else {
						// les autres mois
						str_temp += " class='fontAutreMois'>";
					}
					//valeur du jour de la date courante
					str_temp += date_jourCourant.getDate()+"</font></a></td>";
					//met a jour la date courante
					date_jourCourant.setDate(date_jourCourant.getDate()+1);
			}
			str_temp += "</tr>";
		}
		str_temp += "</table>";

		if(dom) {
			dom.style.display="block";
			dom.innerHTML = str_temp;
		}
	}else{
		cptClic= 0;
		clear();
	}
	
}
// clear
// IN : -
// OUT : -
// description : masque le calendrier
function  clear(){
	if(whichIsVisible != null){
		var dom = document.getElementById(whichIsVisible); //dom
	}else{
		var dom =document.getElementById("span_Calendrier"); //défaut
	}
	dom.style.display="none";
}

function convertQuote(str){
	var reg=new RegExp("'", "gi");
	return str.replace(reg,"\\\'");
}

// convertStringToDate
// IN : la string à convertir
// OUT : la date au format AAAA JJ DD ou un message d'erreur
// description : convertit une string en format date 
function convertStringToDate (val_str) {
	var regExp_date = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/;
	var date_temp;
	if (!regExp_date.test(val_str)){
		alert("Merci d'écrire la date au format suivant : JJ/MM/AAAA.");
		return new Date;
	}else{
		j = parseInt(val_str.split("/")[0], 10); // jour 
		m = parseInt(val_str.split("/")[1], 10); // mois 
		a = parseInt(val_str.split("/")[2], 10); // année 
		date_temp = new Date (a, m-1, j);
		return (date_temp);
	}
}
// convertDateToString
// IN : la date à convertir
// OUT : une string au format DD/JJ/AAAA 
// description : convertit une date en string
function convertDateToString (val_date) {
	var str_temp = new String (val_date.getDate()+"/"+(val_date.getMonth()+1)+"/"+val_date.getFullYear());
	return (str_temp);
}

/*écouteur clavier*/
/*function process_keypress() { 
	// si nous avons un évênement clavier 
	if (window.event.type == "keypress" && window.event.keyCode == 27 ) { 
		clear() ; 
	} 
	return true; 
} 

document.onkeypress = process_keypress;*/
