/* Définition des comportements javascript du site */
var rules = {
	'form #row-lien input': function(e) {
		e.onclick = function(){
			if (this.value == 'Autre') {
				document.getElementById('row-lien_autre').style.display = 'block';
			} else {
				document.getElementById('row-lien_autre').style.display = 'none';
			}
		}
	}
};

Behaviour.register(rules);

function validation() { //v4.0
	var i,p,q,nm,test,num,min,max,errors='',args=validation.arguments;
	for (i=0; i<(args.length-2); i+=3) {
		test=args[i+2];
		var obj=document.getElementById(args[i]);
		var error = '';
		if (obj) {
			// Avant de continuer, déterminer si l'un des parents du champ est affiché ou non
			if (is_displayed(obj)) {
				var error = '';
				nm=args[i+1];
				if (!nm) nm=obj.name;
				if ((val=obj.value)!="") {
					if (test.indexOf('isEmail')!=-1) {
						p=val.indexOf('@');
						if (p<1 || p==(val.length-1)) error='- '+nm+' doit être une adresse email valide\n';
					} else if (test.indexOf('isDate')!=-1) {
					} else if (test!='R') {
						num = parseFloat(val);
						if (isNaN(val)) error='- '+nm+' doit être un nombre.\n';
						if (test.indexOf('inRange') != -1) {
							p=test.indexOf(':');
							min=test.substring(8,p); max=test.substring(p+1);
							if (num<min || max<num) error='- '+nm+' doit être un nombre entre '+min+' et '+max+'.\n';
						}
					}
				} else if (test.charAt(0) == 'R') {
					if (obj.type == 'checkbox' || obj.type == 'radio') {
						if (!obj.checked) error= '- '+nm+' est requis\n';
					} else {
						error= '- '+nm+' est requis\n';
					}
				}
				className = new String(obj.className);
				if (error != '') {
					errors += error;
					if (className.indexOf('missing') == -1) obj.className += ' missing';
				} else {
					obj.className = className.replace(/missing/, '');
				}
			}
		}
	}
	return errors;
}

function alert_validation() {
	args = new Array();
	for (var i=0; i<alert_validation.arguments.length; i++) {
		args[i] = "'"+alert_validation.arguments[i].replace(/'/g,"\\'")+"'";
	}
	eval("errors = validation("+args.join(',')+")");
	if (errors != '') alert('Les erreurs suivantes sont apparues :\n'+errors);
	return (errors == '');
}

// Renvoie faux si l'objet ou l'un de ses parents est masqué (display=='none')
function is_displayed(obj) {
	if (obj.style && obj.style.display == 'none') {
		return false;
	}
	if (obj.parentNode) {
		return is_displayed(obj.parentNode);
	} else {
		return true;
	}
}
