//Descrição: Funções basicas de utilitarios
//Produto: tw Framework
//Copyright: 1996 - 2007 (c) tw Latin America - www.tw.com.br
//Versão: 1.0.0.6


//Formata um número para Real ou Dollar
function twFctArrumaValor(avValor, avTipo){
	var avValorTemporario = avValor.toString();
	var avPosicaoVirgurla; 
	var avQuantidadePontoVirgula = 0;
	var avQuantidadePontoVirgulaFinais = 0; 
	var acPosicaoPontos = -1; 
	var avDecimais = "";
	var avTracoNegativo = ""; 
	var avDecimaisTemporario = ""; 
	var avPonto = ".";
	var avVirgula = ","; 
	var avResto = "00"; 
	var avValorZerado = false;
	var avValorTransicao = avValorTemporario; 
	var avTamanho = avValorTemporario.length;
	var avCaracteresValidos = new Array("0","1","2","3","4","5","6","7","8","9");
	var avCaracter = "";

	if (typeof(avTipo) != "string"){ return ("Faltando o tipo da moeda"); }
	
	avTipo = avTipo.toUpperCase();
	
	if ((avTipo != "R")&&(avTipo != "U")) { return ("Tipo da moeda inválido"); }
	
	switch(avTipo){
		//Tipo dollar
		case "U":
			avPonto = ",";
			avVirgula = ".";
			break;
		//Tipo real
		case "R":
			avPonto = ".";
			avVirgula = ",";
			break;
	}
	
	for (av_a = 0; av_a < avTamanho; av_a++){ 
		avCaracter = avValorTransicao.charAt(av_a); 
		if ((avCaracter == avPonto)||(avCaracter == avVirgula)){ avQuantidadePontoVirgula ++; } 
	}
	
	for (av_b = 0; av_b < avTamanho; av_b++){
		avCaracter = avValorTransicao.charAt(av_b);
		if(avCaracter == "-"){ avTracoNegativo = "-"; } 
		else { 
			for (av_c = 0; av_c < 11; av_c++){ 
				if (avCaracter == avCaracteresValidos[av_c]){ avDecimais += avCaracter; } 
			} 
		}
		if ((avCaracter == avPonto)||(avCaracter == avVirgula)){ 
			avQuantidadePontoVirgulaFinais++; 
			if (avQuantidadePontoVirgulaFinais == avQuantidadePontoVirgula) { avDecimais += avVirgula; }
		}
	}
	avTamanho = avDecimais.length;
	avPosicaoVirgurla = avDecimais.indexOf(avVirgula);
	if (avTamanho == 0){ return ("0" + avVirgula + "00"); }
	if (avPosicaoVirgurla != -1){ 
		avResto = avDecimais.substring(avTamanho, (avPosicaoVirgurla + 1)); 
		avValorTransicao = avDecimais.substring(0, avPosicaoVirgurla); 
		if (avResto.length == 1){ avResto += "0"; } 
		if (avResto.length > 2){
			var avRestoNumero = parseFloat(avResto.substr(0, 2));
			if(parseFloat(avResto.substr(2, 1)) >= 5){
				var avRestoNumero = parseFloat(avResto.substr(0, 2)) + 1;
			}
			if(avRestoNumero == 100){ 
				avRestoNumero = 0;
				avValorTransicao = (parseFloat(avValorTransicao)+1).toString();
			}
			if(avRestoNumero <=9){ avRestoNumero = "0" + avRestoNumero; }
			avResto = avRestoNumero.toString();
		}
	}
	avTamanho = avValorTransicao.length;

	for (av_d = 0; av_d < avTamanho; av_d++){ 
		avCaracter = avValorTransicao.charAt(av_d); 
		if ((avCaracter != "0")||(avValorZerado)){ 
			if(avCaracter != "-"){ 
				avDecimaisTemporario += avCaracter; 
				avValorZerado = true; 
			} 
		} 
	}

	if (!avValorZerado) { avDecimaisTemporario = "0"; }

	avDecimais = ""; 
	avTamanho = avDecimaisTemporario.length;

	for (av_e = (avTamanho - 1); av_e >= 0; av_e--){ 
		if (acPosicaoPontos < 2) { 
			avDecimais = avDecimaisTemporario.charAt(av_e) + avDecimais; 
			acPosicaoPontos ++; 
		} else { 
			avDecimais = avDecimaisTemporario.charAt(av_e) + avPonto + avDecimais; 
			acPosicaoPontos = 0;
		} 
	}

	return (avTracoNegativo + avDecimais + avVirgula + avResto);
}

