function clickoncalendar(adate){
	
	var moisnbjours=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	
	var thediv = document.getElementById('calendrier_result');
	var currday = adate.replace( /([0-9]*)\/[0-9]*\/[0-9]*/,  "$1" );
	var currday = parseInt(parseInt(currday,10)+1,10);
	var currmonth = adate.replace( /[0-9]*\/([0-9]*)\/[0-9]*/,  "$1" );
	var curryear = adate.replace( /[0-9]*\/[0-9]*\/([0-9]*)/,  "$1" );
	if( currday > moisnbjours[currmonth-1] ) {
		currday = "1" ;
		if ( currmonth >= 12 ) {
			currmonth = "1" ;
			curryear = parseInt(parseInt(curryear , 10 ) + 1 , 10);
		}
		else currmonth = parseInt(parseInt(currmonth , 10 ) + 1 , 10); 
	}
	thediv.innerHTML= " du " + adate + " au " + currday + "/" + currmonth + "/" + curryear ;
	document.getElementById('input_calendrier_result').value = thediv.innerHTML;
}	

//fonction pour la mise à jour des variables lors d'un changement de mois d'année ou lors de l'initialisation de l'objet
function minicalendrier_maj()
{	this.moisnbjours[1]=(!(this.a.getFullYear()%4) && (this.a.getFullYear()%100)||!((this.a.getFullYear()%100)||(this.a.getFullYear()%400)))?29:28; // les mois divisibles par 4 sont bissextilles sauf s'il sont séculaire et indivisibles par 400  :cf calendrier grégorien
	this.nbmoisav=(this.a.getMonth()>1)?this.moisnbjours[this.a.getMonth()-1]:this.moisnbjours[11];	//nombre de jours du mois précédent celui de this.a
	this.nbmoiscr=this.moisnbjours[this.a.getMonth()];						//nombre de jours du mois de this.a
	this.nbmoisap=(this.a.getMonth()<11)?this.moisnbjours[this.a.getMonth()+1]:this.moisnbjours[1];	//nombre de jours du mois suivant celui de this.a
	this.jprem=new Date(this.a.getFullYear()+"/"+(this.a.getMonth()+1)+"/1");				//premier jour du mois de this.a
	this.start=(this.jprem.getDay()==0)?-5:-(this.jprem.getDay()-2);					//numéro du premier jour du mois de this.a
	this.offset=this.start;
}

