<html>
    <head></head>
    <body>
        <div>
            <input type="text" value="input text"><br>
            <input type="text" value="edittext"><br>
            <input unselectable="on" type="text" value="also edittext"><br>
            <div><span
                onmouseleave="mouseLeft(this)"
                onmouseenter="mouseEntered(this)" >this is selectable text</span></div>
            <div>
                <span unselectable="on">this is nonselectable text</span></div>
            <div id="result" ></div>
        </div>
        <script>
            (function () {
                var lastSel = null;
                document.onselectstart = function () {
                    lastSel = window.event.srcElement;
                }

                window.mouseEntered = function (elem) {
                    if (lastSel === elem) {
                        result.innerHTML += "e";
                        document.onmouseup = null;
                        document.body.onselect = null;
                    }
                }

                window.mouseLeft = function (elem) {
                    if (lastSel === elem) {
                        result.innerHTML += "l";

                        var dup = document.selection.createRange().duplicate();
                        var j = true;

                        document.onmouseup = function () {
                            document.onmouseup = null;
                            document.body.onselect = null;
                        }

                        document.body.onselect = function () {
                            // scripted selection cannot be extended by user...
                            /*if (j) {
                                j = false;
                                result.innerHTML += "p";
                                // document.selection.empty();
                                dup.select();
                                j = true;
                            }*/
                            // cancelable according to MSDN, but doesn't work...
                            result.innerHTML += "s";
                            var e = window.event;
                            result.innerHTML += "[" + e.type + "]";
                            e.returnValue = false;
                            return false;
                        }
                    }
                }
            })();
        </script>
    </body>
</html>