(function ()
{
	var $$;
	
	$$ = jQuery.fn.ftr = function (font, userOptions)
	{	
		if (!font)
			return false;
			
		var options = {}; 
		for (var i in $$.options) options[i] = $$.options[i];
		for (var i in userOptions) options[i] = userOptions[i];
		
		$(this).flash(
			{
				src: options.path+font
			},
			{
				version: options.version,
				update: false
			},
			function (htmlOptions)
			{
				
				// Size
				htmlOptions.height = options.width || $(this).height();
				htmlOptions.width = options.height || $(this).width();				
				htmlOptions.flashvars.w = htmlOptions.width;
				htmlOptions.flashvars.h = htmlOptions.height;
				if (options.width) htmlOptions.flashvars.forceWidth = true;
				if (options.height) htmlOptions.flashvars.forceHeight = true;
				// Color && Wmode
				htmlOptions.bgcolor = options.background;
				htmlOptions.wmode = options.wmode;
				
				// Id
				$$.replacedElements++;
				htmlOptions.id = options.id + "-flash-" + $$.replacedElements;
				// Text
				htmlOptions.flashvars.txt = this.innerHTML;
				// Styles
				htmlOptions.flashvars.size = options.size || $(this).css("font-size");
				htmlOptions.flashvars.color = options.color || $$.rgbToHex($(this).css("color"));
				htmlOptions.flashvars.leading = options.leading || $(this).css("line-height");
				htmlOptions.flashvars.transform = options.transform || $(this).css("text-transform");
				htmlOptions.flashvars.multiline = options.multiline;
				
				htmlOptions.flashvars.topOffset = options.topOffset || 0;
				htmlOptions.flashvars.leftOffset = options.leftOffset || 0;
				htmlOptions.flashvars.extendWidth = options.extendWidth || 0;
				htmlOptions.flashvars.extendHeight = options.extendHeight || 0;
				//console.log(['flash',htmlOptions.width,htmlOptions.height,htmlOptions.id ])
				
				// Callback
				htmlOptions.flashvars.callbackHandler = "$.fn.ftr.fit";
				htmlOptions.flashvars.callbackId = htmlOptions.id;
				htmlOptions.allowScriptAccess ="always";
				// Alternative
				this.innerHTML = '<span>'+this.innerHTML+'</span>';
				var $alt = $(this.firstChild);
				// Hide alt
				$alt.hide().addClass("alt")
				
				// Do flash
				$(this)
					.addClass(options.id)
					.prepend($.fn.flash.transform(htmlOptions));
			}
		)
	}
	
	$$.fit = function (id,w,h)
	{
		//console.log(['fit',id.width,w,h])
		
		$("#"+id)
			.attr("width",w)
			.attr("height",h);
	//	return true;
		
//	$("#"+id).parent().css('border','1px solid red');
	}
	
	$$.defaults = function (options)
	{
		$$.options = jQuery.extend($$.options, options);
	}
	
	$$.rgbToHex = function (rgb)
	{/*
		var re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;
		var bits = re.exec(rgb);
		var r = parseInt(bits[1]).toString(16);
		var g = parseInt(bits[2]).toString(16);
		var b = parseInt(bits[3]).toString(16);
		if (r.length == 1) r = '0' + r;
		if (g.length == 1) g = '0' + g;
		if (b.length == 1) b = '0' + b;
		return '#' + r + g + b;*/
	}
	
	$$.replacedElements = 0;

	$$.options = {
		multiline: false,
		path: "",
		version: 8,
		background: "#ffffff",
		wmode: "transparent",
		id: "ftr-replaced"
	}
})();