//------------------------------------------------------------

function getTecla(event){
	if(navigator.appName.indexOf("Netscape")!= -1) {
		return event.which;
	}
	else {
		return event.keyCode;
	}
}

function getChar(event){
	if(navigator.appName.indexOf("Netscape")!= -1) {
		return String.fromCharCode(event.which);
	}
	else {
		return String.fromCharCode(event.keyCode);
	}
}

function valida_tecla(campo, event) {
	var BACKSPACE= 8;
	var HTAB = 9;
	var XTAB = 0;
	var VTAB = 11;
	var C = 99;
	var V = 118;
	var X = 120;

	var tecla;
	
	if(navigator.appName.indexOf("Netscape")!= -1) {
		tecla = event.which;
	}
	else {
		tecla = event.keyCode;
	}
	
	//tests allowed keys
	if ( tecla == BACKSPACE || tecla == HTAB || tecla == VTAB ||
		(event.ctrlKey && tecla ==  C) || (event.ctrlKey && tecla ==  V) || (event.ctrlKey && tecla ==  X) ||
	     tecla == XTAB) {
		return true;
	}

	key = String.fromCharCode(tecla);
	return isNum(key);
	
}

function valida_tecla_data(campo, event, pattern) {
	var BACKSPACE = 8;
	var C = 99;
	var V = 118;
	var X = 120;
	var key;
	var tecla;
	CheckTAB=true;

	if(navigator.appName.indexOf("Netscape")!= -1) {
		tecla = event.which;
	}
	else {
		tecla = event.keyCode;
	}

	//ignorar se for TAB .. no firefox o tab é acusado 0
	if(tecla == 0){
		return true;
	}
	//ignorar se for SHIFT
	if(tecla == 16){
		return false;
	}
	//tests allowed keys
	if ( (event.ctrlKey && tecla == C) || (event.ctrlKey && tecla == V) || (event.ctrlKey && tecla == X) ) {
		return true;
	}
	
	key = String.fromCharCode(tecla);
	
	
	if(tecla != 8){
		var l = campo.value.length;
		
		var charBefore;
		if(l > 0){
			charBefore = pattern.charAt(l - 1);
		}
		var currChar = pattern.charAt(l);
		if(	currChar == 'm' ||
			currChar == 's'){
			return isTime(key);
		}
		if( (currChar == 'h' || currChar == 'H') && charBefore != currChar){ //primeira casa da hora
			return key == '0' || key == '1' || key == '2';
		} else if( (currChar == 'h' || currChar == 'H') && charBefore == currChar){ //segunda casa da hora
			if(campo.value.charAt(l - 1) == '2'){
				return key == '0' || key == '1' || key == '2'|| key == '3' || key == '4';
			}
		}
		
		if( (currChar == 'M' ) && charBefore != currChar){ //primeira casa do mes
			return key == '0' || key == '1';
		} else if( (currChar == 'M' ) && charBefore == currChar){ //segunda casa do mes
			if(campo.value.charAt(l - 1) == '1'){
				return key == '0' || key == '1' || key == '2';
			} else if(key == '0'){
				return false;
			}
		}
		if( (currChar == 'd' ) && charBefore != currChar){ //primeira casa do dia
			return key == '0' || key == '1' || key == '2' || key == '3';
		} else if( (currChar == 'd' ) && charBefore == currChar){ //segunda casa do dia
			if(campo.value.charAt(l - 1) == '3'){
				return key == '0' || key == '1';			
			} else if(campo.value.charAt(l - 1) == '0' && key == '0'){
				return false;
			}
		}
	}

	if (tecla == 13) {
		return false;
	}
	if (tecla == BACKSPACE) {
		return true;
	}
	return (isNum(key));
}

function isTime( caractere ) { 
	var strValidos = '012345'; 
	if (strValidos.indexOf(caractere) == -1) {
		return false; 
	}
	return true; 
}

