/* Returns first recursive child of specified node name, such as "td", else
 * null.
 *
 * node - Where to start the search.
 * name - Node name to look for.
 */
function dom_get_child_by_name(node, name) {
	name = name.toUpperCase();
	if (!node) {
		return null;
	}
	if (node.nodeName == name) {
		return node;
	}
	node = node.firstChild;
	for (;node; node = node.nextSibling) {
		var child = dom_get_child_by_name(node, name);
		if (child) {
			return child;
		}
	}
	return child;
}

/* Returns first parent node of specified name, such as 'tr'.
 */
function dom_get_parent_by_name(node, name) {
	name = name.toUpperCase();
	for (; node && node.nodeName != name; node = node.parentNode) {
		// Do nothing
	}
	return node;
}

/* Returns next sibling of specified type, such as 'td'.
 */
function dom_get_next_sibling_by_name(node, name) {
	name = name.toUpperCase();
	for (node = node.nextSibling; node && node.nodeName != name;
	    node = node.nextSibling) {
		// Do nothing
	}
	return node;
}

/* Returns previous sibling of specified type, such as 'td'.
 */
function dom_get_previous_sibling_by_name(node, name) {
	name = name.toUpperCase();
	for (node = node.previousSibling; node && node.nodeName != name;
	    node = node.previousSibling) {
		// Do nothing
	}
	return node;
}

