function replaceElementsWithXPaths(things) {

var thangs = [];
for (var i = 0; i < things.length; ++i) {
  thangs = thangs.concat(replaceElementWithXPaths(things[i]));
}
return thangs;

}

function xpathForElement(node) {

if (!node.tagName) return '';
var xpath = '/' + node.tagName.toLowerCase();
if (node.parentNode) {
  xpath = xpathForElement(node.parentNode) + xpath;
  var sameTags = childrenWithTagName(node.parentNode, node.tagName);
  if (sameTags.length > 1) {
    xpath += '[' + (sameTags.indexOf(node) + 1) + ']';
  }
}
return xpath;

}

function childrenWithTagName(element, tagName) {

if (!element.children) return [];
var children = [];
for (var i = 0; i < element.children.length; ++i) {
  if (element.children[i].tagName == tagName) {
    children.push(element.children[i]);
  }
}
return children;

}

function replaceElementWithXPaths(el) {

if (el instanceof Array) {
  return [].concat.apply([], el.map(replaceElementWithXPaths));
} else if (typeof(el.tagName) == 'string') {
  return xpathForElement(el);
} else if (typeof(el.get) == 'function') {
  return replaceElementWithXPaths(el.get());
} else {
  return el;
}

}

module.exports.replaceElementsWithXPaths = replaceElementsWithXPaths;