function isNum( caractere ) { 
	var strValidos = '0123456789'; 
	if (strValidos.indexOf(caractere) == -1) {
		return false; 
	}
	return true; 
}

//------------------------------------------------------------

function mascara_hora(el) {
	var myhour = '';
	myhour = myhour + el.value; 
	if (myhour.length == 2) {
		myhour = myhour + ':'; 
		el.value = myhour; 
	}
	/*
	if(myhour.length == 5) {
		if(!verifica_hora(myhour)) {
			el.value='';
		}
	}
	*/
}

function verifica_hora(hour) {
	situacao = 1;
	hora = (hour.substring(0,2)); 
	minutos = (hour.substring(3,5)); 
	ponto = (hour.substring(2,3));
	if(hora>24) {
		situacao = 0;
		if(minutos>60) {
			situacao = 0;
			if(ponto != ':') {
				situacao = 0;
				if(situacao==0) {
					alert('Hora inválida! Exemplo de hora válida: 09:30');
					hour.value='';
					return false;
				}
				return true;
			}
		}
	}
}

//------------------------------------------------------------

function mascara_data(el, event, pattern) {
	var tecla = getTecla(event);
	if(tecla != 8){
		var mydata = el.value;
		var l = mydata.length;
		
		var currChar = pattern.charAt(l);
		if( currChar != 'd' && 
			currChar != 'M' &&
			currChar != 'y' &&
			currChar != 'h' &&
			currChar != 'm' &&
			currChar != 's' &&
			currChar != 'H'){
			mydata = mydata + currChar;
			el.value = mydata;
		}
		
		var beforeChar = pattern.charAt(l - 1);
		if( beforeChar != 'd' && 
			beforeChar != 'M' &&
			beforeChar != 'y' &&
			beforeChar != 'h' &&
			beforeChar != 'm' &&
			beforeChar != 's' &&
			beforeChar != 'H' &&
			beforeChar != mydata.charAt(l - 1)){
			mydata = mydata.substring(0, l-1) + beforeChar + mydata.substring(l-1);
			el.value = mydata;
		}
	}
	/*
	if(pattern == 'null'
	 || pattern == ''){
		pattern = 'dd/MM/yyyy';
	}
	if(pattern == 'dd/MM/yyyy'){
		var mydata = el.value;
	
		if (mydata.length == 2 && getTecla(event) != 8) { //só colocar a / se nao foi backspace
			mydata = mydata + '/';
			el.value = mydata;
		}
		if (mydata.length == 5 && getTecla(event) != 8) {
			mydata = mydata + '/';
			el.value = mydata;
		}
		
		//o usuario pode ter digitado backspace e depois inserir um número... entao temos que colocar a barra
		var iBarras = 0;
		for(var i = 0; i < mydata.length; i++){
			if(mydata.charAt(i) == '/'){
				iBarras ++;
			}
		}
		
		if(mydata.length == 3 && iBarras == 0){
			mydata = mydata.substring(0,2) + '/' + mydata.substring(2);
			el.value = mydata;
		}
		if(mydata.length == 6 && iBarras == 1){
			mydata = mydata.substring(0,5) + '/' + mydata.substring(5);
			el.value = mydata;
		}	
	
		if (mydata.length == 10) {
			if(!verifica_data(mydata)) {
				el.value='';
			}
		}
	} else if(pattern == 'dd/MM/yyyy hh:mm'){
		var mydata = el.value;
	
		if (mydata.length == 2 && getTecla(event) != 8) { //só colocar a / se nao foi backspace
			mydata = mydata + '/';
			el.value = mydata;
		}
		if (mydata.length == 5 && getTecla(event) != 8) {
			mydata = mydata + '/';
			el.value = mydata;
		}
		if (mydata.length == 10 && getTecla(event) != 8) {
			mydata = mydata + ' ';
			el.value = mydata;
		}
		if (mydata.length == 13 && getTecla(event) != 8) {
			mydata = mydata + ':';
			el.value = mydata;
		}
		
		//o usuario pode ter digitado backspace e depois inserir um número... entao temos que colocar a barra
		var iBarras = 0;
		var iEspaco = 0;
		var iDoispontos = 0;
		for(var i = 0; i < mydata.length; i++){
			if(mydata.charAt(i) == '/'){
				iBarras ++;
			} else if(mydata.charAt(i) == ' '){
				iEspaco ++;
			} else if(mydata.charAt(i) == ':'){
				iDoispontos ++;
			}
		}
		
		if(mydata.length == 3 && iBarras == 0){
			mydata = mydata.substring(0,2) + '/' + mydata.substring(2);
			el.value = mydata;
		}
		if(mydata.length == 6 && iBarras == 1){
			mydata = mydata.substring(0,5) + '/' + mydata.substring(5);
			el.value = mydata;
		}	
		if(mydata.length == 11 && iEspaco == 0){
			mydata = mydata.substring(0,10) + ' ' + mydata.substring(10);
			el.value = mydata;
		}	
		if(mydata.length == 14 && iDoispontos == 0){
			mydata = mydata.substring(0,13) + ':' + mydata.substring(13);
			el.value = mydata;
		}			
	
	} else {
		alert('Padrão não suportado '+pattern);
	}
	*/
}

