// *************** SCRIPTS JOURNAL DU NET ***********************
// Les 5 prochains scripts : http://developpeur.journaldunet.com/tutoriel/dht/060512-5-javascripts-vraiment-utiles.shtml

/*
getElementById()
L'une des fonctionnalités les plus utilisées du DOM est getElementById().
Désormais reconnue par tous les navigateurs modernes, elle reste cependant inaccessible aux autres.
Pour que les scripts modernes puissent cependant fonctionner sur les navigateurs ne reconnaissant pas cette méthode très appréciée,
la voici recréée en JavaScript. A placer au début de tout script faisant appel à getElementById().

L'usage est le même que pour la fonction originale : getElementById("identifiant").

*/

/*
if (!document.getElementById)
{
	if (document.all)
    		document.getElementById=function()
    		{
      			if ( typeof(document.all[arguments[0]]) != "undefined")
        			return document.all[arguments[0]];
      			else
        			return null;
      		}
  	else if (document.layers)
    		document.getElementById=function()
    		{
      			if ( typeof(document[arguments[0]]) != "undefined")
        			return document[arguments[0]];
      			else
        			return null;
      		}
  }*/

/*
Après avoir recréé une fonction JavaScript dans ce même langage,
l'étape suivante consiste à pallier aux manques de ce langage.
Notamment, nombre de développeurs se sont trouvés frustrés de pouvoir sélectionner un élément que par identifiant avec getElementById(),
mais auraient voulu également pouvoir sélectionner l'ensemble des éléments correspondant à
une certaine classe - ce que le DOM ne propose pas. De nombreuses versions de getElementsByClass()
ont donc été conçues au fil des années. En voici deux. La première a été créée par Dustin Diaz :
*/

/*
function getElementsByClass(searchClass, node, tag)
{
	var classElements = new Array();
    	if ( node == null )
        	node = document;
    	if ( tag == null )
        	tag = '*';
    	var els = node.getElementsByTagName(tag);
    	var elsLen = els.length;
    	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    	for (i = 0, j = 0; i < elsLen; i++)
    	{
        	if ( pattern.test(els[i].className) )
        	{
            		classElements[j] = els[i];
            		j++;
        	}
    	}
    	return classElements;
}*/

/*

La seconde provient de Dylan Schiemann, et propose de passer par les méthodes XPath proposées par le DOM,
dans le cadre d'une page XHTML :

En l'état, la fonction de Dustin Diaz est plus efficace, car elle offre deux arguments supplémentaires et optionnels :
le premier pour préciser que la recherche se fait au sein d'un élément (récupéré via getElementById(), par exemple),
la seconde pour limiter la recherche à un nom de balise donnée (on peut également utiliser le joker * dans le cas par exemple de sélecteurs multiple).
*/
/*
function getElementByClassName(needle)
{
	//var xpathResult = document.evaluate('//*[@class = "'needle'"]', document, null, 0, null);
  	var outArray = new Array();
  	var item;
  	while (item = xpathResult.iterateNext()) outArray[outArray.length] = item;
  	return outArray;
}
*/
/*
Cette fonction est un pas supplémentaire dans l'accès aux balises par JavaScript :
viser les balises disposant d'un même attribut d'une valeur donnée.
Elle est disponible chez certains parseurs XML. Cette version a été créée par Robert Nyman.

    Copyright Robert Nyman, http://www.robertnyman.com
    Free to use if this text is included
*/
/*
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue)
{
	//	Copyright Robert Nyman, http://www.robertnyman.com
    	//	Free to use if this text is included


	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    	var arrReturnElements = new Array();
    	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    	var oCurrent;
    	var oAttribute;
    	for(var i=0; i<arrElements.length; i++)
    	{
	        oCurrent = arrElements[i];
	        oAttribute = oCurrent.getAttribute(strAttributeName);
	        if (typeof oAttribute == "string" && oAttribute.length > 0)
	        {
            		if (typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute)))
            		{
                		arrReturnElements.push(oCurrent);
            		}
        	}
    	}
    	return arrReturnElements;
}*/

/*
La dernière innovation en la matière est la fonction baptisée $(),
issue du projet Prototype et qui sert de remplacement efficace à getElementById().
En effet, grâce à elle, un développeur peut remplacer ces appels de la forme var el = document.getElementById('id');
en var el = $('id'). C'est bien sûr plus court, mais $() va plus loin,
en donnant la possibilité d'appeller plusieurs id différents pour obtenir un tableau d'éléments à parcourir ensuite :
var el = $('id1', 'id2', 'id3');. La version que nous présentons ici est celle de Matthew Pennell :

L'idée de cette version est d'offrir un raccourci non seulement pour getElementById(),
mais également getElementsByTagName() et getElementsByClass(), le tout en une seule fonction.
En somme, une boîte à outils entière en une seule fonction simple d'usage : l'auteur la surnomme d'ailleurs getElementsByAnything().

*/
/*
function $()
{
	var elements = new Array();
    	for (var i=0,len=arguments.length;i<len;i++)
    	{
        	var element = arguments[i];
        	if (typeof element == 'string')
        	{
            		var matched = document.getElementById(element);
            		if (matched)
            		{
                		elements.push(matched);
            		}
            		else
            		{
                		var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                		var regexp = new RegExp('(^| )'+element+'( |$)');
                		for (var i=0,len=allels.length;i<len;i++)
                			if (regexp.test(allels[i].className))
                				elements.push(allels[i]);
            		}
            		if (!elements.length)
            			elements = document.getElementsByTagName(element);
            		if (!elements.length)
            		{
                		elements = new Array();
                		var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                		for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
            		}
            		if (!elements.length)
            		{
                		var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                		for (var i=0,len=allels.length;i<len;i++)
                			if (allels[i].attributes)
                				for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++)
                					if (allels[i].attributes[j].specified)
                						if (allels[i].attributes[j].nodeValue == element)
                							elements.push(allels[i]);
            		}
        	}
        	else
        	{
            		elements.push(element);
        	}
	}
    	if (elements.length == 1)
    	{
	        return elements[0];
    	}
    	else
    	{
	        return elements;
    	}
}*/

/*
var link = document.createElement('a');
link.setAttribute('href', 'index.html');
link.appendChild(document.createTextNode('go home'));
document.getElementById('content').appendChild(link);

...devient...

domEl('a', 'go home', [['href', 'index.html']], document.getElementById('content'));

domEl() prend 5 arguments, la plupart optionnels ce qui permet d'avoir plusieurs cas de figure.
Le premier donne le type de l'élément à créer, le second le contenu de cet élément, le troisième ses attributs,
le quatrième indique dans quel(s) élément(s) celui-ci doit être créé, et le dernier précise si l'élément remplace les éléments existants, ou s'ajoute à eux.
*/
/*
var domEl = function(e,c,a,p,x)
{
	if(e||c)
	{
    		c=(typeof c=='string'||(typeof c=='object'&&!c.length))?[c]:c;
    		e=(!e&&c.length==1)?document.createTextNode(c[0]):e;
    		var n = (typeof e=='string')?document.createElement(e) : !(e&&e===c[0])?e.cloneNode(false):e.cloneNode(true);
    		if(e.nodeType!=3)
    		{
        		c[0]===e?c[0]='':'';
        		for(var i=0,j=c.length;i<j;i++)
        			typeof c[i]=='string'? n.appendChild(document.createTextNode(c[i]))  : n.appendChild(c[i].cloneNode(true));
        		if(a)
        		{
        			for(var i=(a.length-1);i>=0;i--)
        				a[i][0]=='class' ? n.className=a[i][1] : n.setAttribute(a[i][0],a[i][1]);
        		}
    		}
	}

    	if(!p)
    		return n;
    	p=(typeof p=='object'&&!p.length)?[p]:p;
    	for(var i=(p.length-1);i>=0;i--)
    	{
        	if(x)
        	{
        		while(p[i].firstChild) p[i].removeChild(p[i].firstChild);
            		if(!e&&!c&&p[i].parentNode) p[i].parentNode.removeChild(p[i]);
            	}
        	if(n)
        		p[i].appendChild(n.cloneNode(true));
    	}
}*/

