//******************************************************************************************************************//
function MM_effectBlind(targetElement, duration, from, to, toggle)
{
	Spry.Effect.DoBlind(targetElement, {duration: duration, from: from, to: to, toggle: toggle});
}
//******************************************************************************************************************//


//******************************************************************************************************************//
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];}}
}
//******************************************************************************************************************//


//******************************************************************************************************************//
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_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
//******************************************************************************************************************//


//******************************************************************************************************************//
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=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
/******************************************************************************************************************

/******************************************************************************************************************
 * This array is used to remember mark status of rows in browse mode
 */
var marked_row = new Array;


/**
/**
 * Sets/unsets the pointer and marker in browse mode
 *
 * @param   object    the table row
 * @param   integer  the row number
 * @param   string    the action calling this script (over, out or click)
 * @param   string    the default background color
 * @param   string    the color to use for mouseover
 * @param   string    the color to use for marking a row
 *
 * @return  boolean  whether pointer is set or not
 */
 //******************************************************************************************************************//
function setPointer(theRow, theRowNum, theAction, theDefaultColor, thePointerColor, theMarkColor)
{
    var theCells = null;

    // 1. Pointer and mark feature are disabled or the browser can't get the
    //    row -> exits
    if ((thePointerColor == '' && theMarkColor == '')
        || typeof(theRow.style) == 'undefined') {
        return false;
    }

    // 2. Gets the current row and exits if the browser can't get it
    if (typeof(document.getElementsByTagName) != 'undefined') {
        theCells = theRow.getElementsByTagName('td');
    }
    else if (typeof(theRow.cells) != 'undefined') {
        theCells = theRow.cells;
    }
    else {
        return false;
    }

    // 3. Gets the current color...
    var rowCellsCnt  = theCells.length;
    var domDetect    = null;
    var currentColor = null;
    var newColor     = null;
    // 3.1 ... with DOM compatible browsers except Opera that does not return
    //         valid values with "getAttribute"
    if (typeof(window.opera) == 'undefined'
        && typeof(theCells[0].getAttribute) != 'undefined') {
        currentColor = theCells[0].getAttribute('bgcolor');
        domDetect    = true;
    }
    // 3.2 ... with other browsers
    else {
        currentColor = theCells[0].style.backgroundColor;
        domDetect    = false;
    } // end 3

    // 3.3 ... Opera changes colors set via HTML to rgb(r,g,b) format so fix it
    if (currentColor.indexOf("rgb") >= 0)
    {
        var rgbStr = currentColor.slice(currentColor.indexOf('(') + 1,
                                     currentColor.indexOf(')'));
        var rgbValues = rgbStr.split(",");
        currentColor = "#";
        var hexChars = "0123456789ABCDEF";
        for (var i = 0; i < 3; i++)
        {
            var v = rgbValues[i].valueOf();
            currentColor += hexChars.charAt(v/16) + hexChars.charAt(v%16);
        }
    }

    // 4. Defines the new color
    // 4.1 Current color is the default one
    if (currentColor == ''
        || currentColor.toLowerCase() == theDefaultColor.toLowerCase()) {
        if (theAction == 'over' && thePointerColor != '') {
            newColor              = thePointerColor;
        }
        else if (theAction == 'click' && theMarkColor != '') {
            newColor              = theMarkColor;
            marked_row[theRowNum] = true;
            // Garvin: deactivated onclick marking of the checkbox because it's also executed
            // when an action (like edit/delete) on a single item is performed. Then the checkbox
            // would get deactived, even though we need it activated. Maybe there is a way
            // to detect if the row was clicked, and not an item therein...
            // document.getElementById('id_rows_to_delete' + theRowNum).checked = true;
        }
    }
    // 4.1.2 Current color is the pointer one
    else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()
             && (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) {
        if (theAction == 'out') {
            newColor              = theDefaultColor;
        }
        else if (theAction == 'click' && theMarkColor != '') {
            newColor              = theMarkColor;
            marked_row[theRowNum] = true;
            // document.getElementById('id_rows_to_delete' + theRowNum).checked = true;
        }
    }
    // 4.1.3 Current color is the marker one
    else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) {
        if (theAction == 'click') {
            newColor              = (thePointerColor != '')
                                  ? thePointerColor
                                  : theDefaultColor;
            marked_row[theRowNum] = (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])
                                  ? true
                                  : null;
            // document.getElementById('id_rows_to_delete' + theRowNum).checked = false;
        }
    } // end 4

    // 5. Sets the new color...
    if (newColor) {
        var c = null;
        // 5.1 ... with DOM compatible browsers except Opera
        if (domDetect) {
            for (c = 0; c < rowCellsCnt; c++) {
                theCells[c].setAttribute('bgcolor', newColor, 0);
            } // end for
        }
        // 5.2 ... with other browsers
        else {
            for (c = 0; c < rowCellsCnt; c++) {
                theCells[c].style.backgroundColor = newColor;
            }
        }
    } // end 5

    return true;
} // end of the 'setPointer()' function
//******************************************************************************************************************//


