// Class calendar pour kahina
// franckysolo.productions © 
// Le: 17/11/2008


//		constructeur		//
function Calendrier()
	{
	//		attributs		//
	this.timer = null;
	this.champ = null;
	this.date = new Date();
	this.tab_jour = new Array('Mon','Tue','Wen','Thu','Fri','Sat','Sun');
	this.tab_mois = new Array('January','February','March','April','May','June','Jully','August','September','October','November','December');
	this.nb_jour_mois = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	
	//	methodes		//
	this.creer_div = creer_div;
	this.init_timer = init_timer;
	this.stop_timer = stop_timer;
	this.creer_champ = creer_champ;
	this.affiche = affiche;
	this.cache = cache_calendar;
	this.calendar = calendar;
	this.select_date = select_date;
	this.format = format;
	}
// creer la div calendar
function creer_div()
	{
	document.write('<div id="calendar" onmouseover="cal.stop_timer();" onmouseout="cal.init_timer();">&nbsp;</div>');
	}
	
// 		creer le champ input en fct du nom
function creer_champ(nom)
	{
	document.write("<input type='text' onfocus=\"cal.affiche(this);\" name=\""+nom+"\"  />");
	}
	
//		attribut la valeur cliquez au champ qui a le focus
function select_date(txt)
	{
	txt = this.format(txt);
	this.champ.value = txt;
	this.cache();
	}
	
//		ajoute la date cliquée formatée xx/xx/xxxx dans un champ date ;-)
function format(txt)
	{
	var reg = new RegExp ("[/]+","g");
	var tab_valeur = txt.split(reg);
	var jour = tab_valeur[0];
	//on rajoute un au mois pour avoir le numéro réel du mois	
	var mois = parseInt(tab_valeur[1] )+ 1;//p'tite magouille sinon ça bug :-\
	var annee = tab_valeur[2];
	if(jour < 10)
		{
		jour = "0"+jour;
		}
	if(mois < 10)
		{
		mois = "0"+mois;
		}
	return jour+"/"+mois+"/"+annee ;
	}
	
//		demarre le timer
function init_timer()
	{
	if(this.timer == null)
		{
		this.timer = setTimeout("cache_calendar()",3000);
		}
	}
//		arrete le timer
function stop_timer()
	{
	if(this.timer != null)
		{
		clearTimeout(this.timer);
		this.timer = null;
		}
	}
	
// 		affiche le calendar en dessous de l'input
function affiche(champ)
	{
	this.stop_timer();
	this.champ = champ;
	var div = document.getElementById("calendar");
	div.style.top = (champ.offsetTop + champ.offsetHeight + 3)+"px";//on le place juste en dessous
	div.style.left = champ.offsetLeft+"px";//et avec la meme marge
	this.calendar();//le calendar
	div.style.display = "block";//on affiche
	this.init_timer();
	}
	
// 	cache le calendar
function cache_calendar()
	{
	if(document.getElementById)
		{
		var div = document.getElementById("calendar");
		 div.style.display = "none";//on cache
		}
	cal.stop_timer();//on  arrete le timer
	}
	
//		construit le calendar en html et calcul les dates
function calendar()
	{
	var annee = this.date.getFullYear();
	var mois = this.date.getMonth()  ;
	
	//calcul de premier jour du mois
	var time = new Date();
	time.setDate(1);
	time.setMonth(this.date.getMonth());
	time.setFullYear(this.date.getFullYear());
	var first_day = time.getDay();
	if( first_day == 0 )//dimanche
		{
		first_day = 7;
		}
	//		le nb de jour dans		//
	var nb_jour = this.nb_jour_mois[this.date.getMonth()];
	//attention pour les annee bisexctile on change fevrier en 29 ;-)
	this.nb_jour_mois[1] = ( annee % 4 == 0 ) ? 29 : 28;
	//		le jour courant 
	var today = this.date.getDate();
	//	lien et mois courant << mois Annee >>	//
	var str = "<table class='calendar'><tr class='entete_cal'><th colspan='7'>";
	str +="<a href='#' onclick=\"cal.date.setMonth("+(this.date.getMonth() - 1)+");cal.calendar();\"><span class='bold'> << </span>&nbsp;</a>"+this.tab_mois[mois]+" "+annee+"<a href='#' onclick=\"cal.date.setMonth("+(this.date.getMonth() + 1)+");cal.calendar();\">&nbsp;<span class='bold'> >> </span></a></th></tr>";
	
	//		entete avec nom des jours		//
	str += "<tr class='jour'>";
	for (var i = 0 ; i < this.tab_jour.length; i++){
		str += "<td>"+this.tab_jour[i]+"</td>";
	}
	str += "</tr>";
	
	//		on remplit maintenant a partir du premier jour du mois		//
	
	//la premiere ligne on remplis par des blancs 
	//tant qu'on est pas au 1er jour du mois
	str += "<tr>";//1er ligne
	var n = 0;
	//if(n < 10) n = "0"+n;
	for (var i = 0; i < first_day - 1 ; i++){
		str += "<td class='morte'>&nbsp;</td>";//les cases vides pour l'affichage :)
	}
	for (var n = 0; n < 7 - i; n++){
		var txt = (n + 1)+"/"+mois+"/"+annee;
		str += ( (n + 1) == today) ? "<td class='rouge' onclick='cal.select_date(\""+txt+"\");'>"+(n + 1)+"</td>"  : "<td onclick='cal.select_date(\""+txt+"\");'>"+(n + 1)+"</td>";
	}
	str += "</tr>";//on ferme la premiere ligne
	
	//		le reste des lignes		//
	while ( n  < nb_jour )
		{
		str += "<tr>";
		for(var j = 0; j < 7 ; j++)
			{
			n++;
			if( n <= nb_jour )
				{
				var txt = n+"/"+mois+"/"+annee;
				str += ( n == today) ? "<td class='rouge' onclick='cal.select_date(\""+txt+"\");'>"+n+"</td>"  : "<td onclick='cal.select_date(\""+txt+"\");'>"+n+"</td>";
				}
			else
				{
				str += "<td class='morte'>&nbsp;</td>";//on fini le tableau par des cases vides
				}
			}
		str += "</tr>";
		}
	str += "</table>";
	if(document.getElementById)
		{
		document.getElementById('calendar').innerHTML = str;
		}
	}


