//pour tester les champs d'un formulaire



function testeNumEntier(param) {

	var str = param.value;

	var estEntier = true;

	for (var i = 0; i < str.length; i++) {

		var ch = str.substring(i, i + 1);

		if ((ch < "0" || "9" < ch)) {

			estEntier = false;

		}

	}

	if (!estEntier) {

		alert("Vous devez entrer un nombre entier.");

		param.value="";

	}

	return estEntier;

}

function testeNumEntier2(param, chaine) {

	var str = chaine;

	var estEntier = true;

	for (var i = 0; i < str.length; i++) {

		var ch = str.substring(i, i + 1);

		if ((ch < "0" || "9" < ch)) {

			estEntier = false;

		}

	}

	if (!estEntier) {

		alert("Le format est incorrect");

		param.value="";

	}

	return estEntier;

}



function testeValeurCorrecte(param, min, max, libelle) {

	retour = true;

	testeNumEntier(param);

	var str = param.value

	if(str < min || param > max) {

		if (libelle ==null) libelle=param.name;

		alert("La valeur saisie dans le champ " + libelle + " doit être comprise entre "+min+" et "+max+".");

		param.value="";

		retour = false;

	}

	return retour;

}



function estAnnee(param, min) {

	retour = true;

	dateDuJour = new Date();

	max = dateDuJour.getFullYear();

	if (param.value != "") {

		testeNumEntier(param);

		var str = param.value;

		if(str < min || param > max) {

			alert("L'année saisie doit être comprise entre "+ min +" et "+ max +".");

			param.value="";

			retour = false;

		}

	}

	return retour;

}



function estZero(param, libelle) {

	var str=param.value;

	retour = false;

	if (str=="0") {

		retour = true;

		if (libelle ==null) libelle=param.name;

		alert("Le champ " + libelle + " ne doit pas être égal à 0.");

	}

	return retour;

}



function valideEmail(param) {

	var email=param.value;

	if ((email.indexOf('@',0)==-1) || (email.indexOf('.',0)==-1)) {

	// l'adresse entrée est incorrecte

		alert("L'adresse email saisie n'est pas valide.");

		param.value="";

		return (false);

		param.focus();

	}

	else return (true);

}



function valideNomFich(param) {

	var nomFich=param.value;

	if ((nomFich.indexOf('.',0)==-1)) {

	// le nom n'est pas un fichier

		alert("Le nom de fichier saisi n'est pas valide.");

		param.value="";

		return (false);

		param.focus();

	}

	else return (true);

}



function estVide(param,libelle) {

	var str = param.value;

	if (str.length == 0) {

		if (libelle == null) libelle=param.name;

		alert("Le champ " + libelle + " doit être renseigné.");

		return (true);

		param.focus();

	}

	else return (false);

}

function estVide2(param) {

	var str = param.value;
	if (str.length == 0 || str.length == '') {
		return (true);
	}
	else return (false);
}



function estPositif(param) {

	var pos = param[0].value;

	var neg = param[1].value;

	

	if (param[0].checked) {

		return true;

	}

	if (param[1].checked) {

		return false;

	}

}



function estCodepos(param) {

	var str = param.value;

	if (str.length!=5) {

		alert("Le champ "+param.name+" n'est pas valide");

			return (false);

			param.focus();

	}	

	else {

		for (var i = 0; i < str.length; i++) {

			var ch = str.substring(i, i + 1);

			if ((ch < "0" || "9" < ch)) {

				alert("Le champ "+param.name+" n'est pas valide");

				return (false);

				param.focus();

				break;

			}

		}

	return (true);

	}

}



function estTropCourt(param, minLgr) {

	var chaine = param.value;

	var lgr = chaine.length;

	var min = minLgr;

	if ( lgr > 0 && lgr < min) {

		alert("Le mot '" + chaine + "' est trop court. Un terme doit comporter au moins " + min + " caractères.");

		return (true);

		param.focus();

	}

	else {

		param.value = param.value.toUpperCase();

		return (false);

	}

}







