/****************************************
 * Title: Mascara
 * Description: Máscara Global
 * Copyright: Copyright (c) 2008
 * Company: Unimed Centro-Oeste e Tocantins
 * @author Eduardo C. Rangel
 * @version 1.0
 ***************************************/

//Função que adiciona máscara a um campo CNPJ.
function mascararCnpj(campoCnpj,idDoCampo) {
	var cnpj = campoCnpj.value;
	if (cnpj.length == 2) {
		cnpj = cnpj + '.';
		idDoCampo.value = cnpj;
		return true;              
	}
	if (cnpj.length == 6) {
		cnpj = cnpj + '.';
		idDoCampo.value = cnpj;
		return true;
	}
	if (cnpj.length == 10) {
		cnpj = cnpj + '/';
		idDoCampo.value = cnpj;
		return true;
	}
	if (cnpj.length == 10) {
		cnpj = cnpj + '/';
		idDoCampo.value = cnpj;
		return true;
	}
	if (cnpj.length == 15) {
		cnpj = cnpj + '-';
		idDoCampo.value = cnpj;
		return true;
	}
}

//Função que adiciona máscara a um campo CPF.
function mascararCpf(campoCpf,idDoCampo) {
	var cpf = campoCpf.value;
	if (cpf.length == 3) {
		cpf = cpf + '.';
		idDoCampo.value = cpf;
		return true;              
	}
	if (cpf.length == 7) {
		cpf = cpf + '.';
		idDoCampo.value = cpf;
		return true;
	}
	if (cpf.length == 11) {
		cpf = cpf + '-';
		idDoCampo.value = cpf;
		return true;
	}
}

//Função que adiciona máscara a um campo data.
function mascararData(campoData, idDoCampo) {
	var data = campoData.value;
	if (data.length == 2) {
		data = data + '/';
		idDoCampo.value = data;
		return true;              
	}
	if (data.length == 5) {
		data = data + '/';
		idDoCampo.value = data;
		return true;
	}
}

function mascararMesAno(campoData, idDoCampo) {
	var data = campoData.value;
	if (data.length == 2) {
		data = data + '/';
		idDoCampo.value = data;
		campoData.value = data;
		return true;
	}	
}


//Função que adiciona máscara a um campo telefone ou celular.
function mascararTelefone(campoTelefone, idDoCampo) {
	var telefone = campoTelefone.value;
	if (telefone.length == 4) {
		telefone = telefone + '-';
		idDoCampo.value = telefone;
		return true;              
	}
}


//Ponto de partida para as outras functions
function mascara(obj,mascara){		
	var texto = obj.value;
	var max = obj.maxLength;

	substitui();
	
	if(limparEntrada(obj).length > max-1){
		event.keyCode = 0;
		return;
	}	
	
	if( buscaDigito(mascara,'*') != -1){//Utiliza Letra
		mascaraLetra(obj,substituiPorLazanha(mascara));
	}
	else if( buscaDigito(mascara,'#') != -1){//Utiliza Lazanha		
		mascaraLazanha(obj,mascara);
	}
	else if( buscaDigito(mascara,'9') != -1){//Utiliza Digito	
		mascaraDigito(obj,substituiPorLazanha(mascara));
	}
	
	return;
}

