
// à traduire

var error = false, curRadio = '', curCheckbox = '';
var defaultList = "";

function checkInput(formul)
	{
  if(!formul) formul = "formul";
  curRadio = "";
	var ret = true, form = document[formul];
	if (form == null) return true;
  //if (form.action.indexOf("method") == -1)
    //form.action += (form.action.indexOf("?") > 0 ? "&" : "?") + "method=" + form.method; 
	for (var i = 0; i < form.elements.length; i++)
  		{
  		field = form.elements[i];
      if (field.getAttribute('VALIDATE') != null && !field.disabled) 
        {
        if (validate (field, "VALIDATE")) ret = false;
        }
      if (field.getAttribute('VALIDER') != null && !field.disabled) 
      // VALIDER = synonyme de VALIDATE à cause de conflit avec CFFORM
        {
        if (validate (field, "VALIDER")) ret = false;
        }
        
      // créer la liste des valeurs par défaut
  		if (field.type && !field.disabled)
  			{
        var re = new RegExp("," + field.name + "(,|$)");
  			switch (field.type)
  				{
  				case 'radio':
  				case 'checkbox':
  					{
            if (defaultList.search(re) <0) defaultList += "," + field.name;
            if (field.name == "jobTypeRemun")
              {
              //<!--- Cas particulier pour /FDA/forms/addJob.cfm
              //      valider le type de rémunération obligatoire uniquement si ce n'est pas un poste bénévole --->
              if (form.jobBenevole != null)
                {
                if (form.jobBenevole.value == 0)
                    {
                    error = (error || !field.checked);
                    break;
                    }
                 }
              }
  					break;
  					}
  				case 'select-one':
  				case 'select-multiple':
  					{
            if (defaultList.search(re) < 0) defaultList += "," + field.name;
  					break;
  					}
  				} //switch
        } // if
    } // for
  var inp = form.defaultList;
  if (!inp) 
    {
    inp = document.createElement("INPUT");
    inp.type = "hidden";
    inp.name = "defaultList";
    form.appendChild (inp);
    }
  inp.value = defaultList.substr(1);
  if (ret)
    // vérifier les options des dualselects
    {
  	for (var i = 0; i < form.elements.length; i++)
    		{
    		field = form.elements[i];
        if (field.getAttribute('DUALSELECT') != null && !field.disabled) 
          {
          // selectionner toutes les options
          var opt = field.options;
          for (var o = 0; o < opt.length; o++) opt[o].selected = true;
          }
       }
    // champs validés, insérer sceau validé
    inp = document.createElement("INPUT");
    inp.type = "hidden";
    inp.name = "valide";
    inp.value = "yes";
    form.appendChild (inp);
    }
	return ret;
	}
function validate (field, attr)
  {
  aValide = field.getAttribute(attr).split(";");
  for (var i = 1; i < aValide.length; i++)
    {
    var fn = aValide[i].split("(");
    var fonction = "validate_" + fn[0] + "(field, aValide[0]" + (fn[1] == ")" ? ")" : "," + fn[1]);
    try
      {
      if (eval(fonction)) return true;
      }
    catch (e)
      {
      alert("Erreur dans la validation de " + aValide[0] + "\n" + fonction + "\nPrière d'appeler le support technique");
      return true;
      }
    }
  return false;
  }
function validate_notnull (field, fieldName, messSpecifique)
  {
  var form = field.form, error;
	switch (field.type)
		{
    case 'hidden':
		case 'text':
    case 'file':
    case 'password':
			{
			error = (field.value.length == 0);
			break;
			}
		case 'textarea':
			{
      var len = field.textLength ? field.textLength : field.innerText.length;
			error = (len == 0);
			break;
			}
		case 'radio':
		case 'checkbox':
			{
		  if (curRadio != field.name)
				{
				curRadio = field.name;
				error = true;
				for (var j = 0; j < form.elements.length; j++)
					{
					if (form.elements[j].name == curRadio	&& form.elements[j].checked)
						{
						error = false;
						break;
						}
					}
				}
			break;
			}
		case 'select-one':
		case 'select-multiple':
			{
			error = (field.options.length > 0 && 
        (field.selectedIndex < 0 || field.options[field.selectedIndex].value == ""))

			break;
			}
    }
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » ne peut être vide;"
					+ "\nprière d'entrer une valeur.");
    }

  return (error)
  }
