<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> MutationEvent.relatedNode for DOMAttrModified Event </title>
        <script type="text/javascript">
            var PassTest = function()
            {
                document.getElementById("testresult").firstChild.data = "PASS";
            }

            var FailTest = function()
            {
                document.getElementById("testresult").firstChild.data = "FAIL";
            }

            var EVENT = "DOMAttrModified";
            var ATTR = "name";
            var TARGET;
            var ExpectResult = ["name", "foo", "style"];
            var ActualResult = [];

            window.onload = function(e)
            {
                try
                {
                    TARGET = document.getElementById("target");
                    TARGET.addEventListener(EVENT, TestEvent, true);

                    TARGET.setAttribute(ATTR, "wow");
                    TARGET.setAttribute("foo", "bar");
                    TARGET.removeAttribute("style");
                }
                catch(ex)
                {
                    FailTest();
                }
            }

            function TestEvent(evt)
            {
                if (evt.type == EVENT)
                {
                    ActualResult.push(evt.relatedNode.nodeName);
                }

                if (ExpectResult.toString() == ActualResult.toString())
                {
                    PassTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: In the case of the DOMAttrModified event, MutationEvent.relatedNode
            indicates the Attr node which was modified, added, or removed.
        </h4>

        <div id="target" name="blah" style="border:solid 1px green; width:350px; height:100px;"></div>

        <p>Test passes if the word "PASS" appears below.</p>
           <div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>