code: function getRoute(node) {
  	var id = "";
  
  	var parent = node.parentNode;
  	var index = -1;
  
  	if(!parent) {
  		return {id:"0"};
  	}
  
  	var child = parent.firstChild;
  	while(child) {
  		index++;
  		if(child === node) {
  			break;
  		}
  		child = child.nextSibling;
  	}
  
  	// ARG!
  
  	var parentInfo = parent.nodeType === 9 ? {id:""} :
  		getCachedInfo(parent) || getRoute(parent);
  
  	var parentId = parentInfo.id;
  
  	id = (parentId ? parentId + SEPARATOR : "") + index;
  
  	var routeInfo = {
  		id: id,
  		branch: getBranch(index, node, parentInfo.branch)
  	};
  	cache(node, routeInfo);
  
  	return routeInfo;
  }
docs: Generates the route for a particular node, caching the intermediate nodes
  along the way.