/*
 * jQuery text-shadow and box-shadow plugin
 *
 * @version 0.1
 * @date 2010-03-31
 * @requires jQuery
 *
 * @author Sergey "putnik" Leschina (putnik.net.ru)
 * @license MIT (http://www.opensource.org/licenses/mit-license.php)
 *
 */
 
(function($) {
	$.fn.textShadow = function () {
		return this.each(function() {
			if ('\v'=='v') { // is IE
				var obj = $(this);
				obj.css({
					'zoom': '1',
					'text-shadow': 'none'
				});
				if (!obj.css('position') || obj.css('position') == 'static') {
					obj.css('position', 'relative');
				}

				var z_index = obj.css('z-index');
				if (!z_index || z_index == 'auto') {
					obj.css('z-index', '1');
				}
				z_index = -1;
				
				var obj_html = obj.html();

				var shadows_array = obj.css('text-shadow').split(',');
				for (var cur_shadow in shadows_array) {
					var s_array = shadows_array[cur_shadow].replace(/^\s*(.*)\s*$/, '$1').split(' ');

					var s_radius = parseInt(s_array[3], 10);

					var padding = {
						left: parseInt(obj.css('padding-left'), 10),
						top: parseInt(obj.css('padding-top'), 10)
					};

					var opt = {
						'c': s_array[0],
						'r': s_radius,
						'x': parseInt(s_array[1], 10)-1+(padding.left-s_radius) + 'px',
						'y': parseInt(s_array[2], 10)-1+(padding.top-s_radius) + 'px',
						'o': 50
					};
					opt.c = (opt.c.length == 4) ? opt.c.replace(/#([0-9a-f])([0-9a-f])([0-9a-f])/i, '#$1$1$2$2$3$3') : opt.c;
					var msFilter =
						'progid:DXImageTransform.Microsoft.Glow(Color='+opt.c+',Strength='+(opt.r/10)+') ' +
						'progid:DXImageTransform.Microsoft.Blur(pixelradius='+opt.r+', enabled="true")';
						//'progid:DXImageTransform.Microsoft.Alpha(opacity='+opt.o+')';

					var shadow = $(document.createElement('span'));
					shadow
						.html(obj_html)
						.appendTo(obj)
						.css({
							'position': 'absolute',
							'left': opt.x,
							'top': opt.y,
							'zoom': '1',
							'font-size': '100%',
							'z-index': '-1',
							'color': opt.c,
							'filter': msFilter,
							'-ms-filter': msFilter
						})
						.live('select', function() {
							return false;
						});
				}
			}
		});
	};

	$.fn.boxShadow = function (value) {
		return this.each(function() {
			if ('\v'=='v') { // is IE
				var obj = $(this);

				var b_shadow = value.split(' ');
				var s_radius = parseInt(b_shadow[2], 10);

				var opt = {
					'c': b_shadow[3],
					'r': s_radius,
					'x': parseInt(b_shadow[1], 10),
					'y': parseInt(b_shadow[2], 10)
				};
				opt.c = (opt.c.length == 4) ? opt.c.replace(/#([0-9a-f])([0-9a-f])([0-9a-f])/i, '#$1$1$2$2$3$3') : opt.c;
				var msFilter =
					'progid:DXImageTransform.Microsoft.Shadow(color='+opt.c+', Direction=45, Strength='+(opt.r+(opt.x-opt.y)/2)/3+') ' +
					'progid:DXImageTransform.Microsoft.Shadow(color='+opt.c+', Direction=135, Strength='+(opt.r+(opt.x+opt.y)/2)/3+') ' +
					'progid:DXImageTransform.Microsoft.Shadow(color='+opt.c+', Direction=225, Strength='+(opt.r+(-opt.x+opt.y)/2)/3+') ' +
					'progid:DXImageTransform.Microsoft.Shadow(color='+opt.c+', Direction=315, Strength='+(opt.r+(-opt.x-opt.y)/2)/3+')';

				obj.css({
					'box-shadow': 'none',
					'filter': msFilter,
					'-ms-filter': msFilter
				});
			}
		});
	};
})(jQuery);


