var ScrollSidebar = new Class({
	Implements: [Options], options: {
		offsets: { x:0, y:0 },
		mode: 'vertical',
		positionVertical: 'top',
		positionHorizontal: 'right',
		speed: 400,
		padding_top: 0,
		padding_bottom: 0,
		main_div_height: 0,
		slider_div_height: 0
	},

	initialize: function(menu,options) {
		/* initial options */
		this.setOptions(options);
		this.menu = $(menu);
		this.move = this.options.mode == 'vertical' ? 'y' : 'x';
		this.property = this.move == 'y' ? 'positionVertical' : 'positionHorizontal';
		/* ensure a few things */
		var css = { position: 'absolute', display:'block' };
		css[this.options.positionVertical] = this.options.offsets.y + this.options.padding_top;
		css[this.options.positionHorizontal] = this.options.offsets.x;
		this.menu.setStyles(css).set('tween',{ duration: this.options.speed });
		/* start listening */
		this.startListeners();
	},

	startListeners: function() {
		var action = function() {
			if($(document.body).getScroll()[this.move]<this.options.padding_top){
				this.setPosition(this.options.padding_top);
			} else if($(document.body).getScroll()[this.move]+this.options.slider_div_height>this.options.main_div_height-this.options.padding_bottom){
				this.setPosition(this.options.main_div_height-this.options.padding_bottom-this.options.slider_div_height);
			} else {
				this.setPosition($(document.body).getScroll()[this.move] + this.options.offsets[this.move]);
			}
		}.bind(this);
		window.addEvent('scroll',action);
		window.addEvent('load',action);
	},

	setPosition: function(move) {
		this.menu.tween(this.options[this.property],move);
		return this;
	}
});
