// XFlash Processor
// acopla com swfobject 2.0

var XFlash =
{
	factory: new Object(),
	
	flashVersion: "8.0.0",
	
	cache: true,
	
	apply: function (context, callback)
	{
		var elements = context[0] == null ? $("*.xf") : $("*.xf", context[0]);
		var elData;
		var r;
		for (var k = 0; k < elements.length; k++)
		{
			elData = XFlash.getParams( elements[k] );
			r = XFlash.factory[elData.type](elData);

			if ( r != null )
				XFlash.render( r, elData.element, k );
				
			k == elements.length -1 && typeof callback == "function" && callback();			
		}
	},

	render: function ( recipe, targetOld, k )
	{
		setTimeout(function(){
			target = $( "<span></span>" ).appendTo( $( targetOld ).empty() ).html( targetOld.innerHTML );
			
			var dimensions = recipe.width != null
				? {
					w: recipe.width,
					h: recipe.height
				}
				: {
					w: target.width(),
					h: target.height()
				};
			
			target[ 0 ].id = target[0].id == "" ? "_replace" + new Date().getTime() + k : target[0].id;
			recipe.wmode = "transparent";
			
			swfobject.embedSWF(
			   recipe.src + ( XFlash.cache ? "" : "?" + new Date().getTime()), 
			   target[0].id, 
			   dimensions.w, 
			   dimensions.h,
			   XFlash.flashVersion,
			   false,
			   recipe.flashvars, 
			   recipe.params
			);
			
			$( targetOld ).addClass( "XFlashaAplied" );
			recipe.flashvars.mascara && $( "<div class='over' style='height:" + dimensions.h + "px'></div>" ).appendTo( targetOld );
		}, 5);
	},

	getParams: function ( el )
	{
		var params = el.className;
		params = params.substr( params.indexOf("xf ") + 3 ).split(" ");

		var ret	= new XFlash.ElementData( el, params );
		return ret;
	},
	
	ElementData: function ( el, params )
	{
		this.element = el;
		this.type = params[0];
		this.params = params.slice(1);
	},
	
	addFactory: function ( name, fnProcessor )
	{
		XFlash.factory[name] = fnProcessor;
	}
}
