//Extract From http://snipplr.com/view.php?codeview&id=19430
Effect.Scroll = Class.create( Effect.Base, {
	initialize: function( element ){
		this.element = $(element);
    	if (!this.element) throw(Effect._elementDoesNotExistError);
		var options = Object.extend({
			x: 0,
			y: 0,
			mode: 'absolute'
		}, arguments[1] || {});
		this.start(options);
	},
	setup: function(){
		if( this.element === window){
			if( !Object.isUndefined(this.element.scrollY)){
				this.originalTop = this.element.scrollY;
				this.originalLeft = this.element.scrollX;
				//console.log('scrollY/X: ' + this.originalTop + ', ' + this.originalLeft);
			}else if( !Object.isUndefined(document.documentElement.scrollTop) ){
				this.originalTop = document.documentElement.scrollTop;
				this.originalLeft = document.documentElement.scrollLeft;
				//console.log('documentElement.scrollTop/Left: ' + this.originalTop + ', ' + this.originalLeft);
			}else if( !Object.isUndefined(document.scrollTop) ){
				this.originalTop = document.scrollTop;
				this.originalLeft = document.scrollLeft;
				//console.log('scrollTop/Left: ' + this.originalTop + ', ' + this.originalLeft);
			}else{
				this.orginalTop = this.originalLeft = 0;
			}
		}else{
			this.originalTop = this.element.scrollTop;
			this.originalLeft = this.element.scrollLeft;
		}
		
		if( this.options.mode == 'absolute'){
			this.options.x -= this.originalLeft;
			this.options.y -= this.originalTop;
		}
	},
	update: function( pos ){
		var new_x = this.originalLeft + this.options.x * pos;
		var new_y = this.originalTop + this.options.y * pos;
		this._setScroll( new_x, new_y);
	},
	_setScroll: function( x, y){
		if( this.element === window){
			window.scrollTo(x, y);
		}else{
			this.element.scrollTop = y;
			this.element.scrollLeft = x;
		}
	}
});
