<!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.layoutTestController)
        layoutTestController.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");
    var text = d.createTextNode("three");
    attr.appendChild(text);
    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>