function validate_integer (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  error = (!reInt.test(field.value));
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » doit contenir un nombre entier;");
    }
  return error;
  }
function validate_minmax (field, fieldName, valmin, valmax, messSpecifique)
  {
  if (field.value.length == 0) return false;
  error = (!reFloat.test(field.value) || parseFloat(field.value) < valmin || parseFloat(field.value) > valmax );
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » doit contenir une valeur entre "
    + valmin + " et " + valmax + ";");
    }
  return error;
  }
function validate_min (field, fieldName, valmin, messSpecifique)
  {
  if (field.value.length == 0) return false;
  error = (!reFloat.test(field.value) || parseFloat(field.value,10) < valmin);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » doit contenir une valeur au moins égale à  "
    + valmin + ";");
    }
  return error;
  }
function validate_max (field, fieldName, valmax, messSpecifique)
  {
  if (field.value.length == 0) return false;
  error = (!reFloat.test(field.value) || parseFloat(field.value,10) > valmax );
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName 
    + " » doit contenir une valeur au plus égale à " + valmax + ";");
    }
  return error;
  }
function validate_amount (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  var re = new RegExp("^ *-?([0-9]+(\\\.[0-9]{0,2})? *)$");
  error = !re.test(field.value);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » ne contient pas une valeur représentant un montant valide; utilisez le point pour les décimales.");
    }
  return error;
  }
function validate_float (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  var re = new RegExp("^ *-?([0-9]+(\\\.[0-9]*)? *)$");
  error = !re.test(field.value);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » ne contient pas une valeur représentant une quantité valide; utilisez le point pour les décimales.");
    }
  return error;
  }
function validate_postalCode (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  var re = new RegExp("^ *([a-z][0-9][a-z]) ?([0-9][a-z][0-9]) *$", "i");
  error = !re.test(field.value);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » contient un code postal invalide.");
    return true;
    }
  field.value = field.value.replace(re, "$1 $2").toUpperCase();
  return false;
  }
function validate_date (field, fieldName, mask)
  {
  var val = field.value;
  if (val.length == 0) return false;
  var dd = mask.indexOf("jj");
  var mm = mask.indexOf("mm");
  var yyyy = mask.indexOf("aaaa");
  if(dd < 0 || mm < 0 || yyyy < 0)
    {
    alert( "Attention : masque invalide : " + mask
      + " pour la validation du champ « " + fieldName + " ».")
    return true;
    }
  try
    {
    dd = parseInt (val.substr(dd,2),10);
    mm = parseInt (val.substr(mm,2),10)-1;
    yyyy = parseInt (val.substr(yyyy,4),10);
    var curDate = new Date (yyyy,mm,dd);
    if(curDate.getMonth() == mm && yyyy > 1900) return false;
    throw "";
    }
  catch (e)
    {
    alert("Attention: le champ pour « " + fieldName + " » ne contient pas une date valide;"
        + "\nveuillez utiliser le format " + mask)
    }
    return true;
  }
function validate_year (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  var re = new RegExp("^ *[0-9]{4,4} *$");
  error = !re.test(field.value);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » ne contient pas une valeur représentant une année.");
    }
  return error;
  }

function validate_regexp (field, fieldName, regx, messSpecifique)
  {
  if (field.value.length == 0) return false;
  var re = new RegExp(regx);
  error = !re.test(field.value);
  if (error)
    {
    if(messSpecifique) alert(messSpecifique);
    else alert ("Attention: le champ pour « " + fieldName + " » contient une valeur invalide;");
    }
  return error;
  }
function validate_file(field, fieldName, listeExt)
  {
  if (field.value.length == 0) return false;
  var extArray = field.value.split(".");
  if (extArray.length == 1)
    {
	  alert ("Attention : pour le champ « " + fieldName 
        + " »,\nle fichier doit comporter une extension de type " 
        + listeExt 	+ " pour pouvoir être reconnu;");
    return true;
    }
  else if (extArray.length == 2)
    {
    var ext = extArray[extArray.length-1].toLowerCase();
    var aExt = listeExt.toLowerCase().split(",");
    for (var i = 0; i < aExt.length; i++)
      {
      if (aExt[i] == ext) return false
      }
	  alert ("Attention : pour le champ « " + fieldName + " »,\nseul un fichier de type " 
        + listeExt 	+ " peut être accepté.");
    }
  else
    {
    // nombre de point > 1 : nom de fichier invalide
	  alert ("Attention : pour le champ « " + fieldName + " »,\nle fichier nommé " 
        + field.value	+ " contient trop de points et peut être accepté par le système;"
        + "\nveuillez changer le nom du fichier.");
    }
  return true;
  }
