//======================================
//Nome: GenJsValidateNumber
//Linguagem: Java Script
//Descrição: Essa função recebe um número e o valida respeitando os parâmetros passados
//
//Autor: Equipe Biblioteca Marlin
//
//Data: 12/06/2002
//
//Parâmetros de entrada:
//	- pStrFormattedR	=> Número de retorno formatado
//	- pStrToValidate	=> Número a ser validado
//	- pIntFormat		=> Formato do número quanto aos separadores de milhar e decimal
//								1 - VIRGULA:	separador decimal
//								    PONTO:		separador de milhar
//								2 - VIRGULA:	separador de milhar
//								    PONTO:		separador decimal
//	- pDblLimiteMin		=> Valor mínimo do número
//	- pDblLimiteMax		=> Valor máximo do número
//	- pIntMaxNumDec		=> Número máximo de casas decimais aceitáveis
//	- pIntOptional		=> Se o número é opcional ou obrigatório
//								0 - obrigatório
//								1 - opcional
//	- 
//Retorno: Código de erro
//
//Informações adicionais:
//	+ Funções:
//		- FncJsVerifyIntParameter(pParam, pIntDefValue)
//		- FncJsVerifyDblParameter(pParam, pDblDefValue)
//		-
//	+ Includes:
//		-
//	+ Objetos:
//		-
//	+ Stored Procedures:
//		-
//Historico Alteracao:
//	- 04/07/2002 Thyago Consort
//	-
//======================================
function GenJsValidateNumber(pStrFormattedR, pStrToValidate, pIntFormat, pDblLimiteMin, pDblLimiteMax, pIntMaxNumDec, pIntOptional){
	var lObjRegExp;
	var lStrRegExp;
	var p = new Array;
	
	var lStrSepMilhar;
	var lStrSepDecimal;
	
	var lStrFormatted;			//NUMERO
	var lDblFormatted;
	var lIntRound;				//PARTE INTEIRA DO NUMERO
	var lIntDecimal;			//PARTE DECIMAL DO NUMERO
	
	pStrFormattedR[0] = pStrToValidate;
	
	//Verificando parâmetros de entrada e valores default
	p[0] = pIntFormat;
	if (!FncJsVerifyIntParameter(p,1)) {
 		return -11;
        }
	pIntFormat = p[0];
	
	p[0] = pIntMaxNumDec;
	if (!FncJsVerifyIntParameter(p,0)) {
 		return -11;
        }
	pIntMaxNumDec = p[0];
	
	p[0] = pIntOptional;
	if (!FncJsVerifyIntParameter(p,1)) {
 		return -11;
        }  
	pIntOptional = p[0];
	
	p[0] = pDblLimiteMin;
	if (!FncJsVerifyDblParameter(p,0)) {
 		return -11;
        }
    pDblLimiteMin = p[0];
        
    p[0] = pDblLimiteMax;
	if (!FncJsVerifyDblParameter(p,0)) {
 		return -11;
        }
    pDblLimiteMax = p[0];
     
	lStrFormatted = pStrToValidate;
	lStrFormatted = lStrFormatted.replace(/^\s*/, '');
	lStrFormatted = lStrFormatted.replace(/\s*$/, '');
	
	if (lStrFormatted == "") {
            if (pIntOptional == 0) { 
		return -260;
            }
            return 0;
        }
	
	//Verifica formatação do número
	switch(pIntFormat){
	case 1: //3.330,50
		lStrSepMilhar = ".";
		lStrSepDecimal = ",";
		break;
	
	case 2: //'3,330.50
		lStrSepMilhar = ",";
		lStrSepDecimal = ".";
		break;
	default:
		return -11;
	}
	
	//Leitura do comando de validação
	//1	\d{min,max}		=> min até max caracteres inclusos em 0-9
	//2	\d{min,}		=> pelo menos min caracteres inclusos em 0-9
	//3	\d{num}			=> exatamente num caracteres inclusos em 0-9
	//4	(\.\d{3})*		=> 0 ou mais grupos de caracteres inclusos em 0-9 seguido de um {'.'}
	//5	(,\d+)?		=> 0 ou 1 grupo de caracteres {','} seguido de 0-9
	
	//Caso exista separador milhar a validação será diferente
	lStrRegExp = "^-?(\\d{1,3}(\\" + lStrSepMilhar + "\\d{3})*|\\d+)";
	
	//if (lStrFormatted.indexOf(lStrSepMilhar) != -1){
	//	lStrRegExp = "^-?\\d{1,3}(\\" + lStrSepMilhar + "\\d{3})*";
	//}else{
	//	lStrRegExp = "^-?\\d+";
	//}
	
	if (Number(pIntMaxNumDec) > 0){
		lStrRegExp = lStrRegExp + "(\\" + lStrSepDecimal + "\\d{1," + pIntMaxNumDec + "})?$";
	}else{
		lStrRegExp = lStrRegExp + "$";	
	}
	lObjRegExp = new RegExp(lStrRegExp);
	if (!lObjRegExp.test(lStrFormatted)) {
		return -261;
      }
	
	//Retira o separador milhar e usa o ponto como separador decimal e monta a string de retorno
	switch(lStrSepMilhar){
	case '.':
		lStrFormatted = lStrFormatted.replace(/\./g, "");
		break;
	
	case ',':
		lStrFormatted = lStrFormatted.replace(/\,/g, "");
		break;
	default:
	
	}
	lStrFormatted = lStrFormatted.replace(lStrSepDecimal, ".");
	
	pStrFormattedR[0] = lStrFormatted;
	
	//Isolando a parte decimal da parte inteira
	if (lStrFormatted.indexOf(".") != -1){
		lIntRound = parseInt(lStrFormatted.substr(0,lStrFormatted.indexOf(".")));
		lIntDecimal = parseInt(lStrFormatted.substr(lStrFormatted.indexOf(".") + 1, lStrFormatted.length - lStrFormatted.indexOf(".")));
	}
	else{
		lIntRound = parseInt(lStrFormatted);
		lIntDecimal = 0;
	}
	lIntRound = Math.abs(lIntRound);
	lDblFormatted = (lIntRound*(Math.pow(10,pIntMaxNumDec)) + lIntDecimal)/(Math.pow(10,pIntMaxNumDec));
	if (lStrFormatted.indexOf("-") != -1){
		lDblFormatted = (-1)*lDblFormatted;
	}
	
	//Testa se o número está no intervalo pDblLimiteMin < lStrFormatted < pDblLimiteMax
	if ( lDblFormatted < pDblLimiteMin ){
		return -262;
	}
	if ( lDblFormatted > pDblLimiteMax ){
		return -263;
	}
	
	return 0;
}