(function($) {
	
	$.shadows = function(command) {
		if(!command) command = "refresh";
		
		$(".shadow-object").shadow(command);
		
		return this;
	}
	
	
	$.shadows.defaultOptions = {
		margin: 3,
		path: '/images/layout/',
		parent: document.body
	};
	
	$.fn.shadow = function(options) {
		
		var o = {};
		
		if(options == "refresh") {
//			console.log(this);
		//	$('.shadow').remove();
			//return;
		} else {
			/*
var elements = $(document.body).data('shadow-elements');
			
			var e = $(this);
			if(elements) e = $.extend(e, elements);
			console.log(e);
			$(document.body).data('shadow-elements', e);
*/
			
			o = $.extend({}, $.shadows.defaultOptions, options);
			$(this).addClass("shadow-object").css("border", 'none').data('shadow-options', o);
			
			$(o.parent).css('position', 'relative');
		}
				
		$(this).each(function() {
					
			if(options == "refresh") {
				o = $(this).data('shadow-options');
				var el = $(this).data('shadow-elements');
				
			} else {
				//$(this).data('shadow-options', o);
				
				var el = {};
				
				el.lt = $("<div class='shadow shadow-left-top'><!-- x --></div>").appendTo(o.parent);
				el.lb = $("<div class='shadow shadow-left-bottom><!-- x --></div>'").appendTo(o.parent);
				el.rt = $("<div class='shadow shadow-right-top'><!-- x --></div>").appendTo(o.parent);
				el.rb = $("<div class='shadow shadow-right-bottom'><!-- x --></div>").appendTo(o.parent);
				
				el.t = $("<div class='shadow shadow-top'><!-- x --></div>").appendTo(o.parent);
				el.b = $("<div class='shadow shadow-bottom'><!-- x --></div>").appendTo(o.parent);
				el.r = $("<div class='shadow shadow-right'><!-- x --></div>").appendTo(o.parent);
				el.l = $("<div class='shadow shadow-left'><!-- x --></div>").appendTo(o.parent);
				
				$(this).data('shadow-elements', el);
			}
						
			positionObject.call(this, el);
		});
		
		function positionObject(el) {
			
			$this = $(this);
			
			var offset = $this.offset();
			var w = $this.outerWidth();
			var h = $this.outerHeight();
			
			var poffset = $(o.parent).offset();
			offset.left -= poffset.left;
			offset.right -= poffset.right;
			
			el.lt.css(cssObj(offset.left-o.margin,offset.top-o.margin, o.margin, o.margin, o.path+'shadow-left-top.png'));
			el.lb.css(cssObj(offset.left-o.margin,offset.top+h, o.margin, o.margin,o.path+'shadow-left-bottom.png'));
			el.rt.css(cssObj(offset.left+w,offset.top-o.margin, o.margin, o.margin,o.path+'shadow-right-top.png'));
			el.rb.css(cssObj(offset.left+w,offset.top+h, o.margin, o.margin,o.path+'shadow-right-bottom.png'));
			
			el.t.css(cssObj(offset.left,offset.top-o.margin, o.margin, w,o.path+'shadow-top.png'));
			el.b.css(cssObj(offset.left,offset.top+h,o.margin,w,o.path+'shadow-bottom.png'));
			el.l.css(cssObj(offset.left-o.margin,offset.top,h,o.margin,o.path+'shadow-left.png'));
			el.r.css(cssObj(offset.left+w,offset.top,h, o.margin, o.path+'shadow-right.png'));
			
		}
		
		function cssObj(l, t, h, w, url) {
			
			if(options == "refresh") return {
				left: parseInt(l),
				top: parseInt(t),
				height: h,
				width: w
			};
			
			var ob = {
				position: 'absolute',
				left: parseInt(l),
				top: parseInt(t),
				height: h,
				width: w,
				display: 'block'
			};
			
			if(o.zIndex) ob.zIndex = o.zIndex;
			
			if($.browser.msie) {
				ob.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='scale')";
			} else {
				ob.backgroundImage = 'url('+url+')';
				ob.backgroundColor = 'transparent';
			}
			
			return ob;
		}
		
		return this;
	}
	
})(jQuery);