
/************************************************************************************/
/*		Ce fichier gère les interactions avec AJAX
/************************************************************************************/



/*****************************************************************************
/*	Fonction générique permettant de communiquer avec AJAX
/*		url : fichier que Ajax va appeler
/*		methode : 'post' ou 'get'
/*		params : les parametres à envoyer ('p1=v1&p2=v2' par exemple)
/*		type_reponse : à 'xml' si on veut un résultat xml, autre chose sinon
/*		fct_oncomplete : fonction a appelé quand ajax recoit le résultat
*/

	function sendToAjax(url, methode, params, type_reponse, fct_oncomplete){

		if( type_reponse.toLowerCase() == 'xml' ){
			var myAjax = new Ajax.Request(
						url, 
						{method: methode, parameters: params, onComplete: fct_oncomplete}
			);
		}
		else{
			var myAjax = new Ajax.Updater(
						'div_pour_ajax',
						url, 
						{method: methode, parameters: params, onComplete: fct_oncomplete}
			);
		}
	}



/*****************************************************************************
/*	Retourne la valeur du premier noeud xml du tableau  t_elts
/*	Renvoie '' si il ya qlqch qui cloche
*/

	function getNodeValue(t_elts){

		if(t_elts.length > 0 && t_elts[0].hasChildNodes() && t_elts[0].firstChild.nodeValue != '')
			return t_elts[0].firstChild.nodeValue;

		return '';
	}




/*****************************************************************************
/*	Appelée pour mettre à jour un SELECT, après une requête Ajax
/*	Le XML récupéré doit être du genre:
/*		<donnees>
/*			<select>id_du_select</select>
/*			<selected_value>valeur_a_selectionner</selected_value>
/*			<mess1>message1</mess1>
/*			<mess2>message2</mess2>
/*			<options>
/*				<option>
/*					<value>valeur1</value>
/*					<text>texte1</text>
/*				</option>
/*				...
/*			</options>
/*		</donnees>
*/

	function remplirSelectWithAjax(obj){
		var xml = obj.responseXML;

		remplirSelectWithXML(
			getNodeValue(xml.getElementsByTagName('select')),
			getNodeValue(xml.getElementsByTagName('selected_value')),
			getNodeValue(xml.getElementsByTagName('mess1')),
			getNodeValue(xml.getElementsByTagName('mess2')),
			xml
		);
	}


//	Cette fonction remplit des éléments SELECT
//	Le fichier XML récupéré doit être du type:
//		<options>	--> noeud root
//			<option>
//				<value>valeur1</value>
//				<text>texte1</text>
//			</option>
//			...
//		</options>
//
//		id_select : ID de l'element SELECT à remplir
//		selected_value : valeur de l'option à sélectionner
//		mess1 : message affiché en position 0 s'il y a au moins 1 résultat
//		mess2 : message affiché en position 0 s'il n'y a aucun résultat
function remplirSelectWithXML(id_select, selected_value, mess1, mess2, xml){


	var t_option = xml.getElementsByTagName('option');
	var oSelect = $(id_select);
	var elt, stop, i;

	
	//	Je vide ma liste
	stop = oSelect.options.length;
	for(i=0; i<stop; i++)
		oSelect.options[0] = null;

	
	//	Insertion d'un texte "d'accueil"
	elt = document.createElement('option');
	elt.text = (t_option.length==0 ? mess2 : mess1);
	elt.value = '';
	elt.selected = true;
	oSelect.options[0] = elt;

	//	Je remplis la liste si je peux
	if( t_option.length != 0 ){
		
		i = 1;	//	compteur dans l'élément SELECT: à 0 j'ai le texte d'accueil donc je commence à 1.
		while( i <= t_option.length ){
			elt = document.createElement('option');
			elt.text  = getNodeValue(t_option[i-1].getElementsByTagName('text')).replace(/&euro;/, '€');
			elt.value = getNodeValue(t_option[i-1].getElementsByTagName('value'));
			if( elt.value == selected_value )
				elt.selected = true;

			oSelect.options[i] = elt;
			i++;
		}
	}
}

/*****************************************************************************
/*	Appellée suite à une requête Ajax, cette fonction permet de remplir automatiquement des champs HTML.
/*	En effet, si le fichier xml est construit de la manière suivante:
/*			<infos>  --> infos est le noeud root
/*				<champ1>valeur</champ1>
/*				<champ2>valeur</champ2>
/*			</infos>
/*	nous allons parcourir tous les ss-noeuds de infos, dont les tagname sont le nom des champs
*/

	function remplirChampsWithAjax(obj){

		var xml = obj.responseXML;
		var root = xml.getElementsByTagName('infos');

		if( root.length > 0 ){
			var t_enfants = root[0].childNodes, i = 0, valeur;
			while( i < t_enfants.length ){
				if( t_enfants[i].hasChildNodes() )
					valeur = t_enfants[i].firstChild.nodeValue.replace(/&euro;/, '€');
				else
					valeur = '';

				if( document.getElementsByName(t_enfants[i].nodeName).length > 0  &&  document.getElementsByName(t_enfants[i].nodeName)[0] )
					document.getElementsByName(t_enfants[i].nodeName)[0].value = valeur;

				i++;
			}

			//	Je regarde su j'ai un attribut impliquant une action spéciale
			if( root[0].getAttribute('action') != null ){
			}		
		}
	}