function validate_email (field, fieldName, messSpecifique)
  {
  if (field.value.length == 0) return false;
  return !checkEmail(field)
  }
function checkEmail(field)
	{
	re = new RegExp("^ ?['A-Za-z0-9_]([.]?['A-Za-z0-9_-]+)*@[A-Za-z0-9_\\-\\.]+(\\.[A-Za-z]{2,6})+$");
	field.value = field.value.replace (/\s+$/, "");
	field.value = field.value.replace (/^\s+/, "");
	var mail = field.value.split(",");
	for (var i = 0; i < mail.length; i++)
		{
		if (mail[i] != "" && !re.test(mail[i]) )
			{
			alert("Attention : " + '"' + mail[i] + '" n\'est pas une adresse courriel valide.');
			return false;
			}
		}
	return true;	
	}
function validate_trim(field, fieldName, messSpecifique)
  {
  field.value = field.value.replace(/^ +/, "");
  field.value = field.value.replace(/ +$/, "");
  return false;
  }
function validate_unique(field, fieldName, url, id, messSpecifique)
  {
  //alert("field.value = " + hexadec(field.value))
  if (field.value.length > 0) 
    {
    var rep = ajaxPOST (url, "test=" + hexadec(field.value));
    rep = rep.replace(/[\n\r]+/g, "");
    rep = rep.replace(/<[^>]*>/g, "");
    //alert("rep = " + rep)
    if (rep != "0" && rep != id)
      {
      if(messSpecifique) alert(messSpecifique);
      else alert("Attention : la valeur dans le champ " + fieldName + " existe déjà;\nveuillez en choisir une autre.")
      return true;
      }
    }
  return false;
  }
function validate_smaller(field1, fieldName1, fieldName2, field2, messSpecifique)
  {
  f2 = document.getElementById(field2);
  if (parseInt(field1.value) > parseInt(f2.value))
    {
    if(messSpecifique) alert(messSpecifique);
    else alert("Attention : la valeur dans le champ " + fieldName1 + " doit être inférieure à celle dans " + fieldName2);
    return true;
    }
  return false;
  }
function validate_sameas(field1, fieldName1, fieldName2, field2, messSpecifique)
  {
  f2 = document.getElementById(field2);
  if (field1.value != f2.value)
    {
    if(messSpecifique) alert(messSpecifique);
      else alert("Attention : la valeur dans le champ " + fieldName1 + " doit être identique à celle dans " + fieldName2);
    return true;
    }
  return false;
  }
function validate_noChar(field, fieldName, noChars, messSpecifique)
  {
  //alert(fieldName);alert(noChars)
  for(var i=0; i<noChars.length; i++)
    {
    var car = noChars.substr(i, 1);
    if(field.value.indexOf(car) >=0) 
      {
      if(messSpecifique) alert(messSpecifique);
      else alert("Attention : la valeur dans le champ " + fieldName 
        + " ne peut contenir le caractère « " + car + " »");
      return true;
      }
    }
  return false;
  }
function validate_textMinMax (field, fieldName, tMin, tMax, messSpecifique)
  {
  var nbcar;
  if (field.type == "textearea") nbcar = field.textLength ? field.textLength : field.innerText.length;
  else nbcar = field.value.length;
  if (tMin && tMax)
    {
    if (nbcar < tMin || nbcar > tMax)
      {
      alert("Attention : le texte dans le champ " + fieldName
        + " contient " + nbcar + " caractères;\nil doit en contenir entre "
        + tMin + " et " + tMax + ".");
      return true;
      }
    }
  else if (tMax)
    {
    if (nbcar > tMax)
      {
      alert("Attention : le texte dans le champ " + fieldName
        + " contient " + nbcar + " caractères;\nil doit en contenir au plus " + tMax + ".");
      return true;
      }
    }
  else if (tMin)
    {
    if (nbcar < tMin)
      {
      alert("Attention : le texte dans le champ " + fieldName
        + " contient " + nbcar + " caractères;\nil doit en contenir au moins " + tMax + ".");
      return true;
      }
    }
  return false;
  }
function hexadec(str)
	{
	var hstr = "";
	for(i=0; i<str.length; i++)
		{
	  n = str.charCodeAt(i);
	  hstr += (n < 16 ? "0" + n.toString(16):n.toString(16));
		}
	return hstr;
	}
