// -----------------------------------
// CALCUL ANNIVERSAIRE  !!!!!!!!!!!!!
// -----------------------------------

// -----------------------------------
//test si année bissextile
function bissextile(annee) 
{
    return (annee%4==0 && annee %100!=0 || annee%400==0);
}

// -----------------------------------
//retourne le nombre de jour dans le mois
// ATTENTION janvier = mois numero 0 !!!
function GetNbJoursMois (mois, annee)
{
    if (mois == 0) return 31;
    if (mois == 2) return 31;
    if (mois == 3) return 30;
    if (mois == 4) return 31;
    if (mois == 5) return 30;
    if (mois == 6) return 31;
    if (mois == 7) return 31;
    if (mois == 8) return 30;
    if (mois == 9) return 31;
    if (mois == 10) return 30;
    if (mois == 11) return 31;
    if (mois == 1) 
    {
        if (bissextile(annee)) return 29;
        else return 28;
    }
}

// -----------------------------------
// renvoit le nombre d'année dans un nombre de jours
function GetAnnees(ecartJours)
{
	var nbAnnees = 0;
	var curEcartJours = ecartJours;
	
	while (curEcartJours >= 365)
	{
	    nbAnnees = nbAnnees + 1;
	    curEcartJours = curEcartJours - 365;
	}
	
	return nbAnnees;
}

// -----------------------------------
// renvoit le nombre de mois entre 2 dates
function GetMois(dateDebut,finDate)
{
    // initialiser les dates de début et de fin
	var debut_date = new Date(dateDebut);
	if (finDate=="today") var fin_date = new Date();
	else                  var fin_date = new Date(finDate);
	
	var nb_mois = 0;
	var debutJour = debut_date.getDate();
	var debutMonth = debut_date.getMonth();
	var debutYear = debut_date.getFullYear();
	var debutMonthDays = GetNbJoursMois(debutMonth,debutYear);	
	var finJour = fin_date.getDate();
	var finMonth = fin_date.getMonth();
	var finYear = fin_date.getFullYear();		    
	
	// la même année
	if (debutYear==finYear)
	{
		// le même mois -> pas d'écart
		if (debutMonth==finMonth) return 0;
		// pas le même mois
		else
		{
			// dans le mois suivant, avant le mensuversaire
			if ((debutMonth+1 == finMonth) && (debutJour>finJour))  return 0;
		}
	}
	// pas la même année
	else
	{
		// le même mois
		if (debutMonth==finMonth)
		{
			// avant l'anniversaire -> 11 mois d'écart
			if (debutJour>finJour) return 11;
			// après l'anniversaire -> 0 mois
			if (debutJour<finJour) return 0;
		}
	}
	
	// si on est pas la même année et pas le même mois
	
	//compter les mois complets entre les deux mois (en commencant au mois suivant "non entammé")
	var curMonth = debut_date.getMonth()+1;
	var curYear = debut_date.getFullYear();
	var curMonthDays = GetNbJoursMois(curMonth,curYear);
	
	
	var endMonth = finMonth+1;
	if (endMonth>11) endMonth = 0;
	// tant que l'on est pas arrivé au moins en cours
	while (curMonth != endMonth)
	{
            // on augmente les mois d'ecart
            nb_mois = nb_mois + 1;
            // on passe au mois suivant
            curMonth = curMonth + 1;
            // si le mois suivant est supérieur à 12 c'est qu'on passe à l'année suivante
            if (curMonth > 11) 
            {
                curMonth = 0;
                curYear = curYear + 1;
            }
            // on met à jour la variable
            curMonthDays = GetNbJoursMois(curMonth,curYear);
	}	
	
	return nb_mois;
}

// -----------------------------------
// renvoti le nombre de jours entre 2 dates sans compter mosi et années completes
function GetJours(dateDebut,finDate)
{
    // initialiser les dates de début et de fin
	var debut_date = new Date(dateDebut);
	if (finDate=="today") var fin_date = new Date();
	else                  var fin_date = new Date(finDate);
	
	var debutJour = debut_date.getDate();
	var debutMonth = debut_date.getMonth();
	var debutYear = debut_date.getFullYear();
	var debutMonthDays = GetNbJoursMois(debutMonth,debutYear);	
	var finJour = fin_date.getDate();
	var finMonth = fin_date.getMonth();
	var finYear = fin_date.getFullYear();
	var finMonthDays = GetNbJoursMois(finMonth,finYear);
	
	if (debutJour == finJour) return 0;
	// jour après anniversaire
	if (debutJour < finJour)
	{
		return finJour-debutJour;
	}
	// jour avant anniversaire
	if (debutJour > finJour)
	{
		// le reste du premier mois entamé + les jours du derniers mois entamé
		return (debutMonthDays-debutJour) + finJour;
	}
}

// -----------------------------------
function AfficherResultat(jours,mois,annees)
{
	var html_begin="";
	var html_end="";
	
	var messageAnnees = "";
	var messageMois = "";
	var messageJours = "";
	
	if (annees) 
	{
	    if (annees > 1) messageAnnees = annees + " ans ";
	    else            messageAnnees = annees + " an ";
	    if (mois) messageAnnees = messageAnnees +",";
	}
	
	if (mois)
	{
	    if (mois > 1) messageMois = mois +  " mois ";
	    else          messageMois = mois +  " mois ";	
	}

	if (jours)
	{
		if (annees || mois) messageJours = "et ";
	    if (jours > 1) messageJours = messageJours + jours +  " jours ";
	    else           messageJours = messageJours + jours +  " jour ";	
	}
	
	document.write(html_begin + messageAnnees +" "+ messageMois +" "+ messageJours + html_end);
}

// ************** FONCTION PRINCIPALE ***********************
function decompte(dateDebut,finDate)
{
    // ATTENTION janvier = mois numero 0 !!!
    
    // initialiser les dates de début et de fin
	var debut_date = new Date(dateDebut);
	if (finDate=="today") var fin_date = new Date();
	else                  var fin_date = new Date(finDate);
	
	var ecart_jours = 0;
	var ecart_mois = 0;
	var ecart_annee = 0;
	
	// calculer la différence en jours entre les deux dates
	ecart_jours = Math.floor((fin_date.getTime() - debut_date.getTime())/(3600000*24));

	ecart_annee = GetAnnees(ecart_jours);
	
	ecart_mois  = GetMois(dateDebut,finDate);	
	
	ecart_jours = GetJours(dateDebut,finDate);
						      	
	AfficherResultat(ecart_jours,ecart_mois,ecart_annee);
}
