function scrollableInit(){
									 
	$$('.scrollable').each(function(scrollObj){
				
		var scrollObjWidth = scrollObj.getWidth();
		var scrollObjHeight = scrollObj.getHeight();
	
		var xOnly = scrollObj.hasClassName('xOnly');
		var yOnly = scrollObj.hasClassName('yOnly');

		scrollObj.setStyle("overflow:hidden; width: "+scrollObjWidth+"px; height: "+scrollObjHeight+"px");
		
		scrollObj.observe('mousemove', function(event) {
			var scrollObj = $(Event.element(event)).up('.scrollable');
		  
			if(!scrollObj){return;}
				
			var totalOffset = scrollObj.cumulativeOffset();
			var pointers = [Event.pointerX(event), Event.pointerY(event)];
			var offsets = [pointers[0] - totalOffset[0], pointers[1] - totalOffset[1]];

			var padding = 50;
			var mask = [ scrollObj.getWidth() , scrollObj.getHeight() ];
			var extents = [ scrollObj.scrollWidth - mask[0] , scrollObj.scrollHeight - mask[1] ];
			var x = offsets[0];
			var y = offsets[1];

			var results = [ (x-padding)*extents[0] / (mask[0] - (2*padding)) ,
						    (y-padding)*extents[1] / (mask[1] - (2*padding)) ];

			//$('debug').innerHTML = "mask: "+mask[1]+"<br>extents:"+extents[1]+"<br>y: "+y+"<br>f(y):"+results[1];

			if(!yOnly){ scrollObj.scrollLeft = results[0]; }
			if(!xOnly){ scrollObj.scrollTop = results[1]; }
			
		});
	});
}

if(typeof manuallyStartScrollable == 'undefined'){
	manuallyStartScrollable = false;
}
	
if(!manuallyStartScrollable){
	Event.observe(window,'load',scrollableInit);
}
