function moveElementTo (source, destination, offsetX, offsetY) {
	if (offsetX == undefined)
		offsetX = 0;

	if (offsetY == undefined)
		offsetY = 0;

	var p1 = Position.realOffset(destination);
	var p2 = Position.cumulativeOffset(destination);

	var viewport = getViewport();
	var mysize = {width:Element.getWidth(source), height:Element.getHeight(source)};
	

	// compute the positions considering the scrolling divs that it is contained in
	var posx = viewport.left + p2[0] - p1[0] + offsetX;
	var posy = viewport.top + p2[1] - p1[1] + offsetY;		
	
	// compensate for when it falls off the edge of the screen
	posy = Math.min(posy, viewport.height + viewport.top - mysize.height);
	posx = Math.min(posx, viewport.width + viewport.left - mysize.width);
	
	// if it falls off the right edge, revert it to the left side of object
	//if (viewport.width < posx + mysize.width) {
		//posx -= mysize.width + offsetX;
		//posx = Math.max(0, posx);
	//}
	
	source.style.left = posx + "px";
	source.style.top = posy + "px";
}
function getViewport () {
	return {width:f_clientWidth(), height:f_clientHeight()-5, left:f_scrollLeft(), top:f_scrollTop()};
}
function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

