/**
 * @compagny : Archriss, web agency & ingénérie
 * @website : www.archriss.fr
 * @author : Jean-Philippe RIVET
 * @contact : jprivet@archriss.com
 * @copyright : Tous droits réservés 
 */

(function($){
	// exemple pour "options" : {param3: 'param3', param4: 'param4'}
	$.fn.mypreview = function(options){
		// A la place de "$(this)" écrire ici "this", ce dernier étant déjà un objet jQuery.
		
		// Paramètres par defaut
		var o = {
			positionFromCursorTop: 10,
			positionFromCursorLeft: 10,
			attr: 'title'
		};
		
		// Si les options existent...
		if(options){ 
			// Fusion aux paramètres par défaut
			$.extend(o, options);
		}
		
        container = $('<div/>').attr('id', 'mypreview-container')
        .hide()
        .appendTo('body');

		// Maintient de la chainabilité avec "return"
		return this.each(function(){
			
			// Initialisation de this
			var $this = $(this);
			
			// Exemple de fonction récupérant automatiquement l'objet en cours
			var action = function(){
				$this.css('background', 'red');
			};
			
			$this.click(function(){
				action();
			});
			
			$this.mousemove(function(e){
                
                container.css({
                    top: e.pageY + o.positionFromCursorTop + 'px',
                    left: e.pageX + o.positionFromCursorLeft + 'px'
                });
                
            }).hover(function(){
            	if(o.attr == 'title'){
	            	inner = '<p>' + $this.attr(o.attr) + '</p>';            	            		
            	} else {
            		pointer = $this.attr(o.attr);
	            	inner = $(pointer).html();            		
            	}
            	
            	container.empty().prepend(inner);
            	container.show();
 
            }, function(){
            	container.hide();
            });
			
		});
		
	};
})(jQuery);

/* *************************************** */
/* Les bonnes pratiques */
/* *************************************** */

/*

* Toujours envelopper votre plugin dans (fonction($){//plugin ici})(jQuery);
* Employer directement "this" au lieu de "$(this)" dans le champs d'application immédiat d'une fonction du plugin
* Faire un retour de "this" pour maintenir la chainabilité des méthodes
* Préférer le passage de paramètres par objet afin de pouvoir les étendres avec les valeurs par défaut du plugin
* Utiliser un seul espace de nommage par pluggin pour les functions, évenements et données supplémentaires

*/
