
// 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 = 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 = 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;
}

// Retourne un élément selon un id dans le document
function getElementById(id) {
 	
 	if (document.layers)
		return document.layers[id];
	else if (document.all)
		return document.all[id];
	else (document.getElementById)
		return document.getElementById(id);
}	

// Modifie la visibilité d'un objet
function modifierDisplay(objet, valeur)
{
	if (document.layers)
		return objet.display = valeur;
	else if (document.all)
		return objet.style.display = valeur;
	else (document.getElementById)
		return objet.style.display = valeur;
}			 