// ********************** FENETRE MODALE **************************

    
function aff_fenetre_type1(url_loc,title_loc,width_loc,height_loc,contenu_div)
{
	/*if(document.getElementById('div_menu_debut'))
		document.getElementById('div_menu_debut').style.display='block';*/
	
	win = new Window(
	{
		className: "gest_style_fen_modal",
		title: title_loc,
		width: width_loc,
		height: height_loc,
		destroyOnClose: true,
		minimizable: false,
		maximizable: false
	}
	);
	
	//win.getContent().update("<h1>Hello world !!</h1>");	
	win.setHTMLContent(document.getElementById(contenu_div).innerHTML);
	win.setCloseCallback(close_fen);
	win.showCenter(true);
	
	/*Dialog.confirm
	(
		{
			url: url_loc,
			options: {method: 'post'}
		}
		, 	        
		{
			top: 10,
            okLabel: "Valider",
            cancelLabel:"Annuler",
            onOk: test_toto,
            	
            width:width_loc,
            className: "gest_style_fen_modal",
            resizable:true,
            draggable:true,
            title:title_loc,
            opacity:1
		}
	)*/
}


// ****************** POPUP GLISSANT ************************************************

/*var taillebg = monImage.width //largeur popup
var invtaillebg = (-taillebg)
taillebg = taillebg +5
var position_x = invtaillebg

var position_y = (screen.height-monImage.height-10)/2 //(hauteur ecran - hauteur image)/2*/


var fermeture; //pour l'ordre de fermeture
var ouverture_apres_fermeture;
var position_x;
var position_y;
var largeur_popup_glissante;
var invtaille;
var dist_max_bord_page;
var activ_pop;

function init_popup_glissante(largeur_popup_glissante_init,position_x_init,position_y_init,dist_max_bord_page_init,ouverture_apres_fermeture_init)
{
	fermeture=false;
	ouverture_apres_fermeture=ouverture_apres_fermeture_init;
	position_x=position_x_init;
	position_y=position_y_init;
	largeur_popup_glissante=largeur_popup_glissante_init;
	invtaille=(-largeur_popup_glissante);
	dist_max_bord_page=dist_max_bord_page_init;
}

// A mettre pour l'ouverture de la popup : window.onload = ouvrir_popup_glissante; suivi de la création du div
function ouvrir_popup_glissante()//à chaque lancement de la page
{
	if (fermeture==true) {window.clearTimeout(deactiv_pop);}
	//alert("position_x: "+position_x+" position_y: "+position_y+" largeur_popup_glissante: "+largeur_popup_glissante);
	document.getElementById("popup_glissante_context").style.top = position_y;
	document.getElementById("popup_glissante_context").style.left = position_x;
	document.getElementById("popup_glissante_context").style.visibility = 'visible';
	if (position_x < dist_max_bord_page ) //Distance maxi du bord de la page
	{
		position_x=position_x+1.5; //déplacement de la position x
		activ_pop = setTimeout("ouvrir_popup_glissante()",1);//vitesse de déplacement à l'ouverture, plus c'est grand moins la vitesse est élévée
	}
	else
	{
		deactiv_pop = setTimeout("fermer_popup_glissante()",10000);
	}
}

function fermer_popup_glissante()//lorsqu'on clique sur la croix
{
	fermeture=true;
	
	if(activ_pop)
	{
		window.clearTimeout(activ_pop);
		document.getElementById("popup_glissante_context").style.top = position_y;
		document.getElementById("popup_glissante_context").style.left = position_x;
	
		if (position_x > invtaille-6 )
		{
			position_x=position_x-1.5;//déplacement de la position x
			deactiv_pop = setTimeout("fermer_popup_glissante()",1);//vitesse de déplacement à la fermeture, plus c'est grand moins la vitesse est élévée
		}
		else if(ouverture_apres_fermeture)
		{
			activ_pop = setTimeout("ouvrir_popup_glissante()",20000)
		}
	}
}

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

function possede_antipop()
{
	var popwin = window.open('about:blank', 'poptest', 'width=0,height=0');

	if (popwin)
	{
		popwin.close();
		return false;
	}
	return true;
}


function verif_num_facture(numF)
{
	if(numF.value.length != 12)
	{
		alert("Le n° de facture doit comporter 12 caractères");
		numF.focus();
		return false;
	}

	var tiret = numF.value.substr(5,1);
	if(tiret != "-")
	{
		alert("Le n° de facture doit comporter 2 parties séparé par un titret ('-') avec la partie droite composée de 6 chiffres");
		numF.focus();
		return false;
	}

	var numerique = numF.value.substr(6,6);
	if(trim(numerique) == "" || ! est_entier_positif(numerique))
	{
		alert("La partie droite du n° de facture doit être un nombre à 6 chiffres entiers");
		numF.focus();
		return false;
	}

	return true;
}

hexa=new Array(16);
for (i=0;i<10;i++)
{
	hexa[i]=i.toString();
}

hexa[10]='A';hexa[11]='B';hexa[12]='C';hexa[13]='D';hexa[14]='E';hexa[15]='F';

function toHexa(n)
{
	n=Number(n);
	return(hexa[Math.floor(n/16)]+hexa[n%16]);
}

function Hexad(decimal)
{
	Hexadec = (toHexa(decimal));
	if ((decimal > 0) & (decimal <= 255))
		document.form1.hex.value = Hexadec;
	if (decimal>255)
	{
		Hexad(255);
	}
	if (decimal<=1)
	{
		Hexad(1);
	}
}

function checkValue(value)
{
	if ((value > 0) & (value <= 255))
		return value;
	if (value>255)
		return 255;
	if (value<1)
		return 0;
}

function convToHex(rouge,vert,bleu)
{
	rouge = checkValue(rouge);
	vert = checkValue(vert);
	bleu = checkValue(bleu);
	r =  rouge;
	v = vert;
	b = bleu;

	result =  '#' + (toHexa(r) +  toHexa(v) + toHexa(b));
	return result;
}

function convToDeci(x)
{
	if (!isNaN(x))
	{
		x=Number(x);
		return x
	}
	else
	{
		switch(x)
		{
			case 'A' : return 10 ;break;
			case 'B' : return 11 ;break;
			case 'C' : return 12 ;break;
			case 'D' : return 13 ;break;
			case 'E' : return 14 ;break;
			case 'F' : return 15 ;break;
			case 'a' : return 10 ;break;
			case 'b' : return 11 ;break;
			case 'c' : return 12 ;break;
			case 'd' : return 13 ;break;
			case 'e' : return 14 ;break;
			case 'f' : return 15 ;break;
		}
	}
}

function convToRGB(hexaString)
{
	hexaList=new Array(6);
	for (i=1;i<7;i++)
		hexaList[i-1]=hexaString.charAt(i);

	red = (convToDeci(hexaList[0])*16) + convToDeci(hexaList[1]);
	green = (convToDeci(hexaList[2])*16) + convToDeci(hexaList[3]);
	blue = (convToDeci(hexaList[4])*16) + convToDeci(hexaList[5]);

	result = red + "," + green + "," + blue;
	return result;
}

function convTohexa(hexaString)
{
	hexaList=new Array(2);
	for (i=1;i<3;i++)
		hexaList[i-1]=hexaString.charAt(i-1);

	hexa = (convToDeci(hexaList[0])*16) + convToDeci(hexaList[1]);

	return hexa;
}


/* Génère une succesion de caractères aléatoires. Il suffit de donner le nb de caractère, le type (A, N, AN) et dans
le cas de A ou AN préciser la casse (min, maj, minmaj) nb_car,type,casse */

function generer_chaine_aleatoire(nb_car,type,casse)
{
	var cars = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9');
	var cpt = 1;
	var n = 0, b_inf = 0, b_sup = 0;
	var chaine = "";

	if(type == "A")
	{
		if(casse == "maj")
		{
			b_inf	 = 0;
			b_sup = 25;
		}
		else if(casse == "min")
		{
			b_inf	 = 26;
			b_sup = 51;
		}
		if(casse == "minmaj")
		{
			b_inf	 = 0;
			b_sup = 51;
		}
	}
	else if(type == "N")
	{
		b_inf	 = 52;
		b_sup = 61;
	}
	else if(type == "AN")
	{
		if(casse == "min" || casse == "maj")
		{
			b_inf	 = 26;
			b_sup = 61;
		}
		if(casse == "minmaj")
		{
			b_inf	 = 0;
			b_sup = 61;
		}
	}

	while(cpt <= nb_car)
	{
		n = Math.floor(b_inf + Math.random() * (b_sup-b_inf+1)); // entre les bornes incluses

		chaine += cars[n];
		cpt++;
	}
	return chaine;
}

