function Mover() {
	
	// Methods
	this.Open = open;
	this.IsOpen = isOpen;
	this.Close = close;
	this.MoveTo = moveTo;
	// End Methods
	
	function isOpen(element)
	{
		return (element.style.display == "inline");
	}
	
	// Positions the element in the same location as another element.
	function moveTo(element, destinationElement, offsetLeft, offsetTop)
	{
		if (!offsetLeft) offsetLeft = 0;
		if (!offsetTop) offsetTop = 0;
	
		var top = getTop(destinationElement);
		var left = getLeft(destinationElement);
		var width = getWidth(destinationElement);
		
		left = (left + width/2) - (getWidth(element)/2);
		left = left + offsetLeft;
		
		top = top + offsetTop;
		
		element.style.left = left.toString() + "px";
		element.style.top = top.toString() + "px";
	}
	
	function open(element, top, left) {
		if (!top) top = 100;
		if (!left) left = 200;

		element.style.position = "absolute";	
		element.style.left = left.toString() + "px";
		element.style.top = top.toString() + "px";
		
		element.style.display = "inline";
		
		//hideSelectElements(element);
	}
	
	function close(element) {
		element.style.display = "none";
		showSelectElements();
	}
	
	function getTop(element) {
		var top = 0;
		while (element != document.body) {
			top += element.offsetTop;
			element = element.offsetParent;
		}
		return top;
	}

	function getLeft(element) {
		var left = 0;
		while (element != document.body) {
			left += element.offsetLeft;
			element = element.offsetParent;
		}
		return left;
	}
	
	function getWidth(element) {
		var width = element.offsetWidth;
		return width;
	}
	
	function getHeight(element) {
		var height = element.offsetHeight;
		return height;
	}

	function getScrollOffsetTop(element) {
		var scroll = document.body.scrollTop;
		while (element != document.body) {
			if (element.scrollTop) {
				scroll += element.scrollTop;
			}
			element = element.offsetParent;
		}
		return scroll;
	}

	function getScrollOffsetLeft(element) {
		var scroll = document.body.scrollLeft;
		while (element != document.body) {
			if (element.scrollLeft) {
				scroll += element.scrollLeft;
			}
			element = element.offsetParent;
		}
		return scroll;
	}

	// Determines whether the mouse pointer is currently over the given object 
	function mouseOn(element)
	{
		var left = getPageLeft(element) - getScrollOffsetLeft(element) + 1;
		var top = getPageTop(element) - getScrollOffsetTop(element) + 1;
		var right = left + element.offsetWidth - 1;
		var bottom = top + element.offsetHeight - 1;
		
		if ((event.x > left) && (event.x < right) && 
			(event.y > top) && (event.y < bottom))
		{
			return true; 
		}
		else
		{
			return false; 
		}
	}

	function getPageLeft(element)
	{
		var x = 0;
		do 
		{
			if (element.style.position == 'absolute') 
			{
				return x + element.offsetLeft; 
			}
			else
			{
				x += element.offsetLeft;
				if (element.offsetParent)
				{
					if (element.offsetParent.tagName == 'TABLE')
					{
						if (parseInt(element.offsetParent.border) > 0)
						{
							x += 1;
						}
					}
				}
			}
		}
		while ((element = element.offsetParent));

		return x;
	}

	function getPageTop(element)
	{
		var y = 0;
		do 
		{
			if (element.style.position == 'absolute') 
			{
				return y + element.offsetTop; 
			}
			else
			{
				y += element.offsetTop;
				if (element.offsetParent)
				{
					if (element.offsetParent.tagName == 'TABLE') 
					{
						if (parseInt(element.offsetParent.border) > 0)
						{
							y += 1; 
						}
					}
				}
			}
		}
		while ((element = element.offsetParent));

		return y; 
	}

	function hideSelectElements(element)
	{
		if (document.getElementsByTagName) 
		{
			var elements = document.getElementsByTagName('select'); 
			for (var i = 0; i < elements.length; i++) 
			{
				if (!element.contains(elements[i]))
				{
					elements[i].style.visibility = 'hidden';
				}
			}
		}
	}

	function showSelectElements()
	{
		if (document.getElementsByTagName) 
		{
			var elements = document.getElementsByTagName('select'); 

			for (var i = 0; i < elements.length; i++) 
			{
				elements[i].style.visibility = 'visible'; 
			}
		}
	}

	function overlap(element1, element2)
	{
		var overlap = true;
		var left1 = getPageLeft(element1) - getScrollOffsetLeft(element1);
		var top1 = getPageTop(element1) - getScrollOffsetTop(element1);
		var right1 = left1 + element1.offsetWidth; 
		var bottom1 = top1 + element1.offsetHeight;
		var left2 = getPageLeft(element2) - getScrollOffsetLeft(element1);
		var top2 = getPageTop(element2) - getScrollOffsetTop(element1);
		var right2 = left2 + element2.offsetWidth; 
		var bottom2 = top2 + element2.offsetHeight;
		  
		if (right1 <= left2 || bottom1 <= top2 || 
			left1 >= right2 || top1 >= bottom2) {
			overlap = false; 
		}

		return overlap; 
	}
}
