var monthInYear = new Array("JANVIER", "FEVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DECEMBRE");
var dayInWeek = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");

/* ATTENTION: Ce tableau doit être en adéquation avec les class "cal.cel[0-9]" et
			 "col.ind[0-9]" qui figure dans le fichier 'styles/Calendar.css'
*/
//METTRE CE TABLEAU EN INCLUDE JS
var colIndexTab = new Array("E32D2D", "E4EB76", "3e9131", "E86262", "b89947", "8BE862", "CD62E8", "E862A1", "4c7399");

var colIntervRes = colIndexTab[colIndexTab.length-1];
var indIntervRes = colIndexTab.length;

/* ** -> 3 col / 4 lig | de gauche à droite et de haut en bas *** */
var off = -100;
var posLeftCal = new Array(200+off, 450+off, 700+off, 200+off, 450+off, 700+off, 200+off, 450+off, 700+off, 200+off, 450+off, 700+off);
var posBottCal = new Array(60, 60, 60, 230, 230, 230, 400, 400, 400, 570, 570, 570);
var MIN_LEFT = posLeftCal[0];
var MAX_BOTTOM = posBottCal[posBottCal.length-1];

var calendarTab = new Array();
var intervalTab = new Array();
var currentCalendar;
var countCalendar = 0;
var countInterval = 0;

var infoBulleTab = new Array();
var MAX_INFO_BULLE = 670;

var NB_MONTH_BEFORE_THIS_MONTH = 0;
var MAX_CALENDAR = 1;

function isIE()
{
return ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) );
}

var oAdd =
{
   // Méthode de connection
   _Connect:
      function(oElem, sEvType, fn, bCapture)
      {
         return oElem.addEventListener?
            oElem.addEventListener(sEvType, fn, bCapture):
            oElem.attachEvent?
               oElem.attachEvent('on' + sEvType, fn):
               oElem['on' + sEvType] = fn;
      }
}

var oDel =
{
   // Méthode de connection
   _Connect:
      function(oElem, sEvType, fn, bCapture)
      {
         return oElem.removeEventListener?
            oElem.removeEventListener(sEvType, fn, bCapture):
            oElem.detachEvent?
               oElem.detachEvent('on' + sEvType, fn):
               oElem['on' + sEvType] = null;
      }
}

/* les intervales seront toujours sur 2 date : si c'est sur plusieurs mois 
	le php génèrera plusieurs d'intervals -> 
		ex: du 20/01/2006 au 14/03/2006 : 
				1) 20/01/2006 - 31/01/2006
				2) 01/02/2006 - 28/02/2006
				3) 01/03/2006 - 14/03/2006
	mais avec le même identifiant.(DB)
 */
function Interval()
{
	/* FORMAT JJ/MM/AAAA */
	this.idIt = "";	/* id d'interval dans le tableau */
	this.id = "";	/* id competition */
	this.d1 = 0;
	this.d2 = 0;
	this.m = 0;
	this.y = 0;
	this.colorCell = "";	/* type de competition */
    this.dat1ANSI = 0;
    this.dat2ANSI = 0;
}//Fin Interval(...)

function stDate()
{
	this.d = 0;
	this.m = 0;
	this.y = 0;
}//Fin stDate(...)

function Calendar(idCal)
{
	this.idCal = idCal;

	this.elementId = "";
	this.element = null;

	this.weekday = 0;
	this.day = 0;
	this.month = 0;
	this.year = 0;

	this.cday = 0;
	this.cmonth = 0;
	this.cyear = 0;
	this.cyear2 = 0;

	this.mappingArray = new Array();

	this.cal = document.getElementById("cal"+idCal);
	this.cald = document.getElementById("cal"+idCal+"d");
	this.calm = document.getElementById("cal"+idCal+"m");
	this.caly = document.getElementById("cal"+idCal+"y");

	currentCalendar = idCal;

	++countCalendar;
}//Fin Calendar(...)

function initCalendar(date, idCal)
{
	calendarTab[idCal].weekday = date.getDay();
	calendarTab[idCal].day = date.getDate();
	calendarTab[idCal].month = date.getMonth() + 1;
	calendarTab[idCal].year = date.getFullYear();

	calendarTab[idCal].cmonth = calendarTab[idCal].month;
	calendarTab[idCal].cyear = calendarTab[idCal].year;

	fillMonthChoice(idCal);
	fillYearChoice(idCal);

	currentCalendar = idCal;
}//Fin initCalendar(...)

