// ajaxTo : changement ajax depuis l'extérieur d'un bloc
// please grant credits to F. ALBERT 2009 - http://www.loceanique.org

// Modification d'un lien pour qu'il modifie le contenu d'un bloc ajax extérieur
// Utilisation :
// - le script ajaxCallback.js de SPIP doit être inséré avant
// - déclarer un lien <a class="ajaxTo target-TARGET" href="URL#PARAMS"...>...</a>
// - TARGET est l'ID du div cible, qui doit contenir le bloc ajax #INCLURE{ajax}
// - PARAMS sont les paramètres qui sont repris pour être substitués à ceux du bloc INCLURE
// - URL ne sert que si ajax n'est pas activé

function updateSPIPAjaxBlock(fullUrl, ajax_target)
{
	// Parcourir les ajaxbloc de la cible
	var targetBloc = jQuery("#"+ajax_target).eq(0);
	if (!targetBloc || targetBloc == undefined || targetBloc.length == 0) return true;
	var blocfrag = jQuery('div.ajaxbloc',targetBloc).eq(0);
	if (!blocfrag || blocfrag == undefined || blocfrag.length == 0) return true;
	    
   	// Récupérer l'environnement
   	var ajax_env = (""+blocfrag.attr('class')).match(/env-([^ ]+)/);
    ajax_env = ajax_env[1];
    if (!ajax_env || ajax_env==undefined) return true;

    // Finir de transformer l'URL
    var url = fullUrl.split('#');
	url[0] += (url[0].indexOf("?")>0 ? '&':'?')+'var_ajax=1&var_ajax_env='+encodeURIComponent(ajax_env);
	if (url[1])
		url[0] += "&var_ajax_ancre="+url[1];
	if (jQuery(this).is('.preload') && !preloaded_urls[url[0]])
		jQuery.ajax({"url":url[0],"success":function(r){preloaded_urls[url[0]]=r;}});

   	// Fonction qui place le résultat de la requête dans la page
	var on_pagination = function(c)
	{
		jQuery(blocfrag).html(c).removeClass('loading');
		targetBloc.trigger('ajaxto_post_update');
		setTimeout(function()
		{
			blocfrag.positionner(true);
		},10);
	};
	
	// En chargement
	targetBloc.trigger('ajaxto_pre_update');
	jQuery(blocfrag).animeajax().addClass('loading');

	// Gérer les url préchargées
	if (preloaded_urls[url[0]])
	{
		on_pagination(preloaded_urls[url[0]]);
		triggerAjaxLoad(document);
	}
	else
	{
		jQuery.ajax(
		{
			url: url[0],
			success: function(c)
			{
				on_pagination(c);
				preloaded_urls[url[0]] = c;
			}
		});
	}

	return false;
}

// Fonction appelée sur un item pour ajaxer le lien
jQuery.fn.ajaxtolink = function()
{
	// Exécuter sur tous les liens
    return this.each(function()
    {
        var linkItem = jQuery(this);

    	// Récupérer l'URL indiquée dans le href
    	var fullUrl = linkItem.attr('href');
    	
    	// Récupérer la div cible
    	var ajax_target = (""+linkItem.attr('class')).match(/target-([^ ]+)/);
    	ajax_target = ajax_target[1];
    	if (!ajax_target || ajax_target==undefined)
    	    ajax_target = url[1];
    	if (!ajax_target || ajax_target==undefined)
    	    return;

    	// Ajouter un handler de onClick        
        jQuery(this).click(function(event)
        {
            var doDefault = updateSPIPAjaxBlock(fullUrl, ajax_target);
            if (!doDefault)
                event.preventDefault();
            return doDefault;
        });
    });
};

// Ajaxer les liens au demarrage
jQuery(function()
{
	jQuery('a.ajaxTo').ajaxtolink();
});