function substitui() {	
	switch(event.keyCode) {	
		//ç ---> C
		case 199: event.keyCode = 67;
			break;
		//Ç ---> C
		case 231: event.keyCode = 67;
			break;		
			
			
		//À ---> A
		case 192: event.keyCode = 65;
			break;
		//Á ---> A
		case 193: event.keyCode = 65;
			break;
		//Â ---> A
		case 194: event.keyCode = 65;
			break;
		//Ã ---> A
		case 195: event.keyCode = 65;
			break;
		//Ä ---> A
		case 196: event.keyCode = 65;
			break;
						
		//à ---> A
		case 224: event.keyCode = 65;
			break;
		//á ---> A
		case 225: event.keyCode = 65;
			break;
		//â ---> A
		case 226: event.keyCode = 65;
			break;
		//ã ---> A
		case 227: event.keyCode = 65;
			break;
		//ä ---> A
		case 228: event.keyCode = 65;
			break;
				
				
		//È ---> E
		case 200: event.keyCode = 69;
			break;
		//É ---> E
		case 201: event.keyCode = 69;
			break;
		//Ê ---> E
		case 202: event.keyCode = 69;
			break;
		//Ë ---> E
		case 203: event.keyCode = 69;
			break;
			
		//è ---> E		
		case 232: event.keyCode = 69;
			break;
		//é ---> E
		case 233: event.keyCode = 69;
			break;
		//ê ---> E
		case 234: event.keyCode = 69;
			break;
		//ë ---> E
		case 235: event.keyCode = 69;
			break;	
			
						
		//Ì ---> I
		case 204: event.keyCode = 73;
			break;
		//Í ---> I
		case 205: event.keyCode = 73;
			break;
		//Î ---> I
		case 206: event.keyCode = 73;
			break;
		//Ï ---> I
		case 207: event.keyCode = 73;
			break;
			
		//í ---> I
		case 237: event.keyCode = 73;
			break;
		//ì ---> I
		case 236: event.keyCode = 73;
			break;
		//î ---> I
		case 238: event.keyCode = 73;
			break;
		//ï ---> I
		case 239: event.keyCode = 73;
			break;
			
			
		//Ò ---> O
		case 210: event.keyCode = 79;
			break;
		//Ó ---> O
		case 211: event.keyCode = 79;
			break;
		//Ô ---> O
		case 212: event.keyCode = 79;
			break;
		//Õ ---> O
		case 213: event.keyCode = 79;
			break;
		//Ö ---> O
		case 214: event.keyCode = 79;
			break;
						
		//ò ---> O
		case 242: event.keyCode = 79;
			break;
		//ó ---> O
		case 243: event.keyCode = 79;
			break;
		//ô ---> O
		case 244: event.keyCode = 79;
			break;
		//õ ---> O
		case 245: event.keyCode = 79;
			break;
		//ö ---> O
		case 246: event.keyCode = 79;
			break;
		
		
		//Ù ---> U
		case 217: event.keyCode = 85;
			break;
		//Ú ---> U
		case 218: event.keyCode = 85;
			break;	
		//Û ---> U
		case 219: event.keyCode = 85;
			break;
		//Ü ---> U
		case 220: event.keyCode = 85;
			break;
			
		//ù ---> U
		case 249: event.keyCode = 85;
			break;
		//ú ---> U
		case 250: event.keyCode = 85;
			break;	
		//û ---> U
		case 251: event.keyCode = 85;
			break;
		//ü ---> U
		case 252: event.keyCode = 85;
			break;	
	}
}	