function initElement(id, idCal)
{
	calendarTab[idCal].elementId = "";
	if(id!=null)
		calendarTab[idCal].element = document.getElementById(id);

	/**/
	var offLeft = posLeftCal[idCal];
	var offTop  = posBottCal[idCal];

	calendarTab[idCal].cal.style.left = offLeft+"px";
	calendarTab[idCal].cal.style.top = offTop+"px";

	//window.alert("left=" + calendarTab[idCal].cal.style.left + " top=" + calendarTab[idCal].cal.style.top);

	calendarTab[idCal].calm.style.left = offLeft+"px";
	calendarTab[idCal].calm.style.top = offTop+28+"px";
	calendarTab[idCal].caly.style.left = offLeft+6+"px";
	calendarTab[idCal].caly.style.top = offTop+33+"px";
	/**/

	/*OLD
	var hGap = -92;
	var vGap = 12;
	var elementStyle = calendarTab[idCal].cal.style;

	elementStyle.left = posLeftCal[idCal];
	elementStyle.top = posBottCal[idCal];

	calendarTab[idCal].calm.style.left = elementStyle.left;
	calendarTab[idCal].calm.style.top = parseInt(elementStyle.top) + 28;
	calendarTab[idCal].caly.style.left = parseInt(elementStyle.left) + 6;
	calendarTab[idCal].caly.style.top = parseInt(elementStyle.top) + 33;
	*/
	currentCalendar = idCal;
}//Fin initElement(...)

function displayCalendar(id, idCal)
{

	if(countCalendar >= MAX_CALENDAR) {
		window.alert("Impossible de créer un nouveau calendrier");
		return;
	}

	calendarTab[idCal] = new Calendar(idCal);

	var i;
	var element;
	for (i=0 ; i<4 ; i++)
	{
		element = document.getElementById("cal"+idCal+"_m_0" + i);

		/**/
		if(isIE()) {
			element.onmouseover = highlightHead;
			element.onmouseout = unhighlightHead;			
		} else {
			oAdd._Connect(element, 'mouseover', highlightHead, false);
			oAdd._Connect(element, 'mouseout', unhighlightHead, false);
		}
		/**/
		/* OLD
		element.onmouseover = highlightHead;
		element.onmouseout = unhighlightHead;
		*/
	}
	for (i=0 ; i<4 ; i++)
	{
		element = document.getElementById("cal"+idCal+"_y_0" + i);

		/**/
		if(isIE()) {
			element.onmouseover = highlightHead;
			element.onmouseout = unhighlightHead;				
		} else {	
			oAdd._Connect(element, 'mouseover', highlightHead, false);
			oAdd._Connect(element, 'mouseout', unhighlightHead, false);
		}
		/**/
		/* OLD
		element.onmouseover = highlightHead;
		element.onmouseout = unhighlightHead;
		*/
	}

	initElement(id, idCal);

	if(calendarTab[idCal].element!=null)
		var dateValue = calendarTab[idCal].element.value;
	else
		var dateValue = getGoodDateCal(null, countCalendar, null);

	updateCalendar(idCal, dateValue);
}//Fin displayCalendar(...)

function showCalendar(idCal)
{
	calendarTab[idCal].cal.style.visibility = "visible";
	
	showDayChoice(idCal);
	hideMonthChoice(idCal);
	hideYearChoice(idCal);
}//Fin showCalendar(...)

function hideCalendar(idCal)
{
	calendarTab[idCal].cal.style.visibility = "hidden";

	hideDayChoice(idCal);
	hideMonthChoice(idCal);
	hideYearChoice(idCal);
}//Fin hideCalendar(...)

function showDayChoice(idCal)
{
	calendarTab[idCal].cald.style.visibility = "visible";
}//Fin showDayChoice(...)

function hideDayChoice(idCal)
{
	calendarTab[idCal].cald.style.visibility = "hidden";
}//Fin hideDayChoice(...)


function showMonthChoice(idCal)
{
	calendarTab[idCal].calm.style.visibility = "visible";
}//Fin showMonthChoice(...)

function hideMonthChoice(idCal)
{
	calendarTab[idCal].calm.style.visibility = "hidden";
}//Fin hideMonthChoice(...)

function showYearChoice(idCal)
{
	calendarTab[idCal].caly.style.visibility = "visible";
}//Fin showYearChoice(...)

function hideYearChoice(idCal)
{
	calendarTab[idCal].caly.style.visibility = "hidden";
}//Fin hideYearChoice(...)

