
function openPopup(strOpen)
    {
        open(strOpen, "Info", "status=1, width=300, height=200, top=100, left=300");
    }

 function ReturnDate()
        {

         window.opener.document.forms["<%= strFormName %>"].elements["<%= strCtrlName %>"].value = "<%= strSelectedDate %>";
         window.opener.document.body.style.cursor = "default";
         window.close();

        }
        function ShowCalendarPopup() 
			{
				window.open("Calendar.aspx","Calendar","width=238, height=218, resizable=yes, toolbar=false, scrollbars=false, status=yes");
			}
			function validbutton1()
    {
		window.open("calendrier.asp?origine=date_deb","calendrier","width=310,height=230,top=120,left=120");
	}
	
	function validbutton2()
    {
		window.open("calendrier.asp?origine=date_fin","calendrier","width=310,height=230,top=120,left=120");
	}
    function CloseMe()
        {
        window.opener.document.body.style.cursor = "default";
            window.close();
        }
   
   function GetDate(CtrlName)
   {
   //crosshair
   document.body.style.cursor  =  "crosshair";
      ChildWindow = window.open('calendar.aspx?FormName=' + document.forms[0].name + '&CtrlName=' + CtrlName, "PopUpCalendar", "width=280,height=340,top=200,left=200,toolbars=no,scrollbars=no,status=no,resizable=yes");
    }
    function GetDate2(CtrlName)
   {
   //crosshair
   document.body.style.cursor  =  "crosshair";
      ChildWindow = window.open('calendrier.aspx?FormName=' + document.forms[0].name + '&CtrlName=' + CtrlName, "PopUpCalendar", "width=280,height=340,top=200,left=200,toolbars=no,scrollbars=no,status=no,resizable=no");
    }
function openurl(surl, stitle, ilarg, ihaut, iresizable) {
  var ileft, itop;
  if (stitle=='') stitle='_blank';
  ileft=(screen.width - ilarg)/2;
  itop=(screen.height - ihaut)/2;
  window.open(surl,stitle,'height='+ihaut+',width='+ilarg+',left='+ileft+',top='+itop+',location=no,menubar=no,resizable='+iresizable+',scrollbars=yes,titlebar=no,toolbar=no');
}

function Toggle(item) {
   obj=document.getElementById(item);
   visible=(obj.style.display!="none")
   key=document.getElementById("x" + item);
   if (visible) {
     obj.style.display="none";
     key.innerHTML="<img src='../contenu/folder.gif' width='16' height='16' hspace='0' vspace='0' border='0'>";
   } else {
      obj.style.display="block";
      key.innerHTML="<img src='../contenu/textfolder.gif' width='16' height='16' hspace='0' vspace='0' border='0'>";
   }
}

var duree_jour = 24 * 60 * 60 * 1000;

function recupdate(ev)	{
	MaCellule =ev&& ev.target?ev.target:event.srcElement;
	//alert(MaCellule.getAttribute("value"));
	MaValeur = MaCellule.getAttribute("value");
	MaZone = document.getElementById(oId);
	MaZone.value=MaValeur;
	//document.form1.iddate.value=MaValeur;
	document.all.controledate.style.visibility='hidden';
	}

oTop=0;
oLeft=0;
oId=" ";
var calendrier = new Calendrier();


function Calendrier() {
	this.date_jour = dateAMidi();
   this.feries = null;
   }