//Função que coloca as mascaras
function mascarar(obj,mascara){
	
		var valor_duplicar = "";
		var valor_completar = "";
		var colchete_abre = abriuColchete(mascara);
		var colchete_fecha = fechouColchete(mascara)
		var retorno = "";
		var tam_lazanha = contaLazanha(mascara);		
		var texto = obj.value+retornaValor(event);
		event.keyCode = 0;
		if(colchete_abre ==-1 && texto.length > tam_lazanha){			
			texto = obj.value;			
		}

		mascara = limpaMascara(mascara);
				
		//aumenta a mascara quando existem colchetes
		if(colchete_abre < colchete_fecha  && colchete_abre!=-1 && colchete_fecha!=-1){
			var tamanhoDoTexto = 1+obj.value.length;			
			valor_duplicar = mascara.substring(colchete_abre+1,colchete_fecha);
			valor_completar = mascara.substring(colchete_fecha+1);

			//valor_completar = valor_duplicar + valor_completar;
			while(contaLazanha(valor_completar) < tamanhoDoTexto){
				valor_completar = valor_duplicar + valor_completar;				
			}			
			mascara = valor_completar;

			var j = texto.length-1;											
			for (i = mascara.length-1; i>-1 && j>-1; i--) {		
				if (mascara.substring(i,i+1)=="#") {								
					retorno = texto.substring(j,j+1) + retorno;
					j--;							
				}
				else{
					retorno = mascara.substring(i,i+1) + retorno;
				}				
			}
		}//Caso não tem colchetes e não tem ||
		else if(mascara.split('||').length == 1){
			var j = 0;											
			for(i = 0 ; i<mascara.length && j<texto.length; i++) {		
				if (mascara.substring(i,i+1)=="#") {								
					retorno = retorno + texto.substring(j,j+1);
					j++;							
				}
				else{
					retorno = retorno + mascara.substring(i,i+1);
				}				
			}
			var f = mascara.length;
			while(mascara.substring(f-1,f)!="#"){
				retorno = retorno + mascara.substring(f-1,f);
				f--;
			}

		}//Não tem Colchetes e Tem ||
		else if(mascara.split('||').length != 1){

			///////////Trecho de código que quebra a mascara para pegar a mascara adequada////
			var array = mascara.split('||');			
			array = tamanho(array);		
			var i = 0;
			mascara = array[i];			
			while(contaLazanha(mascara) < texto.length  && i+1 < array.length){
				i=i+1;
				mascara = array[i];		
			}
			/////////////////////////////////////////////////////////////////////////////////

			var tam_lazanha = contaLazanha(mascara);
			if(texto.length > tam_lazanha){			
				texto = obj.value;			
			}	
		
			//mascarando			
			var j = 0;											
			for(i = 0 ; i<mascara.length && j<texto.length; i++) {		
				if (mascara.substring(i,i+1)=="#") {								
					retorno = retorno + texto.substring(j,j+1);
					j++;							
				}
				else{
					retorno = retorno + mascara.substring(i,i+1) ;
				}				
			}
			var f = mascara.length;
			while(mascara.substring(f-1,f)!="#"){
				retorno = retorno + mascara.substring(f-1,f);
				f--;
			}			
		}
				
		obj.value = retorno.toUpperCase();
		return obj;
}


//Função que coloca as mascaras
function mascaraNomes(obj,mascara){ 
	var letra = retornaValor(event);
	event.keyCode = 0;
	obj.value = obj.value.toUpperCase() + letra.toUpperCase();
	return obj;
}
//Funcao que retira os espacos em branco antes e depois da mascara
function limpaMascara(mascara){
	var masc = "";

    for (i = 0; i < mascara.length; i++) {
		var sub = mascara.substring(i,i+1);
		if (sub != " "){
            masc=masc+sub;
        }
    }
	return masc;
}

//Função que ordena um array, de acordo com o tamanho dos seus elementos. Ordenação Ascendente.
function tamanho(array){
	var temp1;
	var temp2;
	for(i=0; i<array.length-1; i++){
		temp1 = array[i];
		for(j=i+1; j<array.length; j++){
			temp2 = array[j];
			if(temp2.length < temp1.length){				
				array[i] = temp2;
				array[j] = temp1;
				temp1= temp2;
				temp2= array[j]; 
			}
		}
	}	
	return array;
}

//funcao que conta quantas lazanhas tem na palavra
function contaLazanha(mascara){
	var cont_lazanha = 0;
	for (i = 0; i < mascara.length; i++){
		if (mascara.substring(i,i+1) == "#"){
			cont_lazanha++;
        }
	}
	return cont_lazanha;
}

//função que deixa apenas os digitos e as letras
function limparEntrada(obj){
	var texto = "";
    for (i = 0; i < obj.value.length; i++) {
		var temp = obj.value.substring(i,i+1);
		if( valida(temp)  ){
			texto= texto+obj.value.substring(i,i+1);
        }	
    }
	return texto;
}

