/* 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;
     }
}

