function mod_formulaire(sForm, sMod) {
	if (sMod.substring(0, 3) == 'eff') {
		$(sForm + ' :text').attr('readonly', 'readonly');
	}
}

function select(o, mode) {
	if (o) {
		switch (o.type.toLowerCase()) {
			case "select":
				o.options.selected = (mode == 'toggle') ? !o.options.selected : $is_true(mode, true);
				break;
			case "select-multiple":
				if (mode == 'toggle') {
					for (i=0;i<o.options.length;i++) {
						o.options[i].selected = !o.options[i].selected;
					}
				} else {
					mode = $is_true(mode, true);
					for (i=0;i<o.options.length;i++) {
						o.options[i].selected = mode;
					}
				}
		}
	}
}

var disableForm = {
	settings : {
		 titre: _lg("Formulaire en cours d'envoi"),
		 text: _lg("Les données sont en cours d'envoi, veuillez patientez...")
	},
	show : function(options) {
		s = this.settings;
		if(options) {
			 $.extend(s, options);
		}

		$('#dialog_disableForm').remove();
		$('body').append('<div id="dialog_disableForm" title="' + s.titre + '"><div class="ajaxloading_disableForm">' + s.text + '</div></div>');
		$('#dialog_disableForm').dialog({
			resizable: true,
			height: $('#dialog_disableForm').width(500).height(),
			width: 500,
			modal: true
		});
	},
	hide : function() {
		$('#dialog_disableForm').dialog('close');
	}
};

function countCar() {
	$("textarea[class*='js-maxlength:']").each(function() {
		var cpt = this.id + '-maxlength';
		if( $id(cpt)) {
			var m = this.className.match(/js-maxlength:(\d+)/);
			this.maxVal = ($type(m) == 'array') ? m[1] : 0;
			$(this).keyup(function() {
				textareaLenght( this, cpt);
			}).keypress(function() {
				textareaLenght( this, cpt);
			});
			textareaLenght(this, cpt);
		}
	});
	function textareaLenght( o, cpt) {
		var len = o.value.length,
			s = o.value.replace(/\r\n/g,'--').replace(/\n/g,'--'), // retour chariot = 2car
			t = s.length - len;
		if ((len + t) > o.maxVal) o.value = o.value.substring(0, o.maxVal - t);
		var iLng = o.maxVal - o.value.length - t;
		$('#' + cpt).html( ' : ' + sprintf(pluriel( _lg("<strong>%s</strong> caractère restant"), _lg("<strong>%s</strong> caractères restants"), iLng), _lgNombre(iLng)) );
	}
}
$( countCar);

// @#$ ne marche pas dans le domReady
function disabledAutoComplete() {
	$(':password').each(function() {
		$(this).attr('autocomplete', 'off');
	});
}

// filtre
$.validator.addMethod('t', function(value, element, param) {
	return this.optional(element) || $.trim(value);
});
$.validator.addMethod('s', function(value, element, param) {
	return this.optional(element) || value.replace(/\s+/g, '');
});

// test
$.validator.addMethod('emailing', function(value, element, param) {
	var bValide = true,
		aMails = value.replace(/\s+/g,'').split(';');
	for (i = 0; i < aMails.length; i++) {
		if( ! /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(aMails[i]) ) {
			bValide = false;
			break;
		}
	}
	return this.optional(element) || bValide;
}, $.validator.messages.email);
// same as url, but TLD is optional
$.validator.addMethod("url2", function(value, element, param) {
	return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
}, $.validator.messages.url);

$.validator.addMethod('entier', function(value, element, param) {
	return this.optional(element) || /^-?\d+$/.test(value);
}, _lg('Nombre entier non valide'));

$.validator.addMethod('ape', function(value, element, param) {
	return this.optional(element) || /^\d{3}[a-z]$/i.test(value);
}, _lg('Code ape non valide'));
$.validator.addMethod('tel', function(value, element, param) {
	return this.optional(element) || /^((\d).?){10}$/.test(value);
}, _lg('Téléphone non valide'));
$.validator.addMethod('cp', function(value, element, param) {
	return this.optional(element) || /^(\d{1,2}|2[AB])\s*\d{3}$/i.test(value);
}, _lg('Code postal non valide'));

// date
$.validator.addMethod('date2', function(value, element, param) {
	var sValide;
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat,
			re = new RegExp('^' + sFormat.replace(/[dm]/gi, '\\d').replace(/(yy)/gi, '\\d{4}') + '$','g');
		sValide = re.test(value);
	} else {
		sValide = !/Invalid|NaN/.test(new Date(value));
	}
	return this.optional(element) || sValide;
}, $.validator.messages.date);
$.validator.addMethod('daterange', function(value, element, param) {
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat;
		return date2timestamp( sFormat, value) >= date2timestamp( sFormat, param[0]) && ate2timestamp( sFormat, value) <= date2timestamp( sFormat, param[1]);
	} else {
		return this.optional(element);
	}
}, $.format( _lg('Saisissez une date comprise entre « {0} » et « {1} » inclus') ));
$.validator.addMethod('datemin', function(value, element, param) {
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat;
		return date2timestamp( sFormat, value) <= date2timestamp( sFormat, param);
	} else {
		return this.optional(element);
	}
}, $.format( _lg('Saisissez une date inférieur ou égale à « {0} »') ));
$.validator.addMethod('datemax', function(value, element, param) {
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat;
		return date2timestamp( sFormat, value) >= date2timestamp( sFormat, param);
	} else {
		return this.optional(element);
	}
}, $.format( _lg('Saisissez une date supérieure ou égale à « {0} »') ));

// comparaison entre 2 champs ou valeur si param n'est pas un array
$.validator.addMethod('verifEgal', function(value, element, param) {
	return this.optional(element) || value == ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur égale à « {0} »') ));
$.validator.addMethod('verifSupEgal', function(value, element, param) {
	return this.optional(element) || value >= ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur supérieure ou égal à « {0} »') ));
$.validator.addMethod('verifInfEgal', function(value, element, param) {
	return this.optional(element) || value <= ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur inférieure ou égal à « {0} »') ));
$.validator.addMethod('verifSup', function(value, element, param) {
	return this.optional(element) || value > ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur supérieure à « {0} »') ));
$.validator.addMethod('verifInf', function(value, element, param) {
	return this.optional(element) || value < ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur inférieure à « {0} »') ));
$.validator.addMethod('verifDiff', function(value, element, param) {
	return this.optional(element) || value != ( param.length > 1 ? $(param[1]).val() : param[0]);
}, $.format( _lg('Saisissez une valeur différente de « {0} »') ));
$.validator.addMethod('verifDateSup', function(value, element, param) {
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat;
		var sValide = date2timestamp( sFormat, value) > date2timestamp( sFormat, param.length > 1 ? $(param[1]).val() : param[0]);
	} else {
		var sValide = !/Invalid|NaN/.test(new Date(value));
	}
	return this.optional(element) || sValide
}, $.format( _lg('Saisissez une date supérieure à « {0} »') ));
$.validator.addMethod('verifDateSupEgal', function(value, element, param) {
	if ($.datepicker.regional[LANGUE_META_SITE]) {
		var sFormat = $.datepicker.regional[LANGUE_META_SITE].dateFormat;
		var sValide = date2timestamp( sFormat, value) >= date2timestamp( sFormat, param.length > 1 ? $(param[1]).val() : param[0]);
	} else {
		var sValide = !/Invalid|NaN/.test(new Date(value));
	}
	return this.optional(element) || sValide;
}, $.format( _lg('Saisissez une date supérieure ou égal à « {0} »') ));
