/*
*	Fichier calendrier.js : génère un calendrier client mensuel permettant de sélectionner une date
*/

// Variables globales
var aujourdhui=new Date();
var fenetre;
var champ;
var dispoCourante = 0;
var listeJour="lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche";
var listeMois="Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre";

// Fonction getJour, retourne le nom du i-ème jour [0..6] de la semaine en français
function getJour(jour)
{
	tabJour=listeJour.split(",");
	return tabJour[jour];
}

// Fonction getMois, retourne le nom du i-ème mois [0..11] de l'année en français
function getMois(mois)
{
	tabMois=listeMois.split(",");
	return tabMois[mois];
}

// Fonction getSemaine, retourne le numéro de la semaine correspondant à la date
function getSemaine(date)
{
	debut=new Date(date.getFullYear(),0,1);
	jour=debut.getDay();
	nbMsJour=86400000;
	if(jour==0)jour=7;
	(jour>4)&&(jour-=4)||(jour+=3);
	return Math.ceil((((date-debut)/nbMsJour)+jour)/7);
}

//mise en forme de la date : 2005-05-15
function formaterDatePhp(date)
{
	var dateRetour = date.getFullYear();
	if((date.getMonth()+1)<10)
		dateRetour += "-0"+(date.getMonth()+1);
	else
		dateRetour += "-"+(date.getMonth()+1);
	if(date.getDate()<10)
		dateRetour += "-0"+date.getDate();
	else
		dateRetour += "-"+date.getDate();
	return dateRetour;
}
	
// Fonction insererDateChamp, permet d'insérer la date choisie dans le calendrier dans le champ
function insererDateChamp(jour)
{
	f=fenetre.document.forms[0];
	mois=f.mois.selectedIndex+1;
	annee=f.annee.options[f.annee.selectedIndex].value;
	date=new Date(annee,mois,jour);
	if (mois<10) mois="0"+mois;
	libelle=jour+"/"+mois+"/"+annee;
	//eval("fenetre.opener.document.forms[0]"+champ+".value='"+libelle+"';");
	champ.value=libelle;
	fenetre.close();
	fenetre=null;
}

// Fonction afficherCalendrier, permet de calculer et d'afficher dans un conteneur un calendrier mensuel
// Avec des liens sur les jours qui permettent d'insérer automatiquement une date dans un champ texte
function afficherCalendrier(mois,annee)
{
	tmp="<table class=\"calendrier\">";
	tmp+="<tr><th colspan=\"8\" class=\"mois\">"+getMois(mois)+" "+annee+"</th></tr>";
	tmp+="<tr class=\"jour\"><th class=\"semaine\">Sem</th><th>L</th>";
	tmp+="<th>M</th><th>M</th><th>J</th><th>V</th><th>S</th><th>D</th>";
	date=new Date(annee,mois,1,0,0,0);
	numCaseInit=date.getDay()-1;
	if (numCaseInit==-1) numCaseInit=6;
	for (numCase=0;numCase<42;numCase++)
	{
		if ((numCase%7)==0)
		{
			tmp+="</tr><tr><td class=\"semaine\">"+getSemaine(date)+"</td>";
		}
		tmp+="<td";
		if (numCase<numCaseInit || date.getMonth()!=mois)
		{
			tmp+=">&nbsp;";
		}
		else if(estOccupee(formaterDatePhp(date))){
				tmp+=" class=\"nonDispo\">";
		}
		else{
			tmp+=" class=\"dispo\">";//<a href=\"javascript:insererDateChamp("+date.getDate()+")\">";
		}
		if (numCase>=numCaseInit && date.getMonth()==mois)
		{
			tmp+=date.getDate();
			date.setDate(date.getDate()+1);
		}
		tmp+="</td>";
	}
	tmp+="</tr></table>";
	document.getElementById("calendrier").innerHTML+=tmp;
}

// Fonction genererSelecteurMois, génère une boite de sélection des mois
function genererSelecteurMois(mois)
{
	tmp="<select name=\"mois\" onchange=\"opener.majCalendrier()\">";
	for (i=0;i<12;i++)
	{
		tmp+="<option value="+i;
		if (i==mois)tmp+=" selected";
		tmp+=">"+getMois(i)+"</option>";
	}
	tmp+="</select>";
	return tmp;
}