function updateMonthChoiceVisibility(idCal)
{
	if (calendarTab[idCal].calm.style.visibility == "visible")
	{
		showDayChoice(idCal);
		hideMonthChoice(idCal);
	}
	else
	{
		hideDayChoice(idCal);
		hideYearChoice(idCal);
		showMonthChoice(idCal);
	}
}//Fin updateMonthChoiceVisibility(...)

function updateYearChoiceVisibility(idCal)
{
	if (calendarTab[idCal].caly.style.visibility == "visible")
	{
		showDayChoice(idCal);
		hideYearChoice(idCal);
	}
	else
	{
		calendarTab[idCal].cyear2 = calendarTab[idCal].cyear;

		hideDayChoice(idCal);
		hideMonthChoice(idCal);
		fillYearChoice(idCal);
		showYearChoice(idCal);
	}
}//Fin updateYearChoiceVisibility(...)

function updateCalendar(idCal, dateValue)
{		
	if (dateValue != "")
	{
		var s = dateValue.split("/");
		var d;
		var m;
		var y;
		var validDate = true;
		if (s.length == 3)
		{
			d = s[0];
			if (d.charAt(0) == "0")
			{
				d = d.substr(1);
			}
			m = s[1];
			if (m.charAt(0) == "0")
			{
				m = m.substr(1);
			}
			y = s[2];
		}
		else
		{
			validDate = false;
		}

		if (validDate)
		{
			initCalendar(new Date(y, m-1, d), idCal);
		}
		else
		{
			initCalendar(new Date(), idCal);
		}
	}
	else
	{
		initCalendar(new Date(), idCal);
	}

	fillCalendar(idCal);
	showCalendar(idCal);
}//Fin updateCalendar(...)

function updateAllCalendar(idCalModif, countCal)
{
	var idCalRef = idCalModif;
	var dateRef = new Date(calendarTab[idCalRef].cyear, calendarTab[idCalRef].cmonth-1, 1);
	var offset = idCalRef;

	for(var count=1; count<=countCal; count++) {
		var dateValue = getGoodDateCal(dateRef, count, offset);
		if(count==1) {
			var s = dateValue.split("/");
			if(s.length==3) {
   				var m = s[1];
   				var y = s[2];
   				var newDat = m+"-"+y;
  				setDateStartCal(newDat);
	  		}
	  	}		
		updateCalendar(calendarTab[count-1].idCal, dateValue);
	}
}//Fin updateAllCalendar(...)

