var TextDropShadow = new Class({
	Implements: [Events, Options],

options: {
	color: '#333',
	left: 1,
	top: 1,
	position: 'absolute'
},

initialize: function(obj, options){
	this.setOptions(options);
	this.createDropShadows(obj);
},

createDropShadows: function(obj){
	if('element' == $type(obj)) {
		this.applyDropShadow(obj);
	} else if('array' == $type(obj)) {
		obj.each( function(el) {
		this.applyDropShadow(el);
	}, this);
	} 
	else {
		return false;
	}
},

applyDropShadow: function(el){
var size = el.getSize();
var original = el.clone();
var shadow = el.clone();

var offsetY = this.options.top ? this.options.top.toInt() : this.options.bottom.toInt();
if(offsetY < 0) {offsetY = offsetY * (-1);}

var offsetX = this.options.left ? this.options.left.toInt() : this.options.right.toInt();
if(offsetX < 0) {offsetX = offsetX * (-1);}

var container = new Element('div', {
'styles': {
position: 'relative',
left: 0,
top: 0,
height: size.y + offsetY,
width: size.x + offsetX
}
});

original.setStyles({position: 'absolute', left: 0, top: 0});
shadow.setStyles(this.options);

container.adopt(shadow).adopt(original);
container.injectAfter(el);
el.destroy();
}
});

try {
   if ($defined($$('ds'))) {
      var textDropShadow = new TextDropShadow($$('.ds'),{color:'#111', top: 2, left: 2, opacity: 0.7});
   }
} catch(e) {}