/* Created by Martin Hintzmann 2008 martin [a] hintzmann.dk

 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.

 *

 * Version: 0.2

 * Requires: jQuery 1.2+

 * http://plugins.jquery.com/project/textshadow

 *

 */

(function($) {

	$.fn.textShadow = function(option) {

		if (!$.browser.msie) return;

		var IE6 = $.browser.version < 7;

		return this.each(function() {

			var el = $(this);

			var shadow = el.textShadowParse(this.currentStyle["text-shadow"]);

			shadow = $.extend(shadow, option);



			el.textShadowRemove();



			if (shadow.x == 0 && shadow.y == 0 && shadow.radius == 0) return;



			if (el.css("position")=="static") {

				el.css({position:"relative"});

			}

			el.css({zIndex:"0"});

			if (IE6) {

				el.css({zoom:"1"});

			}

			

			var span=document.createElement("span");

			$(span).addClass("jQueryTextShadow");

			$(span).html(el.html());

			$(span).css({

				padding:		this.currentStyle["padding"],	

				width:		el.width(),

				position:	"absolute",

				zIndex:		"-1",

				color:		shadow.color!=null?shadow.color:el.css("color"),

				left:			(-parseInt(shadow.radius)+parseInt(shadow.x))+"px",

				top:			(-parseInt(shadow.radius)+parseInt(shadow.y))+"px"

			});

			

			if (shadow.radius != 0) {

				if (shadow.opacity != null) {

					$(span).css("filter", "progid:DXImageTransform.Microsoft.Blur(pixelradius="+parseInt(shadow.radius)+", enabled='true', makeShadow='true', ShadowOpacity="+shadow.opacity+")");

				} else {

					$(span).css("filter", "progid:DXImageTransform.Microsoft.Blur(pixelradius="+parseInt(shadow.radius)+", enabled='true')");

				}

			}	

			el.append(span);

		

	  });

	};

	

	$.fn.textShadowParse = function(value) 

	{

		value = String(value)

			.replace(/^\s+|\s+$/gi, '')

			.replace(/\s*!\s*important/i, '')

			.replace(/\(\s*([^,\)]+)\s*,\s*([^,\)]+)\s*,\s*([^,\)]+)\s*,\s*([^\)]+)\s*\)/g, '($1/$2/$3/$4)')

			.replace(/\(\s*([^,\)]+)\s*,\s*([^,\)]+)\s*,\s*([^\)]+)\s*\)/g, '($1/$2/$3)')

	

		var shadow = {

			x      : 0,

			y      : 0,

			radius : 0,

			color  : null

		};



		if (value.length > 1 || value[0].toLowerCase() != 'none') {

			value = value.replace(/\//g, ',');

			var color;

			if ( value.match(/(\#[0-9a-f]{6}|\#[0-9a-f]{3}|(rgb|hsb)a?\([^\)]*\)|\b[a-z]+\b)/i) && (color = RegExp.$1) ) {

				shadow.color = color.replace(/^\s+/, '');

				value = value.replace(shadow.color, '');

			}



			value = value

				.replace(/^\s+|\s+$/g, '')

				.split(/\s+/)

				.map(function(item) {

						return (item || '').replace(/^0[a-z]*$/, '') ? item : 0 ;

					});



			switch (value.length)

			{

				case 1:

					shadow.x = shadow.y = value[0];

					break;

				case 2:

					shadow.x = value[0];

					shadow.y = value[1];

					break;

				case 3:

					shadow.x = value[0];

					shadow.y = value[1];

					shadow.radius = value[2];

					break;

			}

			if ((!shadow.x && !shadow.y && !shadow.radius) || shadow.color == 'transparent') {

				shadow.x = shadow.y = shadow.radius = 0;

				shadow.color = null;

			}

		}



		return shadow;

	};



	$.fn.textShadowRemove = function() {

		if (!$.browser.msie) return;

		return this.each(function() {

			$(this).children("span.jQueryTextShadow").remove();

		});

	};

})(jQuery);



if(typeof Array.prototype.map == 'undefined') {

	Array.prototype.map = function(fnc) {

		var a = new Array(this.length);

		for (var i = 0; i < this.length; i++) {

			a[i] = fnc(this[i]);

		}

		return a;

	}

}


