function JoystickControl(options){
	if(!options){
		options={};
	}
	this.isVisible=(options.visible===false)?false:true;	
}

JoystickControl.prototype=new GControl();

JoystickControl.prototype.initialize=function(map){
	var boundingBox=document.createElement('div');
	boundingBox.className='JoystickControl_boundingBox'; 	
	var joystickControl=document.createElement('div');
	joystickControl.className='JoystickControl_joystickControl';
	joystickControl.title='Arrastra para Navegar';	
	boundingBox.appendChild(joystickControl);
	map.getContainer().appendChild(boundingBox);
	var joystickControlHomePoint=new GPoint(15, 15);	
	var draggableJoystickControl=new GDraggableObject(joystickControl,{container:boundingBox});
	draggableJoystickControl.moveToHome=function(){
		draggableJoystickControl.moveTo(joystickControlHomePoint);
	};
	draggableJoystickControl.moveToHome();	
	this.dragEndListener=GEvent.bind(draggableJoystickControl, 'dragend', this, function(){
		this.draggableJoystickControl.moveToHome();
		clearTimeout(this.timeout);	//	wrap in if this.timeout!==false?
		this.timeout=false;
	});
	this.dragListener=GEvent.bind(draggableJoystickControl, 'drag', this, function(){
		if(this.timeout===false){
			var j=this.joystickControl, b=this.boundingBox;
			var x=(b.offsetWidth/2)-(j.offsetLeft+(j.offsetWidth/2));
			var y=(b.offsetHeight/2)-(j.offsetTop+(j.offsetHeight/2));
			GEvent.trigger(this, 'drag', x, y);
			this.timeout=this.newTimeout();
		}
	});	
	this.boundingBox=boundingBox;
	this.joystickControl=joystickControl;
	this.draggableJoystickControl=draggableJoystickControl;
	this.timeout=false;
	this.setVisible(this.isVisible);
	return boundingBox;
};

JoystickControl.prototype.setVisible=function(bool){
	this.boundingBox.style.display=(bool)? 'block':'none';
	this.isVisible=bool;
};

JoystickControl.prototype.timeoutCallback=function(){
	var j=this.joystickControl, b=this.boundingBox;
	var x=(b.offsetWidth/2)-(j.offsetLeft+(j.offsetWidth/2));
	var y=(b.offsetHeight/2)-(j.offsetTop+(j.offsetHeight/2));
	GEvent.trigger(this, 'drag', x, y);
	this.timeout=this.newTimeout();
};

JoystickControl.prototype.newTimeout=function(){
	var me=this;
	var f=function(){
		me.timeoutCallback();
	};	
	return setTimeout(f, 5);
};