//retorna true quando o parametro é um digito ou uma letra
function valida(temp){
	if( !isNaN(temp) || temp=='a' || temp=='A' || temp=='b' || temp=='B' || temp=='c' || temp=='C' || temp=='d' || temp=='D' || temp=='e' || temp=='E'
			 || temp=='f' || temp=='F' || temp=='g' || temp=='G' || temp=='h' || temp=='H' || temp=='i' || temp=='I' || temp=='j' || temp=='J'
			 || temp=='k' || temp=='K' || temp=='l' || temp=='L' || temp=='m' || temp=='M' || temp=='n' || temp=='N' || temp=='o' || temp=='O'
			 || temp=='p' || temp=='P' || temp=='q' || temp=='Q' || temp=='r' || temp=='R' || temp=='s'|| temp=='S' || temp=='t' || temp=='T'
			 || temp=='u' || temp=='U' || temp=='v' || temp=='V' || temp=='x' || temp=='X' || temp=='y' || temp=='Y' || temp=='z' || temp=='Z' ){
		return true;
	}
	else{
		return false;
	}
}

//retorna true quando o parametro é um digito ou uma letra
function validaSoLetra(temp){
	if(temp=='a' || temp=='A' || temp=='b' || temp=='B' || temp=='c' || temp=='C' || temp=='d' || temp=='D' || temp=='e' || temp=='E'
			 || temp=='f' || temp=='F' || temp=='g' || temp=='G' || temp=='h' || temp=='H' || temp=='i' || temp=='I' || temp=='j' || temp=='J'
			 || temp=='k' || temp=='K' || temp=='l' || temp=='L' || temp=='m' || temp=='M' || temp=='n' || temp=='N' || temp=='o' || temp=='O'
			 || temp=='p' || temp=='P' || temp=='q' || temp=='Q' || temp=='r' || temp=='R' || temp=='s'|| temp=='S' || temp=='t' || temp=='T'
			 || temp=='u' || temp=='U' || temp=='v' || temp=='V' || temp=='x' || temp=='X' || temp=='y' || temp=='Y' || temp=='z' || temp=='Z' ){
		return true;
	}
	else{
		return false;
	}
}

//função que retorna -1 caso naum encotre o digito desejado, se encontrar retorna o indice onde ele foi encontrado
function buscaDigito(valor,digito){
		indice= valor.indexOf(digito);
		return indice;
}

//Função que bloqueia a entrada apenas para digito
function mascaraDigito(obj,mascara){
	if (event.keyCode <= 47 || event.keyCode >57){
		event.keyCode = 0;
		return false;
	}
	else{
		obj.value = limparEntrada(obj);
		mascarar(obj,mascara);
	}
}


//Função que bloqueia a entrada apenas para letra
function mascaraLetra(obj,mascara){
	if ( !(event.keyCode > 64  && event.keyCode < 91) && !(event.keyCode > 96  && event.keyCode < 123) && (event.keyCode != 32) ){
		event.keyCode = 0;
		return false;
	}
	else{
		obj.value = limparEntrada(obj);
		mascaraNomes(obj,mascara);
	}
}


//Função que bloqueia a entrada apenas para digito e letras
function mascaraLazanha(obj,mascara){
	if ( !(event.keyCode > 47 && event.keyCode <58) && !(event.keyCode > 64  && event.keyCode < 91) && !(event.keyCode > 96  && event.keyCode < 123)  ){
		event.keyCode = 0;
		return false;
	}
	else{
		obj.value = limparEntrada(obj);
		mascarar(obj,mascara);
	}
	return;
}

//Funcao que retorna o indice onde foi encontrado um ]
function fechouColchete(mascara){
	var posicao = -1;

	//verificar se existe colchete abrindo e fechando
    for (i = 0; i < mascara.length; i++) {
		var sub = mascara.substring(i,i+1);
		if (sub == ']' ){
            posicao = i;
        }
    }
	return posicao;
}

//Funcao que retorna o indice onde foi encontrado um [
function abriuColchete(mascara){
	var posicao  = -1;

	//verificar se existe colchete abrindo e fechando
    for (i = 0; i < mascara.length; i++) {
		var sub = mascara.substring(i,i+1);
		if( sub == '[' ){
			posicao = i;
        }
    }
	return posicao;
}