//Exibe tela de alerta
function twFctExibeAlerta(eaUrl, eaLargura, eaAltura, eaScroll){
	if(typeof(eaScroll) != "string"){ eaScroll = "no"; }
	return window.showModalDialog(eaUrl, null, "dialogWidth: "+eaLargura+"px; dialogHeight: "+eaAltura+"px; center: yes; help: no; resizable: no; status: no; scroll: "+eaScroll+";");
}

//Formata um texto no padrão de CPF (xxx.xxx.xxx-xx)
//Entradas: (string) ou (object)
//Retorno:
//   Se for (string), retorna o texto formatado.
//   Se for (object), não retorna nenhum valor, sendo o texto formatado ao atributo (object).value
function twFctFormataCpf(fcCpf){ 

	var fcCpfTexto = "";
	var fcCpfNumero = "";
	var fcRegExpSohNumeros = /^\d$/;

	if(typeof(fcCpf)=="object")
		fcCpfTexto = fcCpf.value.toString();
	else
		fcCpfTexto = fcCpf.toString();

	//Deixa apenas os números
	for(fc_x = 0; fc_x < fcCpfTexto.length; fc_x ++)
		if(fcRegExpSohNumeros.test(fcCpfTexto.charAt(fc_x)))
			fcCpfNumero += fcCpfTexto.charAt(fc_x).toString();

	fcCpfTexto = "";

	//Coloca "." e "-" nos números
	for(fc_x = 0; fc_x < fcCpfNumero.length; fc_x ++){
		if(fc_x <= 10){
			fcCpfTexto += fcCpfNumero.charAt(fc_x).toString();
			switch(fc_x){
				case 2: fcCpfTexto += "."; break;
				case 5: fcCpfTexto += "."; break;
				case 8: fcCpfTexto += "-"; break;
			}
		}
	}

	if(typeof(fcCpf)=="object")
		fcCpf.value = fcCpfTexto;
	else
		return(fcCpfTexto);

}

//Formata um texto no padrão de CNPJ (xxx.xxx.xxx/xxxx-xx)
//Entradas: (string) ou (object)
//Retorno:
//   Se for (string), retorna o texto formatado.
//   Se for (object), não retorna nenhum valor, sendo o texto formatado ao atributo (object).value
function twFctFormataCnpj(fcCnpj){ 

	var fcCnpjTexto = "";
	var fcCnpjNumero = "";
	var fcRegExpSohNumeros = /^\d$/;

	if(typeof(fcCnpj)=="object")
		fcCnpjTexto = fcCnpj.value.toString();
	else
		fcCnpjTexto = fcCnpj.toString();

	//Deixa apenas os números
	for(fc_x = 0; fc_x < fcCnpjTexto.length; fc_x ++)
		if(fcRegExpSohNumeros.test(fcCnpjTexto.charAt(fc_x)))
			fcCnpjNumero += fcCnpjTexto.charAt(fc_x).toString();

	fcCnpjTexto = "";

	//Coloca ".", "/" e "-" nos números
	for(fc_x = 0; fc_x < fcCnpjNumero.length; fc_x ++){
		if(fc_x <= 14){
			fcCnpjTexto += fcCnpjNumero.charAt(fc_x).toString();
			switch(fc_x){
				case 2: fcCnpjTexto += "."; break;
				case 5: fcCnpjTexto += "."; break;
				case 8: fcCnpjTexto += "/"; break;
				case 12: fcCnpjTexto += "-"; break;
			}
		}
	}

	if(typeof(fcCnpj)=="object")
		fcCnpj.value = fcCnpjTexto;
	else
		return(fcCnpjTexto);

}

