/**
 * @author Arian Stolwijk
 */

 var TextDropShadow = new Class({

		Implements: [Options, Events],

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

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

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

		applyDropShadow: function(el){

			if(typeOf(el.style.textShadow)){
				el.setStyle('text-shadow', this.options.top+'px '+this.options.left+'px 0 '+this.options.color);
				return this;
			}

			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: el.getSize().y + offsetY,
					width: el.getSize().x + offsetX
				}
			});

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

			container.adopt(shadow).adopt(original);
			container.injectAfter(el);
			el.dispose();

			return this;
		}
});

Element.implement({
	dropShadow: function(options){
		new TextDropShadow(this, options);
		return this;
	}
});

