/** 
 * Traducteur en Ajax et jQuery : Jay Salvat - http://blog.jaysalvat.com/ 
**/ 
(function($) { 
$.fn.traducteur = function(settings) { 
    var options = { 
        source:         'fr',           // langue d'origine du site 
        destinations: { fr:'Français',  // langues disponibles à la traduction 
                        en:'English',
			es:'Espa&ntilde;ol',
                        it:'Italiano', 
                        de:'Deutch', 
                        
        } 
    }; 
    $.extend(options, settings); 
         
    return this.each(function() {                                   
        $(':header, div, p, li', this).dblclick(function(evt) { 
            var $$ = $(this); 
            // texte contenu dans l'élément double-cliqué 
            var text = $$.html();  
            // coordonnées de la souris au moment du double-clic 
            var x = evt.pageX; 
            var y = evt.pageY; 
             
            // si un élément a déjà était traduit, on en aura gardé une trace 
            // On saura donc en quelle langue il est censé être à présent  
            // et ne plus proposer ce choix dans le menu à venir 
            if ($$.data('destination')) { 
                source = $$.data('destination'); 
            // si l'élément n'a jamais été traduit, on prend la langue indiquée 
            // dans les configurations. 
            } else { 
                source = options.source; 
            } 
             
            // construction du menu de langues 
            html = '<ul id="traducteur">'; 
            for(index in options.destinations) { 
                if (source != index) { 
                    html += '<li><a href="#" rel="'+ index +'">'+ options.destinations[index] +'</a></li>'; 
                } else { 
                    html += '<li><b>'+ options.destinations[index] +'</b></li>'; 
                } 
            } 
            html += '</ul>';     
            menu = $(html); 
 
            // placement du menu aux coordonnées de la souris 
            menu.css({ 
                position:'absolute',  
                left:x,  
                top:y  
            }).appendTo('body'); 
 
            // si le document est cliqué, on supprime le menu 
            $('html').one('click', function() { 
                menu.remove(); 
                return false; 
            }); 
 
            // si l'une des langues du menu est sélectionnée 
            $('a', menu).click(function() { 
                // on supprime le menu 
                menu.remove(); 
                // on garde la langue sélectionnée 
                destination = $(this).attr('rel'); 
                // on 'fade out' l'élément cliqué                 
                $$.fadeTo('fast', 0.1, function() {     
                    // on contacte l'api Google pour la traduction 
                    $.ajax({ 
                        url: 'http://ajax.googleapis.com/ajax/services/language/translate', 
                        dataType: 'jsonp', 
                        data: { q: ''+ text,  
                                v: '1.0',  
                                langpair: source +'|'+ destination }, 
                        success: function(response) { 
                            // une fois la traduction obtenue, on remplace  
                            // le contenu de l'élément double-cliqué par la traduction 
                            $$.html(response.responseData.translatedText); 
                            // puis on réaffiche le tout avec un 'fade in' 
                            $$.fadeTo('fast', 1); 
                            // la langue de la traduction est gardée pour ne plus 
                            // la proposer dans le menu 
                            $$.data('destination', destination); 
                        } 
                    }); 
                }); 
                return false; 
            }); 
            return false; 
        }); 
    }); 
}; 
})(jQuery); 
