/*
librerias de DOM

Fijarse al final de my_utils, que hay un grupo de metodos que extienden objetos dom, parecen mas practicos y a lo mejor tambien mas eficientes

*/

if(typeof MY_DOM_FILE == 'undefined'){
	MY_DOM_FILE = 1;
}else{
	alert('error de desarrollo. Se carga 2 veces el mismo archivo: my_dom.js');
}
/* isIncest(myParentNode, myChildNode)
* esta funcion detecta que el futuro padre de un nodo 
* no sea a su vez su hijo
* el padre no puede ser a la vez su hijo
*/
function isIncest (myParentNode, myChildNode){
	var myParent = myParentNode.parentNode;
	while(myParent){
		if(myParent.id == myChildNode.id){
			return true;
		}
		myParent =myParent.parentNode;
	}
	return false;
}

/* searchOnTreeLevel (domObj, the_node_name){
* esta funcion busca un nodo en un nivel del arbol,
* si el nombre es igual
* al valor del segundo parametro
* se devuelve ese nodo encontrado, sino false
* se compara una palabra con NodeName
* buscando en los childs del nodo que se pasa
* como primer agrgumento
*/
function searchOnTreeLevel (domObj, the_node_name){
        if(!the_node_name){
            return false;
        }
        the_node_name = the_node_name.toUpperCase;
	var my_childrens = domObj.firstChild;
	while(my_childrens){
// 		alert(my_childrens.nodeName);
		if(my_childrens.nodeName == the_node_name){
			return my_childrens;
		}
		my_childrens = my_childrens.nextSibling;
	}
}

function searchOnDeepLevels  (domObj, the_node_name){// a esta funcion la uso (en melange de paradigmas ;) ) en el metodo extendido de objetos de prototype en: "getInnerNodeByName"
	if(!domObj || typeof domObj != 'object'){
		return;
	}

	if(!the_node_name){
		return false;
	}

	the_node_name = the_node_name.toUpperCase();
	var my_childrens = domObj.firstChild;
	while(my_childrens){

		if(my_childrens.nodeName.toUpperCase() == the_node_name){

			return my_childrens;

		}else{
			var childofmine = searchOnDeepLevels(my_childrens, the_node_name);
			if(childofmine){
				return childofmine;
			}
		}
		my_childrens = my_childrens.nextSibling;
	}
}

function searchIdOnDeepLevels  (domObj, tagName){ // a esta funcion la uso (en melange de paradigmas ;) ) en el metodo extendido de objetos de prototype en: "getInnerNodeByID"
	if(!domObj || typeof domObj != 'object'){
		return;
	} 
	var my_childrens = domObj.firstChild;
	while(my_childrens){
// 		alert(' buscando si nodo: [' + my_childrens.nodeName + '] COMPARADO [' + the_node_name +']');

		if(my_childrens.id && my_childrens.id == tagName){

// 			alert('       son     iguales     !!!!!!!!!');

			return my_childrens;

		}else{
			var childofmine = searchIdOnDeepLevels(my_childrens, tagName);
			if(childofmine){
				return childofmine;
			}
		}
		my_childrens = my_childrens.nextSibling;
	}
}
