/* ====================================== FORMULAIRES ====================================================*/

function validUserInfo(userForm) {

  var showMsg = true;
  /*
     Lorque cette fonction est appelée sans aucun paramètre
     (cas d'une sortie d'un champ qui rappelle cette fonction)
     alors il n'est pas besoin d'afficher un message d'erreur puisque ça déja était fait à la validation
     du formulaire
     par contre l'interêt de rappeler cette fonction à la sortie d'un champ est de vérifier
     si le champ a bien été corrigé et d'indiquer visuellement cet état
  */

  if (userForm==null) {
    userForm = document.forms["userinfo"];
    showMsg  = false;
  }

  var labels   = document.getElementsByTagName("LABEL");
  var notValid = false;

  var emailFA    = "";


  for (var i=0;i<labels.length;i++) {

    notValid       = false;
    var id         = labels[i].htmlFor;
    var inputElt   = userForm.elements[id];
    var inputText  = inputElt.value;
    var endTitle   = "";


    switch(id) {

      // CHAMPS OBLIGATOIRES
      case "raison" :

        if (notValid = (inputText =="")) {
          labels[i].title  = "La raison sociale doit être renseignée";
        }
        break;


      case "adr1SI" :

        if (notValid = (inputText =="")) {
          labels[i].title  = "L'adresse du siège social";
          labels[i].title += " n'a pas été renseignée";
        }
        break;

      case "cpSI" :
        notValid = trim(inputText) == "" || isNaN(inputText) || inputText.length != 5;
        if (notValid) {
          labels[i].title  = "Le code postal du siège social";
          labels[i].title += trim(inputText) == "" ? " doit être renseigné" : " est invalide";
        }
        break;

      case "villeSI" :

        if (notValid = (inputText =="")) {
          labels[i].title  = "La ville du siège social n'a pas été renseignée";
        }
        break;


     	case "emailSI" :
     	  notValid = trim(inputText) == ""        || inputText.indexOf("@") == -1 ||
     	             inputText.indexOf(".") == -1 || inputText.length < 5;
     	  if (notValid) {
     	    labels[i].title  = "Le courriel du siège social";
     	    labels[i].title += (trim(inputText) == "") ? " doit être renseigné" : " est invalide";
     	  }
     	  break;
     	 //CHAMPS FACULTATIFS

    	 case "telSI"   :
    	 case "tel06SI" :
    	 case "faxSI"   :
    	 case "faxFA"   :

    	   notValid = trim(inputText) != "" && ( isNaN(inputText) || inputText.length != 10 );
    	   if (notValid) {
    	       labels[i].title  = "Le numéro de ";
    	       labels[i].title += id.substr(0,3) == "tel" ? "téléphone" : "fax";
    	       if (id.substr(3,2) == "06") {
    	       	labels[i].title += " portable";
    	       }
    	       endTitle = " est invalide";
    	   }
    	   break;

    	 case "emailFA" :
     	   notValid = trim(inputText) != "" &&
     	             (inputText.indexOf("@") == -1 ||
     	              inputText.indexOf(".") == -1 || inputText.length < 5);
     	   if (notValid) {
     	      labels[i].title  = "Le couriel de facturation est invalide";
     	   }
     	   else
     	   	emailFA  = inputText;

     	   break;

     	 case "adr1FA"  :

         notValid = emailFA!="" && trim(inputText) == "";

         if (notValid) {
           labels[i].title = "L'adresse de facturation n'a pas été renseignée";
         }
         break;

       case "cpFA" :
         notValid = emailFA!="" && (trim(inputText) == "" ||
                                    isNaN(inputText)      || inputText.length != 5);
         if (notValid) {
           labels[i].title  = "le code postal de facturation ";
           labels[i].title += trim(inputText) == "" ? "n'est pas renseigné " : "est invalide";

         }
         break;

       case "villeFA" :
         notValid = emailFA!="" && trim(inputText) == "";
         if (notValid) {
           labels[i].title = "La ville de facturation n'a pas été renseignée";
         }
         break;

       case "telFA" :
         notValid = emailFA!="" && (trim(inputText) == "" ||
                                    isNaN(inputText)      || inputText.length != 10);
         if (notValid) {
           labels[i].title  = "le téléphone de facturation ";
           labels[i].title += trim(inputText) == "" ? "n'est pas renseigné" : "est invalide";
         }
         break;
    }

    if (!showMsg && IEBrowser && IEVersion < 7) {
    	inputElt.className = "";
    }

    if (notValid) {

      labels[i].style.color      = "red";
      //labels[i].style.fontWeight = "bold";

      if (endTitle!="") {
        switch(id.substr(id.length-2,2)) {
          case "SI" :
            labels[i].title += " du siège social";
            break;
          case "FA" :
            labels[i].title += " de facturation";
        }
        labels[i].title += endTitle;
      }

      if (showMsg) {
        //Vérification à la sortie du champ que la donnée a bien été corrigée
        alert(labels[i].title);
        inputElt.onblur = new Function("validUserInfo();");
        inputElt.focus();
      }
      return false;
    }
    else {
      labels[i].removeAttribute("style");
      labels[i].removeAttribute("title");
    }
  }
  return true;
}
/*Formulaire login*/
function validLogin(loginForm) {

	var doValid = loginForm.elements["log"].value.length == 15 &&
	              loginForm.elements["pass"].value != "";

	if (!doValid) {

		if (loginForm.elements["log"].value.length != 15)
		  loginForm.elements["log"].focus();
		else
			loginForm.elements["pass"].focus();

	}
	return doValid;
}

