
function Formulaire(formulaire)
// constructeur de la classe (en entrée : l'attribut "name" du formulaire à valider)
{
   // variables membres
   this.form=formulaire; // nom du formulaire
   this.erreurs=new Array(); // tableau des champs contenant des erreurs de saisie

   // tableaux des règles de validation appliquées aux champs
   this.regles=new Array();
   this.messages=new Array();
   this.validations=new Array();
   this.params=new Array();

   // méthodes
   this.regle=regleChamp;
   this.nettoyer=nettoyerChaine;
   this.valider=validerForm;
   this.liste=listeErreurs;
}



function regleChamp(champ, type, message, param)
/* ajoute une règle de validation :
- "champ" est la valeur de l'attribut "name" du champ
- "type" est la règle de validation proprement dite
- "message" est le message d'erreur en cas de validation erronée
- "param" est un paramètre facultatif, utilisé par ceratines règles */
{
   this.regles.push(champ);
   this.validations.push(type);
   this.messages.push(message);
   this.params.push(param);
}

function listeErreurs()
// retourne la liste des erreurs
{
   var x, liste="";
   
   // construction de la chaîne
   for(x=0; x<this.erreurs.length; x++) {
	   liste+="-"+this.erreurs[x]+"";
   }
   return liste;
}


function nettoyerChaine(chaine)
// supprime les espaces en début et fin de chaîne (équivalent à la fonction PHP "trim()")
{
   regex=new RegExp("(^ +)|( +$)", "g");
   chaine=chaine.replace(regex, "");

   return chaine;
}

function validerForm()
// valide le formulaire : chaque champ doit vérifier les règles qui lui ont été définies
{

/*
alert(document.AddArticle[0].name); // titre
alert(document.AddArticle[1].name); // chapo
alert(document.AddArticle[2].name); // corps
alert(document.AddArticle[3].name); // tag
alert(document.AddArticle[4].name); // contentObjectId
alert(document.AddArticle[5].name); // AddArticle UGC
alert(document.AddForum[0].name); // titre
alert(document.AddForum[1].name); // message
alert(document.AddForum[2].name); // contentObjectId
alert(document.AddForum[3].name); // AddForum UGC
alert(document.AddVideo[0].name); // titre
alert(document.AddVideo[1].name); // embed
alert(document.AddVideo[2].name); // contentObjectId
alert(document.AddVideo[3].name); // AddVideo UGC
alert(document.AddPhoto[0].name); // titre
alert(document.AddPhoto[1].name); // MAX_FILE_SIZE
alert(document.AddPhoto[2].name); // fichier
alert(document.AddPhoto[3].name); // contentObjectId
alert(document.AddPhoto[4].name); // AddPhoto UGC
alert(document.AddBlog[0].name); // adresse
alert(document.AddBlog[1].name); // description
alert(document.AddBlog[2].name); // url
alert(document.AddBlog[3].name); // contentObjectId
alert(document.AddBlog[4].name); // AddBlog UGC
alert(document.AddAstuce[0].name); // titre
alert(document.AddAstuce[1].name); // description
alert(document.AddAstuce[2].name); // contentObjectId
alert(document.AddAstuce[3].name); // AddAstuce UGC
*/
   var x, regex, msg="";
   eval("var formulaire=document."+this.form+";");
   
   // si aucune règle n'a été définie, la validation est toujours vraie
   if(!this.regles.length) {
   	return true;
   }
   
   // on examine chaque champ
   for(x=0; x<this.regles.length; x++)
   {      
      switch(this.validations[x])
      {
		  case "coche" :
			eval("if(!formulaire."+this.regles[x]+".checked) this.erreurs.push(this.messages[x]);");
            break;

         // le champ doit avoir le même contenu qu'un autre
         case "comparaison":
			// on effectue au préalable un petit nettoyage sur le champ à valider
			eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");	
			
            eval("if(formulaire."+this.regles[x]+".value!='"+this.params[x]+"') this.erreurs.push(this.messages[x]);");
            break;
            
         /* le champ doit avoir une certaine longueur : c'est le dernier paramètre sous la forme "min,max"
         (0 signifiant pas de minimum ou de maximum) */
         case "longueur":
			// on effectue au préalable un petit nettoyage sur le champ à valider
			eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");	
         
            eval("var longueur=formulaire."+this.regles[x]+".value.length;");
            if(longueur)
            {
               var temp=this.params[x].split(",");
               mini=parseInt(temp[0]);
               maxi=parseInt(temp[1]);
               
               if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.messages[x]);
            }
            break;

         // le champ (uniquement s'il est rempli) doit vérifier une expression régulière
         case "regex":
			// on effectue au préalable un petit nettoyage sur le champ à valider
			eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");	
			         
            switch(this.params[x])
            {
				// quelques exemples...
				case "mail":
					regex=new RegExp("^[a-z0-9_]([.-]?[a-z0-9_]+)+@[a-z0-9_]([.-]?[a-z0-9_]+)+\.([a-z]{2,4}|[a-z]{6})$", "gi");
					break;
				case "ville":
					regex=new RegExp("^[^-][0-9]+$", "g");
					break;
				case "alpha_num":
					regex=new RegExp("^[_a-z0-9]+$", "gi");
					break;
				case "num":
					regex=new RegExp("^[0-9]+$", "g");
					break;
				case "code_postal":
					regex=new RegExp("^(0[1-9]|[1-9][0-9])[0-9]{3}$", "g");
					break;                  
				case "date":
					regex=new RegExp("^[0-3][0-9][/-.](0[1-9]|1[0-2])[/-.][0-9]{4}$", "g");
					break;
				// par défaut (non vide)
				default:
					regex=new RegExp("^.+$", "g");
            }
            
            eval('if(formulaire.'+this.regles[x]+'.value!="" && !regex.exec(formulaire.'+this.regles[x]+'.value)) this.erreurs.push(this.messages[x]);');
            break;
            
         case "requis":
         default:
			// on effectue au préalable un petit nettoyage sur le champ à valider
			eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");	
			         
         // le champ doit juste être rempli
            eval('if(formulaire.'+this.regles[x]+'.value=="") this.erreurs.push(this.messages[x]);');
      }
   }
   
	returnverifform = new Array('','');

	returnverifform[0]=true;
	returnverifform[1]='';

	// en cas d'erreur, on affiche les différents messages
	if(this.erreurs.length){
		var msg=this.liste();

		returnverifform[0]=false;
		returnverifform[1]=msg;
		return returnverifform;
	}
	// en cas de succès, on envoie le formulaire
	return returnverifform;
}

