var element_body;
var page_couleur_texte_erreur = '#a00';


function initialise_champ(element_champ, valeur)
{
	$(element_champ).value = valeur;
}

//<-- Gestion des formulaires
	function initialise_champs_formulaire(formulaire_id, champs_formulaire)
	{
		for (var champ in champs_formulaire)
		{
			if (element = document.forms[formulaire_id].elements[champ])
			{
				if (element.type != 'file') // Dans ce cas-là, on ne peut pas l'initialiser
				{
					/*if (element.type == 'text' || element.type == 'select-one')
						element.value = champs_formulaire[champ];
					else if (element.type == 'textarea')
						element.value = remplace(champs_formulaire[champ], new Array("\\n", "\\r"), new Array("\n", "\r"));*/
					if (element.type == 'text' || element.type == 'select-one' || element.type == 'hidden' || element.type == 'textarea')
						element.value = remplace(champs_formulaire[champ], new Array("\\n", "\\r"), new Array("\n", "\r"));
					else if (element.type == 'checkbox')
					{
						element.checked = champs_formulaire[champ];
					}
					else if (element[0].type == 'radio')
					{
						for (j = 0; j < element.length; j++)
							if (element[j].value == champs_formulaire[champ])
							{
								element[j].checked = true;
								break;
							}
					}
				}
			}
			//else break;
		}
	}
	function explicite_champs_obligatoires(formulaire_id, champs_obligatoires)
	{
		for (i = 0; i < champs_obligatoires.length; i++)
			document.forms[formulaire_id].elements[champs_obligatoires[i]].setStyle({ borderColor:page_couleur_texte_erreur });
	}
//-->

