<html id="HTML">
<body id="Body">

<p>This tests the target, currentEvent, and phase of a complete trace through event bubbling and capture.</p>
<pre id="console"></pre>

<br>
<div id="Parent" style="background-color:lightblue;border:1px solid #000000; padding: 10px; margin: 10px;">
  Parent
  <div id="Self" style="background-color:blue; border:1px solid black; padding: 10px; margin: 10px;">
    Self
  </div>
</div>

<script>
    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    function log(msg)
    {
        document.getElementById('console').appendChild(document.createTextNode(msg + "\n"));
    }

    function traceEvent(event)
    {
        function targetString(target)
        {
            if (target instanceof window.Element)
                return target.toString() + " (ID: " + target.id + ")";
            return target.toString();
        }

        function phaseString(eventPhase)
        {
            if (eventPhase == Event.CAPTURING_PHASE)
                return "CAPTURE";
            else if (eventPhase == Event.BUBBLING_PHASE)
                return "BUBBLE";
            else if (eventPhase == Event.AT_TARGET)
                return "AT TARGET";
        }

        var target = targetString(event.target);
        var currentTarget = targetString(event.currentTarget);
        var phase = phaseString(event.eventPhase);

        log("Target = " + target + "; Phase = " + phase + "; CurrentTarget = " + currentTarget + ";");
    }

    window.addEventListener("customevent", traceEvent, true);
    document.addEventListener("customevent", traceEvent, true);
    document.getElementById("HTML").addEventListener("customevent", traceEvent, true);
    document.getElementById("Body").addEventListener("customevent", traceEvent, true);
    document.getElementById("Parent").addEventListener("customevent", traceEvent, true);
    document.getElementById("Self").addEventListener("customevent", traceEvent, true);

    window.addEventListener("customevent", traceEvent, false);
    document.addEventListener("customevent", traceEvent, false);
    document.getElementById("HTML").addEventListener("customevent", traceEvent, false);
    document.getElementById("Body").addEventListener("customevent", traceEvent, false);
    document.getElementById("Parent").addEventListener("customevent", traceEvent, false);
    document.getElementById("Self").addEventListener("customevent", traceEvent, false);

    var theEvent = document.createEvent("Event");
    theEvent.initEvent("customevent", true, true);
    document.getElementById("Self").dispatchEvent(theEvent);
</script>
</body>
</html>
