
/*
	Vérifie si une date est correctement saisie. Et si elle doit être saisie,
	vérifie qu'elle l'est.
	- paramètres:
		* obj_date_j:	l'objet contenant le jour (controle input en fait) ou directement la valeur corresp. au jour
		* obj_date_m: 	l'objet contenant le mois (controle input en fait) ou directement la valeur corresp. au mois
		* obj_date_a: 	l'objet contenant l'année (controle input en fait) ou directement la valeur corresp. à l'année
		* lbl_date:		Nom de la date qui s'affichera dans les messages d'alerte.
		* lgr_annee:	Nombre de caratères de l'année (2 ou 4 en gén.)
		* oblig:		True si elle doit être saisie, false sinon.
		* par_objet:	True si ce sont des références d'objet qui sont passées en paramètre, false si ce sont des valeurs.
*/

function verif_date_new(obj_date_j,obj_date_m,obj_date_a,lbl_date,lgr_annee,oblig,parObjet)
{
	if(parObjet)
	{
		var date_j = obj_date_j.value;
		var date_m = obj_date_m.value;
		var date_a = obj_date_a.value;
	}
	else
	{
		var date_j = obj_date_j;
		var date_m = obj_date_m;
		var date_a = obj_date_a;
	}

	if(isEmpty(date_j) && isEmpty(date_m) && isEmpty(date_a))
	{
		if(oblig)
		{
			alert("Veuillez saisir la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_j.focus();
			return false;
		}
	}
	else
	{
		if(isNaN(date_j) == true || date_j == "" || date_j.indexOf("-") != -1 || date_j.indexOf("+") != -1 || date_j.indexOf(".") != -1 || date_j.indexOf(",") != -1 || date_j.length != 2)
		{
			alert("Veuillez saisir un jour correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_j.focus();
			return false;
		}
		else if(isNaN(date_m) == true || date_m == "" || date_m.indexOf("-") != -1 || date_m.indexOf("+") != -1 || date_m.indexOf(".") != -1 || date_m.indexOf(",") != -1 || date_m.length != 2)
		{
			alert("Veuillez saisir un mois correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_m.focus();
			return false;
		}
		else if(isNaN(date_a) == true || date_a == "" || date_a.indexOf("-") != -1 || date_a.indexOf("+") != -1 || date_a.indexOf(".") != -1 || date_a.indexOf(",") != -1 || date_a.length != lgr_annee)
		{
			alert("Veuillez saisir une année correct pour la date "+ lbl_date +"!");
			if(parObjet)
				obj_date_a.focus();
			return false;
		}
		else
		{
			if(date_j <= 0 || date_j > 31 || date_m <= 0 || date_m > 12 || date_a <= 0)
			{
				alert("La date "+ lbl_date +" est incorrecte!");
				if(parObjet)
					obj_date_j.focus();
				return false;
			}
		}
	}
	return true;
}

function verif_date_new_simple(obj_date_j,obj_date_m,obj_date_a,lgr_annee,oblig,parObjet)
{
	if(parObjet)
	{
		var date_j = obj_date_j.value;
		var date_m = obj_date_m.value;
		var date_a = obj_date_a.value;
	}
	else
	{
		var date_j = obj_date_j;
		var date_m = obj_date_m;
		var date_a = obj_date_a;
	}

	if(isEmpty(date_j) && isEmpty(date_m) && isEmpty(date_a))
	{
		if(oblig)
			return 1; // date obligatoire		
	}
	else
	{
		if(isNaN(date_j) == true || date_j == "" || date_j.indexOf("-") != -1 || date_j.indexOf("+") != -1 || date_j.indexOf(".") != -1 || date_j.indexOf(",") != -1 || date_j.length != 2)
			return 2; // jour saisi incorrect
		else if(isNaN(date_m) == true || date_m == "" || date_m.indexOf("-") != -1 || date_m.indexOf("+") != -1 || date_m.indexOf(".") != -1 || date_m.indexOf(",") != -1 || date_m.length != 2)
			return 3; // mois saisi incorrect
		else if(isNaN(date_a) == true || date_a == "" || date_a.indexOf("-") != -1 || date_a.indexOf("+") != -1 || date_a.indexOf(".") != -1 || date_a.indexOf(",") != -1 || date_a.length != lgr_annee)
			return 4; // année saisie incorrecte
		else
		{
			if(date_j <= 0 || date_j > 31 || date_m <= 0 || date_m > 12 || date_a <= 0)
				return 5; // date saisie incorrecte			
		}
	}
	return 0;
}

function verif_date(date_j,date_m,date_a,lbl_date)
{
	return verif_date_new(date_j,date_m,date_a,lbl_date,2,false,false);
}

function verif_heure_new(obj_heure_h,obj_heure_m,lbl_heure,oblig,parObjet)
{
	if(parObjet)
	{
		var heure_h = obj_heure_h.value;
		var heure_m = obj_heure_m.value;
	}
	else
	{
		var heure_h = obj_heure_h;
		var heure_m = obj_heure_m;
	}

	if(isEmpty(heure_h) && isEmpty(heure_m))
	{
		if(oblig)
		{
			alert("Veuillez saisir l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_h.focus();
			return false;
		}
	}
	else
	{
		if(isNaN(heure_h) == true || heure_h == "" || heure_h.indexOf("-") != -1 || heure_h.indexOf("+") != -1 || heure_h.indexOf(".") != -1 || heure_h.indexOf(",") != -1 || heure_h.length != 2)
		{
			alert("Veuillez saisir une heure correcte pour l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_h.focus();
			return false;
		}
		else if(isNaN(heure_m) == true || heure_m == "" || heure_m.indexOf("-") != -1 || heure_m.indexOf("+") != -1 || heure_m.indexOf(".") != -1 || heure_m.indexOf(",") != -1 || heure_m.length != 2)
		{
			alert("Veuillez saisir un nombre de minutes correct pour l'heure "+ lbl_heure +"!");
			if(parObjet)
				obj_heure_m.focus();
			return false;
		}
		else
		{
			if(heure_h < 0 || heure_h > 23 || heure_m < 0 || heure_m > 59)
			{
				alert("L'heure "+ lbl_heure +" est incorrecte!");
				if(parObjet)
					obj_heure_h.focus();
				return false;
			}
		}
	}
	return true;
}

function verif_heure(heure_h,heure_m,lbl_heure)
{
	return verif_heure_new(heure_h,heure_m,lbl_heure,false,false);
}
function comparer_dates(jour1,mois1,annee1,jour2,mois2,annee2,libelle_alerte,op)
{
	if(op != ">" && op != ">=" && op != "<" && op != "<=" && op != "==")
		return false;

	if(jour2 != "" && mois2 != "" && annee2 != "")
	{
		var date1 = new Date(annee1,mois1,jour1);
		var date2 = new Date(annee2,mois2,jour2);
		var res = false;

		//alert(date1+" "+date2);
		if(op == ">")
			res = (date1 > date2);
		else if (op == ">=")
			res = (date1 >= date2);
		else if (op == "<")
			res = (date1 < date2);
		else if (op == "<=")
			res = (date1 <= date2);

		if(res)
			return true;
		alert(libelle_alerte);
		return false;
	}
	else
		return true;
}

function verif_date2_sup_date1(jour1,mois1,annee1,jour2,mois2,annee2)
{
	mois1--;
	mois2--;
	if(annee1.length == 2)
		annee1 = "20"+annee1;
	if(annee2.length == 2)
		annee2 = "20"+annee2;
	return comparer_dates(jour1,mois1,annee1,jour2,mois2,annee2,"La date de début doit être antérieure à la date de fin","<=");
}

/* retourne le jour précédent une date donnée.
La date donnée peut etre au format String aaaammjj ou sous forme d'objet date (par défaut)
Préciser aussi le format du retour (date - 1 jour)
*/
function operation_date(nb_jours,date_ref,format_in,format_out)
{
	var jour_prec=null;
	
	if(date_ref != "" && ! isNaN(nb_jours))
	{
		if(format_in == "aaaammjj")
			var ts=Date.parse(new Date(date_ref.substr(0,4),date_ref.substr(4,2)-1,date_ref.substr(6,2)));
		else
			var ts=Date.parse(date_ref);
			
		var date_tmp;
		
		ts=ts+(nb_jours * 24 * 3600 * 1000); // 1 jour de moins		
		date_tmp=new Date(ts);
			
		if(format_out == "aaaammjj")
		{
			var jj=date_tmp.getDate();
			var mm=date_tmp.getMonth()+1;			
			var aaaa=date_tmp.getYear();
			
			if(jj < 10)
				jj="0"+jj;
			if(mm < 10)
				mm="0"+mm;
			jour_prec=aaaa+""+mm+""+jj;
		}
		else
			jour_prec=date_tmp;
			
	}
	return jour_prec;
}

function get_jour_dans_semaine(date_ref)
{
	var maintenant = new Date();	
	if(date_ref == "")
		var jour_dans_semaine = maintenant.getDay();
	else
		var jour_dans_semaine = (new Date(date_ref.substr(0,4),date_ref.substr(4,2)-1,date_ref.substr(6,2))).getDay();
	
	var jour_semaine = new Array("dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi");
	return jour_semaine[jour_dans_semaine];
}

function get_prem_jour_semaine(date_ref)
{
	if(date_ref != "")
	{
		var jour_curr=get_jour_dans_semaine(date_ref);
		var date_prem_jour=date_ref;
		var ts=0;
		var date_tmp;
	
		ts=Date.parse(new Date(date_ref.substr(0,4),date_ref.substr(4,2)-1,date_ref.substr(6,2)));
		while(jour_curr != "lundi")
		{			
			ts=ts-(1 * 24 * 3600 * 1000); // 1 jour de moins
			date_tmp=new Date(ts);
			
			var jj=date_tmp.getDate();
			var mm=date_tmp.getMonth()+1;			
			var aaaa=date_tmp.getYear();
			
			if(jj < 10)
				jj="0"+jj;
			if(mm < 10)
				mm="0"+mm;
				
			date_prem_jour=aaaa+""+mm+""+jj;
			jour_curr=get_jour_dans_semaine(date_prem_jour);
			ts=Date.parse(new Date(date_prem_jour.substr(0,4),date_prem_jour.substr(4,2)-1,date_prem_jour.substr(6,2)));
		}
		return date_prem_jour;
	}
}

function inf_a_max_ans(la_date,max_an) /* format: 2004-11-08 */
{
	var today = new Date();
	var aaaa = la_date.slice(0,4);
	var mm = eval(la_date.slice(5,7) - 1);
	var jj = la_date.slice(8,10);


	var date_tmp = new Date(aaaa,mm,jj);
	var diff = date_tmp - today; // nb mili-sec écart
	diff = diff / 1000; // nb sec écart
	diff = diff / 3600; // nb heure écart
	diff = diff / 24; // nb jour écart
	diff = diff / 365.25; // nb d'année d'écart
	diff = Math.floor(diff);

	if(diff <= max_an)
		return true;
	return false;
}

/**Méthode vérifiant que le champ soit bien une date*/
function isDate(valeur){
   var re = /^\d{1}\d{1}\/\d{1}\d{1}\/\d{1}\d{1}\d{1}\d{1}$/;

   if(!re.test(valeur)){
        alert("Vous n'avez pas saisie une date !!!");
        return false;
   }
   return true;
}


/**************** Date complète mercredi 12 janvier 2001 par ex. ******************/
function fait_Array(n) {
  this.length = n;
  return this;
}

aMois = new fait_Array(12);
aMois[1] = "janvier";
aMois[2] = "février";
aMois[3] = "mars";
aMois[4] = "avril";
aMois[5] = "mai";
aMois[6] = "juin";
aMois[7] = "juillet";
aMois[8] = "août";
aMois[9] = "septembre";
aMois[10] = "octobre";
aMois[11] = "novembre";
aMois[12] = "décembre";

aJours = new fait_Array(7);
aJours[1] = "Dimanche";
aJours[2] = "Lundi";
aJours[3] = "Mardi";
aJours[4] = "Mercredi";
aJours[5] = "Jeudi";
aJours[6] = "Vendredi";
aJours[7] = "Samedi";

function date_long(nDate) {
  var nEr = nDate.getDate();
  if (nEr == 1) nEr += "er";
  var nJour = aJours[nDate.getDay() + 1];
  var nMois = aMois[nDate.getMonth() + 1];
  var nAnnee = nDate.getYear();
  if (nAnnee < 100) nAnnee += 2000;
  if (nAnnee > 100&&nAnnee < 2000) nAnnee += 1900;
  return nJour + " " + nEr + " " + nMois + " " + nAnnee;
}
