/****************************************************/
/* Bibliothèque de fonctions JavaScript utilitaires */
/****************************************************/
function BrowserInfo()
{
  this.agent = navigator.userAgent.toLowerCase();
  this.name = navigator.appName;
  this.codename = navigator.appCodeName;
  this.version = navigator.appVersion.substring(0,4);
  this.platform = navigator.platform.toLowerCase();
  this.javaEnabled = navigator.javaEnabled();
  this.screenWidth = screen.width;
  this.screenHeight = screen.height;
  this.name = (this.agent.indexOf('msie') != -1) ? "msie" :
  			  ((this.agent.indexOf('firefox') != -1) ? "firefox" :
			  ((this.agent.indexOf('chrome') != -1) ? "chrome" :
			  ((this.agent.indexOf('opera') != -1) ? "opera" :
			  ((this.agent.indexOf('safari') != -1) ? "safari" : "autre"))));
}
var navigateur = new BrowserInfo();
var is_pc = navigateur.platform.match("win");
var is_mac = navigateur.platform.match("mac");
//////////////////////////////////
// Gestion de classe
//////////////////////////////////
function aClasse (element, className)
{
	if (element == "") return;
	var elementClassName = element.className;
	return (elementClassName.length > 0 && (elementClassName == className ||
	new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
}

function ajouteClasse(element, className)
{
	if (element == "") return;
	if (!aClasse(element, className))
	element.className += (element.className ? ' ' : '') + className;
}

function enleveClasse (element, className)
{
	if (element == "") return;
	if (aClasse(element, className))
	element.className = element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
}

//////////////////////////////////
// Fonctions TRIM
//////////////////////////////////
var regExpBeginning = /^\s+/;
var regExpEnd       = /\s+$/;

// Supprime les espaces inutiles en début et fin de la chaîne passée en paramètre.
function trim(aString)
{
    return aString.replace(regExpBeginning, "").replace(regExpEnd, "");
}

// Supprime les espaces inutiles en début de la chaîne passée en paramètre.
function ltrim(aString)
{
    return aString.replace(regExpBeginning, "");
}
 
// Supprime les espaces inutiles en fin de la chaîne passée en paramètre.
function rtrim(aString)
{
    return aString.replace(regExpEnd, "");
}
//////////////////////////////////
// Fenêtres popup
//////////////////////////////////
function alerte(message)
{
	if (message!="") displayMessage(ressources+"php/ficheMessage.php?mess="+escape(message)+"&racine="+racine, 400, 150, "closeMessage()")
}
function popup()
{
	var args = popup.arguments;
	var titre = args[0];
	var fichier = args[1];
	var argu = "";
	var onclick = "closeMessage()";
	var largeur = 700;
	var hauteur = 400;
	for (var i=2; i<args.length; i=i+2)
	{
		if (isNaN(args[i]))
		{
			if (args[i]=="onclick")
			{
				onclick = args[i+1];
			}
			else
			{
				argu+= "&"+args[i]+"="+(isNaN(args[i+1]) ?  escape(args[i+1]) : args[i+1]);
			}
		}
		else
		{	// Si les arguments sont numériques, ce sont les dimensions de la fenêtre
			largeur = args[i];
			hauteur = args[i+1];
		}
	}
	global_div=document.getElementById('global');
	hauteur = global_div.offsetHeight*0.9;
	displayMessage(ressources+"php/ficheMessage.php?titre="+escape(titre)+"&fic="+fichier+argu+"&racine="+racine, largeur, hauteur, onclick)
}

//////////////////////////////////
// Changement de sliding panel avec traitement de la validation du formulaire
//////////////////////////////////
function changePanneau()
{
	var args = changePanneau.arguments;
	var panneau = args[0];
	var nbargs = args.length;
	var form;
// Arguments :
// 0 : objet groupe de panneaux
// 1 : identifiant du panneau sélectionné
// 2 : n° du panneau à afficher ou suivant
// suivants : formulaire(s) à contrôler avant de quitter
	var mess = "",err="";
	if (nbargs>3)
	{
		for (i=3;i<nbargs;i=i+2)
		{
			if (form = document.forms[args[i]])
			{
				if ((err=controleFormulaire(form))!="")
				{
					mess+= "<h2>"+args[i+1]+"</h2>"+err;
				}
			}
		}
		alerte (mess);
	}
	if (mess=="")
	{
		if (nbargs>1)
		{
			var obj=findObj(args[1]);
			if (obj)
			{
				var tr=obj.parentNode;
				for (td in tr.childNodes)
				{
					if (tr.childNodes[td].tagName=="TD") enleveClasse(tr.childNodes[td],"active");
				}
				ajouteClasse(obj,"active");
			}
		}
		if (nbargs>2 && args[2].toString()!="")
		{
			panneau.showPanel(args[2]);
		}
		else
		{
			panneau.showNextPanel();
		}
		obj = findObj("conteneur_slide");
		obj.scrollTop=0;
	}
}

//////////////////////////////////
// Retourne un code couleur formaté en hexadécimal
//////////////////////////////////
function CodeCouleur(couleur,fond)
{
	var code;
	if (couleur)
	{
		couleur = couleur.replace("#","");
		couleur = Math.min(parseInt(couleur,16),parseInt("FFFFFF",16));
		if (!fond) couleur = parseInt("FFFFFF",16) - couleur;	// Couleur complémentaire
		code="000000"+couleur.toString(16);
		code=code.substr(code.length-6,6);
	}
	else
	{
		code = fond ? "000000" : "FFFFFF";
	}
	return code.toUpperCase();
}
//////////////////////////////////
// Suppression daractères accentués
//////////////////////////////////
function SuppAccent (chaine)
{
	chaine = chaine.replace(/[ÉÈÊËéèêë]/g,"e");
	chaine = chaine.replace(/[ÄÀÂäàâ]/g,"a");
	chaine = chaine.replace(/[ÎÏîï]/g,"i");
	chaine = chaine.replace(/[ÔÖôö]/g,"o");
	chaine = chaine.replace(/[ÜÙÛüùû]/g,"u");
	return chaine;
}
//////////////////////////////////
// Recherche d'objet
//////////////////////////////////
function findObj(theObj, theDoc)
{
  var p, i, foundObj;
  
  if(!theDoc) theDoc = document;
  if( (p = theObj.indexOf("?")) > 0 && parent.frames.length)
  {
    theDoc = parent.frames[theObj.substring(p+1)].document;
    theObj = theObj.substring(0,p);
  }
  if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];
  for (i=0; !foundObj && i < theDoc.forms.length; i++) 
    foundObj = theDoc.forms[i][theObj];
  for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++) 
    foundObj = findObj(theObj,theDoc.layers[i].document);
  if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);
  
  return foundObj;
}

