/**
 * @category    Fishpig
 * @package     Fishpig_iBanners
 * @license     http://fishpig.co.uk/license.txt
 * @author      Ben Tideswell <help@fishpig.co.uk>
 */

	if (!window.fishpig) {
		var fishpig = new Object();
	}
	
	fishpig.iBanners = new Object();
	
	
	
	/**
		GROUP
		- initialize
		- initBanners
		- initTransition
		- next
		
		BANNER
		- initialize
		- hide
		- show

	**/
	
	fishpig.iBanners.Group = Class.create({
		initialize: function(wrapperId, options) {
			this.wrapper = $(wrapperId);
			this.setOptions(options);
			
			if (this.initBanners()) {
				this.wrapper.setStyle({height: this.wrapper.getHeight() + 'px'});
				
				setInterval(this.next.bind(this), this.options.transitionDelay);
			}
		},
		setOptions: function (options){
			this.options = { 
				transitionDelay: 4000,
				bannerSelector: 'li.banner',
				bannerHideDuration: 1.0,
				bannerShowDuration: 1.0,
				bannerHiddenDuration: 1000,
			};
	
			Object.extend(this.options, options || {});
		},
		initBanners: function() {
			var banners = this.wrapper.select(this.options.bannerSelector);
			if (banners.length > 1) {
				this.banners = new Array();
				this.position = 0;
			
				banners.each(function(banner) {
					this.addBanner(banner);
				}.bind(this));
				
				return true;
			}
			
			return false;
		},
		addBanner: function(banner) {
			this.banners[this.banners.length] = new fishpig.iBanners.Banner(banner, this.options);
		},
		next: function() {
			this.banners[this.position].hide(function() {
				this.position = this.position + 1 >= this.banners.length ? 0 : this.position + 1;
				this.banners[this.position].show();
			}.bind(this));
		}
	});
	
	fishpig.iBanners.Banner = Class.create({
		initialize: function(banner, options) {
			this.banner = $(banner);
			this.options = options;
		},
		hide: function(callback) {
			Effect.Fade(this.banner, {
				duration: this.options.bannerHideDuration,
				from: 1.0,
				to: 0.0,
				afterFinish: setTimeout(callback.bind(this), this.options.bannerHiddenDuration)
			});
		},
		show: function() {
			Effect.Appear(this.banner, {
				duration: this.options.bannerShowDuration,
				from: 0.0,
				to: 1.0,
				afterFinish: function() {
				
				}
			});
		}
	});

