<html>
<head>
<script>
function debug(str) {
	console = document.getElementById('console');

	li = document.createElement('li');
	console.appendChild(li);
	li.appendChild(document.createTextNode(str));	
}

function runTests() { 
	if (window.layoutTestController) { 
		layoutTestController.dumpAsText();
	}
	div = document.getElementById('duplicate');
	dup1 = div.parentNode.removeChild(div);

	div = document.getElementById('duplicate');
	if (!div) {
		debug('Failed: getElementById returned null');
		return;
	}
	
	if (div.firstChild.nodeValue != 'This is the second duplicate div') {
		debug('Failed: getElementById returned the wrong div');
		return;
	}
	
	dup2 = div.parentNode.removeChild(div);
	if (document.getElementById('duplicate')) {
		debug('Failed: getElementById did not return null');
		return;
	}
	
	// Now insert the nodes again
	container = document.getElementById('container');
	container.appendChild(dup1);
	container.appendChild(dup2);
	
	if (!document.getElementById('duplicate')) {
		debug('Failed: getElementById returned null');
		return;
	}
	
	debug('Success!');
}
</script>
</head>
<body onLoad="runTests()">
This tests that getElementById works as elements with duplicate ids are added and removed. If the test is successful, the text "success" should be shown below.
<div id="container">
<div id="duplicate">This is the first duplicate div</div>
<div id="duplicate">This is the second duplicate div</div>
</div>
<ul id="console">
</li>
</body>
</html>
