function VerifieSaisie(f,sbmit,Tab_T) 
{
	if(f != null) {
	if ( typeof( f ) != "undefined" ) {
		
		var i = f.elements.length ;
		var j=0;
		var tab=new Array(i);
		var Ok=true;
		var ConfirmMail=-1;
		var Fichier=-1;
		// On parcourt le formulaire
		for (j=0; j<i; j++)
		{
			
			// initialisation du tableau a 0		
			tab[j]=0;

			if(typeof(f.elements[j].name) != "undefined") {
			ReinitialisationErreur(f.elements[j]);


			// Si on a une confirmation de Mail
			if (f.elements[j].name=='CEmail')
			{
				ConfirmMail=j;
			}
			
			
			// Si on a un ajout de fichier
			if (f.elements[j].name =='file' && f.name !='ModifDoc') 
			{
				Fichier=j;
				if(f.elements[j].value =='')
				{
					tab[j] = 5 ; 
				}
				
			}
			
			// Si on a un ajout de fichier
			if (Fichier>-1) 
			{
				if (f.elements[j].name=='TITRE_F') 
				{
					if (tab[Fichier] == 5 ) {
						tab[Fichier] = 0 ;
					}
					else
					{
						if (f.elements[j].value=='') {
							tab[j] = 5;
						}
						else
						{
							tab[j] =VerifGuill(f.elements[j]);
						}
					}
				}
			}
				
			// verification des champs obligatoire
			if (f.elements[j].name.substring(0,4)=='test') 
			{

				switch (f.elements[j].type) {
				case 'select-one':
					if (f.elements[j].value =='0' || f.elements[j].value =='')
					{
						tab[j]=5;
					}
					break ;
					
				case 'file':
					break;	
				case 'text':
					if (f.elements[j].value =='0' || f.elements[j].value =='')
					{
						tab[j]=5;
					}
					else
					{
						tab[j]=VerifGuill(f.elements[j]);
					}
					break ;
					
				default: 
					if (f.elements[j].value =='')
					{
						tab[j]=5;
					}
					break;
				}
			}
			
			// Vérification du type du champ
			if(f.elements[j].value != "")
			{
				switch(f.elements[j].id)
				{				
					case "1": // numérique
						tab[j]=VerifNum(f.elements[j]);
						break;
					case "2": // Date
						tab[j]=VerifDate(f.elements[j]);
						break;
					case "3": // Longueur du texte
						tab[j]=VerifTextArea(f.elements[j],1200);
						break;
					case "4": // E-mail
						tab[j]=VerifMail(f.elements[j]);
						break; 
					case "ICode4": //  Numérique
						tab[j]=VerifNum(f.elements[j]);
						break;
					case "6": //  Guillemet
						tab[j]=VerifGuill(f.elements[j]);
						break;
				}
			}
			}
		}
		// fin verification du formulaire

		// Vérification de l'email de confirmation
		if(ConfirmMail>-1)
		{
			if (f.HEmail.value != f.testEmail.value ) 
			{
				if (f.CEmail.value != f.testEmail.value ) 
				{
					tab[ConfirmMail]=4;
				}
			}
		}
		
		// si les elements ne sont pas tous a 0, le formulaire n'est pas bon
		for (j=0; j<i;j++)
		{
			if(tab[j]!=0)
			{
				Ok=false;
			}
		}
		
		// si le formulaire est ok, on l'envoi, sinon on affiche les erreurs
		if(Ok)
		{
			if(Fichier>-1)
			{
				// cacheOn();
			}

			if (sbmit == 1) {
				f.submit();
			}
			else
			{
				return true;	
			}
		}
		else 
		{
			AffichageErreur(f,tab,Tab_T);
			return false;
		}
	}
}
}

/*function cacheOn()
{
var nava = (document.layers);
var dom = (document.getElementById);
var iex = (document.all);
if (nava) { cach = document.cache }
else if (dom) { cach = document.getElementById("cache").style }
else if (iex) { cach = cache.style }
largeur = screen.width;
hauteur=screen.heigth;
cach.left = Math.round((largeur/2)-200);
cach.visibility = "visible";
}*/

