/**
 * COPYRIGHT 
 * CALiMED est une marque déposée à l'INPI sous le numéro 06-3462071
 * Tous droits de reproduction des images, de l'apparence et des fonctionnalités 
 * de ce logiciel sont protégés par copyright. 
 * Toute réutilisation partielle ou complète du code source de ce logiciel est 
 * formellement interdite, pour un usage privé ou public, commercial ou non 
 * commercial.
 * La redistribution ou l'adaptation de ce logiciel sont strictement réservées
 * à CALIMED SARL.
 * Les algorithmes, fonctionnalités et structures de données implantés dans 
 * ce logiciel sont la propriété exclusive de CALiMED SARL.
 * Les droits d'auteur des ressources graphiques et du logiciel sont protégés par 
 * la loi. 
 * 
 * CLUF
 * L'utilisation du logiciel est soumise à un Contrat de Licence d'Utilisateur 
 * Final (CLUF) qui a été fourni en même temps que le logiciel. Le non respect 
 * de ce contrat peut entrainer des poursuites légales.
 * 
 * CONTACT
 * calimed@free.fr
 * 
 * AUTEUR
 * Tristan Vanrullen
 **/


/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS PUB 180-1
 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
 * Perform a simple self-test to see if the VM is working
 */
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 * Calculate the SHA-1 of an array of big-endian words, and a bit length
 */
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
 * Perform the appropriate triplet combination function for the current
 * iteration
 */
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
 * Determine the appropriate additive constant for the current iteration
 */
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
 * Calculate the HMAC-SHA1 of a key and some data
 */
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert an 8-bit or 16-bit string to an array of big-endian words
 * In 8-bit function, characters >255 have their hi-byte silently ignored.
 */
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
 * Convert an array of big-endian words to a string
 */
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
 * Convert an array of big-endian words to a hex string.
 */
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of big-endian words to a base-64 string
 */
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
 }


function verif_installation()
{
 nberreur = 0;
 if (document.forms['installation'].lienbdd.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le lien vers votre base de donnée");
 }
 if (document.forms['installation'].loginbdd.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le login de connection à la base de donnée");
 }
 if (document.forms['installation'].nombase.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le nom de votre base de donnée");
 }
 if (document.forms['installation'].passbdd.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le pass de connexion à la base de donnée");
 }
 if (document.forms['installation'].nomhtaccess.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le login de connexion à la partie sécurisée");
 }
 if (document.forms['installation'].passhtaccess.value == 0)
 {
  nberreur++;
  alert("Vous n'avez pas saisi le mot de passe de connexion à la partie sécurisée");
 }
 if (document.forms['installation'].passhtaccess.value.length < 8)
 {
  nberreur++;
  alert("Le mot de passe d'accès à la partie sécurisée doit contenir plus de 8 caractères");
 }
 if (nberreur == 0)
 {
   mdp = document.forms['installation'].passhtaccess.value;
   document.forms['installation'].mdpc.value = hex_sha1(mdp);
   return true;
 }
 else return false;
}

function verif_connexion()
{
 nberreur = 0;
 if (document.forms['identification'].nom_util.value == 0)
  {
   nberreur++;
   alert("Vous n'avez pas saisi votre nom d'utilisateur");
  }
 if (document.forms['identification'].mdp.value == 0)
  {
   nberreur++;
   alert("Vous n'avez pas saisi votre mot de passe");
  }
 if (nberreur == 0)
  {
   mdp = document.forms['identification'].mdp.value;
   document.forms['identification'].mdp.value = "";
   document.forms['identification'].mdpc.value = hex_sha1(mdp);
   return true;
  }
  else
   return false;
}

// pour Administration/administration.utilisateur.profil.form.php
function verif_edit_utilisateur()
{
 nberreur = 0;
 if (document.forms['formagenda'].login.value == 0)
  {
   nberreur++;
   alert("Vous n'avez pas saisi votre nom d'utilisateur");
  }
 if (document.forms['formagenda'].MAJPassword.checked==true)
 { 
	 if (document.forms['formagenda'].passform1.value == 0)
	  {
	   nberreur++;
	   alert("Vous n'avez pas saisi votre mot de passe");
	  }
	 if (document.forms['formagenda'].passform2.value == 0)
	  {
	   nberreur++;
	   alert("Vous devez ressaisir votre mot de passe"); 
	  }
	 if (document.forms['formagenda'].passform1.value != document.forms['formagenda'].passform2.value)
	  {
	   nberreur++;
	   alert("Vous avez entré deux mots de passe différents");
	  }  
	 if (document.forms['formagenda'].passform1.value.length < 8)
	  {
	   nberreur++;
	   alert("Le mot de passe doit contenir plus de 8 caractères");
	  } 
	  if (nberreur == 0)
	  {
	   mdp = document.forms['formagenda'].passform1.value;
	   document.forms['formagenda'].passform1.value = "";
	   document.forms['formagenda'].passform2.value = "";
	   document.forms['formagenda'].xpassword.value = hex_sha1(mdp);
	  }
  }
  //on soumet le formulaire de toute façon puisque l'erreur sera récupérée
   return true;
}

// pour Accueil/accueil.monpassword.form.php
function verif_edit_utilisateur_monpassword()
{
 nberreur = 0;
	 if (document.forms['formagenda'].passform1.value == 0)
	  {
	   nberreur++;
	   alert("Vous n'avez pas saisi votre mot de passe");
	  }
	 if (document.forms['formagenda'].passform2.value == 0)
	  {
	   nberreur++;
	   alert("Vous devez ressaisir votre mot de passe"); 
	  }
	 if (document.forms['formagenda'].passform1.value != document.forms['formagenda'].passform2.value)
	  {
	   nberreur++;
	   alert("Vous avez entré deux mots de passe différents");
	  }  
	 if (document.forms['formagenda'].passform1.value.length < 8)
	  {
	   nberreur++;
	   alert("Le mot de passe doit contenir plus de 8 caractères");
	  } 
	  if (nberreur == 0)
	  {
	   mdp = document.forms['formagenda'].passform1.value;
	   document.forms['formagenda'].passform1.value = "";
	   document.forms['formagenda'].passform2.value = "";
	   document.forms['formagenda'].xpassword.value = hex_sha1(mdp);
	  }
  //on soumet le formulaire de toute façon puisque l'erreur sera récupérée
   return true;
}


function lightup(imgName)
{
if (document.images)
{
imgOn=eval(imgName + "on.src");
document[imgName].src= imgOn;
}
}

function turnoff(imgName)
{
if (document.images)
{
imgOff=eval(imgName + "off.src");
document[imgName].src= imgOff;
}
}

