(function($){

	$.fn.text2image = function(settings, options) {
		var BASE_URL = "http://tools.vezea.net/cssimage";
		var FADE_OUT = 100;
		var FADE_IN  = 500;
		var FADE     = true;
		//var SIZE_ADJ = 1.4;
		var SIZE_ADJ = 1;
		var ADD_SPAN = true;

		options = options || {};

		this.each(function(){
			var $this = $(this);

			//
			// Get text content.
			//
			var content = $this.text().replace(/^\s*/, '').replace(/\s*$/, '').replace(/\s*\n\s*/g, ' ');

			if ($this.get(0).tagName == "A" && $.browser.msie && $.browser.version == 7) {
				$this.click(function(){
					window.location = $(this).attr("href");
				});
			}

			//
			// Get rendered CSS settings.
			//
			var css = {
				fontSize:      $this.css("font-size"),
				fontFamily:    $this.css("font-family"),
				fontStyle:     $this.css("font-style"),
				fontWeight:    $this.css("font-weight"),
				lineHeight:    $this.css("line-height"),
				color:         $this.css("color"),
				background:    "transparent",
				letterSpacing: $this.css("letter-spacing"),
				content:       content
			};

			//alert(content + ":" + css.fontSize + "/" + css.lineHeight);

			//
			// Adjust font size to match common browser rendering.
			//
			if (SIZE_ADJ != 1) {
				css.fontSize = Math.round(parseFloat(css.fontSize.replace("px", "")) * SIZE_ADJ, 2) + "px";
			}

			//
			// Extend (override) with parameterized settings.
			//
			if (settings) $.extend(css, settings);

			/*
			if ($.browser.msie && parseInt($.browser.version) < 7) {
				css.type = "gif";
			}
			*/

			//
			// Build URL.
			//
			var params = [];
			for (var prop in css) params.push(escape(prop) + "=" + escape(css[prop]));
			var imageURL = BASE_URL + (params.length ? "?" + params.join("&") : "");


			//
			// Wrap inner contents in placeholder span.
			//
			if (ADD_SPAN) $this.wrapInner('<span class="text-image"/>');
			var $container = ADD_SPAN ? $this.find(">span") : $this;

			//
			// Create new image.
			//
			var image = new Image();
			image.onload = function(){
				if (FADE) {
					var $container = ADD_SPAN ? $this.find(">span") : $this;
					$container.fadeOut({
						duration: FADE_OUT,
						complete: function(){
							// Create image.
							var $img = $("<img/>").attr({
								src: image.src,
								alt: content
							});
							// Replace container content with loaded image.
							$container.empty().append($img).css({visibility:"visible"}).fadeIn(FADE_IN);
						}
					});
				} else {
					var $container = ADD_SPAN ? $this.find(">span") : $this;
					var $img = $("<img/>").attr({
						src: image.src,
						alt: $this.text()
					}).css({
						//display: "block"
					});
					$container.empty().append($img).css({visibility:"visible"});
				}
			};
			$container.css({visibility:"hidden"});
			image.src = imageURL;

		});

		return this;
	};
	$.fn.text2image.getCSS = function(name) {
		return 42;
	};

})(jQuery);
