(function($)
{
	var methods =
	{
		init: function(_obj, _swfOptions, _settings)
		{
			if(_settings.version != null)
			{
				if(!He.Components.FlashObject.TestVersion(_settings.version))
				{
					if(He.IsFunction(_settings.versionCb))
					{
						_settings.versionCb();
					}
					
					return false;
				}
			}
			
			if(He.IsUndefined(_swfOptions.flashvars))
			{
				_swfOptions.flashvars = {};
			}

			_swfOptions.flashvars.debug = He.Components.FlashObject.IsDebug();
			
			var _flashObject = He.Components.FlashObject.BuildMovie(_swfOptions);
			
			$(_obj).html(_flashObject);
		}
	};
	
    $.fn.flash = function(_swfOptions, _pluginOptions)
	{

		var _settings =
		{
			printCode	: true,
			update		: false,
			version		: null,
			versionCb	: He.Application.PopupNoFlash
		};


		return this.each(function()
		{			
			if(_pluginOptions)
			{ 
				$.extend(_settings, _pluginOptions);
			}

			if(typeof _swfOptions === 'object')
			{
				methods.init(this, _swfOptions, _settings );

				return this;
			}
		});
	};
	
})(jQuery);


He.Bootstrap('He.Components.FlashObject');

He.Components.FlashObject = 
{
	GetVersion: function()
	{
		// ie
		try
		{
			try
			{
				// avoid fp6 minor version lookup issues
				// see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
				var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
				try
				{
					axo.AllowScriptAccess = 'always';
				}
				catch(e)
				{
					return '6,0,0';
				}
			} 
			catch(e) {}
			
			return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
		// other browsers
		}
		catch(e)
		{
			try
			{
				if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)
				{
					return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
				}
			}
			catch(e) {}
		}
		return '0,0,0';
	},
	
	IsFullVersion: function(s)
	{
		return s.length>0 && !(/[^0-9,]/).test(s) && (/\,\d/).test(s);
	},

	TestVersion: function(_target)
	{
		var _version = He.Components.FlashObject.GetVersion();

		if(He.Components.FlashObject.IsFullVersion(_target))
		{
			// Check full version
			var _flashVersion	= _version.split(',');
			var _targetVersion	= _target.split(',');
			
			var _version_majorVersion	= parseInt(_flashVersion[0]);
			var _version_minorVersion	= parseInt(_flashVersion[1]);
			var _version_buildNumber	= parseInt(_flashVersion[2]);
			
			var _target_majorVersion	= parseInt(_targetVersion[0]);
			var _target_minorVersion	= parseInt(_targetVersion[1]);
			var _target_buildNumber		= parseInt(_targetVersion[2]);
			
			if(
			   (_version_majorVersion > _target_majorVersion) || 
			   ((_version_majorVersion == _target_majorVersion) && (_version_minorVersion > _target_minorVersion) ) || 
			   ((_version_majorVersion == _target_majorVersion) && (_version_minorVersion == _target_minorVersion) && (_version_buildNumber >= _target_buildNumber))
			  )
			{
				return true;
			}
			else
			{
				return false;
			}
			
		}
		else
		{
			// Check Major version only
			var _flashVersion = _version.split(',').shift();
			
			return (_flashVersion <= _target) ? false : true;
		}
	},
	
	BuildMovie: function(_params)
	{	
		var _flashObject = '';
		_flashObject += '<object type="application/x-shockwave-flash" data="' + _params.src + '" width="' + _params.width + '" height="' + _params.height + '"';
		
		if(!He.IsUndefined(_params.id))
		{		
			_flashObject += ' id="' + _params.id + '"';
		}
		
		_flashObject += '>';
		_flashObject += '<param name="movie" value="' + _params.src + '" />';
		_flashObject += '<param name="menu" value="false" />';
		_flashObject += '<param name="quality" value="high" />';
		
		if(!He.IsUndefined(_params.wmode) && _params.wmode != '')
		{
			_flashObject += '<param name="wmode" value="' + _params.wmode + '" />';
		}
		
		if(!He.IsUndefined(_params.allowScriptAccess) && _params.allowScriptAccess != '')
		{
			_flashObject += '<param name = "allowScriptAccess" value = "' + _params.allowScriptAccess + '" />';
		}
		
		if(!He.IsUndefined(_params.background) && _params.background != '')
		{
			_flashObject += '<param name = "background" value = "' + _params.background + '" />';
		}
		
		if(!He.IsUndefined(_params.allowFullScreen) && _params.allowFullScreen != '')
		{
			_flashObject += '<param name = "allowFullScreen" value = "' + _params.allowFullScreen + '" />';
		}

		var _flashvarsStr = '';

		if(!He.IsUndefined(_params.flashvars) && He.IsObject(_params.flashvars))
		{			
			for(var index in _params.flashvars)
			{
				_flashvarsStr += index + "=" + _params.flashvars[index] + "&amp;";
			}
			
			_flashObject += '<param name="flashvars" value="' + _flashvarsStr + '">';
		}
		
		_flashObject += '</object>';

		return _flashObject;
	},
	
	// Stole from swfObject
	GetObjectById: function(objectIdStr)
	{
		var r = null;
		var o = document.getElementById(objectIdStr);
		if (o && o.nodeName == "OBJECT")
		{
			if(typeof o.SetVariable != "undefined")
			{
				r = o;
			}
			else
			{
				var n = o.getElementsByTagName(OBJECT)[0];
				if(n)
				{
					r = n;
				}
			}
		}
		return r;
    },
	
	// search "flashdebug" in the URL to add debug flashvar
	IsDebug: function()
	{
		if(document.location.search != '')
		{
			var params		= document.location.search.split('&');
			var nb_params	= params.length;
			
			for(i = 0; i < nb_params; i++)
			{
				var element		= params[i].replace('?','');				
				var variable	= element.split("=")[0];
				var value		= element.split("=")[1];
				
				if(variable == 'flashdebug' && value == 'true')
				{
					return 'true';
				}
			};	
		}
		
		return 'false';
	},
	
	DisplayMovie: function(_selector, _targetVersion, _params)
	{
		if(He.Components.FlashObject.TestVersion(_targetVersion))
		{
			if(He.IsUndefined(_params.flashvars))
			{
				_params.flashvars = {};
			}
	
			_params.flashvars.debug = He.Components.FlashObject.IsDebug();

			var _flashObject	= He.Components.FlashObject.BuildMovie(_params);

			if(_selector == '')
			{
				return _flashObject;
			}
			else
			{
				$(_selector).html(_flashObject);
			}
		}
		else
		{
			if(!He.Application.Config.IBrowser)
			{
				He.Application.PopupNoFlash();	
			}
		}
	}
}