// Fonction genererSelecteurAnnee, génère une boite de sélection des années
function genererSelecteurAnnee(annee)
{
	tmp="<select name=\"annee\" onchange=\"opener.majCalendrier()\">";
	for (i=annee-1;i<annee+10;i++)
	{
		tmp+="<option value="+i;
		if (i==annee)tmp+=" selected";
		tmp+=">"+i+"</option>";
	}
	tmp+="</select>";
	return tmp;
}

// Fonction moisPrecedent, positionne les boites de sélections mois et annee au mois précédent
function moisPrecedent()
{
	indMois=fenetre.document.forms[0].mois.selectedIndex;
	indAnnee=fenetre.document.forms[0].annee.selectedIndex;
	if (indMois==0)
	{
		if (indAnnee>0)
		{
			indMois=11;
			indAnnee--;
		}
	}
	else
	{
		indMois--;
	}
	fenetre.document.forms[0].mois.selectedIndex=indMois;
	fenetre.document.forms[0].annee.selectedIndex=indAnnee;
	majCalendrier();
}

// Fonction moisSuivant, positionne les boites de sélections mois et annee au mois suivant
function moisSuivant()
{
	indMois=fenetre.document.forms[0].mois.selectedIndex;
	indAnnee=fenetre.document.forms[0].annee.selectedIndex;
	if (indMois==11)
	{
		if (indAnnee<2)
		{
			indMois=0;
			indAnnee++;
		}
	}
	else
	{
		indMois++;
	}
	fenetre.document.forms[0].mois.selectedIndex=indMois;
	fenetre.document.forms[0].annee.selectedIndex=indAnnee;
	majCalendrier();
}

// Fonction popupCalendrier ouvre le menu et le calendrier dans une popup
function popupCalendrier(_champ)
{
	if (fenetre)
		if(fenetre.closed)
			fenetre=null;
	if (!fenetre)
	{
		champ=_champ;
		fenetre=window.open("about:blank","calendrier","height=195,width=280,screenX=530,screenY=420,top=420,left=530,toolbar=no,scrollbars=no,resizable=no,menubar=no,location=no,status=no,directories=no");
		tmp="<html><head><title>Calendrier</title>";
		tmp+="<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/commun.css\">";
		tmp+="<scr"+"ipt type=\"text/javascript\" src=\"/js/calendrier.js\"><"+"/script>";
		tmp+="</head><body onLoad=\"majCalendrier()\" id=\"calendrier\"><form name=\"calendrier\">";
		tmp+="<p><input type=\"button\" class=\"bouton\" name=\"precedent\" value=\"&lt;&lt\" onclick=\"opener.moisPrecedent()\">";
		tmp+=genererSelecteurMois(aujourdhui.getMonth());
		tmp+=genererSelecteurAnnee(aujourdhui.getFullYear());
		tmp+="<input type=\"button\" class=\"bouton\" name=\"suivant\" value=\"&gt;&gt\" onclick=\"opener.moisSuivant()\"></p>";
		tmp+="<div id=\"conteneur\"></div></form></body></html>";
		fenetre.document.open();
		fenetre.document.write(tmp);
		fenetre.document.close();
	}
	//majCalendrier();
	fenetre.focus();
	return false;
}

function afficherListeMois(moisDebut, anneeDebut, moisFin, anneeFin){
	var i = moisDebut;
	var j = anneeDebut;
	
	if(anneeDebut < anneeFin){
		for(i=moisDebut-1;i<12;i++){
			afficherCalendrier(i,j);
		}
		j++;
		if(j<anneeFin){
			for(i=0;i<12;i++){
				afficherCalendrier(i,j);
			}
			j++;
		}
		if(j==anneeFin){
			for(i=0;i<moisFin;i++){
				afficherCalendrier(i,j);
			}
		}
	}
	if(anneeDebut == anneeFin){
		for(i=moisDebut-1;i<moisFin;i++){
			afficherCalendrier(i,j);
		}
	}
}


// Fonction estOccupée cherche si la date est présent dans le tableau de date de réservations
function estOccupee(date)
{
	var inc=dispoCourante;
	var dateDebut;
	var dateFin;
	if(document.all) taille=tabReserv.test.length-1;
	else taille=tabReserv.test.length;
	while(inc<taille)
	{
		dateDebut=tabReserv.test[inc].date_debut;
		dateFin=tabReserv.test[inc].date_fin;
		if(date>=dateDebut && date<=dateFin){
			dispoCourante = inc;
			return true;
		}
		else inc++;
	}
	return false;
}