//////////////////////////////////
// Bascule d'image
//////////////////////////////////
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

//////////////////////////////////
// Menu de reroutage
//////////////////////////////////
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

//////////////////////////////////
// Recherche d'objet par nom de classe
//////////////////////////////////
function getElementsByClassName(classe, tag, elm)	// tag : type d'élément - elm : parent
{
//	var testClass = new RegExp("(^|s)" + classe + "(s|$)");
	var testClass = new RegExp(classe);
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		nomClasse = current.className.split(" ");
//		if(testClass.test(nomClasse[0])){
		if(testClass.test(current.className)){
//	alert(current.className+"\n"+current.id);
			returnElements.push(current);
		}
	}
	return returnElements;
}
//////////////////////////////////
// Affiche / Masque objet
//////////////////////////////////
function showHideLayers()
{ 
  var i, visStr, obj, args = showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3)
  {
    if ((obj = findObj(args[i])) != null)
    {
      visStr = args[i+2];
      if (obj.style)
      {
        obj = obj.style;
//        if(visStr == 'show') visStr = 'visible';
//        else if(visStr == 'hide') visStr = 'hidden';
//      }
//      obj.visibility = visStr;
        if(visStr == 'show') visStr = '';
        else if(visStr == 'hide') visStr = 'none';
      }
      obj.display = visStr;
    }
  }
}

