// ©2009 Didier Berck

err = '';
antispam= '';

function submitForm(evt) {
	if(!isFormComplete(evt.element().readAttribute('id'))) {
		evt.stop();	
	}
}; // submitForm

function isFormComplete(form) {
	//var err = '';
	$$('#' + form + ' label').each(function(elt) {
		if(elt.hasClassName('required')) {
			if(elt.hasClassName('checkbox')) {
				if(!$(elt.readAttribute('for')).checked) {
					if('' != elt.firstChild.nodeValue.strip()) {
						err += '\n' + elt.firstChild.nodeValue.strip() + ' obligatoire';
					} else {
						err += '\n' + elt.readAttribute('title') + ' : obligatoire';
					}
				}
			} else {
				if('' == $(elt.readAttribute('for')).getValue()) {
					if('' != elt.firstChild.nodeValue.strip()) {
						err += '\n' + elt.firstChild.nodeValue.strip() + ' obligatoire';
					} else {
						err += '\n' + elt.readAttribute('title') + ' : obligatoire';
					}
				}
			}
		}
		if(elt.hasClassName('email')) {
			if('' != $(elt.readAttribute('for')).getValue() && !isValidEmail($(elt.readAttribute('for')).getValue())) {
				if('' != elt.firstChild.nodeValue.strip()) {
					err += '\n' + elt.firstChild.nodeValue.strip() + ' non valide';
				} else {
					err += '\n' + elt.readAttribute('title') + ' : non valide';
				}
			}
		}
		if(elt.hasClassName('tel')) {
			if('' != $(elt.readAttribute('for')).getValue() && !isValidTel($(elt.readAttribute('for')).getValue())) {
				if('' != elt.firstChild.nodeValue.strip()) {
					err += '\n' + elt.firstChild.nodeValue.strip() + ' non valide';
				} else {
					err += '\n' + elt.readAttribute('title') + ' : non valide';
				}
			}
		}
		if(elt.hasClassName('int')) {
			if('' != $(elt.readAttribute('for')).getValue() && !isValidNumber($(elt.readAttribute('for')).getValue(), true)) {
				if('' != elt.firstChild.nodeValue.strip()) {
					err += '\n' + elt.firstChild.nodeValue.strip() + ' non valide';
				} else {
					err += '\n' + elt.readAttribute('title') + ' : non valide';
				}
			}
		}
		if(elt.hasClassName('float')) {
			if('' != $(elt.readAttribute('for')).getValue() && !isValidNumber($(elt.readAttribute('for')).getValue(), false)) {
				if('' != elt.firstChild.nodeValue.strip()) {
					err += '\n' + elt.firstChild.nodeValue.strip() + ' non valide';
				} else {
					err += '\n' + elt.readAttribute('title') + ' : non valide';
				}
			}
		}
		if(elt.hasClassName('antispam')) {
			if(antispam != $(elt.readAttribute('for')).getValue()) {
				if('' != elt.firstChild.nodeValue.strip()) {
					err += '\n' + elt.firstChild.nodeValue.strip() + ' erronné';
				} else {
					err += '\n' + elt.readAttribute('title') + ' : erronné';
				}
			}
		}
	});
	var toReturn = true;
	if('' != err) {
		alert('Les renseignements suivants sont manquants ou inexacts :\n' + err);
		err = '';
		toReturn = false;
	}
	return toReturn;
}; // isFormComplete