function clickdown(imgName)
{
if (document.images)
{
imgDown=eval(imgName + "down.src");
document[imgName].src=imgDown;
}
} 


/* FIXME: Fait planter javascript?
function addslashes(str) 
{
str=str.replace(/\'/g,'\\\'');
str=str.replace(/\"/g,'\\"');
str=str.replace(/\\/g,'\\\\');
str=str.replace(/\0/g,'\\0');
return str;
}
*/
/*

function stripslashes(str) {
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\\\/g,'\\');
str=str.replace(/\\0/g,'\0');
return str;
}*/


function formEvenementCategorieChangee(idCategories,categsMedicales,categsFacturables,alerterParDefaut)
{
	//fonction depreciée. Plus utilisée à partir de la 2.87.
	//A la place, le formulaire est rechargé automatiquement.
	var idCategorie=document.forms.evenements.idCategorie.value;
	var idPatient=document.forms.evenements.idPatient.value;
	var info=document.forms.evenements.infoPatient.value;
	//alert(idCategorie);
	var indice;
	var medical=0;
	var gestion=0;
	for (indice=0;indice<idCategories.length;indice++)
 	{
 		if (idCategories[indice]==idCategorie) break;
	}
	if (indice>=idCategories.length) 
	{
		return false;
	}
	medical=categsMedicales[indice];
	gestion=categsFacturables[indice];
	alerter=alerterParDefaut[indice];
	//alert(alerter);
	if (medical==1)
	{
		document.getElementById("zoneLabelDescription").innerHTML = "Nom Prénom";
	}
	else
	{
		document.getElementById("zoneLabelDescription").innerHTML = "Descr.";
	}
	if (medical==1 || gestion==1)
	{
		document.forms.evenements.etat.disabled=false;
		if (medical==1 && gestion==1) 
		{
			document.getElementById('optionAucun').selected='';
			document.getElementById('optionCPP').selected='selected';
		}
		else 
		{
			document.getElementById('optionAucun').selected='selected';
			document.getElementById('optionCPP').selected='';			
		}

		document.getElementById('zonePatient').style.visibility='visible';
		texte="foo";
		if (idPatient!=0) 
			texte="<A HREF=\"#\" onMouseover=\"lightup('pic1')\" onMouseout=\"turnoff('pic1')\" onMouseDown=\"clickdown('pic1')\"  onMouseUp=\"lightup('pic1')\" onclick=\"popup_chercherPatient_special(300,550);\" title=\"Associer à un patient\"> <IMG SRC=\"../images/blienpatient_up.gif\" name=\"pic1\" width=\"62\" height=\"28\" border=\"0\" style='vertical-align: middle;'></A>&nbsp;Associé à <b>"+info+"</b>."+
				"<br/>Associer un contact";		
		else texte="<A HREF=\"#\" onMouseover=\"lightup('pic1')\" onMouseout=\"turnoff('pic1')\" onMouseDown=\"clickdown('pic1')\"  onMouseUp=\"lightup('pic1')\" onclick=\"popup_chercherPatient_special(300,550);\" title=\"Associer à un patient\"> <IMG SRC=\"../images/blienpatient_up.gif\" name=\"pic1\" width=\"62\" height=\"28\" border=\"0\" style='vertical-align: middle;'></A>&nbsp;Ce descriptif n'est pas associé à un patient.";
		document.getElementById("zonePatient").innerHTML = texte;
		//document.forms.evenements.detailsPatient.disabled=false;
		//document.forms.evenements.chercherPatient.disabled=false;
		//document.forms.evenements.creerPatient.disabled=false;
	}
	else 
	{
		document.forms.evenements.etat.disabled=true;
		document.getElementById('optionAucun').selected='selected';
		document.getElementById('optionCPP').selected='';
		document.getElementById('zonePatient').style.visibility='hidden';
		//document.forms.evenements.detailsPatient.disabled=true;
		//document.forms.evenements.chercherPatient.disabled=true;
		//document.forms.evenements.creerPatient.disabled=true;
	}
	
	box = document.forms.evenements.alerterSiConflit;
	if (alerter==0) box.checked=false;
	else  box.checked=true;
	return true;
}

function formEvenementSoumettreOuvrirPeriodicite()
{
	if(confirm('Valider le formulaire et accéder à la périodicité de cet événement?'))
	{
		document.forms.evenements.periodiciteOnSubmit.value='1';
		document.forms.evenements.submit();
	}
	return true;
}

function formDispoSoumettreOuvrirPeriodicite()
{
	if(confirm('Valider le formulaire et accéder à la périodicité de cette disponibilité?'))
	{
		document.forms.evenements.periodiciteOnSubmit.value='1';
		document.forms.evenements.submit();
	}
	return true;
}

function go(url)
{
	//document.location.replace(URL);
	location.href=url;
	return true;
}

function goc(url,msg)
{
	if(confirm(msg))
	{
		location.href=url;
		return true;
	}
	return false;
}



function soumettre_recherche_patients()
{
	url="../patients/patients.php?vue=recherchePatients&page=0";
	url=url+"&nom="+document.forms.formrecherche.nom.value;
	url=url+"&prenom="+document.forms.formrecherche.prenom.value;
	url=url+"&tel="+document.forms.formrecherche.tel.value;
	location.href=url;
	return true;
}


function retour_chef_noscroll(lien)
{
 chef=window.open(lien+" ","chef","");
 chef.focus();
  self.close("souschef"); 

}

function retour_dispo_noscroll(lien)
{
 chef=window.open(lien+" ","disponibilites","");
 chef.focus();
  self.close("souschef"); 

}

function retour_chef_params(lien,params)
{
 sx=OpenerPositionScrollX();
 sy=OpenerPositionScrollY(); 
 chef=window.open(lien+"?"+params+"&scrollX="+sx+"&scrollY="+sy,"chef","");
 chef.focus();
 self.close("souschef"); 
}

function retour_dispo_params(lien,params)
{
 sx=OpenerPositionScrollX();
 sy=OpenerPositionScrollY(); 
 chef=window.open(lien+"?"+params+"&scrollX="+sx+"&scrollY="+sy,"disponibilites","");
 chef.focus();
 self.close("souschef"); 
}


function retour_chef(lien)
{
 sx=OpenerPositionScrollX();
 sy=OpenerPositionScrollY(); 
 chef=window.open(lien+"?scrollX="+sx+"&scrollY="+sy,"chef","");
 chef.focus();
 self.close("souschef"); 
}


function retour_porte_document(lien)
{
 porte_document=window.open(lien,"porte_document","");
 porte_document.focus();
 self.close("variable"); 
}