Calendrier.prototype.fabriquer = function() {
   // affiche le mois concernant la date demandée (en argument, facultative)
   this.joursFeries();
	html = "<DIV id=controledate style=\"HEIGHT: 1px; LEFT: 100px; TOP: 100px; WIDTH: 100px; VISIBILITY: hidden; \">";
   html += "<table id='calendrier' cellspacing='0' cellpadding='0' border='0' summary='calendrier' width=60 valign='top'><tbody>";
   html += "<tr><td>";
   html += "<table id='calendrier-haut' cellspacing='0' cellpadding='0' border='0' summary='mois et année du calendrier'>";
   html += this.afficherEntete();
   html += "</table>";
   html += "</td></tr>";
   html += "<tr><td width='100'>";
   html += "<table id='calendrier-jours' cellspacing='0' cellpadding='0' border='0' summary='jour du mois'>";
   html += this.afficherJoursSemaine();
   html += this.afficherJoursMois();
   html += "</table>";
   html += "</td></tr>";
   html += "</tbody></table></div>";
   document.write(html);
	document.all.controledate.style.visibility='hidden';
// Construire le calque du contrôle de saisie des heures 
	html = "<DIV id=controleheure onmouseout=\"document.all.controleheure.style.visibility='hidden';\"";
	html += " onmouseover=\"document.all.controleheure.style.visibility='visible';\"";
	html += " style=\"HEIGHT: 1px; LEFT: 628px; TOP: 265px\">";
	html += "<TABLE border=0 cellborder=0 cellPadding=0 cellSpacing=0 width=50 valign='top'>";
  	html += "<TBODY><TR><td align='center' colspan=5><font size='1'> Heures </font></td></TR>";
      for (J=1;J<7;J++) {
 		html += "<TR>";
		K=J-6-1;
		for (I=0;I<5;I++) {
 			if (I==0) html += "<td width='20%'><font size='1'>&nbsp; </font></td>";
  			else
   			{
			html += "<td width='20%' align='center' style='CURSOR: hand;' onmouseover=\"this.style.backgroundColor='#a2cff3'\" onmouseout=\"this.style.backgroundColor='#6699cc'\" onclick='javascript:recupheure("+ K +");'><font size='1'>";
   			html += "&nbsp;"+ K +"&nbsp;"
			html += "</font></td>";
			}
		K=K+6;
 		}
		html += "</TR>";
	}

  	html += "</tbody></table></div>";
	document.write(html);
	document.all.controleheure.style.visibility='hidden';

	html = "<DIV id=controleminute onmouseout=\"document.all.controleminute.style.visibility='hidden';\" ";
	html += " onmouseover=\"document.all.controleminute.style.visibility='visible';\" ";
	html += "style=\"HEIGHT: 1px; LEFT: 550px; TOP: 265px\">";
	html += "<TABLE border=0 cellPadding=0 cellSpacing=0 width=180 valign='top'>";
  	html += "<TBODY><TR><td align='center' colspan=11><font size='1'> Minutes </font></td>";
	html += "</TR>";
   	K=0;
   	for(J=0;J<6;J++) {
 		html += "<TR>";
  		for(I=1;I<11;I++){
 		//if (I == 0) {html += "<td width='9%'><font size='1'>&nbsp; </font></td>";}
   		html += "<td width='9%' align='center' style='CURSOR: hand;' onmouseover=\"this.style.backgroundColor='#a2cff3'\" onmouseout=\"this.style.backgroundColor='#6699cc'\" onclick='javascript:recupminute("+ K +");'><font size='1'>";
   		html += "&nbsp;"+ K +"&nbsp;";
		html += "</font></td>";
  		K++;
 		}
	html += "</TR>";
	}

  	html += "</tbody></table></div>";
	document.write(html);
	document.all.controleminute.style.visibility='hidden';
}

Calendrier.prototype.joursFeries = function() {
   // indique les jours fériés en fonction de l'année du calendrier
   var feries = this.date_jour.joursFeriesMobiles();
   this.feries = "|" + feries.join("|") + "|";
}

