/**
 * Latz
 *
 * @filesource	$HeadURL: http://svn.cr0ck.net/svn/latz/trunk/sites/_global/js/get.js $
 * @package 	Latz
 * @copyright 	Copyright (c) 2006-2008 cr0ck.net (http://cr0ck.net)
 * @license		http://www.opensource.org/licenses/mit-license.php The MIT License
 * @version		$Id: get.js 33 2008-01-14 13:29:59Z alexis.mineaud $
*/
/**
 * @param action : nom de l'action  (ex:getArticles)
 * @param idDestination : id de l'objet destionation de la page web
 * @param typeDestination : type de conteneur
 * @param option : paramètres optionnels
 */

function get(params, idDestination, typeDestination, options) {
	var statutHTTP = null;
	
	if(options === undefined)						options = $H({'asynchronous':true, 'method':'post'});
	if(options['url'] === undefined)				options['url'] = _urlGetScript_;
	if(options['parametres'] === undefined)			options['parametres'] = params;
	if(options['asynchronous'] === undefined)		options['asynchronous'] = true;
	if(options['method']  === undefined)			options['method'] = 'post';
	if(options['idReponse']  === undefined)			options['idReponse'] = 'lz_messageStatut';
	if(options['$']  === undefined)					options['$'] = $;	//expérimental
	
	var myAjax = new Ajax.Request(options['url'], {
		method: options['method'],
		parameters: options['parametres'],
		asynchronous: options['asynchronous'],
		
		//stocke le code statut de la page
		onComplete: function(transport) {
			statutHTTP = transport.status;
		},
		
		//OK
		on200: function(transport) {
			if (idDestination != null) {
				regenerer(transport, idDestination, typeDestination, options);
			}
		},
		
		//retour OK avec affichage message
		on201: function(transport) {
			$(options['idReponse']).removeClassName('erreur');
			$(options['idReponse']).addClassName('OK');
			
			$(options['idReponse']).style.display = 'block';
			$(options['idReponse']).update(transport.responseText);
			window.setTimeout("$('"+options['idReponse']+"').style.display = 'none';", 10000);
		},
		
		//retour en erreur avec affichage message
		on300: function(transport) {
			$(options['idReponse']).removeClassName('OK');
			$(options['idReponse']).addClassName('erreur');
			
			$(options['idReponse']).style.display = 'block';
			$(options['idReponse']).update(transport.responseText);
			window.setTimeout("$('"+options['idReponse']+"').style.display = 'none';", 10000);
		},
		
		//erreur xxx
		onFailure: function(transport) {
			$(options['idReponse']).removeClassName('OK');
			$(options['idReponse']).addClassName('erreur');
			
			$(options['idReponse']).style.display = 'block';
			$(options['idReponse']).update(transport.responseText);
			window.setTimeout("$('"+options['idReponse']+"').style.display = 'none';", 10000);
		}
	});
	
	return statutHTTP == 200;
}


function regenerer(transport, idDestination, typeDestination, options) {
	switch (typeDestination) {
		case 'html':
			options['$'](idDestination).update(transport.responseText);
		break;
		
		
		case 'select':
			tab_o = eval(transport.responseText.unescapeHTML());
		
			//on vide le select
			while($(idDestination).options.length != 0)
				$(idDestination).options[$(idDestination).options.length-1] = null;

			$A(tab_o).each(
			  	function(i) {
			  		var v_num  = 		i.id;
					var v_libelle = 	i.nom;
					var v_classCSS = 	i.classCSS;
			
					var option = new Option(v_libelle, v_num, false, true);
					option.className = v_classCSS;
					
					Try.these(
						function() { $(idDestination).add(option, null);},  // FF
						function() { $(idDestination).add(option, -1);}     // IE
					);		
			  	}
			)
			
			//on sélectionne le premier élément ou si l'index id_select existe, celui ci.
			if (options['id_select'] == null)
				$(idDestination).options[0].selected = true;
			else 
				$(idDestination).options[options['id_select']-1].selected = true;
			
		break; 
		
				
		/**
		 * A améliorer pour passer "nom" en paramètre (autrement dit, comment s'écrit une propriété d'un objet dynamiquement ?)
		 */
		case 'input':
			$(idDestination).value = transport.responseText;
		break;
	}
}