function verifica_data(data) {
	var situacao = '';

	if (data.length == 0) {
		return true;
	}

	if (data.length != 10) {
		situacao = 'falsa';
	}
	else {
		mes = (data.substring(3,5));
	
		// verifica se o mes e valido
		if (mes < 1 || mes > 12 ) {
			situacao = 'falsa';
		}
		else {
			dia = (data.substring(0,2));

			// Verifica se o dia é válido para cada mês, exceto fevereiro.
			if (dia < 1 || dia > 31 || (dia > 30 && (mes == 4 || mes == 6 || mes == 9 || mes == 11))) {
				situacao = 'falsa';
			}
		
			// Verifica se o dia é válido para o mês de fevereiro.
			if (mes == 2 && (dia < 1 || dia > 29 || (dia > 28 && (parseInt(ano/4) != ano/4)))) {
				situacao = 'falsa';
			}
		}
	}

	if (situacao == 'falsa') {
		alert('Data inválida!');
		return false;
	}

	return true;
}

//------------------------------------------------------------

function clearNonNumbers(text) {
	var retorno = '';
	if (text != null) {
		for (var i = 0; i < text.length; i++) {
	        if ( isNum(""+text.charAt(i)) ) {
	        	retorno += text.charAt(i);
	        }
	    }
	}
	return retorno;
}

function getRealMaskLength(mask) {
	var retorno = 0;
	for (var i = 0; i < mask.length; i++) {
		if ( isSpecialChar(mask.charAt(i)) ) {
            retorno++;
        }
    }
    return retorno;
}

function isSpecialChar( caractere ){ 
	return caractere == '_'; 
}

function getBestFitMask(masks, text) {
    var masksVector = masks.split('&');
    if (masksVector != null && masksVector.length > 1) {
    	var retorno = "";
    	//Acumula mascaras com tamanho maior que o texto atual
    	var mascarasPlausiveis = Array();
    	for (var i = 0; i < masksVector.length; i++) {
		    var maskLength = getRealMaskLength(masksVector[i]);
			if (text.length <= maskLength) {
		    	mascarasPlausiveis.push(masksVector[i]);
		    }
	    }
	    if (mascarasPlausiveis.length > 0) {
		    //Se existem mascaras maiores, usa a que tem menor diferenca
		    var retorno = null;
		    for (var i = 0; i < mascarasPlausiveis.length; i++) {
				var maskLength = getRealMaskLength(mascarasPlausiveis[i]);
			    var retornoLength = retorno != null ? getRealMaskLength(retorno) : 0;
				if (retorno == null || maskLength < retornoLength) {
			    	retorno = mascarasPlausiveis[i];
			    }
		    }
		    return retorno;
		}else{
			//Se nao existem mascaras plausiveis, usa a que tem maior tamanho
		    var retorno = null;
		    for (var i = 0; i < masksVector.length; i++) {
				var maskLength = getRealMaskLength(masksVector[i]);
			    var retornoLength = retorno != null ? getRealMaskLength(retorno) : 0;
				if (maskLength > retornoLength) {
			    	retorno = masksVector[i];
			    }
		    }
		    return retorno;
		}
	    
		return masksVector[0];
    }
    return masks;
}