Calendrier.prototype.afficherEntete = function() {
   // affiche le mois (en lettres) et l'année avec des flèches pour les incrémenter ou les décrémenter
   // affichage du mois avec son id qui permettra de modifier le contenu du <td>
   var html = "<tr>";
   html += "<td align=left>";
   html += "<a href='javascript:calendrier.moisPrecedent();' title='mois précédent'>";
   html += "<img src='/_gfi_copy/img/FlecheGauche.gif' border='0' width='10' alt='mois précédent'></a>";
   html += "</td>";
   html += "<td id='calendrier-mois' class='calendrier-sem' colspan='4' width='80' align='center'>" + this.date_jour.moisLitteral() + "</td>";
   html += "<td>&nbsp;</td>";
   html += "<td id='calendrier-an' class='calendrier-sem' colspan='2' width='20'>" + this.date_jour.getFullYear() + "</td>";
   html += "<td><a  align='right' href='javascript:calendrier.moisSuivant();' title='mois suivant'>";
   html += "<img src='/_gfi_copy/img/FlecheDroite.gif' border='0' width='10' align='right' alt='mois suivant'></a>";
   html += "</td></tr>";
   return html;
}

Calendrier.prototype.afficherJoursSemaine = function() {
   // affiche les jours de la semaine sur une ligne
   var jours_sem = new Array("lu.", "ma.", "me.", "je.", "ve.", "sa.", "di.");
   var html = "<tr>";
   for (var i=0;i<jours_sem.length;i++) {
       if (i < 5) html += "<td class='calendrier-sem'>" + jours_sem[i] + "</td>";
       else html += "<td class='calendrier-fin-sem'>" + jours_sem[i] + "</td>";
   }
   html += "</tr>";
   return html;
}

Calendrier.prototype.afficherJoursMois = function() {
        // affiche les jours du mois en fonction du mois et de l'année en cours
        // limites indique le début et la fin des jours visibles dans le calendrier
        // de façon à ce que le calendrier contienne le 1er du mois sur la 1ère ligne
   var limites = this.limitesMoisCalendrier();
   var jour = limites[0];
   var auj = dateAMidi();
   var col = 0;
   var ligne = 0;
   var html = "<tr>";
   while (jour <= limites[1]) {
	var ch_date_long = rajoute0(jour.getDate()) + "\/" + rajoute0(jour.getMonth()+1) + "\/" + jour.getFullYear();
 	  if (col == 7) {
           html += "</tr><tr>";
           col = 0;
           ligne++;
       }
       if (jour.memeJour(auj)) html += "<td class='calendrier-jour-auj";
       else if (jour.dansLeMois(this.date_jour)) { 
           if (col < 5) html += "<td class='calendrier-jour";
           else html += "<td class='calendrier-jour-we";
       }
       else html += "<td class='calendrier-jour-horsmois";
       if (this.estFerie(jour)) html += "-ferie";
       html += "' onmouseover='relief(this,1);'";
       html += " onmouseout='relief(this,0);'";
       html += " onclick='recupdate(event);' align='center' style='cursor: hand;'";
       html += " value='" + ch_date_long + "'>" + jour.getDate() + "</td>";
       jour.jourSuivant();
       col++;
   }
   html += "</tr>";
   while (ligne < 5) {
       html += "<tr>";
       for (col=0;col<7;col++) {
       html += "<td class='' value='' onmouseover='relief(this,1)'";
       html += " onmouseout='relief(this,0)' onclick='recupdate(event);' align='center' style='cursor: hand;'";
       html += ">&nbsp;</td>";
       }
       html += "</tr>";
       ligne++;
   }  
   return html;
}

Calendrier.prototype.estFerie = function(jour) {
        // détermine si un jour est férié
        var ch_date = rajoute0(jour.getDate()) + "\/" + rajoute0(jour.getMonth()+1);
        if (this.feries.indexOf("|" + ch_date + "|") == -1) return false;
        else return true;
}

