﻿/*trigger function for hover over
the hover popup div is always the NEXT SIBLING to the div you hover over

*/

var JqvPopUpAnyShown = false;

$(function() {
    $('.JqvPopUpTrigger').each(function() {

        // options
        var distance = 25;
        var time = 150;

        //this needs to be at least 200 or else the popup
        //disappears too quick
        var hideDelay = 200;

        var hideDelayTimer = null;

        // tracker
        var beingShown = false;
        var shown = false;

        var trigger = $($(this), this);
        var popup = $($(this).next(), this).css('opacity', 0);
        var popupClose = $(this).next().find(' > div.JqvPopUpClose');

        popupClose.click(function() {
            shown = false;
            popup.css('display', 'none');
        });

        //alert(trigger.get(0) + " " + popup.get(0));
        //alert(popup.get(0));

        $([trigger.get(0)]).hoverIntent(function() {
            //goAlert(); //debug

            // stops the hide event so the pop stays open while your over it
            if (hideDelayTimer) { clearTimeout(hideDelayTimer); }

            // don't trigger the animation again if we're being shown, or already visible
            if (beingShown || shown || JqvPopUpAnyShown) {
                return;
            }
            else {
                beingShown = true;
                // reset position of popup box
                popup.css({
                    top: trigger.position().top + 20,
                    left: trigger.position().left + trigger.width(),
                    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;
                    JqvPopUpAnyShown = true;
                });
            }
        }, function() {

            // reset the timer if we get fired again - avoids double animations
            if (hideDelayTimer) clearTimeout(hideDelayTimer);

        });

        $([popup.get(0)]).hover(function() {
            //goAlert(); //debug

            // stops the hide event so the pop stays open while your over it
            if (hideDelayTimer) { clearTimeout(hideDelayTimer); }

            // don't trigger the animation again if we're being shown, or already visible
            if (beingShown || shown || JqvPopUpAnyShown) {
                return;
            }
            else {
                beingShown = true;
                // reset position of popup box
                popup.css({
                    top: trigger.position().top + 20,
                    left: trigger.position().left + trigger.width(),
                    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;
                    JqvPopUpAnyShown = true;
                });
            }
        }, 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');
                    JqvPopUpAnyShown = false;
                });
            }, hideDelay);
        });

    });
});


