/**
 * Makes a random opacity flicker effect
 *
 * publishes 'flicker' event with opacity it changed to
 *
 * @author Alec Hill
 */
(function(){

com.alechill.Flicker = new Class({
    
	Implements: [Events, Options],
	
    options: {
		interval: 50,
		max_opacity: 1,
		min_opacity: 0.5,
		probability: 3
	},
	
    el: null,
	periodical: null,
    
    initialize: function( el, options ){
        this.el = $(el);
		this.setOptions(options);
		
		this.periodical = this.attemptFlicker.periodical(this.options.interval, this);
    },
	
	/**
	 * decides whether flicker should occur
	 */
	shouldFlicker: function(){
		return $random(1, this.options.probability) == 1; 
	},
	
	attemptFlicker: function(e){ 
		if(this.shouldFlicker()) this.performFlicker();
    },

	performFlicker: function(){
		var opacity = $random(this.options.min_opacity * 100, this.options.max_opacity * 100) / 100;
		this.el.set('opacity', opacity);
		this.fireEvent('flicker', opacity);
	}
    
});

})();