function insertion(input,repdeb, repfin)
{
	input.focus();

	/* pour l'Explorer Internet */
	if(typeof document.selection != 'undefined')
	{
		/* Insertion du code de formatage */
		var range = document.selection.createRange();
		var insText = range.text;
		range.text = repdeb + insText + repfin;
		/* Ajustement de la position du curseur */
		range = document.selection.createRange();
		if (insText.length == 0)
			range.move('character', -repfin.length);
		else
			range.moveStart('character', repdeb.length + insText.length + repfin.length);
		range.select();
	}
	/* pour navigateurs plus récents basés sur Gecko*/
	else if(typeof input.selectionStart != 'undefined')
	{
		/* Insertion du code de formatage */
		var start = input.selectionStart;
		var end = input.selectionEnd;
		var insText = input.value.substring(start, end);
		input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
		/* Ajustement de la position du curseur */
		var pos;
		if (insText.length == 0)
			pos = start + repdeb.length;
		else
			pos = start + repdeb.length + insText.length + repfin.length;
		input.selectionStart = pos;
		input.selectionEnd = pos;
	}
	/* pour les autres navigateurs */
	else
	{
		/* requête de la position d'insertion */
		var pos;
		var re = new RegExp('^[0-9]{0,3}$');
		while(!re.test(pos))
			pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
		if(pos > input.value.length)
			pos = input.value.length;

		/* Insertion du code de formatage */
		var insText = prompt("Veuillez entrer le texte à formater:");
		input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
	}
}

function decode_spec_car_html(txt)
{
	txt = txt.replace(/&mdash;/g,"—");
	txt = txt.replace(/&ndash;/g,"–");
	txt = txt.replace(/&shy;/g,"-");
	txt = txt.replace(/&quot;/g,"\"");
	txt = txt.replace(/&amp;/g,"&");
	txt = txt.replace(/&circ;/g,"ˆ");
	txt = txt.replace(/&iexcl;/g,"¡");
	txt = txt.replace(/&brvbar;/g,"¦");
	txt = txt.replace(/&uml;/g,"¨");
	txt = txt.replace(/&macr;/g,"¯");
	txt = txt.replace(/&acute;/g,"´");
	txt = txt.replace(/&cedil;/g,"¸");
	txt = txt.replace(/&iquest;/g,"¿");
	txt = txt.replace(/&tilde;/g,"˜");
	txt = txt.replace(/&lsquo;/g,"‘");
	txt = txt.replace(/&rsquo;/g,"’");
	txt = txt.replace(/&sbquo;/g,"‚");
	txt = txt.replace(/&ldquo;/g,"“");
	txt = txt.replace(/&rdquo;/g,"”");
	txt = txt.replace(/&bdquo;/g,"„");
	txt = txt.replace(/&lsaquo;/g,"‹");
	txt = txt.replace(/&rsaquo;/g,"›");	
	txt = txt.replace(/&lt;/g,"<");
	txt = txt.replace(/&gt;/g,">");
	txt = txt.replace(/&plusmn;/g,"±");
	txt = txt.replace(/&laquo;/g,"«");
	txt = txt.replace(/&raquo;/g,"»");
	txt = txt.replace(/&times;/g,"×");
	txt = txt.replace(/&divide;/g,"÷");
	txt = txt.replace(/&cent;/g,"¢");	
	txt = txt.replace(/&pound;/g,"£");
	txt = txt.replace(/&curren;/g,"¤");
	txt = txt.replace(/&yen;/g,"¥");
	txt = txt.replace(/&sect;/g,"§");
	txt = txt.replace(/&copy;/g,"©");	
	txt = txt.replace(/&not;/g,"¬");
	txt = txt.replace(/&reg;/g,"®");
	txt = txt.replace(/&deg;/g,"°");
	txt = txt.replace(/&micro;/g,"µ");
	txt = txt.replace(/&para;/g,"¶");
	txt = txt.replace(/&middot;/g,"·");
	txt = txt.replace(/&dagger;/g,"†");
	txt = txt.replace(/&Dagger;/g,"‡");
	txt = txt.replace(/&permil;/g,"‰");
	txt = txt.replace(/&euro;/g,"€");
	txt = txt.replace(/&frac14;/g,"¼");
	txt = txt.replace(/&frac12;/g,"½");
	txt = txt.replace(/&frac34;/g,"¾");
	txt = txt.replace(/&sup1;/g,"¹");
	txt = txt.replace(/&sup2;/g,"²");
	txt = txt.replace(/&sup3;/g,"³");
	txt = txt.replace(/&aacute;/g,"á");
	txt = txt.replace(/&Aacute;/g,"Á");
	txt = txt.replace(/&acirc;/g,"â");
	txt = txt.replace(/&Acirc;/g,"Â");
	txt = txt.replace(/&agrave;/g,"à");
	txt = txt.replace(/&Agrave;/g,"À");
	txt = txt.replace(/&aring;/g,"å");
	txt = txt.replace(/&Aring;/g,"Å");
	txt = txt.replace(/&atilde;/g,"ã");
	txt = txt.replace(/&Atilde;/g,"Ã");
	txt = txt.replace(/&auml;/g,"ä");
	txt = txt.replace(/&Auml;/g,"Ä");
	txt = txt.replace(/&ordf;/g,"ª");
	txt = txt.replace(/&aelig;/g,"æ");
	txt = txt.replace(/&AElig;/g,"Æ");
	txt = txt.replace(/&ccedil;/g,"ç");
	txt = txt.replace(/&Ccedil;/g,"Ç");
	txt = txt.replace(/&eth;/g,"ð");
	txt = txt.replace(/&ETH;/g,"Ð");
	txt = txt.replace(/&eacute;/g,"é");
	txt = txt.replace(/&Eacute;/g,"É");
	txt = txt.replace(/&ecirc;/g,"ê");
	txt = txt.replace(/&Ecirc;/g,"Ê");
	txt = txt.replace(/&egrave;/g,"è");
	txt = txt.replace(/&Egrave;/g,"È");
	txt = txt.replace(/&euml;/g,"ë");
	txt = txt.replace(/&Euml;/g,"Ë");
	txt = txt.replace(/&fnof;/g,"ƒ");
	txt = txt.replace(/&iacute;/g,"í");
	txt = txt.replace(/&Iacute;/g,"Í");
	txt = txt.replace(/&icirc;/g,"î");
	txt = txt.replace(/&Icirc;/,"Î");
	txt = txt.replace(/&igrave;/,"ì");
	txt = txt.replace(/&Igrave;/,"Ì");
	txt = txt.replace(/&iuml;/,"ï");
	txt = txt.replace(/&Iuml;/,"Ï");
	txt = txt.replace(/&ntilde;/,"ñ");
	txt = txt.replace(/&Ntilde;/,"Ñ");
	txt = txt.replace(/&oacute;/,"ó");
	txt = txt.replace(/&Oacute;/,"Ó");
	txt = txt.replace(/&ocirc;/,"ô");
	txt = txt.replace(/&Ocirc;/,"Ô");
	txt = txt.replace(/&ograve;/,"ò");
	txt = txt.replace(/&Ograve;/,"Ò");
	txt = txt.replace(/&ordm;/,"º");
	txt = txt.replace(/&oslash;/,"ø");
	txt = txt.replace(/&Oslash;/,"Ø");
	txt = txt.replace(/&otilde;/,"õ");
	txt = txt.replace(/&Otilde;/,"Õ");
	txt = txt.replace(/&ouml;/,"ö");
	txt = txt.replace(/&Ouml;/,"Ö");
	txt = txt.replace(/&oelig;/,"œ");
	txt = txt.replace(/&OElig;/,"Œ");
	txt = txt.replace(/&scaron;/,"š");
	txt = txt.replace(/&Scaron;/,"Š");
	txt = txt.replace(/&szlig;/,"ß");
	txt = txt.replace(/&thorn;/,"þ");
	txt = txt.replace(/&THORN;/,"Þ");
	txt = txt.replace(/&uacute;/,"ú");
	txt = txt.replace(/&Uacute;/,"Ú");
	txt = txt.replace(/&ucirc;/,"û");
	txt = txt.replace(/&Ucirc;/,"Û");
	txt = txt.replace(/&ugrave;/,"ù");
	txt = txt.replace(/&Ugrave;/,"Ù");
	txt = txt.replace(/&uuml;/,"ü");
	txt = txt.replace(/&Uuml;/,"Ü");
	txt = txt.replace(/&yacute;/,"ý");
	txt = txt.replace(/&Yacute;/,"Ý");
	txt = txt.replace(/&yuml;/,"ÿ");
	txt = txt.replace(/&Yuml;/,"Ÿ");
	                              
	return txt;
}

function noHtml(txt)
{   
   a = txt.indexOf('<');
   b = txt.indexOf('>');
   len = txt.length;
   c = txt.substring(0, a);
   if(b == -1) {
      b = a;
   }
   d = txt.substring((b + 1), len);
   txt = c + d;
   cont = txt.indexOf('<');
   if (cont != -1) {
     txt = noHtml(txt);
   }
   return txt;
}

