function RoundAllCorners()
{
	RoundRoot(document.body);
}

function Node(elem, isBaseElement)
{
	this.Element = elem;
	this.IsBaseElement = isBaseElement;
}

function RoundRoot(root)
{
	var inline = false;
	var nodeList = new Array();
	var children = root.childNodes;
	for (var idx = 0; idx < children.length; idx++)
	{
		var isBaseElement = true;
		var elem = children[idx];
		if (elem.style && elem.style.visibility != 'hidden')
		{
			var tag = elem.tagName;
			if (tag == 'INPUT')
			{
				var type = elem.type.toLowerCase();
				if (type == 'text' || type == 'password')
				{
					isBaseElement = false;
				}
			}
			else if (tag == 'SELECT')
			{
				isBaseElement = false;
			}
		}

		if (!isBaseElement)
		{
			elem.isRound = true;
			elem = CreateRoundElement(elem);
		
			var pos = elem.style.position.toLowerCase();
			if (pos != 'absolute' && pos != 'relative')
			{
				inline = true;
			}
		}

		nodeList[nodeList.length] = new Node(elem, isBaseElement);
	}

	if (inline)
	{
		var div = document.createElement('div');
		div.className = 'rCon';
		for (var idx = 0; idx < nodeList.length; idx++)
		{
			var node = nodeList[idx];
			var elem = node.Element;
			if (!elem.tagName)
			{
				elem = document.createElement('div');
				elem.appendChild(node.Element);
				node.IsBaseElement = false;
			}
			div.appendChild(elem);
		}
		root.appendChild(div);

		var width = 0;
		for (var idx = 0; idx < div.childNodes.length; idx++)
		{
			var elem = div.childNodes[idx];
			width += elem.offsetWidth;
		}
		div.style.width = width + 'px';
	}

	for (var idx = 0; idx < nodeList.length; idx++)
	{
		var node = nodeList[idx];
		if (node.IsBaseElement)
		{
			var elem = node.Element;
			if (elem.firstChild)
			{
				RoundRoot(elem);
			}
		}
	}
}

function CreateRoundElement(elem)
{
	var root = elem.parentNode;

	var div = document.createElement('div');
	div.className = 'rCon';
	div.style.position = elem.style.position;
	elem.style.position = '';
	div.style.top = elem.style.top;
	elem.style.top = '';
	div.style.left = elem.style.left;
	elem.style.left = '';
	div.innerHTML = '<div class="r1"></div><div class="r2"></div><div class="r3"></div><div class="r4"></div><div class="r5"></div><div class="r4"></div><div class="r3"></div><div class="r2"></div><div class="r1"></div>';
	var children = div.childNodes;
	for (var cIdx = 0; cIdx < children.length; cIdx++)
	{
		var child = children[cIdx];
		child.style.backgroundColor = elem.style.backgroundColor;
		child.style.borderColor = elem.style.borderColor;
	}

	var bMid = children[4];
	bMid.style.backgroundColor = elem.style.backgroundColor;
	bMid.style.borderColor = elem.style.borderColor;
	var midWidth = elem.offsetWidth;
	if (elem.tagName == 'INPUT')
	{
		midWidth -= 8;
		if (midWidth <= 0)
		{
			midWidth = elem.offsetWidth;
		}
	}
	bMid.style.width = midWidth + 'px';

	var next = elem.nextSibling;
	elem.style.width = bMid.style.width;
	elem.style.borderWidth = '0px';
	elem.style.height = '20px';
	bMid.appendChild(elem);
	
	div.style.width = (midWidth + 10) + 'px';
	if (next)
	{
		root.insertBefore(div, next);
	}
	else
	{
		root.appendChild(div);
	}
	return div;
}
