/*NKC formulaire validation
Version beta 0.2
Bugs report: please write maxime.loliee@linescort.com*/


document.write('<script type="text/javascript" src="../js/NKC_config_form.js"></script>');


function NKC_verifchamp(id, nbcMin, nbcMax, format,infobulle){   
	if( parseInt(infobulle) == 1 && infobulle != 'null' && infobulle != 'undefined' && infobulle != ''){
			var message = ecrireInfoBulles(format,nbcMin,nbcMax);
			var img = NKC_recup_config('imgNOK');
			var affichage_nok = '<a class="infoBulle" href="#">'+img+'<span>'+message+'</span></a>';
	}else{
		var affichage_ok = NKC_recup_config('imgOK');
		var affichage_nok = NKC_recup_config('imgNOK');
	}
    var MotifRegExp = null;
    var id_retour = 'r-'+id;
    var MotifRegExp_fin = '$';
    if(parseInt(nbcMin) != 0 && parseInt(nbcMax) != 0){
        MotifRegExp_quantifier = "{"+parseInt(nbcMin)+","+parseInt(nbcMax)+"}";
    }
	
    switch (format)
    {
      case 'string+':    MotifRegExp = '[\\w\\W]'; break;
      case 'string': MotifRegExp = '[\\w\\s_-\']'; break;
      case 'string-': MotifRegExp = '[a-zA-Z0-9_-]'; break;
      case 'char': MotifRegExp = '[a-zA-Z]'; break;
      case 'int': MotifRegExp = '[0-9]'; break;
      case 'float':MotifRegExp = '[\\d,.]'; break;
      case 'mail':    MotifRegExp = '([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}'; MotifRegExp_quantifier = ''; break;
      case 'dateYMD':    MotifRegExp = '\\d\\d\\d\\d-(0[0-9]|1[0-2])+-([0-2][0-9]|3[0-1])+\\b\\s*$'; MotifRegExp_quantifier = ''; MotifRegExp_fin =''; break;
      case 'dateYM':    MotifRegExp = '\\d\\d\\d\\d-(0[0-9]|1[0-2])+\\b\\s*$'; MotifRegExp_quantifier = ''; MotifRegExp_fin =''; break;
      case 'dateDMY':    MotifRegExp = '([0-2][0-9]|3[0-1])+-(0[0-9]|1[0-2])+-\\d\\d\\d\\d\\b\\s*$'; MotifRegExp_quantifier = ''; MotifRegExp_fin = ''; break;
      default: break;
    }

    if(document.getElementById(id)){
		  id = trim(id);
          var input = document.getElementById(id);
		  switch(input.type.toString()){
              case 'textarea':
			  case 'password':
			  case 'text':
              var regexp = new RegExp("^"+MotifRegExp+MotifRegExp_quantifier+MotifRegExp_fin,"i");
              var champ = input.value.toString();
              var resultat = regexp.test(champ);
			 
               if(resultat == false){
                  if(handle = document.getElementById(id_retour)){
                      handle.innerHTML = affichage_nok;
                  }else{
                      alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+id_retour+'"');          
                  }
                  return false;
              }else{
                  if(handle = document.getElementById(id_retour)){
                      handle.innerHTML = NKC_recup_config('imgOK');                
                  }else{
                      alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+id_retour+'"');
                  }
                  return true;
              }
              break;
              
			  case 'hidden':
				if(input.value == null || input.value == '' || input.value == 'undefined' ){
                    return false;
                }else{
                     return true;
                }
				break;
			  
              case 'checkbox':
              case 'radio':
                      champ_retour = 'r-'+input.name;
                      if(input.value == null || input.value == '' || input.value == 'undefined' ){
                        if(handle = document.getElementById(champ_retour)){
                            handle.innerHTML = NKC_recup_config('imgNOK');                          
                         }else alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+champ_retour+'"');
                    return false;
                    }else{
                         if(handle = document.getElementById(champ_retour)){
                            handle.innerHTML =  NKC_recup_config('imgOK');   
                         }else alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+champ_retour+'"');
                    return true;
                    }
              break;
              case 'select-one':
                      if(input.value == null || input.value == '' || input.value == 'undefined' ){
                        if(handle = document.getElementById(id_retour)){
                             handle.innerHTML = NKC_recup_config('imgNOK');
                         }else alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+id_retour+'"');  
                    return false;
                    }else{
                         if(handle = document.getElementById(id_retour)){
                             handle.innerHTML =  NKC_recup_config('imgOK');
                         }else alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+id_retour+'"');
                     return true;
                    }
              break;
          }
     }
  }
  function NKC_controleFormulaire(){
      var args = NKC_controleFormulaire.arguments;
      var i_err = 0;
      var erreurs = new Array();
      var errors = '';         
     
      if(NKC_recup_config('message') == 'inner'){
          var id_message = enleverDiese(args[args.length-1]);
          args[args.length-1] = '';
      }
     
      for (i=0; i<(args.length); i++){      
             var checkbox = isCheckbox(args[i]);
            // alert(args[i]+'->'+checkbox);
             if(checkbox != false ){     /* Si le champ est de type checkbox */
                 var nameChamp = enleverCodeCheckbox(args[i].toString());
                if(document.getElementsByName(nameChamp.toString())){
                     var tab_check = document.getElementsByName(nameChamp);
                     for (j=0; j<(tab_check.length); j++){    
                        if(tab_check[j].checked == true ){
                            var statut_check = 1;
                        }
                     }
                     var champ_retour = 'r-'+nameChamp;
                     if(statut_check != 1){
                             statut_check = null;
                             if(handle = document.getElementById(champ_retour)){
                                handle.innerHTML = NKC_recup_config('imgNOK');
                                 erreurs[i_err] = nameChamp;
                                 i_err++;
                              }else alert('Script mal configuré :\n\tAucun champ de retour trouvé avec l\'id :'+champ_retour);
                     }else{
                         if(handle = document.getElementById(champ_retour)){
                             handle.innerHTML =  NKC_recup_config('imgOK');
                         }else alert('Script mal configuré :\n\tAucun champ de retour trouvé avec l\'id :'+champ_retour);
                     }
                }else alert('Script mal configuré :\n\tAucun champ trouvé avec name="'+nameChamp+'"');
                }else{/*champ de type input text*/
                  if( input = document.getElementById(args[i])){
                      switch(input.type){
                          case 'select-one':
                          var resultat = NKC_verifchamp(args[i], '0', '0', 'value');
                          if(resultat == false){
                             erreurs[i_err] = args[i];
                             i_err++;
                            }
                         break;
						case 'hidden':
						  var resultat = NKC_verifchamp(args[i], '0', '0', 'value');
                          if(resultat == false){
                             erreurs[i_err] = args[i];
                             i_err++;
                            }
						  break;
					    case 'password':
                        case 'textarea':
                        case 'text':
                          var attribut = input.getAttribute('onKeyUp');
                          var parametres = attribut.toString().match(/'.*(?=\))/);
                          var parametres_clean = enleverQuotes(parametres.toString());
                          var parametres_split = new Array();
                          parametres_split = parametres_clean.toString().split(",");
                           if(parseInt(parametres_split.length) ==  4){
                               /*alert( parametres_split.length+'->NKC_verifchamp('+args[i]+','+parametres_split[0]+','+parametres_split[1]+', '+trim(parametres_split[2])+','+ trim(parametres_split[3])+')');*/
                              var resultat = NKC_verifchamp(args[i], parametres_split[0], parametres_split[1], trim(parametres_split[2]), trim(parametres_split[3]));
                           }else{
                               /*alert( parametres_split.length+'->NKC_verifchamp('+args[i]+','+parametres_split[0]+','+parametres_split[1]+', '+parametres_split[2]+')');*/
                               var resultat = NKC_verifchamp(parametres_split[0], parametres_split[1], parametres_split[2], parametres_split[3],parametres_split[4]);
                           }
                           if(resultat == false){
                                 erreurs[i_err] = args[i];
                              i_err++;
                            }
                         break;   
                         default:var erreur = ''; alert('Le champ avec l\'id="'+args[i]+'" est de type incorrect ('+input.type+')'); break;
                      }
                  }else if(args[i] != '') alert('Script mal configuré :\n\tAucune balise de retour trouvé avec id="'+args[i]+'"')
                
              }
      }
      if(erreurs.length > 0){
          var errors = "Les champs suivant sont mal remplis :\n";
          for (i=0; i<(erreurs.length); i++){
              if(i == 0 ) errors  += erreurs[i]; else errors  += ', '+erreurs[i];
          }
      }
      if(errors){
          if(NKC_recup_config('message') == 'alert'){ alert(errors);document.returnValue = false;}
          else if(NKC_recup_config('message') == 'inner'){
              if(handle = document.getElementById(id_message)){
                  handle.innerHTML = errors; document.returnValue = false;
              }else alert('Script mal configuré :\n\tAucune balise de retour ( pour le formulaire ) trouvé avec id ="'+id_message+'"');
          }
          document.returnValue = false;
      }
      else {document.returnValue = true;}
  }     
  function trim(s) {
      return s.replace(/^\s+/, '').replace(/\s+$/, '');
  }
  function enleverQuotes(s){
      var motif = new RegExp("\'","g");
      return s.replace(motif,'');
  }
  function enleverDiese(s){
      var motif = new RegExp("#+","g");
      return s.replace(motif,'');
  }
  function enleverCodeCheckbox(s){
      var motif = new RegExp("\\[0\\]");
      return  s.replace(motif,'');
  }
  function isCheckbox(s){
      var motif = new RegExp("\\[0\\]");
      return  motif.test(s,'');
  }  
  
  