//////////////////////////////////
// Décalage de date
//////////////////////////////////
function DecaleDate(champ_date,champ_dest,delai)
{	// Calcule la date d'expiration de l'actualité
	obj=findObj(champ_date);
	date = escape(obj.value);
	MajAjax(ressources+"php/FonctionsAjax.php","action=DecaleDate&champ="+champ_dest+"&decale="+delai+"&date="+date);
}

//////////////////////////////////
// Gestion calendrier
//////////////////////////////////
function pickDate(inputObject)
{
	calendrier.setCalendarPositionByHTMLElement(inputObject,0,inputObject.offsetHeight+2);	// Position the calendar right below the form input
	calendrier.setInitialDateFromInput(inputObject,'dd/mm/yyyy');	// Specify that the calendar should set it's initial date from the value of the input field.
	calendrier.addHtmlElementReference('myDate',inputObject);	// Adding a reference to this element so that I can pick it up in the getDateFromCalendar below(myInput is a unique key)
	if(calendrier.isVisible())
	{
		calendrier.hide();
	}
	else
	{
		calendrier.resetViewDisplayedMonth();	// This line resets the view back to the inital display, i.e. it displays the inital month and not the month it displayed the last time it was open.
		calendrier.display();
	}		
}	

function getDateFromCalendar(inputArray)
{
	var references = calendrier.getHtmlElementReferences(); // Get back reference to form field.
	references.myDate.value = inputArray.day + '/' + inputArray.month + '/' + inputArray.year;
	calendrier.hide();
}
//////////////////////////////////
// Gestion fenêtre modale
//////////////////////////////////
function displayMessage(url,largeur,hauteur,onClick)
{
	if (obj=findObj('global')) ajouteClasse(obj,'noprint');
	messageObj.setSource(url);
	messageObj.setOnClick(onClick);	// Clic sur le fond transparent
	messageObj.setCssClassMessageBox(false);
	messageObj.setSize(largeur,hauteur);
	messageObj.setShadowDivVisible(false);	// Enable shadow for these boxes
	messageObj.display();
}
 
function closeMessage()
{
	if (obj=findObj('global')) enleveClasse(obj,'noprint');
	messageObj.close();	
}

//////////////////////////////////
// Transition Spry par slide entre liste et rubriques
//////////////////////////////////
//////////////////////////////////
// Fonctions SPRY : slide panel
//////////////////////////////////
var observer = {};
observer.nextEffect = false;
observer.onPostEffect = function(e){
	if (this.nextEffect)
	{
		var eff = this.nextEffect;
		setTimeout(function(){eff.start();}, 10);
	}
	this.nextEffect = false;
}

function sprySlide (currentPanel)
{
    // The list of all the panels that need sliding
	var opened = -1;

	// Let's check if we have an effect for each of these sliding panels
	if (typeof effects == 'undefined')
		effects = {};

	for (var i=0; i < sprySlidePanels.length; i++)
	{
		if (typeof effects[sprySlidePanels[i]] == 'undefined'){
			effects[sprySlidePanels[i]] = new Spry.Effect.Slide(sprySlidePanels[i], {from: '0%', to: '100%', toggle: true});
			effects[sprySlidePanels[i]].addObserver(observer);
		}
		 
		if (effects[sprySlidePanels[i]].direction == Spry.forwards && currentPanel != sprySlidePanels[i])
			opened = i;

		//prevent too fast clicks on the buttons
		if (effects[sprySlidePanels[i]].direction == Spry.backwards && effects[sprySlidePanels[i]].isRunning)
		{
			observer.nextEffect = effects[currentPanel];
			return;
		}
	}

	if (opened != -1)
	{
		observer.nextEffect = effects[currentPanel];
		effects[sprySlidePanels[opened]].start();
	} 
	else if (effects[currentPanel].direction != Spry.forwards)
	{
		effects[currentPanel].start();
	}
}