//Formata um texto no padrão de Data (xx/xx/xxxx)
//Entradas: (string) ou (object)
//Retorno:
//   Se for (string), retorna o texto formatado.
//   Se for (object), não retorna nenhum valor, sendo o texto formatado ao atributo (object).value
function twFctFormataData(fdData){
	var fdDataTexto = "";
	var fdDataSohNumero = "";
	var fdRegExpSohNumeros = /^\d$/;

	if(typeof(fdData)=="object")
		fdDataTexto = fdData.value.toString();
	else
		fdDataTexto = fdData.toString();

	//Deixa apenas os números
	for(fd_x = 0; fd_x < fdDataTexto.length; fd_x ++)
		if(fdRegExpSohNumeros.test(fdDataTexto.charAt(fd_x)))
			fdDataSohNumero += fdDataTexto.charAt(fd_x).toString();

	fdDataTexto = "";

	//Coloca "/" nos números
	for(fd_x = 0; fd_x < fdDataSohNumero.length; fd_x ++){
		if(fd_x <= 7){
			fdDataTexto += fdDataSohNumero.charAt(fd_x).toString();
			switch(fd_x){
				case 1: fdDataTexto += "/"; break;
				case 3: fdDataTexto += "/"; break;
			}
		}
	}

	if(typeof(fdData)=="object")
		fdData.value = fdDataTexto;
	else
		return(fdDataTexto);
}

//Formata um texto no padrão de telefone (xx) xxxx-xxxx
//Entradas: (string) ou (object)
//Retorno:
//   Se for (string), retorna o texto formatado.
//   Se for (object), não retorna nenhum valor, sendo o texto formatado ao atributo (object).value
function twFctFormataTelefone(ftTelefone){ 

	var ftTelefoneTexto = "";
	var ftTelefoneNumero = "";
	var ftRegExpSohNumeros = /^\d$/;

	if(typeof(ftTelefone)=="object")
		ftTelefoneTexto = ftTelefone.value.toString();
	else
		ftTelefoneTexto = ftTelefone.toString();
	
	//Verifica se o número é menor que 14 digitos
	//Padrão: (nn) nnnn-nnnn
	//Se for maior pode ser dados relativos a ramal, e não precisam de formatação
	if(ftTelefoneTexto.length <= 14){	
		//Deixa apenas os números
		for(ft_x = 0; ft_x < ftTelefoneTexto.length; ft_x ++)
			if(ftRegExpSohNumeros.test(ftTelefoneTexto.charAt(ft_x)))
				ftTelefoneNumero += ftTelefoneTexto.charAt(ft_x).toString();
	
		ftTelefoneTexto = "";
	
		//Coloca "()" e "-" nos números
		for(ft_x = 0; ft_x < ftTelefoneNumero.length; ft_x ++){
			if(ft_x < 10){
				switch(ft_x){
					case 0: ftTelefoneTexto += "("; break;
					case 2: ftTelefoneTexto += ") "; break;
					case 6: ftTelefoneTexto += "-"; break;
				}
				ftTelefoneTexto += ftTelefoneNumero.charAt(ft_x).toString();
			}
		}
	
	}

	if(typeof(ftTelefone)=="object")
		ftTelefone.value = ftTelefoneTexto;
	else
		return(ftTelefoneTexto);
}

