﻿<!--
// THE WEB OBJECTS TOOL LIBRARY 1.0 - POWERED BY THE-E-GHOST
// Script calendriers initialise par http://www.toutjavascript.com
// Conception par http://the-e-ghost.com - Septembre 2006
// Reproduction gratuite a condition de laisser ce commentaire

// *******************************************************************************************************************************
// COMPOSANT CALENDRIER - SELECT ET INPUT ****************************************************************************************
/* 	syntaxe du composant : genereCalendar('nomDuCalendrier[string]', 'typeDuCalendrier["select"/"input"]', 
			largeur[px], couleur de fond[hexa], couleur jour en cour[hexa],
			couleur jour ferie[hexa], couleur lien[hexa], couleur police[hexa],
			couleur police lien[hexa], couleur police jour courant[hexa],
			('nom du champ'), ('value champ'));
	2 types de calendrier :
	select : 	type agenda -> affiche des dates avec des hyperliens, a partir des variables array CAL_lien et CAL_targetLien
	input : 	type choix de date -> permet de completer un champ texte a partir du calendrier.
				le champ se nomme nomDuCalendrier + 'Chp'
	compatible Windows IE, firefox, netscape, opera
*/

// bibliotheque des functions ----------------------------------------------------------------------------------------------------
function genereCalendar(calendarName,calendarType,width,bgcolor,bandojourcolor,feriecolor,liencolor,style,linkstyle,jourcourantstyle) {
	argv								= genereCalendar.arguments;
	CAL_typeCalendar[calendarName]		= calendarType;
	CAL_calwidth[calendarName]			= width;
	CAL_bgcolor[calendarName]			= bgcolor;
	CAL_bandojourcolor[calendarName]	= bandojourcolor;
	CAL_feriecolor[calendarName]		= feriecolor;
	CAL_liencolor[calendarName]			= liencolor;
	CAL_style[calendarName]				= 'style="color: '+style+'; font-size: 9px; font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif; text-align: center"';
	CAL_linkstyle[calendarName]			= 'style="color: '+linkstyle+'; font-size: 9px; font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif; text-align: center; text-decoration: none"';
	CAL_jourcourantstyle[calendarName]	= 'style="color: '+jourcourantstyle+'; font-size: 9px; font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif; text-align: center; font-weight: bold"';
	if (argv[10])						CAL_nomChamp = argv[10];			// si il a ete specifie, on recupere le nom du champ
	else								CAL_nomChamp = calendarName;	// sinon on genere un nom par defaut avec le nom du calendrier
	if (argv[11])						CAL_valueChamp = argv[11];		// si elle a ete specifiee, on recupere la valeur a afficher dans le champ
	else								CAL_valueChamp = '../../....';	// sinon on affiche une valeur par defaut
	CAL_visibility[calendarName] 		= 'show';
	CAL_a2[calendarName]				= 0;
	CAL_a[calendarName]					= 0;
	CAL_m[calendarName]					= 0;
	if (calendarType == 'input') {
		CAL_content = '<div style="position:relative;top:0;left:0">';	
		CAL_content += '<TABLE border="0" cellspacing="0" cellpadding="1" width="'+CAL_calwidth[calendarName]+'"><TR>';
		CAL_content += '<TD align="left"><input type="text" id="'+CAL_nomChamp+'" name="'+CAL_nomChamp+'" size="10" value="'+CAL_valueChamp+'" readonly></TD>';
		CAL_content += '<TD align="left" valign="top"><a href="javascript:showCalendar(\''+calendarName+'\');"><img src="'+wayToJsLib+'/images/open.gif" alt="ouvrir calendrier" border="0"></a></TD>';
		CAL_content += '<TD align="left" valign="top" width="100%"><a href="javascript:displayCalendar(0,\''+calendarName+'\');"><img src="'+wayToJsLib+'/images/reset.gif" alt="reset calendrier" border="0"></a></TD>';
		CAL_content += '</TR></TABLE>';
		CAL_content += '<div id="'+calendarName+'" style="position:absolute;top:25;left:1;visibility:hidden">'+calendar(0,calendarName)+'</div></div>';
	} else {
		CAL_content = '<div id="'+calendarName+'" style="position:relative;top:0;left:0">'+calendar(0,calendarName)+'</div>';
	}
	return CAL_content;
}

