<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> MouseEvent.relatedTarget for mouseleave 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 = "mouseleave";
            var TARGET, PARENT;

            window.onload = function(e)
            {
                try
                {
                    TARGET = document.getElementById("target");
                    PARENT = document.getElementById("parent");
                    TARGET.addEventListener(EVENT, TestEvent, true);
                }
                catch(ex)
                {
                    FailTest();
                }
            }

            function TestEvent(evt)
            {
                if (evt.type == EVENT && evt.relatedTarget == PARENT)
                {
                    PassTest();
                }
                else
                {
                    FailTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: MouseEvent.relatedTarget for mouseleave event indicates
            the event target a pointing device is entering, if any.
        </h4>

        <pre>
            <div id="parent" style="border:solid 1px green; width:350px; height:100px;">

                <button id="target">BUTTON</button>

            </div>

            Steps:
            1) Move the mouse pointer onto the above button
            2) Then move the mouse pointer out of it
        </pre>

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