function parseIntdbg(nombre_str)
{
        var reparebug1 = /^0+$/             // chaine = "0", "00", "000", ... exactement !
        var reparebug2 = /^0+/;             // chaine_debut = "0", "00", "000", ...
        var retour;

        if (reparebug1.test(nombre_str))
                nombre_str = nombre_str.replace(reparebug1, "0");
        else
        {
                if (reparebug2.test(nombre_str))
               	       nombre_str = nombre_str.replace(reparebug2, "");
        }

        retour = parseInt(nombre_str); 
        return retour;
}

function testnumero(nombre_str, min, max, message_valide, message_inter)
{
	var nombre;
	var modele = /^-?[0-9]+$/;
	var reparebug = /^0*/;
	var reparebug2 = /0+/;
	var testreparebug = /^0+$/;
	var test2reparebug = /^-/;
     

	if (!testreparebug.test(nombre_str))
	{
		if (test2reparebug.test(nombre_str))
			nombre_str = nombre_str.replace(reparebug2, "");
		else
			nombre_str = nombre_str.replace(reparebug, "");
	}
	nombre = parseInt(nombre_str);
	if (isNaN(nombre) || (!modele.test(nombre_str)))
	{
		alert(message_valide);
		return (false);
	}
	if ((nombre < min) || (nombre > max))
	{
		alert(message_inter);
		return (false);
	}
	return (true);
}

function testnumeroIsInf(nbre1, nbre2, message)
{
        nombre1 = parseIntdbg(nbre1);
        nombre2 = parseIntdbg(nbre2);
        if (nombre1>=nombre2)
        {
                alert(message);
                return (false);
        }
        return (true);
}


function testnumerofloat(nombre_str, min, max, message_valide, message_inter)
{
	var nombre;
/*	var modele = /^-?[0-9]+(\.[0-9]*)?$/;   */
        var modele = /^-?\d+(\.\d+)?$/;
        
	nombre = parseFloat(nombre_str);
	if (isNaN(nombre) || (!modele.test(nombre_str)))
	{
		alert(message_valide);
		return (false);
	}
	if ((nombre < min) || (nombre > max))
	{
		alert(message_inter);
		return (false);
	}
	return (true);
}

function testnumerofloatFormat(nombre_str, format, message_format)
{
        var modele;

        if (format == "XX . XXX")
        {
            modele = /^\d?\d(\.\d\d?\d?)?$/;
        }
        else if (format == "XX . XXXXXXXXXXXX")
        {
            modele = /^-?\d?\d(\.\d\d?\d?\d?\d?\d?\d?\d?\d?\d?\d?\d?)?$/;
        }
        else if (format == "XXX . XXXXXXXXXXXX")
        {
            modele = /^-?\d?\d?\d(\.\d\d?\d?\d?\d?\d?\d?\d?\d?\d?\d?\d?)?$/;
        }
				else if (format == "XXXXX . XXX")
				{
					 modele = /^\d?\d?\d?\d?\d(\.\d\d?\d?)?$/;
			  }

        if (!modele.test(nombre_str))
        {
                alert(message_format);
                return (false);
        }

        return (true);
}

function testsomme(str_nbre1, str_nbre2, str_nbre3, message_somme)
{
        var nbre1 = 0;
        var nbre2 = 0;
        var nbre3 = 0;
        var somme;

        if (str_nbre1 != "") 
            nbre1 = parseIntdbg(str_nbre1);

        if (str_nbre2 != "")
            nbre2 = parseIntdbg(str_nbre2);

        if (str_nbre3 != "") 
            nbre3 = parseIntdbg(str_nbre3);

        somme = nbre1+nbre2+nbre3;

        if (somme != 100) 
        {
            alert(message_somme);
            return (false);
        }

        return (true);
}

function MinMax(nbre, min, max)
{
	if ((nbre < min) || (nbre > max))
		return (false);
	return (true);
}


