/**
 * Shadow class
 * generate a shadow for given element. Note the element must be position absolute.
 */
Mui.Shadow=new Class({
	Implements: [Events, Options],
	options:{
		offset:6
	},
	initialize: function(element,options){
		this.setOptions(options);
		this.targetEl=element;
		this.id=(this.targetEl.get('id') || Mui.IdFactory.getId())+'-shadow';
		if (Browser.Engine.name == 'trident') {
			this.shadowEl=new Element('div', {
				'id': this.id,
				'class': 'm-ie-shadow',
				'styles': {
					'display': 'none',
					'filter':'progid:DXImageTransform.Microsoft.alpha(opacity=60) progid:DXImageTransform.Microsoft.Blur(pixelradius='+this.options.offset+')'
				}
			}).inject(this.targetEl,'after');			
		}
		else {
			this.shadowEl = new Element('div', {
				'id': this.id,
				'class': 'm-shadow',
				'style': 'display:none',
				'html': '<div class="m-shadow-t"><div class="m-shadow-tl"></div><div id="' + this.id + '-tc" class="m-shadow-tc" ></div><div class="m-shadow-tr"></div></div><div id="' + this.id + '-m" class="m-shadow-m"><div class="m-shadow-ml"></div><div id="' + this.id + '-mc" class="m-shadow-mc"></div><div class="m-shadow-mr"></div></div><div class="m-shadow-b"><div class="m-shadow-bl"></div><div id="' + this.id + '-bc" class="m-shadow-bc"></div><div class="m-shadow-br"></div></div>'
			}).inject(this.targetEl,'after');
			this.tcEl = $(this.id + '-tc');
			this.mEl = $(this.id + '-m');
			this.mcEl = $(this.id + '-mc');
			this.bcEl = $(this.id + '-bc');
		}
		this.move();
		this.resize();
		this.updateZIndex();
	},
	move:function(){
		var target={
			left:this.targetEl.getStyle('left').toInt(),
			top :this.targetEl.getStyle('top').toInt()
		};
		this.shadowEl.setStyles({
			'top':		target.top+this.options.offset,
			'left':		target.left-this.options.offset			
		});
	},
	resize:function(){
		var target={
			width:this.targetEl.getBoundWidth(),
			height:this.targetEl.getBoundHeight()
		};
		if (Browser.Engine.name == 'trident') {
			this.shadowEl.setStyles({
				'width': target.width,
				'height': target.height-2*this.options.offset
			});		
		}else {
			var shadowWidth = target.width + this.options.offset + this.options.offset;
			var shadowHeight = target.height;
			
			this.shadowEl.setStyles({
				'width': shadowWidth,
				'height': shadowHeight
			});
			this.tcEl.setStyle('width', shadowWidth - 12);
			this.bcEl.setStyle('width', shadowWidth - 12);
			this.mcEl.setStyle('width', shadowWidth - 12);
			this.mEl.setStyle('height', shadowHeight - 12);
		}
	},
	updateZIndex:function(){
		var tagetZIndex=this.targetEl.getStyle('z-index');
		this.shadowEl.setStyle('z-index',tagetZIndex>5?tagetZIndex-5:0);
	},
	show:function(){
		this.shadowEl.setStyle('display','block');
	},
	hidden:function(){
		this.shadowEl.setStyle('display','none');
	},
	destroy:function(){
		this.shadowEl.destroy();
		for (var z in this) this[z] = null;		
		this.destroyed = true;
	}
});

	