<!DOCTYPE html>
<html>
<head>
    <title>Touch Adjustment : Disabled form elements - bug 92093</title>
    <script src="../resources/js-test-pre.js"></script>
    <script src="resources/touchadjustment.js"></script>
    <style type="text/css">
        #sandbox {
            position: absolute;
            left: 0px;
            top: 0px;
            width: 600px;
            height: 600px;
        }
    </style>
</head>

<body id="body">

<div id=sandbox>
    <form id="form">
        <label for="input1" id="label1">Label</label> <input type="text" id="input1" value="Disabled input" disabled></input><br>
        <label for="input2" id="label2">Label</label> <input type="text" id="input2" value="Enabled input"></input>
    </form>
</div>

<p id='description'></p>
<div id='console'></div>

<script>
    // Set up shortcut access to elements
    var e = {};
    ['sandbox', 'form,', 'label1', 'label2', 'input1', 'input2'].forEach(function(a) {
        e[a] = document.getElementById(a);
    });

    function testDirectTouches()
    {
        // Quick sanity check.
        debug('Test we can hit the form elements directly.');

        testTouchPoint(touchPoint(16, 8, 5), null);
        testTouchPoint(touchPoint(16, 38, 5), e.label2);
        testTouchPoint(touchPoint(60, 8, 5), null);
        testTouchPoint(touchPoint(60, 38, 5), e.input2);
    }

    function testAdjustedTouches()
    {
        debug('Test indirect touches are adjusted to the enabled form elements.');
        testTouchPoint(touchPoint(16, 25, 10), e.label2);
        testTouchPoint(touchPoint(16, 20, 15), e.label2);
        testTouchPoint(touchPoint(16, 16, 20), e.label2);

        testTouchPoint(touchPoint(60, 25, 10), e.input2);
        testTouchPoint(touchPoint(60, 20, 15), e.input2);
        testTouchPoint(touchPoint(60, 16, 20), e.input2);
    }

    function runTests()
    {
        if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestClickableNode) {
            description(document.title);
            testDirectTouches();
            testAdjustedTouches();
            e.sandbox.style.display = 'none';
        }
    }

    runTests();
</script>

<script src="../resources/js-test-post.js"></script>

</body>
</html>
