var whitespace = " \t\n\r";
var iEmail = "Votre adresse Email n'est pas valide !"
var defaultEmptyOK = false
var reInteger = /^\d+$/
var reFloat = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}

function isWhitespace (s) {
	var i;
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	}
	return true;
}

function isEmail (s) {
	if (isEmpty(s)) 
	if (isEmail.arguments.length == 1) return defaultEmptyOK;
	else return (isEmail.arguments[1] == true);
	if (isWhitespace(s)) return false;
	var i = 1, j = 1;
	var sLength = s.length;
	while ((i < sLength) && (s.charAt(i) != "@")) {
		i++
	}
	if ((i >= sLength) || (s.charAt(i) != "@")) return false;
	else i += 2;
	j = i - 1;
	while ((i < sLength) && (s.charAt(i) != ".")) {
		i++
	}
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	else return true;
}

function isInteger (s) {
	if (isEmpty(s))
		if (isInteger.arguments.length == 1) return defaultEmptyOK;
		else return (isInteger.arguments[1] == true);
	return reInteger.test(s)
}

function isFloat (s) {
	if (isEmpty(s)) 
		if (isFloat.arguments.length == 1) return defaultEmptyOK;
		else return (isFloat.arguments[1] == true);
	return reFloat.test(s)
}

function warnEmpty (theField, s) {
	theField.focus();
	alert(s);
	return false;
}

function warnInvalid (theField, s) {
	theField.focus();
	theField.select();
	alert(s);
	return false;
}

function warnChoice (theField, s) {
	theField[0].focus();
	alert(s);
	return false;
}

function checkString (theField, s, emptyOK) {
	if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (isWhitespace(theField.value)) return warnEmpty (theField, s);
	else return true;
}

function checkStringSize (theField, minSize, s, emptyOK) {
	if (checkStringSize.arguments.length == 3) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if ((isWhitespace(theField.value)) || (theField.value.length < minSize)) return warnEmpty (theField, s)
	else return true;
}

function checkEqual (theField1, theField2, s) {
	if (theField1.value != theField2.value) return warnEmpty (theField1, s)
	else return true;
}

function checkEmail (theField, emptyOK) {
	if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else if (!isEmail(theField.value)) return warnInvalid (theField, iEmail);
	else return true;
}

function checkInteger (theField, s, emptyOK) {
	if (checkInteger.arguments.length == 2) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isInteger(theField.value)) return warnInvalid (theField, s);
	else return true;
}

function checkFloat (theField, s, emptyOK) {
	if (checkFloat.arguments.length == 2) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isFloat(theField.value)) return warnInvalid (theField, s);
	else return true;
}

function checkSelect (theField, s) {
	if (theField.selectedIndex<=0) {
		theField.focus();
		alert(s);
	}
	else return true;
}

function checkBox (theField, s) {
	if (!theField.checked) {
		theField.focus();
		alert(s);
	}
	else return true;
}

function checkChoice (theField, s) {   
	var ok = false;
	var i;

	for (i=0; i<theField.length; i++) {
		ok |= theField[i].checked;
	}
	if (!ok) return warnChoice (theField, s);
	else return true;
}
