//fonction de gestion d'evenement generique sur le calendrier: test si la fonction DoneChangeOnFrame existe, si elle n'existe pas il execute la fonction par defaut.
var G_dir = 0;
var G_flag = 0;
var GFlag = 0;
function BasicDoneChangeOnFrame(dir, flag)
{
	if (dir != null || flag != null)
	{
		G_dir = dir;
		G_flag = flag;
	} 
	if (GFlag == 0)
	{
		if (window.onerror)
		{
			window.onerror = null;
			if (G_flag == 0)
				ChangeMonth('MonthC', 'YearC', 'Month', G_dir, 0);
			RefreshCalendar('YearC', 'MonthC', 'DayNumber', 0, 0, 'BaseCal');
			alert(GFlag);
		}
		else
		{
			window.onerror = BasicDoneChangeOnFrame;
			DoneChangeOnFrame(dir, flag);
			G_Flag = 1;
			window.onerror = null;	
		}
	}
	else
		DoneChangeOnFrame(dir, flag); 
}
//fonction de creation du calendrier
function CreateCalendar(Dat, CalDiv, DivFrame, StartYear, EndYear, Link, flag, nodate)
{
	var Cal;
	var tmp;
	if (Dat == 0)
	{
		var Today = new Date();
		tmp = new Array(Today.getDate(), Today.getMonth() + 1, (2000 + Today.getYear()%100));
	}
	else
		tmp = Dat.split("/");
	if (DivFrame)
		Cal = window.parent.frames[DivFrame].document.getElementById(CalDiv);
	else
		Cal = document.getElementById(CalDiv);
	var MonthId = tmp[1] - 1;
	var Month;
	if (flag == 1)
		Month = "<select id='MonthCC' name='MonthCC' onchange='MonthChange();'></select>";
	else
		Month = TabMonth[MonthId];
	var CalHTML = "<table width='100%' height='154' border='3' cellspacing='0'>\n<tr>\n<td>\n<table width='100%' border='0' cellspacing='0'>\n<tr id='whiteTitle' bgcolor='darkblue'>\n<td width='10%' align='left' class='whiteTitle'>\n<input style='width:25;height:20' type='button' class='button' name='PrevMonth' id='PrevMonth' value='<<' onClick='BasicDoneChangeOnFrame(-1, 0);'>\n</td>\n<td width='40%' class='whiteTitle' align='middle'>\n<div id='MonthC' name='"+MonthId+"' style='text-align:center' class='whiteTitle'>\n"+Month+"&nbsp;</div>\n</td>\n<td width='40%' class='whiteTitle' align='middle'>\n<select id='YearC' name='YearC' style='width:60;text-align:center' onChange='BasicDoneChangeOnFrame(0, 1);'>\n</select>\n</td>\n<td width='10%' align='right' class='whiteTitle'>\n<input type='button' style='width:25;height:20' class='button' name='NextMonth' id='NextMonth' value=' >>' onClick='BasicDoneChangeOnFrame(1, 0);' style='text-align:left'>\n</td>\n</tr>\n</table>\n<table width='100%' border='0'>\n<tr>\n<td align='left'>\n<table width='100%' class='CalBgDay' border='0'>\n<tr class='CalDayName'>\n";
	for (var i = 0; i < DayShort.length; i++)
		CalHTML += "<td id='"+DayShort[i]+"' width='14%' align='middle' class='CalDayName'>\n "+DayShort[i]+"</td>\n";
	CalHTML += "</tr></table>\n<tr><td id='DayNumber'></td></tr>\n</table>\n\n";
	Cal.innerHTML = CalHTML;
	CreateYear('YearC', StartYear, EndYear, DivFrame);
	if (flag == 1)
	{
		CreateMonthCombo('MonthCC', 0);
		document.getElementById('MonthCC').selectedIndex = tmp[1] - 1;
	}
	document.getElementById('YearC').selectedIndex = tmp[2] - StartYear;
	RefreshCalendar('YearC', (flag == 1 ? 'MonthCC': 'MonthC'), 'DayNumber', 0, DivFrame, Link, nodate);	
	//Mise en evidence du jour selectionné
	EmphasizeDay(parseInt(tmp[0], 10), DivFrame, 'SelectedDay', '');
}
//fonction de création du calendrier et rafraichissement de calendrier
function RefreshCalendar(yearC, monthC, div, flag, Frames, Link, nodate)
{
	var Year;
	var Month;
	var TheDiv;
	//Recuperation des combos interresantes
	if (Frames)
	{
	 	Year = window.parent.frames[Frames].document.getElementById(yearC);
	 	Month = window.parent.frames[Frames].document.getElementById(monthC);
		TheDiv = window.parent.frames[Frames].document.getElementById(div);
	}
	else
	{
	 	Year = document.getElementById(yearC);
	 	Month = document.getElementById(monthC);
		TheDiv = document.getElementById(div);
	}
	//initialisation de la date du jour
	var Today = new Date();
	var ThisDay = Today.getDate();
	var ThisMonth = Today.getMonth();
	var ThisYear = (2000 + Today.getYear()%100);
	//si le flag est à 1 on crée le calendrier et on initialise la date à la date du jour
	if (Month.tagName == "SELECT")
		Month = Month.selectedIndex;
	else
	{
		Month.name = ThisMonth;
		ChangeMonthId(ThisMonth, monthC);
	}
	if (flag == 1)
		Year = ThisYear;
	else
	{
		if (Year.selectedIndex == -1)
			Year.selectedIndex = 0;
		Year = Year.options[Year.selectedIndex].text;
	}
	Month++;
	//ici on a change les variable Year Month pour avoir des entiers pour le mois et l'année
	var Calendar = "<table width='100%'>\n<tr>\n";
	//on recupere le nombre de jour du mois...
	var MonthCount = GetNbDayMonth(parseInt(Month, 10), Year);
	//initialisation du le couleur du jour actuel
	var DayColor='#00CCFF';
	//on recupere le nom du jour du 1 du mois
	var FirstDay = new Date(Year, Month - 1, 1);
	FirstDay = FirstDay.getDay();
	FirstDay = (FirstDay == 0 ? 7 : FirstDay);
	//création du debut de la table pour aligner le premier du mois sur le bon jour de la semaine
	for (var i = 1; i < FirstDay; i++)
		Calendar += "<td width='14%'>&nbsp;</td>\n";
	//remplissage du calendrier
	for (i = 1; i <= MonthCount; i++)
	{
		//verification de fin de ligne
		if (((i - 2 + FirstDay) % 7) == 0 && i != 1)
			Calendar += "</tr>\n<tr>\n";
		//verification de la mise en forme pour le jour actuel
		if (ThisDay == i && ThisMonth == (Month - 1) && Year == ThisYear)
			Calendar += "<td id='M"+i+"' class='Day' bgcolor='"+DayColor+"' "+eval(Link+'(i)')+">"+i+"</td>\n";
		else															   // ^^^^^^^^^^->application de ma fonction specifique au jour du calendrier 
			Calendar += "<td id='M"+i+"' class='Day' align='middle' width='14%' "+eval(Link+'(i)')+">"+i+"</td>\n";
	}
	//verification de fermeture du mois, on ne le ferme pas si il a deja ete ferme dans la boucle
	if (((i - 2 + FirstDay) % 7) != 0)
	{
		for (; ((i - 2 + FirstDay) % 7) != 6; i++)
			Calendar += "<td width='14%'>&nbsp;</td>";
			if (!((MonthCount == 31 && FirstDay >= 6) || (MonthCount == 30 && FirstDay == 7)))
			{
				Calendar += "<td width='14%'>&nbsp;</td></tr>";
				if (nodate == 1)
					Calendar += "<tr>\n<td colspan='6'>&nbsp;</td><td width='14%' "+eval(Link+'(-1)')+"><img class='CursorHand' alt='"+ document.getElementById("NoDate").value +"' src='./images/nodate.gif' width='25' height='10'></td></tr>";
				else
					Calendar += "<tr>\n<td colspan='7'>&nbsp;</td></tr>";
			}
			else
				if (nodate == 1)
					Calendar += "<td width='14%' "+eval(Link+'(-1)')+"><img class='CursorHand' alt='"+ document.getElementById("NoDate").value +"' src='./images/nodate.gif' width='25' height='10'></td>";
				else	
					Calendar += "<td width='14%'>&nbsp</td>";
	}
	else
		if (nodate == 1)
			Calendar += "<tr>\n<td colspan='6'>&nbsp;</td><td width='14%' "+eval(Link+'(-1)')+"><img class='CursorHand' alt='"+ document.getElementById("NoDate").value +"' src='./images/nodate.gif' width='25' height='10'></td></tr>";
		else
			Calendar += "<tr>\n<td colspan='7'>&nbsp;</td></tr>";
	/*{
		if (!((MonthCount == 31 && FirstDay >= 6) || (MonthCount == 30 && FirstDay == 7)))
			Calendar += "</tr><tr>\n<td>&nbsp;</td></tr>";
		else
			Calendar += "</tr>\n";
	}*/
	//dans quelque cas particulier on ne doit pas rajouter de ligne vide a la fin pour avoir une taille constante du calendrier
	
	//fermeture et ecriture du calendrier dans le Div approprie
	Calendar += "</table>";
	TheDiv.innerHTML = Calendar;
}