function fillCalendar(idCal)
{
	document.getElementById("cal"+idCal+"_m_02").innerHTML = getStringMonth(calendarTab[idCal].cmonth);
	document.getElementById("cal"+idCal+"_y_02").innerHTML = calendarTab[idCal].cyear;
	var element;

	var i = 0;
	var j = 0;
	for (i=0 ; i<6 ; i++)
	{
		for (j=0 ; j<7 ; j++)
		{
			element = document.getElementById("cal"+idCal+"_d_" + i + j);
			element.innerHTML = "";
			/* A VOIR COMPATIBILITE */
			if(isIE()) {
				element.onclick = "";
				element.onmousemove = "";
				element.onmouseover = "";
				element.onmouseout = "";
			} else {
				oDel._Connect(element, 'mousemove', MouseOverCal, false);
				oDel._Connect(element, 'mouseover', highlightDay, false);
				oDel._Connect(element, 'mouseover', highlightToDay, false);
				oDel._Connect(element, 'mouseout', unhighlightDay, false);
				oDel._Connect(element, 'mouseout', MouseOutCal, false);
				oDel._Connect(element, 'mouseout', unhighlightToDay, false);
				oDel._Connect(element, 'click', selectIntervalAdd, false);
				oDel._Connect(element, 'click',selectIntervalMod, false);
				oDel._Connect(element, 'click', selectDay, false);
			}
			/* A VOIR COMPATIBILITE */
			element.className = "Calempty";
			element.style.backgroundColor = "";

			infoBulleTab[element.id] = "";			
		}
	}

	i = 0;
	j = (new Date(calendarTab[idCal].cyear, calendarTab[idCal].cmonth-1, 1)).getDay();
	j = (j + 6) % 7;

	//var compDate = 0;
 	var today = 0;
	var dateDay = new Date();
	if( (calendarTab[idCal].cyear==dateDay.getFullYear()) &&
		(calendarTab[idCal].cmonth==(dateDay.getMonth() + 1)) ) {
		//compDate = 1;
		today = dateDay.getDate();
	}

	var intervMonthTab = new Array();
	var countIt = 0;
	var intervId = 0;
	var compInterv = 0;

	/* On récupère les intervals de ce mois*/
	for(it=0; it<countInterval; it++) {
		if((intervalTab[it].y==calendarTab[idCal].cyear)&&(intervalTab[it].m==calendarTab[idCal].cmonth)) {
			intervMonthTab[countIt++] = intervalTab[it];

			compInterv = 1;
        }
	}//Fin for

	var count = 1;
	var days = getMonthLastDayCal(idCal);
	while (count <= days)
	{
		var interv = 0;
		element = document.getElementById("cal"+idCal+"_d_" + i + j);
		element.innerHTML = count;
		calendarTab[idCal].mappingArray[10 * i + j] = count;

		if(compInterv&&(intervId=dayIsInIntervalMonth(intervMonthTab, countIt, count))!=-1) {			
			if (intervalTab[intervId].colorCell.indexOf("#")==0) { //Soit Hexa;
				element.className = "cel0";
				element.style.backgroundColor=intervalTab[intervId].colorCell;
			} else {	//Soit indice pré definit;
				element.className = "cel"+intervalTab[intervId].colorCell;					
			}
			
			infoBulleTab[element.id] = intervId;
			/**/
			if(isIE()) {
				element.onmousemove=MouseOverCal;
   				element.onmouseout=MouseOutCal;		
				element.onclick = selectIntervalSee;				
			} else {
				oAdd._Connect(element, 'mousemove', MouseOverCal, false);
				oAdd._Connect(element, 'mouseout', MouseOutCal, false);
				oAdd._Connect(element, 'click', selectIntervalSee, false);
			}	
			/**/
			/* OLD			
			element.onmousemove=MouseOverCal;
   			element.onmouseout=MouseOutCal;			
			
			element.onclick = selectIntervalSee;
			*/
			
			if(count==today) {
				element.className = element.className+" cel";
			}
   			
		} else {
			element.className = "";
			element.style.backgroundColor="";

			/**/
			if(isIE()) {
				element.onmousemove = "";
				element.onmouseover = highlightDay;
				element.onmouseout = unhighlightDay;
				element.onclick = selectDay;				
			} else {
				oDel._Connect(element, 'mousemove', MouseOverCal, false);
				oAdd._Connect(element, 'mouseover', highlightDay, false);
				oAdd._Connect(element, 'mouseout', unhighlightDay, false);
				oAdd._Connect(element, 'click', selectDay, false);
			}
			/**/
			/* OLD
			element.onmousemove = "";
			element.onmouseover = highlightDay;
			element.onmouseout = unhighlightDay;
			element.onclick = selectDay;
			*/

			if(count==today) {
				element.className = element.className+" cel";
				/**/
				if(isIE()) {
					element.onmouseover = highlightToDay;
					element.onmouseout = unhighlightToDay;					
				} else {
					oDel._Connect(element, 'mouseover', highlightDay, false);
					oDel._Connect(element, 'mouseout', unhighlightDay, false);
					oAdd._Connect(element, 'mouseover', highlightToDay, false);
					oAdd._Connect(element, 'mouseout', unhighlightToDay, false);
				}
				/**/
				/* OLD
				element.onmouseover = highlightToDay;
				element.onmouseout = unhighlightToDay;
				*/
			}
   			
		}

		/*
		if(count==today) {
			element.className = element.className+" cel";
			element.onmouseover = highlightToDay;
			element.onmouseout = unhighlightToDay;
		}
  		*/

		j++;
		if (j == 7)
		{
			i++;
			j = 0;
		}
		count++;
	}
}//Fin fillCalendar(...)

/* -------------------- FONCTION POUR LES INFOBULLES -------------------*/
function MouseOutCal(e)
{
	var srcElt = (isIE())?event.srcElement:e.target;
	//OLD var srcElt = event.srcElement;

	var intervId = infoBulleTab[srcElt.id];
	var idC = intervalTab[intervId].id;
	
	return MouseOut(idC);
}

function MouseOverCal(e)
{
	var srcElt = (isIE())?event.srcElement:e.target;
	//OLD var srcElt = event.srcElement;

	var intervId = infoBulleTab[srcElt.id];
	var idC = intervalTab[intervId].id;

	return MouseOver((isIE())?event:e, idC);
	//OLD return MouseOver(event, idC);
}
/* -------------------- FONCTION POUR LES INFOBULLES -------------------*/