//////////////////////////////////
// Changement de classe lors du changement de choix sur un radio bouton
//////////////////////////////////
function changeChoix(choix)
{
	var groupe=choix.form.elements[choix.name];
	for (i=0;i<groupe.length;i++)
	{
		var radio=groupe.item(i);
		if (radio==choix)
		{
			ajouteClasse(radio.parentNode,"active")
		}
		else
		{
			enleveClasse(radio.parentNode,"active")
		}
	}
}

//////////////////////////////////
// Gestion de liste : ajout d'un élément dans un formulaire de saisie
//////////////////////////////////
function ChargeListe(liste,enreg,modifie)
{
	form=findObj("form_liste_"+liste);
	var lst=form.elements["ch_l_"+liste];
	if (enreg>0)
	{
		// affichage des données de la liste
		argu="&form="+form.name+"&enreg="+lst.options[lst.selectedIndex].value+"&liste="+liste;
		showHideLayers("bo_btEfface_"+liste,"","show","bo_btNouveau_"+liste,"","show","bo_btOrdH_"+liste,"","show","bo_btOrdB_"+liste,"","show");
		// modifie est VRAI pour la page de gestion des listes, FAUX pour l'appel de la liste dans un formulaire
		MajAjax(ressources+"php/FonctionsAjax.php","action=ChargeListe"+argu+"&modifie="+(modifie ? 1 : 0));
	}
	else
	{
		// effacement des champs
		lst.selectedIndex = lst.size>0 ? -1 : 0;
		showHideLayers("bo_btEfface_"+liste,"","hide","bo_btNouveau_"+liste,"","hide","bo_btOrdH_"+liste,"","hide","bo_btOrdB_"+liste,"","hide");
		var champ=form.elements["ch_"+liste];	champ.value="";	champ.focus();
	}
}
function ValideListe(liste)
{
	form=findObj("form_liste_"+liste);
	var lst=form.elements["ch_l_"+liste];
	argu="&form="+form.name+"&enreg="+(lst.selectedIndex>=0 ? lst.options[lst.selectedIndex].value : 0)+"&liste="+liste;
	var champ=form.elements["ch_"+liste];
	argu+="&nom="+escape(champ.value);
	if (champ.value.length>0)
	{
		MajAjax(ressources+"php/FonctionsAjax.php","action=ValideListe"+argu);
	}
	else
	{
		alert("Intitulé manquant !");
	}
}
function EffaceListe(liste)
{
	if (confirm("Voulez-vous effacer cet élément ?"))
	{
		form=findObj("form_liste_"+liste);
		var lst=form.elements["ch_l_"+liste];
		MajAjax(ressources+"php/FonctionsAjax.php","action=EffaceListe&form="+form.name+"&enreg="+lst.options[lst.selectedIndex].value+"&liste="+liste);
	}
}
function OrdonneListe(liste,sens)
{
	form=findObj("form_liste_"+liste);
	var lst = form.elements["ch_l_"+liste];
	var index;
	if ((index = lst.selectedIndex) >=0)
	{
		var nb = lst.length;
		autre = sens>0 ? Math.min(index+1,nb-1) : Math.max(index-1,0);
		if (autre!=index)
		{
			tmpval=lst.options[index].value;
			tmptxt=lst.options[index].text;
			lst.options[index].value=lst.options[autre].value;
			lst.options[index].text=lst.options[autre].text;
			lst.options[autre].value=tmpval;
			lst.options[autre].text=tmptxt;
			lst.selectedIndex=autre;
			
			// enregistrement de l'ordre
			var uid = "";
			var rang = "";
			for (i=0;i<lst.length;i++)
			{
				uid += lst[i].value + ",";
				rang += i + ",";
			}
			MajAjax(ressources+"php/FonctionsAjax.php","action=OrdonneListe&form="+form.name+"&enreg="+uid+"&rang="+rang+"&liste="+liste);
		}
	}
}
function basculeListe(formulaire,liste,indice)
{
	// on cache le conteneur du bouton
	form=findObj(formulaire);
	showHideLayers("bo_bt_"+liste+indice,"","hide","bo_bt_popup"+liste+indice,"","hide","ch_l_"+liste+indice,"","hide","ch_"+liste+indice,"","show");
	var obj = form.elements["ch_"+liste+indice];	obj.focus();
}

