
if ( typeof Slider == "undefined" ) var Slider = new Object();

Slider.mTest = null;
Slider.startScroll = null;
Slider.accumulatedMove = 0;
Slider.onload = function()
{	
	Event.observe(window, "scroll", Slider.mapScrollObserver); 
	Slider.startScroll = null;
}
Slider.mapScrollObserver = function (event)
{
	if (Slider.mTest) { 
		clearInterval(Slider.mTest);
	} else { 	
		Slider.startScroll = find_scroll_distance();
	}
// alert('[mapScrollObserver] Slider.startScroll = '+Slider.startScroll)

	Slider.mTest = setInterval("Slider.moveTest()", 300);
}

Slider.moveTest = function ()
{
	var num = find_scroll_distance();

//alert('[moveTest] num = '+num)

	if ( Slider.startScroll == num ){
		clearInterval(Slider.mTest);
		Slider.mTest = null;
		Slider.moveBox(num);		
	}	
	Slider.startScroll = num;
}
Slider.moveBox = function (num)
{
	var scrollBox = document.getElementById('map_container');
	var pos = find_position(scrollBox);

	var pos_x = pos[0];
	var pos_y = pos[1];

	if ( num > ( pos_y - 4 ) ) {
		var shift = num - ( pos_y - 4 );
		Slider.accumulatedMove = Slider.accumulatedMove + shift;
		new Effect.Move(scrollBox,{x:0, y: shift, mode: 'relative'});				
	}
	else if ( ( pos_y - 4 > num ) && ( Slider.accumulatedMove > pos_y - 4 - num ) ) {
		var shift = num - ( pos_y - 4 );
		Slider.accumulatedMove = Slider.accumulatedMove + shift;
		new Effect.Move(scrollBox,{x:0, y: shift, mode: 'relative'});	
	}
	else {
		Slider.accumulatedMove = 0;
		new Effect.Move(scrollBox,{x:0, y: 0, mode: 'absolute'});
	}
	// scrollBox = null;
}

// Find proper vertical scroll distance
function find_scroll_distance()
{
	var num = window.pageYOffset ||
			document.body.scrollTop ||
			document.documentElement.scrollTop;

//alert('[find_scroll_distance] num '+num)

	return num;
}

// find element x,y location
function find_position( elem )
{
	var posX = null;
	var posY = null;
	if( elem.offsetParent ) {
		for( posX = 0, posY = 0; elem.offsetParent; elem = elem.offsetParent ) {
			posX += elem.offsetLeft;
			posY += elem.offsetTop;
		}
	}
	else {
		posX = elem.x;
		posY = elem.y;
	}
//alert('[find_position] posX '+posX+' posY '+posY)

	return [ posX, posY ];
}
