(function() {
    
    $.fn.asyncVideo = function(settings) {
        
        var self = this;
        
        settings = jQuery.extend({
            swfPath: '',
            videoPath: '',
            containerCss: {},
            parent: null,
            extraClass: ''
        }, settings);
        
        return self.each(function() {
            
            var videoId = 'asyncvideo';
            var $container = $('<div>');
            var $video = $('<div>');
            var $close = $('<a>');
            var $parent = (settings.parent) ? settings.parent : $('body');
            var flashvars, params, attributes;
            
            $video
                .addClass('asyncvideo-video')
                .attr('id', videoId)
                ;
            
            $close
                .addClass('asyncvideo-close')
                .attr('href', '#')
                .attr('title', settings.res.back)
                .html(settings.res.back)
                ;
            
            $container
                .css({
                    display: 'none',
                    backgroundColor: 'pink'
                })
                .css(settings.containerCss)
                .addClass('asyncvideo-container')
                .addClass(settings.extraClass)
                .append($video)
                .append($close)
                .appendTo($parent)
                ;
            
            flashvars = {
                videoPath: settings.videoPath
            };
            params = {
                quality: 'high',
                align: 'middle',
                scale: 'noscale',
                wmode: 'transparent',
                backgroundColor: 'transparent',
                allowScriptAccess: 'sameDomain',
                allowFullScreen: true
            };
            attributes = {
                
            };
            
            $container
                .fadeIn(500, function(){
                    
                    swfobject.embedSWF(settings.swfPath, videoId, '100%', '100%', '9.0.0', false, flashvars, params, attributes);
                    
                })
                ;
            
            $close
                .click(function(e){
                    e.preventDefault();
                    
                    $video
                        .remove()
                        ;
                    
                    $container
                        .queue('fx', [])
                        .fadeOut(500, function(){
                            
                            $container
                                .remove()
                                ;
                            
                        })
                        ;
                    
                })
                ;
            
            return;
            $container.fadeIn(500, function() {
                
                
                
                fo.divId = 'video';

                fo.addParam('quality', 'high');
                fo.addParam('align', 'middle');
                fo.addParam('scale', 'noscale');
                fo.addParam('wmode', 'opaque');
                fo.addParam('salign', '');
                fo.addParam('allowScriptAccess', 'sameDomain');
                fo.addParam('allowFullScreen', 'true');

                fo.addVariable('videoPath', videoPath);

                hVars = location.hash.replace('#', '').split('&'); for (var i = 0; i < hVars.length; i++) { fo.addVariable(hVars[i].split('=')[0], hVars[i].split('=')[1]); }
                fo.write('video');
                fo.SetReturnValue = function() { return; }
                var foo = document.getElementById('foo');

                // bind close click
                container.find('a.close-video').click(function(e) {
                    e.preventDefault();

                    $('#video').remove();

                    container.fadeOut(500, function() {

                        $(this).remove();

                    });

                });

            });

            return this;
        });
    };

})(jQuery);