function formControlListener(nForm) {
          var bIsValide = true;
          var aFormCtrlSchemes = [["isNotEmpty","Le champ \"%s\" doit \352tre renseign\351."],
            ["isInt","Le champ \"%s\" ne correspond pas \340 un entier valide."]];
          var cLabels = nForm.getElementsByTagName("label");
          var nField;
          for (var i=0; bIsValide && i<cLabels.length; i++) {
            if ((cLabels[i].htmlFor=="") ||
              !(nField=document.getElementById(cLabels[i].htmlFor))) continue;
            for (var j=0; bIsValide && aFormCtrlSchemes[j]; j++) {
              if (hasClassName(cLabels[i],aFormCtrlSchemes[j][0])) {
                if (!eval(aFormCtrlSchemes[j][0]+"(nField.value)")) {
                  bIsValide = false;
                  var textContent = getTextContent(cLabels[i]).replace(/\s{2,}/g," ");
                  textContent = textContent.replace(/^[\s:*]+|[\s:*]+$/g,"");
                  alert(aFormCtrlSchemes[j][1].replace("%s",textContent));
                }
              }
            }
            if (bIsValide && hasClassName(cLabels[i],"extendedCtrl")) {
              bIsValide = eval("extendedCtrl_"+nField.id+"(nField)");
            }
          }
          if (!bIsValide) {nField.focus();}
          return bIsValide;
        }
        function isNotEmpty(s) {return s.replace(/^\s+|\s+$/g,"")!="";}
        function isInt(s) {return isNotEmpty(s)?parseInt(s, 10)==s:true;}
        function hasClassName(oNode,className) {
            return ((" "+oNode.className+" ").indexOf(" "+className+" ")!=-1);
        }
        function getTextContent(oNode) {
          if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
          switch (oNode.nodeType) {
            case 3: // TEXT_NODE
            case 4: // CDATA_SECTION_NODE
              return oNode.nodeValue;
              break;
            case 8: // COMMENT_NODE
            case 7: // PROCESSING_INSTRUCTION_NODE
              if (getTextContent.caller!=getTextContent) {
                return oNode.nodeValue;
              }
              break;
            case 9: // DOCUMENT_NODE
            case 10: // DOCUMENT_TYPE_NODE
            case 12: // NOTATION_NODE
              return null;
              break;
          }
          var _textContent = "";
          oNode = oNode.firstChild;
          while (oNode) {
            _textContent += getTextContent(oNode);
            oNode = oNode.nextSibling;
          }
          return _textContent;
        }
        function extendedCtrl_confirmpass(nField) {
          var result = true;
          if (nField.value!=document.getElementById("password").value) {
            result = false;
            alert('La valeur du champ "Confirmation du mot de passe" doit \352tre identique \340 la valeur saisie pour le champ "Mot de passe".');
          }
          return result;
        }