//Formata um número colocando uma quantidade de zeros definido
function twFctFormataNumero(nfValor, nfTamanho){
	var nfValorFinal = nfValor.toString();
	var nfValorTamanho = nfValorFinal.length;
	if(nfValorTamanho < nfTamanho){ 
		for(nf_o = nfValorTamanho; nf_o < nfTamanho; nf_o ++){ 
			nfValorFinal = "0" + nfValorFinal; 
		} 
	}
	return (nfValorFinal);
}


//Acessa uma página e retorna seu código fonte
function twFctPegarHttp(phUrl){
	var phHttp = new ActiveXObject("Microsoft.XMLHTTP");
	phHttp.open("GET", phUrl, false);
	phHttp.send();
	return(phHttp.responseText);
}


//Pula para o próximo campo quando o número de caracteres digitados for igual ao definido do MaxLength
function twFctPulaCampo(pcCampo) {
	if ( (pcCampo.value.length == pcCampo.maxLength)) {
		var pcIndiceForm = -1;
		for (pc_i = 0; pc_i < document.forms.length; pc_i++) {
			for (pc_j = 0 ; pc_j < document.forms[pc_i].elements.length; pc_j++) {
				if (document.forms[pc_i].elements[pc_j].name == pcCampo.name) {
					pcIndiceForm = pc_i;
					break;
				}
			}
			if (pcIndiceForm != -1)
				break;
		}
		for (pc_i = 0; pc_i <=document.forms[pcIndiceForm].elements.length; pc_i++) {
			if (document.forms[pcIndiceForm].elements[pc_i].name == pcCampo.name) {
				while ( (document.forms[pcIndiceForm].elements[(pc_i+1)].type == "hidden") &&
				(pc_i < document.forms[pcIndiceForm].elements.length) ) {
					pc_i++;
				}
				document.forms[pcIndiceForm].elements[(pc_i+1)].focus();
				break;
			}
		}
	}
}

//Gera um número aleatório em um intervalo de números
function twFctRandomize(rMenorIntervalo, rMaiorIntervalo){
	return (Math.floor(Math.random() * (rMaiorIntervalo - rMenorIntervalo)) + rMenorIntervalo);
}

//Substitui um valor em um texto por outro.
function twFctReplace(rTextoOriginal, rEncontrar, rSubstituir) {
	var rPosicao = 0;
	var rTextoTemporario = "" + rTextoOriginal;
	while (rTextoTemporario.indexOf(rEncontrar) > -1) {
		rPosicao = rTextoTemporario.indexOf(rEncontrar);
		rTextoTemporario = "" + (rTextoTemporario.substring(0, rPosicao) + rSubstituir + rTextoTemporario.substring((rPosicao + rEncontrar.length), rTextoTemporario.length));
	}
	return (rTextoTemporario);
}

//Limita a digitação para apenas de números e virgula em um campo (Padrão de moeda).
function twFctSoMoeda(smEvento){
	var smCaracteresValidos = '0123456789.,-';	
	var smCodigoCaracter = (window.Event) ? smEvento.which : smEvento.keyCode;
	if (smCodigoCaracter == 13) 
		return true;

	var smCaracter = String.fromCharCode(smCodigoCaracter);
	if (smCaracteresValidos.indexOf(smCaracter) == -1) 
		return false;
}

//Limita a digitação para apenas de números em um campo.
function twFctSoNumeros(snEvento){
	var snCaracteresValidos = '0123456789';	
	var snCodigoCaracter = (window.Event) ? snEvento.which : snEvento.keyCode;
	var snCaracter = String.fromCharCode(snCodigoCaracter);
	if (snCaracteresValidos.indexOf(snCaracter) == -1) 
		return false;
	return true;
}

//Remove os espaços em branco antes e depois de um texto.
function twFctTrim(tTexto){
	while (tTexto.charAt(0) == " ")
		tTexto = tTexto.substr(1 , (tTexto.length - 1));
	while (tTexto.charAt(tTexto.length-1) == " ")
		tTexto = tTexto.substr(0, (tTexto.length - 1));
	return (tTexto);
}