function MM_findObj(n,d){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);return x;}

function MM_validateForm() { // 4 arguments
	var sM = "[a-z0-9_]+((-[a-z0-9_]+)|([.][a-z0-9_]+)|(_[a-z0-9_]+))*@[a-z0-9]+(([.]|-)[a-z0-9]+)*[.][a-z]{2,}";
	var sF = "(^[/(/)a-z0-9_-]+[.])";
	var sI = "(gif)|(jpg)|(jpeg)|(png)";

	var regEmail	= new RegExp("^" + sM + "$","i");
	var regMailing	= new RegExp("^((" + sM + ");?){1,}$","i");
	var regEntier	= new RegExp("^[0-9]+$","");
	var regDecimal	= new RegExp("^[0-9]+[,.]?[0-9]*$","");
	var regDate		= new RegExp("^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$","i");
	var regHeure	= new RegExp("^(([0-1][0-9])|(2[0-3]))(:[0-5][0-9]){2}$","i");
	var regFileAll	= new RegExp(sF + "[a-z0-9]{3,4}$","i");
	var regFileJPG	= new RegExp(sF + "((jpg)|(jpeg))$","i");
	var regFileImg	= new RegExp(sF + "(" + sI + ")$","i");
	var regFileFich	= new RegExp(sF + "(" + sI + "|(doc)|(pdf)|(zip)|(bmp)|(wmv)|(swf))$","i");
	var regFileMov	= new RegExp(sF + "(" + sI + "|(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 regColorHexa= new RegExp("^(#)+[0-9A-F]{6}$|^$","gi");

	var groupe, bCheck, j, min, max, i, tab, err='';
	var args = MM_validateForm.arguments;
	for(i=0; i<(args.length-3); i+=4) {
		var cdt=args[i+2], lbl=args[i+3], val=MM_findObj(args[i]);

		if (val) {
			val = val.value;
			if (cdt.indexOf('Trim')!=-1) val = val.replace(/(^\s*)|(\s*$)/g, "");

			if (val!="" || val=="null") {
				if (cdt.indexOf('isColorHexa')!=-1) if (!regColorHexa.test(val)) err+='- '+lbl+' doit être de la forme : #xxxxxx (soit x un caractère de A à F et 0 à 9)\n';
				if (cdt.indexOf('isFolder')!=-1) if (!regFolder.test(val)) err+='- '+lbl+' ne doit contenir que des caractères alphanumériques (de A à Z, 0 à 9, _ ou -)\n';
				if (cdt.indexOf('isSuppr')!=-1) if (!regSuppr.test(val)) err+='- '+lbl+' doit contenir "Oui" si vous voulez supprimer l\'enregistrement, sinon cliquez sur le bouton annuler\n';
				if (cdt.indexOf('isEmail')!=-1) if (!regEmail.test(val)) err+='- '+lbl+' doit contenir une adresse e-mail valide Ex : nom@domaine.fr\n  (un seul arobas (@) et au moins un point entre l\'arobas et la fin de l\'adresse)\n';
				if (cdt.indexOf('isMailing')!=-1) if (!regMailing.test(val)) err+='- '+lbl+' doit contenir une adresse e-mail valide Ex : nom@domaine.fr\n  (un seul arobas (@) et au moins un point entre l\'arobas et la fin de l\'adresse.)\n  Si plusieurs destinataire, séparer les adresses email par un ;\n';
				if (cdt.indexOf('isSelect')!=-1) if (val == "null" && cdt.charAt(0) == 'R') err+='- La première option de la liste '+lbl+' n\'est pas une sélection valide. Choisissez une des autres options.\n';

				if (cdt.indexOf('isHeure')!=-1) if (!regHeure.test(val)) err+='- '+lbl+' doit contenir une heure valide Ex : 12:20:00\n';
				if (cdt.indexOf('isDate')!=-1 || cdt.indexOf('isADate')!=-1) {
					var ok = (cdt.indexOf('isADate')!=-1 && val=="Toujours visible");

					if (!regDate.test(val) && !ok) err+='- '+lbl+' doit être une date au format jj/mm/yyyy\n';
					else if (!ok) { // la date existe t-elle ?
						var tab_mois = [ ['Janvier', 31], ['Février', 29], ['Mars', 31], ['Avril', 30],	['Mai', 31], ['Juin', 30], ['Juillet', 31], ['Août', 31], ['Septembre', 30], ['Octobre', 31], ['Novembre', 30], ['Décembre', 31] ];
						var jour = parseInt(eval(val.substring(0,2)));
						var mois = parseInt(eval(val.substring(3,5)));
						var an = parseInt(eval(val.substring(6,10)));

						// année bissextile ?
						if ((an % 100 != 0 && an % 4 == 0) || (an % 400 == 0)) tab_mois[1][1] = 29; else tab_mois[1][1] = 28;

						var bErreur = false;
						if(mois>12 || mois<1) {
							bErreur = true;
							err+='- '+lbl+' contient un mois invalide.\n';
						}
						if(jour>31 || jour<1) {
							bErreur = true;
							err+='- '+lbl+' contient un jour invalide.\n';
						}

						if (!bErreur) {
							mois = mois - 1;
							if ((an * 10000 + mois * 100 + jour) < 15821220) // date < au lundi 20 decembre 1582
								err+='- '+lbl+' 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][1] < jour) { // date est coherente ?
								err+='- Il n\'y a pas ' + jour + ' jours en ' + tab_mois[mois][0] + ' ' + an + ' mais ' + tab_mois[mois][1] + '. Veuillez choisir une autre date.\n';
							}
						}
					}
		    	}
				
				if (cdt.indexOf('isEntier') != -1) if (!regEntier.test(val)) err+='- '+lbl+' ne doit contenir que des Entiers.\n';
				if (cdt.indexOf('isEntierRange') != -1) {
		        	min=parseInt(vf_mid(cdt,':','to')); max=parseInt(vf_mid(cdt,'to'));
					if (val<min || max<val) err+='- '+lbl+' doit contenir un nombre Entier compris entre '+min+' et '+max+'.\n';
			    }
				if (cdt.indexOf('isDecimal') != -1) if (!regDecimal.test(val)) err+='- '+lbl+' ne doit contenir que Chiffres et vigule.\n';
				if (cdt.indexOf('isDecimalRange') != -1) {
		        	min=parseInt(vf_mid(cdt,':','to')); max=parseInt(vf_mid(cdt,'to'));
			        if (val<min || max<val) err+='- '+lbl+' doit contenir un nombre compris entre '+min+' et '+max+'.\n';
			    }
				if (cdt.indexOf('isMin') != -1) {
	        		min=parseInt(vf_mid(cdt,'<',':'));
			        if (val.length<min) err+='- '+lbl+' doit comporter au moins '+min+' caractères.\n';
				}
				if (cdt.indexOf('isNombreMax') != -1) if (val>parseFloat(vf_mid(cdt,'>',':'))) err+='- Le rapport > ou = des champs '+lbl+' est incorrect.\n';
 				if (cdt.indexOf('isLimitecar')!=-1) {
					max = vf_mid(cdt,':');
		        	if (max > 0 && val.length>max) err+='- '+lbl+' comporte '+val.length+' caractères et ne doit pas dépasser '+max+' caractères\n';
		    	}	
				
				if (cdt.indexOf('isFile') != -1) {
					tab = val.split(/\\|\//);
					sFichier = tab[tab.length-1]; // nom de fichier
				}
				if (cdt.indexOf('isFileAll') != -1) {
					var ext = val.substr(val.lastIndexOf(".") + 1).toLowerCase();
					if (!regFileAll.test(sFichier) || ext=="exe" || ext=="com" || ext=="bat") err+='- '+lbl+' contient un NOM de fichier incorrect : \"'+sFichier+'\" n\'est pas un fichier valide.\nLes fichiers dont l\'extention est .exe, .com ou .bat ne sont pas autorisés.\n';
			    }
				if (cdt.indexOf('isFileMov') != -1) if (!regFileMov.test(sFichier)) err+='- '+lbl+' contient un NOM de fichier incorrect : \"'+sFichier+'\" n\'est pas un fichier Vidéo valide\n';
				if (cdt.indexOf('isFileImg') != -1) if (!regFileImg.test(sFichier)) err+='- '+lbl+' contient un NOM de fichier incorrect : \"'+sFichier+'\" n\'est pas un fichier Image valide\n';
				if (cdt.indexOf('isFileJPG') != -1) if (!regFileJPG.test(sFichier)) err+='- '+lbl+' ne doit contenir que des images .JPG/.JPEG\n';
			    if (cdt.indexOf('isFileFich') != -1 || cdt.indexOf('isFileAnim') != -1) if (!regFileFich.test(sFichier)) err+='- '+lbl+' contient un NOM de fichier incorrect : \"'+sFichier+'\" n\'est pas un fichier valide\n';

				if (cdt.indexOf('isRadio') != -1 || cdt.indexOf('isCheckbox') != -1) {
					groupe = document.getElementsByName(args[i]);
					bCheck = false;
					for(j=0;j<groupe.length;j++)
						if(groupe[j].checked){
							 bCheck = true;
							 break;
						}
					if (!bCheck) err += '- '+lbl+' est obligatoire.\n';
				}					
			} else if (cdt.charAt(0) == 'R') err += '- '+lbl+' est obligatoire.\n';
		}
	}
	if (err) alert('Veuillez corriger les données suivantes :\n\n'+err);
	document.MM_returnValue = (err == '');
}
function vf_mid(val, dtag, ftag) {
	var d=val.indexOf(dtag)+dtag.length;
	return ftag ? val.substring(d,val.indexOf(ftag)) : val.substring(d);
}

function alertForm( sMod ) {
	switch (sMod) {
		case "rechercher" :
			alert("Recherche en cours de traitement, veuillez patienter.");
			break;
		default :
			alert("Formulaire en cours d'envoi, veuillez patienter.");
	}
}

addEvents(window, 'load', countCar);
document.getElementsByClassName = function (needle) {
	var my_array = document.getElementsByTagName("*");
	var retvalue = new Array();
	var i, j, c;

	for (i=0,j=0; i<my_array.length; i++) {
		c = " " + my_array[i].className + " ";
		if (c.indexOf(" " + needle + " ") != -1)
		  retvalue[j++] = my_array[i];
	}
	return retvalue;
}
function countCar() {
	var counts = document.getElementsByClassName('maxlength');
	var i, count, matches, countHolder;

	for (i=0; i<counts.length; i++)	{
		count = counts[i];
		matches = count.className.match(/max_([0-9]+)/);
		count.maxVal = RegExp.$1;
		count.holder = document.getElementById(count.id + 'Count');
		if (count.holder) {
			count.holder.value = 'caract. maxi : ' + (count.maxVal - count.value.length);
			count.onkeyup = chkCountCar;
			count.onfocus = chkCountCar;
			count.onblur = chkCountCar;
		}
	}	
}
function chkCountCar() {
	if (this.value.length > this.maxVal) this.value = this.value.substring(0, this.maxVal);
	this.holder.value = 'caract. maxi : ' + (this.maxVal - this.value.length);
}

function disableForm() {
	var oEl, i, ii, aForm = document.forms;

	for (ii=0;ii<aForm.length;ii++) { // tous les formulaires de la page
		for (i=0;i<aForm[ii].length;i++) {
			oEl = aForm[ii].elements[i];
			if (oEl.type != null)
				switch (oEl.type.toLowerCase()) {
					case "submit":case "button":case "reset":case "image":
						oEl.disabled = true;
				}
		}
	}
}

// test 2 dates
function DateToNumber(oFormName, oDebName, oFinName, oNbdebName, oNbfinName) {
	var oForm = document.forms[oFormName];
	var deb = oForm.elements[oDebName].value.split("/");
	var fin = oForm.elements[oFinName].value.split("/");
	oForm.elements[oNbdebName].value = deb[2] + deb[1] + deb[0];
	oForm.elements[oNbfinName].value = fin[2] + fin[1] + fin[0];
}