function retour_dispo(lien)
{
 sx=OpenerPositionScrollX();
 sy=OpenerPositionScrollY(); 
 chef=window.open(lien+"?scrollX="+sx+"&scrollY="+sy,"disponibilites","");
 chef.focus();
 self.close("souschef"); 
}


function retour_protocole(lien)
{
 chef=window.open(lien+" ","chef","");
 chef.focus();
  self.close("protocole"); 

}


function retour_chef_fromAction(lien,focus)
{
 if (lien!="")
 {
 	chef=window.open(lien+" ","chef","");
 }
 if (focus!="")
 {
 	self.close('action');
 	window[focus].focus();
 }
  else  self.close('action');
}

function retourChoixPatientDeSelecteurSpecial(id,nom,prenom,contact,info)
{
	if (id == "0") 
	{
		alert (info);
	}
	else
	{
		souschef= window.open('','souschef');
		texte="<A HREF=\"#\" onMouseover=\"lightup('pic1')\" onMouseout=\"turnoff('pic1')\" onMouseDown=\"clickdown('pic1')\"  onMouseUp=\"lightup('pic1')\" onclick=\"popup_chercherPatient_special(300,550);\" title=\"Associer à un patient\"> <IMG SRC=\"../images/blienpatient_up.gif\" name=\"pic1\" width=\"62\" height=\"28\" border=\"0\" style='vertical-align: middle;'></A>&nbsp;Associé à <b>"+info+"</b>.";
		if (id!='') texte=texte+"&nbsp;(<A HREF=\"#\" onclick=\"popup_associerContactPatient_special(650,600);\" title=\"Associer un contact à ce patient\">Contacts</A>)";
		souschef.document.getElementById("zonePatient").innerHTML = texte;
		souschef.document.forms.evenements.idPatient.value=id;
		souschef.document.forms.evenements.infoPatient.value=info;
		souschef.updateNouveauAncien();
	}
	self.close("special"); 
}


//MONACO: 
function retourChoixPatientDeSelecteurSpecialMonaco(id,nom,prenom,contact,info)
{
	var singQuot = /\'/g;
	var dubQuot = /\"/g;
	
	if (id == "0") 
	{
		alert (info);
	}
	else
	{
		souschef= window.open('','souschef');
		texte="<A HREF=\"#\" onMouseover=\"lightup('pic1')\" onMouseout=\"turnoff('pic1')\" onMouseDown=\"clickdown('pic1')\"  onMouseUp=\"lightup('pic1')\" onclick=\"popup_chercherPatient_special(300,550);\" title=\"Associer à un patient\"> <IMG SRC=\"../images/blienpatient_up.gif\" name=\"pic1\" width=\"62\" height=\"28\" border=\"0\" style='vertical-align: middle;'></A>&nbsp;Associé à <b>"+info+"</b>.";
		if (id!='') texte=texte+"&nbsp;(<A HREF=\"#\" onclick=\"popup_associerContactPatient_special(650,600);\" title=\"Associer un contact à ce patient\">Contacts</A>)";
		souschef.document.getElementById("zonePatient").innerHTML = texte;
		souschef.document.forms.evenements.idPatient.value=id;
		souschef.document.forms.evenements.infoPatient.value=info;
		
		//nom=nom.replace(singQuot, "%27");
		//nom=nom.replace(dubQuot, "%22");
		nom=nom.replace(/(^\s*)|(\s*$)/g,"");

		//prenom=prenom.replace(singQuot, "%27");
		//prenom=prenom.replace(dubQuot, "%22");
		prenom=prenom.replace(/(^\s*)|(\s*$)/g,"");
		
		//contact=contact.replace(singQuot, "%27");
		//contact=contact.replace(dubQuot, "%22");
		contact=contact.replace(/(^\s*)|(\s*$)/g,"");

		
		if (nom!="") souschef.document.forms.evenements.description.value=nom+" "+prenom;
		if (contact!="") souschef.document.forms.evenements.contact.value=contact;
		souschef.updateNouveauAncien();
	}
	self.close("special"); 
}

function retourChoixPatientDeSelecteurDispoMulti(id,nom,prenom,contact,info)
{
	var singQuot = /\'/g;
	var dubQuot = /\"/g;
	
	if (id == "0") 
	{
		alert (info);
	}
	else
	{
		disponibilites= window.open('','disponibilites');
		texte="Associé à <b>"+info+"</b>";
		disponibilites.document.getElementById("zonePatient").innerHTML = texte;
		disponibilites.document.forms.formrecherche.idPatient.value=id;
		
		//nom=nom.replace(singQuot, "%27");
		//nom=nom.replace(dubQuot, "%22");
		nom=nom.replace(/(^\s*)|(\s*$)/g,"");

		//prenom=prenom.replace(singQuot, "%27");
		//prenom=prenom.replace(dubQuot, "%22");
		prenom=prenom.replace(/(^\s*)|(\s*$)/g,"");
		
		//contact=contact.replace(singQuot, "%27");
		//contact=contact.replace(dubQuot, "%22");
		contact=contact.replace(/(^\s*)|(\s*$)/g,"");

		
		if (nom!="") disponibilites.document.forms.formrecherche.description.value=nom+" "+prenom;
		if (contact!="") disponibilites.document.forms.formrecherche.contact.value=contact;
	}
	self.close("special"); 
}


function retourChoixPatientDeFormPatient(id,nom,prenom,contact,info)
{
	if (id == "0" ) 
	{
		alert (info);
	}
	else
	{
		souschef= window.open('','souschef');
		texte="<A HREF=\"#\" onMouseover=\"lightup('pic1')\" onMouseout=\"turnoff('pic1')\" onMouseDown=\"clickdown('pic1')\"  onMouseUp=\"lightup('pic1')\" onclick=\"popup_chercherPatient_special(300,550);\" title=\"Associer à un patient\"> <IMG SRC=\"../images/blienpatient_up.gif\" name=\"pic1\" width=\"62\" height=\"28\" border=\"0\" style='vertical-align: middle;'></A>&nbsp;Associé à <b>"+info+"</b>.";
		if (id!='') texte=texte+"&nbsp;(<A HREF=\"#\" onclick=\"popup_associerContactPatient_special(650,600);\" title=\"Associer un contact à ce patient\">Contacts</A>)";
		souschef.document.getElementById("zonePatient").innerHTML = texte;
		souschef.document.forms.evenements.idPatient.value=id;
		souschef.document.forms.evenements.infoPatient.value=info;
		if (nom!="") souschef.document.forms.evenements.description.value=nom+" "+prenom;
		if (contact!="") souschef.document.forms.evenements.contact.value=contact;
		souschef.updateNouveauAncien();
		self.close("special2"); 
	}
}

