/*
 * anet.dom
 * Objet statique de gestion des noeuds X(HT)ML
 */
anet.dom = new function() {
	/*
	 * isElementNode()
	 * Teste si l'element est bien un noeud DOM.
	 */
	this.isElementNode = function(node) {
		if (!node)
			return (-1);
		return (node.nodeType == 1);
		/*
			1	ELEMENT_NODE
			2	ATTRIBUTE_NODE
			3	TEXT_NODE
			4	CDATA_SECTION_NODE
			5	ENTITY_REFERENCE_NODE
			6	ENTITY_NODE
			7	PROCESSING_INSTRUCTION_NODE
			8	COMMENT_NODE
			9	DOCUMENT_NODE
			10	DOCUMENT_TYPE_NODE
			11	DOCUMENT_FRAGMENT_NODE
			12	NOTATION_NODE
		*/
	};

	/*
	 * show()
	 * Affiche l'element.
	 */
	this.show = function(node) {
		if (node) {
			node.style.visibility = "visible";
			node.style.display = "";
		}
	};

	/*
	 * hide()
	 * Cache l'element.
	 */
	this.hide = function(node) {
		if (node) {
			node.style.visibility = "hidden";
			node.style.display = "none";
		}
	};

	/*
	 * isShowing()
	 * Indique si l'element est affiche ou non.
	 */
	this.isShowing = function(node) {
		if (!node)
			return (false);
		return (node.style.display.toLowerCase() != "none");
	};

	/*
	 * addEventLlistener()
	 * Ajout un handler d'evenement a l'element.
	 * Parametres :
	 * - node	L'element.
	 * - type	Le type d'evenement (click, mousedown, mouseup, mouseover, mouseout, keypress, keydown, keyup, focus, blur)
	 * - func	La fonction de callback
	 * - bubbles	Propagation de l'evenement
	 */
	this.addEventListener = function(target, type, func, bubbles) {
		if (!target)
			return;
		if (document.addEventListener)
			target.addEventListener(type, func, bubbles);
		else if (document.attachEvent)
			target.attachEvent("on" + type, func, bubbles);
		else
			target["on" + type] = func;
	};

	/*
	 * removeEventListener()
	 * Retire un handler d'evenement a l'element.
	 * Parametres :
	 * - node	L'element.
	 * - type	Le type d'evenement (click, mousedown, mouseup, mouseover, mouseout, keypress, keydown, keyup, focus, blur)
	 * - func	La fonction de callback
	 * - bubbles	Propagation de l'evenement
	 */
	this.removeEventListener = function(target, type, func, bubbles) {
		if (!target)
			return;
		if (document.removeEventListener)
			target.removeEventListener(type, func, bubbles);
		else if (document.detachEvent)
			target.detachEvent("on" + type, func, bubbles);
		else
			target["on" + type] = null;
	};

	/*
	 * setOpacity()
	 * Definit l'opacite de l'element.
	 * Parametres :
	 * - node	L'element.
	 * - val	La valeur d'opacite (entre 0 et 1.0)
	 */
	this.setOpacity = function(node, val) {
		if (!node)
			return;
		if (node.filters) {
			try {
				node.filters["alpha"].opacity = val * 100;
			} catch (e) { }
		} else if (node.style.opacity) {
			node.style.opacity = val;
		}
	};

	/*
	 * getX()
	 * Retourne la position X de l'element.
	 */
	this.getX = function(node) {
		if (!node)
			return (0);
		return (parseInt(node.style.left));
	};

	/*
	 * getY()
	 * Retourne la position Y de l'element.
	 */
	this.getY = function(node) {
		if (!node)
			return (0);
		return (parseInt(node.style.top));
	};

	/*
	 * getWidth()
	 * Retourne la largeur de l'element.
	 */
	this.getWidth = function(node) {
		if (!node)
			return (0);
		return (parseInt(node.style.width));
	};

	/*
	 * getHeight()
	 * Retourne la hauteur de l'element.
	 */
	this.getHeight = function(node) {
		if (!node)
			return (0);
		return (parseInt(node.style.height));
	};

	/*
	 * setX()
	 * Definit la position X de l'element.
	 */
	this.setX = function(node, x) {
		if (node)
			node.style.left = x + "px";
	};

	/*
	 * setY()
	 * Definit la position Y de l'element.
	 */
	this.setY = function(node, y) {
		if (node)
			node.style.top = y + "px";
	};

	/*
	 * setWidth()
	 * Definit la largeur de l'element.
	 */
	this.setWidth = function(node, width) {
		if (node)
			node.style.width = width + "px";
	};

	/*
	 * setHeight()
	 * Definit la hauteur de l'element.
	 */
	this.setHeight = function(node, height) {
		if (node)
			node.style.height = height + "px";
	};
};
