function init_label_messages() {
	elems = $$('.label');
	elems.each(function(item){
		item.removeClassName('erreur');
	});
}

// fonctions génériques de traitement des formulaires
//******************************************

// champ qui se vide dès qu'il a le focus
//******************************************
autoEmpty = {};
autoEmpty.focusElement = function (evt) {
	var elm = evt.target;
	if (elm.value == elm.defaultValue) {
		elm.value = '';
	}
	elm.removeClassName('focused');
}
autoEmpty.blurElement = function (evt) {
	var elm = evt.target;
	if (elm.value == '') {
		elm.value = elm.defaultValue;
	}
	elm.addClassName('focused');
}
autoEmpty.init = function () {
	var elms = $$('.auto_empty');
	for (var i=0; i < elms.length; i++) {
		elms[i].observe('focus', autoEmpty.focusElement);
		elms[i].observe('blur', autoEmpty.blurElement);
	}
}
Event.observe(window, 'dom:loaded', autoEmpty.init);

// validation de chaque champ
//******************************************
autoCheck = {
	elements : new Array(),
	forms : new Array()
};

autoCheck.checkInt = {
	className : 'chk:int',
	events : {
		keyup : function(elm) {
			if (!autoCheck.checkInt.check(elm)) {
				autoCheck.checkFailed(autoCheck.checkInt, elm);
			}
		}
	},
	check : function(elm) {
		var r = /C?[1-9][0-9]+/i;
		return r.test(elm.value);
	}
};

autoCheck.applyElementChecks = function(elm) {
	for (var c in elm.checks) {
		var check = elm.checks[c];
		if (!check.check(elm)) {
			autoCheck.checkFailed(autoCheck.checkInt, elm);
		}
	}
}
autoCheck.applyFormChecks = function(form) {
	var bln = true;
	for (var i in autoCheck.elements) {
		if (autoCheck.elements[i].form == form) {
			bln = autoCheck.applyElementsChecks(autoCheck.elements[i]) && bln;
		}
	}
	return bln;
}

autoCheck.blurElement = function (evt) {
	var elm = evt.target;
	if (!autoCheck.applyElementChecks(elm)) {
		alert('Cette valeur n\'est pas valide');
		elm.addClassName('autocheck_erreur');
	};
}
autoCheck.submitForm = function (evt) {
	var form = evt.target;
	if (!autoCheck.applyFormChecks(form)) {
		alert('Impossible de soumettre le formulaire, il y a des erreurs');
	};
}
autoCheck.addCheck = function (elm, check) {
	elm.checks[elm.checks.length] = check;
	for (e in check.events) {
		elm.observe(e, check.events[e]);
	}
}
autoCheck.storeApplyableChecks = function (elm) {
	for (var c = 0; c < autoCheck.checks.length; c++) {
		check = autoCheck.checks[c];
		if (elm.hasClassName(check.className)) {
			autoCheck.addCheck(elm, check);
		}
	}
}

autoCheck.init = function () {
	autoCheck.checks = new Array();
	autoCheck.checks[0] = autoCheck.checkInt;

	autoCheck.elements = $$('.autocheck');
	for (var i=0; i < autoCheck.elements.length; i++) {
		elm = autoCheck.elements[i];
		autoCheck.storeChecks(elm);
		elm.observe('blur', autoCheck.blurElement);
		if (elm.form) {
			var found = false;
			for (var j=0; j<autoChecks.forms.length; j++) {
				if (autoChecks.forms[j] == elms[i].form) {
					found = true;
				}
			}
			if (!found) {
				autoChecks.forms[autoChecks.forms.length] = elms[i].form;
			}
		}
	}

	for (var j=0; j<autoCheck.forms.length; j++) {
		autoCheck.forms[j].observe('submit', autoCheck.submitForm);
	}
}
Event.observe(window, 'dom:loaded', autoCheck.init);