// modifie par nordine benakcha le 15/10/2003

// rajout du test du numero de telephone

function estNumTel(param) {

    var str = param.value;

	var ch = str.substring(0, 1);

	retour = true;

	if (str.length<10 || str.length>10 || !testeNumEntier(param)) retour=false;

    if (ch!="0") retour=false;

    if (!retour) {

        alert("Vous devez entrer un numéro de téléphone valide.");

		param.value="";   

    }

	return retour;

}



// modifie par nordine benakcha le 16/10/2003

function estDateValide(madate) {

  // Cette fonction permet de vérifier la validité d'une date au format jj/mm/aaaa

  var d = madate.value;

  if (d == "") // si la variable est vide on retourne faux

    return false;

  

//  e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");

  e = new RegExp("^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$");

  

  if (!e.test(d)) // On teste l'expression régulière pour valider la forme de la date

    return false; // Si pas bon, retourne faux



  // On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier

  j = parseInt(d.split("/")[0], 10); // jour

  m = parseInt(d.split("/")[1], 10); // mois

  a = parseInt(d.split("/")[2], 10); // année



  // Si l'année n'est pas composée de 4 chiffres

  if (a < 1000) {

    return false;

  }



  // Définition du dernier jour de février

  // Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400

  if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;

  else fev = 28;



  // Nombre de jours pour chaque mois

  nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);



  // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux

  return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );

}



function dateInverse(d) { // prend en argument une chaine JJ/MM/AAAA et retourne la chaine AAAA/MM/JJ correspondante

  var j = d.split("/")[0]; // jour

  var m = d.split("/")[1]; // mois

  var a = d.split("/")[2]; // année

  return a+'/'+m+'/'+j;

}



function estDimanche(d) {

  var j = d.value.split("/")[0]; // jour

  var m = d.value.split("/")[1]; // mois

  var a = d.value.split("/")[2]; // année

  var madate=new Date(a, m-1, j);

  

  if (madate.getDay()==0) {

  	alert("La date saisie est un dimanche : "+j+"/"+m+"/"+a+"\nVeuillez la modifier");

  	return true;

  }

  else {

  	return false;

  }

}

function estSamedi(d) {

  var j = d.value.split("/")[0]; // jour

  var m = d.value.split("/")[1]; // mois

  var a = d.value.split("/")[2]; // année

  var madate=new Date(a, m-1, j);

  

  if (madate.getDay()==6) {

  	alert("La date saisie est un samedi : "+j+"/"+m+"/"+a+"\nVeuillez la modifier");

  	return true;

  }

  else {

  	return false;

  }

}

//fin de la modification



// rajout du test : dans une liste, on verifie que l'element selectionne n'est pas le premier (dans le premier, on demande à l'utilisateur de selectionner un element)

function estSelectionne(param) {

	var ent = param.selectedIndex;

	retour = true;

	if(ent<1) {

		alert("Veuillez sélectionner un élément de la liste");

		retour = false;

	}

	return retour;

}

// fin de la modification



//****** verifie si la date1 est anterieure à la date2*********

