jQuery.fn.scroll = function(options){
	options = jQuery.extend({container:false, speed: 10, center: 5},options);
	return this.each(function(){
		var outer;
		if ( options.container )
			 outer = jQuery(options.container);
		else
		{
			jQuery(this).wrapInner('<div class="scroll-container"></div>');
			outer = this;
		}

		var inner = jQuery(this).children(".scroll-container")[0];
		jQuery(inner).css("position","absolute");
		jQuery(outer).css({overflow : "hidden", position: "relative"});
		jQuery(outer).hover(function(e){
			this.active = true;
			var self = this;
			jQuery(this).scroll_center(e);
			this.timer = window.setInterval(function(){ jQuery.scroll_do(self, options); },50);
		}, function(){
			clearInterval(this.timer);
			this.active = false;
		});
		jQuery(outer).mousemove(function(e){
			jQuery(this).scroll_center(e);
		});
	});
}
jQuery.scroll_do = function(t, o){
	var y = t.offset; // mouse position
	var trg = jQuery(t).children()[0];

	var h = jQuery(t).height(); // container height
	var h2 = jQuery(trg).height(); // inner height
//	console.log("y:"+y+"; center:"+o.center+"; h2:"+h2+"; h1:"+h);

	if (( Math.abs(y) > o.center ) && ( h2 > h ))
	{
		var yoffset = Math.round(y * o.speed/100);
		var newy = trg.offsetTop + yoffset;
//		console.log("yoffset:"+yoffset+"; newy:"+newy);
		var max = 0; var min = -(h2-h);
//		console.log("min:"+min+" ;max:"+max);
//		console.log("--------------");
		if (( newy < max ) && ( newy > min))
		{
			newy = newy;

		}else
		{
			if ( newy > max ){
				newy = max;
			}else
			{
				newy = min;
			}
		}
		jQuery(trg).css("top", newy+"px");


	}

};
jQuery.fn.scroll_center = function(e){
	return this.each(function(){
		var h = jQuery(this).height();
		var y = e.pageY;
		var ot = jQuery(this).y();
		var xof =  h / 2 - ( y - ot);
		//console.log("h:"+h+"; y:" +y+"; ot:"+ot);
		//console.log(offset);
		this.offset = xof;
	});
}

jQuery.fn.y = function(n) {
     var result = null;
     this.each(function() {
         var o = this;
         if (n === undefined) {
             var y = 0;
             if (o.offsetParent) {
                 while (o.offsetParent) {
                     y += o.offsetTop;
                     o = o.offsetParent;
                 }
             }
             if (result === null) {
                 result = y;
             } else {
                 result = Math.min(result, y);
             }
         } else {
             o.style.top = n + 'px';
			 result = jQuery(this);
         }
     });
     return result;
};

// */