function displayCalendar(targetMois,calendarName) {
	displayTarget(calendar(targetMois,calendarName),calendarName);
}

function showCalendar(calendarName) {
	if (CAL_visibility[calendarName] == 'show') {
		CAL_visibility[calendarName]	= 'hidden';
		showTarget(calendarName);
	} else {
		CAL_visibility[calendarName]	= 'show';
		hideTarget(calendarName);
	}
}

function estFerie(j,m) {
	var nb							= CAL_ferie.length;
	for(var i=0;i<nb;i++) {
		if ((CAL_ferie[i].substring(0,2) == j) && (CAL_ferie[i].substring(3,5) == m)) return true;
	}
	return false;
}

function estLien(j,m,a,calendarName) {
	var nb							= CAL_lien[calendarName].length;
	for	(var i=0; i<nb; i++) {
		if ((CAL_lien[calendarName][i].substring(0,2) == j) && (CAL_lien[calendarName][i].substring(3,5) == m)&&(CAL_lien[calendarName][i].substring(6,10) == a)) {
			CAL_indexLien			= i;
			return true;
		}
	}
	return false;
}

function completeChp(j,m,a,CAL_nomChamp) {
	// si necessaire, on ajoute les 0 initiaux
	if (j<10)						j = '0' + j;
	if (m<10)						m = '0' + m;
	// creation de la date complete
	var contenuChp					= j + '/' + m + '/' + a;
	valueTarget(contenuChp,CAL_nomChamp);
}

