/**
 * @author Remy Sharp
 * @date 2008-03-27
 * @url http://jqueryfordesigners.com/coda-popup-bubbles/
 * @license Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
 *
 * See URL for markup examples and screencast
 */
(function($) {
    $.fn.popup = function(options) {
        var defaults = {
            'trigger'        : '.trigger',
            'popup'          : '.popup',
            'positionTrigger': '.trigger.position',
            'distance'       : 0,
            'hideDelay'      : 200,
            'onHover'        : function() { /* dummy */ }
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            var hideDelayTimer = null;
            var showDelayTimer = null;
            
            var trigger = $(settings.trigger, this);
            var positionTrigger = $(settings.positionTrigger, this)
            var popup = $(settings.popup, this);
            var programId = $(this).attr('id').substr( 7 );            
            	
            $($.merge(trigger.get(), [popup.get(0)])).mouseover(function() {

                if (hideDelayTimer) {
                    clearTimeout(hideDelayTimer);
                }
                if (showDelayTimer) {
                    clearTimeout(showDelayTimer);
                }

                showDelayTimer = setTimeout(function() {
                    showDelayTimer = null;
                    if (popup.css('visibility') == 'visible') { //popup.is(':visible')) {
                        return;
                    } else {
                    	
                    	settings.onHover( programId );
                    	
                    	var isRecording = !$('#pid' + programId ).hasClass("incomplete");
                        
                        // Add poster
                        if( $('img', popup ).length == 0 ) {
                        	poster = $( '.poster', popup );
                        	if ( isRecording ) {
                        		imgsrc = poster.text();
                        		poster.html( '<img src="' + imgsrc + '" />');
                        		poster.show();
                        	}
                        	else {
                        		poster.hide();                        		
                        	}                        	
                        }
                        
                    	// Calculate position for popup                        
                    	var triggerPosition = positionTrigger.position();
                    	var top = triggerPosition.top;
                    	var left = triggerPosition.left;
                        var width = popup.width();
                        var height = popup.height();
                    	
                        var windowScrollTop = $(window).scrollTop();
                        var windowScrollLeft = $(window).scrollLeft();
                        var windowHeight = $(window).height();
                        var windowWidth = $(window).width();
                        var windowScrollBottom = windowScrollTop + windowHeight
                        var windowScrollRight = windowScrollLeft + windowWidth
                        
                        // Incase popup is show upwards, move title to the bottom to ensure double clicking
                        // will start the program
                        var title = $( 'div.titleContainer', popup );
                        title.css('width', $('#pid' + programId ).width() + 'px' );
                        if( top + height > windowScrollBottom ) {  
                        	title.css('width', $('#pid' + programId ).width() + 'px' );
                        	popup.append( title );
                        	top -= popup.height() - title.outerHeight();
                        }
                    	
                        // Incase popup goes outside to the right, move it left but leave the title in the
                        // same place                        
                        if( left + width > windowScrollRight ) {
                        	left -= popup.width() - title.outerWidth();	                        	
                        	title.css('margin-left', (popup.width() - title.outerWidth()) + 'px');
                        }
                        
                    	// Show popup
                        popup.css({
                            visibility: 'visible',
                            top: top,
                            left: left
                        });
                        
                        // Add shadow
                        popup.dropShadow({
                            blur: 0,
                            opacity: 0.25
                        });
                        
                    }
                }, settings.hideDelay);

            }).mouseout(function() {
                if (hideDelayTimer) {
                    clearTimeout(hideDelayTimer);
                }
                if (showDelayTimer) {
                    clearTimeout(showDelayTimer);
                }

                hideDelayTimer = setTimeout(function() {
                    hideDelayTimer = null;
                    popup.css('visibility', 'hidden');
                    popup.removeShadow();
                    
                    // Incase the title was moved to the bottom then move it back up
                    var firstDiv = $( 'div:first', popup );
                    if( !firstDiv.hasClass('titleContainer') )
                    	var title = $( 'div.titleContainer', popup );
                		popup.prepend( title );
                    
                }, settings.hideDelay);
                
                
            });
        });
    };
})(jQuery);
