// code erreur : 0 -> pas d'erreur
// code erreur : 1 -> pas un entier
// code erreur : 2 -> pas un entier positif
// code erreur : 3 -> pas une date
// code erreur : 4 -> pas une clef
// code erreur : 5 -> ne doit pas être null

// Tester si val est un entier
function isint(val,isnull) {
	num		=	parseInt(val);                         // string to int

	// null et ne doit pas être null
	if (((val == "") || (val =="null")) && (!isnull)) {
		return 5;
	}

        // null et autorisé
	if (((val == "") || (val =="null")) && (isnull)) {
		return 0;
	}

	// Pas un entier ?
	var allowed    = "+-0123456789.";
    for (j=0;j<val.length;j++) {
    	if (allowed.indexOf(val.substring(j,j+1))==-1) {
        	return 1;
		}
    }
    
	// Un entier mais inférieur à 0 ?
	if (num<0)
		return 2;

	return 0;
}

// Tester si val est une heure
function istime(obj,isnull) {
	 // Si l'heure est vide et que ce n'est pas autorisé
	 if ((obj.value == "") && (!isnull))
	   return 5;
	// Si l'heure est vide et que c'est autorisé
	if (obj.value == "")
	   return 0;

	   // Si seulement 4 caracteres alors  rajouter le seprateur
	if (obj.value.length==4) {
		obj.value=obj.value.substring(0,2) + ":" + obj.value.substring(2,4);
	}
	var sheure   =   obj.value.substring(0,2);
    var sminute  =   obj.value.substring(3,5);
	
	var heure   = parseInt(sheure);
    var minute  = parseInt(sminute);
	
	if ((isNaN(heure)) || (isNaN(minute)))
            return 3;
	
	return 0;
}

// Tester si val est une date
function isdate(val,isnull) {
         // Si la date est vide et que ce n'est pas autorisé
         if ((val == "") && (!isnull))
           return 5;
        // Si la date est vide et que c'est autorisé
        if (val == "")
           return 0;
		// Si la date = 00/00/0000 c'est autorisé
		if (val == "00/00/0000")
           return 0;
		   
         // Verifier que le jour et le mois sont bien sur 2 chiffres (sans /)
         var sday    =   val.substring(0,2);
         var smonth  =   val.substring(3,5);
         var syear   =   val.substring(6,10);
         
         if (sday.charAt(0) == '0')
            sday     =   sday.substring(1,2);
         if (smonth.charAt(0) == '0')
            smonth     =   smonth.substring(1,2);

         // Une date doit être au format dd/mm/yyyy
         var day   = parseInt(sday);
         var month = parseInt(smonth);
         var year  = parseInt(syear);

         if ((isNaN(day)) || (isNaN(month)) || (isNaN(year)))
            return 3;
         if ((day < 0) || (day > 31))
            return 3;
        if ((month < 1) || (month > 12))
            return 3;

        month--;
        var d = new Date()
        d.setDate(day);
        d.setMonth(month);
        d.setFullYear(year);

        return 0;
}

// Tester si val est une clef (pas de caractères spéciaux ou espaces)
function iskey(val) {
         var allowed    = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789";
         for (j=0;j<val.length;j++) {
             if (allowed.indexOf(val.substring(j,j+1))==-1)
                return false;
         }
         return true;
}

// Tester une checkbox
function isChecked(name,isnull,ob) {
	if (!isnull) {
		isOneChecked	=	false;
		for (j=0; j<document.getElementsByName(name).length; j++){
			if (document.getElementsByName(name)[j].checked==true)
				isOneChecked	=	true;
		}
		if (!isOneChecked)
			return 5;
	}
	return 0;
}

// Tester un champ texte
function istext(val,isnull,id) {
         // Val est null et n'a pas le droit de l'être
         if ((val=="") && (!isnull))
            return 5;

         // Val est null et peut l'être
         if ((val=="") && (isnull))
            return 0;

         // Val n'est pas une clef (caractères spéciaux)
         if ((id) && (!iskey(val)))
            return 4;
         return 0;
}

// Valider un champ de formulaire
function validField(obj) {
         var type       = "text";
         var label      = "";
         var value      = "";
	  var name	   = "";
         var isnull     = true;
         var id         = false;
		var codeErreur	= 0;

        // Retrouver les valeurs
        if (obj.typeval)
           	type         = obj.typeval;
	 if (obj.getAttribute("typeval"))
		type         = obj.getAttribute("typeval");

        if (obj.name)
           	name         = obj.name;
	 if (obj.getAttribute("name"))
		name         = obj.getAttribute("name");

        if (obj.desc)
           label   	     = obj.desc;
	 if (obj.getAttribute("desc"))
		label         = obj.getAttribute("desc");

        if (obj.value)
           value        = trim(obj.value);



        if ((obj.isnull) && (obj.isnull.toUpperCase() == 'FALSE'))
           isnull       = false;
	 if ((obj.getAttribute("isnull")) && (obj.getAttribute("isnull").toUpperCase() == 'FALSE'))
           isnull       = false;


        if ((obj.iskey) && (obj.iskey.toUpperCase() == 'TRUE'))
           id           = true;

        //value           = value.trim();
	// Tester la validité et si le champ est null et à le droit de l'être
	switch(type.toUpperCase()) {
			   case "INTEGER":
			        obj.value	= obj.value.replace(",",".");
					value       = obj.value;
					codeErreur = isint(value,isnull);
			        break;
			   case "INT":
			        obj.value	= obj.value.replace(",",".");
					value       = obj.value;				   
			        codeErreur = isint(value,isnull);
			        break;
			   case "TEXT":
				codeErreur = istext(value,isnull,id);
				break;
			   case "DATE":
				codeErreur = isdate(value,isnull);
				break;
				case "TIME":
				codeErreur = istime(obj,isnull);
				break;
			   case "CHECKBOX":
				codeErreur = isChecked(name,isnull,obj);
				break;
	}

        // Si une erreur, alors mettre le champ en rouge et afficher le message correspondant
        // Sinon s'assurer que le champ n'est plus/pas rouge
        if (codeErreur != 0) {
           obj.style.backgroundColor = colorErr;
           msg = message[codeErreur].substring(0,message[codeErreur].indexOf("$")) + label + message[codeErreur].substring(message[codeErreur].indexOf("$")+1);
           alert(msg);
        } else {
           obj.style.backgroundColor = '';
        }
        if (codeErreur > 0)
	   return false;
	return true;
}

// 1.2.7
function trim(s) {
    return s.replace(/^\s+/, '').replace(/\s+$/, '');
}

// Valider le formulaire (parcourir et tester tout les champs du formulaire)
function validForm(myform) {
	 var returnValue = true;
         for (i=0;i<myform.elements.length;i++) {
             if (!validField(myform.elements[i])) {
                returnValue=false;
				try { 
					hideWaiting();
				} catch(er) {}
			}
         }
         return returnValue;
}
