/**
 * 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;
		}
	}
	return text;
}



