//*************************************************************
//
// Função desenvolvida por Adriano de Sousa Rocha
// arochax@hotmail.com
//
// Descricao: Valida a digitação de um número de telefone 
//            em um INPUT formatando-o
//
// Exemplo de utilização: (+99-99-9999-9999)
//
// <INPUT onkeypress="return FormatarTelefone(this);">
//
//*************************************************************

var _bTextoInputSelecionado = 1;
var _bInicializadoFormatarTelefone = 0;

function FormatarTelefone(Campo) {
	var strTelefone = Campo.value;
	var reLimparNumero = new RegExp("\\D", "g"); // \\D = Localiza <> 0-9
	                                             //   g = pesquisa global

	//Limpa número deixando apenas os dígitos
	strTelefone = strTelefone.replace(reLimparNumero, "");

    //Se evento não for onblur
    if (event.keyCode != 0) {
		//valida o tamanho máximo
		if ((strTelefone.length == 12) && (_bTextoInputSelecionado == 0)) {
			return false;
		}
		else {
			//Permite a digitação de apenas números
			if (!(event.keyCode >= 48 && event.keyCode <= 57)) {
				return false;
			}

			if (_bTextoInputSelecionado == 1) {
				strTelefone = "";
				_bTextoInputSelecionado = 0;
			}
		    
			//Adiciona o número digitado
			strTelefone += String.fromCharCode(event.keyCode);
       		event.keyCode = 0;
		}
	}
	
	switch (strTelefone.length) {
		case 6:
		case 7:
			// "999-999" ou "999-9999"
			Campo.value = strTelefone.substr(0, 3) + "-" + strTelefone.substr(3)
			break;
		case 8:
			// "9999-9999"
			Campo.value = strTelefone.substr(0, 4) + "-" + strTelefone.substr(4)
			break;
		case 9:
			// "99-999-9999"
			Campo.value = strTelefone.substr(0, 2) + "-" + strTelefone.substr(2, 3) + "-" + strTelefone.substr(5)
			break;
		case 10:
			// "99-9999-9999"
			Campo.value = strTelefone.substr(0, 2) + "-" + strTelefone.substr(2, 4) + "-" + strTelefone.substr(6)
			break;
		case 11:
			// "+99-99-999-9999"
			Campo.value = "+" + strTelefone.substr(0, 2) + "-" + strTelefone.substr(2, 2) + "-" + strTelefone.substr(4, 3) + "-" + strTelefone.substr(7)
			break;
		case 12:
			// "+99-99-9999-9999"
			Campo.value = "+" + strTelefone.substr(0, 2) + "-" + strTelefone.substr(2, 2) + "-" + strTelefone.substr(4, 4) + "-" + strTelefone.substr(8)
			break;
		default :
			Campo.value = strTelefone;
	}
	
	if (_bInicializadoFormatarTelefone == 0) {
		_bInicializadoFormatarTelefone = 1;
		
		for (iCont = 0; iCont < Campo.form.elements.length; iCont++) {
			if (Campo.form.elements[iCont].onkeypress != undefined) {
				sEvento = Campo.form.elements[iCont].onkeypress.toString();
				if (sEvento.indexOf("FormatarTelefone") > -1) {
					//Atribui o mesmo evento para formatação ao sair do campo
					if (Campo.form.elements[iCont].onblur == null) 
						Campo.form.elements[iCont].onblur = Campo.onkeypress;
						
					//Atribui uma função ao OnSelect e OnKeyDown
					Campo.form.elements[iCont].onselect = _OnSelect;
					Campo.form.elements[iCont].onkeydown = _OnKeyDown;
				}
			}
		}
	}
}

function _OnSelect() {
	_bTextoInputSelecionado = 1;
}

function _OnKeyDown() {
	//Se pressionadas as setas...
	if (event.keyCode >= 37 && event.keyCode <= 40) {
		_bTextoInputSelecionado = 0;
	}
}