whole_func_string: function createBoundaryTextRange(boundaryPosition, isStart) {
          var boundaryNode, boundaryParent, boundaryOffset = boundaryPosition.offset;
          var doc = dom.getDocument(boundaryPosition.node);
          var workingNode, childNodes, workingRange = doc.body.createTextRange();
          var nodeIsDataNode = dom.isCharacterDataNode(boundaryPosition.node);
  
          if (nodeIsDataNode) {
              boundaryNode = boundaryPosition.node;
              boundaryParent = boundaryNode.parentNode;
          } else {
              childNodes = boundaryPosition.node.childNodes;
              boundaryNode = (boundaryOffset < childNodes.length) ? childNodes[boundaryOffset] : null;
              boundaryParent = boundaryPosition.node;
          }
  
          // Position the range immediately before the node containing the boundary
          workingNode = doc.createElement("span");
  
          // Making the working element non-empty element persuades IE to consider the TextRange boundary to be within the
          // element rather than immediately before or after it, which is what we want
          workingNode.innerHTML = "&#feff;";
  
          // insertBefore is supposed to work like appendChild if the second parameter is null. However, a bug report
          // for IERange suggests that it can crash the browser: http://code.google.com/p/ierange/issues/detail?id=12
          if (boundaryNode) {
              boundaryParent.insertBefore(workingNode, boundaryNode);
          } else {
              boundaryParent.appendChild(workingNode);
          }
  
          workingRange.moveToElementText(workingNode);
          workingRange.collapse(!isStart);
  
          // Clean up
          boundaryParent.removeChild(workingNode);
  
          // Move the working range to the text offset, if required
          if (nodeIsDataNode) {
              workingRange[isStart ? "moveStart" : "moveEnd"]("character", boundaryOffset);
          }
  
          return workingRange;
      }
func_code_string: function createBoundaryTextRange(boundaryPosition, isStart) {
          var boundaryNode, boundaryParent, boundaryOffset = boundaryPosition.offset;
          var doc = dom.getDocument(boundaryPosition.node);
          var workingNode, childNodes, workingRange = doc.body.createTextRange();
          var nodeIsDataNode = dom.isCharacterDataNode(boundaryPosition.node);
  
          if (nodeIsDataNode) {
              boundaryNode = boundaryPosition.node;
              boundaryParent = boundaryNode.parentNode;
          } else {
              childNodes = boundaryPosition.node.childNodes;
              boundaryNode = (boundaryOffset < childNodes.length) ? childNodes[boundaryOffset] : null;
              boundaryParent = boundaryPosition.node;
          }
  
          // Position the range immediately before the node containing the boundary
          workingNode = doc.createElement("span");
  
          // Making the working element non-empty element persuades IE to consider the TextRange boundary to be within the
          // element rather than immediately before or after it, which is what we want
          workingNode.innerHTML = "&#feff;";
  
          // insertBefore is supposed to work like appendChild if the second parameter is null. However, a bug report
          // for IERange suggests that it can crash the browser: http://code.google.com/p/ierange/issues/detail?id=12
          if (boundaryNode) {
              boundaryParent.insertBefore(workingNode, boundaryNode);
          } else {
              boundaryParent.appendChild(workingNode);
          }
  
          workingRange.moveToElementText(workingNode);
          workingRange.collapse(!isStart);
  
          // Clean up
          boundaryParent.removeChild(workingNode);
  
          // Move the working range to the text offset, if required
          if (nodeIsDataNode) {
              workingRange[isStart ? "moveStart" : "moveEnd"]("character", boundaryOffset);
          }
  
          return workingRange;
      }
func_documentation_string: Returns a TextRange representing the boundary of a TextRange expressed as a node and an offset within that node. This function started out as an optimized version of code found in Tim Cameron Ryan's IERange (http://code.google.com/p/ierange/)