// JavaScript Document

/*******************************************************************************/
/*******************************************************************************/
//
// Un objet calendrier pour gestion des dates dans les formulaires
//
/*******************************************************************************/
/*******************************************************************************/

var thisCal; // Cet objet même
var jour_actif;
var mois = new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
var jours = new Array("Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa");

function UmaCalendar(){
	// Le nom du champs associé
	var nom_champ;
}


//
// Ajoute un zéro devant les nombres inférieurs à 10
UmaCalendar.prototype.addZero = function(val){
	if(val < 10){
		val = "0" + val;
	}
	return val;	
}

// Valeur absolue de Left
UmaCalendar.prototype.getAbsLeft = function(obj) {
	var left = obj.offsetLeft;
	if(document.all){
		// Ajouter l'offset pour IE
		var ol=obj.offsetLeft;
		while ((obj=obj.offsetParent) != null) { 
				ol += obj.offsetLeft; 
		}
		return ol;
	}
	return left;
}

// Valeur absolue de Top
UmaCalendar.prototype.getAbsTop = function(obj) {
	var top = obj.offsetTop;
				
	if(document.all){
		// Ajouter l'offset pour IE	
		var ol=obj.offsetTop;
		while ((obj=obj.offsetParent) != null) { 
				ol += obj.offsetTop; 
		}
		return ol;
	}
	return top;
}


// 
//
//*******************************************************************************/
UmaCalendar.prototype.setCalDate = function(une_date){
	
	jour_actif = une_date;
	document.getElementById(thisCal.nom_champ).value = une_date.substr(8,2)+"/"+une_date.substr(5,2)+"/"+une_date.substr(0,4);
	document.getElementById('umaCalendrier').className ="invisible";
}



//
// Créer un tableau du mois co,ntenant la date avec la date choisie activée
//
// Le format de la date est sous la forme yyyy/mm/dd
//*******************************************************************************/
UmaCalendar.prototype.designDate = function(une_date){
	
	valMois = (une_date.substr(5,2)) - 1; // Retrouve la valeur numérique (sans le zéro) du mois 
	valAnnee = (une_date.substr(0,4));
	valJour = (une_date.substr(8,2));
	
	d = new Date(valAnnee, valMois, 1);
	prec = new Date(valAnnee, valMois-1, 1);
	date_prec = (prec.getFullYear())+"/"+thisCal.addZero(prec.getMonth()+1)+"/"+thisCal.addZero(prec.getDate());
	suiv = new Date(valAnnee, valMois+1, 1);
	date_suiv = (suiv.getFullYear())+"/"+thisCal.addZero(suiv.getMonth()+1)+"/"+thisCal.addZero(suiv.getDate());
	divCal = '';
	divCal += '<table id="calendrier">';
	divCal += '<thead>';
	divCal += '<tr>';
	divCal += '<td><a href="javascript:thisCal.designDate(\''+date_prec+'\')"><<</a></td>';
	divCal += '<td colspan="5" align="center">'+mois[valMois]+' '+valAnnee+'</td>';
	divCal += '<td><a href="javascript:thisCal.designDate(\''+date_suiv+'\')">>></a></td>';
	divCal += '</tr>';
	divCal += '<tr><td>Lu</td><td>Ma</td><td>Me</td><td>Je</td><td>Ve</td><td>Sa</td><td>Di</td></tr>';
	divCal += '</thead>';
	divCal += '<tbody>';
	divCal += '<tr>';
	jourSemaine = 1; // Démarrage de la semaine le lundi (1)
	// Mettre les espaces blanc en début de mois si besoin
	while(d.getDay() != jourSemaine){
		divCal += '<td>&nbsp;</td>';
		jourSemaine ++;
		if(jourSemaine == 7){
			jourSemaine = 0;	
		}
	}
	
	// Mettre ensuite tous les jours du mois
	while(d.getMonth() == valMois){
				
		if(jourSemaine == 7){
			jourSemaine = 0;	
		}
		if(jourSemaine == 1){
			divCal += '</tr><tr>';	
		}
		
		var myClass = "";
		if(jour_actif == une_date.substr(0,4)+"/"+une_date.substr(5,2)+"/"+thisCal.addZero(d.getDate())){
			myClass = 'class="selected" '
			
		}
		
		link_date = '<a href="javascript:thisCal.setCalDate(\''+une_date.substr(0,4)+"/"+une_date.substr(5,2)+"/"+thisCal.addZero(d.getDate())+'\');" id="day_'+d.getDate()+'" '+myClass+'>'+d.getDate()+'</a>';
		
		divCal += '<td>'+link_date+'</td>'; 
		
		jourSemaine ++;
		
		d.setDate(d.getDate() + 1);
		
	}
	
	// Mettre les espaces blanc en fin de mois si besoin
	while(jourSemaine != 1 && jourSemaine != 8){
		divCal += '<td>&nbsp;</td>';
		jourSemaine ++;
	}
	
	divCal += '</tr></tbody></table>';
	document.getElementById('umaCalendrier').innerHTML = divCal;
	
}



UmaCalendar.prototype.init = function(nom_du_champ){
	
	thisCal = this;
	
	thisCal.nom_champ = nom_du_champ;
	
	// Créer un bouton correspondant
	document.write('<input id="umaDate_'+nom_du_champ+'" type="button" value=" " class="cal_btn" />');
	
	// Créer un div calendrier
	document.write('<div id="umaCalendrier" class="invisible"></div>');
	
	// déclencher les événement sur le bouton date
	document.getElementById("umaDate_"+nom_du_champ).onclick = function(){
		
		if(document.getElementById("umaCalendrier").className == "invisible"){
			thisCal.nom_champ = nom_du_champ;
			document.getElementById("umaCalendrier").className = "visible";
			document.getElementById("umaCalendrier").style.position = "absolute";

			defaultX = thisCal.getAbsLeft(document.getElementById("umaDate_"+nom_du_champ));
			defaultY = thisCal.getAbsTop(document.getElementById("umaDate_"+nom_du_champ));	
			if(document.all){
				document.getElementById("umaCalendrier").style.position = "fixed";
			}
			document.getElementById("umaCalendrier").style.left = (defaultX + 15) + "px";
			document.getElementById("umaCalendrier").style.top = (defaultY + 20) + "px";
			// Créer un tableau du mois en cours
			d = new Date();
			today = (d.getFullYear())+"/"+thisCal.addZero(d.getMonth()+1)+"/"+thisCal.addZero(d.getDate());
			
			jour_actif = today;
			if(document.getElementById(thisCal.nom_champ).value != ""){
				
				valDate = document.getElementById(thisCal.nom_champ).value;
				if(valDate.indexOf("/") == 2 && valDate.lastIndexOf("/") == 5){
					//Tenter d'extraire une date
					if(valDate.substr(6,4)*1 > 0 && 
						(valDate.substr(3,2)*1 > 0 && valDate.substr(3,2)*1 < 13) && 
						(valDate.substr(0,2)*1 > 0 && valDate.substr(0,2)*1 < 31)){
						jour_actif = valDate.substr(6,4)+"/"+valDate.substr(3,2)+"/"+valDate.substr(0,2);
					}else{
						// Vider le champs si c'est n'importe quoi
						document.getElementById(nom_du_champ).value = "";
					}
					
				}else{
					// Vider le champs si c'est n'importe quoi
					document.getElementById(nom_du_champ).value = "";
				}	
			}
			//alert(jour_actif);
			thisCal.designDate(jour_actif);
			
		}else{
			// Rendre invisible
			document.getElementById("umaCalendrier").className = "invisible";
		}
		
	}
	
	
}