/*Formulaire recherche avançée*/
function validRech(form) {

  var datas = "";
  for (i=0;i<form.elements.length;i++) {

  	if (form.elements[i].type=="text") {
  		datas += trim(form.elements[i].value);
  	}
  }
  if (datas =="" && form.name.toLowerCase()!="rechcomc") {
  	alert('Vous devez renseigner au moins un critère de recherche !');
  	form.elements["ref"].focus();
  	return false
  }
  else
    return true;
  //return form.name.toLowerCase()=="rechcomc" || datas !="";
}

function validFilter(filterForm) {

	return trim(filterForm.elements["filterValue"].value) != "";
}



/*
  Fonction déclenchée sur le click d'une case à cocher (onClick) :
    'mainCbxName' devient la checkbox principale et conditionne la selection de toutes les autres
    checkbox qui peuvent être selectionnable ( suivant condition(s) )
*/
function cbxSelDeSel(mainCbxName)
{
  if ( (mainCbxName == null)  ) exit;
  var isChecked = false;
  var inputs    = document.getElementsByTagName("INPUT");

  for (var i=0;i<inputs.length;i++) {
    if ( (inputs[i].type == 'checkbox') && (inputs[i].name != mainCbxName.name) ) {

      var row = inputs[i].parentNode.parentNode;
      //Si la checkbox principale est sélectionnée
      if (mainCbxName.checked) {
        //si la checkbox est associée à un champ texte dont la valeur est positive => on peux cocher
        if ((inputs[i-1].type=='text') && (inputs[i-1].value > 0)) {
          inputs[i].checked = true;
        }
        //sinon on ne la coche pas sauf si elle est associée à aucun champ texte
        else {
          inputs[i].checked = !(inputs[i-1].type == 'text');
        }
      }
      else
        inputs[i].checked = false;
      // Cette variable permet de savoir si au moins une checkbox a pu être cochée
      if (!isChecked) isChecked = isChecked || inputs[i].checked;

      changeRowColor(inputs[i]);
    }
  }
  /*
    Si on a demandé a cocher toutes les checkbox mais qu'aucune n'est sélectionnable alors
    la checkbox principale est déselectionnée
  */
  if ((mainCbxName.checked) && (!isChecked)) {
    mainCbxName.checked = false;
    mainCbxName.blur();
  }
}

//Met à jour la valeur d'un élement input d'un formulaire
function setValue(inputId,val) {
  actionInput = document.getElementById(inputId);
  if (actionInput==null) exit;
  actionInput.value = val;
  actionInput.form.submit();
}
//Recupère l'indice de l'élément (en partant de 0) dans le formulaire
function getElementNum(elt)
{

  if ( (elt == null) || (elt.form == null) ) return false;

  var i = 0;

  while ((i<elt.form.elements.length) && (elt.form.elements[i] !== elt)) i++;

  if (i > elt.form.elements.length) return false;

  return i;
}

//Evenement déclenché sur la prise de focus d'un champ input de type panier
function InputFocusPan(input) {
	if (IEBrowser && IEVersion < 7) {
	  input.className = "inputBgColor";
  }
	oldValue = input.value;
}

function inputBlurPan(input) {

	var i = getElementNum(input);

  if ( (i===false) || (input.type !="text") ) exit;

  input.className = "";

  // Si le numéro de l'élément à été trouvé on va retrouver la checkbox associée
  var cbx = input.form.elements[i+1];

  var row = input.parentNode.parentNode;

  // si l'élement suivant est une checkbox
  if (cbx.type == "checkbox") {
    // on coche la case si la valeur saisie a été modifiée
    if (!cbx.checked)
      cbx.checked = (oldValue > 0) && (oldValue != input.value) && input.value > 0;

    if (input.value == "" || input.value <= 0) input.value = oldValue;

    changeRowColor(cbx);
  }
}