function ReinitialisationErreur(f)
{
	if(f.id == "1" || f.id == "2" || f.id == "3" || f.id == "4" || f.name.substring(0,4)=='test' || f.name=='TITRE_F' )
	{
	// 	document.getElementById(f.name).innerHTML = '';
	}
}

function AffichageErreur(f,tab,Tab_T)
{
	var j=0;
	if(!(typeof(f)=='string')) {
		var i = f.elements.length;
	} else {
		var i = 1;
	}
	if((tab instanceof Array)==false) {
		var swi = tab;
		tab = new Array(1);
		tab[0] = swi;
	}
	var ChampOblig=false;
	var erreur='';
	for(j=0; j<i;j++)
	{
		switch(tab[j])
		{
			case 1:
				erreur = Tab_T[1]; // Format numérique //
				break;
			case 2:
				erreur = Tab_T[2]; // '* Format date: (jj/mm/aaaa) *<br/>';
				break;
			case 3:
				erreur = Tab_T[3]; // '* Texte trop long *<br/>';
				break;
			case 4:
				erreur = Tab_T[4]; // '* Email non valide *<br/>';
				break;
			case 5:
				erreur = Tab_T[5]; // '* Champ obligatoire *<br/>';
				break;
			case 7:
				erreur = Tab_T[7]; // '* Guillemet *<br/>';
				break;
		}
		/*if((f.elements[j].id == "1" && tab[j]==1) || (f.elements[j].id == "2" && tab[j]==2) || 
		   (f.elements[j].id == "3" && tab[j]==3) || (f.elements[j].id == "4" && tab[j]==4) 
		   || (f.elements[j].name.substring(0,4)=='test' && tab[j]==5 ) 
		   || (f.elements[j].name=='TITRE_F' && tab[j]==5 ))
		{*/
		
		if (tab[j]!=0) 
		{
			if(!(typeof(f)=='string')) {
				var iderreur=f.elements[j].name;
			} else {
				var iderreur=f;
			}
			document.getElementById(iderreur).innerHTML = erreur;
			document.getElementById(iderreur).style.color='red';
			document.getElementById(iderreur).style.fontWeight="bold";
		}
	}
	alert(Tab_T[6]);
}

// Fonction pour vérifier qu'un champ ne contiennen pas de guillemet "
function VerifGuill(d)
{
	TextInput = d.value;
	Num = TextInput.indexOf('"',0);
	if (Num == -1) {
		return(0);
	}
	return(7); 
}

// fonction pour vérifier qu'un champ contient que des chiffres
function VerifNum(d)
{
	if(isNaN(d.value))
	{
		return(1);	// le champ ne contient pas un nombre		 
	}
	else
	{
		return(0);
	}
}

// fonction qui verifie la validité d'une date au format jj/mm/aa ou jj/mm/aaaa
function VerifDate(d) {
	 var formatdate = document.getElementById('formatdate').value;
	 e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
	 
	 if (!e.test(d.value)) // On teste l'expression régulière pour valider la forme de la date
	 {
		return(2);
	 }
	 else
	 {
		 if(formatdate == 'jj/mm/aaaa' || formatdate == 'dd/mm/yyyy' || formatdate == 'jj/mm/aa' || formatdate == 'dd/mm/yy' )
		 {
			 // On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
			 j = parseInt(d.value.split("/")[0], 10); // jour
			 m = parseInt(d.value.split("/")[1], 10); // mois
		 } else if(formatdate == 'mm/jj/aaaa' || formatdate == 'mm/dd/yyyy' || formatdate == 'mm/jj/aa' || formatdate == 'mm/dd/yy')
		 {
			 j = parseInt(d.value.split("/")[1], 10); // jour
			 m = parseInt(d.value.split("/")[0], 10); // mois
		 }
		 a = parseInt(d.value.split("/")[2], 10); // année
		 // Si l'année n'est composée que de 2 chiffres on complète automatiquement
		 if (a < 1000) {
		 if (a < 89) a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
		 else a+=1900;
		 }
		
		 // Définition du dernier jour de février
		 // Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
		 if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
		 else fev = 28;
		
		 // Nombre de jours pour chaque mois
		 nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
		
		 // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
		if (!( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1]))
		{
			return(2);
		}
		else
		{
			return(0);
		}
	 }
} 

