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 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 isString (theField, emptyOK) {
	if (isString.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (isWhitespace(theField.value)) return false;
	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 checkChoice (theField, s) {   
	var check = false;
	var i;
	for (i=0; i<checkChoice.arguments.length-1; i++) {
		check |= checkChoice.arguments[i].checked;
	}
	if (!check) return warnInvalid (checkChoice.arguments[0], checkChoice.arguments[checkChoice.arguments.length-1]);
	else return true;
}

function checkSelect (theField, s) {
	if (theField.selectedIndex<=0) {
		theField.focus();
		alert(s);
	}
	else return true;
}
