<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.com" xmlns:bar="http://bar.com" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XMLSerializer() namespace test</title>
<script>
window.addEventListener("load", function() {
    if (window.testRunner)
        testRunner.dumpAsText();
    
    var xs = new XMLSerializer();
    var content = document.getElementById('content');
    content.firstChild.nodeValue = xs.serializeToString(document.getElementById('input'));

    // Original test
    var d = document.implementation.createDocument("urn:foo-ns", "foo:root", null);
    if (!d.documentElement) {
        // This shouldn't happen, since DomImplementation.createDocument
        // is supposed to create the root element.  But in Safari, it's required.
        d.appendChild(d.createElementNS("urn:foo-ns", "foo:root"));
    }
    var root = d.documentElement;
    root.setAttributeNS("urn:foo-ns", "foo:type", "test")
    
    var c = d.createElementNS(null, "child");
    root.appendChild(c);
    
    c.setAttributeNS("urn:foo-ns", "foo:name", "one");
    c.setAttributeNS("urn:bar-ns", "bar:name", "two");
    var attr = d.createAttributeNS(null, "name");
    attr.value += "three";
    c.setAttributeNode(attr);
    
    window.alert("foo:name is " + c.getAttributeNS("urn:foo-ns", "name") + " and should be one");
    window.alert("bar:name is " + c.getAttributeNS("urn:bar-ns", "name") + " and should be two");
    window.alert("name is " + c.getAttributeNS(null, "name") + " and should be three");
    window.alert("node is " + d.getElementsByTagNameNS(null, "child").item(0).nodeName + " and should be child");
    window.alert(xs.serializeToString(d));
}, false);
</script>
</head>
<body>
<pre id="content">foo</pre>
<div id="input">
    <div>
        <foo:node xmlns="http://baz.com" foo:name="foo_name" bar:name="bar_name">
            <node foo:name="foo_name">
                <bar:node xmlns:bar="http://bar2.com"/>
            </node>
        </foo:node>
    </div>
    <bar:node>
        <br />
    </bar:node>
</div>
</body>
</html>