function mascara_generica(campo, masks) {
	if (masks == null) {
		return;
	}
	//campo digitada atual
	var mydata = '' + clearNonNumbers(campo.value);
	//Se for vazio, tasca fora
	if(mydata == null || mydata == "") return "";
	//Detecta a melhor mascara
	var mask = getBestFitMask(masks, mydata);
	//Retorna o tamanho da mascara escolhida
	var maskLength = getRealMaskLength(mask);
	//Se o numero de digitos é igual ao tamanho da mascara, aplica a mascara
	var retorno = '';
	//passa pelas casas da marcara ate a casa digitada
	var j = 0;	
	for (var i = 0; i < mask.length && j < mydata.length ; i++) {
        if ( isSpecialChar(mask.charAt(i)) ) {
			if(j < mydata.length){
				retorno += mydata.charAt(j);
				j++;
			}
        }else{
        	retorno += mask.charAt(i);
        }
    }
    campo.value = retorno;
}

//------------------------------------------------------------

function mascara_cpf(el) {
	mascara_generica(el, '___.___.___-__');
}

//------------------------------------------------------------

function mascara_cep(el) {
	mascara_generica(el, '_____-___');
}

//------------------------------------------------------------

function mascara_cnpj(el) {
	mascara_generica(el, '__.___.___/____-__');
}

function formata_cnpj (numCICEl) {
	numCIC = String(ApenasNum(numCICEl.value));
	switch (numCIC.length) {
		case 15 :
			numCICEl.value = numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
			return;
		case 0:
			return;
		default : 
			alert("Tamanho incorreto do CNPJ. O CNPJ deve conter 15 dígitos");
			numCICEl.focus();
			return;
	}
}

//------------------------------------------------------------

function mascara_cpfcnpj(el) {
	mascara_generica(el, '___.___.___-__&__.___.___/____-__');
}

//------------------------------------------------------------

function mascara_float(campo, teclapres) {
	var tecla = 0;
    if(navigator.appName.indexOf("Netscape")!= -1) {
   		tecla= teclapres.which;
   	}
    else {
		tecla = teclapres.keyCode;
	}
	/*
	if(tecla == 190 || tecla == 110) {
		//alert(tecla);
		campo.value = campo.value + ',';
		return false;
	}
	*/


	if (  (tecla == 109 && campo.value == '') || (tecla == 189 && campo.value == '') // tecla '-' (só é possivel se for a primeira posicao)
			|| (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105)
	 		|| tecla == 110 || tecla == 188
	  		|| tecla == 8 || tecla == 9 || tecla == 13
	    	|| tecla == 37 || tecla == 39
	    	|| tecla == 45 || tecla == 46 || tecla == 35 || tecla == 36
		    || (tecla == 67 || tecla == 86 && teclapres.ctrlKey)) {

		if(tecla == 188 || tecla == 110){// não pode inserir duas virgulas 

			return campo.value.indexOf(',') < 0;
		}
		return true;
	}

	return false; 
}

//------------------------------------------------------------

function mascara_inscricaoestadual(el) {
	var mydata = '';
	mydata = mydata + el.value;
	if (mydata.length == 13) {
		mydata = mydata + '-';
		el.value = mydata;
	}
}
//------------------------------------------------------------