// limite correspond au nombre de caracteres autorisés
function VerifTextArea(area,limite)
{
	lg = area.value.length;
	if (lg > limite )
	{
		return(3);
	}
	else
	{
		return(0);
	}
} 

// fonction qui vérifie la validité d'un email
function VerifMail(d)
{
   if(d.value=='')
   {
	   return(0);   
   }
   var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
   if(!regex.test(d.value))
   {
	  return(4);
   }
   else
   {
	  return(0);
   }
}

function NameDoc(f, Nchmp, NchmpAj,Tab_Lng) 
{
	var resultat ;
	if (VerifExt(f.elements['' + Nchmp + ''],Tab_Lng)) 
	{
		resultat = GetBaseName(f.elements['' + Nchmp + ''].value);
		f.elements['' + NchmpAj + ''].value = resultat ;
	}
}

function AfficheComment(i)
{
	if(i!=3)
	{
		document.getElementById("bouton").style.display="none";
		document.getElementById("comment").style.display="inline";
		document.formulaire.help.value=i;
	}
	else
	{
		document.getElementById("bouton").style.display="inline";
		document.getElementById("comment").style.display="none";
	}

}

// Function que valide un formulaire ou qui affice une erreur
function ValidForm(Isok, Tab_Lng) {
	if (Isok) {
		alert(Tab_Lng[1]);
		return false;
	}
	else
	{
		return true;
	}
}


// Function qui vérifie l'existance ou non de document dans un dossier (Si il y a un document alors interdiction de supprimer.
function verifDocIndossier(i,Tab_Lng) 
{
	if (i != 0) {
		alert(Tab_Lng[1]);
		return false ;
	}
	if (window.confirm(Tab_Lng[2])) 
	{
		return true;
	} 
	else 
	{
		return false;
	}
}


function back()
{
history.go(-1);
}

function VerifExt(path,Tab_Lng)
{
		 var TempChaine = path.value;
         if (TempChaine!="")// si le champ fihier n'est pas vide
         {
            var Extension = GetExt(TempChaine) ; 

			if (ExtInterdit(Extension.toUpperCase())) 
			{
				path.value="";
				alert(Tab_Lng[1] + Extension.toUpperCase() );
				return false
			}
			return true;
		 }
}

function ExtInterdit(extension)
{
	var interdit = new Array("JS","PHP","PHP3","PHP4","PHP5");
	var ok=false;
	var i=0;
	var nb=interdit.length;
	for(i=0; i<=nb; i++)
	{
		if(extension == interdit[i])
		{
			ok=true;
		}
	}
	return(ok);
}

function GetBaseName(namefile)
{
	if(namefile.lastIndexOf("\\") == -1)
	{
		return(namefile);
	}
	else
	{
		var pos = namefile.lastIndexOf("\\");
		var long = namefile.length;
		return(namefile.substring(pos+1,long));
	}
}

function GetExt(namefile)
{
	if(namefile.lastIndexOf(".") != -1)
	{
		var pos = namefile.lastIndexOf(".");
		var nbchar = namefile.length;
		ext = namefile.substring(pos+1,nbchar);
		return(ext);
	}
	else // pas d'extension
	{
		return(namefile);
	}
}

function formateVitesse(tps,espace,forceMB)
{
	var unit;
	if(   ((tps > 999999)  ||  forceMB)   &&   !forceKB)
	{
		tps = tps/(1024*1024);
		tps = tps.toString();

		var testnum = tps.replace( /^(\d+\.\d).*/, '$1' ); // la vitesse comporte un chiffre

		if(testnum == '0.0')
			testnum = tps.replace( /^(\d+\.\d\d).*/, '$1' ); // la vitesse comporte un chiffre aprés la virgule

		if(testnum == '0.00')
			testnum = tps.replace( /^(\d+\.\d\d\d).*/, '$1' ); // la vitesse comporte deux chiffres aprés la virgule

		tps = testnum;
		unit = 'Mo';
	}
	else
	{
		tps = parseInt(tps/(1024));
		unit = 'Ko';
	}
	return tps + espace + unit;
}