function estAnterieure(j1, j2, m1, m2, a1, a2) {

	var date1 = a1.value +'/'+ m1.value +'/' + j1.value;

	var date2 = a2.value +'/'+ m2.value +'/' + j2.value;

	var d1 = new Date(date1);

	var d2 = new Date(date2);

	if (d1.getTime() > d2.getTime()) {

		alert('Erreur ! La date '+ date1 +' est plus récente que la date '+ date2 +'.');

		retour = false;

	}

	else retour = true;

	return retour;

}
function estAnterieure2(date1, date2) {
	var j1 = date1.value.split("/")[0]; // jour
	var m1 = date1.value.split("/")[1]; // mois
	var a1 = date1.value.split("/")[2]; // année
	var date1 = m1 +'/'+ j1 +'/' + a1;
	var d1 = new Date(date1);
	var j2 = date2.value.split("/")[0]; // jour
	var m2 = date2.value.split("/")[1]; // mois
	var a2 = date2.value.split("/")[2]; // année
	var date2 = m2 +'/'+ j2 +'/' + a2;
	var d2 = new Date(date2);
	if (d1.getTime() > d2.getTime()) {
		retour = false;
	}
	else retour = true;
	return retour;
}
/*	var j = date.value.split("/")[0]; // jour
	var m = date.value.split("/")[1]; // mois
	var a = date.value.split("/")[2]; // année
	var date1 = m +'/'+ j +'/' + a;
	var d1 = new Date(date1);
	var d2 = new Date();
	if (d1.getTime() <= d2.getTime()) {
		retour = false;
	}

*/


//****** verifie si l'heure1 est anterieure à l'heure2*********

function estAnterieureH(h1, h2, min1, min2) {

	var heure1 = (h1.value * 60) + parseInt(min1.value);

	var heure2 = (h2.value * 60) + parseInt(min2.value);

	

	if (heure1 >= heure2) {

		alert('Erreur ! La première heure saisie est égale ou supérieure à la seconde heure saisie.');

		retour = false;

	}

	else retour = true; 

	return retour;

}

//****** verifie si la durée entre deux heures 'heure1' 'heure2' est égale à X (min)*********

function timeEstOk(h1, h2, min1, min2, minutes) {

	var heure1 = (h1.value * 60) + parseInt(min1.value);

	var heure2 = (h2.value * 60) + parseInt(min2.value);

	if ((heure2 - heure1) < minutes) {

		alert('Erreur ! La durée saisie doit être égale à au moins ' + minutes + ' minutes.');

		retour = false;

	}

	else retour = true; 

	return retour;

}


//****** verifie si la date1 est expirée*********

function estFuture(j1, m1, a1) {

	var date1 = a1.value +'/'+ m1.value +'/' + j1.value;

	var d1 = new Date(date1);

	var d2 = new Date();

	if (d1.getTime() <= d2.getTime()) {

		alert('Erreur ! Le délai pour cette date est expiré !');

		retour = false;

	}

	else retour = true;

	return retour;

}

//****** verifie si la date1 est expirée*********

function estFuture2(date) {
	var j = date.value.split("/")[0]; // jour
	var m = date.value.split("/")[1]; // mois
	var a = date.value.split("/")[2]; // année
	var date1 = m +'/'+ j +'/' + a;
	var d1 = new Date(date1);
	var d2 = new Date();
	if (d1.getTime() <= d2.getTime()) {
		retour = false;
	}
	else retour = true;
	return retour;
}

//****** verifie si le delai entre date du jour et date1 est egal ou sup au delai entre date1 et date2*********

function estDelaiOk(j1, j2, m1, m2, a1, a2) {

	

	var date1 = a1.value +'/'+ m1.value +'/' + j1.value;

	var date2 = a2.value +'/'+ m2.value +'/' + j2.value;

	var d0 = new Date();

	var d1 = new Date(date1);

	var d2 = new Date(date2);

	

	if ((d1.getTime() - d0.getTime()) <= (d2.getTime() - d1.getTime())) {

		alert('Erreur ! Désolé, le délai est trop court !');

		retour = false;

	}

	else retour = true;

	return retour;

}

//****** verifie si le congé déposé excède x semaines *********

function estExcessif(j1, j2, m1, m2, a1, a2) {

	var oneDay = 86400000; // timestamp pour 1 journée

	

	var limite 	= oneDay * 7 * 8 // timestamp pour 8 semaines

	var date1 = a1.value +'/'+ m1.value +'/' + j1.value;

	var date2 = a2.value +'/'+ m2.value +'/' + j2.value;

	

	var d1 = new Date(date1);

	var d2 = new Date(date2);

	

	if ((d2.getTime() - d1.getTime()) > limite) {

		alert('Erreur ! Désolé, votre demande de congé excède la limite autorisée !');

		retour = false;

	}

	else retour = true;

	return retour;

}