//******************************************************************************************************************//
//Pour un champ, accepte seulement les caractères spécifiés ci-dessous
function check(nom_champ){
reg = new RegExp('[^0-9]+', 'g'); 
valeur = eval(nom_champ).value; 
	if(reg.test(valeur)){ 
	eval(nom_champ).value=eval(nom_champ).value.replace(/[^A-Za-z0-9._-]+/, ''); 
	} 
	else { 
	return true; 
	} 
} 

//Pour la gestion des cookies

//Création d'un cookie
/*function ecrire_cookie(nom, valeur, expires) {
  document.cookie=nom+"="+escape(valeur)+
  ((expires==null) ? "" : ("; expires="+expires.toGMTString()));
}*/

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

//Lecture d'un cookie
/*function lire_cookie(nom) {
  var arg=nom+"=";
  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 arguments_cookie(j);
    i=document.cookie.indexOf(" ",i)+1;
    if (i==0) break;
  }
  return null; 
}*/
//******************************************************************************************************************//
//Pour la gestion des boites menus avec Spry Effect BLIND

//Lors de l'arrivée dans la page, vérification des valeurs des cookies + mémoriser dans des variables
function load_pour_boite(nom_boite,etat_initial){
nom_cookie_en_cours="ind_boite_"+nom_boite;
eval("etat_initial_"+nom_boite+"='"+etat_initial+"'");
eval("cookie_"+nom_boite+"='"+etat_initial+"'");
eval(nom_cookie_en_cours+"='"+etat_initial+"'"); 
}

//Lors de l'arrivée dans la page, affichage ouvert ou fermé de la boite de détails selon la valeur du cookie
function afficher_cacher_boite(nom_boite){
nom_boite_en_cours="boite_"+nom_boite;
	if(eval("cookie_"+nom_boite)=='on'){
	traiterImageDetails(nom_boite,'off');
	document.getElementById(nom_boite_en_cours).style.visibility='visible';
	document.getElementById(nom_boite_en_cours).style.display='block';
	}
	else{
	traiterImageDetails(nom_boite,'on');
	document.getElementById(nom_boite_en_cours).style.visibility='hidden';
	document.getElementById(nom_boite_en_cours).style.display='none';
	}
}

//Permet de basculer l'image de détails (flèche vers le haut ou vers le bas) + basculer la valeur du cookie
function traiterImageDetails(nom,etat_boite){
    if(etat_boite=='off'){
	MM_swapImage("btn_details_boite_"+nom,'','../../images/img_fleche_haut.jpg',1);
	eval("ind_boite_"+nom+"='on'");
	//ecrire_cookie("ind_boite_"+nom,'on',date);
	}
    else{
    MM_swapImage("btn_details_boite_"+nom,'','../../images/img_fleche_bas.jpg',1);
	eval("ind_boite_"+nom+"='off'");
	//ecrire_cookie("ind_boite_"+nom,'off',date);
    }
}

//Lors d'un clic, permet de faire afficher ou de cacher la boite de détails (effet bascule)
function afficher_function_blind(nom_boite){ 
  function_blind="";
  boite_en_cours='boite_'+nom_boite;
  cookie_en_cours='ind_boite_'+nom_boite;
	 if(eval("cookie_"+nom_boite)=='off'){
		  if(eval("etat_initial_"+nom_boite)=="" || eval("etat_initial_"+nom_boite)=="off"){
				if(eval("var_premiere_fois_"+nom_boite)=='true'){ //1
				function_blind="MM_effectBlind(boite_en_cours, 300, '0%', '100%', false)";
				eval("var_premiere_fois_"+nom_boite+"='false'");
				//alert('OFF - 1');
				}
				else{ //3
				 function_blind="MM_effectBlind(boite_en_cours, 300, '100%', '0%', true)";
				eval("var_premiere_fois_"+nom_boite+"='false'");
				//alert('OFF - 3');
				}
		  }
		  else{ //2/
		  function_blind="MM_effectBlind(boite_en_cours, 300, '100%', '0%', false)";
		  eval("var_premiere_fois_"+nom_boite+"='false'");
		  //alert('OFF - 2');
		  }
	  }
	   if(eval("cookie_"+nom_boite)=='on'){
		 if(eval("etat_initial_"+nom_boite)=="on"){
				if(eval("var_premiere_fois_"+nom_boite)=='true'){ //1
				function_blind="MM_effectBlind(boite_en_cours, 300, '100%', '0%', true)";
				eval("var_premiere_fois_"+nom_boite+"='false'");
				//alert('ON - 1');
				}
				else{ //3
				function_blind="MM_effectBlind(boite_en_cours, 300, '100%', '0%',true)";
				eval("var_premiere_fois_"+nom_boite+"='false'");
				//alert('ON - 3');
				}
		}
		else{ //2
		function_blind="MM_effectBlind(boite_en_cours, 300, '100%', '0%', true)";
		eval("var_premiere_fois_"+nom_boite+"='false'");
		//alert('ON - 2');
		}
	 }
  }