// valide le premier formulaire
function validerMainForm(ClassIdentifier,NameForm){
	
	var formulaire=new Formulaire(NameForm);
	switch(ClassIdentifier)
	{
		case 'astuce_ugc' :
			var titre = document.AddAstuce[0].name; //document.RegisterUGC[1].name;
			var description = document.AddAstuce[1].name; //document.RegisterUGC[3].name;
			formulaire.regle(titre, "requis", "viooGroupMembreLayerTitleAstuce");
			formulaire.regle(titre, "longueur", "viooGroupMembreLayerTitleAstuce", "5,50");
			formulaire.regle(description, "requis", "viooGroupMembreLayerDescriptionAstuce");
			formulaire.regle(description, "longueur", "viooGroupMembreLayerDescriptionAstuce", "10,500");
		break;
		case 'forum_ugc' :
			//var titre = document.AddForum[0].name; //document.RegisterUGC[1].name;
			var description = document.AddForum[0].name; //document.RegisterUGC[3].name;
			//formulaire.regle(titre, "requis", "viooGroupMembreLayerTitle");
			formulaire.regle(description, "requis", "viooGroupMembreLayerMessage");
			formulaire.regle(description, "longueur", "viooGroupMembreLayerMessage", "10,500");
		break;
		case 'blog_ugc' :
			var titre = document.AddBlog[0].name; //document.RegisterUGC[1].name;
			var description = document.AddBlog[1].name; //document.RegisterUGC[3].name;
			var url = document.AddBlog[2].name;
			formulaire.regle(titre, "requis", "viooGroupMembreLayerTitleBlog");
			formulaire.regle(titre, "longueur", "viooGroupMembreLayerTitleBlog", "5,50");
			formulaire.regle(description, "requis", "viooGroupMembreLayerDescriptionBlog");
			formulaire.regle(description, "longueur", "viooGroupMembreLayerDescriptionBlog", "10,500");
			formulaire.regle(url, "requis", "viooGroupMembreLayerUrl");
		break;
		case 'video_ugc' :
			var titre = document.AddVideo[0].name; //document.RegisterUGC[1].name;
			var embed= document.AddVideo[1].name; //document.RegisterUGC[3].name;
			formulaire.regle(titre, "requis", "viooGroupMembreLayerTitleVideo");
			formulaire.regle(embed, "requis", "viooGroupMembreLayerVideo");
			formulaire.regle(embed, "longueur", "viooGroupMembreLayerVideo", "25,0");

		break;
		case 'photo_ugc' :
			var imageName = document.AddPhoto[0].name; //document.RegisterUGC[1].name;
			var imagePath = document.AddPhoto[1].name; //document.RegisterUGC[5].name;
			formulaire.regle(imageName, "requis", "viooGroupMembreLayerName");
			formulaire.regle(imagePath, "requis", "viooGroupMembreLayerImage");
		break;
		case 'article_ugc' :
		
			var titre = document.AddArticle[0].name; //document.RegisterUGC[1].name;
			var chapo = document.AddArticle[1].name; //document.RegisterUGC[3].name;
			var body = document.AddArticle[2].name; //document.RegisterUGC[5].name;
			var tag = document.AddArticle[3].name; //document.RegisterUGC[7].name;

			formulaire.regle(titre, "requis", "viooGroupMembreLayerTitleArticle");
			formulaire.regle(titre, "longueur", "viooGroupMembreLayerTitleArticle","5,50");
		
			formulaire.regle(chapo, "requis", "viooGroupMembreLayerChapo");
			formulaire.regle(chapo, "longueur", "viooGroupMembreLayerChapo", "10,150");

			formulaire.regle(body, "requis", "viooGroupMembreLayerBody");
			formulaire.regle(body, "longueur", "viooGroupMembreLayerBody", "10,5000");
	
			formulaire.regle(tag, "requis", "viooGroupMembreLayerTags");
			
		break;	
		case 'comment' :
			/*
			alert('1'+document.form_reaction_send[1].name);
			alert('1'+document.form_reaction_send[1].value);
			*/
			var formulaire=new Formulaire("form_reaction_send");
			var description = document.form_reaction_send[1].name;
			formulaire.regle(description, "requis", "Message");
			formulaire.regle(description, "longueur", "Message", "10,2500");
		break;
		
		default :
			break;
	}
	return formulaire.valider();
}