function retourAssocierContactPatientSpecial()
{
		souschef= window.open('','souschef');
		self.close("special2"); 
}



/*
 ouvrir le popup de recherche de patients avec la chaine description et la chaine remarques comme informations à rechercher.
Les paramètres sont transformés pour que les caractères spéciaux passent la transmission dans l'URL.
Lorsque la fenêtre popup est chargée, elle déclenche la recherche sur ces paramètres et remplit la page avec les résultats.
Si aucun résultat n'est disponible, un lien permet à l'utilisateur de créer le patient ayant la description transmise en paramètres.
Si en plus de la recherche, un patient est déjà rattaché à l'événement, on affiche un lien permettant de défaire l'association.
*/
function popup_chercherPatient_special(largeur,hauteur)
{
	var desc=document.forms.evenements.description.value;
	var contact=document.forms.evenements.contact.value;
	var remarques=document.forms.evenements.remarques.value;
	var idpatient=document.forms.evenements.idPatient.value;
	var idevt=document.forms.evenements.idEvt.value;


	var singQuot = /\'/g;
	var dubQuot = /\"/g;
	desc=desc.replace(singQuot, "%27");
	desc=desc.replace(dubQuot, "%22");
	desc=desc.replace(/(^\s*)|(\s*$)/g,"");

	contact=contact.replace(singQuot, "%27");
	contact=contact.replace(dubQuot, "%22");
	contact=contact.replace(/(^\s*)|(\s*$)/g,"");

	remarques=remarques.replace(singQuot, "%27");
	remarques=remarques.replace(dubQuot, "%22");
	remarques=remarques.replace(/(^\s*)|(\s*$)/g,"");
 
 lien="../agenda/agenda.recherchepatient.special.php?recherche="+desc+"&contact="+contact+"&remarques="+remarques+"&idpatient="+idpatient+"&idevenement="+idevt;
 //alert(lien);
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}


/*
 ouvrir le popup de recherche de patients avec éventuellement un idPatient comme repère
*/
function popup_chercherPatient_dispomulti(largeur,hauteur)
{
	var idpatient=document.forms.formrecherche.idPatient.value;
	var desc=document.forms.formrecherche.description.value;
	var contact=document.forms.formrecherche.contact.value;
	var remarques=document.forms.formrecherche.remarques.value;

	var singQuot = /\'/g;
	var dubQuot = /\"/g;
	desc=desc.replace(singQuot, "%27");
	desc=desc.replace(dubQuot, "%22");
	desc=desc.replace(/(^\s*)|(\s*$)/g,"");

	contact=contact.replace(singQuot, "%27");
	contact=contact.replace(dubQuot, "%22");
	contact=contact.replace(/(^\s*)|(\s*$)/g,"");

	remarques=remarques.replace(singQuot, "%27");
	remarques=remarques.replace(dubQuot, "%22");
	remarques=remarques.replace(/(^\s*)|(\s*$)/g,"");
 
 lien="../agenda/agenda.recherchepatient.dispomulti.php?recherche="+desc+"&contact="+contact+"&remarques="+remarques+"&idpatient="+idpatient;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}


/*
 ouvrir le popup de recherche de contacts pour le patient du formulaire événement
*/
function popup_associerContactPatient_special(largeur,hauteur)
{
	var idpatient=document.forms.evenements.idPatient.value;
	lien="../patients/patients.associercontact.special.php?idPatient="+idpatient;
	 var millieu_h = (screen.height/2) - (hauteur/2);
	 var millieu_l = (screen.width/2) - (largeur/2);
	 var myopener=window.opener;
	 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
	 special2=window.open(lien,"special2",config);
	 special2.focus();
	 special2.resizeTo(largeur, hauteur);
	 special2.opener=myopener;
}

 
 
 /*
  rechercher un contact contenant un certain texte. utiliser Ajax pour cela 
  */

function recherche_contact_contenant(texte,idPatient)
  {
  	//ne faire le test que si minimum 3 lettres ont été tapées
  	if(texte.length>=3)
  	{
  		var contactXMLHTTP = null;
  		document.getElementById('resultats_recherche_contact').style.display='inline';
  		
  		if (window.ActiveXObject)
  		{
  			try
  			{
  				contactXMLHTTP = new ActiveXObject('Microsoft.XMLHTTP');
  			}
  			catch (e) {}
  		}
  		else if (window.XMLHttpRequest)
  		{
  			contactXMLHTTP = new XMLHttpRequest();
  		}
  		
  		contactXMLHTTP.open('POST', 'patients.input_contact.query.php', true);
  		contactXMLHTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');//; charset=utf-8
  		//
  		var postContent = 'idPatient='+idPatient+'&chaine=' + escape(utf8_encode(htmlentities(texte,'ENT_QUOTES')));//escape(escapeHTML(htmlentities(texte,'ENT_QUOTES')));
  		contactXMLHTTP.setRequestHeader('Content-length', postContent.length);
  		contactXMLHTTP.onreadystatechange = function()
  		{
  			if (contactXMLHTTP.readyState == 4) result_recherche_contact_contenant(contactXMLHTTP.responseText);
  		};
  		contactXMLHTTP.send(postContent);
  		
  	}
  	else if(texte.length>0)
  	{
  		document.getElementById('resultats_recherche_contact').style.display='inline';
  		document.getElementById('resultats_recherche_contact').innerHTML='Veuillez saisir au moins trois lettres du nom de contact recherché';
  	}
  	else
  	{
  		document.getElementById('resultats_recherche_contact').style.display='none';
  		document.getElementById('resultats_recherche_contact').innerHTML='';
  	}  	
  }

  function result_recherche_contact_contenant(reponse)
  {
  	document.getElementById('resultats_recherche_contact').innerHTML=utf8_decode(unescape(reponse));//,'ENT_QUOTES');//html_entity_decode(reponse,'ENT_QUOTES');
  }