function calendar(targetMois,calendarName) {
	var d_jour							= new Date();
	if (targetMois == 0) {
		CAL_a[calendarName]				= d_jour.getYear();
		CAL_m[calendarName]				= d_jour.getMonth() + 1;
		if (CAL_a[calendarName] < 1970) {
			CAL_a[calendarName] 		= 1900 + CAL_a[calendarName]
		}
		CAL_a2[calendarName]			= CAL_a[calendarName];
	} else {
		CAL_m[calendarName]				= CAL_m[calendarName] + targetMois;
		if (CAL_m[calendarName] <= 0) {
			CAL_m[calendarName] 		= CAL_m[calendarName] + 12;
			CAL_a[calendarName] 		= CAL_a[calendarName] - 1;
		}
		if (CAL_m[calendarName] >= 13) {
			CAL_m[calendarName] 		= CAL_m[calendarName] - 12 ;
			CAL_a[calendarName] 		= CAL_a[calendarName] + 1;
		}
	}	
	var d								= new Date(CAL_a[calendarName],CAL_m[calendarName]-1,1);
	var dfin							= new Date(CAL_a[calendarName],CAL_m[calendarName]-1,1);
	var nb_jour							= 31;
	var aff_j							= "";
	for(k=32; k>27; k--) {
		dfin.setMonth(CAL_m[calendarName]-1);
		dfin.setDate(k);
		if (dfin.getMonth() != CAL_m[calendarName]-1) {
			nb_jour 					= k - 1;
		}
	}
	var j1								= d.getDay(); if (j1 == 0) j1 = 7;
	var jour							= 0;
	Z	= '<TABLE border="0" cellspacing="0" cellpadding="0" bgcolor="'+CAL_bgcolor[calendarName]+'" width="'+CAL_calwidth[calendarName]+'">';
	Z 	+= '<TR><TD>';
	Z	+= '<TABLE border="0" cellspacing="0" cellpadding="0" width="100%">';
	Z 	+= '<TR><TD align="left">';
	Z	+= '<a href="javascript:void(displayCalendar(-12,\''+calendarName+'\'))" '+CAL_linkstyle[calendarName]+'>&lt;&lt;</a>&nbsp;<a href="javascript:void(displayCalendar(-1,\''+calendarName+'\'))" '+CAL_linkstyle[calendarName]+'>&lt;</a>&nbsp;&nbsp;';
	Z 	+= '</TD><TD align="center">';
	Z	+= '<FONT '+CAL_style[calendarName]+'>'+CAL_mois[CAL_m[calendarName]-1] + " " + CAL_a[calendarName]+'</FONT>';
	Z 	+= '</TD><TD align="right">';
	Z	+= '&nbsp;&nbsp;<a href="javascript:void(displayCalendar(1,\''+calendarName+'\'))" '+CAL_linkstyle[calendarName]+'>&gt;</a>&nbsp;<a href="javascript:void(displayCalendar(12,\''+calendarName+'\'))" '+CAL_linkstyle[calendarName]+'>&gt;&gt;</a>';
	Z	+= '</TD></TR></TABLE>';
	Z	+= '</TD></TR><TR><TD>';
	Z	+= '<TABLE border="0" cellspacing="0" cellpadding="1" bgcolor="'+CAL_bgcolor[calendarName]+'" width="100%">';
	Z	+= '<TR bgcolor="'+CAL_bandojourcolor[calendarName]+'"><TD '+CAL_style[calendarName]+'>L</TD><TD '+CAL_style[calendarName]+'>M</TD><TD '+CAL_style[calendarName]+'>M</TD><TD '+CAL_style[calendarName]+'>J</TD><TD '+CAL_style[calendarName]+'>V</TD><TD '+CAL_style[calendarName]+'>S</TD><TD '+CAL_style[calendarName]+'>D</TD></TR>';
	for(i=0;i<6;i++) {
		Z							+= "<TR>";
		for (j=0; j<7; j++) {
			jour					= 7 * i + j - j1 + 2; 
			aff_j					= jour;
			if ((jour == d_jour.getDate()) && (CAL_m[calendarName] == d_jour.getMonth()+1) && (CAL_a[calendarName] == CAL_a2[calendarName])) {
				aff_j				= '<FONT '+CAL_jourcourantstyle[calendarName]+'>' + aff_j + '</FONT>';
			}
			if ((7*i+j >= j1-1) && (jour <= nb_jour)) {
				if (CAL_typeCalendar[calendarName] == 'select') {
					if (estLien(jour,CAL_m[calendarName],CAL_a[calendarName],calendarName)) {
						Z += '<TD bgcolor="'+CAL_liencolor[calendarName]+'" '+CAL_style[calendarName]+'>';
						Z += '<a href="'+CAL_targetLien[calendarName][CAL_indexLien]+'" onClick="javascript:showCalendar(\''+calendarName+'\');" '+CAL_linkstyle[calendarName]+'>'+aff_j+'</a></TD>';
					} else if ((j == 6) || (estFerie(jour,CAL_m[calendarName]))) {
						Z += '<TD bgcolor="'+CAL_feriecolor[calendarName]+'" '+CAL_style[calendarName]+'>'+aff_j+'</TD>';
					} else {
						Z += '<TD '+CAL_style[calendarName]+'>'+aff_j+'</TD>';
					}
				} else {
					var aHTML		= '<a href="javascript:completeChp(\''+jour+'\',\''+CAL_m[calendarName]+'\',\''+CAL_a[calendarName]+'\',\''+CAL_nomChamp+'\');" ';
					aHTML			+= 'onClick="javascript:showCalendar(\''+calendarName+'\');" '+CAL_linkstyle[calendarName]+'>';
					if ((j == 6) || (estFerie(jour,CAL_m[calendarName]))) {
						ferieHTML	= 'bgcolor="'+CAL_feriecolor[calendarName]+'"';
					} else {
						ferieHTML	= '';
					}
					Z += '<TD '+ferieHTML+' '+CAL_style[calendarName]+'>'+aHTML+aff_j+'</a></TD>';
				}
			} else {
				Z	+= '<TD '+CAL_style[calendarName]+'>&nbsp;</TD>';
			}
		}
		Z	+= '</TR>';
	}
	Z	+= '</TABLE>';
	Z	+= '</TD></TR></TABLE>';
	
	return Z;
}
-->