/**
 * @author pfn
 */

;(function($) {
	$.tai_tooltip = function(el, options) {
		var defaults = {
			activation : 'hover',
			attribute : 'title',
			position : 'topRight',
			displayTime : 5000
		}

		var tooltip = this;
        var over = false;
        var speed;

		tooltip.settings = { }        

		var init = function() {
			tooltip.settings = $.extend({}, defaults, options);

			tooltip.el = el;

            if (!$.isFunction($.doTimeout)) {
                $.ajaxSetup({ async: false });
                $.getScript('/investe/script/jquery.ba-dotimeout.min.js');
                $.ajaxSetup({ async: true });
            }

			tooltip.el.each(function() {
				attach_tooltip($(this));
			});
		}

		var attach_tooltip = function(obj) {
			var tooltip_text = $(obj).attr(tooltip.settings.attribute);
			if($.trim(tooltip_text).length == 0)
				return;

			$(obj).attr(tooltip.settings.attribute, '');

			switch (tooltip.settings.activation) {
				case "hover":                    
                    $(obj).hover(
                        function() {
                            if ($('.tai-tooltip') && $('.tai-tooltip .tai-tooltip-content').html() === tooltip_text && over) {
                                 $.doTimeout('hoverOut');
                                 return;
                            }

                            if (over) {
                                $.doTimeout('hoverOut', true);
                                speed = 0;
                            } else {
                                $.doTimeout('hoverOut');
                                speed = 500;
                            }

						    $.doTimeout('hoverIn', speed, display_tooltip, obj, tooltip_text);
                        },
                        function() {
                            $.doTimeout('hoverIn');
					        $(obj).bind('mouseleave', function() {
                                $.doTimeout('hoverOut', 500, function() {
						            tooltip.widget.animate({
							            'opacity' : 0
						            }, function() { tooltip.widget.remove(); over = false; });   
                                });
					        });
                    
					        $(obj).bind('mousedown', function() {
						        tooltip.widget.animate({
							        'opacity' : 0
						        }, function() { tooltip.widget.remove(); over = false; });   
					        });
                        }).mousedown(function() {
                            tooltip.widget.remove();
                        });
					break;

				case "click":
                    $(obj).click(function() {
                        display_tooltip(obj, tooltip_text);
                        return false;
                    }).hover(function() {
                    	setTimeout(function() {
						    tooltip.widget.animate({
							    'opacity' : 0
						    }, 500, function() { tooltip.widget.remove(); });
					    }, tooltip.settings.displayTime);
                    });
					break;

			}
		}
		var display_tooltip = function(obj, tooltip_text) {
        
            if ($(obj.parents('.myfilters').find('#manage-filters:animated')).size() > 0) {
                $.doTimeout('hoverOut', true);
                return;
            }

            over = true;
			var t = $('<div>');
			t.addClass('tai-tooltip');

			var t_content = $('<div>').addClass('tai-tooltip-content').html(tooltip_text).appendTo(t);
			var a = $('<div>').addClass('tai-tooltip-arrow');
			switch (tooltip.settings.position) {
				case 'bottomLeft':
				case 'bottomRight':
					t.find('.tai-tooltip-content').before(a);
					a.addClass('tai-tooltip-arrow-bottom').html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
					break;
				case 'topLeft':
				case 'topRight':
					a.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
					t.append(a);
					break;
			}

            if ($('.tai-tooltip')) $('.tai-tooltip').remove();

			$('body').append(t);

			var p = calculate_position(obj, t, tooltip.settings);
			t.css({
				'top' : p.callerTopPosition,
				'left' : p.callerLeftPosition,
				'marginTop' : p.marginTopSize,
				'opacity' : 0
			})

			t.animate({
				'opacity' : 0.87
			});

            tooltip.widget = t;
		}
		var calculate_position = function(obj, tooltip, options) {
			var promptTopPosition, promptleftPosition, marginTopSize;
			var fieldWidth = obj.width();
			var promptHeight = tooltip.height();

			var offset = obj.offset();
			promptTopPosition = offset.top;
			promptleftPosition = offset.left;
			marginTopSize = 0;

			switch (options.position) {

				default:
				case "topRight":
					promptleftPosition += fieldWidth - 30;
					promptTopPosition += -promptHeight - 2;
					break;
				case "topLeft":
					promptTopPosition += -promptHeight - 10;
					break;
				case "centerRight":
					promptleftPosition += fieldWidth + 13;
					break;
				case "bottomLeft":
					promptTopPosition = promptTopPosition + field.height() + 15;
					break;
				case "bottomRight":
					promptleftPosition += fieldWidth - 30;
					promptTopPosition += field.height() + 5;
			}

			return {
				"callerTopPosition" : promptTopPosition + "px",
				"callerLeftPosition" : promptleftPosition + "px",
				"marginTopSize" : marginTopSize + "px"
			};
		}
		init();
	}
})(jQuery);