//fonction de base pour Link Calendrier classique
function BaseCal(i)
{
	return (i);
}
//fonction mise en evidence la date selectionnée en rapport avec une combo date se trouvant eventuellement dans une autre frames
function EmphasizeDay(Day, DivFrame, Classe, Which)
{
	var DaySelected;
	var Selected;
	if (DivFrame)
		Selected = window.parent.frames[DivFrame].document.getElementById("Selected"+Which);
	else
		Selected = document.getElementById("Selected"+Which);
	//on deselectionne le jour qui ete selectionné
//	alert(Selected+"\n"+DivFrame+"\n"+Day+"\n"+Which);
	if (Selected)
	{
		Selected.id = Selected.name;
		Selected.className = 'Day'+Which;
	}
	//on cherche le jour a selectionné en fonction de son ID
	if (!(Day))
	{
		Day = new Date;
		Day = Day.getDate();
	}
	var Id = "M"+Day+Which;	
	if (DivFrame)
		DaySelected = window.parent.frames[DivFrame].document.getElementById(Id);
	else
		DaySelected = document.getElementById(Id);
	//si le jour est deja selectionné on le choisit
	if (DaySelected == "null")
	{
		if (DivFrame)
			DaySelected = window.parent.frames[DivFrame].document.getElementById("Selected"+Which);
		else
			DaySelected = document.getElementById("Selected"+Which);
	}
	//on lui applique la classe choisie
	DaySelected.className = Classe;
	if (Classe == "SelectedDay"+Which)
	{
		//si c'est une operation de selection on recupere l'ancien Id et on place l'Id par Selected(_Month)
		DaySelected.name = Id;
		DaySelected.id = "Selected"+Which;
	}
}

