function fValidateNumber(string, casas) {
	var n = 0; //número de pontos
	var referencia = 4;
	var casasDec = casas
	var achouVirgula = false;
	var achouPonto   = false;
	var posVirg = 0;
	var posPonto = 0;
	var contPonto = 0;
	var pos = 0;
	var str = string.value;
	var charValidos = "0123456789.,";
	var ok = true;
	var sNumber;

	if (str == '') {
		ok = false;
	} else {
		i = 0;

        sNumber = string.value.replace(",", "");
        if (isNaN(sNumber)) {
            alert('Invalid number');
            string.focus();
            string.select();
            return;
        }

		while ( (ok == true) && (i < str.length) ) {
			j = 0;
			while ((str.charAt(i) != charValidos.charAt(j))  &&  (j <= charValidos.length-1)) {
				j++;
			}

			if (j == charValidos.length) {
				alert('Invalid character(s) in the expression');
				string.focus();
				string.select();
				ok = false;
				break;
			}

			i++;
		}

		if (!ok)
			return;

		for(i=str.length; i>0; i--) {
			if ((str.charAt(0)=='0') && (str.charAt(1)!='.')) {
				if(casasDec > 0) {
					alert('Invalid format');
					string.focus();
					string.select();
					ok = false;
					break;
				}
			} else
				if (str.charAt(i) == '.') {
					posVirg = pos;
					achouVirgula = true;

					if (casasDec == 0) {
						alert('Invalid number');
						string.focus();
						string.select();
						ok = false;
						break;
					}
				} else
					if (str.charAt(i)==',') {
						n++;
						posPonto = pos;
						achouPonto = true;

						if (n > 1)
							referencia+=4;

						if (casasDec == 0) {
							alert('Invalid number');
							string.focus();
							string.select();
							ok = false;
							break;
						}
					}

					if (!ok)
						return;

					if  ((achouVirgula==true) && (posVirg != casasDec+1)) {
						alert('Invalid number of decimal points.\nPunch in '+casasDec+' decimal point(s)...');
						string.focus();
						string.select();
						break;
					} else
						if ((achouVirgula==false) && ((posPonto % 4) != 0)) {
							ok = false;
							alert('Invalid format');
							string.focus();
							string.select();
							break;
						} else
							if((achouVirgula == true) && ((posPonto % posVirg) != 0) && (posVirg % 2==0)) {
								ok = false;
								alert('Invalid format');
								string.focus();
								string.elements[0].select();
								break;
							} else
								if (((achouPonto==true) && (achouVirgula == true)) && ((posPonto % (posVirg+referencia)) != 0)) {
									ok = false;
									alert('Invalid format');
									string.focus();
									string.select();
									break;
								}

								pos++;
		}

		if ((achouVirgula==false) && (casasDec > 0) && (ok==true)) { 
			var casas = "";
			var i;

			for(i=0;i < casasDec;i++) {
				casas = casas + "0";
				achouVirgula == true;
			}

			string.value = string.value +"."+casas;
		}
	}
}