Calendrier.prototype.limitesMoisCalendrier = function() {
        // détermine les limites du calendrier relatif au mois de la date en cours, de telle façon à ce que le 1er du mois
        // soit sur la 1ère ligne, que le dernier du mois sur la dernière ligne, 
        // et que le début du calendrier commence un lundi et la fin finisse un dimanche
        
   // date du début du calendrier
   var jour = new Date(this.date_jour.getTime());
   jour.debutMois(); // date du 1er du mois
   var jour_semaine = jour.getDay();
   jour_semaine = jour_semaine ? jour_semaine - 1 : 6;
   var debut_cal = new Date();
   debut_cal.setTime(jour.getTime() - jour_semaine * duree_jour);
        
   // date de la fin du calendrier
   jour.finMois(); 
   jour_semaine = jour.getDay();
   jour_semaine = jour_semaine ? jour_semaine - 1 : 6;
   var fin_cal = new Date();
   fin_cal.setTime(jour.getTime() + (6 - jour_semaine)  * duree_jour);
        
   var limites = new Array(debut_cal, fin_cal);
   return limites;
}

Calendrier.prototype.moisSuivant = function() {
        // fait passer le calendrier au mois suivant
   this.date_jour.moisSuivant();
   this.joursFeries();
   this.majEntete();
   this.majJoursMois();
}

Calendrier.prototype.moisPrecedent = function() {
        // fait passer le calendrier au mois précédent
   this.date_jour.moisPrecedent();
   this.joursFeries();
   this.majEntete();
   this.majJoursMois();
}

Calendrier.prototype.anneeSuivante = function() {
        // fait passer le calendrier à l'année suivante
  this.date_jour.anneeSuivante();
   this.joursFeries();
   this.majEntete();
   this.majJoursMois();
}

Calendrier.prototype.anneePrecedente = function() {
        // fait passer le calendrier à l'année précédente
   this.date_jour.anneePrecedente();
   this.joursFeries();
   this.majEntete();
   this.majJoursMois();
}

Calendrier.prototype.majEntete = function() {
        // met à jour le mois et l'année en-tête du calendrier
   document.getElementById("calendrier-mois").lastChild.nodeValue = this.date_jour.moisLitteral();
   document.getElementById("calendrier-an").lastChild.nodeValue = this.date_jour.getFullYear();
}

Calendrier.prototype.majJoursMois = function() {
        // met à jour les jours du mois
        // racine est le noeud TBODY dont les lignes du tableau sont les childNodes
   var racine = document.getElementById("calendrier-jours").lastChild;
   var limites = this.limitesMoisCalendrier();
   var jour = limites[0];
   var auj = dateAMidi();
   var iligne = 1;
   var ligne = racine.childNodes[iligne];
   var cell = ligne.firstChild;
   var col = 0;
   // modification des jours du mois
   do {
       if (col == 7) {
           ligne = racine.childNodes[++iligne];
           cell = ligne.firstChild;
           col = 0;
       }
       else cell = ligne.childNodes[col];
       if (jour.memeJour(auj)) cell.attributes["class"].nodeValue = "calendrier-jour-auj";
       else if (jour.dansLeMois(this.date_jour)) { 
           if (col < 5) cell.attributes["class"].nodeValue = "calendrier-jour";
           else cell.attributes["class"].nodeValue = "calendrier-jour-we";
       }
       else cell.attributes["class"].nodeValue = "calendrier-jour-horsmois";
       if (this.estFerie(jour)) cell.attributes["class"].nodeValue += "-ferie";
		var ch_date_long = rajoute0(jour.getDate()) + "\/" + rajoute0(jour.getMonth()+1) + "\/" + jour.getFullYear();
       cell.firstChild.nodeValue = jour.getDate();
       cell.setAttribute("value", ch_date_long);
       jour.jourSuivant();
       col++;
   } while ((limites[1].getTime() - jour.getTime()) >= 0);
   // cas où les jours s'affichent sur moins de 6 lignes
   while (iligne < 6) {
       ligne = racine.childNodes[++iligne];
       for (col=0;col<7;col++) {
           cell = ligne.childNodes[col];
           cell.attributes["class"].nodeValue = "calendrier-sem";
           cell.firstChild.nodeValue = " ";
       	 cell.setAttribute("value", "");
       }
   }
}

// FONCTIONS  ET MÉTHODES UTILITAIRES

