/*-------------------------------------------------------------------------------
        A Better jQuery Tooltip
        Version 1.0
        By Jon Cazier
        jon@3nhanced.com
        01.22.08
-------------------------------------------------------------------------------*/

$.fn.betterTooltip = function(options){
        
        /* Setup the options for the tooltip that can be 
           accessed from outside the plugin              */
        var defaults = {
                speed: 200,
                delay: 200
        };
        
        var options = $.extend(defaults, options);
        
        /* Create a function that builds the tooltip 
           markup. Then, prepend the tooltip to the body */
        getTip = function() {
                var tTip = 
                        "<div class='tip'>" +
                                "<div class='tipMid'>"        +
                                "</div>" +
                                "<div class='tipBtm'></div>" +
                        "</div>";
                return tTip;
        }
        $("body").prepend(getTip());
        
        /* Give each item with the class associated with 
           the plugin the ability to call the tooltip    */
        $(this).each(function(){
                
                var $this = $(this);
                var tip = $('.tip');
                var tipInner = $('.tip .tipMid');
                
                var tTitle = (this.title);
                this.title = "";
                
                var offset = $(this).offset();
                var tLeft = offset.left;
                var tTop = offset.top;
                var tWidth = $this.width();
                var tHeight = $this.height();
                
                /* Mouse over and out functions*/
                $this.hover(
                        function() {
                                tipInner.html(tTitle);
                                setTip(tTop, tLeft);
                                setTimer();
                        }, 
                        function() {
                                stopTimer();
                                tip.hide();
                        }
                );                   
                
                /* Delay the fade-in animation of the tooltip */
                setTimer = function() {
                        $this.showTipTimer = setInterval("showTip()", defaults.delay);
                }
                
                stopTimer = function() {
                        clearInterval($this.showTipTimer);
                }
                
                /* Position the tooltip relative to the class 
                   associated with the tooltip                */
                setTip = function(top, left){
                        var topOffset = tip.height();
                        var xTip = (left-30)+"px";
                        var yTip = (top-topOffset+20)+"px";
                        tip.css({'top' : yTip, 'left' : xTip});
                }
                
                /* This function stops the timer and creates the
                   fade-in animation                          */
                showTip = function(){
                        stopTimer();
                        tip.animate({"top": "+=20px", "opacity": "toggle"}, defaults.speed);
                }
        });
};
