if (typeof (Controls) == "undefined")
	var Controls = {};
if (typeof (Controls.DOMHelper) == "undefined") {
	Controls.DOMHelper = {};

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.GetCoordinates = function(oElement, bToNearestPositionedElement, stopAtElement) {
		if (typeof (bToNearestPositionedElement) == 'undefined')
			bToNearestPositionedElement = false;
		var X, Y, oParent;
		X = oElement.offsetLeft;
		Y = oElement.offsetTop;
		oParent = oElement;
		while (oParent = oParent.offsetParent) {
			if (typeof (stopAtElement) != "undefined" && stopAtElement != null && stopAtElement == oParent) break;
			if (bToNearestPositionedElement && (oParent.style.position == 'absolute' || oParent.style.position == 'relative' || oParent.style.position == 'fixed')) break;
			if (oParent == null)
				break;
			X += oParent.offsetLeft;
			Y += oParent.offsetTop;
		}
		return new Array(X, Y);
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.RemoveNode = function(oNode) {
		if (document.all)
			oNode.removeNode(true);
		else
			oNode.parentNode.removeChild(oNode);
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.GetNearestPositionedElement = function(node) {
		while (node != null && (node = node.parentNode) != null) {
			if (node == null)
				return null;
			else if (typeof(node.style) != 'undefined' && (node.style.position == 'absolute' || node.style.position == 'relative' || node.style.position == 'fixed'))
				return node;
		}
		return null;
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.GetScrollableParent = function(node) {
		while (node != null && (node = node.parentNode) != null) {
			if (node == null)
				return null;
			else if (node.scrollTop > 0)
				return node;
		}
		return null;
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.GetParentTag = function(node, tagName) {
		while (node != null && (node = node.parentNode) != null) {
			if (node == null)
				return null;
			else if (node.tagName == tagName)
				return node;
		}
		return null;
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.MoveChildren = function(fromNode, toNode) {
		var childrenCount = fromNode.childNodes.length;
		if (childrenCount == 0)
			return;
		for (var i = 0; i < childrenCount; i++) {
			toNode.appendChild(fromNode.childNodes[0]);
		}
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	Controls.DOMHelper.IsParentOf = function(parent, child) {
		if (parent == null || child == null)
			return false;
		if (parent == child) {
			return true;
		} else if (document.all) {
			return parent.contains(child);
		} else {
			var parentNode = child;
			while ((parentNode = parentNode.parentNode) != null) {
				if (parentNode == parent)
					return true;
			}
			return false;
		}
	}
}