//<-- Le mini-calendrier
	/*
		Le mini-calendrier renvoie une date au format SQL : YYYY-MM-JJ
	*/
	var miniCalendrier_element;
	var miniCalendrier_ouvert = false; // Si le calendrier vient d'être ouvert, pour empêcher le calendrier de se fermer lorsque l'on passe d'un champ calendrier à un autre
	var miniCalendrier_icone = new Array();
	//<-- Paramètres modifiables
		var miniCalendrier_mois = new Array('','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
		var miniCalendrier_jours_semaine = new Array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
		var miniCalendrier_champ_largeur = '100px';
		miniCalendrier_icone['adresse'] = '/images/icones/calendrier.gif';
		miniCalendrier_icone['largeur'] = 14; // en pixel
		miniCalendrier_icone['hauteur'] = 14; // en pixel
		var miniCalendrier_semaine_premier_jour = 1; // 0 pour dimanche, 1 pour lundi
	//-->
	
	var miniCalendrier = Class.create({
		initialize: function(input)
		{
			if (!miniCalendrier_element) // On crée un calendrier si aucun n'a été créé
			{
				element_body = document.getElementsByTagName('body')[0];
				miniCalendrier_element = new Element('div', { id: 'mini_calendrier' });
				miniCalendrier_element.setStyle({ left:'0px', position:'absolute', top:'0px', visibility:'hidden', zIndex:'100' });
				$(element_body).insert({ top:miniCalendrier_element });
			}
			mini_calendrier_champ = $(input);
			mini_calendrier_champ.setStyle({ display:'none' });
			//mini_calendrier_champ.writeAttribute({ readonly:'readonly' });
			//mini_calendrier_champ.setStyle({ width:miniCalendrier_champ_largeur });
			
			mini_calendrier_champ_visuel = new Element('input', { type:'text', size:'20', id:'minicalendrier_visuel_' + mini_calendrier_champ.identify(), readonly:'readonly' });
			mini_calendrier_champ_visuel.addClassName('mini_calendrier');
			mini_calendrier_champ_visuel.setStyle({ width:miniCalendrier_champ_largeur });
			mini_calendrier_champ.insert({ after:mini_calendrier_champ_visuel });
			
			mini_calendrier_image = new Element('img', { src:miniCalendrier_icone['adresse'] }); // On insert une image de calendrier à droite du champ
			mini_calendrier_image.setStyle({ cursor:'pointer', marginLeft:'4px', verticalAlign:'middle' });
			mini_calendrier_champ_visuel.insert({ after:mini_calendrier_image });

			mini_calendrier_champ_visuel.observe('focus', function(event) {
				miniCalendrier_element.setStyle({ left:Event.element(event).cumulativeOffset().left + 'px', top:(Event.element(event).cumulativeOffset().top + Event.element(event).getHeight()) + 'px' });
				miniCalendrier_display(Event.element(event), 0, 0);
			});
			mini_calendrier_champ_visuel.observe('blur', function(event) {
				miniCalendrier_hide();
			});
			mini_calendrier_image.observe('click', function(event) {
				Event.element(event).previous('input').focus();
			});
		},
		initialise_champ: function(jour, mois, annee)
		{
			miniCalendrier_initialiseChamp(mini_calendrier_champ.identify(), jour, mois, annee);
		},
		miniCalendrier_rafraichit_date: function(jour, mois, annee)
		{
			//alert($(mini_calendrier_champ).value.substr(5, 1) == '0' ? $(mini_calendrier_champ).value.substr(6, 1) : $(mini_calendrier_champ).value.substr(5, 2))
			miniCalendrier_initialiseChamp(mini_calendrier_champ.identify(), $(mini_calendrier_champ).value.substr(8, 2), $(mini_calendrier_champ).value.substr(5, 1) == '0' ? $(mini_calendrier_champ).value.substr(6, 1) : $(mini_calendrier_champ).value.substr(5, 2), $(mini_calendrier_champ).value.substr(0, 4));
		}
	});

	/*function miniCalendrier_rafraichit_date(element_id)
	{
		miniCalendrier_initialiseChamp(element_id, $(element_id).value.substr(8, 2), parseInt($(element_id).value.substr(5, 2)), $(element_id).value.substr(0, 4));
	}*/

	function miniCalendrier_hide()
	{
		setTimeout('miniCalendrier_hide_progress();', 200);
	}
	function miniCalendrier_hide_progress()
	{
		if (!miniCalendrier_ouvert)
		{
			miniCalendrier_element.setStyle({ visibility:'hidden' });
			miniCalendrier_ouvert = false;
		}
	}

	function miniCalendrier_initialiseChamp(element_input, jour, mois, annee)
	{
		$(element_input).value = annee + '-' + (mois < 10 ? '0' : '') + mois + '-' + (jour < 10 ? '0' : '') + jour;
		$('minicalendrier_visuel_' + element_input).value = jour + ' ' + miniCalendrier_mois[mois] + ' ' + annee;
	}
	
	//<-- Date functions
		function miniCalendrier_intialize_structure_date(date)
		{
			return {
				'day':date.getDate(),
				'mois':date.getMonth() + 1,
				'annee':date.getFullYear()
			};
		}
		
		var miniCalendrier_date_selectionnee = miniCalendrier_intialize_structure_date(new Date());
		
		function miniCalendrier_first_day_mois(mois, annee)
		{
			return (new Date(annee, mois - 1, 1).getDay());
		}
		function miniCalendrier_get_last_day_mois(mois,annee)
		{
			return (new Date(annee, mois, 0).getDate());
		}
	//-->
	
	/**
	 * @param element Element who calls calendar (<input type="text"> for example, who will be display under this element)
	 * @param mois mois to up or down
	 * @param annee Year to up or down
	 */
	function miniCalendrier_display(element, mois, annee)
	{
		miniCalendrier_ouvert = true;
		$(element).focus();
		//<-- Modification of mois or annee
			miniCalendrier_date_selectionnee.mois += mois;
			miniCalendrier_date_selectionnee.annee += annee;
			if (miniCalendrier_date_selectionnee.mois < 1)
			{
				miniCalendrier_date_selectionnee.annee--;
				miniCalendrier_date_selectionnee.mois += 12;
			}
			if (miniCalendrier_date_selectionnee.mois > 12)
			{
				miniCalendrier_date_selectionnee.annee++;
				miniCalendrier_date_selectionnee.mois -= 12;
			}
		//-->

		Dstart=(miniCalendrier_first_day_mois(miniCalendrier_date_selectionnee.mois,miniCalendrier_date_selectionnee.annee)+7-miniCalendrier_semaine_premier_jour)%7;
		jmaxi=miniCalendrier_get_last_day_mois(miniCalendrier_date_selectionnee.mois,miniCalendrier_date_selectionnee.annee);
		jmaxiAvant=miniCalendrier_get_last_day_mois((miniCalendrier_date_selectionnee.mois-1),miniCalendrier_date_selectionnee.annee);

		ymaxi=parseInt((jmaxi+Dstart+1)/7,10);
		htm = '<table cellpadding="0" cellspacing="0" class="mini_calendrier">';
			htm += '<colgroup><col /><col /><col /><col /><col /><col /><col /></colgroup>';
			htm += '<tr><th colspan="7"><a onclick="miniCalendrier_display($(\'' + element.id + '\'),0,-1);">&nbsp;&lt;&lt;&nbsp;</a> <a onclick="miniCalendrier_display($(\'' + element.id + '\'),-1,0);">&nbsp;&lt;&nbsp;</a> <strong>' + miniCalendrier_mois[miniCalendrier_date_selectionnee.mois] + ' ' + miniCalendrier_date_selectionnee.annee + '</strong> <a onclick="miniCalendrier_display($(\'' + element.id + '\'),1,0)">&nbsp;&gt;&nbsp;</a> <a onclick="miniCalendrier_display($(\'' + element.id + '\'),0,1)">&nbsp;&gt;&gt;&nbsp;</a></th></tr>';
			//<-- Display of week days name
				htm += '<tr>';
				for (x=0;x<7;x++)
					htm += '<td><strong>' + miniCalendrier_jours_semaine[(x+miniCalendrier_semaine_premier_jour)%7].substr(0, 2) + '</strong></td>';
				htm += '</tr>';
			//-->
			for (y=0;y<=ymaxi;y++)
			{
				htm += '<tr>';
				for (x=0;x<7;x++)
				{
					idxP=y*7+x-Dstart+1;
					aa=miniCalendrier_date_selectionnee.annee;
					xx=(x+miniCalendrier_semaine_premier_jour)%7;
					if (idxP<=0)
					{
						jj=idxP+jmaxiAvant;mm=miniCalendrier_date_selectionnee.mois-1;
						if (mm==0)
						{
							mm = 12;
							aa--;
						}
						htm += "<td class='mini_calendrier_jour_externe'><a onclick=\"miniCalendrier_initialiseChamp('" + $(element.id).previous('input').identify() + "', " + jj + ", " + mm + ", " + aa + ");\">"+jj+"</a></td>";
					}
					else if (idxP>jmaxi)
					{
						jj=idxP-jmaxi;mm=miniCalendrier_date_selectionnee.mois+1;
						if (mm==13)
						{
							mm=1;
							aa++;
						}
						htm+="<td class='mini_calendrier_jour_externe'><a onclick=\"miniCalendrier_initialiseChamp('" + $(element.id).previous('input').identify() + "', " + jj + ", " + mm + ", " + aa + ");\">"+jj+"</a></td>";
					}
					else
					{
						jj=idxP;
						mm=miniCalendrier_date_selectionnee.mois;
						htm+="<td class='mini_calendrier_jour'><a onclick=\"miniCalendrier_initialiseChamp('" + $(element.id).previous('input').identify() + "', " + jj + ", " + mm + ", " + aa + ");\">"+jj+"</a></td>";
					}
				}
				htm += '</tr>';
			}
		htm += '</table>';
		miniCalendrier_element.innerHTML=htm;
		miniCalendrier_element.style.visibility="";

		setTimeout('miniCalendrier_ouvert = false;', 400)
	}
//-->