//******************************************
autoFiltres = {
	prefix : '',
	filtres : new Array(),

	init : function() {
		var filtres = $$('.critere_filtre');
		for (var i=0; i<filtres.length; i++) {
			var classes = filtres[i].className.split(' ');
			var j = classes.indexOf('critere_filtre');
			if (j+1 < classes.length) {
				var id_hidden = classes[j+1];
				autoFiltres.addAutoFiltre(filtres[i], id_hidden, autoFiltres.prefix);
			}
		}
	},

	addAutoFiltre : function(root, id_hidden, prefix) {
		var filtre = {
			prefix : prefix,
			id : id_hidden,
			root : root,
			picked : [],

			// elements correspondant (pour ne fairte qu'une fois le getElementById
			hidden : $(prefix+id_hidden),
			valeurs : $(prefix+'valeurs_'+id_hidden),
			valeur : $(prefix+'valeur_'+id_hidden),
			btn_effacer : $(prefix+'effacer_'+id_hidden),
			list : $(prefix+'autofiltre_cbx_'+id_hidden),
			label : $(prefix+'label_'+id_hidden),

			// methodes
			toggle : function() {
				if (this.list) {
					this.list.toggle();
				}
				if (this.label) {
					this.label.toggleClassName('expanded');
				}
			},

			pick : function(element, value) {
				value = element;
				var found = 0;
				for (var i=0; i<this.picked.length; i++) {
					if (this.picked[i].value == value) {
						found = 1;
						i = this.picked.length;
					}
				}
				if (found == 0) {
					this.picked[this.picked.length] = { caption:element, value:value };
					if (this.hidden) {
						this.hidden.value = this.picked[0].value;
						for (var i=1; i <this.picked.length; i++) {
							this.hidden.value += ','+this.picked[i].value;
						}
					}
					if (this.valeur) {
						this.valeur.innerHTML = this.picked[0].caption;
						for (var i=1; i <this.picked.length; i++) {
							this.valeur.innerHTML += ', '+this.picked[i].caption;
						}
					}
					if (this.valeurs) {
						this.valeurs.show();
					}
				}
			},

			clear : function() {
				this.picked.length = 0;
				if (this.hidden) {
					this.hidden.value = '';
				}
				if (this.valeur) {
					this.valeur.innerHTML = '';
				}
				if (this.valeurs) {
					this.valeurs.hide();
				}
			}
		}
		var togglers = root.getElementsBySelector('.toggler');
		if (filtre.label) {
			togglers[togglers.length] = filtre.label;
		}
		for (var i in togglers) {
			togglers[i].filtre = filtre;
			togglers[i].onclick = this.onClickToggler;
		}

		this.filtres[this.filtres.length] = filtre;
		// liens inverses, pour remonter au filtre
		if (filtre.label) { filtre.label.filtre = filtre; }
		if (filtre.hidden) { filtre.hidden.filtre = filtre; }
		if (filtre.valeurs) { filtre.valeurs.filtre = filtre; filtre.valeurs.hide(); }
		if (filtre.valeur) { filtre.valeur.filtre = filtre; }
		if (filtre.btn_effacer) { filtre.btn_effacer.filtre = filtre; }
		if (filtre.list) { filtre.list.filtre = filtre; filtre.list.hide() }
	},

	/* statiques */
	onClickToggler : function(event) {
		var elm = (window.event) ? window.event.srcElement : event.target;
		if (elm.filtre) {
			elm.filtre.toggle();
		}
	},

	onPickElement : function(elm) {
		if (elm.parentNode.filtre) {
			elm.parentNode.filtre.pick(elm.innerHTML);
		}
	},

	onClear : function(elm) {
		if (elm.filtre) {
			elm.filtre.clear();
		}
	}
}
Event.observe(window, 'dom:loaded', autoFiltres.init);


//******************************************
function setDisabled(id, v) {
	$(id).disabled = v;
	if (v) {
		$(id).addClassName('disabled');
	}
	else {
		$(id).removeClassName('disabled');
	}
}


//******************************************
function enableIfNotEmpty(id_select) {
	var select = $(id_select);
	var options = select.options;
	if (options.length > 1
	|| (options.length == 1 && options[0].value != '')) {
		setDisabled(select, false);
	}
}

// actions spécifiques à certains formulaires
//******************************************
var formActions = {}
formActions.choix_note = function (prefix, note, type) {
	$(prefix+'note').value = note;
	this.updateNote(prefix, note, 'note_active', type);
}
formActions.survol_note = function (prefix, note, type) {
	if (!note) {
		note = $(prefix+'note').value;
	}
	this.updateNote(prefix, note, 'note_active', type);
}
formActions.updateNote = function (prefix, note, className, type) {
	for (var i=1; i <= 5; i++) {
		if (i <= note) {
			$(prefix+'note_'+i).addClassName(className);
			$(prefix+'note_'+i).src = '/images/'+type+'_on.gif';
		}
		else {
			$(prefix+'note_'+i).removeClassName(className);
			$(prefix+'note_'+i).src = '/images/'+type+'_off.gif';
		}
	}
}

function uploadForm(form){
	$(form).submit();

}

// champ password qui se vide dÃ©Â³Â qu'il a le focus; type=text au dÃªÂ£Âµt, type=password dÃ©Â³Â qu'il a le focus et si quelque chose est saisi
//******************************************
autoPasswd = {};

autoPasswd.focusElement = function (evt) {
	autoEmpty.focusElement.call(this, evt);
	var pw = this.setType(evt.target, 'password');
	pw.select();
	pw.focus(); /*Fonctionne pas sous IE sans le select juste avant*/
	return false;
}

autoPasswd.blurElement = function (evt) {
	if (evt.target.value == '') {
		this.setType(evt.target, 'text');
	}
	autoEmpty.blurElement.call(this, evt);
}

autoPasswd.setType = function (element, newType) {
	if (newType == element.type.toLowerCase()) {
		return element;
	}

	var pw = document.createElement('input');
	$(pw);
	pw.setAttribute('type', newType);
	pw.setAttribute('defaultValue', element.defaultValue); // defaultValue
	if (newType == 'text') {
		pw.setAttribute('value', element.defaultValue); // defaultValue
	}
	pw.id = element.id;
	pw.name = element.name;
	pw.className = element.className;
	pw.observe('focus', this.focusElement.bind(this));
	pw.observe('blur', this.blurElement.bind(this));
	element.parentNode.replaceChild(pw, element);
	return pw;
}

autoPasswd.init = function() {
	var elms = $$('.autopasswd');
	for (var i=0; i < elms.length; i++) {
		elms[i].observe('focus', this.focusElement.bind(this));
		elms[i].observe('blur', this.blurElement.bind(this));
	}
}
Event.observe(document, 'dom:loaded', autoPasswd.init.bind(autoPasswd));

