function MM_findObj(n, d) { //v4.01
  var p,i,x; 
  
  if(!d) d=document;
  
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    	d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);}
		
  if(!(x=d[n])&&d.all) x=d.all[n];
  
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
  			x=MM_findObj(n,d.layers[i].document);
			
  if(!x && d.getElementById) x=d.getElementById(n);
  //alert(n+" "+x.value);
  return x;
}

function MM_validateForm() { // avec 4 arguments
	var ok,i,d,p,q,nm,test,num,min,max,car,errors='',args=MM_validateForm.arguments;
	var regEmail	= new RegExp("^[a-zA-Z0-9._-]+@[A-Za-z0-9-]{2,}([.][A-Za-z0-9-]{2,}){1,3}$","");
	var regMailing	= new RegExp("^([a-zA-Z0-9._-]+@[A-Za-z0-9-]{2,}([.][A-Za-z0-9-]{2,}){1,3};*){1,}$","");
	var regString   = new RegExp("^[a-zA-Z]+$","");
	var regEntier	= new RegExp("^[0-9]+$","");
	var regDecimal	= new RegExp("^[0-9]+[,.]?[0-9]*$","");
	var regFloat	= new RegExp("^[0-9]+[.]?[0-9]*$",""); //ligne ajoutée pour mansour
	var regDate		= new RegExp("^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$","i");
	var regFileAll	= new RegExp("(^[/(/)a-z0-9_-]+[.])[A-Za-z0-9]{3,4}$","i");
	var regFileJPG	= new RegExp("(^[/(/)a-z0-9_-]+[.])((jpg)|(jpeg))$","i");
	var regFileMp	= new RegExp("(^[/(/)a-z0-9_-]+[.])((mp3)|(mp4))$","i"); //ligne ajoutée pour paradise
	var regFileImg	= new RegExp("(^[/(/)a-z0-9_-]+[.])((gif)|(jpg)|(jpeg)|(png))$","i");
	var regFileAnim	= new RegExp("(^[/(/)a-z0-9_-]+[.])((gif)|(jpg)|(jpeg)|(swf)|(png))$","i");
	var regFileFich	= new RegExp("(^[/(/)a-z0-9_-]+[.])((gif)|(jpg)|(doc)|(pdf)|(zip)|(bmp)|(wmv)|(swf))$","i");
	var regFileMov	= new RegExp("(^[/(/)a-z0-9_-]+[.])((gif)|(jpg)|(jpeg)|(mov)|(mpg)|(mpe)|(mpeg)|(avi)|(wmv)|(rpm)|(ra)|(rm)|(fli)|(asf)|(asx))$","i");
	var regSuppr	= new RegExp("^(oui)$","i");
	var regFolder	= new RegExp("^[a-z0-9_-]*$","i");
	var regTel		= new RegExp(("^[0-9/(/)_-]+$",""));

	for (i=0; i<(args.length-3); i+=4) { 
  		test=args[i+2];
		field=args[i+3];
		val=MM_findObj(args[i]);

		if (val) {	
			nm=val.name;
			val=val.value			
			
			if (test.indexOf('Trim')!=-1) 
				val = val.trim(); // fonction trim

			if (val!="" || val=="null") {	 
				if (test.indexOf('isFolder')!=-1)
					if (!regFolder.exec(val)) errors+='- '+field+' ne doit contenir que des caractères alphanumériques (de A à Z, 0 à 9, _ ou -)\n';

				if (test.indexOf('isSuppr')!=-1)
					if (!regSuppr.exec(val)) errors+='- '+field+' doit contenir "Oui" si vous voulez supprimer l\'enregistrement, sinon cliquez sur le bouton annuler\n';

				if (test.indexOf('isEmail')!=-1)
					if (!regEmail.exec(val)) errors+='- '+field+' doit contenir une address e-mail valide Ex : nom.prenom@domaine.fr\n';

				if (test.indexOf('isMailing')!=-1)
					if (!regMailing.exec(val)) errors+='- '+field+' doit contenir une address e-mail valide Ex : nom.prenom@domaine.fr\n\nPour envoyer à plusieurs personnes, séparer les adresses par un ;\n';

				if (test.indexOf('isLimitecar')!=-1) {
					p=test.indexOf(':');
					car=test.substring(p+1);
		        	if (car > 0 && val.length>car) errors+='- '+field+' comporte '+val.length+' caractères et ne doit pas dépasser '+car+' caractères\n'; 
		    	}
				if (test.indexOf('isDate')!=-1 || test.indexOf('isADate')!=-1) {
					ok = false;
					if( test.indexOf('isADate')!=-1 && val=="Toujours visible")
						ok = true;

					if (!regDate.exec(val) && !ok)
		        		 errors+='- '+field+' doit être une date au format jj/mm/yyyy\n';
					else if (!ok) { // la date existe t-elle ?
					
						// tab_mois[0] est janvier, [11] est decembre
						var tab_mois = new Array(31,29,31,30,31,30,31,31,30,31,30,31);	
						var tab_moisList = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");

						jour = parseInt(eval(val.substring(0,2)));					
						mois = parseInt(eval(val.substring(3,5)));												
						an = parseInt(eval(val.substring(6,10)));
							
						// année bissextile ?
						if ((an % 100 != 0 && an % 4 == 0) || (an % 400 == 0)) { tab_mois[1] = 29; }
						else { tab_mois[1] = 28; }						
						
						if(mois>12 || mois<1)
							errors+='- '+field+' contient un mois invalide.\n';
							
						if(jour>31 || jour<1)
							errors+='- '+field+' contient un jour invalide.\n';
						
						mois = mois - 1;
						
						// on teste si la date choisie est anterieure au lundi 20 decembre 1582
						if ((an * 10000 + mois * 100 + jour) < 15821220)
							errors+='- '+field+' contient une date antérieure au 20 décembre 1582, hors du calendrier Grégorien. Veuillez sélectionner une date plus récente.\n';

						else if (tab_mois[mois] < jour) { // on verifie si la date est coherente
							errors+='- Il n\'y a pas ' + jour + ' jours en ' + tab_moisList[mois] + ' ' + an + ' mais ' + tab_mois[mois] + '. Veuillez choisir une autre date.\n';
						}
					}								
		    	}
				if (test.indexOf('isSelect')!=-1)
					if	(val == "null" && test.charAt(0) == 'R') errors+='- La première option de la liste '+field+' n\'est pas une sélection valide. Choisissez une des autres options.\n';

				if (test.indexOf('isEntier') != -1)
			        if (!regEntier.exec(val)) errors+='- '+field+' ne doit contenir que des Entiers.\n';
					
				if (test.indexOf('isTel') != -1)
			        if (!regTel.exec(val)) errors+='- '+field+' ne doit contenir que des Entiers et des parentaises.\n';
					
				if (test.indexOf('isString') != -1)
			        if (!regString.exec(val)) errors+='- '+field+' ne doit contenir que des Lettres.\n';

				if (test.indexOf('isEntierRange') != -1) {
					d=test.indexOf(':');
					p=test.indexOf('to');											
		        	min=parseInt(test.substring(d+1,p)); max=parseInt(test.substring(p+2));
			        if (val<min || max<val) errors+='- '+field+' doit contenir un nombre Entier compris entre '+min+' et '+max+'.\n';
			    }
				if (test.indexOf('isNombreMax') != -1) {			
					d=test.indexOf('>');
					p=test.indexOf(':');						
	        		max=parseFloat(test.substring(d+1,p));
			        if (val>max) errors+='- Le rapport > ou = des champs '+field+' est incorrect.\n';
				}
				if (test.indexOf('isDecimal') != -1)
					if (!regDecimal.exec(val)) errors+='- '+field+' ne doit contenir que Chiffres et vigule.\n';
					
				if (test.indexOf('isFloat') != -1)
					if (!regFloat.exec(val)) errors+='- '+field+' ne doit contenir que Chiffres et point. Ex: 120.36\n';

				if (test.indexOf('isDecimalRange') != -1) {
					d=test.indexOf(':');
					p=test.indexOf('to');						
		        	min=test.substring(d+1,p); max=test.substring(p+2);						
			        if (val<min || max<val) errors+='- '+field+' doit contenir un nombre compris entre '+min+' '+val+'  et '+max+'.\n';
			    }
				if (test.indexOf('isMin') != -1) {			
					d=test.indexOf('<');
					p=test.indexOf(':');						
	        		min=test.substring(d+1,p);																		
			        if (val.length<min) errors+='- '+field+' doit comporter au moins '+min+' caractères.\n';
				}
				// fractionne aux caractères \ ou / ou  pour ne récupérer que le nom de fichier
				if (test.indexOf('isFileAll') != -1) {
				   	var tab = val.split(/\\|\//);
					var ext = val.substr(val.lastIndexOf(".") + 1); 
					ext = ext.toLowerCase(); 			
					if (!regFileAll.exec(tab[tab.length-1]) || ext=="exe" || ext=="com" || ext=="bat") errors+='- '+field+' contient un NOM de fichier incorrect : \"'+tab[tab.length-1]+'\" n\'est pas un fichier valide.\nLes fichiers dont l\'extention est .exe, .com ou .bat ne sont pas autorisés.\n';		
			    }
				if (test.indexOf('isFileMov') != -1) {					
				   	var tab = val.split(/\\|\//);
					if (!regFileMov.exec(tab[tab.length-1])) errors+='- '+field+' contient un NOM de fichier incorrect : \"'+tab[tab.length-1]+'\" n\'est pas un fichier Vidéo valide\n';		
			    }
				if (test.indexOf('isFileImg') != -1) {
				   	var tab = val.split(/\\|\//);
					if (!regFileImg.exec(tab[tab.length-1])) errors+='- '+field+' contient un NOM de fichier incorrect : \"'+tab[tab.length-1]+'\" n\'est pas un fichier Image valide\n';		
			    }
				if (test.indexOf('isFileJPG') != -1) {
				   	var tab = val.split(/\\|\//);
					if (!regFileJPG.exec(tab[tab.length-1])) errors+='- '+field+' ne doit contenir que des images .JPG/.JPEG\n';		
			    }
				if (test.indexOf('isFileMp') != -1) {//if ajouté pôur paradise
				   	var tab = val.split(/\\|\//);
					if (!regFileJPG.exec(tab[tab.length-1])) errors+='- '+field+' ne doit contenir que des images .JPG/.JPEG\n';		
			    }
			    if (test.indexOf('isFileFich') != -1) {
				   	var tab = val.split(/\\|\//);
					if (!regFileFich.exec(tab[tab.length-1])) errors+='- '+field+' contient un NOM de fichier incorrect : \"'+tab[tab.length-1]+'\" n\'est pas un fichier valide\n';														        
			    }
				if (test.indexOf('isFileAnim') != -1) {
				   	var tab = val.split(/\\|\//);
					if (!regFileAnim.exec(tab[tab.length-1])) errors+='- '+field+' contient un NOM de fichier incorrect : \"'+tab[tab.length-1]+'\" n\'est pas un fichier valide\n';		
			    }		
				
			} else if (test.charAt(0) == 'R') errors += '- '+field+' est obligatoire.\n';
		}
	}
	if (errors)
		alert('Veuillez corriger  les données suivantes :\n\n'+errors);
	
	document.MM_returnValue = (errors == '');
}

function Compte_car(Target, maxi, nomchamp){
	var CharsLeft = Target.value.length;
	if (CharsLeft > maxi ){
		Target.value = Target.value.substring(0,maxi);
		CharsLeft = maxi;								
	}
	nomchamp.value = CharsLeft+' / '+maxi+' c. Maxi';	
}

function disableForm() {
	if (document.all || document.getElementById) { // ns6+ ou ie4+
		var aForm = document.forms;
		var tempobj, tempobjtype, i, ii;

		for (ii=0;ii<aForm.length;ii++) {	// tous les formulaires de la page					
			for (i=0;i<aForm[ii].length;i++) {
				tempobj = aForm[ii][i];				
				if (tempobj.type != null) {
					tempobjtype = tempobj.type.toLowerCase();
					if (tempobjtype == "submit" || tempobjtype == "button" || tempobjtype == "reset" || tempobjtype == "image")
						tempobj.disabled = true;
				}
			}
		}
	}
}

// Ajoute la fonction trim comme méthode de l'objet String.
String.prototype.trim = function()
{ return this.replace(/(^\s*)|(\s*$)/g, ""); }