function sauveListe(formulaire,liste,indice)
{
	form=findObj(formulaire);
	argu="&form="+form.name+"&enreg=0&liste="+liste+"&indice="+indice;
	showHideLayers("bo_bt_"+liste+indice,"","show","bo_bt_popup"+liste+indice,"","show","ch_l_"+liste+indice,"","show","ch_"+liste+indice,"","hide");
	var obj = form.elements["ch_"+liste+indice];	argu+="&nom="+escape(obj.value);
	
	if (obj.value.length>0)
	{
		MajAjax(ressources+"php/FonctionsAjax.php","action=ValideListe"+argu);
	}
}

function popupListe(liste,titre,form,enreg)
{
	displayMessage("utile/ficheListe.php?l="+liste+"&t="+titre+"&f="+form+"&e="+enreg, 300, 260,"")
}

//////////////////////////////////
// Changement de l'ordre des champs d'une table
//////////////////////////////////
function OrdonneTable(liste,sens,table,pref)
{
	var obj = findObj(liste);
	var index;
	if ((index = obj.selectedIndex) >=0)
	{
		var nb = obj.length;
		autre = sens>0 ? Math.min(index+1,nb-1) : Math.max(index-1,0);
		if (autre!=index)
		{
			// Inversion des lignes du select
			tmpval=obj.options[index].value;
			tmptxt=obj.options[index].text;
			obj.options[index].value=obj.options[autre].value;
			obj.options[index].text=obj.options[autre].text;
			obj.options[autre].value=tmpval;
			obj.options[autre].text=tmptxt;
			obj.selectedIndex=autre;
			// enregistrement de l'ordre
			var uid = "";
			var rang = "";
			for (i=0;i<obj.length;i++)
			{
				uid += obj[i].value + ",";
				rang += i + ",";
			}
			MajAjax(ressources+"php/FonctionsAjax.php","action=OrdonneTable&enreg="+uid+"&rang="+rang+"&table="+table+"&pref="+pref);
		}
	}
}

//////////////////////////////////
// Vérification doublon pièce jointe
//////////////////////////////////
function VerifieDoublon(champ,repertoire,enreg)
{
	var form = champ.form;
	if (champ.value!="")
	{
		// recherche du répertoire cible
		var champ_radio = form.elements[repertoire];
		var cible = "";
		for (var j=0; j<champ_radio.length;j++)
		{
			if (champ_radio[j].checked) cible = champ_radio[j].value;
		}
		if (cible!="")
		{
			fichier=escape(basename(champ.value));
			var action = "MajAjax(\""+ressources+"php/FonctionsAjax.php\",\"action=VerifieDoublon&enreg="+enreg+"&champ="+champ.id+"&fichier="+fichier+"&cible="+cible+"\")";
			displayMessage("utile/ficheMessage.php?m="+escape("Vérification du fichier en cours...")+"&act="+escape(action), 400, 150, "")
		}
	}
}
function ResetFileUpload (node)
{
	var newNode = document.createElement('input');
	for (attrib in node.attributes)
	{
		if (!isNaN(attrib))
		{
			var x=node.attributes[attrib];
			newNode.setAttribute(node.attributes[attrib].name,node.attributes[attrib].value);
		}
	}
	node.parentNode.replaceChild(newNode, node); 
}

