<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> Cancelling compositionstart Event via Event.preventDefault() </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 = "compositionstart";
            var TARGET;

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

            function TestEvent(evt)
            {
                if (evt.type == EVENT)
                {
                    evt.preventDefault();
                }

                if (evt.type == "keyup")
                {
                    if (TARGET.value == "")
                    {
                        PassTest();
                    }
                    else
                    {
                        FailTest();
                    }
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: The default action of compositionstart event is to launch the appropriate text
            composition system. If this event is canceled, the text composition system must not be launched.
        </h4>

        <pre>
            <input id="target" value=""/>

            Steps:
            1) Open Japanese Microsoft IME and select Hiragana input method
            2) Click at the above textbox and then type 'a' using keyboard
        </pre>

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