
// Tableau contenant la liste des mois sans majuscule
var tabMoisMin = ["janvier", "février", "mars", "avril", "mai",
                  "juin", "juillet", "août", "septembre", "octobre",
                  "novembre", "décembre"];

// Tableau conteant la liste des mois avec une majuscule en début de mot
var tabMoisMaj = ["Janvier", "Février", "Mars", "Avril", "Mai",
                  "Juin", "Juillet", "Août", "Septembre", "Octobre",
                  "Novembre", "Décembre"];

// Tableau conteant la longueur habituel des mois
var tabLongueurMois = [31,29,31,30,31,30,31,31,30,31,30,31];

// Tableau contenant la liste des jours sans majuscule
var tabJourMin = ["dimanche", "lundi", "mardi", "mercredi", "jeudi",
                  "vendredi", "samedi"];

// Tableau conteant la liste des jours avec une majuscule en début de mot
var tabJourMaj = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi",
                  "Vendredi", "Samedi"];

// Tableau conteant la liste des jours en abrévition (une seule lettre en minuscule)
var tabJourAbrvMin = ["d", "l", "m", "m", "j",
                      "v", "s"];

var grandeurXCalendrier = 7;
var grandeurYCalendrier = 6;

// Jour de la semaine du 1er jour du mois
var premierJourMois = 0;

// Date du jour
var anneeDuJour = 0;
var jourDuJour = 0;
var moisDuJour = 0;

// Annee et mois courant du calendrier (seront modifiée à l'initialisation)
var anneeCalendrier = 2005;
var moisCalendrier = 0;

// ---------------------------------------------------------
// -- Varaible initialisée lors de l'appel de la méthode  --
// -- initialiserCalendrier                               --
// ---------------------------------------------------------

// Adresse de redirection au click d'un jour sur le calendrier
var urlRedirectionCalendrier = "";

// Objet ou est affiché le mois et l'année dans le calendrier
var afficheurMoisAnnee = null;

// Début des nom (id) des cellules du tableau
var nomCellules = "";

// ---------------------------------------------------------

// Initialise le calendrier
function initialiserCalendrier(leNomCellules, idAffichageMoisAnnee, urlRedirection, annee, mois, jour)
{
	if (leNomCellules != null)
		nomCellules = leNomCellules;

	if (idAffichageMoisAnnee != null)
		afficheurMoisAnnee = document.getElementById(idAffichageMoisAnnee);

	if (urlRedirection != null)
		urlRedirectionCalendrier = urlRedirection;

	// Définis la date du jour ou la date demandée dans les parametres
	var dateDuJour = new Date();

	if (annee != null)
		anneeDuJour = annee;
	else
		anneeDuJour = dateDuJour.getFullYear();

	if (mois != null)
		moisDuJour = mois;
	else
		moisDuJour = dateDuJour.getMonth();

	if (jour != null)
		jourDuJour = jour;
	else
		jourDuJour = dateDuJour.getDate();

	// Définis le calendrier
	setCalendrier(anneeDuJour, moisDuJour);
}

