
// nettoye les espace avant et apres un texte
function _trimText(text) {
	var i, j, c, spaces = "\t\n\r ";
	for(i=0;i<text.length;i++) {
		c = text.charAt(i);
		if(spaces.indexOf(c)==-1) break;
	}
	for(j=text.length;j>i;j--) {
		c = text.charAt(j-1);
		if(spaces.indexOf(c)==-1) break;
	}
	return text.substring(i, j);
}

// retourn la valeur d'un champ et le trim
function _trimField(field) {
	var v = field.value;
	v = _trimText(v);
	field.value = v;
	return v;
}

//---------------------------------------------------------------------------
// Fonctions de validation
//---------------------------------------------------------------------------

// verifie si un champ contient un certain nombre de caractères
// si un seul paramettre est donné c'est la taille max
// si deux paramettre sont donnés c'est min et max
function JS_Size(field, caption) {
	var v = _trimField(field);
	if(v.length==0) return false;
	var minlength = 0, maxlength = Number.MAX_VALUE;
	if(JS_Size.arguments.length>3) {
		minlength = JS_Size.arguments[2]-0;
		maxlength = JS_Size.arguments[3]-0;
	} else if(JS_Size.arguments.length>2) {
		maxlength = JS_Size.arguments[2]-0;
	}
	if(v.length>=minlength && v.length<=maxlength) return false;
	var msg = "Le champ '" + caption + "' doit contenir ";
	if(minlength!=0) window.alert(msg + "entre " + minlength + " et " + maxlength + " caratères");
	else window.alert(msg + "au maximum " + maxlength + " caratère" + (maxlength>1 ? 's' : '') );
	field.focus();
	return true;
}

// verifie si un champ contient un date valide de la forme jj.mm.aaaa
function JS_Date(field, caption) {
	var v = _trimField(field);
	if(v.length==0) return false;
	var pd = _parseAnyDate(v);
	if(v!=_formatDate(pd)) {
		window.alert("Le champ '" + caption + "' doit contenir une date de la forme " + _formatDate(new Date()) );
		field.focus();
		return true;
	}
}

// verifie si un champ contient un date valide de la forme jj.mm.aaaa hh:mm
function JS_DateHM(field, caption) {
	var v = _trimField(field);
	if(v.length==0) return false;
	var pd = _parseAnyDate(v);
	if(v!=_formatDateHM(pd)) {
		window.alert("Le champ '" + caption + "' doit contenir une date de la forme " + _formatDateHM(new Date()) );
		field.focus();
		return true;
	}
}

// verifie si un champ contient un date valide de la forme jj.mm.aaaa hh:mm:ss
function JS_DateHMS(field, caption) {
	var v = _trimField(field);
	if(v.length==0) return false;
	var pd = _parseAnyDate(v);
	if(v!=_formatDateHMS(pd)) {
		window.alert("Le champ '" + caption + "' doit contenir une date de la forme " + _formatDateHMS(new Date()) );
		field.focus();
		return true;
	}
}

// vérifie si un champ contient un email valide
function JS_Email(field, caption)
{
	var v = _trimField(field);
	if(v.length==0) return false;
	var fa = v.indexOf('@');
	var fb = v.indexOf('@', fa + 1);
	var fc = v.indexOf('.', fa + 2);
	if(fa<0 || fb>0 || fc<0) {
		window.alert("Le champ '" + caption + "' doit contenir un email valide");
		field.focus();
		return true;
	}
	return false;
}

// check si le champ contient un nombre
function JS_Number(field, caption) {
	var minv = JS_Number.arguments.length>2 ? JS_Number.arguments[2]-0 : Number.MININT;
	var maxv = JS_Number.arguments.length>3 ? JS_Number.arguments[3]-0 : Number.MAXINT;
	var v = parseInt(_trimField(field));
	if(isNaN(v)) {
		window.alert("Le champ '" + caption + "' doit contenir un nombre");
		field.focus();
		return true;
	}
	if(v<minv || v>maxv) {
		window.alert("Le champ '" + caption + "' doit contenir un nombre compris entre " + minv + " et " + maxv);
		field.focus();
		return true;
	}
	return false;
}

// check si le champ contient un url
function JS_Url(field, caption)
{
	var v = _trimField(field);
	if(v.length==0) return false;
	var fa = v.indexOf('://');
	var fb = fa<0 ? -1 : v.indexOf('.', fa + 3);
	if(fa<0 || fb<0)
	{
    	window.alert("Le champ '" + caption + "' doit contenir un url valide, qui commence par http:// ftp:// etc.");
		field.focus();
		return true;
	}
	return false;
}

// check si un champ est remplis
function JS_Required(field, caption) {
	
	var type = field.type ? field.type.toLowerCase() : (field.length ? field[0].type.toLowerCase() : '' );
	
	if(type=='select') {
		var v = field.options[field.selectedIndex].value;
		if(v.length!=0) return false;
	}
	else if(type=='radio') {
		if(field.length) {
			for(var i=0;i<field.length;i++) if(field[i].checked) return false;
			field = field[0];
		} 
		else if(field.checked) return false;
	}
	else {
		var v = field.value;
		if(v.length!=0) return false;
	}
	window.alert("Le champ '" + caption + "' est requis");
	field.focus();
	return true;
}

