﻿
(function(jQuery) {



    var self = null;



    jQuery.fn.tnpopup = function(o) {

        return this.each(function() {

            new jQuery.tnpopup(this, o);

        });

    };



    jQuery.tnpopup = function(e, o) {

        this.options = o || {};

        this.textarea = jQuery(e);

        var offset = o.offset;

        // options
        var distance = 10;
        var time = 250;
        var hideDelay = 500;

        var hideDelayTimer = null;

        // tracker
        var beingShown = false;
        var shown = false;

        var trigger = $('.trigger', e);
        var popup = $('.popup', e).css('opacity', 0);

        var pos = findPos(e);


        // set the mouseover and mouseout on both element
        $([trigger.get(0), popup.get(0)]).mouseover(function() {
            // stops the hide event if we move from the trigger to the popup element
            if (hideDelayTimer) clearTimeout(hideDelayTimer);

            // don't trigger the animation again if we're being shown, or already visible
            if (beingShown || shown) {
                return;
            } else {
                beingShown = true;

                // reset position of popup box
                popup.css({
                    top: (pos.y) + "px",
                    left: (pos.x + offset) + "px",
                    display: 'block' // brings the popup back in to view
                })

                // (we're using chaining on the popup) now animate it's opacity and position
        .animate({
            top: '-=' + distance + 'px',
            opacity: 1
        }, time, 'swing', function() {
            // once the animation is complete, set the tracker variables
            beingShown = false;
            shown = true;
        });
            }
        }).mouseout(function() {
            // reset the timer if we get fired again - avoids double animations
            if (hideDelayTimer) clearTimeout(hideDelayTimer);

            // store the timer so that it can be cleared in the mouseover if required
            hideDelayTimer = setTimeout(function() {
                hideDelayTimer = null;
                popup.animate({
                    top: '-=' + distance + 'px',
                    opacity: 0
                }, time, 'swing', function() {
                    // once the animate is complete, set the tracker variables
                    shown = false;
                    // hide the popup entirely after the effect (opacity alone doesn't do the job)
                    popup.css('display', 'none');
                });
            }, hideDelay);
        });


    };


    jQuery.tnpopup.fn = jQuery.tnpopup.prototype = {

        tnpopup: '1.2.2'

    };



    jQuery.tnpopup.fn.extend = jQuery.tnpopup.extend = jQuery.extend;



    jQuery.tnpopup.fn.extend({

        init: function() {

        }




    });

})(jQuery);



function findPos(obj) {
    var curleft = obj.offsetLeft || 0;
    var curtop = obj.offsetTop || 0;
    while (obj = obj.offsetParent) {
        curleft += obj.offsetLeft
        curtop += obj.offsetTop
    }
    return { x: curleft, y: curtop };
}
