/*************************************************** 

fValidate
Copyright (c) 2000-2003
by Peter Bailey
www.peterbailey.net/fValidate/

fValidate.numbers.js

Included Validators
-------------------
number
numeric
decimal
decimalr

This file is only part of a larger validation
library and will not function autonomously.

Created at a tab-spacing of four (4)

****************************************************/

fValidate.prototype.number = function( type, lb, ub )
{
if ( this.typeMismatch( 'text' ) ) return;
var num  = ( type == 0 ) ? parseInt( this.elem.value, 10 ) : parseFloat( this.elem.value );
lb       = this.setArg( lb, 0 );
ub       = this.setArg( ub, Number.infinity );
if ( lb > ub )
{
this.devError( [lb, ub, this.elem.name] );
return;
}
var fail = Boolean( isNaN( num ) || num != this.elem.value );
if ( !fail )
{
switch( true )
{
case ( lb != false && ub != false ) : fail = !Boolean( lb <= num && num <= ub ); break;
case ( lb != false ) : fail = Boolean( num < lb ); break;
case ( ub != false ) : fail = Boolean( num > ub ); break;
}
}
if ( fail )
{
this.throwError( [this.elem.fName] );
return;
}
this.elemPass = true;
}

fValidate.prototype.numeric = function( len )
{
if ( this.typeMismatch( 'text' ) ) return;
len = this.setArg( len, '*' );
var regex = new RegExp( ( len == '*' ) ? "^\\d+$" : "^\\d{" + parseInt( len, 10 ) + "}\\d*$" );
if ( !regex.test( this.elem.value ) )
{
if ( len == "*" )
{
this.throwError( [this.elem.fName] );
} else {
this.throwError( [len, this.elem.fName], 1 );
}
}
}

fValidate.prototype.decimal = function( lval, rval )
{
if ( this.typeMismatch( 'text' ) ) return;
var regex = '', elem = this.elem;
if ( lval != '*' ) lval = parseInt( lval, 10 );
if ( rval != '*' ) rval = parseInt( rval, 10 );

if ( lval == 0 )
regex = "^\\.[0-9]{" + rval + "}$"; 
else if ( lval == '*' )
regex = "^[0-9]*\\.[0-9]{" + rval + "}$";
else if ( rval == '*' )
regex = "^[0-9]{" + lval + "}\\.[0-9]+$";
else
regex = "^[0-9]{" + lval + "}\\.[0-9]{" + rval + "}$";

regex = new RegExp( regex );

if ( !regex.test( elem.value ) )
{
this.throwError( [elem.value,elem.fName] );
} 
}

fValidate.prototype.decimalr = function( lmin, lmax, rmin, rmax )
{
if ( this.typeMismatch( 'text' ) ) return;
lmin = ( lmin == '*' )? 0 : parseInt( lmin, 10 );
lmax = ( lmax == '*' )? '': parseInt( lmax, 10 );
rmin = ( rmin == '*' )? 0 : parseInt( rmin, 10 );
rmax = ( rmax == '*' )? '': parseInt( rmax, 10 );
var decReg = "^[0-9]{"+lmin+","+lmax+"}\\.[0-9]{"+rmin+","+rmax+"}$"
var regex = new RegExp(decReg);
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.fName] );
}
return true;
}
// EOF