/****************************************************/
/* 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"))));
  if (this.name=='msie') 
			this.version = parseFloat(this.agent.substr(this.agent.indexOf("msie")+4,4));
}
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,action)
{
	if (message!="") displayMessage(ressources+"php/ficheMessage.php?mess="+escape(message)+"&racine="+racine+(action ? "&action_ok="+action : ""), 400, 400, "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.body;
	hauteur = parseInt(global_div.offsetHeight*0.8);
	displayMessage(ressources+"php/ficheMessage.php?titre="+escape(titre)+"&fic="+fichier+argu+"&session="+session_id+"&racine="+racine, largeur, hauteur, onclick)
}

//////////////////////////////////
// Gestion de l'ascenseur|
//////////////////////////////////
var Timer;
var wheel_parent = new Array();	// Liste des zones scrollables
var wheel_enfant = new Array();	// Liste des zones scrollables
function handle(cible,delta)
{
	delta*=2;
	if (wheel_parent[cible])
	{
		moveLayerV(delta,wheel_parent[cible][0],cible,wheel_parent[cible][1],true);
	}
	else if (wheel_enfant[cible])
	{
		moveLayerV(delta,wheel_enfant[cible][0],wheel_enfant[cible][1],cible,true);
	}
	else
	{
		var enfant, parent;
		for (enfant in wheel_enfant)
		{
			if (parent = findObj(enfant))
			{
				while(parent = parent.parentNode)
				{
					if (parent.id==cible)
					{
						moveLayerV(delta,wheel_enfant[enfant][0],wheel_enfant[enfant][1],enfant,true);
						return;
					}
				}
			}
		}
	}
}

function wheel(event)
{// GESTION MOLETTE
	var delta = 0; 
	if (!event) event = window.event; 
	if (event.wheelDelta)
	{ 
		delta = event.wheelDelta/120; 
		//if (window.opera) delta = -delta; 
	}
	else if (event.detail)
	{ 
		delta = -event.detail; 
	}
	var target,offsetParent;
	if (event.target) target = event.target;
	if (event.srcElement) target = event.srcElement;
	if (target.nodeType == 3) target = target.parentNode;	// defeat Safari bug
	offsetParent = target.offsetParent;
	if (delta && offsetParent) handle(offsetParent.id,delta*3); 
}
if (window.addEventListener) 
window.addEventListener('DOMMouseScroll', wheel, false); 
window.onmousewheel = document.onmousewheel = wheel;

function moveLayerV(sens,id,parent,enfant,molette) {
	var pas = 5;
	var objP=findObj(parent);
	var objE=findObj(enfant);
	
    if(parseInt(objE.style.top) + (pas*sens)>0)
	{
		objE.style.top = 0;
		clearTimeout(Timer);
//		showHideLayers(id+"Haut",'','hide');
	}
	else if(parseInt(objE.style.top) + (pas*sens)<-(objE.offsetHeight-objP.offsetHeight))
	{
		objE.style.top = "-" + (objE.offsetHeight-objP.offsetHeight) + "px";
		clearTimeout(Timer);
//		showHideLayers(id+"Bas",'','hide');
	}
    else
	{
        objE.style.top = (parseInt(objE.style.top) + (pas*sens)) + "px";
//		showHideLayers(id+"Haut",'','show',id+"Bas",'','show' );
	}
	if (!molette) Timer = setTimeout("moveLayerV("+sens+",'"+id+"','"+parent+"','"+enfant+"');", 10);
}
function majAscenseurV(id,parent,enfant)
{
	// Rafraichit l'ascenseur après mise à jour du contenu
	wheel_parent[parent] = new Array;;
	wheel_parent[parent][0] = id;
	wheel_parent[parent][1] = enfant;
	wheel_enfant[enfant] = new Array;;
	wheel_enfant[enfant][0] = id;
	wheel_enfant[enfant][1] = parent;
	var show = 'hide';
	var objP=findObj(parent);
	var objE=findObj(enfant);
	if (objP && objE)
	{
		show = objE.offsetHeight>objP.offsetHeight+6 ? 'show' : 'hide';
		showHideLayers(id+"Haut",'',show,id+"Bas",'',show,id+"Inter",'',show);
		if (show=='hide')
		{
			objE.style.top = 0;
		}
		else if ((objE.offsetHeight + objE.offsetTop) < objP.offsetHeight)
		{
			objE.style.top = (objP.offsetHeight - objE.offsetHeight) + "px";
		}
	}
//	showHideLayers(id+"Haut",'','hide',id+"Bas",'',(objE.offsetHeight>objP.offsetHeight+6 ? 'show' : 'hide'));
}
function moveLayerH(sens,id,parent,enfant) {
	var pas = 7;
	var Objet=findObj(enfant);
    if(parseInt(Objet.style.left) + (pas*sens)>0)  {
		clearTimeout(Timer);
		showHideLayers(id+"Gauche",'','hide');
	}
	else if(parseInt(Objet.style.left) + (pas*sens)<30-(Objet.offsetWidth-document.getElementById(parent).offsetWidth)) {
		clearTimeout(Timer);
		showHideLayers(id+"Droit",'','hide');
	}
    else {
        Objet.style.left = (parseInt(Objet.style.left) + (pas*sens)) + "px";
		showHideLayers(id+"Gauche",'','show',id+"Droit",'','show' );
	}
	Timer = setTimeout("moveLayerH("+sens+",'"+id+"','"+parent+"','"+enfant+"');", 30);
}
function majAscenseurH(id,parent,enfant,fin,marge)
{
	// Rafraichit l'ascenseur après mise à jour du contenu
	var objP=findObj(parent);
	var objE=findObj(enfant);	objE.style.left = 0;
	var objF=findObj(fin);
	objE.style.width=objF.offsetLeft + (marge ? marge : 10) + "px";
	showHideLayers(id+"Gauche",'','hide',id+"Droit",'',(objE.offsetWidth>objP.offsetWidth ? 'show' : 'hide'));
}
//////////////////////////////////
// Envoi d'un mail via ajax
//////////////////////////////////
function EcrireA()
{
	var args = EcrireA.arguments;
	var argu = "";
	for (var i=0; i<args.length; i++)
	{
		argu+= args[i]+"|";
	}
	MajAjax(ressources+"php/FonctionsAjax.php","EcrireA","argu="+argu);
}
//////////////////////////////////
// Force le chargement d'un fichier
//////////////////////////////////
function ForceCharge(fic,ficout)
{
	if (!ficout) ficout=fic;	// Nom du fichier en sortie
	window.location = ressources+"php/ForceCharge.php?fic="+encodeURIComponent(fic)+"&out="+encodeURIComponent(ficout);
}
//////////////////////////////////
// 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,obj;
// 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)
		{
			if (obj=findObj(args[1]))
			{
				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();
		}
		if (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;
}
//////////////////////////////////
// Recherche de l'objet parent du type spécifié par nodeName
//////////////////////////////////
function chercheParent(obj,nodeName)
{
	var parent=obj.parentNode;
	if (parent) return parent.nodeName==nodeName ? parent : chercheParent(parent,nodeName);
}

//////////////////////////////////
// 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","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")
		}
	}
}

//////////////////////////////////
// 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","OrdonneTable","enreg="+uid+"&rang="+rang+"&table="+table+"&pref="+pref);
		}
	}
}
//////////////////////////////////
// Gestion caractères accentués dans les messages en utf8
//////////////////////////////////
 
String.prototype.iso2uni=function()
{
var chrsIso=new Array("é","è","ê","î","ï","à","â","û","ç","©"," ","°","æ","ô");
var chrsUni=new Array("u00E9","u00E8","u00EA","u00EE","u00EF","u00E0","u00E2","u00FB","u00E7","u00A9","u00A0","u00B0","u00E6","u+00F4");

	var chrsCnt=chrsIso.length;
	var out=this;
	for(var k=0;k<chrsCnt;k++)
	{
		out=this.replace(chrsIso[k],chrsUni[k]);
	}
	return out;
}


//////////////////////////////////
// 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","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","TesteExiste","enreg="+enreg+"&table="+table);
//	}
//	else
//	{
//		Controle(action)
//	}
}
function RetourCheminFer()
{
	MajAjax(ressources+"php/FonctionsAjax.php","RetourCheminFer","session="+session_id);
}
//////////////////////////////////
// Gestion barre de bascule
//////////////////////////////////
function BasculeDiv(div_droite)
{
	var droite = findObj(div_droite);
	if (!droite) return;
	var bascule = findObj('bascule');
	
	if (aClasse(droite,"gauche"))
	{
		enleveClasse (droite, "gauche")
		enleveClasse (bascule, "gauche")
	}
	else
	{
		ajouteClasse(droite, "gauche")
		ajouteClasse(bascule, "gauche")
	}
}
//////////////////////////////////
// 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()
{ 
	var xhr = createXHR();
	var args = MajAjax.arguments;
	var url = args[0];
	var action = args[1];
	var contenu = args[2] ? args[2] : "";
	var session = "session="+session_id;
	
	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("action="+action+"&"+session+"&"+contenu); 
} 
