// REQUIERT Prototype.js version 1.6+

/*window.onload = function () {
	$('formulaire').select('input[type="text"]', 'input[type="password"]', 'textarea').each(initInput);
	$('formulaire').select('input[type="checkbox"]').each(initCheckBox);
}*/

document.observe("dom:loaded", initForm);

function initForm () {
	if ($('formulaire')) {
	$('formulaire').select('input[type="text"]', 'input[type="password"]', 'input[type="file"]').each(initInputText);
	$('formulaire').select('textarea').each(initTextarea);
	$('formulaire').select('select').each(initSelect);
	$('formulaire').select('input[type="checkbox"]').each(initCheckBox);
	$('formulaire').select('input[type="radio"]').each(initRadio);
	$('formulaire').select('input[class="envoyer"]', 'input[class="annuler"]', 'input[class="valider"]').each(initBoutons);
		$('formulaire').select('input[type="submit"]').each(initSubmit);
	}
	if ($('info_mail')) {
		$('info_mail').hide ();
	}
	document.stopObserving("dom:loaded", initForm);
}



function initInputText (id) {
	setClassName (id, 'input-text');
	initInput (id);
}

function initTextarea (id) {
	setClassName (id, 'textarea');
	initInput (id);
}
function initSelect (id) {
	setClassName (id, 'select');
	initInput (id);
}
function initCheckBox (id) {
	setClassName (id, 'no-style');
}
function initRadio (id) {
	setClassName (id, 'no-style');
}
function initSubmit (id) {
	var element = $(id);
}

function setClassName (id, className) {
	var element = $(id);
	
	if (element) {
		// Ajouter style css
		if (element.hasClassName (className) == false) {
			element.addClassName (className);
		}
	}
}

function initInput (id) {
	var element = $(id);
	var classOff = 'input01off';
	
	if (element) {
		// Ajouter style css
		if (element.hasClassName (classOff) == false) {
			element.addClassName (classOff);
		}
		
		// ajouter comportement
		element.observe('blur', testInput );
		element.observe('focus', clearInput);
	}
}

function initBoutons (id) {
	var element = $(id);
	var classOn = 'on';
	var classOff = 'off';
	
	if (element) {
		// Ajouter style css
		if (element.hasClassName (classOff) == false) {
			element.addClassName (classOff);
		}
	
		// ajouter comportement
		element.observe('mouseout', function(event){
			Event.element(event).removeClassName (classOn);
			Event.element(event).addClassName (classOff);
		});
		element.observe('mouseover', function(event){
			Event.element(event).removeClassName (classOff);
			Event.element(event).addClassName (classOn);
		});
	}
}

function testInput (event) {
	var classOn = 'input01on';
	var classOff = 'input01off';
	
			var e = Event.element(event);
			var label = e.up(1).down ('label[for='+e.id+']');
			var p = e.up (0);
			
			// Affectation par défaut 
			e.removeClassName (classOn);
			e.addClassName (classOff);
			label.removeClassName (classOn);
			label.addClassName (classOff);
			
			if (p) {
				// Si le parent à la classe "obligatoire" d'affectée
				// et si le champ est vide (test basique)
				// alors c'est une erreur à signaler
				if (p.hasClassName ('o')){
					if (e.value == "") {
				//setInputError (e.id);
					} else if (e.id == "email") {
				verifEmail (e.id);
			} else {
				setInputOk (e.id);
			}
		}
	}
}
							
function testEmail (sEmail) {
	var modele = new RegExp("^[a-z0-9]+[a-z0-9_\.-]*[a-z0-9]+@[a-z0-9]+[a-z0-9_\.-]*[a-z0-9]+[\.][a-z]{2,5}$", "i");
	if (sEmail == "") {
		return false;
	}
							
	if (!sEmail.match(modele)) {
		return false;
	}
							
	return true;
}
							
function clearInput (event) {
	var classOn = 'input01on';
	var classOff = 'input01off';
	var classError = 'input01error';
	var classWarning = 'input01warning';
	var classOk = 'input01ok';
							
			var e = Event.element(event);
			var label = e.up(1).down ('label[for='+e.id+']');
			
			// Effet de focus sur l'élément
  			e.removeClassName (classOff);
			e.removeClassName (classWarning);
			e.removeClassName (classError);
			e.removeClassName (classOk);
			e.addClassName (classOn);
			
			// Effet de focus sur son label
			if (label) {
				label.removeClassName (classOff);
				label.removeClassName (classWarning);
				label.removeClassName (classError);
				label.removeClassName (classOk);
				label.addClassName (classOn);
			}
}

function verifForm (id) {
	var form = $(id);
	var champs = Array ();
	var test = 'ok';
	
	if (form) {
		form.select('input', 'textarea', 'select').each (function (id) {
			
			var e = $(id);
			var label = e.up(1).down ('label[for='+e.id+']');
			var p = e.up (0);
			
			
			if (p) {
				if (p.hasClassName ('o')){
					// Tester tous les champs obligatoires
					if ($F(id) == "") {
						// Le champ obligatoire est vide
						setInputError (e.id);
						test = 'error';
					} else if (e.id == "email") {
						if (testEmail(e.value)) {
							// L'adresse email semble correcte
							setInputOk (e.id);
							$('info_mail').hide ();
						} else {
							// L'adresse email ne semble pas correcte
							setInputWarning (e.id);
							$('info_mail').show ();
							//test = 'error';
						}
					} else {
						setInputOk (e.id);
					}
				}
			}
 		});
		
		return (test=='ok');
	} else {
		// Formulaire spécifié introuvable, impossible à vérifier. On le valide tel quel, PHP prendra le relai.
		return true;
	}
	
}

function verifEmail (id) {
	var e = $(id);
	
	if (testEmail(e.value)) {
		// L'adresse email semble correcte
		setInputOk (e.id);
		$('info_mail').hide ();
	} else {
		// L'adresse email ne semble pas correcte
		setInputWarning (e.id);
		$('info_mail').show ();
	}			
		}
	
function setInputError (id) {
	var classOff = 'input01off';
	var classError = 'input01error';
	
	var e = $(id);
	var label = e.up(1).down ('label[for='+e.id+']');
	
	if (e) {
		e.removeClassName (classOff);
		e.addClassName (classError);
	}
	if (label) {
		label.addClassName (classError);
	}
}

function setInputWarning (id) {
	var classOff = 'input01off';
	var classWarning = 'input01warning';
	
	var e = $(id);
	var label = e.up(1).down ('label[for='+e.id+']');
	
	if (e) {
		e.removeClassName (classOff);
		e.addClassName (classWarning);
	}
	if (label) {
		label.addClassName (classWarning);
	}
	}
	
function setInputOk (id) {
	var classOff = 'input01off';
	var classOk = 'input01ok';
	
	var e = $(id);
	var label = e.up(1).down ('label[for='+e.id+']');
	
	if (e) {
		e.removeClassName (classOff);
		e.addClassName (classOk);
	}
	if (label) {
		label.addClassName (classOk);
	}
}