if (typeof fm == "undefined") {
	fm = {};
}
if (typeof fm.empire == "undefined") {
	fm.empire = {};
}
if (typeof fm.empire.home == "undefined") {
	fm.empire.home = {};
}

if (typeof CDNRoot == "undefined") {
	CDNRoot = '/';
}

fm.empire.home = {
    aSlideImgages: null,
    aSlideButtons: null,
    aSlideCopies: null,
	aWatchButtons: null,
	iCurrentSlide: 0,
	iSlideTotal: 0,
	iSlideInterval: 3000,
	iOnClickDelay: 6000,
	iSlideTimer: 0,
	iDelayTimer: 0,
	bIsOn: false,

	setup: function() {
	    this.setupSlide();
	},
	
	setupSlide: function() {
	    this.aSlideImgages = $$( '#slideshow .image a' );
	    this.aSlideButtons = $$( '#slideshow .copy .button a.num' );
	    this.aSlideCopies = $$( '#slideshow .copy p.text' );
	    this.aWatchButtons = $$( '#slideshow .copy p.watch' );
		var slideButtonPrev = $( 'slideButtonPrev' );
		var slideButtonNext = $( 'slideButtonNext' );
	    
	    if( !this.aSlideImgages || !this.aSlideButtons || !this.aSlideCopies || !this.aWatchButtons ) {
			return;
		} else {
			if( this.aSlideImgages.length == 0 || this.aSlideImgages.length != this.aSlideButtons.length || this.aSlideImgages.length != this.aSlideCopies.length || this.aSlideImgages.length != this.aWatchButtons.length ) {
		        return;
			} else {
				this.iSlideTotal = this.aSlideImgages.length;
			}
	    }

		if( iSlideDelay ) {
			this.iSlideInterval = iSlideDelay * 1000
			this.iOnClickDelay = this.iSlideInterval * 2
		}

		if( this.iSlideTotal > 0 ) {
		    for( var i=0; i<this.iSlideTotal; i++ ) {
			    Event.observe( this.aSlideButtons[i], 'click', this.onSlideButtonClick.bindAsEventListener(this) );
		    }
		}

		if( slideButtonPrev )
			Event.observe( slideButtonPrev, 'click', this.onArrowButtonClick.bind(this, -1) );
		if( slideButtonNext )
			Event.observe( slideButtonNext, 'click', this.onArrowButtonClick.bind(this, 1) );

		this.setSlideTimer();
	},

	setSlideTimer: function( delay ) {
		clearInterval( this.iSlideTimer );
		clearTimeout( this.iDelayTimer );
		if( delay ) {
			this.iDelayTimer = setTimeout( function(scope){
									if( !scope ) scope = fm.empire.home; //scope fix for IEs
									scope.iSlideTimer = setInterval( scope.slideshow.bind(scope), scope.iSlideInterval );
								}, delay, this );
		} else {
			this.iSlideTimer = setInterval( this.slideshow.bind(this), this.iSlideInterval );
		}
	},
	
	slideshow: function() {
		this.moveSlide( this.iCurrentSlide+1 );
		//console.log( 'playing slide#: ' + this.iCurrentSlide );
	},
	
	onSlideButtonClick: function( e ) {
        if( e ) Event.stop(e);
	    var target = Event.findElement( e, 'a' );

		this.moveSlide( this.aSlideButtons.indexOf(target), this.setSlideTimer.bind(this, this.iOnClickDelay) );
	},
	
	onArrowButtonClick: function( step, e ) {
		var slideId = 0;
		if( e ) Event.stop(e);

		slideId = this.iCurrentSlide + step
		this.moveSlide( slideId, this.setSlideTimer.bind(this) );
	},

	moveSlide: function( slideId, callback ) {
		slideId = slideId<0 ? slideId+this.iSlideTotal : (slideId>this.iSlideTotal-1 ? slideId-this.iSlideTotal : slideId);
		//make sure the animation is not undergoing
		if( this.bIsOn || slideId==this.iCurrentSlide ) return;

		this.aSlideImgages[ slideId ].show();
		Element.setStyle( this.aSlideImgages[this.iCurrentSlide], {zIndex: 999} );
		this.bIsOn = true;

		//TODO: toggle display of image/button/copy/feplink
		new Effect.Opacity(this.aSlideImgages[ this.iCurrentSlide ], {
			from: 1,
			to: .5,
			duration: .15,
			transition: Effect.Transitions.linear,
			afterFinish: this.moveSlideStep2.bind(this, slideId, callback)
		});

	},
	
	moveSlideStep2: function( slideId, callback ) {
		this.aSlideButtons.invoke( 'removeClassName', 'on' );
		this.aSlideCopies.invoke( 'hide' );
		this.aWatchButtons.invoke( 'hide' );

		this.aSlideButtons[ slideId ].addClassName( 'on' );
		this.aSlideCopies[ slideId ].show();
		this.aWatchButtons[ slideId ].show();

		new Effect.Opacity(this.aSlideImgages[ this.iCurrentSlide ], {
			from: .5,
			to: 0,
			duration: .15,
			transition: Effect.Transitions.linear,
			afterFinish: this.moveSlideStep3.bind(this, slideId, callback)
		});
	},
	
	moveSlideStep3: function( slideId, callback ) {
		this.aSlideImgages[ this.iCurrentSlide ].hide();
		Element.setStyle( this.aSlideImgages[this.iCurrentSlide], {opacity: 1, zIndex: 1} );
		this.iCurrentSlide = slideId;
		
		if( callback && typeof(callback) == 'function' ) {
			callback();
		}
		this.bIsOn = false;
		//console.log( 'ending slide#: ' + this.iCurrentSlide );
	}
	
};

Event.onDOMReady(fm.empire.home.setup.bind(fm.empire.home));
