/*
**
** Cookies
**
*/


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));
}

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;
}

/*
**
** Initialisations diverses
**
*/

Event.observe(window, 'load', function() {
   // On réinitialise le formulaire avec les valeurs sauvées
   // dans les cookies (dernière recherche effectuée)
   LoadForm($('enquete'));
});


/*
**
** Fonctions de gestion du formulaire
**   => sauvegarde dans des cookies
**   => initialisation à partir de cookies
**   => effacement des champs
**   => test de formulaire non rempli
**
*/

function SaveForm(objForm){
  var arrElems = objForm.elements;

  for(var xi=0; xi < arrElems.length; xi++) {
    // On saute les éléments non identifiés (comme fieldset...)
    // sinon la boucle se plante (pas d'attribut type)
    if (! arrElems[xi].type)
      continue;
	if (arrElems[xi].className == 'protege') 
	  continue;
    // Traitement des éléments de saisie
    var formFieldType = arrElems[xi].type.toLowerCase();
    var nom = arrElems[xi].name;
    switch(formFieldType) {
      case "text": case "hidden": case "password": case "textarea":
        ecrire_cookie('rechcombi_'+nom, arrElems[xi].value);
        break;
      case "radio":
        //alert(arrElems[xi].value + ' --- ' + arrElems[xi].checked);
        if (arrElems[xi].checked) {
          ecrire_cookie('rechcombi_'+nom, arrElems[xi].value);
        }
        break;
      case "checkbox":
        ecrire_cookie('rechcombi_'+nom, arrElems[xi].checked);
        break;
      default:
        if(formFieldType.indexOf("select") != -1) {
          ecrire_cookie('rechcombi_'+nom, arrElems[xi].selectedIndex);
        }
        break;
    }
  }
}


function LoadForm(objForm){
  var arrElems = objForm.elements;

  for(var xi=0; xi < arrElems.length; xi++) {
    // On saute les éléments non identifiés (comme fieldset...)
    // sinon la boucle se plante (pas d'attribut type)
    if (! arrElems[xi].type)
      continue;
	if (arrElems[xi].className == 'protege') 
	  continue; 
    // Traitement des éléments de saisie
    var formFieldType = arrElems[xi].type.toLowerCase();
    var nom = arrElems[xi].name;
    var val = lire_cookie('rechcombi_'+nom);
    //console.log(xi + ' ' + arrElems[xi].name + ' ' + val);
    switch(formFieldType) {
      case "text": case "hidden": case "password": case "textarea":
        if (val != null) arrElems[xi].value = val;
      
        break;
      case "radio": case "checkbox":
        if (val != null) arrElems[xi].checked = (val == arrElems[xi].value ) ? true : false;
       
        break;
      default:
        if(formFieldType.indexOf("select") != -1) {
          if (val != null) arrElems[xi].selectedIndex = val;
          
        }
        break;
    }
  }
}

// ResetForm(document.uniqueFormName); // For uniquely-named forms
// ResetForm(document.forms[2]);       // For a form whose name is not unique

function ResetForm(objForm){
  var arrElems = objForm.elements;
  objForm.reset();

  for(var xi=0; xi < arrElems.length; xi++) {
    // console.debug("%d %o", xi, arrElems[xi]);
    // On saute les éléments non identifiés (comme fieldset...)
    // sinon la boucle se plante (pas d'attribut type)
    if (! arrElems[xi].type)
      continue;
    // On met à zéro
    formFieldType = arrElems[xi].type.toLowerCase();
    switch(formFieldType) {
      case "submit": case "reset": case "button":
        break;
      case "text": case "hidden": case "password": case "textarea":
        arrElems[xi].value= '';
        arrElems[xi].style.color = 'black';
        arrElems[xi].style.backgroundColor = 'white';
        break;
      case "radio": case "checkbox":
        arrElems[xi].selected = false;
        arrElems[xi].style.color = 'black';
        arrElems[xi].style.backgroundColor = 'white';
        break;
      default:
        // console.warn("%d %s %s", xi, formFieldType, arrElems[xi].type);
        if(formFieldType.indexOf("select") != -1) {
          arrElems[xi].selectedIndex = 0;  // On sélectionne le 1er élément; avec -1 on ne sélectionne rien
          arrElems[xi].style.color = 'black';
          arrElems[xi].style.backgroundColor = 'white';
        }
    }
  }
}


// isFormEmpty(document.uniqueFormName); // For uniquely-named forms
// isFormEmpty(document.forms[2]);       // For a form whose name is not unique

function isFormEmpty(objForm){
  var arrElems = objForm.elements;
  var empty = true;
  var debug = '';

  for(var xi=0; xi < arrElems.length; xi++) {
    // On saute les éléments non identifiés (comme fieldset...)
    // sinon la boucle se plante (pas d'attribut type)
    if (! arrElems[xi].type)
      continue;
    // Traitement des éléments de saisie
    formFieldType = arrElems[xi].type.toLowerCase();
    switch(formFieldType) {
      case "text": case "hidden": case "password": case "textarea":
        if (arrElems[xi].value != '') {
          empty = false;
          debug += ' '+xi+arrElems[xi].name;
        }
        break;
      case "radio": case "checkbox":
        if (arrElems[xi].checked) {
          empty = false;
          debug += ' '+xi+arrElems[xi].name;
        }
        break;
      default:
        if(formFieldType.indexOf("select") != -1)
          // Si -1: rien n'est sélectionné. Si 0: premier élément (vide)
          if (arrElems[xi].selectedIndex > 0) {
            empty = false;
            debug += ' '+xi+arrElems[xi].name+'='+arrElems[xi].selectedIndex;
          }
    }
  }
  return (empty);
}

/*
**
** Fonction pour les <form onSubmit="...">
**
*/

function MySubmit(oForm) {
  if (isFormEmpty(oForm)) {
    alert("ATTENTION\n\n" +
          "Vous devez remplir au moins un des critères pour\n" +
          "pouvoir lancer la recherche");
    return;
  }

  // SaveForm(oForm);
  SaveForm($('enquete'));

  oForm.submit();
}

/*
**
** Association des actions onSubmit, onChange aux éléments
** de formulaire qui en ont besoin.
**
*/

/*
  <input type="submit" value="Chercher"
         onClick="MySubmit(this.form); return false;" />
  <input type="reset" value="Vider le formulaire" onClick="ResetForm(document.rechcombi)">
*/

function prepareFormButtons() {
  if (!document.getElementsByTagName) return false;

  var inputs = document.getElementsByTagName("input");
  for (var i=0; i < inputs.length; i++) {
    var type = inputs[i].getAttribute("type");
    if (type == "submit") {
      inputs[i].onclick = function() {
        MySubmit(this.form);
        return false;
      }
    } else if (type == "reset") {
      inputs[i].onclick = function() {
        ResetForm(this.form);
        return false;
      }
    }
  }
}

Event.observe(window, "load", prepareFormButtons);



