/**
 * @author Bruno 'Shine' Figueiredo - http://www.brunofigueiredo.com
 * @version 0.1 BETA
 */

/**
 * Effect Factory
 */
var efxFactory = {				
	/**
	 * shadow style
	 */
	shadowStyle: {
		position:"absolute",
		background:"#000000",
		zIndex:1
	},
	
	/**
	 * creates a shadow
	 * @param {Object} element to shadow
	 * @param {Object} options for reflection
	 */
	shadow: function(element, options){
		this.options = Object.extend({
		/**
		 * shadow Color
		 */
		color:"#000000",
		/**
		 * startup opacity
		 */
		opacity: 1/6,
		/**
		 * amount of shadow to create
		 */
		amount: 1,
		
		/**
		 * Border style
		 */
		borderColor:"transparent"				
		},options || {});
		element = $(element);
		element.setStyle("zIndex","100");
		var parent = element.parentNode;
		var next = element.nextSibling;
		var times = 7*this.options.amount;
		var dist = 1.0/times;
		for(i=0;i<times;i++){
			var h = new Element("div");
			h.setStyles({
				position:"absolute",
				background:this.options.color,
				height:(element.height+(i*2))+"px",
				width:(element.width +(i*2))+"px",
				top: (element.getTop()-i)+"px",
				left:(element.getLeft()-i)+"px",
				zIndex:1
				
			});
			parent.insertBefore(h,next);
			h.setOpacity((1-dist*i)*this.options.opacity);
		}
		if (this.options.borderColor != "transparent")
		{
			var h = new Element("div");
			h.setStyles({
				position:"absolute",
				height:(element.height+2)+"px",
				width:(element.width +2)+"px",
				top: (element.getTop()-1)+"px",
				left:(element.getLeft()-1)+"px",
				zIndex:1,
				background:this.options.borderColor
			});
			parent.insertBefore(h,next);	
		}
	},
	
	/**
	 * Reflect a image
	 * @param {Object} element to reflect
	 * @param {Object} options for reflection
	 */
	reflect: function(element, options){
		element = $(element);
		if (element != null){
		    this.options = Object.extend({
	    		/**
		    	* amount of image to reflect
			    */
    			amount: 1/3,
	    		/**
		    	 * startup opacity
			     */
    			opacity: 1/2,
	    		/**
		    	 * space between image and reflection
			     */
    			distance:0,
	    		
		    	elementHeight: element.height
			
			    },options || {});
		
    		var parent = element.parentNode;
	    	var next = element.nextSibling;
		    var times = (this.options.elementHeight*this.options.amount);
    		var dist = 1.0/times;
	    	if (this.options.distance>0)
		    {
			    var distanceDiv = new Element("div");
    			distanceDiv.setStyles({height:(this.options.distance)+'px',overflow:'hidden'});
	    		parent.insertBefore(distanceDiv,next);
		    }
		
    		for(i=0;i<times;i++){
	    	    var h = new Element("div");
		    	h.setStyles({height:'1px',overflow:'hidden'});
			    var img = element.clone();
    			img.setStyle("marginTop",'-'+(this.options.elementHeight-i-1)+'px');
	    		img.injectInside(h);
		    	parent.insertBefore(h,next);
			    h.setOpacity((1-dist*i)*this.options.opacity);
    		}
    	}
    }
};