function fillMonthChoice(idCal)
{
	var i;
	var element;
	for (i=1 ; i<=12 ; i++)
	{
		element = document.getElementById("cal"+idCal+"m_" + i);
		element.innerHTML = getStringMonth(i);
		/**/
		if(isIE()) {
			element.onclick = selectMonth;
			element.onmouseover = highlightHead;
			element.onmouseout = unhighlightHead;			
		} else {
			oAdd._Connect(element, 'mouseover', highlightHead, false);
			oAdd._Connect(element, 'mouseout', unhighlightHead, false);
			oAdd._Connect(element, 'click', selectMonth, false);
		}
		/**/
		/* OLD
		element.onclick = selectMonth;
		element.onmouseover = highlightHead;
		element.onmouseout = unhighlightHead;
		*/
	}
}//Fin fillMonthChoice(...)

function fillYearChoice(idCal)
{
	var i;
	var element;
	var gap = calendarTab[idCal].cyear2 - 11;
	for (i=1 ; i<=25 ; i++)
	{
		element = document.getElementById("cal"+idCal+"y_"+ i);
		element.innerHTML = gap + i;

		/**/
		if(isIE()) {
			element.onclick = selectYear;
			element.onmouseover = highlightHead;
			element.onmouseout = unhighlightHead;					
		} else {
			oAdd._Connect(element, 'mouseover', highlightHead, false);
			oAdd._Connect(element, 'mouseout', unhighlightHead, false);
			oAdd._Connect(element, 'click', selectYear, false);
		}
		/**/
		/* OLD
		element.onclick = selectYear;
		element.onmouseover = highlightHead;
		element.onmouseout = unhighlightHead;
		*/
	}
}//Fin fillYearChoice(...)

function highlightDay(e)
{
	var elt = (isIE())?event.srcElement:e.target;
	elt.className = "sel";

	//OLD event.srcElement.className = "sel";
}//Fin highlightDay(...)

function unhighlightDay(e)
{
	var elt = (isIE())?event.srcElement:e.target;
	elt.className = "";

	//OLD event.srcElement.className = "";
}//Fin unhighlightDay(...)

function highlightToDay(e)
{
	var elt = (isIE())?event.srcElement:e.target;
	elt.className = "sel";

	//OLD event.srcElement.className = "sel";
}//Fin highlightToDay(...)

function unhighlightToDay(e)
{
	var elt = (isIE())?event.srcElement:e.target;
	elt.className = "cel";

	//OLD event.srcElement.className = "cel";
}//Fin unhighlightToDay(...)

function highlightHead(e)
{
	var idCal = currentCalendar;

	var element = (isIE())?event.srcElement:e.target
	//OLD var element = event.srcElement;

	if (element.tagName == "IMG")
	{
		element = element.parentNode;
	}
	element.className = "sel";
	if (element.id == "cal"+idCal+"_m_02")
	{
		document.getElementById("cal"+idCal+"_m_03").className = "sel";
	}
	else if (element.id == "cal"+idCal+"_m_03")
	{
		document.getElementById("cal"+idCal+"_m_02").className = "sel";
	}
	else if (element.id == "cal"+idCal+"_y_02")
	{
		document.getElementById("cal"+idCal+"_y_03").className = "sel";
	}
	else if (element.id == "cal"+idCal+"_y_03")
	{
		document.getElementById("cal"+idCal+"_y_02").className = "sel";
	}
}//Fin highlightHead(...)

function unhighlightHead(e)
{
	var idCal = currentCalendar;

	var element = (isIE())?event.srcElement:e.target
	//OLD var element = event.srcElement;

	if (element.tagName == "IMG")
	{
		element = element.parentNode;
	}
	element.className = "";
	if (element.id == "cal"+idCal+"_m_02")
	{
		document.getElementById("cal"+idCal+"_m_03").className = "";
	}
	else if (element.id == "cal"+idCal+"_m_03")
	{
		document.getElementById("cal"+idCal+"_m_02").className = "";
	}
	else if (element.id == "cal"+idCal+"_y_02")
	{
		document.getElementById("cal"+idCal+"_y_03").className = "";
	}
	else if (element.id == "cal"+idCal+"_y_03")
	{
		document.getElementById("cal"+idCal+"_y_02").className = "";
	}
}//Fin unhighlightHead(...)

