function VerifierFormulaire(id_msg_erreur){
	
	var tabErreur = new Array();
	
	var dicoChamps = new Array();
	
	var bUploaded = new BytesUploaded('/video/cgi/upload/taille_fichier.php');
	
	var jour;
	
	var mois;
	
	var annee;
	
	var mesErreurDate;
	
	
	/**
	 * cette fonction permet d'ajouter un message d'erreur a la liste des erreurs
	 * @param erreur le message d'erreur
	 */
	this.ajouterErreur = function(erreur){
		tabErreur.push(document.createTextNode(erreur));
		tabErreur.push(document.createElement('br'));
		
	}
	
	
	/**
	 * Cette fonction affiche tout les messages d'erreurs
	 */
	this.afficherErreur = function(){
		document.getElementById(id_msg_erreur).removeChild(document.getElementById(id_msg_erreur).firstChild);
		var debut = 'Désolé, votre modification n’a pu être prise en compte :';
		var debut_erreur = document.createElement('strong');
		var span = document.createElement('span');
		debut_erreur.appendChild(document.createTextNode(debut));
 		span.appendChild(debut_erreur);
 		span.appendChild(document.createElement('br'));
 		for(var node in tabErreur){
 			span.appendChild(tabErreur[node]);
 		}
 		span.appendChild(document.createElement('br'));
 		document.getElementById(id_msg_erreur).appendChild(span);
 		tabErreur = new Array();
		window.location.href = "#top";
	}


	/**
	 * rajoute un champs de formulaire a verifier
	 */	
	this.setChamps = function(msgErreur,id){
		dicoChamps[msgErreur] = document.getElementsByName(id);
	}
	
	this.removeChamps = function(msgErreur){
		dicoChamps[msgErreur] = "";
	}
	
	/**
	 * ajoute une et une seule date a verifier
	 */
	this.setDate = function(msgErreur,s_jour,s_mois,s_annee){
		mesErreurDate = msgErreur;
		jour = document.getElementsByName(s_jour)[0];
		mois = document.getElementsByName(s_mois)[0];
		annee = document.getElementsByName(s_annee)[0];
		
	}
	
	
	/**
	 * Cette fonction permet de verifier le contenu du formulaire
	 */
	this.verifier = function(){
		
		// vidage de tous les set Champs
		this.removeChamps("- Le titre de la vidéo doit être indiqué");
		
		// remplissage de tous les Champs
		verif.setChamps("- Vous devez choisir une vidéo","f_fichierselectionne");
		verif.setChamps("- Vous devez choisir une vidéo de taille inférieur à " + tailleMaxFichier + " MO","f_tailleok");
		
		verif.setChamps("- Le titre de la vidéo doit être indiqué","f_libelle_video");
		verif.setChamps("- Le sous-titre de la vidéo doit être indiqué","f_libelle_secondaire_video");
		verif.setDate("- La date doit etre une date valide","f_jour","f_mois","f_annee");
		verif.setChamps("- La catégorie de la vidéo doit être indiquée","f_categorie[]");
		verif.setChamps("- La description de la vidéo doit être indiquée","f_description_video");
		verif.setChamps("- Les informations complémentaires sur la vidéo sont obligatoires","f_description_longue_video");
		if(document.formulaire_video.f_prob_droits_musicaux.checked)this.setChamps("- Vous devez détailler les musiques utilisées avec la vidéo","f_commentaire_musiques_utilisees");	
		else this.removeChamps("- Vous devez détailler les musiques utilisées avec la vidéo");	
		verif.setChamps("- La certification de la vidéo doit être cochée","f_certification");

		
		var valide = true;
		
		
		var fichierUploadEnErreur = false;
		
		// on passe chaque champs en stocke
		for(var msgErreur in dicoChamps){
			//si c'est un champs de text,une seule case a cocher, ou un champs de fichier
			if(dicoChamps[msgErreur].length == 1){
				
				
				
				// si le champs est un "imput text" ou textarea 
				var champs = dicoChamps[msgErreur][0];
				
				if ((champs.type == "text") || (champs.type == "textarea")){
					
					// si le champs est vide on affiche une erreur et on entour le champs
					if(!champs.value){
						champs.style.border = "4px solid red";
						valide = false;
						this.ajouterErreur(msgErreur);
					}else{
						// sinon on supprime le bord rouge s'il existe
						champs.style.border = "1px solid #A5ACB2";
					}
				// si c'est une case a cocher
				}else if(champs.type == "hidden"){
					// si le champs est vide on affiche une erreur et on entour le champs
					if(champs.value == "" || !champs.value){
						fichierUploadEnErreur = true;
						champs.parentNode.style.border = "4px solid red";
						champs.parentNode.style.background = "red";
						valide = false;
						this.ajouterErreur(msgErreur);
					}else{
						if(!fichierUploadEnErreur){
							// sinon on supprime le bord rouge s'il existe
							champs.parentNode.style.border = "none";
							champs.parentNode.style.background = "none";
						}
					}
					if(champs.name == "f_tailleok"){
						var champsTailleOk = document.getElementById("f_tailleok");
						champsTailleOk.value = "1";
					}
					
				// si c'est une case a cocher
				}else if(champs.type == "checkbox"){
					// si la case n'est pas cocher une erreur et on entour le champs
					if(!champs.checked){
						champs.parentNode.style.border = "4px solid red";
						champs.parentNode.style.background = "red";
						valide = false;
						this.ajouterErreur(msgErreur);
					}else{
						champs.parentNode.style.border = "none";
						champs.parentNode.style.background = "none";
					}
				// si c'est un champs de saisi de fichier
				}else if(champs.type == "file"){
					if(!champs.value){
						champs.parentNode.style.border = "4px solid red";
						valide = false;
						this.ajouterErreur(msgErreur);
					}else{
						champs.parentNode.style.border = "none";
					}
				}
			// s'il y a plusieur case
			}else if(dicoChamps[msgErreur].length >= 1){
				var tab_champs = dicoChamps[msgErreur];
				
				// on verifie qu'il y a au moins une case de cocher
				var coche = false;
				for(var i=0; i<tab_champs.length;i++){
					coche = coche || tab_champs[i].checked;
				}
				
				// si non: on ne valide pas la formulaire
				if(!coche){
					dicoChamps[msgErreur][0].parentNode.parentNode.parentNode.parentNode.parentNode.style.border = "4px solid red";
					dicoChamps[msgErreur][0].parentNode.parentNode.parentNode.parentNode.parentNode.style.background = "red";
					valide = false;
					this.ajouterErreur(msgErreur);
				}else{
					dicoChamps[msgErreur][0].parentNode.parentNode.parentNode.parentNode.parentNode.style.border = "none";
					dicoChamps[msgErreur][0].parentNode.parentNode.parentNode.parentNode.parentNode.style.background = "none";
				}
				
			}

		}
		
		// on verifie si la date saisi est une date valide
		// si non on ne valide pas le formulaire
		if(!estDateValide(jour.value,mois.value,annee.value)){
			valide = false;
			jour.parentNode.style.border = "4px solid red";
			jour.parentNode.style.background = "red";
			this.ajouterErreur(mesErreurDate);
		}else{
			jour.parentNode.style.border = "none";
			jour.parentNode.style.background = "none";
		}
		
		// si le formulaire est valide on upload le fichier
		
		
		
		if(valide){
			document.getElementById(id_msg_erreur).removeChild(document.getElementById(id_msg_erreur).firstChild);
			var span = document.createElement('span');
			document.getElementById(id_msg_erreur).appendChild(span);
			flashUpload();
		}else{
			this.afficherErreur();	
		}
		return false;
	}
	
	
	/**
	 * Cette fonction permet de verifier la validité d'une date
	 */
	function estDateValide(vJour,vMois,vAnnee) {
		// on verifie si c'est une annee bisextile
		var fevrier = 28;
	      if (vAnnee%4 == 0 && vAnnee%100 !=0 || vAnnee%400 == 0) fevrier = 29;
	      // puis on verifie que les valeurs sont coherentes
	      var nbJours = new Array(31,fevrier,31,30,31,30,31,31,30,31,30,31);
	      return ( vMois >= 1 && vMois <=12 && vJour >= 1 && vJour <= nbJours[vMois-1]);
  	}
	
	


	
}