function attachFocusEvent() {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type == "text") {
            inputs[i].onfocus = function(e) {
                e = (e) ? e : ((event) ? event : null);
                currentElem = typeof(e.srcElement) == "undefined" ? e.target : e.srcElement;
            }
        }
    }
    var textareas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textareas.length; i++) {
        textareas[i].onfocus = function(e) {
            e = (e) ? e : ((event) ? event : null);
            currentElem = typeof(e.srcElement) == "undefined" ? e.target : e.srcElement;
        }
    }
}

function insertAtCaret(obj, text) {
    if (document.selection) {
        obj.focus();
        var orig = obj.value.replace(/\r\n/g, "\n");
        var range = document.selection.createRange();

        if (range.parentElement() != obj) {
            return;
        }

        range.text = text;

        var actual = tmp = obj.value.replace(/\r\n/g, "\n");

        for (var diff = 0; diff < orig.length; diff++) {
            if (orig.charAt(diff) != actual.charAt(diff)) break;
        }

        for (var index = 0, start = 0;
             tmp.match(text)
                     && (tmp = tmp.replace(text, ""))
                     && index <= diff;
             index = start + text.length
                ) {
            start = actual.indexOf(text, index);
        }
    } else if (obj.selectionStart) {
        var start = obj.selectionStart;
        var end = obj.selectionEnd;

        obj.value = obj.value.substr(0, start)
                + text
                + obj.value.substr(end, obj.value.length);
    }

    if (start != null) {
        setCaretTo(obj, start + text.length);
    } else {
        obj.value += text;
    }
}

function setCaretTo(obj, pos) {
    if (obj.createTextRange) {
        var range = obj.createTextRange();
        range.move('character', pos);
        range.select();
    } else if (obj.selectionStart) {
        obj.focus();
        obj.setSelectionRange(pos, pos);
    }
}