function dayIsInIntervalMonth(itTab, lenItTab, day)
{
	for(var it=0; it<lenItTab; it++)
		if((day>=itTab[it].d1)&&(day<=itTab[it].d2)) return itTab[it].idIt;

	return -1;
}//Fin dayIsInIntervalMonth(...)

function getSessionPhp()
{
	var eltName, eltId, ret;
	
	ret = "";
	
	eltName = document.getElementById("nameSession");
	if(eltName!=null) {
		eltId = document.getElementById("idSession");
		if(eltId!=null) ret = eltName.innerHTML+"="+eltId.innerHTML;
	}
	
	return ret;
}

function selectIntervalAdd(e)
{
	return selectInterval("add", e);
}//Fin selectIntervalAdd(...)

function selectIntervalMod(e)
{
	return selectInterval("mod", e);
}//Fin selectIntervalMod(...)

function selectIntervalSee(e)
{
	return selectInterval("see", e);
}//Fin selectIntervalSee(...)

function selectInterval(mod, e)
{
	var element = (isIE())?event.srcElement:e.target
	//OLD var element = event.srcElement;

    /* 2 méthodes pour avoir le jour: avec "innerHTML" ou avec le "mapping" et l'id de la céllule */
	var dayStr = document.getElementById(element.id).innerHTML;

	var idCal = currentCalendar;

	var d = parseInt(dayStr, 10);
	var m = calendarTab[idCal].cmonth;
	var y = calendarTab[idCal].cyear;

	var myDateClick = y + "-" + (m < 10 ? "0" : "") + m + "-" + (d < 10 ? "0" : "") + d;

	var argSession = getSessionPhp();

	if(mod=="add")
		document.location.href = "formAddComp.php?datResIt="+myDateClick+"&"+argSession;
	else if(mod=="mod")
		document.location.href = "formModComp.php?datComp="+myDateClick+"&"+argSession;
	else if(mod=="see")
		document.location.href = "comp_detail.php?dat="+myDateClick+"&"+argSession;

	return;
}//Fin selectInterval(...)

/*
	Function qui compare 2 dates: (2 structs formé de 3 champs 'd', 'm', 'y')
	retourne:	0 si 2 dates égal
			-1 si date1 < date2
			1 si date1 > date2
*/
function compDate(dat1, dat2)
{
	var dateANSI1 = new Date(dat1.y, dat1.m-1, dat1.d, 0, 0, 1).getTime();
	var dateANSI2 = new Date(dat2.y, dat2.m-1, dat2.d, 0, 0, 1).getTime();

	if(dateANSI1==dateANSI2) return 0;
	else if(dateANSI1<dateANSI2) return -1;
	else return 1;
}//Fin compDate(...)

function selectDay(e)
{
	var idCal = currentCalendar;

	var elt = (isIE())?event.srcElement:e.target
	var id = elt.id;
	//OLD var id = event.srcElement.id;

	calendarTab[idCal].cday = calendarTab[idCal].mappingArray[parseInt(id.substr(id.length - 2))];

	var d = calendarTab[idCal].cday;
	var m = calendarTab[idCal].cmonth;
	var y = calendarTab[idCal].cyear;

	window.status = (d < 10 ? "0" : "") + d + "/" + (m < 10 ? "0" : "") + m + "/" + y;

	if(calendarTab[idCal].element!=null)
		calendarTab[idCal].element.value = (d < 10 ? "0" : "") + d + "/" + (m < 10 ? "0" : "") + m + "/" + y;

}//Fin selectDay(...)

function selectMonth(e)
{
	var idCal = currentCalendar;

	var elt = (isIE())?event.srcElement:e.target
	var id = elt.id;
	//OLD var id = event.srcElement.id;

	var s = id.split("_");

	calendarTab[idCal].cmonth = parseInt(s[s.length - 1]);

	hideMonthChoice(idCal);
	showDayChoice(idCal);

	updateAllCalendar(idCal, countCalendar);
}//Fin selectMonth(...)

function selectYear(e)
{
	var idCal = currentCalendar;

	var elt = (isIE())?event.srcElement:e.target
	var id = elt.id;
	//OLD var id = event.srcElement.id;

	var s = id.split("_");

	calendarTab[idCal].cyear = parseInt(s[s.length - 1]) + calendarTab[idCal].cyear2 - 11;

	hideYearChoice(idCal);
	showDayChoice(idCal);

	updateAllCalendar(idCal, countCalendar);
}//Fin selectYear(...)

