
window.onload = function() {

    //Firefox = addEventListener
    //IE = attachEvent

    var inputList = document.getElementsByTagName("input");
    for (var i = 0; i < inputList.length; i++) {
        if (inputList[i].type == "text") {
			if (inputList[i].id != "txtEmail"){               
				if (inputList[i].addEventListener) {
					inputList[i].addEventListener("keypress", toUpper_OnKeyPress, false);
					inputList[i].addEventListener("blur", toUpper_OnBlur, false);
				}
				else {
					inputList[i].attachEvent("onkeypress", toUpper_OnKeyPress);
					inputList[i].attachEvent("onblur", toUpper_OnBlur);
				}
			}
        }
    }

    var textareaList = document.getElementsByTagName("textarea");
    for (var i = 0; i < textareaList.length; i++) {
        if (textareaList[i].addEventListener) {
            textareaList[i].addEventListener("keypress", toUpper_OnKeyPress, false);
            textareaList[i].addEventListener("blur", toUpper_OnBlur, false);
        }
        else {
            textareaList[i].attachEvent("onkeypress", toUpper_OnKeyPress);
            textareaList[i].attachEvent("onblur", toUpper_OnBlur);
        }
    }
};

function toUpper_OnKeyPress() {
    //---
    //tratamento para funcionar tanto no IE quanto no FF
    //---

    //dados do evento
    var evt = arguments[0] || event;
    //controle que disparou o evento
    var src = evt.srcElement ? evt.srcElement : evt.target;
    //recupera a tecla que foi pressionada
    var key = String.fromCharCode(evt.which || evt.keyCode);

    if (/[a-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ]/.test(key)) {
        //---
        //transforma a tecla pressionada em sua versão em caixa alta
        //o procedimento é diferente para IE e Firefox
        //---

        if (evt.which) {
            if (evt.ctrlKey)
                return true;

            //--------------------
            //no Firefox NÃO é possível mudar a tecla pressionada, 
            //pois a propriedade evt.which é somente leitura
            //O código abaixo insere a tecla digitada transformada
            //na posição atual do cursor
            //--------------------

            //obtém uma referência para o elemento que disparou o evento
            var elem = document.getElementById(src.id);

            //recupera a posição atual do cursor
            var selectionStart = elem.selectionStart;

            //recupera o texto ANTES do cursor
            var text1 = elem.value.slice(0, selectionStart);

            //recupera o texto DEPOIS do cursor
            var text2 = elem.value.slice(selectionStart);

            //atualiza o valor do campo
            elem.value = text1 + key.toUpperCase() + text2;

            //move o cursor para a posição onde se encontrada + 1 caracter
            elem.setSelectionRange(selectionStart + 1, selectionStart + 1);

            //cancela o evento original e encerra o procedimento
            evt.stopPropagation();
            evt.preventDefault();
        }
        else {
            //no IE é possível mudar a tecla pressionada
            evt.keyCode = key.toUpperCase().charCodeAt(0);
            return true;
        }
    }
}

function toUpper_OnBlur() {
    //dados do evento
    var evt = arguments[0] || event;
    //controle que disparou o evento
    var src = evt.srcElement ? evt.srcElement : evt.target;
    //obtém uma referência para o elemento que disparou o evento
    var elem = document.getElementById(src.id);

    elem.value = elem.value.toUpperCase();
}
