function Mover(mainId, contentId, frameId) {		
	if(!$(mainId)) {
		throw "Mover can not find main div " + mainId;
	}	
	if(!$(contentId)) {
		throw "Mover can not find content div " + contentId;
	}
	if(!$(frameId)) {
		throw "Mover can not find frame div " + contentId;
	}
	
	var pos = 0;
	var scrollAmount = 0;
	var target = 0;
	var timer;
	var tickRate = 20.0;
	var baseSpeed = 28;
	
	var setTimer = function() {		
		if(!timer) {
			timer = setTimeout(function() { 
				timer = null; 
				move();
			}, tickRate);
		}
	}
	
	var maxOffset, mainOffsets;	
	var updateOffsets = function() {		 		 
		maxOffset = $(frameId).offsetWidth - $(mainId).offsetWidth;
	    mainOffsets = Position.cumulativeOffset($(mainId));
	}
	
	updateOffsets();
	
	// animate
	var move = this.move = function() {		
		if(maxOffset > -1) {
			setTimer();				
			pos += scrollAmount;
			
			if(pos >= 0) 
				pos = 0;			
			if(-pos >= maxOffset) {			
				updateOffsets();
			}
			if(-pos >= maxOffset) {			
				pos = -maxOffset;
			}			
			
			var contentDiv = document.getElementById(contentId);		
			if(!contentDiv || typeof contentDiv.style == 'undefined') return;
	
			contentDiv.style.left = pos + "px";			
		}
	};
	
	var easeOut = function() {
		cancel();
	}
		
	var cancel = this.cancel = function() {
		clearTimeout(timer);
		timer = null;
		updateOffsets();
	};
	
	var destroy = this.destroy = function() {
		try {
			clearTimeout(timer);
			timer = null;
			$(mainId).onmousemove = null;
			$(mainId).onmouseout = null;
			maxOffset = 0; 
			mainOffsets = 0;
		} catch(e) { }
	};

	$(mainId).onmousemove = (
	function(event) {				
		if(!event) event = window.event;
		var x = Event.pointerX(event);//, y = Event.pointerY(event);
		var dx = x - mainOffsets[0];
		var ratio = dx / $(mainId).offsetWidth;
		scrollAmount = 0;
		var speedRatio;
		
		if((speedRatio = 0.46 - ratio) > 0)
			scrollAmount = baseSpeed * speedRatio;
		if((speedRatio = 0.54 - ratio) < 0)
			scrollAmount = baseSpeed * speedRatio;
					
		if(scrollAmount != 0) {
			setTimer();
		} else {
			cancel();
		}
	});	
	
	$(mainId).onmouseout = (
	function(event) {		
		if(!event) event = window.event;
		var x = Event.pointerX(event), y = Event.pointerY(event);
		
		if(!Position.within($(mainId), x, y)) {
			easeOut();
			return;
		}
	});
}