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()};}


////////////////////////////////////////
daveiob=new Date();
secveil=daveiob.getTime()+(1000*3600*24);
////////////////////////////////////////


var dateS= strucDate(new Date(secveil));//date Selectionné
var dnow= strucDate(new Date(secveil));//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());}

function transf(day,month,year)// Fonction permettant d'obtenir une date en toute lettre au format français : ex: lundi 31 mars 2008.
{
navvers = navigator.appVersion.substring(0,1); // Test du navigateur internet utiliser.
   if (navvers > 3)
    navok = true;
   else
    navok = false;
   
   var today = new Date(year,month-1,day); // Code permmettant de créer un objet date recevant en paramètre le jour, le mois et l'année choisie.
  
  var jour = today.getDay(); // Code permettant d'obtenir le numéro du jour par raaport à l'objet date créé.
 
  var numero = today.getDate();

   if (numero<10)
    numero = "0"+numero; // Si numéro du jour inférieur à 10 on rajoute un zéro devant celui-ci.
   
   mois = today.getMonth(); // Code permettant d'obtenir le numéro du mois par raaport à l'objet date créé.
 
   var ret=0;
   
   if(mois==-1)
   { 
      mois=11;
      ret=1;
   }
   
   if (navok) // Test de l'année en fonction du navigateur internet utilisé.
    annee = today.getFullYear()-ret;
   else
    annee = today.getYear();
   
   TabJour = new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"); // Tableau où l'on stoke les jours de la semaine en toute lettres.
   //TabJour = new Array("Jeudi","Vendredi","Samedi","Dimanche","Lundi","Mardi","Mercredi");
   TabMois = new Array("janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","aout","septembre","octobre","novembre","d&eacute;cembre"); // Tableau où l'on stoke les mois en toutes lettre.
   messageDate=TabJour[jour] + " " + numero + " " + TabMois[mois] + " " + annee; // Variable permettant le stockage de la date converti en format francais écrit en toute lettre.
   if (day<10) day="0"+day;
   if (month<10) month="0"+month;
   return day+"/"+month+"/"+year;//messageDate; // Retourne la date converti. ex: Lundi 31 mars 2008
}



/* Test une date si elle est correct...spécial killer*/
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)// Fonction permettant de griser ou pas des cases du calendrier selon son utilisation.
{
styleX="font-family:Tahoma;font-size:10px;text-align:center;";
//styleX+=(oldX)?"":"color:#e0e0e0;";
styleX+="cursor:hand;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;";
if (jourPause[xx]||jourFeriee[jj+"-"+mm]!=null) styleX+="background:#f0f0f0;";// Code permettant le grisage des case correspondant à des jours fériees ou de week end.
if(jj==dnow.jour&&mm==dnow.mois&&aa==dnow.annee) styleX+="border:1px #3D038A solid;"; // Code permettant de marquer en rouge le jour du mois en cours.


/*************************************/

dep=document.se.depart.value;
//ret=document.se.retour.value;
if(dep!="")
{
dep_annee=dep.substring(6,10);
dep_mois=dep.substring(3,5);
dep_mois=1*dep_mois;
dep_mois=dep_mois-1;
if(dep_mois<10)
dep_mois="0"+dep_mois;
dep_jour=dep.substring(0,2);
debut=new Date(dep_annee,dep_mois,dep_jour);
a=debut.getTime();
b=1000*3600*24*2;
c=a+b;
s=new Date(c);
}

if(dep==""){
minjour=dnow.jour;
minmois=dnow.mois;
minannee=dnow.annee;
}
else
{
minjour=s.getDate();
minmois=s.getMonth();
minannee=s.getYear();
minmois=minmois+1;
if(minmois<10) minmois="0"+minmois;
}
/*
if(jj<dnow.jour && mm==dnow.mois && aa==dnow.annee) styleX+="color:#e0e0e0;"; // Code permettant de griser les jours antérieur à celui du moi en cours.
if(mm<dnow.mois && aa==dnow.annee ) styleX+="color:#e0e0e0;"; // Code permettant de griser les mois antérieurs à celui en cours de l'année en cours. 
if(aa<dnow.annee) styleX+="color:#e0e0e0;";// Code permettant de griser les années antérieur à celle en cours.
*/
if(jj<minjour && mm==minmois && aa==minannee) styleX+="color:#e0e0e0;"; // Code permettant de griser les jours antérieur à celui du moi en cours.
if(mm<minmois && aa==minannee ) styleX+="color:#e0e0e0;"; // Code permettant de griser les mois antérieurs à celui en cours de l'année en cours. 
if(aa<minannee) styleX+="color:#e0e0e0;";// Code permettant de griser les années antérieur à celle en cours.



/*************************************/
   

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);
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
htm="<table><tr style='font-size:10px;font-family:Tahoma;text-align:center;'>";
htm+="<td style='cursor:hand;' onclick=\"view_microcal(true,"+ki.id+","+source.id+","+(dateS.mois-1)+","+dateS.annee+");\"><img src='images/moins.jpg' alt='Précédent'></td>";
htm+="<td colspan='5'> <b> <font style='color:#3D038A'>"+moisX[dateS.mois]+"&nbsp;"+dateS.annee+"</font></b></td>";
htm+="<td  style='cursor:hand;' onclick=\"view_microcal(true,"+ki.id+","+source.id+","+(dateS.mois+1)+","+dateS.annee+")\"><img src='images/plus.jpg' alt='Suivant'></td></tr>";
//--corps
htm+="<tr>";
//affichage des jours DLMMJVS
for (x=0;x<7;x++) 
htm+="<td  style='font-size:10px;font-family:Tahoma; color:#3D038A;'><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--;}
jmbefore=transf(jj,mm,aa);
htm+="<td style='"+testTravail(true,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+jmbefore+((jj<10)?"":"")+((mm<10)?"":"")+"';"+".style.color='black';\">"+"</td>"; // N'affiche pas la date choisie dans le champs de saisie de la date.

}
else if (idxP>jmaxi) //jour du mois suivant
{
jj=idxP-jmaxi;mm=dateS.mois+1;
if (mm==13)
{mm=1;aa++;}
jmafter=transf(jj,mm,aa);
htm+="<td style='"+testTravail(true,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+jmafter+((jj<10)?"":"")+((mm<10)?"":"")+"';"+".style.color='black';\">"+"</td>"; // N'affiche pas la date choisie dans le champs de saisie de la date.

}
else //jour du mois en cours
{
jj=idxP;
mm=dateS.mois;
jmnow=transf(jj,mm,aa);// Appel de la fonction permettant d'obtenir la date au format suivant: ex:Lundi 31 mars 2008.
htm+="<td style='"+testTravail(true,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+jmnow+((jj<10)?"":"")+((mm<10)?"":"")+"';"+((jj<dnow.jour && mm==dnow.mois && aa==dnow.annee || mm<dnow.mois && aa==dnow.annee || aa<dnow.annee )?"":"(ki.id)")+".style.color='black';\">"+jj+"</td>"; //  Affiche la date choisie dans le champs de saisie de la date si le jour est inférieur au jour du mois en cours de l'année en cours ou si le mois est inférieur au mois en cours de l'année en cours.

}

}

htm+="</tr>"
}//-------------------------
htm+="</table>"

//affiche le tableau
source.innerHTML=htm;
source.style.visibility="";
}
else
{
//ferme le calendrier
if (fermable_microcal)
   cc=setTimeout(source.id+".style.visibility='hidden'",200);
}

}
