moisX = ["","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"];
JourM = ["Di","Lu","Ma","Me","Je","Ve","Sa"];

var fermable_microcal = true;
var select_old = null;

var startWeek=0;//debut de la semaine 0=dim,1=lun,...
var jourPause={0:true,6:true}; //jour de pause de la semaine
var jourFeriee={"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"};


//-- Structure la date
function strucDate(dateX){
	return {"pos":dateX.getDay(),"jour":dateX.getDate(),"mois":dateX.getMonth()+1,"annee":dateX.getFullYear()};
}


var dateS= strucDate(new Date());//date Selectionné
var dnow = strucDate(new Date());//date actuelle


//-- Retourne le ième jour du 1er du mois
function premJourMois(mois,annee){return (new Date(annee,mois-1,1).getDay());}

//-- Retourne le jour max du mois
function JmaxMois(mois,annee){return (new Date(annee,mois,0).getDate());}



/* Test une date si elle est correct...*/
function testTypeDate(dateEntree){
	tst=false;
	try
	{
	rc=dateEntree.split("/");nd=new Date(rc[2],(rc[1]-1),rc[0]);
	tst=(rc[2]>1800&&rc[2]<2200&&rc[2]==nd.getFullYear()&&rc[1]==(nd.getMonth()+1)&&rc[0]==nd.getDate());
	}
	catch(e) {}
	return tst;
}


//-- Selection de la zone avec la souris
function choix(koi,code){
	if (code)
		{
		select_old= koi.style.background;
		koi.style.background ='#c0c0FF';
		}
		else
		{
		koi.style.background =select_old;
		}
}


function testTravail(oldX,xx,jj,mm,aa){
	styleX="font-family:Tahoma;font-size:10px;text-align:center;";
	styleX+=(oldX)?"":"color:#e0e0e0;";
	styleX+="border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;";
	if (jourPause[xx]||jourFeriee[jj+"-"+mm]!=null) styleX+="background:#f0f0f0;";
	if (jj==dnow.jour&&mm==dnow.mois&&aa==dnow.annee) styleX+="border:2px red solid;";
	return styleX;
}


//-- Test si année bissextile
function bissextile(annee){
	return (annee%4==0 && annee %100!=0 || annee%400==0);
}

//-- Retourne le nombre de jour depuis le 1er janvier (num de semaine)
function nbJAnnee(dateX){
	var nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334];
	j=dateX.jour ; m=dateX.mois ; a=dateX.annee;
	nb=nb_mois[m]+j-1 ;
	if (bissextile(a) && m>2) nb++;
	return nb;
}


//-- Affiche le calendrier
function view_microcal(actif,ki,source,mxS,axS){
if(actif)
	{
	//-- Decalage du mois su on clique sur -/+
	if(mxS!=-1)
		{
		clearTimeout(cc);
		document.getElementById(ki).focus();
		fermable_microcal=true;
		dateS.mois=mxS;
		dateS.annee=axS;
		if(dateS.mois<1){dateS.annee--;dateS.mois+=12;}
		if(dateS.mois>12){dateS.annee++;dateS.mois-=12;}
		}

	//-- Init
	Dstart=(premJourMois(dateS.mois,dateS.annee)+7-startWeek)%7;
	jmaxi=JmaxMois(dateS.mois,dateS.annee);
	jmaxiAvant=JmaxMois((dateS.mois-1),dateS.annee);

	//si on veux ajouter le numero de la semaine ...
	//idxWeek=parseInt(nbJAnnee(strucDate(new Date(dateS.mois+'-01-'+dateS.annee)))/7,10)+1;

	ymaxi=parseInt((jmaxi+Dstart+1)/7,10);


	//-- Generation du tableau
	//--entête : MOIS
	htm="<table><tr style='font-size:10px;font-family:Tahoma;text-align:center;'>";
	htm+="<td style='cursor:hand;' onclick=\"view_microcal(true,'"+ki+"','"+source+"',"+(dateS.mois-1)+","+dateS.annee+");\">-</td>";
	htm+="<td colspan='5'> <b> "+moisX[dateS.mois]+"</b>&nbsp;"+dateS.annee+"</td>";
	htm+="<td style='cursor:hand;' onclick=\"view_microcal(true,'"+ki+"','"+source+"',"+(dateS.mois+1)+","+dateS.annee+")\">+</td></tr>";
	//--corps
	htm+="<tr>";
	//affichage des jours DLMMJVS
	for(x=0;x<7;x++)
	htm+="<td style='font-size:10px;font-family:Tahoma;'><b>"+JourM[(x+startWeek)%7]+"</b></td>";
	htm+="</tr>";


	//------------------------
	for(y=0;y<=ymaxi;y++)
		{
		htm+="<tr>";
		for(x=0;x<7;x++)
			{
			idxP=y*7+x-Dstart+1; //numero du jour
			aa=dateS.annee;
			xx=(x+startWeek)%7;
			//jour du mois précedent
			if(idxP<=0)
				{
				jj=idxP+jmaxiAvant;mm=dateS.mois-1;
				if(mm==0)
					{mm=12;aa--;}
				htm+="<td style='"+testTravail(false,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)' onclick=\""+ki+".value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"';"+ki+".style.color='black';\">"+jj+"</td>";
				}
				else if (idxP>jmaxi) //jour du mois suivant
				{
				jj=idxP-jmaxi;mm=dateS.mois+1;
				if(mm==13)
					{mm=1;aa++;}
				
				htm+="<td style='"+testTravail(false,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)' onclick=\"document.getElementById('"+ki+"').value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"';document.getElementById('"+ki+"').style.color='black';\">"+jj+"</td>";
				}
				else //jour du mois en cours
				{
				jj=idxP;mm=dateS.mois;
				htm+="<td style='"+testTravail(true,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)' onclick=\"document.getElementById('"+ki+"').value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"'; document.getElementById('"+ki+"').style.color='black';document.getElementById('"+source+"').style.visibility='hidden'; \">"+jj+"</td>";
				}
			}
		htm+="</tr>";
		}


	//-------------------------
	htm+="</table>";
	
	//affiche le tableau
	document.getElementById(source).innerHTML=htm;
	document.getElementById(source).style.visibility="";
	}
	else
	{
	//-- Ferme le calendrier
	if(fermable_microcal)
	   cc=setTimeout("document.getElementById('"+source+"').style.visibility='hidden'",500);
	}
}