
var Anim;
if(!Anim) Anim = Class.create();

Anim.Effect = Class.create();

Anim.Effect.FramesetSlide = Class.create();
Anim.Effect.Orientation = { Horizontal: 1, Vertical: 2 };

Anim.Effect.FramesetSlide.prototype = Object.extend(new Anim.Animation(), {
	initialize: function(frameset, windowWidth, actuators, options) {
		var this_ = this;
		
		this.frameset = $(frameset);
		this.windowWidth = windowWidth;
		this.orientation = Anim.Effect.Orientation.Horizontal;
		
		//this.easeFunction = function(x) { return x * x * (3 - 2*x);};
		this.easeFunction = Anim.Eases.Linear;
		this.currentPosition = 0;
		this.totalFrames = this.framesPerSecond;
		this.startPosition = 0;
		this.endPosition = 0;
		
		this.defaultActivation = "click-on";
		
		if(actuators) {
			actuators.each(function(a) {
				this_.setupActuator(a.actuator, a.activation, a.frame);
			});
		}
		
		this.setOptions(options);
	},
	
	setupActuator: function(actuator, activation, frame) {
		var this_ = this;
		var activationFunction = function() { this_.slideToFrame(frame); }
		
		if(!activation) activation = this.defaultActivation;
	
		switch(activation) {
		case "hover-on":
			Event.observe(actuator, "mouseover", activationFunction);
			break;
		case "hover-out":
			Event.observe(actuator, "mouseout", activationFunction);
			break;
		case "click-on":
			Event.observe(actuator, "click", activationFunction);
			break;
		}
	},
	
	slideToFrame: function(frameNumber) {
		if(this.endPosition != 1.0 * frameNumber) {
			this.endPosition = 1.0 * frameNumber;
			this.startPosition = this.currentPosition;
			
			if(this.handle)
				this.stop();
			
			this.currentFrame = 0;
			
			this.start();
		}
	},
	
	draw: function(currentFrame) {
		var f = this.frameset.makePositioned();
		
		var percent = this.easeFunction(1.0 * this.currentFrame / this.totalFrames);
		this.currentPosition = this.endPosition * percent + this.startPosition * (1.0 - percent);
		
		if(this.orientation == Anim.Effect.Orientation.Horizontal)
			f.setStyle({ left: -this.currentPosition * this.windowWidth });
		else if(this.orientation == Anim.Effect.Orientation.Vertical)
			f.setStyle({ top: -this.currentPosition * this.windowWidth });
	}
	
});

