function validoSelectBox(o) {
	return (o.options[o.selectedIndex].value != "-1" && 
			o.options[o.selectedIndex].value != "_none_" && 
			o.options[o.selectedIndex].value.trim() != "")
}

function validoEnderecoEmail(s) {
	if(s==""){return true} 
	var temp = s.replace(/\s/g, "")
	return (temp.match(/^[\w\.\-]+\x40[\w\.\-]+\.\w{3}$/)) && temp.charAt(0) != "." && !(temp.match(/\.\./))
}

function validoMoeda(s) { // Currency (moeda corrente)
	var temp = s
	return (temp.match(/^\d{1,3}(\.\d{3})*\,\d{2}$/))
}

function somenteNumeros(s){
	s = s.replace(/\D/g,"")
	return s
}

function campoDataBlurHandler() {
	var d = this.value
	d = somenteNumeros(d)
	this.value=d.replace(/(\d\d)(\d\d)(\d{4})/, "$1/$2/$3")
}

function campoCepBlurHandler() {
	var d = this.value
	d = somenteNumeros(d)
	this.value=d.replace(/(\d\d\d\d\d)(\d\d)/, "$1-$2")
}

function campoNumeroBlurHandler() {
	var d = this.value
	this.value=somenteNumeros(d)
}

var STD_ERROR_PREFIX = "Existem um ou mais problemas com os valores\ndigitados no formulário.\n\n"

function validoData(string) {
	if(string==""){return true}
	var array_data = new Array;
	var ExpReg = new RegExp("(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[12][0-9]{3}");
	
	//vetor que contem o dia o mes e o ano
	array_data = string.split("/");
	erro = false;
	
	//Valido se a data esta no formato dd/mm/yyyy e se o dia tem 2 digitos e esta entre 01 e 31
	//se o mes tem d2 digitos e esta entre 01 e 12 e o ano se tem 4 digitos e esta entre 1000 e 2999
	if (string.search(ExpReg)==-1)
		erro = true;
	//Valido os meses que nao tem 31 dias com execao de fevereiro
	else if ( ( ( array_data[1] == 4 ) || ( array_data[1] == 6 ) || ( array_data[1] == 9 ) || ( array_data[1] == 11 ) ) && ( array_data[0] > 30 ) )
		erro = true;
	//Valido o mes de fevereiro
	else if ( array_data[1] == 2 ) {
		//Valido ano que nao e bissexto
		if ( ( array_data[0] > 28 ) && ( ( array_data[2] % 4 ) != 0 ) )
			erro = true;
		//Valido ano bissexto
		if ( ( array_data[0] > 29 ) && ( ( array_data[2] % 4 ) == 0 ) )
			erro = true;
	}
	if ( erro ) {
		return false
	} else {
		return true
	}
}

function campoCpfCnpjBlurHandler(n) {
	var n = somenteNumeros(this.value)
	if (n.length > 11){
		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
		n = n.replace(reCnpj, "$1.$2.$3/$4-$5");
	} else {
		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
		n = n.replace(reCpf, "$1.$2.$3-$4");
	}
	this.value=n
}

// validaCpfCnpj //

NUM_DIGITOS_CPF  = 11;
NUM_DIGITOS_CNPJ = 14;
NUM_DGT_CNPJ_BASE = 8;

function validaCpfCnpj(pCpfCnpj){
	var numero = pCpfCnpj.replace(/\D/g, "");
	if (numero.length > NUM_DIGITOS_CPF)
		return isCnpj(pCpfCnpj)
	else
		return isCpf(pCpfCnpj);
}

function unformatNumber(pNum){
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
}

function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj){
	if (pIsCnpj==null) pIsCnpj = false;
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var numero = unformatNumber(pCpfCnpj);

	numero = numero.lpad(maxDigitos, '0');
	if (!pUseSepar) return numero;

	if (pIsCnpj){
		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
		numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
	}
	else{
		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
		numero = numero.replace(reCpf, "$1.$2.$3-$4");
	}
	return numero;
}

function dvCpfCnpj(pEfetivo, pIsCnpj){
	if (pIsCnpj==null) pIsCnpj = false;
	var i, j, k, soma, dv;
	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);
	calculado = calculado.substring(2, maxDigitos);
	var result = "";
	for (j = 1; j <= 2; j++){
		k = 2;
		soma = 0;
		for (i = calculado.length-1; i >= 0; i--){
			soma += (calculado.charAt(i) - '0') * k;
			k = (k-1) % cicloPeso + 2;
		}
		dv = 11 - soma % 11;
		if (dv > 9) dv = 0;
		calculado += dv;
		result += dv
	}
	return result;
}

function isCpf(pCpf){
	var numero = formatCpfCnpj(pCpf, false, false);
	var base = numero.substring(0, numero.length - 2);
	var digitos = dvCpfCnpj(base, false);
	var algUnico, i;

	// Valida dígitos verificadores
	if (numero != base + digitos) return false;

	/* Não serão considerados válidos os seguintes CPF:
	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
	 */

	algUnico = true;
	for (i=1; i<NUM_DIGITOS_CPF; i++){
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	return true;
}

function isCnpj(pCnpj){
	var numero = formatCpfCnpj(pCnpj, false, true);
	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
	var digitos = dvCpfCnpj(base + ordem, true);
	var algUnico;

	// Valida dígitos verificadores
	if (numero != base + ordem + digitos) return false;

	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:
	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
	 */

	algUnico = numero.charAt(0) != '0';
	for (i=1; i<NUM_DGT_CNPJ_BASE; i++){
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	if (algUnico) return false;

	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.
	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300
	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).
	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.
	 */
	if (ordem == "0000") return false;
	return true
	//return (base == "00000000" || parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");		
}