//fonction pour passer au mois suivant.
function minicalendrier_avencermois()
{	
	if(this.a.getMonth()<12)
	{this.a.setMonth(this.a.getMonth()+1);}
	else
	{this.a.setMonth(1);}		// traitement du mois de de décembre le mois suivant est 01 : janvier
	this.maj();
	eval('document.getElementById("'+this.support+'").innerHTML=\''+this.tracer().replace(/'/ig,"\\'")+'\';'); // on retrace le contenu du support avec les nouvelles valeurs
}

//fonction pour passer au mois suivant.
function minicalendrier_reculermois()	// même principe que pour avencermois() mais dans l'autre sens
{	if(this.a.getMonth()<12)
	{this.a.setMonth(this.a.getMonth()-1);}
	else
	{this.a.setMonth(1);}
	this.maj();
	eval('document.getElementById("'+this.support+'").innerHTML=\''+this.tracer().replace(/'/ig,"\\'")+'\';');
}

function minicalendrier_avenceran()		// pareil pour les années. Il n'y a plus le problème du passage de décembre à janvier ou l'inverse
{	this.a.setYear(this.a.getFullYear()+1);
	this.maj();
	eval('document.getElementById("'+this.support+'").innerHTML=\''+this.tracer().replace(/'/ig,"\\'")+'\';');
}

function minicalendrier_reculeran()
{	this.a.setYear(this.a.getFullYear()-1);
	this.maj();
	eval('document.getElementById("'+this.support+'").innerHTML=\''+this.tracer().replace(/'/ig,"\\'")+'\';');
}

// fonction de tracé du calendrier. C'est ici qu'il peut être intéressant de personnaliser le code à votre charte graphique ou pour un comportement différent
function minicalendrier_tracer()
{	var retour="";						// variable contenant le code html du calendrier;  celui qui sera inséré dans l'objet qui vous interesse
	var mm=0;						// variable représentative du mois
	retour+='<table width="200px">';
	for(var i=0;i<7;i++)					// pour chaque jours de la semaine
	{	retour+='<tr><td style="background-color:#BBB" width="50">'+this.jours[i]+'</td>';	// on remplis la colonne des jours
		for(var j=0;j<6;j++)				// pour six colonnes
		{	var a2=new Date();			// création d'une date de manipulation
			a2.setMonth(this.a.getMonth());		// a2 a le même mois que le a
			a2.setYear(this.a.getFullYear());		// et aussi la même année
			var tmp=i+this.offset;			// tmp est le numéro du jour pour la case courrante : tmp=i:le numéro du jour de la semaine + offset la position du premier jours du mois
			var tmp2=tmp;
			if(tmp<1)				// pour les jours précédant ceux du mois de a
			{	tmp2=tmp+this.nbmoisav;		// on ajoute au jour traité le nombre de jour du mois précédent celui de a
				a2.setMonth(this.a.getMonth()-1);}	// a2 prends le numéro du mois courrant -1
			if(tmp>this.nbmoiscr)			// opération similaire mais pour les jours suivant ceux du mois de a
			{	tmp2=tmp-this.nbmoiscr;
				a2.setMonth(this.a.getMonth()+1);}
			var clk=this.onclick.replace(/xxdatexx/,'\''+tmp2+'/'+(a2.getMonth()+1)+'/'+a2.getFullYear()+'\'');	// on remplace xxdatexx par la date courrante dans la fonction de rappel
			retour+='<td onclick="'+clk+'" bgcolor="silver">'+ tmp2 +'</td>'; //on trace le jour traité Il est possible d'ajouter une classe css ou de changer la forme bien évidemment.
			this.offset+=7;				// on ajoute une semaine pour passer à la colone suivante (j'avais envie d'avoir de jours en colones et non en ligne)
		}
		this.offset=this.start;				// on réinitialise l'offset pour une nouvelle colonne
		retour+='</tr>';
	}
	retour+='</table><table width="200px"><tr>';
	retour+='<td onclick="'+this.nominstance+'.reculermois();"><<</td><td align="center">'+this.mois[this.a.getMonth()]+'</td><td onclick="'+this.nominstance+'.avencermois();">>></td>';
	retour+='</tr><tr>';
	retour+='<td onclick="'+this.nominstance+'.reculeran();"><<</td><td align="center">'+this.a.getFullYear()+'</td><td onclick="'+this.nominstance+'.avenceran();">>></td>';
	retour+='</tr></table>';
	return(retour);
}

// constructeur de l'objet
function minicalendrier(nominstance,support,onclick)
{	this.nominstance=nominstance;			// nom de l'instance ( ça évite pas mal de complication)
	this.support=support;				// nom du support html (ça aussi c'est très pratique pour réaliser de raffraichissement du contenu)
	this.jours=new Array("lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");	
	this.mois = new Array("janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","decembre");
	this.moisnbjours=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	this.a = new Date();					//this.a est une date

	this.onclick=onclick;				// fonction de rappelle lors d'un clique sur une des case du tableau

//méthodes
	this.maj=minicalendrier_maj;			// méthode de raffraichissement des variables
	this.tracer=minicalendrier_tracer;		// méthode traçant le contenu html
	this.avencermois=minicalendrier_avencermois;	// méthode pour changer de mois ou d'année sans recharger la page html
	this.reculermois=minicalendrier_reculermois;
	this.avenceran=minicalendrier_avenceran;
	this.reculeran=minicalendrier_reculeran;
//initialisation
	this.maj();
}