function incrementMonth(idCal)
{
	if (calendarTab[idCal].cmonth == 12)
	{
		calendarTab[idCal].cmonth = 1;
		calendarTab[idCal].cyear = calendarTab[idCal].cyear + 1;
	}
	else
	{
		calendarTab[idCal].cmonth = calendarTab[idCal].cmonth + 1;
	}

	updateAllCalendar(idCal, countCalendar);
}//Fin incrementMonth(...)

function decrementMonth(idCal)
{
	if (calendarTab[idCal].cmonth == 1)
	{
		calendarTab[idCal].cmonth = 12;
		calendarTab[idCal].cyear = calendarTab[idCal].cyear - 1;
	}
	else
	{
		calendarTab[idCal].cmonth = calendarTab[idCal].cmonth - 1;
	}

	updateAllCalendar(idCal, countCalendar);
}//Fin decrementMonth(...)

function incrementYear(idCal)
{	
	calendarTab[idCal].cyear = calendarTab[idCal].cyear + 1;
	
	updateAllCalendar(idCal, countCalendar);
}//Fin incrementYear(...)

function decrementYear(idCal)
{
	calendarTab[idCal].cyear = calendarTab[idCal].cyear - 1;

	updateAllCalendar(idCal, countCalendar);
}//Fin decrementYear(...)

function increaseYear(idCal)
{
	calendarTab[idCal].cyear2 = calendarTab[idCal].cyear2 + 20;
	
	fillYearChoice(idCal);
}//Fin increaseYear(...)

function decreaseYear(idCal)
{
	calendarTab[idCal].cyear2 = calendarTab[idCal].cyear2 - 20;

	fillYearChoice(idCal);
}//Fin decreaseYear(...)

function getMonthLastDay(d, m, y)
{
	var testDate = new Date(y, m, d);
	if (testDate.getDate() == 29)
	{
		testDate.setDate(30);
		if (testDate.getDate() == 30)
		{
			testDate.setDate(31);
			if (testDate.getDate() == 31)
			{
				return 31
			}
			else
			{
				return 30;
			}
		}
		else
		{
			return 29;
		}
	}
	else
	{
		return 28;
	}
}//Fin getMonthLastDay(...)

function getMonthLastDayCal(idCal)
{
	return getMonthLastDay(29, calendarTab[idCal].cmonth-1, calendarTab[idCal].cyear);
}//Fin getMonthLastDayCal(...)

function getStringWeekDay(index)
{
	return dayInWeek[index];
}//Fin getStringWeekDay(...)

function getStringMonth(index)
{
	return monthInYear[index - 1];
}//Fin getStringMonth(...)

function readIntervalInHTML(motif)
{
	var idStr = "ls"+motif+"0";
	var numInterval = document.getElementById(idStr).innerHTML;
	var begin, end;
	
	for(var it=1; it<=numInterval; it++) {
		var idStrInc = "ls"+motif; 
		var str = document.getElementById(idStrInc+it).innerHTML;

		var s = str.split("-");
		if(s.length!=2) continue;
		var date1_type = s[0].split(":");
		var date2_id = s[1].split(":");
		
		var date1 = date1_type[0].split("/");
		var type = date1_type[1];
		var date2 = date2_id[0].split("/");
		var id = date2_id[1];

		if(date1.length!=3||date2.length!=3) continue;
		
		/* Condition de filtrage si pas même mois et pas même année entre les 2 dates (debut et fin)*/
		if( (parseInt(date1[1],10)!=parseInt(date2[1],10)) || (parseInt(date1[2],10)!=parseInt(date2[2],10)) ) continue;
		
		var d1, d2, m, y;
		
		d1 = parseInt(date1[0], 10);
		d2 = parseInt(date2[0], 10);
		m = parseInt(date1[1], 10);
		y = parseInt(date1[2], 10);
		
		intervalTab[countInterval] = new Interval();
		intervalTab[countInterval].idIt = countInterval;
		intervalTab[countInterval].id = id;
		intervalTab[countInterval].colorCell = type; //Un type de compétition à toujours une couleur
		
		intervalTab[countInterval].d1 = d1;
		intervalTab[countInterval].d2 = d2;
		intervalTab[countInterval].m = m;
		intervalTab[countInterval].y = y;

		intervalTab[countInterval].dat1ANSI = new Date(y, m-1, d1, 0, 0, 1).getTime();
        intervalTab[countInterval].dat2ANSI = new Date(y, m-1, d2, 0, 0, 1).getTime();

		++countInterval;
	}//Fin for()
}//Fin readIntervalInHTML(...)