function hexadump(str)
	{
	var hstr = "";
	for(i=0; i<str.length; i++)
		{
	  n = str.charCodeAt(i);
	  hstr += (n < 16 ? "0" + n.toString(16):n.toString(16)) + " ";
    if (n == 10) hstr += "\r\n";
		}
	return hstr;
	}

function backToMain(reld)
	{
	if(opener)
		{
		if(reld)opener.location.reload();
		close(this)
		}
	else
		{
		parent.document.location.href = parent.document.location.pathname;
		return false;
		}
	}
function able ()
	{
	var submitButton = document.getElementsByName("subm");
	for (var i =0; i < submitButton.length; i++)	submitButton[i].disabled = false;
	}
function disable ()
	{
	var submitButton = document.getElementsByName("subm");
	for (var i =0; i < submitButton.length; i++)	submitButton[i].disabled = true;
	}
function addNew()
	{
	document.formul.id.selectedIndex = -1;
	}
function showAdv(name)
	{
	var adv = document.getElementById(name);
	adv.style.visibility="visible";
	}
function hideAdv(name)
	{
	var adv = document.getElementById(name);
	adv.style.visibility="hidden";
	}
function testIt(p, id)
	{
  var newForm = document.createElement("FORM")
  newForm.method = "POST";
  newForm.target = "_blank";
  newForm.action = p;
  var hidden = document.createElement("INPUT")
  hidden.type = "hidden";
  hidden.value = "yes";
  hidden.name = "essai";
  newForm.appendChild (hidden);
  newForm = document.body.appendChild (newForm);
  newForm.normalize()
  newForm.submit();
	return false;
	}
function executeIt (exec)
	{
  if (checkInput())
    {
    var form = document.formul;
  	var tempAction = form.action;
  	var tempTarget = form.target;
  	form.action=exec;
  	form.target="exec";
    //if (form.action.indexOf("method") == -1)
      //form.action += (form.action.indexOf("?") > 0 ? "&" : "?") + "method=" + form.method;
    if (form.fireEvent("onsubmit")) form.submit();
  	form.action = tempAction;
  	form.target = tempTarget;
    }
	return false;
	}
function setAll(fam, chkBox)
	{
	var fam = document.formul.elements[fam];
	for (i=0; i < fam.length; i++)
		fam[i].checked = chkBox.checked;
	}
function searchTxt(sel,start)
	{
	var i, searchStr = document.getElementById("search" + sel).value.toUpperCase();
	if (searchStr != "")
		{
		var selectEl = document.formul.elements[sel];
		for (i = start; i < selectEl.options.length; i++)
			{
			if (selectEl.options[i].text.toUpperCase().indexOf(searchStr) > -1)
				{
				selectEl.options[i].selected = true;	
				selectEl.nextStart = i+1;
				able();
				if (imgList) updImage();
				return;
				}
			}
		alert('Le texte "' + document.getElementById("search" + sel).value 
					+ '" n\'est pas trouvé.');
		nextStart = 0;
		}
	}
function searchNext(sel)
	{
	var selectEl = document.getElementById(sel);
	if (selectEl && selectEl.nextStart)	searchTxt(sel, selectEl.nextStart)
	}
function checkStableTop()
	{
	if (!stableDiv)
		{
		stableDiv = document.getElementById('stableTop');
		if (stableDiv)
			stableTop = stableDiv.style.pixelTop;
		else
			window.clearInterval(checkTimer);
		return;
		}
	var currentScroll = document.documentElement.scrollTop + document.body.scrollTop;
	var top = stableDiv.style.pixelTop;
	var dist = Math.max (currentScroll, stableTop) - top;
	stableDiv.style.pixelTop = top + (Math.abs(dist) < 3 ? dist : dist/3);
	}