/*
Fontion déclenchée sur l'evenement de sortie d'un champ texte (onBlur) du formulaire :
 - Si la valeur du champ est renseignée et positive, coche la checkbox associée
 - Sinon met à blanc le champ et décoche la checkbox associée
*/
function doSelect(textInput)
{
  // Recherche du numéro de l'élement fourni
  var i = getElementNum(textInput);
  if ( (i===false) || (textInput.type !="text") ) exit;

  textInput.className = "";

  // Si le numéro de l'élément à été trouvé on va retrouver la checkbox associée
  var cbx = textInput.form.elements[i+1];
  // si l'élement suivant est une checkbox
  if (cbx.type == "checkbox") {
    // on coche la case si la valeur saisie est numérique et positive
    cbx.checked = (textInput.value > 0);


    //Dans la cas contraire on efface la valeur invalide saisie
    if (!cbx.checked) textInput.value = "";
    changeRowColor(cbx);

  }
}

function changeRowColor(Checkbox) {

	if (!Checkbox || (Checkbox.type !="checkbox")) exit;

	if (!Checkbox.parentNode || !Checkbox.parentNode.parentNode) exit;

	var row = Checkbox.parentNode.parentNode;
	if(Checkbox.checked) {
    if (row.className !="") {
      row.className+= " selectedRow";
    }
    else {
      row.className = "selectedRow";
    }
  }
  else {
    row.className = trim(row.className.replace(/selectedRow/,""));
  }
}

/*
Fonction déclenchée sur le (onClick):
  Ne laisse la checbox cochée que si le champ text associé est correctement renseigné
  Sinon donne le focus à ce champ pour saisie
*/
function doCheck(cbxInput) {

  var i = getElementNum(cbxInput);

  if ( (i===false) || (cbxInput.type !="checkbox") ) exit;

  var textInput  = cbxInput.form.elements[i-1];

  if ((cbxInput.checked == true) && ( textInput.value =="" || textInput.value<=0 ) ) {
    cbxInput.checked = false;
    textInput.focus();
  }
  else {
    changeRowColor(cbxInput);
  }

}

function validinscription(SigninForm)
{
  var toto = "";
  var posi;
  var champsobligatoires = "";
  for (i=1;i<SigninForm.elements.length;i++) {
  	toto = SigninForm.elements[i].name;
  	alert(toto);
  	toto = SigninForm.elements[i].type;
   	alert(toto);
  	toto = SigninForm.elements[i].value;
  	alert(toto);
  	if (toto.value == "") {
    	if (toto.IndexOf(toto.name) != "adre_telSI" &&
          toto.IndexOf(toto.name) != "adre_tel06SI" &&
          toto.IndexOf(toto.name) != "faxSI")  {
       		champsobligatoires += trim(SigninForm.elements[i].name+",");
    	}
  	}
     if (toto != null) {
        posi = toto.lastIndexOf("*");
        if (toto == "adressefacturation") {
          if (SigninForm.elements[i].checked == false)
          break;
        }
  	if (SigninForm.elements[i].type=="text" && posi != -1 && SigninForm.elements[i].value == "") {
               if (i != SigninForm.elements.length-1){
  		champsobligatoires += trim(SigninForm.elements[i].name+",");
  	       }
  	       else {
  		champsobligatoires += trim(SigninForm.elements[i].name);
  	       }

    	}
     }
  }

  if (champsobligatoires != "") {
    //alert('Les champs suivants sont obligatoires : '+champsobligatoires);
    return false;
  }
  else {
  	//alert("envoi mail");
        return true;
  }
}


function validTabForm(aForm) {

	if (aForm==null) return false;

	var isOk = false;


	for (var i=0;i<aForm.elements.length;i++) {

		var elt = aForm.elements[i];

		if (elt.nodeName == "INPUT" && elt.type=="text" ) {
			if (elt.value > 0) {
				isOk = true;
			}
			elt.blur();
		}
	}

	if (!isOk) {
		aForm.elements[0].focus();
	}
	return isOk;

}

function validSearchProd(aForm) {
	
	if (aForm==null) return false;
	
	if (aForm.name.toLowerCase() != "prod_search") return false;
	
	if ((aForm.searchtxt.value.toLowerCase() == "titre, auteur ou code") &&
	    (aForm.searchcde.value.toLowerCase() == "devis/commande")         	) 
	{
	  return false;
	}
	else {
		if ( ((trim(aForm.searchtxt.value.toLowerCase()) == "") &&
	        (aForm.searchcde.value.toLowerCase() == "devis/commande")) 
	       ||  
	       ((aForm.searchtxt.value.toLowerCase() == "titre, auteur ou code") &&
	        (trim(aForm.searchcde.value.toLowerCase()) == ""))
	     ) 
	  {	    
	    return false;
	  }
	}	
}