function formateTemps(tps,space)
{
	var unit;
	if(tps >= (60*60)) // si le temps restant dépasse une heure
	{
		var secs_left = tps % (60*60);
		var mins_left = secs_left / 60;
		mins_left = mins_left.toString();
		mins_left = mins_left.replace( /^(\d+)\..*/, '$1' ); 
		mins_left = mins_left.replace( /^(\d)$/, '0$1' );

		tps = tps/(60*60);
		tps = tps.toString();
		tps = tps.replace( /^(\d+)\..*/, '$1' );

		tps = tps + space + 'h' + space + mins_left + space + 'm';
		space = '';
		unit = '';
	}
	else if(tps >= 60) // si le temps dépasse 1 minute
	{
		var secs_left = tps % 60;
		secs_left = secs_left.toString().replace( /^(\d)$/, '0$1' );

		tps = tps/60;
		tps = tps.toString();
		tps = tps.replace( /^(\d+)\..*/, '$1' ); 
		tps = tps.replace( /^(\d)$/, '0$1' ); 

		tps = tps + space + 'm' + space + secs_left + space + 's';
		space = '';
		unit = '';
	}
	else // le temps est de moins d'une minute
		unit = 's';
	return tps + space + unit;
}


function goajax(page)
{

	theRequest = false;  
	if(window.XMLHttpRequest)
	{
		theRequest = new XMLHttpRequest();
		if(theRequest.overrideMimeType)
			theRequest.overrideMimeType('text/xml');
	}
	else if(window.ActiveXObject)
	{
		try
		{
			theRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try
			{
				theRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if(!theRequest)
	{
		alert('Error: could not create XMLHTTP object.');
		return false;
	}
// on envoi les infos provenant de etat.cgi a la fonction updateProgress
	theRequest.open('POST', page, true);
	theRequest.onreadystatechange = updateProgress ;
	theRequest.send(page); 
}

function Upload_Affichage(rep,total,envoier,taille)
{
	switch(rep)
	{
		// Erreur lors de l'envoi du fichier sur le serveur.
		case 1:
			insertFile(0,0);
			document.getElementById("traitement").style.display="none";
			document.getElementById("erreurupload").style.display="inline";
			TraitementUpload(1);
			break;
		// Espace limite atteint.
		case 2:
			insertFile(0,0);
			document.getElementById("traitement").style.display="none";
			document.getElementById("espacelimite").style.display="inline";
			TraitementUpload(2);
			break;
		//  En cours	
		case 3:
			// on affiche les tailles en Mo (taille totale, taille envoyée)
			document.getElementById("sizetotal").innerHTML = (total/1048576).toFixed(2)+"Mo";
			document.getElementById("sizetemp").innerHTML = (envoier/1048576).toFixed(2)+"Mo";
			
			// traitement pour afficher les données
			var xx = new Date();
			var tabtemps = parseInt(xx.getTime()/1000) - starttime;
			var pourcent = Math.ceil((envoier/total)*100);
			var vitesse = formateVitesse(envoier/tabtemps, '&nbsp;', 0);
			var totaltemps = parseInt( tabtemps/(envoier/total) );
			var tempsR = formateTemps( (totaltemps - tabtemps), '&nbsp;');
			var tempsE = formateTemps(tabtemps, '&nbsp;');
					
			// affichage pourcentage, progressBar, vitesse
			document.getElementById("pourcent").innerHTML = pourcent+"%";
			document.getElementById('progressBar').style.width = parseInt(pourcent) + '%';
			document.getElementById('vitesse').innerHTML = vitesse+ '/s';
			document.getElementById('tempsR').innerHTML = tempsR;
			document.getElementById('tempsE').innerHTML = tempsE;
			TraitementUpload(3,total,envoier,taille);
			break;
		// Erreur lors de l'envoi du fichier sur le serveur.
		case 4:
			insertFile(0,0); // on envoi la taille du fichier en convertissant en ko
			document.getElementById("traitement").style.display="none";
			document.getElementById("erreurupload").style.display="inline";
			TraitementUpload(4);
			break;
		// All is allright
		case 5:
			// on insert dans la bdd le document
			insertFile(Math.round(taille/1048,576),1); // on envoi la taille du fichier en convertissant en ko
			document.getElementById("sizetemp").innerHTML = document.getElementById("sizetotal").innerHTML;
			document.getElementById("pourcent").innerHTML = "100%";
			document.getElementById('vitesse').innerHTML = '';
			document.getElementById('progressBar').style.width = '100%';
			document.getElementById("traitement").style.display="none";
			document.getElementById("uploadok").style.display="inline";
			TraitementUpload(5);
			break;	
	}
	
}

function updateProgress(update)
{
	// si l'état a changé, on traite les infos
	if(theRequest.readyState == 4)
	{
		if(theRequest.status == 200)
		{
			var update = new Array();
			update = theRequest.responseText.split('|');
			// update est un tableau contenant les infos envoyées par le script perl etat.cgi
			// les infos sont séparées par '|'
			if(update[0] == '1' && update[1] == '1')
			{
				reponse= 1; // Cela signifie que le script d'upload n'a pas pus s'executer (Cf log apache)
			}
			
			var espace = document.getElementById("espace").value;
			espace = espace * 1048576; // on convertie l'espace en octet
			if(update[0] > espace) // si le fichier est plus gros que l'esapce dispo alors on arrete le script et on redirige
			{
				reponse = 2;
			}
			else if(update[0] != '0' && update[1] !='0' && stopp != 15) // on traite les infos si l'upload n'est pas terminé et si l'upload ne s'est pas stoppée
			{
				if(document.getElementById("sizetemp").innerHTML == (update[1]/1048576).toFixed(2)+"Mo")
				{
					stopp +=1;
				}
				reponse = 3;
				// si on rafraichissement de la page, la valeur uploader est la meme qu'avant, on ajoute 1 a la variable stopp
				// rafraichissement de la page toutes les secondes, on réenvoie le numero de dossier temp
			}
			else if(stopp == 15) // si stopp est a 15, c'est que la taille envoyée n'a pas évoluée depuis 15 secondes, on considère que l'upload a échouée
			{
				reponse = 4;
			}
			else // le script etat.cgi a envoyé 0|0 , l'upload est donc terminé
			{	
				reponse = 5;
			}
			
			Upload_Affichage(reponse,update[0],update[1],update[2]);
		}
	}
}

function goUpload(f)
{
	document.getElementById("haut").style.display="none";
	document.getElementById("bas").style.display="inline";
	document.getElementById("traitement").style.display="inline";
	// on crée un n° de dossier temp aléatoire
	var ladate=new Date()
	ladate = ladate.getHours().toString() + ladate.getMinutes().toString() + ladate.getSeconds().toString();
	UID = Math.round(10000*Math.random()) + ladate;
	var xx = new Date();
	starttime = parseInt(xx.getTime()/1000);
	// starttime contient l'heure en seconde du début du transfert
	urlsite = document.getElementById("urlsite").value;
	var url = urlsite+"cgi-bin/etat.cgi?num="+UID;
	// on change l'url du formulaire d'envoi, l'url contient le n° du dossier temp
	f.action = "/cgi-bin/upload.cgi?num="+UID;
	f.submit();
	// tempo obligatoire pour laisser le temps au script cgi de créer le fichier temp
	window.setTimeout("goajax('"+url+"')",1500);
}

function temp() {
	return true; 	
}



function VerifMdp(f,Tab_T) {
	if(f.elements[2].value != f.elements[1].value)
	{
		alert(Tab_T[1]);
		return false;
	}
	else
	{
		if((f.elements[1].value.length < 5) || (f.elements[1].value.length > 13))
		{
			alert(Tab_T[2]);
			return false;
		}
	}
	return true;
}

function VerifLoginMdp(f,Tab_T) {
	if(f.elements[0].value == "" || f.elements[1].value== "")
	{
		alert(Tab_T[1]);
		return false;
	}
	return true;
}



function changement() {
	change = true;
}

function confirmchangement(url,Tab_T) {
	if(change) {
		if(confirm(Tab_T[1])) {
			change = false;
			window.location = url;
		}
	} else {
		window.location = url;
	}
	return false;
}

function confirmDelDesc(url,question,Tab_T) {
	var ok = true;
	if(question == 'desinscrire') {
		if(!window.confirm(Tab_T[1])) {
			ok = false;
		}
	} else if(question == 'supprimer') {
		if(!window.confirm(Tab_T[2])) {
			ok = false;
		}
	}
	if(ok) {
		change = false;
		url += document.getElementById('CCONTACTMODIF').value;
		window.location.replace(url);
	}
}
