<html>
    <head>
        <style type="text/css" media="screen">
          html {
            zoom: 120%;
          }
        </style>
        <script>
            function setup() {
                var results = document.createElement('div');
                results.id = "res";
                results.appendChild(document.createTextNode("Results:"));
                document.body.appendChild(results);
            }
            function test() {
                setup();
                
                mouseDownOnSelect("sl1", 1, false, false);                
                var expectedSelectionResults = new Array(false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false);
                testResults("sl1", expectedSelectionResults, 1);

                mouseDownOnSelect("sl1", 6, false, false);                
                expectedSelectionResults = new Array(false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false);
                testResults("sl1", expectedSelectionResults, 2);
            }
            
            function mouseDownOnSelect(selId, index, shift, meta) {
                var sl = document.getElementById(selId);
                var itemHeight = 14 * 1.2;
                var borderPaddingTop = 20 * 1.2;
                var borderPaddingLeft = 20 * 1.2;
                var y = index * itemHeight - window.pageYOffset + borderPaddingTop + itemHeight / 2;
                
                var clickX = sl.offsetLeft + borderPaddingLeft + 5;
                var clickY = sl.offsetTop + y;
                var event = document.createEvent("MouseEvent");
                event.initMouseEvent("mousedown", true, true, document.defaultView, 1, clickX, clickY, clickX, clickY, false, false, shift, meta, 0, document);
                sl.dispatchEvent(event);
            }
            
            function testResults(selId, expectedArr, testNum) {
                var sl = document.getElementById(selId);
                var res = document.getElementById('res');
                var resultsArr = new Array(sl.options.length);
                
                var i;
                for (i=0; i < sl.options.length; i++) {
                    resultsArr[i] = sl.options[i].selected;
                }
                var successString = "Failed";
                var success = false;
                if (expectedArr.join() == resultsArr.join()) {
                    success = true;
                    successString = "Passed";
                }
                
               log("Test " + testNum + " " + successString);
                if (!success) {
                    log("<pre>     Expected: " + expectedArr.join() + "<br>" + "     Actual: " + resultsArr.join() + "</pre>");
                }
            }
            
            function log(msg) {
                var r = document.getElementById('res');
                r.innerHTML = r.innerHTML + "<br>" + msg;
            }
        </script>
    </head>
    <body onload="test()">

    <select id="sl1" multiple style="height: 135px; border: 10px solid; padding: 10px;">
        <option>one</option>
        <option>two</option>
        <option>three</option>
        <option>four</option>
        <option>five</option>
        <option>six</option>
        <option>seven</option>
        <option>eight</option>
        <option>nine</option>
        <option>ten</option>
        <option>eleven</option>
        <option>twelve</option>
        <option>thirteen</option>
        <option>fourteen</option>
        <option>fifteen</option>
        <option>sixteen</option>
        <option>seventeen</option>
    </select>
    
    </body>
</html>
