/*
 * jQuery AJAX Automation
 * Copyright 2008 Emmanuel CROMBEZ
 * Released under and GPL licenses.
 *
 * dynajax permet de mettre en place un service ajax tout en gardant un systeme sans.
 * on utilise les liens classiques avec le tag <A> en ajoutant un attribut 'ajax' à 'on'.
 *
 * Par exemple :
 *
 * <div> <a ajax='on' href='mon.cgi'>un simple lien</a> </div>
 * <script> $('body').dynajax(); </script>
 *
 * La node parent du lien recevra la contenu de la requete...
 *
 * Si vous voulez que le lien ne soit pas détruit, il suffit d'ajouter un attribut 'ajaxid' comme cela:
 *
 * <a ajax='on' ajaxid='celle-la' href='mon.cgi'>un simple lien</a>
 * <div id='celle-la'></div>
 * <script> $('body').dynajax(); </script>
 * 
 *  Ainsi client sans javascript (comme le robot de google) arrive à suivre tous les contenus.
 *  Evidemment, il vaut mieux que les CGI tiennent compte du parametre AJAX=on que nous avons ajouter
 * pour mettre une vrai page HTML autour du contenu. Mais cela fonctionne sans.
 *
 * TODO rename dynajax() en ajax_load() plus logique avec ajax_update()
 */

jQuery.fn.dynajax = function() {
	$(this).find("a[ajax='on']").each( function() {
		var href   = $(this).attr('href');
		var ajaxid = $(this).attr('ajaxid') || $(this).parent();

		href += (href.search(/[?]/)==-1)?'?AJAX=on':'&AJAX=on';

		$(ajaxid).hide().load(href,undefined,function(s,t,f){ $(ajaxid).fadeIn('slow') });

		return true;
		});
	return this;
	};

/*
 * ajax_update() permet de mettre en place un appel ajax pour mettre a jour une node text
 *
 * <a href='#' ajax_update='update.pl'>La valeur a modifier</a>
 * <script> $('a[ajax_update]').ajax_update(); </script> 
 * 
 * Si l'on click sur le <A>, on fait apparaittre un champ text on l'on peut modifier le texte.
 * Si l'on valide la modification, "update.pl?VALUE=La+nouvelle+valeure" sera appelé.
 * Si update.pl renvoi OK, la valeur sera mis à jour dans la page, sinon une alert() avec le texte renvoyé sera affichée.
 *
 * On entoure le tag A et les INPUT text button submit d'un FORM.ajax_update pour la CSS.
 */
jQuery.fn.ajax_update = function() {
	$(this).each( function() {

		var base  = this;
		var value = $(this).text();
		var href  = $(this).attr('ajax_update');

		$(this).wrap("<form onSubmit='return false;' class='ajax_update'></form>")
					 .after("<input type='button' class='button annuler'  value='Annuler'  style='display:none'/>")
					 .after("<input type='submit' class='submit modifier' value='Modifier' style='display:none'/>")
		       .after("<input type='text' class='text' value='' style='display:none'/>")
					 .click( function() { $(this).toggle().next().val( $(this).text()  ).toggle().next().toggle().next().toggle(); } )
					 ;

		$(this).next().next().next().click( function() { /* Annuler */
					$(this).toggle().prev().toggle().prev().toggle().prev().toggle();
					} );

		$(this).next().next().click( function() { /* Modifer */
					$.get( href+((href.search(/[?]/)==-1)?'?VALUE=':'&VALUE=')+$(this).prev().val() , function(data) {
						if(data=='OK')
							{ $(base).text( $(base).next().val()  ); }
						else
							{ alert(data); }
						} );
					$(this).toggle().next().toggle();
					$(this).prev().toggle().prev().toggle();
					} );
		});
	return this;
	};


