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

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

            var EVENT1 = "DOMSubtreeModified";
            var EVENT2 = "DOMNodeRemoved";
            var TARGET;
            var HELPER;
            var ActualResult = [];
            var ExpectResult = [EVENT2, EVENT1];

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

                    HELPER = document.getElementById("helper");
                    TARGET.removeChild(HELPER);
                }
                catch(ex)
                {
                    FailTest();
                }
            }

            function TestEvent(evt)
            {
                ActualResult.push(evt.type);

                if (ExpectResult.toString() == ActualResult.toString())
                {
                    PassTest();
                }

                if (2 < ActualResult.length)
                {
                    FailTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description:  DOMSubtreeModified event fires after any other events
            caused by the mutation(s) have occurred.
        </h4>

        <span id="parent">
            <div id="target" style="border:solid 1px green; width:200px; height:50px">
                <input id="helper">
            </div>
        </span>
        <p>Test passes if the word "PASS" appears below.</p>
        <div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>