/**
 * DomUtils: Dom Document manipulation utility functions.
 *
 * @author tam
 */

function DomUtils()
{}


/**
 * Returns an element by it's id or null if no such element.
 */
DomUtils.byId = function(_elementId)
{
	return document.getElementById(_elementId);
}

/**
 * Sets the element's (<code>_elementId</code>) display style attribute;
 * for <code>_display</code> argument <code>true</code> or <code>false</code>
 * is expected.
 */
DomUtils.setDisplay = function(_elementId, _display)
{
	var elem = DomUtils.byId(_elementId);
	if(elem)
	{
		elem.style.display = _display ? '' : 'none';
	}
}

/**
 * Sets the element's (<code>_elementId</code>) display style attribute as
 * follows: if the element is currently not displayed (i.e. display == 'none')
 * the display style attribute is set to the value of argument
 * <code>_displayStyle</code>; otherwise the display style is set to 'none'.
 */
DomUtils.toggleDisplay = function(_elementId, _displayStyle)
{
	var elem = DomUtils.byId(_elementId);
	if(elem)
	{
		if(elem.style.display == 'none')
		{
			elem.style.display = _displayStyle;
		}
		else
		{
			elem.style.display = 'none';
		}
	}
}

/**
 * Returns the text content of a given node.
 */
DomUtils.textContent = function(_node, _deep)
{
	var text = "";
	if(_deep && _node.textContent) {
		return _node.textContent;
	}
	for(var i = 0; i < _node.childNodes.length; i++) {
		var ccn = _node.childNodes[i];
		switch(ccn.nodeType) {
		case 3:
		case 4:
			text += ccn.nodeValue;
			break;
		case 5:
			text += "&"+ccn.nodeName+";";
			break;
		case 1:
			if(_deep) {
				text += DomUtils.textContent(ccn, _deep);
			}
			break;
		}
	}
	//console.log(text);
	return text;
}