function mascara_integer(campo, teclapres) {
	var tecla = 0;
    if(navigator.appName.indexOf("Netscape")!= -1) {
   		tecla= teclapres.which;
   	}
    else {
		tecla = teclapres.keyCode;
	}

	// Falta o caractere ',' (vírgula) do teclado numérico.
	if ( (tecla == 109 && campo.value == '') || (tecla == 189 && campo.value == '') // tecla '-' (só é possivel se for a primeira posicao)
		  ||(tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105)
	      || tecla == 8 || tecla == 9 || tecla == 13
	      || tecla == 37 || tecla == 39
	      || tecla == 45 || tecla == 46 || tecla == 35 || tecla == 36
	      || ((tecla == 67 || tecla == 86) && teclapres.ctrlKey)) {
		return true; 
	}

	return false; 
}
	
//------------------------------------------------------------

function valida_money(campo, event) {
	var BACKSPACE= 8;
	var HTAB = 9;
	var VTAB = 11;
	var XTAB = 0;
	var PONTO = 46;
	var MENOS = 45;
	var C = 99;
	var V = 118;
	var X = 120;
	
	//limpa a string da data
	var mydata = campo.value;
	
	var key;
	var tecla;
	
	//captures the digit
	if(navigator.appName.indexOf("Netscape")!= -1)
		tecla= event.which;
	else
		tecla= event.keyCode;
	key = String.fromCharCode(tecla);
	
	//tests deniedKeys
	var deniedKeys = "46";
	var dk = deniedKeys.split(';');
	for (var i = 0 ; i < dk.length; i++) {
		if (tecla == dk[i]) {
			return false;
		}
	}
	
	//Se ja tiver PONTO, nao deixa
	if (mydata.indexOf(String.fromCharCode(PONTO)) != -1 && tecla ==  PONTO) {
		return false;
	}
	
	//Se ja tiver MENOS, nao deixa
	var tempNumber = clearNonNumbersAndTrimZeros(mydata, true);
	if (tempNumber.length > 0 && tecla == MENOS) {
		return false;
	}
	
	//tests allowed keys
	if ( tecla == BACKSPACE || tecla == HTAB || tecla == VTAB ||
		(event.ctrlKey && tecla ==  C) || (event.ctrlKey && tecla ==  V) || (event.ctrlKey && tecla ==  X) ||
	     tecla == XTAB || tecla ==  PONTO || tecla ==  MENOS ) {
		return true;
	}
	return ( isNum(key) );
}

function isNum( caractere ){ 
	var strValidos = '0123456789'; 
	if ( strValidos.indexOf( caractere ) == -1 ) return false; 
	return true; 
}

function clearNonNumbersAndTrimZeros(text, removeZeros) {
	text = clearNonNumbers(text);
	for (var i = 0; i < text.length ; i++) {
        if ( text.charAt(i) != '0' ) {
			text = text.substring(i);
			break;
		}else if (i == text.length - 1 && removeZeros){
			text = "";
			break;
		}
    }
    return text;
}



