$(function(){ countCar(); });

var Est = {
	sM : "[a-z0-9_]+((-[a-z0-9_]+)|([.][a-z0-9_]+)|(_[a-z0-9_]+))*@[a-z0-9]+(([.]|-)[a-z0-9]+)*[.][a-z]{2,}",
	sF : "(^[/(/)a-z0-9_-]+[.])",

	colorHexa: 	function(v) { return new RegExp(/^#+[\dA-F]{6}$|^$/i).test(v); },
	folder : 	function(v) { return new RegExp(/^[a-z\d_-]*$/i).test(v); },
	suppr :	 	function(v) { return new RegExp(/^(oui)$/i).test(v); },
	fileImg : 	function(v) { return new RegExp(eval("/" + this.sF + "(gif|jpg|jpeg|png)$/i")).test(v); },
	fileJPG : 	function(v) { return new RegExp(eval("/" + this.sF + "(jpg|jpeg)$/i")).test(v); },
	heure : 	function(v) { return new RegExp(/^(([0-1]\d)|(2[0-3]))(:[0-5]\d){2}$/).test(v); },
	decimal : 	function(v) { return new RegExp(/^\d+[,.]?\d*$/i).test(v); },
	entier : 	function(v) { return new RegExp(/^\d+$/).test(v); },
	mailing :	function(v) { return new RegExp(eval("/^((" + this.sM + ");?){1,}$/i")).test(v); },
	email : 	function(v) { return new RegExp(eval("/^" + this.sM + "$/i")).test(v); },
	vide :		function(v) { return (v == "" || typeof(v) == "null"); },
	sms : 		function(v) { return (v.replace(/[^\d]/gi,'').length == 10); },
	date :		function(v) {
					var err = '';
					if(!new RegExp(/^\d{2}\/\d{2}\/\d{4}$/).test(v))
						err = 'format non valide';
					else {
						var oD = vf_split_date(v);
						var aMois = [31, vf_nb_jour_fevrier(oD.an), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

						if (oD.mois>12 || oD.mois<1)
							err = 'mois non valide';
						else if (oD.jour>31 || oD.jour<1)
							err = 'jour non valide';
						else {
							if ((oD.an * 10000 + oD.mois * 100 + oD.jour) < 15821220) // date < au lundi 20 decembre 1582
								err = 'periode non valide';
							else if (aMois[--oD.mois] < oD.jour)
								err = 'date non valide';
						}
					}
					return err;
				},
	compare : 	function(v, v2, m) {
					switch (m) {
						case "<":
							return ( v < v2 );
							break;
						case ">":
							return ( v > v2 );
							break;
					}
					return false;
				},
	comprisEntre : function(v, min, max) {	return (v >= min && v <= max); }
};

function vf_mid(v, dtag, ftag) {
	var d = v.indexOf(dtag) + dtag.length;
	return ftag ? v.substring(d, v.indexOf(ftag)) : v.substring(d);
}
function vf_url2fichier(v) {
	var a = v.split(/\\|\//);
	return a[a.length-1];
}
function vf_split_date(d) {
	return {
		jour: parseInt(d.substring(0,2).replace(/(0)(\d)/gi,'$2')),
		mois: parseInt(d.substring(3,5).replace(/(0)(\d)/gi,'$2')),
		an: parseInt(d.substring(6,10))
	};
}
function vf_nb_jour_fevrier(an) { return ((an % 100 != 0 && an % 4 == 0) || (an % 400 == 0)) ? 29 : 28; }

function MM_validateForm() { // 4 arguments
	function Cond(c, v) {
		return (v.indexOf(c)!=-1);
	}

	var groupe, bCheck, j, i, err='', min, max,
		args = MM_validateForm.arguments;

	for(i=0; i<(args.length-3); i+=4) {
		if( !MM_validateForm.form) MM_validateForm.form = document.getElementsByTagName('form')[0]; // TODO : à virer
		var v = MM_validateForm.form.elements[args[i]], // valeur
			c = args[i+2], 	 // condition
			lbl = args[i+3], // label
			sNom = '- &#171; ' + lbl + ' &#187; '; // nom du champ

		if (v) {
			v = v.value;
			if (Cond('Trim', c)) v = $.trim(v);

			if (!Est.vide(v) || v == 'null') {
				if (Cond('isColorHexa', c)) if (!Est.colorHexa(v)) 	err += sNom + _lg("doit être de la forme : #xxxxxx (soit x un caractère de A à F et 0 à 9)") + '<br />';
				if (Cond('isFolder', c)) 	if (!Est.folder(v)) 	err += sNom + _lg("ne doit contenir que des caractères alphanumériques (de A à Z, 0 à 9, _ ou -)") + '<br />';
				if (Cond('isSuppr', c)) 	if (!Est.suppr(v)) 		err += sNom + _lg("doit contenir &#171; Oui &#187; si vous voulez supprimer l'enregistrement, sinon cliquez sur le bouton annuler") + '<br />';
				if (Cond('isEmail', c)) 	if (!Est.email(v)) 		err += sNom + _lg("doit contenir une adresse e-mail valide Ex : nom@domaine.fr<br /> (un seul arobas (@) et au moins un point entre l'arobas et la fin de l'adresse)") + '<br />';
				if (Cond('isMailing', c)) 	if (!Est.mailing(v)) 	err += sNom + _lg("doit contenir une adresse e-mail valide Ex : nom@domaine.fr<br /> (un seul arobas (@) et au moins un point entre l'arobas et la fin de l'adresse)<br />Si plusieurs destinataires, séparer les adresses email par un point-virgule (;)") + '<br />';
				if (Cond('isSMS', c)) 		if (!Est.sms(v)) 		err += sNom + _lg("doit être sur 10 chiffres.") + '<br />';
				if (Cond('isSelect', c)) 	if (v == 'null' && c.charAt(0) == 'R') err += sprintf(_lg("- La première option de la liste &#171; %s &#187; n'est pas une sélection valide. Choisissez une des autres options."), lbl) + '<br />';

				if (Cond('isHeure', c)) if (!Est.heure(v)) err += sNom + _lg("doit contenir une heure valide Ex : 12:20:00") + '<br />';
				if (Cond('isDate', c) || Cond('isADate', c)) {
					if ( !(Cond('isADate', c) && v == 'Toujours visible') ) {
						var sDate = Est.date(v);
						switch (sDate) {
							case 'format non valide':
								err += sNom + _lg("doit être une date au format jj/mm/yyyy") + '<br />';
								break;
							case 'mois non valide':
								err += sNom + _lg("contient un mois invalide.") + '<br />';
								break;
							case 'jour non valide':
								err += sNom + _lg("contient un jour invalide.") + '<br />';
								break;
							case 'periode non valide':
								err += sNom + _lg("contient une date antérieure au 20 décembre 1582, hors du calendrier Grégorien. Veuillez sélectionner une date plus récente.") + '<br />';
								break;
							case 'date non valide':
								var oD = vf_split_date(v),
									aMois = [ [_lg('Janvier'), 31], [_lg('Février'), vf_nb_jour_fevrier(oD.an)], [_lg('Mars'), 31], [_lg('Avril'), 30], [_lg('Mai'), 31], [_lg('Juin'), 30], [_lg('Juillet'), 31], [_lg('Août'), 31], [_lg('Septembre'), 30], [_lg('Octobre'), 31], [_lg('Novembre'), 30], [_lg('Décembre'), 31] ];
								oD.mois--;
								err += sprintf(_lg("- Il n'y a pas %s jours en %s %s mais %s. Veuillez choisir une autre date."), oD.jour, aMois[oD.mois][0], oD.an, aMois[oD.mois][1]) + '<br />';
						}
					}
		    	}

				if (Cond('isEntier', c)) if (!Est.entier(v)) err += sNom + _lg("ne doit contenir que des Entiers.") + '<br />';
				if (Cond('isEntierRange', c)) {
					min = parseInt(vf_mid(c, ':', 'to'));
					max = parseInt(vf_mid(c, 'to'));
					if(!Est.comprisEntre(v, min, max)) err += sNom + sprintf(_lg("doit contenir un nombre Entier compris entre %s et %s."), min, max) + '<br />';
				}
				if (Cond('isDecimal', c)) if (!Est.decimal(v)) err += sNom + _lg("ne doit contenir que des chiffres et des virgules.") + '<br />';
				if (Cond('isDecimalRange', c)) {
					min = parseFloat(vf_mid(c, ':', 'to'));
					max = parseFloat(vf_mid(c, 'to'));
					if(!Est.comprisEntre(v, min, max)) err += sNom + sprintf(_lg("doit contenir un nombre compris entre %s et %s."), min, max) + '<br />';
				}
				if (Cond('isMin', c)) {
					min = parseInt(vf_mid(c, '<', ':'));
					if (Est.compare(v.length, min, "<")) err += sNom + sprintf(_lg("doit comporter au moins %s caractères"), min) + '<br />';
				}
				if (Cond('isNombreMax', c)) if (Est.compare(v, parseFloat(vf_mid(c,'>',':')), '>')) err += sprintf(_lg("- Le rapport > ou = des champs &#171; %s &#187; est incorrect."), lbl) + '<br />';

				if (Cond('isFileImg', c)) if (!Est.fileImg( vf_url2fichier(v) )) err += sNom + sprintf(_lg("contient un NOM de fichier incorrect : &#171; %s &#187; n'est pas un fichier Image valide"), v) + '<br />';
				if (Cond('isFileJPG', c)) if (!Est.fileJPG( vf_url2fichier(v) )) err += sNom + _lg("ne doit contenir que des images au format .JPG ou.JPEG") + '<br />';

				if (Cond('isCheckboxGForm', c)) { // spec géné de form
					bCheck = false;
					var oFgp = document.forms['ff_' + $id(args[i]).value];
					for(j=0;j<oFgp.length;j++) {
						groupe = oFgp.elements[j];
						if (groupe.type != null) {
							if (groupe.type.toLowerCase() == 'checkbox' && groupe.name.indexOf(args[i] + '_') != -1)
								if(groupe.checked) bCheck = true;
						}
					}
					if (!bCheck) err += sprintf(_lg('- &#171; %s &#187; est obligatoire.'), lbl) + '<br />';
				}
				else {
					if (Cond('isRadio', c) || Cond('isCheckbox', c)) {
						groupe = document.getElementsByName(args[i]);
						bCheck = false;
						for(j=0;j<groupe.length;j++) {
							if(groupe[j].checked) {
								if( Cond('isRadioChecked', c) || Cond('isCheckboxChecked', c) )
									bCheck = !groupe[j].disabled;
								else
									bCheck = true;
							}
							if (bCheck) break;
						}
						if (!bCheck) err += sprintf(_lg('- &#171; %s &#187; est obligatoire.'), lbl) + '<br />';
					}
				}
			} else if (c.charAt(0) == 'R') err += sprintf(_lg('- &#171; %s &#187; est obligatoire.'), lbl) + '<br />';
		}
	}

	MM_validateForm.form = null;
	if (err){
		$('#dialog_verifform').remove();
		$('body').prepend('<div id="dialog_verifform" title="' + _lg("Erreur de saisie") + '">' + _lg("Veuillez corriger les données suivantes :") + '<br />' + err + '</div>');

		$('#dialog_verifform').dialog({
			buttons: { 'Ok': function() { $(this).dialog('close'); } },
			resizable: true,
			height: $('#dialog_verifform').width(500).height() + 100,
			width: 500,
			modal: true,
			overlay: {
				opacity: 0.5,
				background: '#000'
			}
		});
	}
	document.MM_returnValue = (err == '');
}

var disableForm = {
	settings : {
		 titre: _lg("Formulaire en cours d'envoi"),
		 text: _lg("Les données sont en cours d'envoi, veuillez patientez..."),
		 racine_charte: RACINE_CHARTE_ADMIN
	},

	show : function(options) {
		s = this.settings;
		if(options)
			 $.extend(s, options);

		$('#dialog_disableForm').remove();
		$('body').prepend('<div id="dialog_disableForm" title="' + s.titre + '"><img src="' + RACINE_CHARTE_ADMIN + 'images/ajax_medium.gif" class="vcenter ajax_medium">' + s.text + '</div>');

		$('#dialog_disableForm').dialog({
			resizable: true,
			height: $('#dialog_disableForm').width(500).height() + 100,
			width: 500,
			modal: true/*,
			overlay: {
				opacity: 0.5,
				background: '#000'
			}*/
		});
	},

	hide : function() {
		$('#dialog_disableForm').dialog('close');
	}
};

function countCar() {
	$('textarea.maxlength').each(function() {
		var cpt = this.id + 'Count';
		if( $id(cpt)) {
			var m = this.className.match(/max_(\d+)/);
			this.maxVal = RegExp.$1;
			$(this).keypress( function() {
				var len = this.value.length,
					s = this.value.replace(/\r\n/g,'--').replace(/\n/g,'--'); // retour chariot = 2c Cause BUG FF
				t = s.length - len;
				if ((len + t) > this.maxVal) this.value = this.value.substring(0, this.maxVal - t);
				var iLng = this.maxVal - this.value.length - t;
				$('#' + cpt).html( ' : ' + sprintf(pluriel( _lg("<strong>%s</strong> caractère restant"), _lg("<strong>%s</strong> caractères restants"), iLng), _lgNombre(iLng)) );
			});
			$(this).keypress();
		}
	});
}

// @#$ ne marche pas dans le domReady
function disabledAutoComplete() {
	$(':password').each(function() {
		$(this).attr('autocomplete', 'off');
	});
}