function checkForm(form, value) {
	$$('form label').each(function(elt) {
		if(elt.hasClassName('required') && !elt.hasClassName('antispam')) {
			if(elt.hasClassName('checkbox')) {
				var bg = 'url(../images/form-required.png)';
				if($(elt.readAttribute('for')) && $(elt.readAttribute('for')).checked) {
					setBackground(elt, 'url(../images/form-ok.png)');
					$(elt.readAttribute('for')).removeClassName('required');
				} else {
					setBackground(elt, bg);
				}
			} else {
				var bg = 'url(../images/form-required.png)';
				if($(elt.readAttribute('for')) && '' != $(elt.readAttribute('for')).getValue()) {
					setBackground(elt, 'url(../images/form-ok.png)');
					$(elt.readAttribute('for')).removeClassName('required');
				} else {
					setBackground(elt, bg);
				}
			}
		} else {
			var bg = 'none';
		}
		if(elt.hasClassName('email')) {
			if($(elt.readAttribute('for')) && '' != $(elt.readAttribute('for')).getValue()) {
				if(isValidEmail($(elt.readAttribute('for')).getValue())) {
					setBackground(elt, 'url(../images/form-ok.png)');
				} else {
					setBackground(elt, 'url(../images/form-wrong.png)');
				}
			} else {
				setBackground(elt, bg);
			}
		}
		if(elt.hasClassName('tel')) {
			if($(elt.readAttribute('for')) && '' != $(elt.readAttribute('for')).getValue()) {
				if(isValidTel($(elt.readAttribute('for')).getValue())) {
					setBackground(elt, 'url(../images/form-ok.png)');
				} else {
					setBackground(elt, 'url(../images/form-wrong.png)');
				}
			} else {
				setBackground(elt, bg);
			}
		}
		if(elt.hasClassName('int')) {
			if($(elt.readAttribute('for')) && '' != $(elt.readAttribute('for')).getValue()) {
				if(isValidNumber($(elt.readAttribute('for')).getValue(), true)) {
					setBackground(elt, 'url(../images/form-ok.png)');
				} else {
					setBackground(elt, 'url(../images/form-wrong.png)');
				}
			} else {
				setBackground(elt, bg);
			}
		}
		if(elt.hasClassName('float')) {
			if($(elt.readAttribute('for')) && '' != $(elt.readAttribute('for')).getValue()) {
				if(isValidNumber($(elt.readAttribute('for')).getValue(), false)) {
					setBackground(elt, 'url(../images/form-ok.png)');
				} else {
					setBackground(elt, 'url(../images/form-wrong.png)');
				}
			} else {
				setBackground(elt, bg);
			}
		}
	});
}; // checkForm

function checkAntispam(elt) {
	var data = $H({
		'code': elt.getValue()
	}).toQueryString();
	new Ajax.Request('../ajax/check_antispam.php', {
		method: 'get',
		parameters: data,
		onSuccess: function(req) {
			if('valid=true' == req.responseText) {
				setBackground(elt.up('form').down('label[for=' + elt.readAttribute('id') + ']'), 'url(../images/form-ok.png)');
			} else {
				setBackground(elt.up('form').down('label[for=' + elt.readAttribute('id') + ']'), 'url(../images/form-wrong.png)');
				antispam = req.responseText;
			}
		}
	});
} // checkAntispam

function isValidEmail(strEmail) {
	var regExp = new RegExp(/^\w[\w\-\.]*@\w[\w\-\.]*\.[a-z]{2,4}$/i);
	return strEmail.match(regExp);
}; // isValidEmail

function isValidTel(strTel) {
	var regExp = new RegExp(/^\+?[0-9]{6,}$/);
	return strTel.gsub(/\./, '').gsub(/\//, '').gsub(/\s+/, '').match(regExp);
}; // isValidTel

function isValidNumber(text, intsOnly) {
	text = text.replace(/^\s+|\s+$/g, '');
	var val = intsOnly ? parseInt(text, 10) : parseFloat(text);
	return String(val) === text;
} // isValidNumber

function setBackground(elt, url) {
	elt.setStyle({
		backgroundImage: url
	});
}; // setBackground

function focusInput(evt) {
	evt.element().removeClassName('required');
} // focusInput

function blurInput(evt) {
	if('' == evt.element().value) {
		evt.element().addClassName('required');
	} else {
		evt.element().removeClassName('required');
	}
} // blurInput

Event.observe(window, 'load', function() {
	if($('form')) {
		checkForm($('form'), $('form').serialize());
		new Form.Observer($('form'), 0.2, checkForm);
		Event.observe($("form"), "submit", submitForm);
	}
	$$('.required').each(function(elt) {
		if(elt.hasClassName('input')) {
			Event.observe(elt, 'focus', focusInput);
			Event.observe(elt, 'blur', blurInput);
		}
	});
});