function initLocks ()
	{
	var formul = document.formul;
	if (formul)
		{
		var yaLocks = false, i, j, inp = formul.elements
    var allLocks = (formul.getAttribute ('LOCK') != null) ;
    var all = document.all;
		for (i=0; i<all.length; i++)
			{
			if (all[i].getAttribute('CHECKLOCK') != null) 
				{
				all[i].attachEvent('onclick', editCheckLock);
				yaLocks = true;
				}
			}
		if (yaLocks || allLocks)
			{
			for (i=0; i<inp.length; i++)
				{
				if (allLocks || inp[i].getAttribute('LOCK') != null) inp[i].attachEvent('onchange', editLock);
				}
			document.formul.attachEvent('onreset', unLock);
			}	
		}
  if(MSIE) // réduction des boutons trop larges dans MSIE
    {
  	var inp = document.getElementsByTagName("INPUT");
  	if(inp)
  		{
  		for (i=0; i<inp.length; i++)
  			{
  			if (inp[i].parentNode.className == "editButton" && inp[i].offsetWidth > 0) 
  				{
  				// à caudes des boutons trop larges
  				// créer des SPAN pour avoir la vraie largueur du texte
  				var span = document.createElement("SPAN");
  				span.innerText = inp[i].value;
  				span = document.body.appendChild(span);
  				inp[i].style.width = span.offsetWidth + 15 + "px";
  				inp[i].parentNode.style.visibility = "visible";
  				span.removeNode(true);
  				}
  			}
  		}
    }
  // et à part de d'ça : standardiser la hauteur des TEXTAREAS et des SELECT
  var h, nbRows, areas = document.getElementsByTagName("TEXTAREA");
  for (var i = 0; i < areas.length; i++)
    {
    nbRows = areas[i].getAttribute ("ROWS")
    if(nbRows)
      {
      h = nbRows*15;
      if(MSIE) h += 5;
      else if(MOZ) h += 4;
      areas[i].style.height = h + "px";
      }
    }
  areas = document.getElementsByTagName("SELECT");
  for (var i = 0; i < areas.length; i++)
    {
    nbRows = areas[i].getAttribute ("SIZE")
    if(nbRows)
      {
      h = nbRows*15;
      if(MSIE) h += 20;
      else if(MOZ) h += 9;
      areas[i].style.height = h + "px";
      }
    }
	}
function editLock ()
	{
	lock = true;
	}
function editCheckLock()
	{
	if (lock)
		alert ("Certains paramètres de l'objet édité on changé; \nprière de confirmer la mise à jour, ou de réinitialiser le formulaire, avant de procéder à la suite.")
	return !lock;
	}
function unLock()
	{
	lock = false;
	}
function edit_moveStartById(divId, event)
	{
	edit_curDivMove = document.getElementById(divId);
	document.attachEvent ('onmousemove', edit_moveIt);
	document.attachEvent ('onmouseup', edit_dropIt);
  document.attachEvent ('onselectstart', edit_cancelEvent);
	edit_orgX = event.clientX - edit_curDivMove.offsetLeft;
	edit_orgY = event.clientY - edit_curDivMove.offsetTop;
	}
// while button is down and the mouse moves
function edit_moveIt()
	{
	edit_curDivMove.style.pixelLeft =  event.clientX - edit_orgX;
	edit_curDivMove.style.pixelTop = event.clientY - edit_orgY;
	}
// when button is up: drop the table here
function edit_dropIt()
	{
	document.detachEvent ('onmousemove', edit_moveIt);
	document.detachEvent ('onmouseup', edit_dropIt);
	document.detachEvent ('onselectstart', edit_cancelEvent);
	document.body.style.cursor = "default";
	}
function edit_cancelEvent() 
  {
  event.returnValue=false;
  event.cancelBubble=true;
  return false;
  }
function checkNum (el, e)
  {
  if (window.event) e = window.event;
  var key = e.keyCode;
  if (key < 48 || key > 57)
    {
    alert("Veuillez entrer une valeur numérique seulement dans ce champ");
    return false;
    }
  return true;
  }
function goDelete(warn)
  {
  if (warn && !confirm ("Êtes-vous certain de vouloir supprimer cet article ?")) return false;
  document.formul.todo.value = "D";
  return true;
  }
function populate (thisInp, destId, url)
  // remplace les options dans un select par celles retournées par url en Ajax
  // thisInp = champ contenant la valeur à transmettre à url
  // destId = liste des id des select à repeupler
  // url = adresse du code à appeler pour générer les <OPTION>
  {
  var sendString = '';
  if (thisInp)
    {
    if(thisInp.type == "select-one")
      {
      sendString = (thisInp.selectedIndex >=0 ? thisInp.options[thisInp.selectedIndex].value : "");
      }
    else if (thisInp.type == "text")  sendString = thisInp.value;
    else if (thisInp.type == "radio") sendString = radioValue(thisInp);
    }
  //alert(sendString)
  var texte = ajaxGET (url+sendString);
  var aSel = destId.split(",");
  if (MOZ) 
    {
    document.forms[0][destId].innerHTML = texte;
    }
  else
    {
    // Bug dans MSIE 6 : contournement
      // créer un nouveau select dans un div
      var aSel = destId.split(",");
      var div = document.createElement ("DIV");
      div.innerHTML = "<SELECT>" + texte + "</SELECT>";
      var newSel = div.firstChild;
      // transferer les options dans le select
      for (var i = 0; i<aSel.length; i++)
        {
        var sel = document.getElementById(aSel[i]);
        if (sel)copySelect (newSel, sel);
        }
      newSel = null;
    // Fin contournement tabarnak !
    }
  }