Date.prototype.miseenformeJoursMois = function() {
   // retourne le jour et le mois pour mettre à jour la table des fériés
   return(rajoute0(this.getDate()) + "\/" + rajoute0(this.getMonth()+1));
}
Date.prototype.dansLeMois = function(date_ref) {
   // indique si la date en cours et date_ref sont du même mois et de la même année
   if ((this.getMonth() == date_ref.getMonth()) && (this.getFullYear() == date_ref.getFullYear()))
       return true;
   else return false;
}

Date.prototype.jourSuivant = function() {
   // incrémente le jour de la date en fonction du nombre de jours en argument (si pas d'argument, l'incrément = 1)
   // p. ex. var jour = new Date(2004, 0, 1) (soit 01/01/2004), jour.jourSuivant() donnera le 02/01/2004
   // et jour.jourSuivant(31) donnera le 01/02/2004
   if (arguments.length) var increment = parseInt(arguments[0]);
   else var increment = 1;
   this.setDate(this.getDate() + increment);
}

Date.prototype.moisSuivant = function() {
   // passe le jour au mois suivant
   if (this.getMonth() < 11) this.setMonth(this.getMonth() + 1);
   else {
       this.setMonth(0);
       this.setFullYear(this.getFullYear() + 1);
   }
}

Date.prototype.moisPrecedent = function() {
   // passe le jour au mois précédent
   if (this.getMonth()) this.setMonth(this.getMonth() - 1);
   else {
       this.setMonth(11);
       this.setFullYear(this.getFullYear() - 1);
   }
}

Date.prototype.anneeSuivante = function() {
   // passe le jour à l'année suivante
   this.setFullYear(this.getFullYear() + 1);
}

Date.prototype.anneePrecedente = function() {
   // passe le jour à l'année précédente
   this.setFullYear(this.getFullYear() - 1);
}

Date.prototype.debutMois = function() {
   // met la date en cours au premier du mois
   this.setTime(this.getTime() - (this.getDate() - 1) * duree_jour); 
}

Date.prototype.finMois = function() {
   // met la date en cours à la fin du mois
   this.moisSuivant();
   this.setDate(1);
   this.setTime(this.getTime() - duree_jour);
}

Date.prototype.memeJour = function(une_date) {
   // si la date courante est le même jour que une_date, retourne "true", sinon retourne "false"
   var diff = Math.abs(this.getTime() - une_date.getTime());
   if (diff < 60*60*1000) return true;
   else return false;
}

Date.prototype.moisLitteral = function() {
   var nom_mois = new Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
   return nom_mois[this.getMonth()];
}

Date.prototype.joursFeriesMobiles = function() {
   // ajoute aux jours fériés fixes les jours fériés mobiles : lundi de Pâques, Ascension et lundi de Pentecôte
   var jours_feries = new Array("01/01", "01/05", "08/05", "14/07", "15/08", "01/11", "11/11", "25/12");
   var jour = paques(this.getFullYear());
   // lundi de Pâques
	jour.jourSuivant();
   //alert(jour.miseenformeJoursMois());
  	jours_feries.splice(1, 0, jour.miseenformeJoursMois());
   // ascension
   jour.jourSuivant(38);
   if (jour.getMonth() > 3) jours_feries.splice(3, 0, jour.miseenformeJoursMois());
   else jours_feries.splice(2, 0, jour.miseenformeJoursMois());
   // lundi de Pentecôte
   jour.jourSuivant(11);
   jours_feries.splice(4, 0, jour.miseenformeJoursMois());
   //alert(jours_feries);
   return jours_feries;
}

function paques(annee) {
   annee = parseInt(annee);
   var date_paques = null;
   var b = annee - 1900;
   var c = annee % 19;
   var d = Math.floor((7*c+1)/19);
   var e = (11*c+4-d) % 29;
   var f = Math.floor(b/4);
   var g = (b+f+31-e) % 7;
   var avril = 25-e-g;
   if (avril > 0) date_paques = new Date(annee, 3, avril);
   else date_paques = new Date(annee, 2, avril + 31);
   return date_paques;
}

