function numberfieldfmt(campo, milhar, decimal, digitos, formato, simb_mon){
	if( formato == 'general'){
		campo.value = numberfmt(campo.value, milhar, decimal, digitos, formato);
	}else{
		if( formato == 'currency'){
			campo.value = numbercurrencyfmt(campo.value, milhar, decimal, digitos, simb_mon);
		}else{		
			if( formato == 'fixed'){
				campo.value = numberfixedfmt(campo.value, milhar, decimal, digitos);
			}else{
				if( formato == 'default'){
					campo.value = numberfmtmilhar(campo.value, milhar, decimal, digitos);
				}else{
					if( formato == 'percent'){
						campo.value = numberpercentformatador(campo.value, milhar, decimal, digitos);
					}else{
						campo.value='ERRO NO FORMATO. ESPERADO: general, currency, fixed, default, percent. Econtrado: ' + formato;
					}
				}
			}
		}
	}	
}

function numberfmtchars(valor, milhar, decimal, digitos){
	if(valor == ''){
		return '';
	}
	var ret = '';
	var numberCheck = '0123456789';
	var separaCheck = ''+decimal;
	var allCheck = numberCheck+separaCheck;

	for(i = 0; i < valor.length; i++){
		var key = valor.charAt(i);
		if (allCheck.indexOf(key) > -1){			
			ret += key;
		}
	}
	return ret;
}

function numberfmtdigits(valor, milhar, decimal, digitos){
	var ret = '';	
	var parteDecimal = false;
	var totDigitos = 0;
	for(i = 0 ; i < valor.length; i++){
		var key = valor.charAt(i);
		if(digitos == -1){
			ret += key;
			continue;
		}
		if(key == decimal){
			if(parteDecimal){
				continue;
			}		
			parteDecimal = true;
			ret += key;
			continue;
		}
		if(parteDecimal){
			if(totDigitos < digitos){
				ret += key;
				totDigitos++;
				continue;
			}else{
				return ret;
			}
		}else{
			ret += key;
			continue;
		}
		ret += key;
	}
	return ret;
}

function removedigitend(valor, milhar, decimal, digitos){
	if(valor == ''){return '';}
	var ret = '';
	if(valor.charAt(valor.length-1)==decimal){
		ret = valor.substring(0,valor.length-1);
	}else{
		ret = valor;
	}
	return ret;
}

function numberremoverightzero(valor, milhar, decimal, digitos){
	var ret = '';
	var achouNr = false;
	for(i = 0 ; i < valor.length; i++){		
		if(!achouNr && valor.charAt(i) == '0'){
			try{
				if( valor.charAt(i+1) == decimal){
					ret += valor.charAt(i);
					achouNr = true;
				}
			}catch(e){}
		}else{
			achouNr = true;
			ret += valor.charAt(i);
		}
	}
	return ret;
}

function numberfmt(valor, milhar, decimal, digitos){
	var ret = numberfmtchars(valor, milhar, decimal, digitos);
	if(valor == ''){
		return '';
	}	
	ret = numberfmtdigits(ret, milhar, decimal, digitos);
	ret = removedigitend(ret, milhar, decimal, digitos);
	ret = numberremoverightzero(ret, milhar, decimal, digitos);
	return ret;
}

function numberfixedfmt(valor, milhar, decimal, digitos){
	var ret = numberfmt(valor, milhar, decimal, digitos);
	try{
		ret_sp =  ret.split(decimal);
		digitos_falta = digitos - ret_sp[1].length;
		for(i = 0; i < digitos_falta; i++){
			ret += '0';
		}
	}catch(e){
		ret = numberfmt(valor, milhar, decimal, digitos);
	}
	return ret;
}

function numberfmtmilhar(valor, milhar, decimal, digitos){
	var ret = numberfmt(valor, milhar, decimal, digitos);
	ret = numberdividemilhares(ret, milhar, decimal, digitos);
	return ret;
}

function numberdividemilhares(valor, milhar, decimal, digitos){
	var ret = '';
	var inDecimal = valor.indexOf(decimal) > -1;
	var fim = valor.length-1;
	if(inDecimal){
		ret = valor.substring(valor.indexOf(decimal) , valor.length);
		fim = (valor.indexOf(decimal)-1);
	}
	var contMilhar = 0;
	for(i = fim ; i >= 0 ; i--){
		var key = valor.charAt(i);
		if(contMilhar==3){
			ret = milhar + ret;
			contMilhar = 0;
		}
		ret = key + ret;
		contMilhar++;
	}
	return ret;
}

function numbercurrencyfmt(valor, milhar, decimal, digitos, simb_mon){	
	var ret = numberfieldonlydigitseparator(valor, milhar, decimal, digitos);
	ret = numberfmtmilhar(ret, milhar, decimal, digitos);
	if(ret == ''){
		return '';
	}
	return simb_mon+" "+ret;
}

function numberpercentformatador(valor, milhar, decimal, digitos){
	var ret = numberfieldonlydigitseparator(valor, milhar, decimal, digitos);
	ret = numberfmtmilhar(ret, milhar, decimal, digitos);
	if(ret == ''){
		return '';
	}	
	return ret+" %";
}

function numberfieldonlydigitseparator(valor, milhar, decimal, digitos){
	if(valor==''){return '';}
	var ret = '';
	var achouVirgula = false;
	for(i=0;i<valor.length;i++){
		var key = valor.charAt(i);
		if(key == decimal){
			if(!achouVirgula){
				ret += key;
				achouVirgula = true;
			}
		}else{
			ret += key;
		}
	}
	return ret;
}

function numberfieldfmtexibir(campo, milhar, decimal, digitos, formato, simb_mon){
	if(formato == 'default'){
		campo.value = numberfmt(campo.value, milhar, decimal, digitos);
	}else{
		if(formato == 'currency'){
			campo.value = numberfmt(campo.value, milhar, decimal, digitos);	
		}else{
			if(formato == 'percent'){
				campo.value = numberfmt(campo.value, milhar, decimal, digitos);
			}
		}				
	}	
}