// function de changement de mois pour le Calendrier
function ChangeMonth(Month, Year, div, dir, Frames)
{
	var CMonth;
	var CYear;
	//var DayDiv;
	if (Frames)
	{
		CMonth = window.parent.frames[Frames].document.getElementById(Month);
	 	CYear = window.parent.frames[Frames].document.getElementById(Year);
	 //	DayDiv = window.parent.frames[Frames].document.getElementById(div);
	}
	else
	{
		CMonth = document.getElementById(Month);
	 	CYear = document.getElementById(Year);
	 //	DayDiv = document.getElementById(div);
	}
	//incrmentation du mois par dir
	CMonth.name = parseInt(CMonth.name) + dir;
	//verification de depassement inferieur avec changement d'année le cas echeant
	if (parseInt(CMonth.name, 10) < 0)
	{
		//verification de depassement des annees
		if (CYear.selectedIndex == 0)
		{
			CMonth.name = 0;
			return ;
		}
		else
		{
			CYear.selectedIndex += dir;
			CMonth.name = 11;
		}
	}
	//verification de depassement superieur avec changement d'année le cas echeant
	if (parseInt(CMonth.name, 10) > 11)
	{
		//verification de depassement des annees
		if (CYear.selectedIndex == (CYear.options.length - 1))
		{
			CMonth.name = 11;
			return;
		}
		else
		{
			CYear.selectedIndex += dir;
			CMonth.name = 0;  
		}
	}
	//changement de l'id du mois et rafraichissement du calendrier
	ChangeMonthId(CMonth.name, Month, Frames);
}