function format_float(data, event, digits){
	if(!digits || digits < 0){
		return true;
	}
	
	var text = data.value;
	var retorno = "";
	var prefix = '';

	//consistencia de digitos
	if (digits == null || digits == "") {
		digits = 0;
	}
	var totalDigits = digits + 1;
	
	//Verifica se é negativo
	var negativo = false;
	if (data.value.indexOf('-') != -1) {
		negativo = true;
	}
	
	//Padroniza pontos e virgulas
	if (text.indexOf(".") != -1 && text.indexOf(",") != -1) {
		text = text.replace(".", "");
		text = text.replace(",", ".");
	}
	if (text.indexOf(",") != -1) {
		text = text.replace(",", ".");
	}

	//limpa a string
	var mydata = clearNonNumbersAndTrimZeros(text, false);
	
	//completa com zeros a esquerda
	for (var i = 0 ; i < totalDigits && mydata.length < totalDigits && mydata.length > 0 ; i++ ) {
		mydata = "0" + mydata;
	}

	var j = 0;
	for(var i = mydata.length - 1; i >= 0 ; i--) {
		if (j == digits && digits > 0) {
			retorno = "," + retorno;
		}else if ( (j - digits >= 3) && ( (j - digits) % 3 == 0) ) {
			retorno = "." + retorno;
		}		
		retorno = mydata.charAt(i) + retorno;
		
		j++;
	}
	
	//Aplica negativo
	if (negativo) {
		retorno = "-" + retorno;
	}
	//Aplica prefixo
	if (prefix != null && prefix != '' && retorno != '' ) {
		retorno = prefix + " " + retorno;
	}
		
	data.value = retorno ;
}


function format_money(data, event){
	
	var text = data.value;
	var retorno = "";
	var digits = 2;
	var prefix = 'R$';

	//consistencia de digitos
	if (digits == null || digits == "") {
		digits = 0;
	}
	var totalDigits = digits + 1;
	
	//Verifica se é negativo
	var negativo = false;
	if (data.value.indexOf('-') != -1) {
		negativo = true;
	}
	
	//Padroniza pontos e virgulas
	if (text.indexOf(".") != -1 && text.indexOf(",") != -1) {
		text = text.replace(".", "");
		text = text.replace(",", ".");
	}
	if (text.indexOf(",") != -1) {
		text = text.replace(",", ".");
	}

	//limpa a string
	var mydata = clearNonNumbersAndTrimZeros(text, false);
	
	//completa com zeros a esquerda
	for (var i = 0 ; i < totalDigits && mydata.length < totalDigits && mydata.length > 0 ; i++ ) {
		mydata = "0" + mydata;
	}

	var j = 0;
	for(var i = mydata.length - 1; i >= 0 ; i--) {
		if (j == digits && digits > 0) {
			retorno = "," + retorno;
		}else if ( (j - digits >= 3) && ( (j - digits) % 3 == 0) ) {
			retorno = "." + retorno;
		}		
		retorno = mydata.charAt(i) + retorno;
		
		j++;
	}
	
	//Aplica negativo
	if (negativo) {
		retorno = "-" + retorno;
	}
	//Aplica prefixo
	if (prefix != null && prefix != '' && retorno != '' ) {
		retorno = prefix + " " + retorno;
	}
		
	data.value = retorno ;
	
	data.onchange(event);
	return true;
}

//------------------------------------------------------------

function mascara_telefone(el) {
	var mydata = '';
	mydata = mydata + el.value;
	if (mydata.length == 1) {
		mydata = '(' + mydata;
		el.value = mydata;
	}
	if (mydata.length == 3) {
		mydata = mydata+') ';
		el.value = mydata;
	}
	if (mydata.length == 9) {
		mydata =  mydata + '-';
		el.value = mydata;
	}
}

//------------------------------------------------------------

function expandeTextArea(uid, rows) {
	var componente = document.getElementById(uid)
	if (componente.getAttribute('p') == null) {
		componente.setAttribute('p', componente.rows)
	}
	if (componente.getAttribute('g') == null) {
		componente.setAttribute('g', rows)
	}
	componente.rows = componente.rows == componente.getAttribute('p') ? componente.getAttribute('g') : componente.getAttribute('p');
}

//------------------------------------------------------------

function limpaSelectOneButton(tagName) {
	var comp = document.getElementsByName(tagName)[0];
	var label = document.getElementsByName(tagName + "_label")[0];
	label.value = ''; 
	comp.value = '<null>'; 
	document.getElementById(tagName + '_btn').style.display = ''; 
	document.getElementById(tagName + '_btnUnselect').style.display = 'none'; 
	if(label.onchange != null) {
		label.onchange();
	}
}