// Redéfinit le calendrier avec une nouvelle annee et un nouveau mois
function setCalendrier(annee, mois)
{
	if ((annee != null) && (mois != null))
	{
		var dateDebutMoisCourant = new Date(annee, mois, 1);
		anneeCalendrier = dateDebutMoisCourant.getFullYear();
		moisCalendrier = dateDebutMoisCourant.getMonth();
		var nbJourMoisCourant = getNbJoursMois(moisCalendrier, anneeCalendrier);
		premierJourMoisCourant = dateDebutMoisCourant.getDay();

		var leJour = 1;

		// set le calendrier pour le mois courant
		for (var i = 0; (i < grandeurYCalendrier) && (leJour <= nbJourMoisCourant); i++)
		{
			var jourDebutSemaine = 0;
			if (i == 0)
				jourDebutSemaine = premierJourMoisCourant;

			for (var j = jourDebutSemaine; (j < grandeurXCalendrier) && (leJour <= nbJourMoisCourant); j++)
			{
				// Regarde si c'est le jour courant qui est trait
				if ((leJour == jourDuJour) && (moisDuJour == moisCalendrier) && (anneeDuJour == anneeCalendrier))
					afficherLienJour(i, j, leJour, moisCalendrier, anneeCalendrier, "jourDuMois");
				else
					afficherLienJour(i, j, leJour, moisCalendrier, anneeCalendrier, "jourDansMois");
				leJour++;
			}
		}


		var dateDebutMoisPrecedent = new Date(annee, mois-1, 1);
		var moisPrecedent = dateDebutMoisPrecedent.getMonth();
		var anneePrecedente = dateDebutMoisPrecedent.getFullYear();
		var nbJourMoisPrecendent = getNbJoursMois(moisPrecedent, anneePrecedente);

		leJour = nbJourMoisPrecendent - premierJourMoisCourant + 1;

		// set le calendrier des jours du mois précédent
		for (var i = 0; leJour <= nbJourMoisPrecendent; i++)
		{
			afficherLienJour(0, i, leJour, moisPrecedent, anneePrecedente, "jourHorsMois");
			leJour++;
		}


		var dateDebutMoisSuivant = new Date(annee, mois+1, 1);
		var moisSuivant = dateDebutMoisSuivant.getMonth();
		var anneeSuivante = dateDebutMoisSuivant.getFullYear();
		var posYSuivant = Math.floor((premierJourMoisCourant + nbJourMoisCourant) / grandeurXCalendrier);
		var posXSuivant = (premierJourMoisCourant + nbJourMoisCourant) % grandeurXCalendrier;

		leJour = 1;

		// set le calendrier pour le mois suivant
		for (var i = posYSuivant; i < grandeurYCalendrier; i++)
		{
			var jourDebutSemaine = 0;
			if (i == posYSuivant)
				jourDebutSemaine = posXSuivant;

			for (var j = jourDebutSemaine; j < 7; j++)
			{
				afficherLienJour(i, j, leJour, moisSuivant, anneeSuivante, "jourHorsMois");
				leJour++;
			}
		}


		// on affiche le mois et l'année dans le calendrier
		if (afficheurMoisAnnee != null)
			afficheurMoisAnnee.innerHTML = tabMoisMin[moisCalendrier] + " " + anneeCalendrier;
	}
	else
		alert("setCalendrier - annee et/ou mois null");
}

// Affiche le lien du jour dans la cellule selon la position x et y
function afficherLienJour(posX, posY, jour, mois, annee, classe)
{
	var cellule = document.getElementById(nomCellules + "_" + posX + "_" + posY);
	if (cellule != null)
		cellule.innerHTML = "<a class='" + classe + "' href='" + urlRedirectionCalendrier + "?type=date2&annee=" + annee + "&mois=" + (mois+1) + "&jour=" + jour + "'>" + jour + "</a>";
	else
		cellule.innerHTML = "<a class='" + classe + "' href='#'>?</a>";
}

// Change le calendrier pour le mois suivant
function passerMoisSuivant()
{
	setCalendrier(anneeCalendrier, moisCalendrier+1);
}

// Change le calendrier pour le mois précendent
function passerMoisPrecedent()
{
	setCalendrier(anneeCalendrier, moisCalendrier-1);
}

// Retourne le nombre de jours dans le mois
function getNbJoursMois(mois, annee)
{
	if ((mois != null) && (mois >= 0) && (mois <= 11))
	{
		// Si le mois n'est pas le mois de février
		if (mois != 1)
			return tabLongueurMois[mois];
		else
			return getNbJourMoisFevrier(annee);
	}
	else
	{
		alert("getNbJoursMois - mois null ou invalide");
		return null;
	}
}

// Teste une annee pour determiner si elle est bissextile ou pas
function getNbJourMoisFevrier(annee)
{
	if (annee != null)
	{
		if((annee % 100 !=0 && annee % 4==0)||(annee % 400==0))
			return 29
		else
			return 28
	}
	else
		return null;
}