/*
Jusque V1.56
Cette fonction est appelée lorsque l'utilisateur clique sur le lien "créer ce patient" dans le popup spécial de recherche de patients.
La chaine transmise à cette fonction est le contenu des variables qui ont été transmises en paramètre à ce dernier popup.
Il faut retransmettre ces paramètres ay popup de création de fiche patient.
Là encore, les paramètres doivent être transformés pour accepter leur passage dans l'URL.
Il serait plus simple de récupérer la chaine comme dans la fonction précédente

function popup_creerPatient_special(largeur,hauteur,chaine,telephone,remarques)
{
 var coupure=chaine.split(" ");
 nom='';
 prenom='';
 if (coupure.length==2)
 {
	 nom=coupure[0];
	 prenom=coupure[1];
 }
 else if (coupure.length==1)
 {
	 nom=coupure[0];
 }
 else 
 {
 	nom=chaine;
 }
 lien='../patients/patients.form.php?nom='+nom+'&prenom='+prenom+'&telephone='+telephone+'&remarques='+remarques+'&special=ok';
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special2=window.open(lien,"special2",config);
 special2.focus();
 special2.resizeTo(largeur, hauteur);
 window.special2.opener=window.opener;
 self.close("special");
}
*/

/*
A partir de la V1.56
Cette fonction est appelée lorsque l'utilisateur clique sur le lien "créer ce patient" dans le popup spécial de recherche de patients.
La chaine transmise à cette fonction est le contenu des variables qui ont été transmises en paramètre à ce dernier popup.
Il faut retransmettre ces paramètres au popup de création de fiche patient.
Pour éviter la transmission via l'URL, on peut utiliser un paramètre qui indique au popup de création de patients qu'il a été appelé 
depuis le popup de recherche de patients. Cette indication lui permet de savoir qu'il est nécessaire de récupérer les informations dans 
le formulaire "événement".
*/
function popup_creerPatient_special(largeur,hauteur,chaine,telephone,remarques)
{
 var coupure=chaine.split("#");
 nom='';
 prenom='';
 if (coupure.length==2)
 {
	 nom=coupure[0];
	 prenom=coupure[1];
 }
 else if (coupure.length==1)
 {
	 nom=coupure[0];
 }
 else 
 {
 	nom=chaine;
 }
 lien='../patients/patients.form.php?nom='+nom+'&prenom='+prenom+'&telephone='+telephone+'&remarques='+remarques+'&special=ok';
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special2=window.open(lien,"special2",config);
 special2.focus();
 special2.resizeTo(largeur, hauteur);
 window.special2.opener=window.opener;
 self.close("special");
}

function popup_minuteur(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 minuteur=window.open(lien,"minuteur",config);
 minuteur.focus();
 minuteur.resizeTo(largeur, hauteur);
}


function popup_destinataires(largeur,hauteur)
{
//		alert(document.forms.formmessage.destinataires.value);
	var listeId=document.forms.formmessage.destinataires.value;
	var listeIdMail=document.forms.formmessage.destinatairesMail.value;
	var mailSuppl=document.forms.formmessage.destinatairesMailSuppl.value;
	lien="../messagerie/messagerie.associerdestinataires.popup.php?listeId="+listeId+"&listeIdMail="+listeIdMail+"&mailSuppl="+mailSuppl;
	 var millieu_h = (screen.height/2) - (hauteur/2);
	 var millieu_l = (screen.width/2) - (largeur/2);
	 var myopener=window.opener;
	 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
	 souschef=window.open(lien,"souschef",config);
	 souschef.focus();
	 souschef.resizeTo(largeur, hauteur);
	 souschef.opener=myopener;
}

function retourChoixDestinataires(lid,info,lidMail,infoMail,mailSuppl,infoSuppl)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		chef= window.open('','chef');
		var chaine="";
		if (info!="")
			chaine="Messages internes: <b>"+info+"</b>";
		if (infoMail=="" && infoSuppl!="")	
			chaine=chaine+"<br/>Messages par mail: <b>"+infoSuppl+"</b>";
		if (infoMail!="" && infoSuppl!="")	
			chaine=chaine+"<br/>Messages par mail: <b>"+infoMail+";"+infoSuppl+"</b>";
		if (infoMail!="" && infoSuppl=="")	
			chaine=chaine+"<br/>Messages par mail: <b>"+infoMail+"</b>";
		chef.document.getElementById("zoneDestinataires").innerHTML = chaine;
		chef.document.forms.formmessage.destinataires.value=lid;
		chef.document.forms.formmessage.destinatairesMail.value=lidMail;
		chef.document.forms.formmessage.destinatairesMailSuppl.value=mailSuppl;
	}
	self.close("souschef"); 
}



function popup_motscles_special(largeur,hauteur)
{
	//alert(document.forms.evenements.idPatient.value);
var listeIdMot=document.forms.evenements.listeIdMot.value;
var idA=document.forms.evenements.idAgenda.value;
var idL=document.forms.evenements.idLieu.value;
lien="../agenda/agenda.associermotscles.special.php?listeIdMot="+listeIdMot+"&idA="+idA+"&idL="+idL;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}

function retourChoixMotsClesSpecial(lid,info)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		souschef= window.open('','souschef');
		souschef.document.getElementById("zoneMotsCles").innerHTML = info;
		souschef.document.forms.evenements.listeIdMot.value=lid;
	}
	self.close("special"); 
}

function popup_motscles_dispo_multi(largeur,hauteur)
{
	//alert(document.forms.evenements.idPatient.value);
var listeIdMot=document.forms.formrecherche.listeIdMot.value;
lien="../agenda/agenda.associermotscles.dispomulti.php?listeIdMot="+listeIdMot;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}

function retourChoixMotsClesDispoMulti(lid,info)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		dispos= window.open('','disponibilites');
		dispos.document.getElementById("zoneMotsCles").innerHTML = info;
		dispos.document.forms.formrecherche.listeIdMot.value=lid;
	}
	self.close("special"); 
}


function popup_motscles_patients_special3(largeur,hauteur)
{
var listeIdMot=document.forms.fichepatient.listeIdMotPatient.value;
var idP=document.forms.fichepatient.idPatient.value;
lien="../patients/patients.associermotscles.special3.php?listeIdMot="+listeIdMot+"&idP="+idP;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special3=window.open(lien,"special3",config);
 special3.focus();
 special3.resizeTo(largeur, hauteur);
 special3.opener=myopener;
}

function retourChoixMotsClesPatientsSpecial3(lid,info)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		special2= window.open('','special2');
		special2.document.getElementById("zoneMotsClesPatients").innerHTML = info;
		special2.document.forms.fichepatient.listeIdMotPatient.value=lid;
	}
	self.close("special3"); 
}


function popup_alarmes_special(largeur,hauteur)
{
var timingAlarme=document.forms.evenements.timingAlarme.value;
var listeId=document.forms.evenements.destinatairesAlarme.value;
var listeIdMail=document.forms.evenements.destinatairesMailAlarme.value;
var infoAlarme=document.forms.evenements.infoAlarme.value;
lien="../agenda/agenda.associeralarme.special.php?&timingAlarme="+timingAlarme+"&listeId="+listeId+"&listeIdMail="+listeIdMail+"&infoAlarme="+infoAlarme;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}


