(function($){
 	$.fn.extend({ 

 		bubbleTooltip: function( options ){
			
			// Options

			var defaults 	= {
				bubblesHolderElement: 	'.bubblesHolder',
				bubblesElement: 		'.bubble'
			};

			var options 	= $.extend( defaults, options );
			
			// Main stage
			
			return this.filter('[rel]').each(function(){
				
				var o 				= options;
				var rel_primario	= $(this).attr('rel');
				o.hijos				= $(this).children('li').children('a[rel]');

				// Preparo Burbujas
								
				var burbujas_holder = $('div' + o.bubblesHolderElement + '[rel=' + rel_primario + ']');
				var burbujas		= $('div' + o.bubblesElement, burbujas_holder).filter(function(){
					return filtrarBurbujas( o, $(this) );
				});
				
				o.burbujas			= burbujas;
				
				var hover_icon 		= false;
				var hover_bubble 	= new Array();
				
				burbujas.each(function(){
					var rel = $(this).attr('rel');
					
					activarBurbujar( $(this) );
					$(this).hover(function(){
						hover_bubble[rel] = true;
					}, function(){
						hover_bubble[rel] = false;
						setTimeout(function(){
							if( !hover_icon && !hover_bubble[rel] ){
								ocultarBurbuja( o );
							}
						}, 200);
					});
				});
				
				o.hijos.each(function(){
					var rel = $(this).attr('rel');
					
					$(this).hover(function(){
						
						hover_icon = true;
						mostrarBurbuja( o, $(this) );
						
					}, function(){
						
						hover_icon = false;
						setTimeout(function(){
							if( !hover_icon && !hover_bubble[rel] ){
								ocultarBurbuja( o );
							}
						}, 200);
						
					});
					
				});
				

			});
    	}
	});
	
	// Auxiliares
	
	function filtrarBurbujas( o, $elem ){
		var rel = $elem.attr('rel');
		var conteo = $(o.hijos).filter('[rel=' + rel + ']').size();
		return ((conteo==1) ? 1 : 0);
	}
	
	function activarBurbujar( $elem ){
		$elem.wrapInner('<div class="text"></div>').append('<div class="pointer"></div>');
	}
	
	function elegirBurbujaAsociada( o, $elem ){
		var rel 	= $elem.attr('rel');
		var elegida = $(o.burbujas).filter('[rel=' + rel + ']');
		// console.log(elegida);
		return elegida;
	}
	
	function mostrarBurbuja( o, $elem ){
		var burbuja = elegirBurbujaAsociada( o, $elem );
		var offset 	= $elem.offset();
		o.burbujas.css({ 'top' : '-1500px', 'left' : '0px' }).addClass('hidden');
		burbuja.css({ 'top' : parseFloat(offset.top-30)+'px', 'left' : parseFloat(offset.left-2)+'px' }).removeClass('hidden');
	}
	
	function ocultarBurbuja( o ){
		o.burbujas.css({ 'top' : '-1500px', 'left' : '0px' }).addClass('hidden');
	}
	
})(jQuery);