//******************************************************************************************************************//

//Initialisation des état des arbos
function initialisationEtatArbo(nom_arbo){
eval("etat_"+nom_arbo+"='off'");
}

//Pour traiter image de dossier lorsque l'arbo est ouvertee ou fermée (Dossier avec + ou -)
function afficherImageDossier(nom_image,nom_arbo){
//etat_nom_arbo=eval("etat_"+nom_arbo);
	if(eval("etat_"+nom_arbo)=="" || eval("etat_"+nom_arbo)=="off"){ 
	MM_swapImage(nom_image,'','images/dossier_a_fermer.gif',1);
	eval("etat_"+nom_arbo+"='on'");
	}
	else{
	MM_swapImage(nom_image,'','images/dossier_a_ouvrir.gif',1);
	eval("etat_"+nom_arbo+"='off'");
	}
}

//******************************************************************************************************************//
//Initialisation des barres d'outils (icônes d'action) des dossiers/fichiers
function initialisationEtatToolbar(nom_toolbar){
eval("etat_"+nom_toolbar+"='off'");
}

//Pour traiter image de dossier lorsque l'arbo est ouvertee ou fermée (Dossier avec + ou -)
function afficherImageToolbar(nom_image,nom_toolbar){
//etat_nom_arbo=eval("etat_"+nom_arbo);
	if(eval("etat_"+nom_toolbar)=="" || eval("etat_"+nom_toolbar)=="off"){ 
	MM_swapImage(nom_image,'','images/toolbar_on.png',1);
	eval("etat_"+nom_toolbar+"='on'");
	document.getElementById(nom_toolbar).style.visibility='visible';
	document.getElementById(nom_toolbar).style.display='block';
	}
	else{
	MM_swapImage(nom_image,'','images/toolbar_off.png',1);
	eval("etat_"+nom_toolbar+"='off'");
	document.getElementById(nom_toolbar).style.visibility='hidden';
	document.getElementById(nom_toolbar).style.display='none';
	}
}
//******************************************************************************************************************//

var ns4 = (document.layers)? true:false;   //NS 4 
var ie4 = (document.all)? true:false;   //IE 4 
var dom = (document.getElementById)? true:false;   //DOM 


function setToAnchor(ID_Anchor,Name_Anchor,ID_Div)
//Fonction permettant de positionner un DIV à une position occupée par une ancre
    {
var DivLeft = 0;   //Position du Div par rapport au côté gauche de la page 
var DivTop = 0;   //Position du Div par rapport au haut de la page 
    if (dom)
        {
        pos = document.getElementById(ID_Anchor);
        DivLeft = getLeft(pos);
        DivTop = getTop(pos);
        document.getElementById(ID_Div).style.left = DivLeft;
        document.getElementById(ID_Div).style.top = DivTop;
        }
    else if (ie4) 
        {
        pos = document.all[ID_Anchor];
        DivLeft = getLeft(pos);
        DivTop = getTop(pos);
        document.all[ID_Div].style.posLeft = DivLeft;
        document.all[ID_Div].style.posTop = DivTop;
        }
    else if (ns4)
        {
        pos = document.anchors[Name_Anchor];
        DivLeft = pos.x;
        DivTop = pos.y;
        document.layers[ID_Div].pageX = DivLeft;
        document.layers[ID_Div].pageY = DivTop;
        }
    }

function getLeft(MyObject)
//Fonction permettant de connaître la position d'un objet
//par rapport au bord gauche de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
    {
    if (MyObject.offsetParent)
        return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
    else 
        return (MyObject.offsetLeft);
    } 
function getTop(MyObject)
//Fonction permettant de connaître la position d'un objet
//par rapport au bord haut de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
    {
    if (MyObject.offsetParent)
        return (MyObject.offsetTop + getTop(MyObject.offsetParent));
    else
        return (MyObject.offsetTop);
    }