function retourChoixAlarmesSpecial(timing,lid,lidMail,info)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		souschef= window.open('','souschef');
		var chaine='Aucune alarme';
		if (info!='')
			chaine='[Alarme : <b>'+info+' avant l\'événement</b>]';
		souschef.document.forms.evenements.timingAlarme.value=timing;
		souschef.document.forms.evenements.destinatairesAlarme.value=lid;
		souschef.document.forms.evenements.destinatairesMailAlarme.value=lidMail;
		souschef.document.forms.evenements.infoAlarme.value=info;
		souschef.document.getElementById("zoneAlarme").innerHTML = chaine;
	}
	self.close("special"); 
}


function popup_alarmes_dispo_multi(largeur,hauteur)
{
var timingAlarme=document.forms.formrecherche.timingAlarme.value;
var listeId=document.forms.formrecherche.destinatairesAlarme.value;
var listeIdMail=document.forms.formrecherche.destinatairesMailAlarme.value;
var infoAlarme=document.forms.formrecherche.infoAlarme.value;
lien="../agenda/agenda.associeralarme.dispomulti.php?&timingAlarme="+timingAlarme+"&listeId="+listeId+"&listeIdMail="+listeIdMail+"&infoAlarme="+infoAlarme;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 special=window.open(lien,"special",config);
 special.focus();
 special.resizeTo(largeur, hauteur);
 special.opener=myopener;
}


function retourChoixAlarmesDispoMulti(timing,lid,lidMail,info)
{
	if (lid == "0") 
	{
		alert (info);
	}
	else
	{
		dispos= window.open('','disponibilites');
		var chaine='Aucune alarme';
		if (info!='')
			chaine='[Alarme : <b>'+info+' avant l\'événement</b>]';
		if (dispos.document.forms.formrecherche.timingAlarme.value!=0)
			dispos.document.forms.formrecherche.utiliserAlarme.value=1;
		else dispos.document.forms.formrecherche.utiliserAlarme.value=0;
		dispos.document.forms.formrecherche.timingAlarme.value=timing;
		dispos.document.forms.formrecherche.destinatairesAlarme.value=lid;
		dispos.document.forms.formrecherche.destinatairesMailAlarme.value=lidMail;
		dispos.document.forms.formrecherche.infoAlarme.value=info;
		dispos.document.getElementById("zoneAlarme").innerHTML = chaine;
	}
	self.close("special"); 
}


function popup_enchainements_evt(idE,idR,largeur,hauteur)
{
lien="../agenda/agenda.enchainerevt.form.php?idEvenement="+idE+"&idRacine="+idR+"#"+idE;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 souschef=window.open(lien,"souschef",config);
 souschef.focus();
 souschef.resizeTo(largeur, hauteur);
 souschef.opener=myopener;
}

function popup_enchainements_dispo(idD,idR,largeur,hauteur)
{
lien="../agenda/agenda.enchainerdispo.form.php?idDisponibilite="+idD+"&idRacine="+idR+"#"+idD;
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var myopener=window.opener;
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 souschef=window.open(lien,"souschef",config);
 souschef.focus();
 souschef.resizeTo(largeur, hauteur);
 souschef.opener=myopener;
}

function lier_chef(lien)
{
 chef=window.open(lien,"chef","");
}

function lier_dispo(lien)
{
 chef=window.open(lien,"disponibilites","");
}

function lier_alertes(lien)
{
 chef=window.open(lien,"alertes","");
}


function lier_dateselecteur(lien)
{
 chef=window.open(lien,"selecteur","");
}


function choisirDateEtFermerSelecteur(input,chaineDate)
{
	 self.opener.document.getElementById(input).value= chaineDate;
	 self.close("selecteur"); 
}

function choisirDateEtFermerSelecteurJMA(input_j,jj,input_m,mm,input_a,aaaa)
{
	 self.opener.document.getElementById(input_j).value= jj;
	 self.opener.document.getElementById(input_m).value= mm;
	 self.opener.document.getElementById(input_a).value= aaaa;
	 self.close("selecteur"); 
}


function popup_overlap(lien,largeur,hauteur)
{
 	var config = 'top='+yMouse+', left='+xMouse+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 	souschef=window.open(lien,"souschef",config);
 	souschef.moveTo(xMouse, yMouse);
 	souschef.resizeTo(largeur, hauteur);
}

function popup_selecteur(lien,largeur,hauteur)
{
 	var config = 'top='+yMouse+', left='+xMouse+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 	selecteur=window.open(lien,"selecteur",config);
	selecteur.moveTo(xMouse, yMouse);
 	selecteur.resizeTo(largeur, hauteur);
}

function popup_selecteur_centre(lien,largeur,hauteur)
{
	 var millieu_h = (screen.height/2) - (hauteur/2);
	 var millieu_l = (screen.width/2) - (largeur/2);
 	var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 	selecteur=window.open(lien,"selecteur",config);
 	selecteur.resizeTo(largeur, hauteur);
}


function popup_selecteur_protocole(lien,largeur,hauteur)
{
	 var millieu_h = (screen.height/2) - (hauteur/2);
	 var millieu_l = (screen.width/2) - (largeur/2);
 	var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 	selecteur=window.open(lien,"selecteur",config);
 	selecteur.resizeTo(largeur, hauteur);
}

function popup_ajout_liste(lien,largeur,hauteur,idselect)
{
	var millieu_h = (screen.height/2) - (hauteur/2);
	var millieu_l = (screen.width/2) - (largeur/2);
 	var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 	selecteur=window.open(lien,"selecteur",config);
 	selecteur.resizeTo(largeur, hauteur);
}



function popup_centre(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=no, resizable=no, width='+largeur+', height='+hauteur;
 souschef=window.open(lien,"souschef",config);
 souschef.focus();
 souschef.resizeTo(largeur, hauteur);
}

function popup_centre_scroll(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 souschef=window.open(lien,"souschef",config);
 souschef.focus();
 souschef.resizeTo(largeur, hauteur);
}

function popup_alertes(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 alertes=window.open(lien,"alertes",config);
 alertes.focus();
 alertes.resizeTo(largeur, hauteur);
}

function popup_disponibilites(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 dispos=window.open(lien,"disponibilites",config);
 dispos.focus();
 dispos.resizeTo(largeur, hauteur);
}

function popup_porte_document(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 porte_document=window.open(lien,"porte_document",config);
 porte_document.focus();
 porte_document.resizeTo(largeur, hauteur);
}


