var isDHTML = 0;
var isID = 0;
var isAll = 0;
var isLayers = 0;


if (document.getElementById)
{	isID = 1;
	isDHTML = 1;
}
else
{	if (document.all)
	{	isAll = 1;
		isDHTML = 1;
	}
	else
	{	browserVersion = parseInt(navigator.appVersion);
		if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4))
		{	isLayers = 1;
			isDHTML = 1;
		}
	}
}

// Ref multinavigateur d'un objet ou de son style
function findDOM(objectID,withStyle) {
	if (withStyle == 1) {
		if (isID) { return (document.getElementById(objectID).style) ; }
		else {
			if (isAll) { return (document.all[objectID].style); }
			else {
				if (isLayers) { return (document.layers[objectID]); }
			};
		}
	}
	else {
		if (isID) { return (document.getElementById(objectID)) ; }
		else {
			if (isAll) { return (document.all[objectID]); }
			else {
				if (isLayers) { return (document.layers[objectID]); }
			};
		}
	}
}

// Affichage bulle d'aide automatique
function popUp(evt,objectID){
	popUpWithAll(evt,objectID,-10,15,-1,-1,true);
}
// Affichage bulle d'aide en relatif / souris
function popUpRelative(evt,objectID,offsetX,offsetY,autom){
	popUpWithAll(evt,objectID,offsetX,offsetY,-1,-1,autom);
}
// Affichage bulle d'aide en coordonnées absolues
function popUpAbsolute(evt,objectID,Xabs,Yabs){
	popUpWithAll(evt,objectID,0,0,Xabs,Yabs,false);
}

function popUpWithAll(evt,objectID,offsetX,offsetY,Xabs,Yabs,autom){

	if (isDHTML) {
		domStyle = findDOM(objectID,1);
		if (Xabs != -1 && Yabs != -1) {
			topVal = Yabs;
			leftVal = Xabs;
		}
		else {
			dom = findDOM(objectID,0);
			elemWidth = (dom.offsetWidth)? dom.offsetWidth: ((dom.clip)? dom.clip.width: 0);
			scrollLeft = (evt.x && !isLayers)? document.body.scrollLeft: 0;
			x = (evt.pageX)? evt.pageX: evt.x;
			dx = offsetX;

			if (Xabs != -1) {
				leftVal = Xabs;
			}
			else {
				livePageWidth = (window.innerWidth)? window.innerWidth: document.body.clientWidth;
				leftVal = x + dx + scrollLeft;
				if (autom) {
					/* Si l'élément sort de la page à gauche ou à droite, ceci le repositionne */
					if ((leftVal + elemWidth - scrollLeft) > livePageWidth)
					{	leftVal2 = x + scrollLeft - elemWidth + 10;
						if (leftVal2 >= 2)
						{ leftVal = leftVal2 }
						else
						{ leftVal = livePageWidth - elemWidth - 2; }
					}
				}
				if (leftVal < 2)
				{ leftVal = 2; }
			}
			if (Yabs != -1) {
				topVal = Yabs;
			}
			else {
				livePageHeight = (window.innerHeight)? window.innerHeight: document.body.clientHeight;
				elemHeight = (dom.offsetHeight)? dom.offsetHeight: ((dom.clip)? dom.clip.height: 0);
				y = (evt.pageY)? evt.pageY: evt.y;
				dy = offsetY;
				scrollTop = (evt.y && !isLayers)? document.body.scrollTop: 0;
				topVal = y + dy + scrollTop;
				if (autom) {
					/* Si l'élément sort de la page en bas ou en haut, ceci le repositionne */
					if ((topVal + elemHeight - scrollTop) > livePageHeight)
					{	topVal2 = y - 5 + scrollTop - elemHeight;
						if (topVal2 >= 2)
						{ topVal = topVal2 }
						else
						{ topVal = livePageHeight - elemHeight - 2;
						  /* Pour éviter que le calque soit sous le curseur de souris */
						  if (leftVal-scrollLeft <= x && leftVal-scrollLeft+elemWidth >= x)
						  {	leftVal = x - dx + scrollLeft; }
						}

					}
				}
				if (topVal < 2)
				{ topVal = 2; }
			}
		}
		domStyle.top = topVal;
		domStyle.left = leftVal;
		domStyle.visibility = "visible";
	}
}