//fonction qui change le mois du calendrier
function ChangeMonthId(MonthNumber, Div, Frames)
{
	var CMonth;
	if (Frames)
	{
	 	CMonth = window.parent.frames[Frames].document.getElementById(Div);
	}
	else
	{
		CMonth = document.getElementById(Div);
	}
	CMonth.innerHTML = TabMonth[parseInt(CMonth.name, 10)];
}
/*Met a jour le Calendrier
function ChangeCalendar(type, div)
{
	var TheDiv = document.getElementById(div);
	if (type == 3)
	{
		var Year = window.parent.Gauche.document.getElementById("YearC");
		Year.selectedIndex = TheDiv.selectedIndex;
	}
	if (type == 2)
	{
		var Month = window.parent.Gauche.document.getElementById("MonthC");
		Month.name = TheDiv.selectedIndex;
		ChangeMonthId(TheDiv.selectedIndex, "MonthC", "Gauche");
	}
	RefreshCalendar("YearC", "MonthC", "DayNumber",0 , "Gauche", "LinkCal");
	EmphasizeDay((window.parent.Haut.document.getElementById('DateJour').selectedIndex + 1), 'Gauche', "SelectedDay", "");
}*/
var Cal = 0;
//fonction d'ouverture de calendrier
function  OpenCalendar(Hidden, Link, Text, HiddenDate, start, end, flag, nodate)
{
	//			var chaine = Hidden.split("/");
	//			chaine = chaine.join("a");
	//			chaine += "_" + start + "_" + end;
	//			chaine += "_" + Link + "_" + flag;
	//			chaine += "_" + Text + "_";
	//			chaine += HiddenDate + "_" + nodate;
				//window.open("../../../Include/Calendrier.asp", chaine, "width=214,height=154,top="+((screen.Height - 154) / 2)+",left="+((screen.Width - 214) / 2));
	//			return;

	if (Cal == 0)
	{
		if (HiddenDate)
		{
			var chaine = Hidden.split("/");
			chaine = chaine.join("a");
			chaine += "_" + start + "_" + end;
			chaine += "_" + Link + "_" + flag;
			chaine += "_" + Text + "_";
			chaine += HiddenDate + "_" + nodate;
			Cal = window.open("../../../Include/Calendrier.asp", chaine, "width=214,height=154,top="+((screen.Height - 154) / 2)+",left="+((screen.Width - 214) / 2));
		}
	}
	else
		if (Cal.closed)
		{
			if (HiddenDate)
			{
				var chaine = Hidden.split("/");
				chaine = chaine.join("a");
				chaine += "_" + start + "_" + end;
				chaine += "_" + Link + "_" + flag;
				chaine += "_" + Text + "_";
				chaine += HiddenDate + "_" + nodate;
				Cal = window.open("../../../Include/Calendrier.asp", chaine, "width=214,height=154,top="+((screen.Height - 154) / 2)+",left="+((screen.Width - 214) / 2));
			}
		}
		else
			Cal.close();
}
