// Affiche un message d'erreur avec le nom du champ non complete
function erreur(champ)
{
    alert('Le champ ' + champ + ' est obligatoire.\nVeuillez le renseigner.');
}

// Verifie si un champ obligatoire a bien ete renseigne
function champobligatoire(champ, libelle)
{
    if (champ.value == '') {
        erreur(libelle);
        champ.focus();
        return false;
    } else
        return true;
}

// Verifie si le champ est un reel
function estUnReel(champ, nom_champ)
{
    var dblChamp;
    var i;
    var ch;
    var strChamp;

    strChamp = champ.value;
    for (i = 0; i < strChamp.length; i++) {
        ch = strChamp.charAt(i);
        if ((ch < "0" || "9" < ch) && ch != '.' && ch != ',') {
            alert(nom_champ + " contient des caracteres non numeriques");
            champ.focus();
            return false;
        }
        if (ch == '.') {
            alert(nom_champ + " contient un '.' au lieu d'une ','");
            champ.focus();
            return false;
        }
    }

    strChamp.replace(",", ".");
    dblChamp = parseFloat(strChamp);
    if (isNaN(dblChamp)) {
        alert("Veuillez saisir un nombre a virgule flottante dans le champ \"" + nom_champ + "\"");
        champ.focus();
        champ.select();
        return false;
    }
    return true;
}

// Verifie si le champ est un entier
function estUnEntier(champ, nom_champ)
{
    var j;
    var strVal;
    var bErr;
    
    bErr = 0;
    strVal = champ.value;

    for (j = 0; j < strVal.length; j++)
    {
        if (strVal.charAt(j) < "0" || strVal.charAt(j) > "9")
            bErr = 1;
    }

    if (bErr == 1)
    {
        alert("Veuillez saisir un entier dans le champ \"" + nom_champ + "\"");
        champ.focus();
        champ.select();
        return false;
    }
    
    return true;
}

// Une annee bisextile tous les 4 ans (a cause de la rotation de 365j -> un quart <-)
// et on ote une annee bisextile tous les 400 ans (car ce n'est pas tout a fait un quart).
// Une année est bissextile si elle est divisible par quatre et pas par 100
// (à moins qu'elle ne soit aussi divisible par 400)
function AnneeBisextile(intAnnee)
{
    if (intAnnee % 100 == 0) {
        if (intAnnee % 400 == 0)
            return true;
    } else
    if (intAnnee % 4 == 0)
        return true;
    return false;
}

// Verifie si le champ saisi est une date valide
//
function estUneDate(champ, nom_champ)
{
	var bErr;
	var strValeur;
	var strJour, strMois, strAnnee;
    var intJour, intMois, intAnnee;
	var strSeparateur1, strSeparateur2;

	bErr = 0;
	strValeur = champ.value;
    
    // Verification de la longueur
	if ((strValeur.length != 10) && (strValeur.length != 8))
	    bErr = 1;

    // Separation des chaines j/m/a
	strJour = strValeur.substring(0, 2);        // jour
	strSeparateur1 = strValeur.substring(2, 3); // '/'
	strMois = strValeur.substring(3, 5);        // mois
	strSeparateur2 = strValeur.substring(5, 6); // '/'
	strAnnee = strValeur.substring(6);          // année
    if (strAnnee.length == 2)
        strAnnee = '20' + strAnnee;

    // Conversion des chaines en entier
    intJour = parseInt(strJour, 10);
    if (isNaN(intJour))
        bErr = 1;
    intMois = parseInt(strMois, 10);
    if (isNaN(intMois))
        bErr = 1;
    intAnnee = parseInt(strAnnee, 10);
    if (isNaN(intAnnee))
        bErr = 1;

	// Erreurs de base
	//
    //if (bErr != 0) {
        if (intJour < 1 || intJour > 31)
            bErr = 1;
        if (strSeparateur1 != '/')
            bErr = 1;
        if (intMois < 1 || intMois > 12)
            bErr = 1;
        if (strSeparateur2 != '/')
            bErr = 1;
        if (intAnnee < 2000 || intAnnee > 9999)
            bErr = 1;
    //}

	// Erreurs avancées

	// Mois comportant 30 jours
	if (intMois == 4 || intMois == 6 || intMois == 9 || intMois == 11)
	{
		if (intJour == 31)
		    bErr = 1;
	}

	// Février, année bisextile
	if (intMois == 2)
	{
        if (intJour > 29)
		    bErr = 1;
        if ((intJour == 29) && (!AnneeBisextile(intAnnee)))
            bErr = 1;
	}

    if (bErr == 1)
    {
        alert("Date non valide (champ \"" + nom_champ + "\")");
        champ.focus();
        champ.select();
        return false;
    }

    return true;
}

// Verification d'une adresse email
//
function estUnEmail(champ, nomchamp)
{
    var strValeur;

    strValeur = champ.value;

    if (strValeur.indexOf("@") < 3)
    {
        alert("Erreur sur la saisie de votre e-mail. " +
              "Il faut saisir le caractere '@'.");
        champ.focus();
        champ.select();
        return false;
    }

    if (strValeur.length > 50)
    {
        alert("Votre e-mail ne doit pas depasser 50 caracteres");
        champ.focus();
        champ.select();
        return false;
    }

    return true;
}
