/* CALENDRIER */
function validDate(d,m,y){
	// vérifie la validité d'une date
 if(isNaN(d) || isNaN(m) || isNaN(y)){
		return false;
	}else{
	  chkDate = new Date(y,m,d);
	  if(d==chkDate.getDate() && m==chkDate.getMonth() && y==chkDate.getFullYear()){
	    return true;
	  }else{
			return false;
		}
	}
}

var divID = "";
var targetField = "";

function initCal(me, bAll){
	// suppression d'un précédent calendrier
	if(divID!="" && document.getElementById("calendrier")){
		document.getElementById(divID).removeChild(document.getElementById("calendrier"));
	}
	targetField = me;
	divID = me.name+'-div';
	calendrier(null,null,bAll);
}

function calendrier(m,y, bAll) {
  var now = new Date();

	// pas d'arguments : la date courante est utilisée
	if(m == undefined){
  	d = now;
	}else{
  	var d = new Date();
  	d.setMonth(m);
		d.setFullYear(y);
		d.setDate(1);
	}
	// tableaux des mois/jours en français
	var mois 	= ["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"];
	var njrs 	= [31,28,31,30,31,30,31,31,30,31,30,31];
	var jr 		= ["L","M","M","J","V","S","D"];
	var j = 1;
	// récupération du conteneur du tableau
	var cal = document.getElementById(divID);
	if(document.getElementById("calendrier")){
		cal.removeChild(document.getElementById("calendrier"));
	}

	// création du tableau
	var tbl     = document.createElement("table");
	tbl.setAttribute("id", "calendrier");
	tbl.setAttribute("summary", "Calendrier");
	tbl.style.position = 'absolute';
	tbl.style.left = parseInt(targetField.style.width)+2+'px';
	var tblHead = document.createElement("thead");
	var tblBody = document.createElement("tbody");
	var tblFooter = document.createElement("tfoot");

	for (var l = 0; l < 7; l++) {
		var row = document.createElement("tr");
		// menu navigation (mois précédent/suivant)
		if(l==0){
		  prevMonth = (d.getMonth()==0) ? 11 : d.getMonth()-1;
		  prevYear = (d.getMonth()==0) ? d.getFullYear()-1 : d.getFullYear();
			cell = document.createElement('th');
			a = document.createElement('a');
			a.setAttribute("href", "Javascript:calendrier("+prevMonth+","+prevYear+"," + bAll + ")");
			a.appendChild(document.createTextNode("<"));
			cell.appendChild(a);
			row.appendChild(cell);

			cell = document.createElement('th');
			cell.colSpan = "5";
			a = document.createElement('a');
			a.setAttribute("href", "Javascript:calendrier("+d.getMonth()+","+d.getFullYear()+")");
			a.appendChild(document.createTextNode(mois[d.getMonth()]+" "+d.getFullYear()));
			cell.appendChild(a);
			row.appendChild(cell);

		  nextMonth = (d.getMonth()==11) ? 0 : d.getMonth()+1;
		  nextYear = (d.getMonth()==11) ? d.getFullYear()+1 : d.getFullYear();
			cell = document.createElement('th');
			a = document.createElement('a');
			a.setAttribute("href", "Javascript:calendrier("+nextMonth+","+nextYear+")");
			a.appendChild(document.createTextNode(">"));
			cell.appendChild(a);
			row.appendChild(cell);

			tblHead.appendChild(row);

		// liste des jours de la semaine
		}else if(l==1){
			for (var i = 0; i < jr.length; i++) {
				cell = document.createElement('th');
				cell.appendChild(document.createTextNode(jr[i]));
				row.appendChild(cell);
			}
			tblHead.appendChild(row);

		// liste des dates
		}else{
			for (var i = 1; i <=jr.length; i++) {
			  dd = new Date(d.getFullYear(),d.getMonth(),j);
			  // date invalide
			  if(!validDate(j,d.getMonth(),d.getFullYear())){
					cell = document.createElement('td');
					cell.appendChild(document.createTextNode(" "));
					row.appendChild(cell);
			  // la date correspond au jour de la semaine (i) de la colonne en cours
			  }else if(dd.getDay()==i || (dd.getDay()==0 && i==7)){
					cell = document.createElement('td');
					a = document.createElement('a');
					if(dd>=now || bAll != undefined){
						a.setAttribute("href", "javascript:selJour('"+j+"','"+dd.getMonth()+"', '"+dd.getFullYear()+"')");
					}
					a.appendChild(document.createTextNode(j));
					// date du jour => style différent
					if(now.getFullYear()==dd.getFullYear() && now.getMonth()==dd.getMonth() && now.getDate()==j) cell.setAttribute("id", "today");
					cell.appendChild(a);
					row.appendChild(cell);
					// ajout d'une ligne supplémentaire si le dernier jour du mois n'est pas atteint
					if(l==6 && i==7 && njrs[d.getMonth()]>j) l--;
					j++;
			  // case vide (date invalide ou ne correpond pas au jour de la semaine)
				}else{
					cell = document.createElement('td');
					cell.appendChild(document.createTextNode(" "));
					row.appendChild(cell);
				}
			}
			tblBody.appendChild(row);
		}
	}
	// bouton Fermer
	row = document.createElement("tr");
	cell = document.createElement('td');
	cell.colSpan = 7;
	cell.setAttribute("align", "center");
	cell.setAttribute("id", "closeCal");
	a = document.createElement('a');
	a.setAttribute("href", "javascript:closeCal()");
	a.appendChild(document.createTextNode('Fermer'));
	cell.appendChild(a);
	row.appendChild(cell);
	tblFooter.appendChild(row);
	
	tbl.appendChild(tblHead);
	tbl.appendChild(tblBody);
	tbl.appendChild(tblFooter);
	cal.appendChild(tbl);
	cal.style.display = "block";
}

function selJour(d,m,y){
	if(d.toString().length==1) d = '0'+d;
	m = parseInt(m)+1;
	if(m.toString().length==1) m = '0'+m.toString();
	if(y.toString().length==2) y = '20'+y.toString();
	//alert(m.length);
	targetField.value = d+"/"+m+"/"+y;
	document.getElementById("calendrier").style.display = "none";
}

function closeCal(){
	document.getElementById("calendrier").style.display = "none";
}