function popDown(objectID){
	if (isDHTML) {
		domStyle = findDOM(objectID,1);
		domStyle.visibility = "hidden";
	}
}

	//Ouverture fenêtre
	function popup(adr,scr,h,w) {
	
		window.open(adr,'','toolbar=0,location=0,directories=0,menuBar=0,scrollbars='+scr+',resizable=0,width='+h+',height='+w+',left=100,top=100');
	
	}

	
	
function showCalendar(y,m,d) {	
			
		 if (document.getElementById('divCalendar').style.visibility=='visible') {
		 	document.getElementById('divCalendar').style.visibility='hidden';
		 } else {
		   document.getElementById('divCalendar').style.visibility='visible';
		 }
		 y=y*1;
		 m=m*1;
		 d=d*1;
		 auj=new Date(y,m-1,d);
		 CheckData(auj,'0');
}

function showLegende() {
		 if (document.getElementById('divLegende').style.visibility=='visible') {
		 	document.getElementById('divLegende').style.visibility='hidden';
		 } else {
		   document.getElementById('divLegende').style.visibility='visible';
		 }
}


var HTMLCode = "";
var DaysList = new Array("Jour_Vide", "L", "M", "M", "J", "V", "S", "D");
var MonthsList = new Array("Mois_Vide", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
var MonthLength = new Array("Mois_longueur_vide",31,29,31,30,31,30,31,31,30,31,30,31);

var QueryDate = 0; /* Jour demande (date)*/
var QueryMonth = 0; /* Mois demande*/
var QueryYear = 0; /* Annee demandee*/
var QueryDay = 0; /* Jour de la semaine du jour demande, inconnu*/
var FirstDay = 0; /* Jour de la semaine du 1er jour du mois*/
var WeekRef = 0; /* Numerotation des semaines*/
var WeekOne = 0; /* Numerotation des semaines*/

var Today = new Date();
var TodaysYear = Today.getYear();
var TodaysMonth = Today.getMonth() + 1;
var TodaysDate = Today.getDate();
var TodaysDay = Today.getDay() + 1;
if (TodaysYear < 2000) { TodaysYear += 1900; }

/* On commence par verifier les donnees fournies par l'utilisateur*/
function CheckData(ladate,ind)
{	  


if (ind!=0) {	 
   
   if (ind=="1") {	  
   	  x=((ladate.getMonth()+2)==13)?1:ladate.getMonth()+2;
	  //alert(x+"/"+MonthLength[x]+"/"+ladate.getDate()) 
   	  if (MonthLength[x] < ladate.getDate()) /* on verifie si la date est coherente*/
   	  {		
		 ladate.setDate(MonthLength[x]);
   	  } 
	  mo=ladate.getMonth()+1;
   } else {
   	  x=((ladate.getMonth())<0)?11:ladate.getMonth();
	  //alert(x+"/"+MonthLength[x]+"/"+ladate.getDate()) 
   	  if (MonthLength[x] < ladate.getDate()) /* on verifie si la date est coherente*/
   	  {		
		 ladate.setDate(MonthLength[x]);
   	  } 
	  mo=ladate.getMonth()-1;
   }
   //alert(ladate.getMonth()+"/"+mo);
   ladate.setMonth(mo);   
} 

QueryDate=ladate.getDate();	 
QueryMonth=ladate.getMonth()+1;	
QueryYear=ladate.getFullYear();	
laDate=new Date(QueryYear,QueryMonth-1,QueryDate);
MonthLength[2] = CheckLeap(QueryYear);
//alert ((QueryYear * 10000 + QueryMonth * 100 + QueryDate))
//alert(MonthLength[QueryMonth]+"/"+ QueryDate)
/* on teste si la date choisie est anterieure au lundi 20 decembre 1582*/
if ((QueryYear * 10000 + QueryMonth * 100 + QueryDate) < 15821220)
{
alert("Vous avez choisi une date antérieure au 20 décembre 1582, hors du calendrier Grégorien. \nVeuillez sélectionner une date plus récente.");
document.Cal.reset();
CheckData();
}
else if (MonthLength[QueryMonth] < QueryDate) /* on verifie si la date est coherente*/
{		
//alert("Il n'y a pas " + QueryDate + " jours en " + MonthsList[ladate.getMonth()] + " " + QueryYear + " mais " + MonthLength[ladate.getMonth()] + ". \nVeuillez choisir une autre date.");
//document.Cal.reset();
//CheckData();
}
else { DisplaySchedule(); }

}
/* Teste une annee pour determiner si elle est bissextile ou pas*/
function CheckLeap(yy)
{
if ((yy % 100 != 0 && yy % 4 == 0) || (yy % 400 == 0)) { return 29; }
else { return 28; }
}

/* Renvoie le numero de la semaine correspondant a la date requise*/
function DefWeekNum(dd)
{
numd = 0;
numw = 0;
for (n=1; n<QueryMonth; n++)
{
numd += MonthLength[n];
}
numd = numd + dd - (9 - DefDateDay(QueryYear,1,1));
numw = Math.floor(numd / 7) + 1;

if (DefDateDay(QueryYear,1,1) == 1) { numw++; }
return numw;
}

/* Renvoie le numero du jour de la semaine correspondant a la date requise */
function DefDateDay(yy,mm,dd)
{
return Math.floor((Date2Days(yy,mm,dd)-2) % 7) + 1;
}

/* Transforme la date en nb de jours theoriques */
function Date2Days(yy,mm,dd)
{
if (mm > 2)
{
var bis = Math.floor(yy/4) - Math.floor(yy/100) + Math.floor(yy/400);
var zy = Math.floor(yy * 365 + bis);
var zm = (mm-1) * 31 - Math.floor(mm * 0.4 + 2.3);
return (zy + zm + dd);
}
else
{
var bis = Math.floor((yy-1)/4) - Math.floor((yy-1)/100) + Math.floor((yy-1)/400);
var zy = Math.floor(yy * 365 + bis);
return (zy + (mm-1) * 31 + dd);
}
}

/* Produit le code HTML qui formera le calendrier */
function DisplaySchedule()
{			
HTMLCode = "<table width=222 cellspacing=0 cellpadding=0 border=0>";
QueryDay = DefDateDay(QueryYear,QueryMonth,QueryDate);
WeekRef = DefWeekNum(QueryDate);
WeekOne = DefWeekNum(1);   
HTMLCode += "<tr height=25 align=center><td class=tr11></td><td colspan=6 class=tr11><select name=\"selectM\" style=\"width:80px\" class=\"gf11\" onChange=\"\">";
//HTMLCode += "<option value>Mois</option>"; 
for (x=1; x<MonthsList.length; x++) {
	HTMLCode += "<option value=" + x ;
	if (x==	TodaysMonth) HTMLCode +=" selected";
	HTMLCode+= ">" + MonthsList[x] + "</option>";   
}
HTMLCode += "</select>&nbsp;";
HTMLCode += "<select name=\"selectA\" class=\"gf11\">";
for (x=(TodaysYear-2); x<(TodaysYear+5); x++) {
	HTMLCode += "<option value='"+x+"'";
	if (x==	TodaysYear) HTMLCode +=" selected";
	HTMLCode +=  ">" + x + "</option>";   
}		 
//toto="hello !";
HTMLCode += "</select>";
HTMLCode += "&nbsp;<a href='javascript:showAgenda(document.forms[0].selectA.options[document.forms[0].selectA.selectedIndex].value,document.forms[0].selectM.options[document.forms[0].selectM.selectedIndex].value,\"1\")' class=tr11><b>OK</b></a>";		
HTMLCode += "</td><td class=tr11></td></tr>";
HTMLCode += "<tr height=15 align=center><td class=tr11><a href='javascript:CheckData(laDate,\"-1\")' class=tr11><<</a></td><td colspan=6 class=tr11><b>" + MonthsList[QueryMonth] + " " + QueryYear + "</b></td><td class=tr11><a href='javascript:CheckData(laDate,\"1\")' class=tr11>>></a></td></tr><tr  height=15  align=center>";
HTMLCode += "<td class=tro11><b>S.</b></td>";
 // showAgenda("+this.selectA.options[this.selectA.selectedIndex].value+","+document.forms[0].selectM.options[document.forms[0].selectM.selectedIndex].value+",\"1\")
for (s=1; s<8; s++)
{ 
if (QueryDay == s) { HTMLCode += "<td class=tro11><b>" + DaysList[s] + "</b></td>"; }
else { HTMLCode += "<td class=tro11><b>" + DaysList[s] + "</b></td>"; }
}
HTMLCode += "</tr>";
a = 0;

if (QueryYear %4 == 0 && QueryYear %100 !=0 || QueryYear %400 == 0) {MonthLength[2]=29;} else {MonthLength[2]=28;};
  
for (i=(1-DefDateDay(QueryYear,QueryMonth,1)); i<MonthLength[QueryMonth]; i++)
{ 
//alert(i);
HTMLCode += "<tr  height=14 align=center>";	 
//numero=DefSemaineNum(QueryYear,(QueryMonth-1),(i+1));  
//if (numero==0) {numero=53; i=i-1;} else if (numero==54) numero=53;	
numero=new Date(QueryYear, (QueryMonth-1), (i+7)).getWeek();
HTMLCode += "<td class=tro11>" + numero +"</td>";

a++;
for (j=1; j<8; j++)
{
jr=eval(j+i); 

if ((i+j) <= 0) { HTMLCode += "<td class=t11>&nbsp;</td>"; }
else if ((i+j) == QueryDate) { HTMLCode += "<td class=tro11><a href='javascript:showAgenda("+QueryYear+","+QueryMonth+","+jr+")' class=s11>" + (i+j) + "</a></td>"; }
else if ((i+j) > MonthLength[QueryMonth]) { HTMLCode += "<td class=t11>&nbsp;</td>"; }
else { HTMLCode += "<td class=t11><a href='javascript:showAgenda("+QueryYear+","+QueryMonth+","+jr+")' class=s11>" + (i+j) + "</a></td>"; }
}

HTMLCode += "</tr>";
i = i + 6;
}
 //alert(HTMLCode)
document.getElementById("divCalendar").innerHTML = HTMLCode + "</table>";
}

function showAgenda(ye,mo,da) {
 chem='index.php?id='+id+'&cnx='+cnx+'&qui='+qui+'&adm='+adm+'&pg='+pg+'&numero='+numero+'&moisj='+moisj+'&jourm='+ye+'-'+mo+'-'+da+'&liste_client='+liste_client+'&incr='+incr+'&idf_r='+idf_r+'&sel_numtyp='+sel_numtyp+'&listeTypeRdv='+listeTypeRdv+'&dureeType='+dureeType+'&numfiche='+numfiche+'&liste_pdt='+liste_pdt+'&maxnumh='+maxnumh;
 window.location=chem;

}



// Pour utiliser la fonction "setTimeout" avec les anciens navigateurs, on utilise des variables globales
var msg="MESSAGE";
var index=0;
var delay=200

function defil() {
	// Fonction récursive pour le décalage du texte du message
//	document.forms[0].defil.blur();
	var nb_char=msg.length;
	index++;
	if (index>nb_char) index=0;
	document.forms[0].defil.value=msg.substring(index)+msg;
	setTimeout("defil()",delay);
}

function defiler(txt,tps) {
	//Cette fonction est appelée pour déclencher le défilement.
	msg=txt + "   -   ";
	delay=tps;
	defil();
}
 

 //Fonction chargée de renvoyer le numero de la semaine de la date passée en paramètres
function Sem(A,M,J)
 {
 date=new Date();
 date.setYear(A);
 date.setMonth(M);
 date.setDate(J);
 date2=new Date(A,0,1);
 x=1;
 //Cherche le premier Lundi de l'année
 do
 {
 date2.setDate(x);
 x++;
 }
 while(date2.getDay()!=1);
 temps=date.getTime()-date2.getTime()+24*60*60*1000;
 sem=temps/(1000*60*60*24*7);
 return Math.ceil(sem);
 } 


/******************************************************
FONCTION QUI DETERMINE LE NUMERO DE LA SEMAINE EN COURS
******************************************************/
function DefSemaineNum(aaaa, mm, jj)
{
//initialisation des variables
//----------------------------
var MaDate  = new Date(aaaa,mm,jj);//date a traiter
var annee = MaDate.getFullYear();//année de la date à traiter
var NumSemaine = 0,//numéro de la semaine

// calcul du nombre de jours écoulés entre le 1er janvier et la date à traiter.
// ----------------------------------------------------------------------------
// initialisation d'un tableau avec le nombre de jours pour chaque mois
ListeMois = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
// si l'année est bissextile alors le mois de février vaut 29 jours
if (annee %4 == 0 && annee %100 !=0 || annee %400 == 0) {ListeMois[1]=29};
// on parcours tous les mois précédants le mois à traiter 
// et on calcul le nombre de jour écoulé depuis le 1er janvier dans TotalJour
var TotalJour=0;
for(cpt=0; cpt<mm; cpt++){TotalJour+=ListeMois[cpt];}
TotalJour+=jj;

//Calcul du nombre de jours de la première semaine de l'année à retrancher de TotalJour
//-------------------------------------------------------------------------------------
//on initialise dans DebutAn le 1er janvier de l'année à traiter
DebutAn = new Date(annee,0,1);
//on determine ensuite le jour correspondant au 1er janvier
//de 1 pour un lundi à 7 pour un dimanche/
var JourDebutAn;
JourDebutAn=DebutAn.getDay();
if(JourDebutAn==0){JourDebutAn=7};

//Calcul du numéro de semaine
//----------------------------------------------------------------------
//on retire du TotalJour le nombre de jours que dure la première semaine 
TotalJour-=8-JourDebutAn;
//on comptabilise cette première semaine
NumSemaine = 1;
//on ajoute le nombre de semaine compléte (sans tenir compte des jours restants)
NumSemaine+=Math.floor(TotalJour/7);
// s'il y a un reste alors le n° de semaine est incrémenté de 1
if(TotalJour%7!=0){NumSemaine+=1};

return(NumSemaine);
}

  


 Date.prototype.getYearDay = function() { //1 - 366
 var year = this.getFullYear();
 var month = this.getMonth();
 var day = this.getDate();

 var offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];

 //l'année bissextile n'est utile qu'à partir de mars
 var bissextile = (month < 2) ? 0 : (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));

 return parseInt(day + offset[month] + bissextile);
 }

 Date.prototype.getMonday = function() {
 var offset = (this.getDay() + 6) % 7;
 return new Date(this.getFullYear(), this.getMonth(), this.getDate()-offset);
 }

 Date.prototype.getWeek = function() { //1 - 53
 var year = this.getFullYear();
 var week;

 //dernier lundi de l'année
 var lastMonday = new Date(year, 11, 31).getMonday();

 //la date est dans la dernière semaine de l'année
 //mais cette semaine fait partie de l'année suivante
 if(this >= lastMonday && lastMonday.getDate() > 28) {
 week = 1;
 }
 else {
 //premier lundi de l'année
 var firstMonday = new Date(year, 0, 1).getMonday();

 //correction si nécessaire (le lundi se situe l'année précédente)
 if(firstMonday.getFullYear() < year) firstMonday = new Date(year, 0, 8).getMonday();

 //nombre de jours écoulés depuis le premier lundi
 var days = this.getYearDay() - firstMonday.getYearDay();

 //window.alert(days);

 //si le nombre de jours est négatif on va chercher
 //la dernière semaine de l'année précédente (52 ou 53)
 if(days < 0) {
 week = new Date(year, this.getMonth(), this.getDate()+days).getWeek();
 }
 else {
 //numéro de la semaine
 week = 1 + parseInt(days / 7);

 //on ajoute une semaine si la première semaine
 //de l'année ne fait pas partie de l'année précédente
 week += (new Date(year-1, 11, 31).getMonday().getDate() > 28);
 }
 }

 return parseInt(week);
} 