function ajaxGET (url)
  {
	var XMLHttp = null;
	if (window.XMLHttpRequest)XMLHttp = new XMLHttpRequest();
	// code pour MSIE
	else if (window.ActiveXObject)XMLHttp = new ActiveXObject("Microsoft.XMLHttp");
  if(XMLHttp)
    {
    //alert(url)
    XMLHttp.open("GET", url, false);
    XMLHttp.send(null);
    if (XMLHttp.status == 200)return XMLHttp.responseText;
    displayError(XMLHttp.statusText)
    return null;
    }
	else return null;
  }
function ajaxPOST (url, sendText)
  {
  var XMLHttp = null;
	if (window.XMLHttpRequest)XMLHttp = new XMLHttpRequest();
	// code pour MSIE
	else if (window.ActiveXObject)XMLHttp = new ActiveXObject("Microsoft.XMLHttp");
  if(XMLHttp)
    {
    XMLHttp.open("POST", url, false);
    XMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
    // envoyer en hexa, 'tain de UTF-8 !!!
    XMLHttp.send(sendText);
    if (XMLHttp.status == 200)return XMLHttp.responseText;
    displayError("<H2>" + XMLHttp.statusText + "</H2><P>" + XMLHttp.responseText)
    return null;
    }
	else return null;
  }
function displayError(text)
	{
	var errorWin = open ("","Error","scrollbars=yes,resizable,width=900,height=600");
	errorWin.document.open();
	errorWin.document.write(text);
	errorWin.document.close();
  errorWin.focus()
	}

function copySelect (from, to)
  {
  if (to.options) to.options.length = 0;
  // transferer les options dans le select
  for (var i =0; i < from.options.length; i++) to.appendChild(from.options[i].cloneNode(true));
  to.selectedIndex = from.selectedIndex;
  //to.selectedIndex = -1;
  }
function disableRow(rowId, statut)
  {
  var row = document.getElementById(rowId);
  if (row)
    {
    var inp = row.getElementsByTagName('INPUT');
    for (var i = 0; i < inp.length; i++) inp[i].disabled=statut;
    inp = row.getElementsByTagName('SELECT');
    for (var i = 0; i < inp.length; i++) inp[i].disabled=statut;
    inp = row.getElementsByTagName('TD');
    for (var i = 0; i < inp.length; i++) inp[i].style.color = (statut ? "808080" : "000000");
   }
 }
function initMultiple(name)
  {
  var edit_sel = document.formul[name];
  if (edit_sel)
    {
    if(window.addEventListener) // Mozilla, Netscape, Firefox
      {
	    edit_sel.addEventListener('mouseover', edit_warnDivShow, false);
	    edit_sel.addEventListener('mouseout', edit_warnDivHide, false);
	    edit_sel.addEventListener('mousemouve', edit_warnDivMove, false);
      }
    else  // MSIE
      {
	    edit_sel.attachEvent('onmouseover', edit_warnDivShow);
	    edit_sel.attachEvent('onmouseout', edit_warnDivHide);
	    edit_sel.attachEvent('onmousemove', edit_warnDivMove);
      }
    }
  }
function edit_warnDivShow()
  {
  if (!edit_warnDiv) create_warnDiv()
  if (edit_warnDiv)
    {
    edit_warnDiv.style.visibility="visible";
    }
  }
function edit_warnDivHide()
  {
  if (edit_warnDiv)
    {
    edit_warnDiv.style.visibility="hidden";
    }
  }
function edit_warnDivMove(e)
  {
  if (edit_warnDiv)
    {
    if (!e)e = event;
	  edit_warnDiv.style.pixelTop = e.y-edit_warnDiv.offsetHeight-25;
	  edit_warnDiv.style.pixelLeft = e.x - edit_warnDiv.offsetWidth/2;
    }
  }