function lien_visualisation_image_brute(langage,titre_photo,im_brute)
{
	var larg_photo_reel=im_brute.width-5;
	var haut_photo_reel=im_brute.height-5;
	var ascenseur = false;

	if(larg_photo_reel > 790)
	{
		larg_photo_reel = 790;
		ascenseur = true;
	}

	if(haut_photo_reel > 590)
	{
		haut_photo_reel = 590;
		ascenseur = true;
	}

	if(langage == "php")
	{	/*alert(im_brute.src);*/
		if(ascenseur)
			open('http://atoo-heberg.com/atooentreprise/aff_photo_paragraphe.php3?titre='+titre_photo+'&im='+im_brute.src,'_blank','width='+larg_photo_reel+',height='+haut_photo_reel+',toolbar=0,location=0,directories=0,menuBar=0,scrollbars=yes,status=0,resizable=1');
		else
			open('http://atoo-heberg.com/atooentreprise/aff_photo_paragraphe.php3?titre='+titre_photo+'&im='+im_brute.src,'_blank','width='+larg_photo_reel+',height='+haut_photo_reel+',toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,status=0,resizable=1');
	}
	else if(langage == "netdata")
	{
		if(ascenseur)
			open('aff_photo_paragraphe?titre='+titre_photo+'&im='+im_brute.src,'_blank','width='+larg_photo_reel+',height='+haut_photo_reel+',toolbar=0,location=0,directories=0,menuBar=0,scrollbars=yes,status=0,resizable=1');
		else
			open('aff_photo_paragraphe?titre='+titre_photo+'&im='+im_brute.src,'_blank','width='+larg_photo_reel+',height='+haut_photo_reel+',toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,status=0,resizable=1');
	}

}

function afficheVignette(chemin,nom,taille)
{
	document.write('<a href="javascript:affichageMaxi(\''+chemin+'\',\''+nom+'\')"><img src="'+chemin+'" hspace=0 vspace=0 border=0 width='+taille+' alt="Cliquez ici pour agrandir"></a>');
}

function affichageMaxi(chemin,nom)
{
	i1 = new Image;
	i1.src = chemin;
	html= '<html><head><title>Aperçu</title></head><body leftmargin=0 marginwidth=0 topmargin=0 marginheight=0><center><img src="'+chemin+'" border=0 name=imageTest onload="window.resizeTo(document.imageTest.width+34,document.imageTest.height+35)" onclick="window.close()" Alt="Cliquez pour fermer la fenêtre"></center></body></html>';
	popupImage = window.open('_blank','apercu','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,resizable=1');
	popupImage.document.open(),
	popupImage.document.write(html);
	popupImage.document.close();
}

function affichageMaxiTmp(chemin,nom)
{
	var i1 = new Image;
	i1.src = chemin;

	var W = eval(i1.width+38);
	var H = eval(i1.height+30);

	var popup = window.open(chemin,'apercu','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,width='+W+',height='+H+',resizable=1');
}

// a supprimer (systeme de changement du titre de la fenetre lorsque l'on change
// de page fille : on mete le titre de la page courante dans la page parente)
// parent.document.title=document.title;


function noclick()
{
	if (event.button==2)
	{
		alert('Tous droits réservés');
	}
}

function trap()
{
	if(document.images)
		for(i=0;i<document.images.length;i++)
			document.images[i].onmousedown = noclick;
}
//document.onmousedown=trap;

function dialog_suppr(aff_checkbox,avertissement)
{
	var params = new Array(aff_checkbox,avertissement);
	var haut = 0;

	if(aff_checkbox)
		haut = 140;
	else
		haut = 120;

	if(avertissement)
		haut += 20;

	var type_suppr = window.showModalDialog('/atooentreprise/dialog_suppr.html',params, 'dialogHeight:'+haut+'px;dialogWidth:280px;help:no;scroll:no;status:no');

	return type_suppr;
}

function dialog_import_photothequ()
{
	var haut = 0;

	haut = 110;

	var type_suppr = window.showModalDialog('/atooentreprise/dialog_import_photo.html','', 'dialogHeight:'+haut+'px;dialogWidth:325px;help:no;scroll:no;status:no');

	return type_suppr;
}

function verifmail(mail) //verifie si la syntaxe du mail est bonne
{
	var at = mail.indexOf("@"); //recupere l'indice du caractere--ds le if, il faut que ce soit au moins le 3eme car, sinon @<2 donne faux----ex: 12@
	var pt = mail.lastIndexOf(".");  //recupere l'indice du point----il faut qu'il y ait au moins 2 caractere apres le point,sinon, indice+3 est superieur à la chaine----ex: 123@12.12, indice du point=6 ==>6+3>8
	var caracts_interdits = false;

	if(mail.indexOf(" ") >= 0) caracts_interdits = true;

	if(mail=="")
	{
		//alert("Veuillez entrer une adresse e-mail");
		return true;
	}

	//il faut au moins 3 caracteres devant l'@, 2 apres le point et 2 entre l'@ et le point
	//ex 12@12.12

	if((at < 2) || (pt+3 > mail.length) || (pt < at+3) || caracts_interdits || isEmailAdress(mail) == false)
	{
		alert("Veuillez entrer une adresse mail sous la forme xx@xx.xx");
		return false;
	}
	return true;
}

function verifNomDomaine(obj_dom,www_verif,libelle) // monsite.com ou www.monsite.com si le param 'www_verif' est à true
{
	var dom = obj_dom.value;

	if(obj_dom && dom != "")
	{
		var www = dom.indexOf("www");
		var first_pt = dom.indexOf(".");
		var last_pt = dom.lastIndexOf(".");
		var taille_extension_min = 2; // com,org,de,fr
		var ext = dom.substr(last_pt+1);
		var wrong = false;

		if(www_verif)
		{
			if(www == -1) wrong = true;
			if(first_pt == -1) wrong = true;
			if(first_pt != 3) wrong = true;
		}

		if(last_pt == -1) wrong = true;



		if(ext.length < taille_extension_min) wrong = true;

		if(wrong)
		{
			var str	= libelle+" doit être de la forme: ";
			if(www_verif)
				str += "www.nom_du_site.domaine (ex. www.monsite.fr)";
			else
				str += "nom_du_site.domaine (ex. monsite.fr)";
			alert(str);
			obj_dom.focus();
			return false;
		}
	}
	return true;
}

function test_js()
{
	alert("Le fichier 'atooent.js' est bien lié à la page web.");
}

/*
	Vérifie si une date est correctement saisie. Et si elle doit être saisie,
	vérifie qu'elle l'est.
	- paramètres:
		* obj_date_j:	l'objet contenant le jour (controle input en fait) ou directement la valeur corresp. au jour
		* obj_date_m: 	l'objet contenant le mois (controle input en fait) ou directement la valeur corresp. au mois
		* obj_date_a: 	l'objet contenant l'année (controle input en fait) ou directement la valeur corresp. à l'année
		* lbl_date:		Nom de la date qui s'affichera dans les messages d'alerte.
		* lgr_annee:	Nombre de caratères de l'année (2 ou 4 en gén.)
		* oblig:		True si elle doit être saisie, false sinon.
		* par_objet:	True si ce sont des références d'objet qui sont passées en paramètre, false si ce sont des valeurs.
*/

