var tooltip_div;
var tooltip_content;
var tooltip_fadable = 0;
var toolarea_fadable = 0;
var mouseX;
var mouseY;

$(document).ready( function (){
    $(document).mousemove(function(e){
        mouseX = e.pageX;
        mouseY = e.pageY;
        if ( (tooltip_fadable == 1) && (toolarea_fadable == 0) ){
            tooltip_position();
        }
    }); 

    tooltip_fader = function () {
        if ( (tooltip_fadable == 0) && (toolarea_fadable == 0) ){
            $('#floatingTooltip').fadeOut('slow');
        }
        else {
            setTimeout('tooltip_fader()', 200);
        }
    }
    
    tooltip_register = function () {
        $('#floatingTooltip').hover(
            function () {
                toolarea_fadable = 1;
            },
            function () {
                toolarea_fadable = 0;
            }
        )
    }

    tooltip_position = function () {
        var browser_width = $(window).width();
        var browser_height = $(window).height();

        var browser_offsetX = $(window).scrollLeft();
        var browser_offsetY = $(window).scrollTop();
                
        var tooltip_width = $('#floatingTooltip').width();
        var tooltip_height = $('#floatingTooltip').height();
                
        var top = (mouseY +5);
        var left = (mouseX +5);
                
        var maxleft = (browser_width+browser_offsetX) - (tooltip_width+12);
        var maxtop = (browser_height+browser_offsetY) - (tooltip_height+12);
                
        left = (left > maxleft) ? maxleft : left;
        top = (top > maxtop) ? maxtop : top;
        left = (left > 0) ? left : 0;
        top = (top > 0) ? top : 0;

        $('#floatingTooltip').css('top',top);
        $('#floatingTooltip').css('left',left);
    }

    $('.tooltip').hover(
        function (e) {
            tooltip_fadable = 1;
            
            if (!tooltip_div) {
                tooltip_div = document.createElement('div');
                tooltip_div.setAttribute('id','floatingTooltip');
                document.body.appendChild(tooltip_div);
                $('#floatingTooltip').addClass('floatingTooltip');
                tooltip_register();
            }

            tooltip_fader();
 
            if ( $(this).attr('tooltip_url') == tooltip_content ){
                mouseX = e.pageX;
                mouseY = e.pageY;
                tooltip_position();
            }
            else {
                $.ajax({
                    url: $(this).attr('tooltip_url'),
                    type: 'POST',
                    dataType: 'html',
                    success: function(result){
                        tooltip_content = $(this).attr('tooltip_url');
                        $('#floatingTooltip').html (result);
                        if (tooltip_fadable == 1){
                            tooltip_position();
                            $('#floatingTooltip').fadeIn('fast');
                        }
                    }
                });
            }
        },
        function () {
            tooltip_fadable = 0;
        }
    );
});