function basename(path) {
    return path.replace(/\\/g,'/').replace( /.*\//, '' );
}
 
function dirname(path) {
    return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');;
}
//////////////////////////////////
// Test enregistrement effaçable
//////////////////////////////////
function TesteEfface(enreg,table)
{
	if (enreg>0)
	{
		var message = "Vous allez effacer une fiche,\nCette opération est irréversible.\n\nConfirmez-vous l'effacement ?";
		if (confirm(message)) MajAjax(ressources+"php/FonctionsAjax.php","action=TesteEfface&enreg="+enreg+"&table="+table);
	}
}
//////////////////////////////////
// Test enregistrement existe déjà
//////////////////////////////////

function TesteExiste(action,enreg,table,mess)
{
//	if (enreg<=0)
//	{
//		if (confirm(message)) MajAjax("commun/ChargeAjax.php","action=TesteExiste&enreg="+enreg+"&table="+table);
//	}
//	else
//	{
//		Controle(action)
//	}
}
function RetourCheminFer()
{
	MajAjax(ressources+"php/FonctionsAjax.php","action=RetourCheminFer&session="+session_id);
}
//////////////////////////////////
// Fonctions DHTML : contenu glissant
//////////////////////////////////
/************************************************************************************************************
(C) www.dhtmlgoodies.com, November 2005

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/	
var slideTimeBetweenSteps = 30;	// General speed variable (Lower = slower)	
var scrollingContainer = false;
var scrollingContent = false;
var containerHeight;
var contentHeight;	

var contentObjects = new Array();
var originalslideSpeed = false;
function slideContent(containerId)
{
	var topPos = contentObjects[containerId]['objRef'].style.top.replace(/[^\-0-9]/g,'');
	topPos = topPos - contentObjects[containerId]['slideSpeed'];
	if(topPos/1 + contentObjects[containerId]['contentHeight']/1<0)topPos = contentObjects[containerId]['containerHeight'];
	contentObjects[containerId]['objRef'].style.top = topPos + 'px';
	setTimeout('slideContent("' + containerId + '")',slideTimeBetweenSteps);
}

function stopSliding()
{
	var containerId = this.id;
	contentObjects[containerId]['slideSpeed'] = 0;	
}

function restartSliding()
{
	var containerId = this.id;
	contentObjects[containerId]['slideSpeed'] = contentObjects[containerId]['originalSpeed'];
}
function initSlidingContent(containerId,slideSpeed)
{
	scrollingContainer = document.getElementById(containerId);
	scrollingContent = scrollingContainer.getElementsByTagName('DIV')[0];
	
	scrollingContainer.style.position = 'relative';
	scrollingContainer.style.overflow = 'hidden';
	scrollingContent.style.position = 'relative';
	
	scrollingContainer.onmouseover = stopSliding;
	scrollingContainer.onmouseout = restartSliding;
	
	originalslideSpeed = slideSpeed;
	
	scrollingContent.style.top = '0px';
	
	contentObjects[containerId] = new Array();
	contentObjects[containerId]['objRef'] = scrollingContent;
	contentObjects[containerId]['contentHeight'] = scrollingContent.offsetHeight;
	contentObjects[containerId]['containerHeight'] = scrollingContainer.clientHeight;
	contentObjects[containerId]['slideSpeed'] = slideSpeed;
	contentObjects[containerId]['originalSpeed'] = slideSpeed;
	
	slideContent(containerId);
}

//////////////////////////////////
// AJAX - création de la communication
//////////////////////////////////
function createXHR() 
{
    var request = false;
	try
	{
		request = new ActiveXObject('Msxml2.XMLHTTP');
	}
	catch (err2)
	{
		try
		{
			request = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (err3)
		{
			try
			{
				request = new XMLHttpRequest();
			}
			catch (err1) 
			{
				request = false;
			}
		}
	}
    return request;
}


//////////////////////////////////
// AJAX - échange avec le serveur
//////////////////////////////////
function MajAjax(url,contenu)
{ 
	var xhr = createXHR();
	
	xhr.onreadystatechange  = function()
	{ 
		if(xhr.readyState  == 4)
		{
			if(xhr.status  == 200)
			{
				showHideLayers('wait','','hide');
				document.body.style.cursor='default';
				try
				{
					eval(xhr.responseText); 
				}
				catch(err)
				{
					alert ("Erreur retour XMLHttpRequest :\n\n"+err.name+"\n"+err.message+"\n"+contenu);
				}
			}
			else 
				alert("Erreur transfert " + xhr.status+"\n"+xhr.statusText);
		}
	};
	
	document.body.style.cursor='wait';
	showHideLayers('wait','','show');
	xhr.open("POST", url, true);		
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send(contenu); 
} 