function testdate(format_in, date_str, message_format, message_valide, message_reel)
{
// ici, peut etre mettre un code permettant à la fonction
// de prendre le paramètre "format" sous un format de 
// chaine de caractère spécifique, autorisant ainsi plus
// de souplesse du coté de l'utilisateur...

	var modele;
	var TextDate;
	var BoolResult;
	var Date_Jour;
	var Date_Mois;
	var Date_Annee;
	var Date_Heure;
	var Date_Minute;
	var Date_Seconde;
	var TabMois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];


	if (format_in == "JJ/MM/AAAA")
		modele = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/;
	if (format_in == "JJ/MM/AAAA:HH:MM")
		modele = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}:[0-9]{1,2}:[0-9]{1,2}$/;
	if (format_in == "JJ/HH:MM:SS")
		modele = /^[0-9]{1,2}\/[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/;
	if (format_in == "HH:MM")
		modele = /^[0-9]{1,2}:[0-9]{1,2}$/;
	if (format_in == "MM/AAAA")
		modele = /^[0-9]{1,2}\/[0-9]{4}$/;
        if (format_in == "AAAA")
                modele = /^[0-9]{4}$/;
        if (format_in == "MM")
                modele = /^[0-9]{1,2}$/;

	re = /\s+/g;
	date_str = date_str.replace(re, '');
	if (modele == void("truc"))
		return (false);
	if (!modele.test(date_str))
	{
		alert(message_format);
		return (false);
	}


	if (format_in == "JJ/MM/AAAA")
	{
		TextDate = date_str.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Mois = parseIntdbg(TextDate[1]);
		Date_Annee = parseIntdbg(TextDate[2]);
		BoolResult = MinMax(Date_Jour, 1, 31);
		BoolResult = (BoolResult && MinMax(Date_Mois, 1, 12));
		BoolResult = (BoolResult && MinMax(Date_Annee, 1900, 3000));
	}
	
	if (format_in == "JJ/MM/AAAA:HH:MM")
	{
		TextDate = date_str.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Mois = parseIntdbg(TextDate[1]);
		Date_Annee = parseIntdbg(TextDate[2].split(/:/)[0]);
		Date_Heure = parseIntdbg(TextDate[2].split(/:/)[1]);
		Date_Minute = parseIntdbg(TextDate[2].split(/:/)[2]);
		BoolResult = MinMax(Date_Jour, 1, 31);
		BoolResult = (BoolResult && MinMax(Date_Mois, 1, 12));
		BoolResult = (BoolResult && MinMax(Date_Annee, 1900, 3000));
		BoolResult = (BoolResult && MinMax(Date_Heure, 0, 23));
		BoolResult = (BoolResult && MinMax(Date_Minute, 0, 59));
	}
	if (format_in == "JJ/HH:MM:SS")
	{
		TextDate = date_str.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Heure = parseIntdbg(TextDate[1].split(/:/)[0]);
		Date_Minute = parseIntdbg(TextDate[1].split(/:/)[1]);
		Date_Seconde = parseIntdbg(TextDate[1].split(/:/)[2]);
		BoolResult = MinMax(Date_Jour, 0, 2);
		BoolResult = (BoolResult && MinMax(Date_Heure, 0, 23));
		BoolResult = (BoolResult && MinMax(Date_Minute, 0, 59));
		BoolResult = (BoolResult && MinMax(Date_Seconde, 0, 59));
	}
	if (format_in == "HH:MM")
	{
		TextDate = date_str.split(/:/);
		Date_Heure = parseIntdbg(TextDate[0]);
		Date_Minute = parseIntdbg(TextDate[1]);
		BoolResult = MinMax(Date_Heure, 0, 23);
		BoolResult = (BoolResult && MinMax(Date_Minute, 0, 59));
	}
	if (format_in == "MM/AAAA")
	{
		TextDate = date_str.split(/\//);
		Date_Mois = parseIntdbg(TextDate[0]);
		Date_Annee = parseIntdbg(TextDate[1]);
		BoolResult = MinMax(Date_Mois, 1, 12);
		BoolResult = (BoolResult && MinMax(Date_Annee, 1900, 3000));
	}
        if (format_in == "MM")
        {
                TextDate = date_str;
                Date_Mois = parseIntdbg(TextDate);
                BoolResult = MinMax(Date_Mois, 1, 12);
        }
        if (format_in == "AAAA")
        {
                TextDate = date_str;
                Date_Annee = parseIntdbg(TextDate);
                BoolResult = MinMax(Date_Annee, 1900, 3000);
        }


	if (!BoolResult)
	{
		alert(message_valide);
		return (false);
	}

	if ((Date_Jour != void("trux")) && (Date_Mois != void("trux")) && (Date_Annee != void("trux")))
	{
		BoolResult = MinMax(Date_Jour, 1, TabMois[Date_Mois - 1]);
		if (!BoolResult && (Date_Mois == 2))
			if (((Date_Annee % 4 == 0) && (Date_Annee % 100 != 0)) || (Date_Annee % 400 == 0))
				BoolResult = MinMax(Date_Jour, 1, 29);
		if (!BoolResult)
		{
			alert(message_reel);
			return (false);
		}
	}
	return (true);
}

// fonction testant l'intervalle de temps donné dans le même format...
// la date doit être testée avant d'appeller cete fonction.
function testdateinter(format_in, date_str, date_min, date_max, message_inter)
{
	var BoolResult;
	var TextDate;
	var TextDate_min;
	var TextDate_max;
	
	var Date_Jour;
	var Date_Mois;
	var Date_Annee;
	var Date_Heure;
	var Date_Minute;
	var Date_Seconde;

	var Date_Jour_min;
	var Date_Mois_min;
	var Date_Annee_min;
	var Date_Heure_min;
	var Date_Minute_min;
	var Date_Seconde_min;

	var Date_Jour_max;
	var Date_Mois_max;
	var Date_Annee_max;
	var Date_Heure_max;
	var Date_Minute_max;
	var Date_Seconde_max;

	BoolResult = false;
	if (format_in == "JJ/MM/AAAA")
	{
		TextDate = date_str.split(/\//);
		TextDate_min = date_min.split(/\//);
		TextDate_max = date_max.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Mois = parseIntdbg(TextDate[1]);
		Date_Annee = parseIntdbg(TextDate[2]);
		Date_Jour_min = parseIntdbg(TextDate_min[0]);
		Date_Mois_min = parseIntdbg(TextDate_min[1]);
		Date_Annee_min = parseIntdbg(TextDate_min[2]);
		Date_Jour_max = parseIntdbg(TextDate_max[0]);
		Date_Mois_max = parseIntdbg(TextDate_max[1]);
		Date_Annee_max = parseIntdbg(TextDate_max[2]);
		BoolResult = MinMax(Date_Jour, Date_Jour_min, Date_Jour_max);
		BoolResult = (BoolResult && MinMax(Date_Mois, Date_Mois_min, Date_Mois_max));
		BoolResult = (BoolResult && MinMax(Date_Annee, Date_Annee_min, Date_Annee_max));
	}
	if (format_in == "JJ/MM/AAAA:HH:MM")
	{
		TextDate = date_str.split(/\//);
		TextDate_min = date_min.split(/\//);
		TextDate_max = date_max.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Mois = parseIntdbg(TextDate[1]);
		Date_Annee = parseIntdbg(TextDate[2].split(/:/)[0]);
		Date_Heure = parseIntdbg(TextDate[2].split(/:/)[1]);
		Date_Minute = parseIntdbg(TextDate[2].split(/:/)[2]);
		Date_Jour_min = parseIntdbg(TextDate_min[0]);
		Date_Mois_min = parseIntdbg(TextDate_min[1]);
		Date_Annee_min = parseIntdbg(TextDate_min[2].split(/:/)[0]);
		Date_Heure_min = parseIntdbg(TextDate_min[2].split(/:/)[1]);
		Date_Minute_min = parseIntdbg(TextDate_min[2].split(/:/)[2]);
		Date_Jour_max = parseIntdbg(TextDate_max[0]);
		Date_Mois_max = parseIntdbg(TextDate_max[1]);
		Date_Annee_max = parseIntdbg(TextDate_max[2].split(/:/)[0]);
		Date_Heure_max = parseIntdbg(TextDate_max[2].split(/:/)[1]);
		Date_Minute_max = parseIntdbg(TextDate_max[2].split(/:/)[2]);
		BoolResult = MinMax(Date_Jour, Date_Jour_min, Date_Jour_max);
		BoolResult = (BoolResult && MinMax(Date_Mois, Date_Mois_min, Date_Mois_max));
		BoolResult = (BoolResult && MinMax(Date_Annee, Date_Annee_min, Date_Annee_max));
		BoolResult = (BoolResult && MinMax(Date_Heure, Date_Heure_min, Date_Heure_max));
		BoolResult = (BoolResult && MinMax(Date_Minute, Date_Minute_min, Date_Minute_max));
	}
	if (format_in == "JJ/HH:MM:SS")
	{
		TextDate = date_str.split(/\//);
		TextDate_min = date_min.split(/\//);
		TextDate_max = date_max.split(/\//);
		Date_Jour = parseIntdbg(TextDate[0]);
		Date_Heure = parseIntdbg(TextDate[1].split(/:/)[0]);
		Date_Minute = parseIntdbg(TextDate[1].split(/:/)[1]);
		Date_Seconde = parseIntdbg(TextDate[1].split(/:/)[2]);
		Date_Jour_min = parseIntdbg(TextDate_min[0]);
		Date_Heure_min = parseIntdbg(TextDate_min[1].split(/:/)[0]);
		Date_Minute_min = parseIntdbg(TextDate_min[1].split(/:/)[1]);
		Date_Seconde_min = parseIntdbg(TextDate_min[1].split(/:/)[2]);
		Date_Jour_max = parseIntdbg(TextDate_max[0]);
		Date_Heure_max = parseIntdbg(TextDate_max[1].split(/:/)[0]);
		Date_Minute_max = parseIntdbg(TextDate_max[1].split(/:/)[1]);
		Date_Seconde_max = parseIntdbg(TextDate_max[1].split(/:/)[2]);
		BoolResult = MinMax(Date_Jour, Date_Jour_min, Date_Jour_max);
		BoolResult = (BoolResult && MinMax(Date_Heure, Date_Heure_min, Date_Heure_max));
		BoolResult = (BoolResult && MinMax(Date_Minute, Date_Minute_min, Date_Minute_max));
		BoolResult = (BoolResult && MinMax(Date_Seconde, Date_Seconde_max, Date_Seconde_max));
	}
	if (format_in == "HH:MM")
	{
		TextDate = date_str.split(/:/);
		TextDate_min = date_min.split(/:/);
		TextDate_max = date_max.split(/:/);
		Date_Heure = parseIntdbg(TextDate[0]);
		Date_Minute = parseIntdbg(TextDate[1]);
		Date_Heure_min = parseIntdbg(TextDate_min[0]);
		Date_Minute_min = parseIntdbg(TextDate_min[1]);
		Date_Heure_max = parseIntdbg(TextDate_max[0]);
		Date_Minute_max = parseIntdbg(TextDate_max[1]);
		BoolResult = MinMax(Date_Heure, Date_Heure_min, Date_Heure_max);
		BoolResult = (BoolResult && MinMax(Date_Minute, Date_Minute_min, Date_Minute_max));
	}
	if (format_in == "MM/AAAA")
	{
		TextDate = date_str.split(/\//);
		TextDate_min = date_min.split(/:/);
		TextDate_max = date_max.split(/:/);
		Date_Mois = parseIntdbg(TextDate[0]);
		Date_Annee = parseIntdbg(TextDate[1]);
		Date_Mois_min = parseIntdbg(TextDate_min[0]);
		Date_Annee_min = parseIntdbg(TextDate_min[1]);
		Date_Mois_max = parseIntdbg(TextDate_max[0]);
		Date_Annee_max = parseIntdbg(TextDate_max[1]);
		BoolResult = MinMax(Date_Mois, Date_Mois_min, Date_Mois_max);
		BoolResult = (BoolResult && MinMax(Date_Annee, Date_Annee_min, Date_Annee_max));
	}
	if (!BoolResult)
	{
		alert(message_inter);
		return (false);
	}
	return (true);
}

function CmpDate(str_date1, str_date2, str_format)
{
	var d1_an = 0;
	var d2_an = 0;
	var d1_mois = 1;
	var d2_mois = 1;
	var d1_jour = 1;
	var d2_jour = 1;
	var d1_heure = 0;
	var d2_heure = 0;
	var d1_min = 0;
	var d2_min = 0;
	var d1_sec = 0;
	var d2_sec = 0;

	var tdate1;
	var tdate2;

	if (str_format == "JJ/MM/AAAA")
	{
		tdate1 = str_date1.split(/\//);
		tdate2 = str_date2.split(/\//);
		d1_jour = paseInt(tdate1[0]);
		d1_mois = paseInt(tdate1[1]);
		d1_an = paseInt(tdate1[2]);
		d2_jour = paseInt(tdate2[0]);
		d2_mois = paseInt(tdate2[1]);
		d2_an = paseInt(tdate2[2]);
	}
	if (str_format == "JJ/MM/AAAA:HH:MM")
	{
		tdate1 = str_date1.split(/\//);
		tdate2 = str_date2.split(/\//);
		d1_jour = parseIntdbg(tdate1[0]);
		d1_mois = parseIntdbg(tdate1[1]);
		d1_an = parseIntdbg(tdate1[2].split(/:/)[0]);
		d1_heure = parseIntdbg(tdate1[2].split(/:/)[1]);
		d1_min = parseIntdbg(tdate1[2].split(/:/)[2]);
		d2_jour = parseIntdbg(tdate2[0]);
		d2_mois = parseIntdbg(tdate2[1]);
		d2_an = parseIntdbg(tdate2[2].split(/:/)[0]);
		d2_heure = parseIntdbg(tdate2[2].split(/:/)[1]);
		d2_min = parseIntdbg(tdate2[2].split(/:/)[2]);
	}
	if (str_format == "JJ/HH:MM:SS")
	{
		tdate1 = str_date1.split(/\//);
		tdate2 = str_date2.split(/\//);
		d1_jour = parseIntdbg(tdate1[0]);
		d1_heure = parseIntdbg(tdate1[1].split(/:/)[0]);
		d1_min = parseIntdbg(tdate1[1].split(/:/)[1]);
		d1_sec = parseIntdbg(tdate1[1].split(/:/)[2]);
		d2_jour = parseIntdbg(tdate2[0]);
		d2_heure = parseIntdbg(tdate2[1].split(/:/)[0]);
		d2_min = parseIntdbg(tdate2[1].split(/:/)[1]);
		d2_sec = parseIntdbg(tdate2[1].split(/:/)[2]);
	}
	if (str_format == "HH:MM")
	{
		tdate1 = str_date1.split(/:/);
		tdate2 = str_date2.split(/:/);
		d1_heure = parseIntdbg(tdate1[0]);
		d1_min = parseIntdbg(tdate1[1]);
		d2_heure = parseIntdbg(tdate2[0]);
		d2_min = parseIntdbg(tdate2[1]);
	}
	if (str_format == "MM/AAAA")
	{
		tdate1 = str_date1.split(/:/);
		tdate2 = str_date2.split(/:/);
		d1_an = parseIntdbg(tdate1[0]);
		d1_mois = parseIntdbg(tdate1[1]);;
		d2_an = parseIntdbg(tdate2[0]);
		d2_mois = parseIntdbg(tdate2[1]);
	}
	
	if (d1_an < d2_an)			// année
		return (-1);
	else
		if (d1_an > d2_an)
			return (1);
	if (d1_mois < d2_mois)		// mois
		return (-1);
	else
		if (d1_mois > d2_mois)
			return (1);
	if (d1_jour < d2_jour)		// jour
		return (-1);
	else
		if (d1_jour > d2_jour)
			return (1);
	if (d1_heure < d2_heure)	// heure
		return (-1);
	else
		if (d1_heure > d2_heure)
			return (1);
	if (d1_min < d2_min)		// minute
		return (-1);
	else
		if (d1_min > d2_min)
			return (1);
	if (d1_sec < d2_sec)		// seconde
		return (-1);
	else
		if (d1_sec > d2_sec)
			return (1);
	return (0);
}


function testdate_include(str_date1, str_date2, str_mois, str_annee, str_format, message_alert)
{
	var d1_mois;
        var d1_annee;
	var d2_mois;
        var d2_annee;
	var mois;
        var annee;
	var modele = /^0*/;

	if (str_format == "JJ/MM/AAAA")
	{
		d1_mois  = parseIntdbg(str_date1.split(/\//)[1]);
                d1_annee = parseIntdbg(str_date1.split(/\//)[2]); 
		d2_mois  = parseIntdbg(str_date2.split(/\//)[1]);
                d2_annee = parseIntdbg(str_date2.split(/\//)[2]);
	}
        else return(false);

	mois = parseIntdbg(str_mois);
        annee = parseIntdbg(str_annee);

	if ((d1_mois != d2_mois) ||
            (d1_mois != mois) ||
            (d1_annee != d2_annee) ||
            (d1_annee != annee))
	{
		alert(message_alert);
		return (false);
	}

	return (true);
}

function testdate_supinf(str_date_inf, str_date_sup, format, message_erreur)
{
	if (CmpDate(str_date_inf, str_date_sup, format) >= 0)
	{
		alert(message_erreur);
		return (false);
	}
      
	return (true);
}

function testvaliditeXML(str, message_valide)
{
	var modele = /&/;
	
	if (modele.test(str))
	{
<!--	alert(message_valide + "\"&\""); -->
	alert(message_valide);
		return (false);
	}
	return (true);
}

function testIfIsEmply(str, message_empty, message_valide)
{
	if (!testvaliditeXML(str, message_valide))
		return (false);
	if ((str == "") || (str == void("trux")))
	{
		alert(message_empty);
		return (false);
	}
	return (true);
}

function testlength(length, min, max, message_length)
{
        if ((length < min) || (length > max))
        {
                alert(message_length);
                return (false);
        }
        return (true);
}


function testdirection(direction, dir1, dir2, message)
{
	if( direction != dir1 && direction!= dir2)
	{	
		alert(message);
                return (false);
 	}
        return (true);
} 


function testdate_duree(str_date1, str_date2, message_erreur)
{
	var d1_an = 0;
	var d1_mois = 1;
	var d1_jour = 1;
	var d1_heure = 0;
	var d1_min = 0;

	var tdate1;
	
	tdate1 = str_date1.split(/\//);
	d1_jour = parseIntdbg(tdate1[0]);
	d1_mois = parseIntdbg(tdate1[1]);
	d1_an = parseIntdbg(tdate1[2].split(/:/)[0]);
	d1_heure = parseIntdbg(tdate1[2].split(/:/)[1]);
	d1_min = parseIntdbg(tdate1[2].split(/:/)[2]);
	
	if ((d1_mois == 1) || (d1_mois == 3) || (d1_mois == 5) || (d1_mois == 7) || (d1_mois == 8) || (d1_mois == 10))
	{
		if (d1_jour < 31)
			d1_jour = d1_jour+1;
		else
		{
			d1_jour = 1;
			d1_mois = d1_mois+1;
		}
	}
	else if ((d1_mois == 4) || (d1_mois == 6) || (d1_mois == 9) || (d1_mois == 11))
	{
		if (d1_jour < 30)
			d1_jour = d1_jour+1;
		else
		{
			d1_jour = 1;
			d1_mois = d1_mois+1;
		}
	}
	else if (d1_mois == 12)
	{
		if (d1_jour < 31)
			d1_jour = d1_jour+1;
		else
		{
			d1_jour = 1;
			d1_mois = 1;
			d1_an = d1_an+1;
		}
	}
	else if (d1_mois == 2)
	{
		if (d1_an % 4 == 0)
		{
			if (d1_jour < 29)
				d1_jour = d1_jour+1;
			else
			{
				d1_jour = 1;
				d1_mois = d1_mois+1;
			}
		}
		else
		{
			if (d1_jour < 28)
				d1_jour = d1_jour+1;
			else
			{
				d1_jour = 1;
				d1_mois = d1_mois+1;
			}
		}
	}

	str_date1 = d1_jour + "/" + d1_mois + "/" + d1_an + ":" +  d1_heure + ":" + d1_min;
	if(!testdate_supinf (str_date2, str_date1, "JJ/MM/AAAA:HH:MM", message_erreur))
		return (false);	
	return (true);
}






















