// 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 = utils.getElementsByClassName('auto_empty', '*', document);
	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 = utils.getElementsByClassName('autocheck', '*', document);
	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);


// actions spécifiques à certains formulaires
//******************************************
var formActions = {}
formActions.choix_note = function (prefix, note) {
	$(prefix+'note').value = note;
	this.updateNote(prefix, note, 'note_active');
}
formActions.updateNote = function (prefix, note, className) {
	for (var i=1; i <= 5; i++) {
		if (i <= note) {
			$(prefix+'note_'+i).addClassName(className);
		}
		else {
			$(prefix+'note_'+i).removeClassName(className);
		}
	}
}

formActions.clearAvis = function(prefix) {
	$(prefix+'note').value = '';
	this.updateNote(prefix, 0, 'note_active');
}
