<html> 
<head>
<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
<title>Traversal Test</title> 
</head> 
<body>
<div id="test">
<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
</div>
<div style="font-family: Courier; font-size: 14;">
<script>
if (window.layoutTestController)
    layoutTestController.dumpAsText();

var root = document.getElementById('test');

function testNodeFiter(n)
{
    if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
    return NodeFilter.FILTER_SKIP;
}

var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
for (i = 0; i < 4; i++)
    it.nextNode();
document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));

// remove node 'E'
document.write("<p>remove node 'E'");
root.removeChild(document.getElementById('E'));
document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));

// insert new node 'X' before 'F'
document.write("<p>insert new node 'X' before 'F'");
var X = document.createElement('SPAN');
X.setAttribute('ID', 'X');
root.insertBefore(X, document.getElementById('F'));
document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));

// move node 'I' before 'X'
document.write("<p>move node 'I' before 'X'");
var I = document.getElementById('I');
root.removeChild(I);
root.insertBefore(I, X);
document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
</script>
</div>
</body>
</html>