function displayAllCalendar(mode)
{
	readIntervalInHTML("dat");

	if(mode==0)	{//avec balises "input text" à remplir

		for(var i=0; i<MAX_CALENDAR; i++)
			displayCalendar("w"+i, i);

	} else {	//sans balises "input text" à remplir

		for(var i=0; i<MAX_CALENDAR; i++)
			displayCalendar(null, i);

	}
}//Fin displayAllCalendar(...)

function setCurrentCalendar(idCal)
{
	currentCalendar = idCal;
}//Fin setCurrentCalendar(...)

function setDateStartCal(datStart)
{
	var elt = document.getElementById("dateStartCal");
 	elt.innerHTML = datStart;
	return ;
}//Fin setDateStartCal(...)

function getDateStartCal()
{
	var elt = document.getElementById("dateStartCal");
 	return elt.innerHTML;
}//Fin getDateStartCal(...)


function getGoodDateCal(dateRef, countCal, offset)
{
	var date, delta;

	/** OLDY 
	if(dateRef==null)
		date = new Date();
	else date = dateRef;

	if(offset==null)
		delta = NB_MONTH_BEFORE_THIS_MONTH;
	else	delta = offset;
	**/

 	/** NEW ONE **/	
	if(dateRef==null) {
		date = new Date();
		
  		var dateStart = document.getElementById("dateStartCal").innerHTML;
		if(dateStart!="") {
			var s = dateStart.split("-");
			if(s.length==2) {
   				var m = parseInt(s[0]);
   				var y = parseInt(s[1]);
  				date = new Date(y, m-1, 1);
			}
		}
			
	} else date = dateRef;

	if(offset==null) {
		delta = NB_MONTH_BEFORE_THIS_MONTH;
		
		var offsetCal = document.getElementById("offsetCal").innerHTML;
		if(offsetCal!="") delta = parseInt(offsetCal);
		
	} else	delta = offset;
 	/** NEW ONE **/	
	
	var day = date.getDate();

	var month = date.getMonth() + 1;
	month = month - delta + (countCal - 1);

	var year = date.getFullYear();

	if(month<1) {
		do {
			month = month + 12;
			year -= 1;
		} while(month < 1);
	} else if(month>12) {
		do {
			month = month - 12;
			year += 1;
		} while(month > 12);
	}

	var goodDay = getMonthLastDay(day, month-1, year);
	date = goodDay+"/"+month+"/"+year;

	return date;
}//Fin getGoodDateCal(...)


	/* --------------- Pour la gestion des couleur des cellules --------------*/
	/** Groupe de fonction existante dans chkFormComp.js et chkFormTypComp.js 
		donc à terme créer un module javascript commun. **/
    function bgColorIndElt(id, indCol)
    {
		var elt = document.getElementById(id);
		if(elt==null) return;

		var hexCol = colIndexTab[indCol];
		
		return bgColorHexElt(id, hexCol);
	}
	
    function bgColorHexElt(id, hexCol)
    {
		var elt = document.getElementById(id);
		if(elt==null) return;
			
		if(checkColorHexa(hexCol)==false) return;
		
		elt.style.backgroundColor="#"+hexCol;
		
		return;
	}

	function isHexa(c)
    {
    	var test = "" + c;
    	   	
    	if (test == "0" || test == "1" || test == "2" || test == "3" || test == "4" ||
			test == "5" || test == "6" || test == "7" || test == "8" || test == "9" ||
			test == "A" || test == "B" || test == "C" || test == "D" || test == "E" ||
			test == "F" ||
			test == "a" || test == "b" || test == "c" || test == "d" || test == "e" ||
			test == "f")
            return true;
        
        return false;
    }

	/* Fonction testant si une chaine est valid en hexa : sur 6 char et sans le '#' de début */
	function checkColorHexa(col)
	{
		var i, len;
		var ok = true;
				
		len = col.length;
		
		if(len!=6) ok = false;
		
		for(i=0; ((i<len)&&ok); i++)
			ok = isHexa(col.charAt(i));

		if(ok==false)
			window.alert("Paramètre de couleur invalide. (ex: aF097d)");
		
		return ok;
	}//Fin checkColorHexa(...)
	/* --------------- Pour la gestion des couleur des cellules --------------*/