//deprecated? Cette fonction semble inutilisée par l'ensemble du programme.
function popup_download(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 download=window.open(lien,"download",config);
 download.focus();
 download.resizeTo(largeur, hauteur);
}



function popup_protocole(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 protocole=window.open(lien,"protocole",config);
 protocole.focus();
 protocole.resizeTo(largeur, hauteur);
}



function popup_message(lien,largeur,hauteur)
{
 var millieu_h = (screen.height/2) - (hauteur/2);
 var millieu_l = (screen.width/2) - (largeur/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=yes, resizable=yes, width='+largeur+', height='+hauteur;
 fenetre=window.open(lien,"",config);
 fenetre.focus();
 fenetre.resizeTo(largeur, hauteur);
}

function popup_action(lien)
{
 var millieu_h = (screen.height/2) - (50/2);
 var millieu_l = (screen.width/2) - (50/2);
 var config = 'top='+millieu_h+', left='+millieu_l+', status=no, scrollbars=no, resizable=no, width='+50+', height='+50;
 action=window.open(lien,"action",config);
 action.focus();
 action.resizeTo(largeur, hauteur);
}



var xMouse=0;
var yMouse=0;

function position(e) {
if (navigator.appName.substring(0,3) == "Net") {
xMouse = e.pageX;
yMouse = e.pageY;
}
else {
var root = document.documentElement || document.body;
xMouse = event.x+root.scrollLeft;
yMouse = event.y+root.scrollTop;
}
}


function popup_derniers_messages(lien,largeur,hauteur)
{
		var tempX=0;
		var tempY=0;
		var noPx = document.childNodes ? 'px' : 0;
		
		
		if (document.all) {
			tempY=document.all["imgDerniersMessages"].offsetTop+window.screenTop-10;
			tempX=document.all["imgDerniersMessages"].offsetLeft+window.screenLeft-10;
			//alert ("IE"+tempX);
		}
		//modif CL 09/2001 - NS6 : celui-ci ne supporte plus document.layers mais document.getElementById
		else if (document.getElementById) {
			tempY=document.getElementById("imgDerniersMessages").offsetTop+window.screenY;
			tempX=document.getElementById("imgDerniersMessages").offsetLeft+window.screenX-10;
			//alert ("NS"+tempX);
		} 
	  if (tempX<0) tempX=0;
	  if (tempY<0) tempY=0;
	  var config = 'top='+tempY+noPx+', left='+tempX+noPx+', status=no, scrollbars=yes, resizable=yes, width='+largeur+noPx+', height='+hauteur+noPx+' ';
	  
	  derniersmessages=window.open(lien,"derniersmessages",config);
	  derniersmessages.focus();
	  derniersmessages.resizeTo(largeur, hauteur);
}

function fermer_popup_derniers_messages()
{
	window['derniersmessages']=null;
	window.close("derniersmessages");
}

function printPage()
{
    // Do print the page
    if (typeof(window.print) != 'undefined') {
        window.print();
    }
	else {
		var n = '<OBJECT ID="navi1" WIDTH=0 HEIGHT=0 CLAS"CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
		document.body.insertAdjacentHTML('beforeEnd', n);
		navi1.ExecWB(6, 2);
	}
}


function OpenerPositionScrollX() { 
	sx=0;
	/*
	if (window.opener && !window.opener.closed)
	{ 
	 	D=window.opener.document;
		gk=window.Event?1:0; // navigateurs Gecko,Opéra ou IE
		de=!D.documentElement.clientWidth?D.body:D.documentElement ;//détection IE5 et quirk IE6 ou IE6 standard
		sx=gk?pageXOffset:de.scrollLeft       //scroll horiz	
		alert ("x:"+sx);
	}*/
	if (window.opener && !window.opener.closed)
	{ 
	
	   if (window.opener.pageXOffset){
	        return window.opener.pageXOffset;
	    }
	    if(window.opener.document.documentElement && window.opener.document.documentElement.scrollTop){
	        return window.opener.document.documentElement.scrollLeft;
	    }
	    if(window.opener.document.body){
	        return document.body.scrollLeft;
	    }
    }
	return sx;
}

function OpenerPositionScrollY() { 
	sy=0;
/*	if (window.opener && !window.opener.closed)
	{ 
	 	D=window.opener.document;
		gk=window.Event?1:0; // navigateurs Gecko,Opéra ou IE
		de=!D.documentElement.clientWidth?D.body:D.documentElement ;//détection IE5 et quirk IE6 ou IE6 standard
		sy=gk?pageYOffset:de.scrollTop       //scroll vertical
		alert ("y:"+sy);
	}*/
	if (window.opener && !window.opener.closed)
	{ 
	   if (window.opener.pageYOffset){
	        return window.opener.pageYOffset;
	    }
	    if(window.opener.document.documentElement && window.opener.document.documentElement.scrollTop){
	        return window.opener.document.documentElement.scrollTop;
	    }
	    if(window.opener.document.body){
	        return document.body.scrollTop;
	    }
    }	
	return sy;
}




function removeHrefLinks() {
   var a= document.getElementsByTagName('a');
   for (var i=0;i<a.length;i++) {
      a[i].href= "#";
   }
}


////////////////////////////////////


function escapeHTML(html)
{
 // Returns a properly escaped HTML string.
 var oldH='';
 while(oldH!=html)
 {
	oldH=html;
	html= html.replace('&', '##amp;');
 }
 oldH='';
  while(oldH!=html)
 {
	oldH=html;
	html= html.replace('##amp;', '&amp;');
 }
 oldH='';
 while(oldH!=html)
 {
	oldH=html;
	html= html.replace('<', '&lt;').replace('>', '&gt;').replace('\'', '&#039;').replace('\"', '&quot;');
 }
 //html= htmlentities(html,"ENT_QUOTES");
 return utf8_encode(html);
};


/////////////////////added by TV from http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_htmlentities/
function utf8_encode ( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

function utf8_decode(string) {
	utftext = string;
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;
	while ( i < utftext.length ) {
	c = utftext.charCodeAt(i);
	if (c < 128) {
	string += String.fromCharCode(c);
	i++;
	}
	else if((c > 191) && (c < 224)) {
	c2 = utftext.charCodeAt(i+1);
	string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
	i += 2;
	}
	else {
	c2 = utftext.charCodeAt(i+1);
	c3 = utftext.charCodeAt(i+2);
	string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
	i += 3;
	}
	}
	return string;
};

function htmlentities (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: nobbler
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlentities('Kevin & van Zonneveld');
    // *     returns 1: 'Kevin &amp; van Zonneveld'
    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");
    // *     returns 2: 'foo&#039;bar'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}

function html_entity_decode( string, quote_style ) {
    // http://kevin.vanzonneveld.net
    // +   original by: john (http://www.jd-tech.net)
    // +      input by: ger
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   improved by: marc andreu
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: html_entity_decode('Kevin &amp; van Zonneveld');
    // *     returns 1: 'Kevin & van Zonneveld'
    // *     example 2: html_entity_decode('&amp;lt;');
    // *     returns 2: '&lt;'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
 
    // &amp; must be the last character when decoding!
    delete(histogram['&']);
    histogram['&'] = '&amp;';
 
	var oldStr='';
	while (tmp_str!=oldStr)
	{
	 oldStr=tmp_str;
		for (symbol in histogram) {
			entity = histogram[symbol];
			tmp_str = tmp_str.split(entity).join(symbol);
		}
    }
    
    return tmp_str;
}

function str_replace_char(search, r, subject) {
   var i;
   var s=''
   for(i=0;i<subject.length;i++)
   {
     if (subject[i]==search) s=s+r;
	 else s=s+subject[i];
   } 
   return s;
}

function get_html_translation_table(table, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js. Meaning the constants are not
    // %          note: real constants, but strings instead. integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // %          note: Table from http://www.the-art-of-web.com/html/character-codes/
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    useTable      = (table ? table.toUpperCase() : 'HTML_SPECIALCHARS');
    useQuoteStyle = (quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT');
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
    
    // Map numbers to strings for compatibilty with PHP constants
    if (!isNaN(useTable)) {
        useTable = constMappingTable[useTable];
    }
    if (!isNaN(useQuoteStyle)) {
        useQuoteStyle = constMappingQuoteStyle[useQuoteStyle];
    }
 
    if (useTable == 'HTML_SPECIALCHARS') {
        // ascii decimals for better compatibility
        entities['38'] = '&amp;';
        if (useQuoteStyle != 'ENT_NOQUOTES') {
            entities['34'] = '&quot;';
        }
        if (useQuoteStyle == 'ENT_QUOTES') {
            entities['39'] = '&#039;';
        }
        entities['60'] = '&lt;';
        entities['62'] = '&gt;';
    } else if (useTable == 'HTML_ENTITIES') {
        // ascii decimals for better compatibility
      entities['38']  = '&amp;';
        if (useQuoteStyle != 'ENT_NOQUOTES') {
            entities['34'] = '&quot;';
        }
        if (useQuoteStyle == 'ENT_QUOTES') {
            entities['39'] = '&#039;';
        }
      entities['60']  = '&lt;';
      entities['62']  = '&gt;';
      entities['160'] = '&nbsp;';
      entities['161'] = '&iexcl;';
      entities['162'] = '&cent;';
      entities['163'] = '&pound;';
      entities['164'] = '&curren;';
      entities['165'] = '&yen;';
      entities['166'] = '&brvbar;';
      entities['167'] = '&sect;';
      entities['168'] = '&uml;';
      entities['169'] = '&copy;';
      entities['170'] = '&ordf;';
      entities['171'] = '&laquo;';
      entities['172'] = '&not;';
      entities['173'] = '&shy;';
      entities['174'] = '&reg;';
      entities['175'] = '&macr;';
      entities['176'] = '&deg;';
      entities['177'] = '&plusmn;';
      entities['178'] = '&sup2;';
      entities['179'] = '&sup3;';
      entities['180'] = '&acute;';
      entities['181'] = '&micro;';
      entities['182'] = '&para;';
      entities['183'] = '&middot;';
      entities['184'] = '&cedil;';
      entities['185'] = '&sup1;';
      entities['186'] = '&ordm;';
      entities['187'] = '&raquo;';
      entities['188'] = '&frac14;';
      entities['189'] = '&frac12;';
      entities['190'] = '&frac34;';
      entities['191'] = '&iquest;';
      entities['192'] = '&Agrave;';
      entities['193'] = '&Aacute;';
      entities['194'] = '&Acirc;';
      entities['195'] = '&Atilde;';
      entities['196'] = '&Auml;';
      entities['197'] = '&Aring;';
      entities['198'] = '&AElig;';
      entities['199'] = '&Ccedil;';
      entities['200'] = '&Egrave;';
      entities['201'] = '&Eacute;';
      entities['202'] = '&Ecirc;';
      entities['203'] = '&Euml;';
      entities['204'] = '&Igrave;';
      entities['205'] = '&Iacute;';
      entities['206'] = '&Icirc;';
      entities['207'] = '&Iuml;';
      entities['208'] = '&ETH;';
      entities['209'] = '&Ntilde;';
      entities['210'] = '&Ograve;';
      entities['211'] = '&Oacute;';
      entities['212'] = '&Ocirc;';
      entities['213'] = '&Otilde;';
      entities['214'] = '&Ouml;';
      entities['215'] = '&times;';
      entities['216'] = '&Oslash;';
      entities['217'] = '&Ugrave;';
      entities['218'] = '&Uacute;';
      entities['219'] = '&Ucirc;';
      entities['220'] = '&Uuml;';
      entities['221'] = '&Yacute;';
      entities['222'] = '&THORN;';
      entities['223'] = '&szlig;';
      entities['224'] = '&agrave;';
      entities['225'] = '&aacute;';
      entities['226'] = '&acirc;';
      entities['227'] = '&atilde;';
      entities['228'] = '&auml;';
      entities['229'] = '&aring;';
      entities['230'] = '&aelig;';
      entities['231'] = '&ccedil;';
      entities['232'] = '&egrave;';
      entities['233'] = '&eacute;';
      entities['234'] = '&ecirc;';
      entities['235'] = '&euml;';
      entities['236'] = '&igrave;';
      entities['237'] = '&iacute;';
      entities['238'] = '&icirc;';
      entities['239'] = '&iuml;';
      entities['240'] = '&eth;';
      entities['241'] = '&ntilde;';
      entities['242'] = '&ograve;';
      entities['243'] = '&oacute;';
      entities['244'] = '&ocirc;';
      entities['245'] = '&otilde;';
      entities['246'] = '&ouml;';
      entities['247'] = '&divide;';
      entities['248'] = '&oslash;';
      entities['249'] = '&ugrave;';
      entities['250'] = '&uacute;';
      entities['251'] = '&ucirc;';
      entities['252'] = '&uuml;';
      entities['253'] = '&yacute;';
      entities['254'] = '&thorn;';
      entities['255'] = '&yuml;';
    } else {
        throw Error("Table: "+useTable+' not supported');
        return false;
    }
    
    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}
////////////////////////// end added by TV