function substituiPorLazanha(mascara){
	var masc = "";

	//verificar se existe colchete abrindo e fechando
    for (i = 0; i < mascara.length; i++) {
		var sub = mascara.substring(i,i+1);
		if( sub == '9' ){
			masc = masc+'#';
        }
		else{
			masc = masc+sub;
		}
    }
	return masc;
}


//Retorna  o valor de um evento
function retornaValor(ev){
	var temp = ev.keyCode;
	var retorno = "";

	if(temp > 64 && temp<91){
		switch(temp){
		case 65:
			retorno = 'A';
			break;
		case 66:
			retorno = 'B';
			break;
		case 67:
			retorno = 'C';
			break;
		case 68:
			retorno = 'D';
			break;
		case 69:
			retorno = 'E';
			break;
		case 70:
			retorno = 'F';
			break;
		case 71:
			retorno = 'G';
			break;
		case 72:
			retorno = 'H';
			break;
		case 73:
			retorno = 'I';
			break;
		case 74:
			retorno = 'J';
			break;
		case 75:
			retorno = 'K';
			break;
		case 76:
			retorno = 'L';
			break;
		case 77:
			retorno = 'M';
			break;
		case 78:
			retorno = 'N';
			break;
		case 79:
			retorno = 'O';
			break;
		case 80:
			retorno = 'P';
			break;
		case 81:
			retorno = 'Q';
			break;
		case 82:
			retorno = 'R';
			break;
		case 83:
			retorno = 'S';
			break;
		case 84:
			retorno = 'T';
			break;
		case 85:
			retorno = 'U';
			break;
		case 86:
			retorno = 'V';
			break;
		case 87:
			retorno = 'W';
			break;
		case 88:
			retorno = 'X';
			break;
		case 89:
			retorno = 'Y';
			break;
		case 90:
			retorno = 'Z';
			break;
		default:
			retorno = '#';
			break;
		}
	}
	else if(temp>96 && temp<123){
		
		switch (temp){
		case 97:
			retorno = 'a';
			break;
		case 98:
			retorno = 'b';
			break;
		case 99:
			retorno = 'c';
			break;
		case 100:
			retorno = 'd';
			break;
		case 101:
			retorno = 'e';
			break;
		case 102:
			retorno = 'f';
			break;
		case 103:
			retorno = 'g';
			break;
		case 104:
			retorno = 'h';
			break;
		case 105:
			retorno = 'i';
			break;
		case 106:
			retorno = 'j';
			break;
		case 107:
			retorno = 'k';
			break;
		case 108:
			retorno = 'l';
			break;
		case 109:
			retorno = 'm';
			break;
		case 110:
			retorno = 'n';
			break;
		case 111:
			retorno = 'o';
			break;
		case 112:
			retorno = 'p';
			break;
		case 113:
			retorno = 'q';
			break;
		case 114:
			retorno = 'r';
			break;
		case 115:
			retorno = 's';
			break;
		case 116:
			retorno = 't';
			break;
		case 117:
			retorno = 'u';
			break;
		case 118:
			retorno = 'v';
			break;
		case 119:
			retorno = 'w';
			break;
		case 120:
			retorno = 'x';
			break;
		case 121:
			retorno = 'y';
			break;
		case 122:
			retorno = 'z';
			break;
		default:
			retorno = '#';
			break;
		}
	}
	else if(temp>47 && temp<58){
		switch (temp){		
		case 48:
			retorno = '0';
			break;
		case 49:
			retorno = '1';
			break;
		case 50:
			retorno = '2';
			break;
		case 51:
			retorno = '3';
			break;
		case 52:
			retorno = '4';
			break;
		case 53:
			retorno = '5';
			break;
		case 54:
			retorno = '6';
			break;
		case 55:
			retorno = '7';
			break;
		case 56:
			retorno = '8';
			break;
		case 57:
			retorno = '9';
			break;
		default:
			retorno = '#';
			break;
		}
	}

	return retorno;
}
