var PanoramicView = Class.create();
PanoramicView.prototype = {
	// Constructor
  	initialize: function() {
    	this.options = Object.extend({
    		scrollInc: 100,
			image: 'panoramic_image',
			box: 'panorama_box',
			rightButton: 'go_right',
			leftButton: 'go_left',
			userAction: 'click'
		}, arguments[0] || {});

		// Event bindings
		this.rightScroll = this._rightScroll.bindAsEventListener(this);
		this.leftScroll = this._leftScroll.bindAsEventListener(this);

		Event.observe(this.options.rightButton, this.options.userAction, this.rightScroll);
		Event.observe(this.options.leftButton, this.options.userAction, this.leftScroll);
	},

	// Destructor
 	destroy: function() {
  		Event.stopObserving(this.options.rightButton, this.options.userAction, this.rightScroll);
  		Event.stopObserving(this.options.leftButton, this.options.userAction, this.leftScroll);
	},

	// "Private" functions
	_rightScroll: function() {
		// Needed elements
		var image = $(this.options.image);
		var box = $(this.options.box);
		
		// Current position
		var pos = parseInt(image.getStyle('left'));
		
		// Elements width
		var boxWidth = box.getDimensions().width;
		var imgWidth = image.getDimensions().width;
		
		// Testing next position
		if (pos < (-imgWidth + boxWidth + this.options.scrollInc))
		{
			// Going to overflow, need to set to max position
			var maxPos = -imgWidth + boxWidth
			new Effect.Morph(image, {style: {left: maxPos + 'px'}});
		}
		else
			// We can use standard inc
			new Effect.Move(image,{ x: -this.options.scrollInc });
	},

	_leftScroll: function() {
		// Needed elements
		var image = $(this.options.image);
		var box = $(this.options.box);
		
		// Current position
		var pos = parseInt(image.getStyle('left')) || 0;
		
		// Elements width
		var boxWidth = box.getDimensions().width;
		var imgWidth = image.getDimensions().width;
		
		// Testing prev position
		if (pos > -this.options.scrollInc)
		{
			new Effect.Morph(image, {style: {left: '0px'}});
		}
		else
			// We can use standard inc
			new Effect.Move (image,{ x: this.options.scrollInc });
	}
}