//'viooGroupMembreLayerTitle', 'viooGroupMembreLayerName', 'viooGroupMembreLayerTitle', 'viooGroupMembreLayerChapo', 
//'viooGroupMembreLayerImage', 'viooGroupMembreLayerBody', 'viooGroupMembreLayerDescription', 'viooGroupMembreLayerVideo', 
//'viooGroupMembreLayerMessage','viooGroupMembreLayerTags'

function CheckFormUGC(ClassIdentifier,NameForm){
	var returnForm = validerMainForm(ClassIdentifier,NameForm);
	
	// on initialise le tableau
	var tab_register;
	var idOK;
	var idKO;
	switch(ClassIdentifier)
	{
		case 'article_ugc' :
			tab_register=['viooGroupMembreLayerTitleArticle', 'viooGroupMembreLayerChapo', 'viooGroupMembreLayerBody', 'viooGroupMembreLayerTags' ];
			idOK="viooErrorOkArticle";
			idKO="viooErrorPasokArticle";
      break;
		case 'astuce_ugc' :
			tab_register=['viooGroupMembreLayerTitleAstuce', 'viooGroupMembreLayerDescriptionAstuce' ];
			idOK="viooErrorOkAstuce";
			idKO="viooErrorPasokAstuce";
			break;
		case 'forum_ugc' :
			//tab_register=['viooGroupMembreLayerTitle', 'viooGroupMembreLayerMessage' ];
			tab_register=['viooGroupMembreLayerMessage' ];
			idOK="viooErrorOkForum";
			idKO="viooErrorPasokForum";
			break;
		case 'video_ugc' :
			tab_register=['viooGroupMembreLayerTitleVideo', 'viooGroupMembreLayerVideo' ];
			idOK="viooErrorOkVideo";
			idKO="viooErrorPasokVideo";
			break;
		case 'photo_ugc' :
			tab_register=['viooGroupMembreLayerName', 'viooGroupMembreLayerImage' ];
			idOK="viooErrorOkPhoto";
			idKO="viooErrorPasokPhoto";
			break;
		case 'blog_ugc' :
			tab_register=['viooGroupMembreLayerTitleBlog', 'viooGroupMembreLayerDescriptionBlog','viooGroupMembreLayerUrl' ];
			idOK="viooErrorOkBlog";
			idKO="viooErrorPasokBlog";
			break;
		case 'comment' :
			tab_register=['Message'];
			idOK="viooErrorOk";
			idKO="viooErrorPasOk";
			break;
		default:
			tab_register=[];
			idOK="viooErrorOk";
			idKO="viooErrorPasOk";
			break;
	}
		for(i = 0 ; i < tab_register.length ; i++) {
			var e=document.getElementById(tab_register[i] + "Ok");
			//if(e != null) e.style.display='block';
			if(e != null)   e.style.display='inline';
			var e=document.getElementById(tab_register[i] + "Pasok");
			var e2=document.getElementById(tab_register[i] + "Error");
			if(e != null) {  e.style.display='none';
			                 e2.style.display='none';
			              }
	}
	var e=document.getElementById(idOK);
	if(e != null) e.style.display='block';
	var e=document.getElementById(idKO);
	if(e != null) e.style.display='none';

	if (!returnForm[0])
	{	
		errors=returnForm[1].split('-');

		for (i=1; i < errors.length; i++) {
			var e=document.getElementById(errors[i] + "Ok");
			if(e != null) e.style.display='none';
			var e=document.getElementById(errors[i] + "Pasok");
			var e2=document.getElementById(errors[i] + "Error");
			//if(e != null) e.style.display='block';
			if(e != null) {  e.style.display='inline';
			                 e2.style.display='block';
			              }
		}
			var e=document.getElementById(idOK);
			if(e != null) e.style.display='none';
			var e=document.getElementById(idKO);
			if(e != null) e.style.display='block';
		
	}
	else{viooLayerActionWait();}
	return returnForm[0];
}