function dateAMidi() {
   // crée une date à midi (12h 0mn 0sec)
   if (arguments.length) ladate = arguments[0];
   else ladate = new Date();
   ladate.setHours(12);
   ladate.setMinutes(0);
   ladate.setSeconds(0);
   return ladate;
}

function relief(objId,on) {
   // mettre en relief la cellule OnMouseOver 
if (on)
	{
	objId.className += '-over';  
	}
else
	{
	if (objId.className == 'calendrier-jour-auj-over')
			{ objId.className = 'calendrier-jour-auj';}
	if (objId.className == 'calendrier-jour-over')
			{ objId.className = 'calendrier-jour';}
	if (objId.className == 'calendrier-jour-we-over')
			{ objId.className = 'calendrier-jour-we';}
	if (objId.className == 'calendrier-jour-sem-over')
			{ objId.className = 'calendrier-jour-sem';}
	if (objId.className == 'calendrier-jour-we-ferie-over')
			{ objId.className = 'calendrier-jour-we-ferie';}
	if (objId.className == 'calendrier-jour-ferie-over')
			{ objId.className = 'calendrier-jour-ferie';}
	if (objId.className == 'calendrier-jour-horsmois-over')
			{ objId.className = 'calendrier-jour-horsmois';}
	if (objId.className == 'calendrier-jour-horsmois-ferie-over')
			{ objId.className = 'calendrier-jour-horsmois-ferie';}
	if (objId.className == 'calendrier-jour-horsmois-auj-over')
			{ objId.className = 'calendrier-jour-horsmois-auj';}
	if (objId.className == 'calendrier-jour-horsmois-auj-ferie-over')
			{ objId.className = 'calendrier-jour-horsmois-auj-ferie';}
	}
}
        
function rajoute0(valeur) {
   return (valeur < 10) ? "0" + valeur : valeur;
}
function validdate(nTop,nLeft,nHaut,nLarg,nId,nTD)
{
	//alert(nId);
	oId=nId;
	MonTD = document.getElementById(nTD);
	var nTop=eval(nTop + nHaut + oTop + MonTD.offsetTop);
	var nLeft=eval(nLeft + oLeft + MonTD.offsetLeft - document.all.controledate.offsetWidth + nLarg);
	document.all.controledate.style.pixelTop=nTop;
	document.all.controledate.style.pixelLeft=nLeft;
	if (document.all.controledate.style.visibility=='hidden')
     	{
		document.all.controledate.style.visibility='visible';
 		}
   else
 	   {
		document.all.controledate.style.visibility='hidden';
		}

}

function recupheure(MonHeure)
	{
	MaZone = document.getElementById(oId);
	MaZone.value=rajoute0(MonHeure)+":00";
	document.all.controleminute.style.pixelTop=document.all.controleheure.offsetTop;
	document.all.controleminute.style.pixelLeft=document.all.controleheure.offsetLeft;
	document.all.controleheure.style.visibility='hidden';
	document.all.controleminute.style.visibility='visible';
	}
function recupminute(MaMinute)
	{
	MaZone = document.getElementById(oId);
	MaZone.value=MaZone.value.substring(0,2) + ":" + rajoute0(MaMinute);
	document.all.controleminute.style.visibility='hidden';
	}
function validheure(nTop,nLeft,nHaut,nLarg,MonId,nTD)
    {
	oId=MonId;
	MonTD = document.getElementById(nTD);
    nTop=eval(nTop + nHaut + oTop + MonTD.offsetTop);
    nLeft=eval(nLeft + oLeft + MonTD.offsetLeft - document.all.controleheure.offsetWidth + nLarg);
	document.all.controleheure.style.pixelTop=nTop;
	document.all.controleheure.style.pixelLeft=nLeft;
	document.all.controleheure.style.visibility='visible';
	}