function verif_date_new(obj_date_j,obj_date_m,obj_date_a,lbl_date,lgr_annee,oblig,parObjet)
{
	if(parObjet)
	{
		var date_j = obj_date_j.value;
		var date_m = obj_date_m.value;
		var date_a = obj_date_a.value;
	}
	else
	{
		var date_j = obj_date_j;
		var date_m = obj_date_m;
		var date_a = obj_date_a;
	}

	if(isEmpty(date_j) && isEmpty(date_m) && isEmpty(date_a))
	{
		if(oblig)
		{
			alert("Veuillez saisir la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_j.focus();
			return false;
		}
	}
	else
	{
		if(isNaN(date_j) == true || date_j == "" || date_j.indexOf("-") != -1 || date_j.indexOf("+") != -1 || date_j.indexOf(".") != -1 || date_j.indexOf(",") != -1 || date_j.length != 2)
		{
			alert("Veuillez saisir un jour correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_j.focus();
			return false;
		}
		else if(isNaN(date_m) == true || date_m == "" || date_m.indexOf("-") != -1 || date_m.indexOf("+") != -1 || date_m.indexOf(".") != -1 || date_m.indexOf(",") != -1 || date_m.length != 2)
		{
			alert("Veuillez saisir un mois correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_m.focus();
			return false;
		}
		else if(isNaN(date_a) == true || date_a == "" || date_a.indexOf("-") != -1 || date_a.indexOf("+") != -1 || date_a.indexOf(".") != -1 || date_a.indexOf(",") != -1 || date_a.length != lgr_annee)
		{
			alert("Veuillez saisir une année correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_a.focus();
			return false;
		}
		else
		{
			if(date_j <= 0 || date_j > 31 || date_m <= 0 || date_m > 12 || date_a <= 0)
			{
				alert("La date "+ lbl_date +" est incorrecte!");
				if(parObjet)
					obj_date_j.focus();
				return false;
			}
		}
	}
	return true;
}

function verif_date_new_simple(obj_date_j,obj_date_m,obj_date_a,lgr_annee,oblig,parObjet)
{
	if(parObjet)
	{
		var date_j = obj_date_j.value;
		var date_m = obj_date_m.value;
		var date_a = obj_date_a.value;
	}
	else
	{
		var date_j = obj_date_j;
		var date_m = obj_date_m;
		var date_a = obj_date_a;
	}

	if(isEmpty(date_j) && isEmpty(date_m) && isEmpty(date_a))
	{
		if(oblig)
			return 1; // date obligatoire		
	}
	else
	{
		if(isNaN(date_j) == true || date_j == "" || date_j.indexOf("-") != -1 || date_j.indexOf("+") != -1 || date_j.indexOf(".") != -1 || date_j.indexOf(",") != -1 || date_j.length != 2)
			return 2; // jour saisi incorrect
		else if(isNaN(date_m) == true || date_m == "" || date_m.indexOf("-") != -1 || date_m.indexOf("+") != -1 || date_m.indexOf(".") != -1 || date_m.indexOf(",") != -1 || date_m.length != 2)
			return 3; // mois saisi incorrect
		else if(isNaN(date_a) == true || date_a == "" || date_a.indexOf("-") != -1 || date_a.indexOf("+") != -1 || date_a.indexOf(".") != -1 || date_a.indexOf(",") != -1 || date_a.length != lgr_annee)
			return 4; // année saisie incorrecte
		else
		{
			if(date_j <= 0 || date_j > 31 || date_m <= 0 || date_m > 12 || date_a <= 0)
				return 5; // date saisie incorrecte			
		}
	}
	return 0;
}

function verif_date(date_j,date_m,date_a,lbl_date)
{
	return verif_date_new(date_j,date_m,date_a,lbl_date,2,false,false);
}

function verif_heure_new(obj_heure_h,obj_heure_m,lbl_heure,oblig,parObjet)
{
	if(parObjet)
	{
		var heure_h = obj_heure_h.value;
		var heure_m = obj_heure_m.value;
	}
	else
	{
		var heure_h = obj_heure_h;
		var heure_m = obj_heure_m;
	}

	if(isEmpty(heure_h) && isEmpty(heure_m))
	{
		if(oblig)
		{
			alert("Veuillez saisir l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_h.focus();
			return false;
		}
	}
	else
	{
		if(isNaN(heure_h) == true || heure_h == "" || heure_h.indexOf("-") != -1 || heure_h.indexOf("+") != -1 || heure_h.indexOf(".") != -1 || heure_h.indexOf(",") != -1 || heure_h.length != 2)
		{
			alert("Veuillez saisir une heure correcte pour l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_h.focus();
			return false;
		}
		else if(isNaN(heure_m) == true || heure_m == "" || heure_m.indexOf("-") != -1 || heure_m.indexOf("+") != -1 || heure_m.indexOf(".") != -1 || heure_m.indexOf(",") != -1 || heure_m.length != 2)
		{
			alert("Veuillez saisir un nombre de minutes correct pour l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_m.focus();
			return false;
		}
		else
		{
			if(heure_h < 0 || heure_h > 23 || heure_m < 0 || heure_m > 59)
			{
				alert("L'heure "+ lbl_heure +" est incorrecte!");
				if(parObjet)
					obj_heure_h.focus();
				return false;
			}
		}
	}
	return true;
}

function verif_heure(heure_h,heure_m,lbl_heure)
{
	return verif_heure_new(heure_h,heure_m,lbl_heure,false,false);
}
function comparer_dates(jour1,mois1,annee1,jour2,mois2,annee2,libelle_alerte,op)
{
	if(op != ">" && op != ">=" && op != "<" && op != "<=" && op != "==")
		return false;

	if(jour2 != "" && mois2 != "" && annee2 != "")
	{
		var date1 = new Date(annee1,mois1,jour1);
		var date2 = new Date(annee2,mois2,jour2);
		var res = false;

		//alert(date1+" "+date2);
		if(op == ">")
			res = (date1 > date2);
		else if (op == ">=")
			res = (date1 >= date2);
		else if (op == "<")
			res = (date1 < date2);
		else if (op == "<=")
			res = (date1 <= date2);

		if(res)
			return true;
		alert(libelle_alerte);
		return false;
	}
	else
		return true;
}

function verif_date2_sup_date1(jour1,mois1,annee1,jour2,mois2,annee2)
{
	mois1--;
	mois2--;
	if(annee1.length == 2)
		annee1 = "20"+annee1;
	if(annee2.length == 2)
		annee2 = "20"+annee2;
	return comparer_dates(jour1,mois1,annee1,jour2,mois2,annee2,"La date de début doit être antérieure à la date de fin","<=");
}

function est_entier_positif(n)
{
	if(isNaN(n))
		return false;
	if(n.indexOf("-") != -1)
		return false;
	if(n.indexOf("+") != -1)
		return false;
	return true;
}

/* véirifié si un prix décimal est correct (11477.25 ou 1456,65). 2 ch. après la virgule, 1 point ou une virgule comme séparateur.*/
// on spécifie aussi la taille maxi de la partie entière
function verif_prix(prix,l_max_partie_ent)
{
	if(prix == "")
		return true;

	var delimit = "";
	if(prix.indexOf(".") != -1)
		delimit = ".";
	else if(prix.indexOf(",") == -1)
	{
		delimit = ".";
		prix += ".00";
	}
	
	if(delimit == "")
	{
		alert("La partie décimale d'un prix doit être marquée par un point.");
		return false;
	}
	else
	{
		var n = (prix.split(delimit))[0];
		var d = (prix.split(delimit))[1];

		//alert("n = "+n+" d = "+d);

		if(n.length == 0)
		{
			alert("Vous devez avoir entre 1 et 6 chiffres avant la virgule (ou le point)!");
			return false;
		}
		if(d.length != 2)
		{
			alert("Vous devez avoir 2 chiffres après la virgule (ou le point)!");
			return false;
		}
		
		if(l_max_partie_ent != "")
		{
			if(n.length > l_max_partie_ent || d.length > 2)
			{
				var max = "";
				for(var cpt = 0; cpt < l_max_partie_ent; cpt++)
					max += "9";
	
				alert("Prix trop grand. Le maximum autorisé est "+max+".99 ("+max+" chiffres et 2 décimaux)!");
				return false;
			}
		}
		
		if(!est_entier_positif(n))
		{
			alert(n+" n'est pas valide");
			return false;
		}
		if(!est_entier_positif(d))
		{
			alert(d+" n'est pas valide");
			return false;
		}
	}
	return true;
}

function trim(string)
{
	return string.replace(/(^\s*)|(\s*$)/g,'');
}

function inf_a_max_ans(la_date,max_an) /* format: 2004-11-08 */
{
	var today = new Date();
	var aaaa = la_date.slice(0,4);
	var mm = eval(la_date.slice(5,7) - 1);
	var jj = la_date.slice(8,10);


	var date_tmp = new Date(aaaa,mm,jj);
	var diff = date_tmp - today; // nb mili-sec écart
	diff = diff / 1000; // nb sec écart
	diff = diff / 3600; // nb heure écart
	diff = diff / 24; // nb jour écart
	diff = diff / 365.25; // nb d'année d'écart
	diff = Math.floor(diff);

	if(diff <= max_an)
		return true;
	return false;
}

/**Méthode vérifiant que le champ soit bien une date*/
function isDate(valeur){
   var re = /^\d{1}\d{1}\/\d{1}\d{1}\/\d{1}\d{1}\d{1}\d{1}$/;

   if(!re.test(valeur)){
        alert("Vous n'avez pas saisie une date !!!");
        return false;
   }
   return true;
}

/**Méthode vérifiant que le champ soit une adresse email*/
function isEmailAdress(valeur){
   var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

   if(!re.test(valeur)){
        alert("Veuillez saisir une adresse email valide.");
        return false;
   }
   return true;
}

/**Méthode vérifiant que le champ ne soit pas vide*/
function isEmpty(valeur){
   //var re = /^\S+$/;
	var re = /^\s*$/;

   if(re.test(valeur)){
        return true;
   }
   return false;
}

/**Méthode vérifiant que le champ soit bien un fichier image*/
function isFile(valeur){
   var re = /^.+\.(gif|jpg|jpeg|png)$/i;

   if(!re.test(valeur)){
        alert("Vous n'avez saisie un fichier image !!!");
        return false;
   }
   return true;
}

/**Méthode vérifiant que la valeur saisie soit bien un entier*/
function isInteger(valeur){
   var re = /^\d+$/;

    if(!re.test(valeur)){
       // alert("Vous n'avez pas saisie d'entier !!!");
       return false;
   }
   return true;
}

/**Méthode vérifiant que le champ soit bien un réel*/
function isReal(valeur){
   var re = /^\d+([\.|,])?\d+$/;

   if(!re.test(valeur)){
        //alert("Vous n'avez pas saisie un réel !!!");
        return false;
   }
   return true;
}

/* utiliser: verif_login_et_pass(obj_login,obj_pass,lgr_mini_login,lgr_mini_pass) */
function verif_login_pass(login,pass,lgr_mini_login,lgr_mini_pass)
{
	if(isEmpty(login))
	{
		alert('Veuillez saisir un identifiant.');
		return false;
	}

	if(isEmpty(pass))
	{
		alert('Veuillez saisir un mot de passe.');
		return false;
	}

	if(login.length < lgr_mini_login)
	{
		alert("L'identifiant doit être constitué d'au moins "+lgr_mini_login+" caractère(s)");
		return false;
	}

	if(pass.length < lgr_mini_pass)
	{
		alert("Le mot de passe doit être constitué d'au moins "+lgr_mini_pass+" caractère(s)");
		return false;
	}
	return true;
}

function est_lettre(car,casse)
{
	if(casse == 0) // minuscule
		return ((car >= 'a' && car <= 'z') || car == '_');
	else if(casse == 1) // majuscule
		return ((car >= 'A' && car <= 'Z') || car == '_');
	else if(casse == 2) // les 2
		return ((est_lettre(car,0) || est_lettre(car,1)) || car == '_');
}

function est_chiffre(car)
{
	return (car >= 0 && car <= 9);
}

function contient_lettres_et_chiffres(chaine,casse)
{
	var car = '';

	for(var i=0; i<chaine.length;  i++)
	{
		car = chaine.charAt(i);
		if(( ! est_lettre(car,casse) && ! est_chiffre(car)) || car == ' ')
			return false;
	}
	return true;
}

function contient_caractere(chaine,car_comp)
{
	var car = '';

	for(var i=0; i<chaine.length;  i++)
	{
		car = chaine.charAt(i);
		if(car == car_comp)
			return true;
	}
	return false;
}

function verif_pass(obj_pass,lgr_mini_pass,is_obj)
{
	var pass = "";

	if(is_obj)
		pass = obj_pass.value;
	else
		pass = obj_pass;

	if(isEmpty(pass))
	{
		alert('Veuillez saisir un mot de passe.');
		if(is_obj)
			obj_pass.focus();
		return false;
	}
	if( ! contient_lettres_et_chiffres(pass,2))
	{
		alert("Le mot de passe ne doit contenir que des lettres et/ou des chiffres");
		if(is_obj)
			obj_pass.focus();
		return false;
	}
	if(pass.length < lgr_mini_pass && lgr_mini_pass > 0)
	{
		alert("Le mot de passe doit être constitué d'au moins "+lgr_mini_pass+" caractère(s)");
		if(is_obj)
			obj_pass.focus();
		return false;
	}

	return true;
}

function verif_login_et_pass(obj_login,obj_pass,lgr_mini_login,lgr_mini_pass)
{
	var login = "";

	if(!obj_login || !obj_pass)
		return true;

	login = obj_login.value;

	if(isEmpty(login))
	{
		alert('Veuillez saisir un identifiant.');
		obj_login.focus();
		return false;
	}
	if( ! contient_lettres_et_chiffres(login,2))
	{
		alert("L'identifiant ne doit contenir que des lettres et/ou des chiffres");
		obj_login.focus();
		return false;
	}
	if(login.length < lgr_mini_login && lgr_mini_login > 0)
	{
		alert("L'identifiant doit être constitué d'au moins "+lgr_mini_login+" caractère(s)");
		obj_login.focus();
		return false;
	}

	return verif_pass(obj_pass,lgr_mini_pass,true);
}

function is_valide_ref(obj_ref,is_obj)
{
	var ref = "";

	if(is_obj)
		ref = obj_ref.value;
	else
		ref = obj_ref;

	if(isEmpty(ref))
		return false;

	if( ! contient_lettres_et_chiffres(ref,2) && ! contient_caractere(ref,'-'))
		return false;

	return true;
}
/*
	1. Remplace les guillemets par des simples cotes
	2. Vérifie s'il y a un contenu (seulement si le champ texte doit être saisie)
	3. Vérifie si le contenu est une adresse mail valide (seulement si le champ texte accueil la saisie d'une adresse mail)
*/
function verif_champ_texte(obj_champ,nom_champ,is_oblig,is_mail)
{
	var vide = "";

	if(!obj_champ)
		return true;

	obj_champ.value = trim(obj_champ.value);
	vide = isEmpty(obj_champ.value);

	if(!vide) /* remplace les guillemets par 2 simples cotes */
		obj_champ.value = obj_champ.value.replace(/["]/g,"''");

	if(obj_champ.value.indexOf('&') >= 0)
	{
		if(nom_champ != "")
			alert("Le champ '"+nom_champ+"' ne peut contenir le caractère '&'");
		obj_champ.focus();
		return false;
	}

	if(is_oblig)
	{
		if(vide)
		{
			if(nom_champ != "")
				alert("Veuillez saisir le champ "+nom_champ);
			obj_champ.focus();
			return false;
		}
	}

	if(is_mail && !vide)
	{
		if(! verifmail(obj_champ.value))
		{
			obj_champ.focus();
			return false;
		}
	}

	return true;
}

/************** POPUP DIV telepoche *******************/

var testie4=document.all&&navigator.userAgent.indexOf("Opera")==-1;
var testns6=document.getElementById&&!document.all;
var testns4=document.layers;
var posx;
var posy;
var menuobj;

function init_popup(largeur_popup_pixel)
{
	if(largeur_popup_pixel == "")
		largeur_popup_pixel = 200; // defaut
	document.write ( "<style>.menuskin{ position:absolute; width:"+largeur_popup_pixel+"px; z-index:100; visibility:hidden; }</style>" );

	if (testns4 || testns6)
	{
		window.captureEvents(Event.MOUSEMOVE);
		window.onmousemove = coordonnee;
	}
}

function coordonnee(e)
{
	posx = e.pageX;
	posy = e.pageY;
}

function montrer_popup(contenu,x_offset,y_offset)
{
	if (!document.all && !document.getElementById && !document.layers) return;

	if(x_offset == "")
		x_offset = 0;
	if(y_offset == "")
		y_offset = 0;

	menuobj=testie4? document.all.popmenu : testns6? document.getElementById("popmenu") : testns4? document.popmenu : "";
	menuobj.thestyle=(testie4||testns6)? menuobj.style : menuobj;

	var contenuHTML = contenu;

	if (testie4||testns6)
		menuobj.innerHTML=contenuHTML;
	else
	{
		menuobj.document.write('<layer name=popmenu bgColor=#E6E6E6 width=200>'+contenuHTML+'</layer>');
		menuobj.document.close();
	}

	menuobj.contentwidth=(testie4||testns6)? menuobj.offsetWidth : menuobj.document.popmenu.document.width;
	menuobj.contentheight=(testie4||testns6)? menuobj.offsetHeight : menuobj.document.popmenu.document.height;
	eventX= ( testie4? event.clientX : (testns6||testns4) ? posx : 0 ) + x_offset;
	eventY= ( testie4? event.clientY : (testns6||testns4) ? posy : 0 ) + y_offset;

	//Find out how close the mouse is to the corner of the window
	var rightedge=testie4? document.body.clientWidth-eventX : window.innerWidth-eventX;
	var bottomedge=testie4? document.body.clientHeight-eventY : testns6 ? document.body.clientHeight+window.pageYOffset-eventY : window.innerHeight-eventY;

	//if the horizontal distance isn't enough to accomodate the width of the context menu
	//move the horizontal position of the menu to the left by it's width
	if (rightedge<menuobj.contentwidth)
	{
	eventX -= 20;
		menuobj.thestyle.left=testie4? document.body.scrollLeft+eventX-menuobj.contentwidth : testns6? window.pageXOffset+eventX-menuobj.contentwidth : eventX-menuobj.contentwidth;
		menuobj.innerHTML += "";
	}
	else
	{
		menuobj.thestyle.left=testie4? document.body.scrollLeft+eventX : testns6? window.pageXOffset+eventX : eventX;
		menuobj.innerHTML += "";
	}

	//same concept with the vertical position
	if (bottomedge<menuobj.contentheight)
	{
		eventY -= 20;
		menuobj.thestyle.top=testie4? document.body.scrollTop+eventY-menuobj.contentheight : testns6? eventY-menuobj.contentheight : eventY-menuobj.contentheight;
		menuobj.innerHTML += "";
	}
	else
	{
		menuobj.thestyle.top=testie4? document.body.scrollTop+eventY : testns6? eventY : eventY;
		menuobj.innerHTML += "";
	}

	menuobj.thestyle.visibility="visible";
	return false;
}

function cacher_popup()
{
	if ( menuobj && (testie4||testns6||testns4) )
		menuobj.thestyle.visibility=(testie4||testns6)? "hidden" : "hide";
}

if (testie4||testns6) document.onclick=cacher_popup;

if (document.getElementById||document.all)
{
	document.write("<div id='popmenu'  STYLE='z-index:1; left: 0px; visibility: hidden; position: absolute; top: 0px'>");
	document.write("</div>");
}
else
{
	document.write("<layer position='absolute' name='popmenu' left='0' top='0' visibility='hide'>");
   	document.write("</layer>");
}

function verifLength(Target,nb_car_max)
{
	if(Target)
	{
		StrLength = Target.value.length;
		if (StrLength > nb_car_max)
		{
			Target.value = Target.value.substring(0,nb_car_max)
			alert("Vous avez atteint la limite de "+nb_car_max+" caractères");
			CharsLeft = nb_car_max;
			return false;
		}
		else
		{
			CharsLeft = StrLength;
			return true;
		}
	}
	return false;
}

/**************** Date complète mercredi 12 janvier 2001 par ex. ******************/
function fait_Array(n) {
  this.length = n;
  return this;
}

aMois = new fait_Array(12);
aMois[1] = "janvier";
aMois[2] = "février";
aMois[3] = "mars";
aMois[4] = "avril";
aMois[5] = "mai";
aMois[6] = "juin";
aMois[7] = "juillet";
aMois[8] = "août";
aMois[9] = "septembre";
aMois[10] = "octobre";
aMois[11] = "novembre";
aMois[12] = "décembre";

aJours = new fait_Array(7);
aJours[1] = "Dimanche";
aJours[2] = "Lundi";
aJours[3] = "Mardi";
aJours[4] = "Mercredi";
aJours[5] = "Jeudi";
aJours[6] = "Vendredi";
aJours[7] = "Samedi";

function date_long(nDate) {
  var nEr = nDate.getDate();
  if (nEr == 1) nEr += "er";
  var nJour = aJours[nDate.getDay() + 1];
  var nMois = aMois[nDate.getMonth() + 1];
  var nAnnee = nDate.getYear();
  if (nAnnee < 100) nAnnee += 2000;
  if (nAnnee > 100&&nAnnee < 2000) nAnnee += 1900;
  return nJour + " " + nEr + " " + nMois + " " + nAnnee;
}

/* ouver une popup et supprime l'image 'im' dans le dossier système 'rep' */
function suppr_image_sur_disque(rep,im)
{
	window.open('suppr_image_sur_disque?chemin_image='+rep+'&fichier_image='+im,'Suppression','width=100,height=100,toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0');
}

function get_liste_objets_coches(obj_chk)
{
	var s = '';

	if(obj_chk.length)
	{
			for(var i=0;i<obj_chk.length;i++)
			{
				if(obj_chk[i].checked)
					s += obj_chk[i].value+',';
			}
	}
	else
	{
		if(obj_chk.checked)
			s += obj_chk.value;
	}

	return s;
}

function deplacer_objet(obj_chk,type_module,critereFiltre)
{
	var s = '';

	s = get_liste_objets_coches(obj_chk);

	if(s == ''){
		alert('Sélectionner au moins 1 objet à déplacer.');
	}else{
		if(critereFiltre != ""){
			open('deplacement_objet?id_a_deplacer='+s+'&type_objet='+type_module+'&critereFiltre='+critereFiltre,'Choisir_une_destination','height=555,width=460,scrollbars=yes,status=yes');
		}else{
			open('deplacement_objet?id_a_deplacer='+s+'&type_objet='+type_module,'Choisir_une_destination','height=555,width=460,scrollbars=yes,status=yes');
		}
	}
}

function copier_objet(obj_chk,type_module,critereFiltre)
{
	var s = '';

	s = get_liste_objets_coches(obj_chk);

	if(s == ''){
		alert('Sélectionner au moins 1 objet à copier.');
	}else{
		if(critereFiltre != ""){
			open('deplacement_objet?conserv_source=1&id_a_deplacer='+s+'&type_objet='+type_module+'&critereFiltre='+critereFiltre,'Choisir_une_destination','height=555,width=460,scrollbars=yes,status=yes');
		}else{
			open('deplacement_objet?conserv_source=1&id_a_deplacer='+s+'&type_objet='+type_module,'Choisir_une_destination','height=555,width=460,scrollbars=yes,status=yes');
		}
	}
}

function getValCookie(offset)
{
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function getCookie (name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) return getValCookie(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}

function setCookie (name,value,expires,path,domain,secure) {
	document.cookie = name + "=" + escape (value); // escape: important pr les espaces

	if(expires != "null")
		document.cookie += ((expires) ? "; expires=" + expires.toGMTString() : "");
	document.cookie +=	((path) ? "; path=" + path : "") +
						((domain) ? "; domain=" + domain : "") +
						((secure) ? "; secure" : "");
}

function toucheEntreeAppuyee(evenement)
{
	var touche_appuyee;

	if(navigator.appName == "Netscape")
		touche_appuyee = evenement.which;
	else
		touche_appuyee = window.event.keyCode;

	if(touche_appuyee == 13)
		return true;
	return false;
}

function a_voir_calcul_espace_utilisable_fenetre()
{
	var largeur = 0, hauteur = 0;
	if( typeof( window.innerWidth ) == 'number' )
	{
		largeur = window.innerWidth;
	  	hauteur = window.innerHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
	{
		largeur = document.documentElement.clientWidth;
	  	hauteur = document.documentElement.clientHeight;
	}
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
	{
		largeur = document.body.clientWidth;
	  	hauteur = document.body.clientHeight;
	}
	else
	{
		largeur = -1;
	  	hauteur = -1;
	}
}

function largeur_fenetre()
{

 if (window.innerWidth) return window.innerWidth;
 else if (document.body && document.body.offsetWidth) return document.body.offsetWidth;
 else return 0;
}

function hauteur_fenetre()
{
 if (window.innerHeight) return window.innerWidth;
 else if (document.body && document.body.offsetHeight) return document.body.offsetHeight;
 else return 0;
}

function Browser()
{
	//alert(window.onresize);

    d=document;
    this.agt=navigator.userAgent.toLowerCase();
    this.major = parseInt(navigator.appVersion);
    this.dom=(d.getElementById)?1:0;
    this.ns=(d.layers);
    this.ns4up=(this.ns && this.major >=4);
    this.ns6=(this.dom&&navigator.appName=="Netscape");
    this.op=(window.opera? 1:0);
    this.ie=(d.all);
    this.ie4=(d.all&&!this.dom)?1:0;
    this.ie4up=(this.ie && this.major >= 4);
    this.ie5=(d.all&&this.dom);
    this.win=((this.agt.indexOf("win")!=-1) || (this.agt.indexOf("16bit")!=-1));
    this.mac=(this.agt.indexOf("mac")!=-1);
	this.liste_plugins = "";
	this.largeur_utile = largeur_fenetre(); //screen.availWidth;
	this.hauteur_utile = hauteur_fenetre(); //screen.availHeight;
	this.resolution_x = screen.width;
	this.resolution_y = screen.height;
	this.accepteCookies = (navigator.cookieEnabled) ? true : false;
	if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
	{
 		document.cookie = "petitTest";
  		this.accepteCookies = (document.cookie.indexOf("petitTest") != -1) ? true : false;
  	}

	var pluginlist = "";

	if (this.ie && this.win){
		pluginlist = "";
		pluginlist += detectIE("Adobe.SVGCtl","SVG Viewer");
		pluginlist += detectIE("SWCtl.SWCtl.1","Shockwave Director");
		pluginlist += detectIE("ShockwaveFlash.ShockwaveFlash.1","Shockwave Flash");
		pluginlist += detectIE("rmocx.RealPlayer G2 Control.1","RealPlayer");
		pluginlist += detectIE("QuickTimeCheckObject.QuickTimeCheck.1","QuickTime");
		pluginlist += detectIE("MediaPlayer.MediaPlayer.1","Windows Media Player");
		pluginlist += detectIE("PDF.PdfCtrl.5","Acrobat Reader");
	}
	if (this.ns || !this.win){
		nse = "";
		for (var i=0;i<navigator.mimeTypes.length;i++){
			nse += navigator.mimeTypes[ i ].type.toLowerCase();
		}
		pluginlist = "";
		pluginlist += detectNS("image/svg-xml","SVG Viewer");
		pluginlist += detectNS("application/x-director","Shockwave Director");
		pluginlist += detectNS("application/x-shockwave-flash","Shockwave Flash");
		pluginlist += detectNS("audio/x-pn-realaudio-plugin","RealPlayer");
		pluginlist += detectNS("video/quicktime","QuickTime");
		pluginlist += detectNS("application/x-mplayer2","Windows Media Player");
		pluginlist += detectNS("application/pdf","Acrobat Reader");
	}

	this.liste_plugins = pluginlist;

	function detectIE(ClassID,name){
		result = false;
		//document.write("<SCRIPT LANGUAGE=VBScript> on error resume next  result = IsObject(CreateObject('Adobe.SVGCtl'))</SCRIPT>");
		window.execScript("On Error Resume Next : Set test = CreateObject('"+ClassID+"') : If Err.Number = 0 Then : result = true :Else : result = false : End if", "VBScript");
		if (result){
			return name+',';
		}else{
			return '';
		}
	}

	function detectNS(ClassID,name) { n = ""; if (nse.indexOf(ClassID) != -1) if (navigator.mimeTypes[ClassID].enabledPlugin != null) n = name+","; return n; }

	pluginlist += navigator.javaEnabled() ? "Java," : "";
	if (pluginlist.length > 0) pluginlist = pluginlist.substring(0,pluginlist.length-1);

	//document.write(pluginlist);
	//SAMPLE USAGE- detect "Flash"
	//if (pluginlist.indexOf("Flash")!=-1)
	//document.write("You have flash installed")
};

var navigateur = new Browser();

function resize_browser()
{
	navigateur.largeur_utile = largeur_fenetre();
	navigateur.hauteur_utile = hauteur_fenetre();
	navigateur.resolution_x = screen.width;
	navigateur.resolution_y = screen.height;
}

/* Le journal du net: permet de récupérer un chemin vers un élément de la page sans se soucier du navigateur. */
function recupereChemin(id)
{
	/* Variables à mettre en global pour éviter de tester à chaque appel de cette fonction */
	var nn4 = (document.layers) ? true : false
	var ie5 = (document.all) ? true : false
	var dom = (document.getElementById && !document.all) ? true : false

  	if (nn4)
  	{
	  	chemin = document.layers[id];
  	}
  	else if (ie5)
  	{
	  	chemin = document.all[id];
  	}
  	else
  	{
	  	chemin = document.getElementById(id);
  	}
  	return chemin;
}

function get_descript_status_http(status)
{
	if(status == 100) return "Continue";
	if(status == 101) return "Switching protocols";
	if(status == 200) return "OK";
	if(status == 201) return "Created";
	if(status == 202) return "Accepted";
	if(status == 203) return "Non-Authoritative Information";
	if(status == 204) return "No Content";
	if(status == 205) return "Reset Content";
	if(status == 206) return "Partial Content";
	if(status == 300) return "Multiple Choices";
	if(status == 301) return "Moved Permanently";
	if(status == 302) return "Found";
	if(status == 303) return "See Other";
	if(status == 304) return "Not Modified";
	if(status == 305) return "Use Proxy";
	if(status == 307) return "Temporary Redirect";
	if(status == 400) return "Bad Request";
	if(status == 401) return "Unauthorized";
	if(status == 402) return "Payment Required";
	if(status == 403) return "Forbidden";
	if(status == 404) return "Not Found";
	if(status == 405) return "Method Not Allowed";
	if(status == 406) return "Not Acceptable";
	if(status == 407) return "Proxy Authentication Required";
	if(status == 408) return "Request Timeout";
	if(status == 409) return "Conflict";
	if(status == 410) return "Gone";
	if(status == 411) return "Length Required";
	if(status == 412) return "Precondition Failed";
	if(status == 413) return "Request Entity Too Large";
	if(status == 414) return "Request-URI Too Long";
	if(status == 415) return "Unsupported Media Type";
	if(status == 416) return "Requested Range Not Suitable";
	if(status == 417) return "Expectation Failed";
	if(status == 500) return "Internal Server Error";
	if(status == 501) return "Not Implemented";
	if(status == 502) return "Bad Gateway";
	if(status == 503) return "Service Unavailable";
	if(status == 504) return "Gateway Timeout";
	if(status == 505) return "HTTP Version Not Supported";

	return "";
}

/*
readyState :
	0 (uninitialized)	non initialisé
	1 (loading)	début du transfert des données
	2 (loaded)	données transférées
	3 (interactive)	les données reçues sont accessibles en partie
	4 (complete)	les données sont complètement accessibles
*/

function test_ajax(param)
{
	var xhr_object = null;
	var methode="POST";

	if(window.XMLHttpRequest) // Firefox
   		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // Internet Explorer
   		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
	{ // XMLHttpRequest non supporté par le navigateur
   		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
   		return;
	}

	if(methode == "GET")
		xhr_object.open("GET", "/atooentreprise/test_ajax.php?param="+param, true);
	else if (methode == "POST")
		xhr_object.open("POST", "/atooentreprise/test_ajax.php", true);

	xhr_object.onreadystatechange = function()
	{
		//alert(xhr_object.readyState);
		if(xhr_object.readyState == 4)
		{
			//alert(xhr_object.status); // status HTTP
			alert(xhr_object.responseText);
		}
	}

	if(methode == "GET")
		xhr_object.send(null);
	else if (methode == "POST")
	{
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr_object.send("param="+param);
	}
}

function init_connexion_ajax()
{
	var xhr_object = null;
	
	if(window.XMLHttpRequest) // Firefox
   		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // Internet Explorer
   		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
	{ // XMLHttpRequest non supporté par le navigateur
   		alert("Fonctionnalité non supportée. Active-X Error.");
   		return null;
	}
	return xhr_object;
}

// execute une requete et retourne le résultat. Uniquement en méthode POST.
// Attention ici c'est en mode synchrone (attends la fin du script pour continuer)
function exec_requete(req,param)
{
	/*var xhr_object = null;

	if(window.XMLHttpRequest) // Firefox
   		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // Internet Explorer
   		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
	{ // XMLHttpRequest non supporté par le navigateur
   		alert("Fonctionnalité non supportée. Active-X Error.");
   		return;
	}*/
	
	var xhr_object = init_connexion_ajax();

	// xhr_object.setTimeouts(timeout);

	xhr_object.open("POST", "/atooentreprise/ajax.php", false); // false pour synchrone

	xhr_object.onreadystatechange = function()
	{
		if(xhr_object.readyState == 4)
		{
			//alert(xhr_object.responseText);
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr_object.send("req="+req+"&param="+param);

	return xhr_object.responseText;
}

function do_sql_one_field_result(sql)
{
	var xhr_object = init_connexion_ajax();
	
	xhr_object.open("POST", "/atooentreprise/ajax.php", false); // false pour synchrone
	
	xhr_object.onreadystatechange = function()
	{
		if(xhr_object.readyState == 4)
		{
			//alert(xhr_object.responseText);
		}
	}
	
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");	
	xhr_object.send("req=DO_SQL_ONE_FIELD_RESULT&sql="+sql);

	return xhr_object.responseText;
}

function do_sql_mult_field_result(sql,separateur)
{
	var xhr_object = init_connexion_ajax();
	
	xhr_object.open("POST", "/atooentreprise/ajax.php", false); // false pour synchrone
	
	xhr_object.onreadystatechange = function()
	{
		if(xhr_object.readyState == 4)
		{
			//alert(xhr_object.responseText);
		}
	}
	
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");	
	xhr_object.send("req=DO_SQL_MULT_FIELD_RESULT&sql="+sql+"&separateur="+separateur);

	return xhr_object.responseText;
}

function get_titre_et_contenu_info(site,type_module,id,tronq,langue)
{
	var xhr_object = init_connexion_ajax();
	
	xhr_object.open("POST", "/atooentreprise/ajax.php", false); // false pour synchrone
	
	xhr_object.onreadystatechange = function()
	{
		if(xhr_object.readyState == 4)
		{
			//alert(xhr_object.responseText);
		}
	}
	
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");	
	xhr_object.send("req=GET_TITRE_ET_CONTENU_INFO&site="+site+"&type_module="+type_module+"&id="+id+"&tronq="+tronq+"&langue="+langue);

	return xhr_object.responseText;
}