var gravityHandler = {

	fromBox:	null,
	fromX:		0,
	fromY:		0,
	toBox: 		null,
	toX:		0,
	toY:		0,
	step:		10,
	speed:		25,
	
	from: function(obj,x,y) {
		gravityHandler.fromBox	= obj;
		if(!x||!y) {
			var pos = gravityHandler.getPosition(obj);
			obj.style.position='absolute';
			gravityHandler.fromX	= pos.x;
			gravityHandler.fromY	= pos.y;
			gravityHandler.speed	= 25;
		}
		else {
			gravityHandler.fromX	= x;
			gravityHandler.fromY	= y;
			gravityHandler.speed	= 25;
		}
	},
	to: function(obj) {
		gravityHandler.toBox		= obj;
		var pos = gravityHandler.getPosition(obj);
		gravityHandler.toX		= pos.x;
		gravityHandler.toY		= pos.y;
	},
	fly: function(callback) {
		if(!callback) {
			callback="gravityHandler.fromBox.style.display='none';";
		}
		gravityHandler.fromX = Math.round(gravityHandler.fromX+((gravityHandler.toX-gravityHandler.fromX)/gravityHandler.step));
		gravityHandler.fromY = Math.round(gravityHandler.fromY+((gravityHandler.toY-gravityHandler.fromY)/gravityHandler.step));
		gravityHandler.fromBox.style.top = gravityHandler.fromY+'px';
		gravityHandler.fromBox.style.left = gravityHandler.fromX+'px';

		var ds = Math.sqrt(Math.pow(gravityHandler.toX-gravityHandler.fromX,2)+Math.pow(gravityHandler.toY-gravityHandler.fromY,2));
		if(ds>20) {
			setTimeout('gravityHandler.fly("'+callback+'");',gravityHandler.speed);
		}
		else {
			setTimeout(callback,0);
		}
	},
	getPosition: function(e) {
		var left = 0;
		var top  = 0;
		
		while (e.offsetParent) {
			left += e.offsetLeft;
			top  += e.offsetTop;
			e     = e.offsetParent;
		}
		left += e.offsetLeft;
		top  += e.offsetTop;
		return {x:left, y:top};
	},
	delay: function(millis) {
		var date = new Date();
		var curDate = null;
		
		do { curDate = new Date(); }
		while(curDate-date < millis);
	}
};