var XML = new Object();
XML.getAttribute = function(obj, attributeName) {
   var attributeValue = null;
   if(attributeName.toLowerCase() == "class") {
      // pour contourner le bug de IE5.5
      attributeValue = obj.className;
   }
   else {
      attributeValue = obj.getAttribute(attributeName);
   }
   return attributeValue;
};
XML.getParentByTagName = function(obj, tagNameToFind) {
   var root = obj;
   while(root.tagName.toLowerCase() != tagNameToFind) {
      root = root.parentNode;
   }
   return root;
};
XML.getNextChildByTagName = function(obj, tagNameToFind) {
   tagNameToFind = tagNameToFind.toLowerCase();
   var result = obj;
   do
   {
      result = result.nextSibling;
   }
   while(result && result.tagName &&(result.tagName.toLowerCase() != tagNameToFind));
   return result;
};
XML.getFirstChildByTagName = function(obj, tagNameToFind) {
   tagNameToFind = tagNameToFind.toLowerCase();
   var childNodes = obj.childNodes;
   for(var i = 0; i < childNodes.length; i++) {
      if(childNodes[i] && childNodes[i].tagName && childNodes[i].tagName.toLowerCase() == tagNameToFind)
      return childNodes[i];
   }
   return null;
};
XML.getChildrenByTagName = function(obj, tagNameToFind) {
   if(!obj) {
      return new Array();
   }
   //prend en charge les attributs
   var elementParts = tagNameToFind.split("@");
   tagNameToFind = elementParts[0].toLowerCase();
   var attributs = new Array();
   for(var i = 1; i < elementParts.length; i++) {
      var attributElements = elementParts[i].split("=");
      attributs.push(new Array(attributElements[0].toLowerCase(), attributElements[1]));
   }
   var result = new Array();
   var childNodes = obj.childNodes;
   for(var i = 0; i < childNodes.length; i++) {
      if(childNodes[i] && childNodes[i].tagName && childNodes[i].tagName.toLowerCase() == tagNameToFind) {
         //le tag a été trouvé -> contrôle sur les attribut
         var ok = true;
         for(var j = 0; j < attributs.length; j++) {
            var attributeValue = null;
            if(childNodes[i].getAttributeNode) {
               if(childNodes[i].getAttributeNode(attributs[j][0])) {
                  attributeValue = childNodes[i].getAttributeNode(attributs[j][0]).value;
               }
            }
            else {
               attributeValue = XML.getAttribute(childNodes[i], attributs[j][0]);
            }
            ok = false;
            if(attributeValue != null && typeof(attributeValue) != "undefined" && attributeValue == attributs[j][1]) {
               ok = true;
            }
            else {
               ok = false;
               break;
            }
         }
         if(ok) {
            result[result.length] = childNodes[i];
         }
      }
   }
   return result;
};
XML.getChildren = function(obj) {
   var childNodes = obj.childNodes;
   var result = new Array();
   for(var i = 0; i < childNodes.length; i++) {
      if(childNodes[i].nodeType == 1) {
         result.push(childNodes[i]);
      }
   }
   return result;
};
XML.getElementsByXPath = function(xPath, root) {
   var result = new Array();
   if( typeof(root) == "undefined") {
      root = document.getElementsByTagName("body")[0];
   }
   var indexSlash = xPath.indexOf("/");
   if(indexSlash == 0) {
      xPath = xPath.substring(1, xPath.length);
      indexSlash = xPath.indexOf("/");
   }
   var element = "";
   var otherElements = "";
   if(indexSlash != - 1) {
      element = xPath.substring(0, indexSlash);
      otherElements = xPath.substring(indexSlash + 1, xPath.length);
   }
   else {
      element = xPath.substring(0, xPath.length);
   }
   //elements contient les éléments correspondants au 1er elmnt du xPath
   var elements = XML.getChildrenByTagName(root, element);
   if(otherElements != "") {
      for(var i = 0; i < elements.length; i++) {
         result.addAll(XML.getElementsByXPath(otherElements, elements[i]));
      }
   }
   else {
      for(var i = 0; i < elements.length; i++) {
         result.push(elements[i]);
      }
   }
   return result;
};
XML.getIndex = function(domObj) {
	var children=XML.getChildren(domObj.parentNode);
	for(var i=0;i<children.length;i++){
		if(children[i]==domObj){
			return i;
		}
	}
	return -1;
};
