freevolution.prototype.stopScroll = false;
freevolution.prototype.extend(
	{
	unsetScrollDirection: function(event){
		this.stopScroll=true; // this will cause the scrollers to grind to a halt
	},
	setScrollDirection: function (event){
		if (!event) var event = window.event; // make sure we actually get the event in IE
		if (event.target){ //w3c
			targ = event.target;
		} else if (event.srcElement) { // IE specific
			targ = event.srcElement;
		}
		this.stopScroll = false;
		if(targ.className=='gui_button top'){
			window.setTimeout(this.scrollUp.bind(this),this.scrolltime);
		} else if(targ.className=='gui_button bottom'){
			window.setTimeout(this.scrollDown.bind(this),this.scrolltime);
		} else if(targ.className=='gui_button right'){
			window.setTimeout(this.scrollLeft.bind(this),this.scrolltime);
		} else if(targ.className=='gui_button left'){
			window.setTimeout(this.scrollRight.bind(this),this.scrolltime);
		}
		// fire up the scrollers!
	},
	scrollUp: function (){	// functions handling the scrolling of the map, and fetch the new tiles if needed
		this.overlap[2]=this.overlap[2]-this.scrollby;
		this.overlap[0]=this.overlap[0]+this.scrollby;
	
		this.viewport[2]=this.viewport[2]+this.scrollby
		this.viewport[3]=this.viewport[3]+this.scrollby;
	
		this.map.style.top=parseInt(this.map.style.top)-this.scrollby+'px';
		if(this.overlap[2]<33){
			this.destroy(this.viewport[0]-64,this.viewport[1]+64,this.viewport[2]-64,this.viewport[2]);
			this.overlap[0]=this.overlap[0]-64;
			this.fetch(this.viewport[0]-64,this.viewport[1]+64,this.viewport[3],this.viewport[3]+64);
			this.overlap[2]=this.overlap[2]+64;
		}
		//debugmessage("viewport="+viewport[0]+"-"+viewport[1]+"-"+viewport[2]+"-"+viewport[3]);
		if(!this.stopScroll){
			window.setTimeout(this.scrollUp.bind(this),this.scrolltime);
		}
		return true;
	},
	scrollDown: function (){
		this.overlap[2]=this.overlap[2]+this.scrollby;
		this.overlap[0]=this.overlap[0]-this.scrollby;
	
		this.viewport[2]=this.viewport[2]-this.scrollby
		this.viewport[3]=this.viewport[3]-this.scrollby;
	
		this.map.style.top=parseInt(this.map.style.top)+this.scrollby+'px';
	
		if(this.overlap[0]<33){
			this.destroy(this.viewport[0]-64,this.viewport[1]+64,this.viewport[3],this.viewport[3]+64);
			this.overlap[2]=this.overlap[2]-64;
			this.fetch(this.viewport[0]-64,this.viewport[1]+64,this.viewport[2]-64,this.viewport[2]);
			this.overlap[0]=this.overlap[0]+64;
		}
		//debugmessage("viewport="+viewport[0]+"-"+viewport[1]+"-"+viewport[2]+"-"+viewport[3]);
		if(!this.stopScroll){
			window.setTimeout(this.scrollDown.bind(this),this.scrolltime);
		}
		return true;
	}, 
	scrollRight:function (){
		this.overlap[1]=this.overlap[1]+this.scrollby;
		this.overlap[3]=this.overlap[3]-this.scrollby;
	
		this.viewport[0]=this.viewport[0]-this.scrollby
		this.viewport[1]=this.viewport[1]-this.scrollby;
	
		this.map.style.left=parseInt(this.map.style.left)+this.scrollby+'px';
	
		if(this.overlap[3]<33){		
			this.fetch(this.viewport[0]-64,this.viewport[0],this.viewport[2]-64,this.viewport[3]+64);
			this.overlap[3]=this.overlap[3]+64;
		}
		if(this.overlap[1]>96){
			this.destroy(this.viewport[1],this.viewport[1]+64,this.viewport[2]-64,this.viewport[3]+64);
			this.overlap[1]=this.overlap[1]-64;
		}
		//debugmessage("viewport="+viewport[0]+"-"+viewport[1]+"-"+viewport[2]+"-"+viewport[3]);
		if(!this.stopScroll){
			window.setTimeout(this.scrollRight.bind(this),this.scrolltime);
		}
		return true;
	},
	scrollLeft: function (){
		this.overlap[1]=this.overlap[1]-this.scrollby;
		this.overlap[3]=this.overlap[3]+this.scrollby;
	
		this.viewport[0]=this.viewport[0]+this.scrollby
		this.viewport[1]=this.viewport[1]+this.scrollby;
	
		this.map.style.left=parseInt(this.map.style.left)-this.scrollby+'px';
	
		if(this.overlap[1]<33){
			//alert('fetching!'+viewport[1]+","+(viewport[1]+96)+","+(viewport[2]-64)+","+(viewport[3]+64));
			this.fetch(this.viewport[1],this.viewport[1]+64,this.viewport[2]-64,this.viewport[3]+64);
			this.overlap[1]=this.overlap[1]+64;
		}
		if(this.overlap[3]>96){
			this.destroy(this.viewport[0]-64,this.viewport[0],this.viewport[2]-64,this.viewport[3]+64);
			this.overlap[3]=this.overlap[3]-64;
		}
		if(!this.stopScroll){
			window.setTimeout(this.scrollLeft.bind(this),this.scrolltime);
		}
		//debugmessage("viewport="+viewport[0]+"-"+viewport[1]+"-"+viewport[2]+"-"+viewport[3]);
		return true;
	}
}
);
