
module.exports =
{
	/**
	 * Removes all node childs.
	 * 
	 * @param {Node} node The HTML Node
	 */
	removeChilds: function (node)
	{
		var childs = node.childNodes;

		if (childs)
		while (childs.length > 0)
			node.removeChild (childs[0]);
	}

	/**
	 * Removes a node from the document.
	 * 
	 * @param {Node} node The HTML Node
	 */
	,remove: function (node)
	{	
		if (node.parentNode)
			node.parentNode.removeChild (node);
	}

	/**
	 * Replaces the node child/s with another one.
	 * 
	 * @param {Node} node The HTML Node
	 * @param {Node} child The new child or %null to set an empty node
	 */
	,setChild: function (node, child)
	{
		this.removeChilds (node);

		if (child)
			node.appendChild (child);
	}

	/**
	 * Replaces the node text/childs with text.
	 * 
	 * @param {Node} node The HTML Node
	 * @param {Node} child The new node text or %null for no text
	 */
	,setText: function (node, text)
	{
		Vn.Node.removeChilds (node);

		if (text)
			node.appendChild (
				node.ownerDocument.createTextNode (text));
	}
	
	/**
	 * Adds a class to the node CSS classes. Note that this
	 * function doesn't check if the node already has the class.
	 * 
	 * @param {Node} node The HTML Node
	 * @param {string} className The CSS class name
	 */
	,addClass: function (node, className)
	{
		node.className = className +' '+ node.className;
	}

	/**
	 * Removes a class from the node CSS classes. This functions
	 * removes all ocurrences of the class from the node.
	 * 
	 * @param {Node} node The HTML Node
	 * @param {string} className The CSS class name
	 */
	,removeClass: function (node, className)
	{
		var index = 0;
		var found = false;
		var classes = node.className.split (' ');
		
		while ((index = classes.indexOf (className, index)) != -1)
		{
			classes.splice (index, 1);
			found = true;
		}
		
		if (found)
			node.className = classes.join (' ');
	}
	
	/**
	 * Hides the node from the document.
	 * 
	 * @param {Node} node The HTML Node
	 */
	,hide: function (node)
	{
		node.style.display = 'none';
	}
	
	/**
	 * Shows a hidden node.
	 * 
	 * @param {Node} node The hidden HTML Node
	 */
	,show: function (node)
	{
		node.style.display = 'block';
	}
};