//****** retourne les jours fériés de l'année <an> *********

//****** les mois sont à m-1 : janvier=0, decembre=11 ******



function joursFeries (an){

  var JourAn = new Date(an, "00", "01")

  var FeteTravail = new Date(an, "04", "01")

  var Victoire1945 = new Date(an, "04", "08")

  var FeteNationale = new Date(an,"06", "14")

  var Assomption = new Date(an, "07", "15")

  var Toussaint = new Date(an, "10", "01")

  var Armistice = new Date(an, "10", "11")

  var Noel = new Date(an, "11", "25")

    

  var G = an%19

  var C = Math.floor(an/100)

  var H = (C - Math.floor(C/4) - Math.floor((8*C+13)/25) + 19*G + 15)%30

  var I = H - Math.floor(H/28)*(1 - Math.floor(H/28)*Math.floor(29/(H + 1))*Math.floor((21 - G)/11))

  var J = (an*1 + Math.floor(an/4) + I + 2 - C + Math.floor(C/4))%7

  var L = I - J

  var MoisPaques = 3 + Math.floor((L + 40)/44)

  var JourPaques = L + 28 - 31*Math.floor(MoisPaques/4)

  var Paques = new Date(an, MoisPaques-1, JourPaques)

  var VendrediSaint = new Date(an, MoisPaques-1, JourPaques-2)

  var LundiPaques = new Date(an, MoisPaques-1, JourPaques+1)

  var Ascension = new Date(an, MoisPaques-1, JourPaques+39)

  var Pentecote = new Date(an, MoisPaques-1, JourPaques+49)

  var LundiPentecote = new Date(an, MoisPaques-1, JourPaques+50)


//  return new Array(JourAn, LundiPaques, FeteTravail, Victoire1945, Ascension, FeteNationale, Assomption, Toussaint, Armistice, Noel)
  return new Array(JourAn, LundiPaques, FeteTravail, Victoire1945, Ascension, LundiPentecote, FeteNationale, Assomption, Toussaint, Armistice, Noel)

}



//****** Teste si une date saisie est fériée *********

function estFerie(d) {

	retour = false;

	var j = d.value.split("/")[0]; // jour

	var m = d.value.split("/")[1]; // mois

	var a = d.value.split("/")[2]; // année

	var maDate=new Date(a, m-1, j);

	

	var tabFeries = joursFeries(a);

	var i = 0;

	var ferie = false;

	

	while(!ferie && (i <tabFeries.length)) {

		var jour = tabFeries[i].getDate();

		var mois = tabFeries[i].getMonth();

		var an = tabFeries[i].getYear();

		

		var monJour = maDate.getDate();

		var monMois = maDate.getMonth();

		var monAn = maDate.getYear();

		

		if ((jour == monJour ) && (mois == monMois) && (an == monAn)) {

			ferie = true

		}

		i++

	}



	if (ferie == true) {

		alert('La date '+ d.value + ' est fériée !');

		retour = true;

	}

	return retour;

	

}



//****** Teste si heure saisie est au format 00:00 *********

function formatTime(param) {

	var retour	= true;

	var str		= param.value;

	var heures	= str.substr(0,2);

	var minutes 	= str.substr(3,2);

	var separator	= str.substr(2,1);

	if (separator != ':') {

		param.value='';

		retour = false;

	}

	if (!testeNumEntier2(param, heures) || !testeNumEntier2(param, minutes)) {

		param.focus();

		retour = false;

	}

	return retour;

}



//****** Renvoie saisie au format 00:00 en minutes *********

function dateToMin(param) {

	var str		= param.value;

	var heures	= str.substr(0,2);

	var minutes 	= str.substr(3,2);

	var totMinutes  = (heures*60)+parseInt(minutes);

	return totMinutes;

}