function create_warnDiv()
  {
  edit_warnDiv=document.createElement("DIV");
  edit_warnDiv.className = "warn";
  edit_warnDiv.innerHTML="Pour une sélection multiple,<BR>gardez un doigt sur la clé Ctrl.";
  document.body.appendChild(edit_warnDiv);
  }
function endSession(minutes)
  {
  alert(window.location.host)
  }
  
function transferRight(selName)
  {
  getSel (selName);
  transferOptions (optionsLeft, optionsRight, false)
  }
function transferAllRight(selName)
  {
  getSel (selName);
  transferOptions (optionsLeft, optionsRight, true)
  }
function transferLeft(selName)
  {
  getSel (selName);
  transferOptions (optionsRight, optionsLeft, false)
  }
function transferAllLeft(selName)
  {
  getSel (selName);
  transferOptions (optionsRight, optionsLeft, true)
  }
function transferOptions (from, to, all)
  {
  for (var i=0; i < from.length; i++)
    {
    if (from[i].text.length && (all || from[i].selected)) to[to.length] = new Option(from[i].text, from[i].value);
    }
	for (var i=from.length-1; i>=0; i--) if(from[i].text.length && (all || from[i].selected)) from[i] = null;
  }
function getSel (selName)
  {
  selLeft = document.formul[selName + "Left"];
  optionsLeft = selLeft.options;
  selRight  = document.formul[selName];
  optionsRight = selRight.options;
  }
function saveOptions(sel)
  {
  if(!sel.optionsBak) 
    {
    sel.optionsBak = new Array(sel.options.length);
    for (var i = 0; i < sel.options.length; i++) sel.optionsBak[i] = sel.options[i];
    }
  }
function searchDual(fieldName, searchField, searchTemplate, searchParams)
  {
  //alert(searchParams)
  var sel = document.formul[fieldName];
  var selLeft = document.formul[fieldName+"Left"];
  if (searchParams != '')
    {
    var aParams = searchParams.split(',');
    searchTemplate += '?'
    for(var i=0; i<aParams.length; i++)
      {
      searchTemplate += aParams[i] + '=' + getValue(document.formul[aParams[i]]) + '&';
      }
    searchTemplate += 'test='
    }
  else searchTemplate += '?test=';
  //alert("searchTemplate = " + searchTemplate)
  saveOptions (selLeft)
  populate(document.formul[searchField], fieldName+"Left", searchTemplate);
  }
function searchDualBack(fieldName)
  {
  var sel = document.formul[fieldName+"Left"];
  for (var i = 0; i < sel.optionsBak.length; i++) sel.options[i] = sel.optionsBak[i];
  }
function getValue(inp)
  {
  if (inp.length) return radioValue(inp);
  return inp.value;
  }
function radioValue(inp)
  {
  for (var i = 0; i<inp.length; i++) if (inp[i].checked) return inp[i].value;
  return null;
  }
function autreAction(action, target)
  {
  var saveAction = document.formul.action;
  var saveTarget = document.formul.target;
  if (target) document.formul.target = target;
  document.formul.action = action;
  document.formul.submit();
  document.formul.action = saveAction;
  document.formul.target = saveTarget;
  }
function getNextParentTag (el, tag)
  {
  while (el.parentElement && el.parentElement.tagName != tag) el = el.parentElement;
  return el.parentElement;
  }
function getNextChildTag (el, tag)
  {
  if (el)
    {
    while (el.firstChild && el.firstChild.tagName != tag) el = el.firstChild;
    return el.firstChild;
    }
  return null;
  }
var selLeft, optionsLeft;
var selRight, optionsRight;
var edit_warnDiv = null;
var edit_sel = null;
var edit_curDivMove = null;
var edit_orgX, edit_orgY;
var lock = false;
var nextStart = 0;
var checkTimer=window.setInterval('checkStableTop()',10);
var stableDiv=false;
var stableTop;
var imgList = false;
if (window.attachEvent) window.attachEvent('onload', initLocks);
else window.addEventListener('load', initLocks, true);
var MSIE = /MSIE/.test(navigator.userAgent);
var MOZ = !MSIE && navigator.product == "Gecko";
var reInt = new RegExp("^ *[-|+]?[0-9]+ *$");
var reFloat = new RegExp("^ *[-|+]?[0-9]+(\.[0-9]*)? *$");



