/*
 * flash 1.0 - Plugin for jQuery
 * 
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Depends:
 *   jquery.js
 *
 *  Copyright (c) 2008 Oleg Slobodskoi (ajaxsoft.de)
 */

;(function($){


	$.fn.extend({
		flash: function( params, attr ) {
            
            if ( params && params.version && !detectVersion ( params.version ) ) return;
            
			var	args = Array.prototype.slice.call(arguments, 1);
        
			return this.each(function() {
				var method = (typeof options == 'string') ? options : 'init',
					flash = $.data(this, 'flash') || $.data( this, 'flash', new $.flash(this, params, attr));
				flash[method].apply(flash, args);
			});
	

		}
	});

	$.flash = function (elem, parameters, attributes )
	{
	
        //defaults
        
        var params = {
            allowfullscreen: true,
            allowscriptaccess: 'always',
            quality: 'best',
            wmode: 'transparent',
            bgcolor: null,
            flashvars: {},
            menu: false,
            version: null
        };
        $.extend(params, parameters);
                
        var attr = {
            width: '100%',
            height: '100%',
            type: 'application/x-shockwave-flash',
            src: null
        };
        $.extend(attr, attributes);

		var pluginspage = 'http://www.adobe.com/go/getflashplayer',
            version = params.version,
            $elem = $(elem),
            $flash
		;
			
		this.init = function ()
		{
            //ie needs movie param to load the flash source
            if ($.browser.msie) params.movie = attr.src;

            //we don't need version as param attribute
            params.version = null;
            
            //serialize flashvars if object is given
            if (typeof params.flashvars == 'object') {
                var str = '';
                $.each(params.flashvars, function(name, val){
                    str += name + '=' + val + '&';
                });
                params.flashvars = str;
            };

            
            var str = '';
            if ( $.browser.msie)
            {
                //create param elements
                $.each(params, function(name,val){
                    if ( val ) str+='<param name="'+name+'" value="'+val+'"/>';
                });
                $flash = $('<object>'+str+'</object>');
            } else 
            {
                //create param elements
                $.each(params, function(name,val){
                    if ( val ) str+=name+'="'+val+'" ';
                });
                $flash = $('<embed '+str+'/>');
            };
            $elem.html($flash.attr(attr));                
                
		};

  
	};
    
    function detectVersion ( v )
    {
        var descr, pv, maxVersion = 10;
        
        //thats NS, Mozilla, Firefox        
        if (typeof navigator.plugins['Shockwave Flash'] == 'object') {
            descr = navigator.plugins['Shockwave Flash'].description;
            descr = descr.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
            pv = [
                descr.replace(/^(.*)\..*$/, "$1"),
                descr.replace(/^.*\.(.*)\s.*$/, "$1"),
                /r/.test(descr) ? descr.replace(/^.*r(.*)$/, "$1") : 0
            ];
        }
            
        //thats IE
        else if ( typeof ActiveXObject == 'function')
        {
            var ao;
            for(var i = maxVersion; i >= 2; i--)
            {
                try {
                    ao = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);
                    if ( typeof ao == 'object' ) {
                        descr = ao.GetVariable('$version'); 
                        break;
                    };
               } catch(e){};
            };
            
            pv = descr.split(' ')[1].split(',');
        };
       

        
        if ( !pv && v ) return false;
                    
        function toInt (arr) {    
           return $.map(arr, function(n, i){
              return parseInt(n,10);
            });
        };

        v = toInt( v.split('.') );
        pv = toInt( pv );

		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
        
                
    };


})(jQuery);		
