$.fn.capitalize = function() {
    if ($(this).attr('capitalize') == 'true')
        return;

    $(this).attr('capitalize', 'true');

    $(this).keypress(function(e) {
        if (e.target.createTextRange) {
            var r = document.selection.createRange().duplicate();
            r.moveEnd('character', e.target.value.length);
            if (r.text == '') mstart = e.target.value.length;
            else mstart = e.target.value.lastIndexOf(r.text);
            r.moveStart('character', -e.target.value.length);
            mend = r.text.length;
        } else {
            mstart = e.target.selectionStart;
            mend = e.target.selectionEnd;
        }
        if (e.which > 96 && e.which < 123) {
            e.preventDefault();
            e.stopPropagation();
            z = $(e.target).val();
            front = z.substring(0, mstart);
            back = z.substring(mend);
            $(e.target).val(front + String.fromCharCode(e.which - 32) + back);

            if (e.target.createTextRange) {
                var range = e.target.createTextRange();
                range.move("character", mend + 1);
                range.select();
            } else if (e.target.selectionStart) {
                e.target.focus();
                e.target.setSelectionRange(mend + 1, mend + 1);
            }
        }
    });
}
