/*	==========================================================

	Class: 		Fader - For the product listing page
	Use:		Performs operations on the product grid
	Version:	v1
	By:			Dave Calvert

========================================================	*/

var Banners = Class.create();
Banners.prototype = {
	
	initialize: function () {
	
		if( $$('.banner-hit-area') != '' ) {
			$$('.banner-hit-area').each(this.setup.bind(this));
			
			if ( $$('.sub-banner-hit-area') != '' ) {
				$$('.sub-banner-hit-area').each(this.setup.bind(this));
			}
			
		} else {
			return false;
		}
	
	},
	
	setup: function (k,v) {

		if ( $(k).id == '' ) {
			$(k).identify()
		}

		if (Prototype.Browser.IE) {
			Event.observe($(productBlock),'mouseenter',this.fadein.bindAsEventListener(this, $(k)));		
			Event.observe($(productBlock),'mouseleave',this.fadeout.bindAsEventListener(this, $(k)));		
		} else {		
			Event.observe($(k),'mouseenter',this.fadein.bindAsEventListener(this, $(k)));
			Event.observe($(k),'mouseleave',this.fadeout.bindAsEventListener(this, $(k)));	
		}
	
	},
	
	fadein: function (e) {

		// Get start element
		el = this.getElementFromEvent(e);

		// Find the overlay
		overlay = el.previous('div');
		
		if ( overlay.hasClassName('banner-overlay') ) {
			
			// Set the queue name
			queueName = this.setQueueName(el.id)
	
			// Empty the queue
			this.emptyQueue(queueName);
	
			// Run effect
			new Effect.Opacity(overlay, { from: 0, to: 0.8, duration: 0.5, queue:{ scope:queueName, position: 'front' } } );
			
		} else {
			
			return false;
			
		}
	
	},
	
	fadeout: function (e) {
		
		// Get element
		el = this.getElementFromEvent(e);
		
		// Find the overlay
		overlay = el.previous('div');

		if ( overlay.hasClassName('banner-overlay') ) {
			
			// Set the queue name
			queueName = this.setQueueName(el.id)
	
			// Empty the queue
			this.emptyQueue(queueName);
	
			// Run effect
			new Effect.Opacity(overlay, { from: 0.8, to: 0, duration: 0.5, queue:{ scope:queueName, position: 'front' } } );
			
		} else {
			
			return false;
			
		}
		
	},
	
	emptyQueue: function (queueName) {
	
		Effect.Queues.get(queueName).invoke('cancel');
	
	},
	
	getElementFromEvent: function (evt) {
		
		return Event.element(evt);
		
	},
	
	setQueueName: function (str) {
	
		return str.toString();
	
	}
	
};
