/********************************************************************************************************************************************************
 * Archivo que permite evaluar si los datos introducidos son numéricos, si un campo está vacío, en caso de ser un porcentaje, evalúa que esté correcto. *
 * 16 - 11 - 2001. Version 1.0                                                                                                                          *
 * Necesita de archivo error.js y generic.js                                                                                                            *   
 ********************************************************************************************************************************************************/

/********************************************************************************************************************************************************
 * Declaración Global de variables                                                                                                                      *
 ********************************************************************************************************************************************************/

var number = "";
var empty = "";
var percent = "";
var errorNumber = new Array(4);
var logNumber  = "";
var logEmpty   = "";
var logPercent = "";

/********************************************************************************************************************************************************
 * Es la función principal del archivo, sirve para declarar el "constructor", mismo que servirá para intanciar en otras funciones, su primer letra debe *
 * ser siempre mayúscula. Recibe como parámetro el campo a evaluar.                                                                                     *
 ********************************************************************************************************************************************************/

function Number(field){
//    var field = getValue(fieldName);
    var re1 = /[^0-9]/g;
    var re2 = /\s/g;
//    var re3 = /^[ ]*[+-]?\d*\.?\d*([eE][+-]?\d+)?[ ]*$/;
    this.number     = (field.search(re1) == -1)?true:(setErrorNumber("js.error.number.type","0"));
    this.empty      = (field.replace(re2, '') != '')?true:(setErrorNumber("js.error.number.empty","1"));
    this.percent    = (field.search(re1) == -1)?( (field > 100)?(setErrorNumber("js.error.number.percent.invalid","2")):true):(getPercent(field, field.search(re1)));
    this.nDouble     = (field.search(re1) == -1)?true:(getDouble(field, field.search(re1)));
    this.value      = field;
    this.logNumber  = errorNumber[0];
    this.logEmpty   = errorNumber[1];
    this.logPercent = errorNumber[2];
    this.lognDouble     = errorNumber[3];
}

/********************************************************************************************************************************************************
 * Esta función me permite asignar el tipo de error que se está presentando en la evaluación de un campo, recibe como parámetro el texto del error, así *
 * como la posición que éste tendrá dentro del arreglo de logs.                                                                                         *
 ********************************************************************************************************************************************************/

function setErrorNumber(displayError, pos){
    errorNumber[pos] = displayError;
    return false;
}

/********************************************************************************************************************************************************
 * Esta función se encarga de realizar la evaluación para saber si es un dato porcentual o no. Recibe como parámetro el dato a evaluar, asi como el     *
 * resultado de eliminar los espacios en blanco de la cadena.                                                                                            *
 ********************************************************************************************************************************************************/

function getPercent(field, result){                         //Recibe la forma en la que se encuentran los campos a evaluar
    var re = /[^0-9]/g;
    if (field.substring(result, (result + 1) ) == '.'){ //Verifica si el carácter no numérico existente en la cadena es un punto
        var tmp= field.substring((result + 1),field.length).search(re); //Verifica si a partir de ese caracter no existe otro caracter no numérico
        if(tmp != -1){                                                //En caso de no existir continua con la evaluación
            setErrorNumber("El caracter introducido no es numérico ("+((result + 1) + (tmp + 1) )+"° caracter), intente otra vez","2");
            return false;
        }else{
            var array = field.split('.');
            if(array[0].length > 2){ 
                setErrorNumber("No pueden existir mas de 2 dígitos enteros para este campo","2");	
	            return false;
            }   
		}
    }else{                                                            //Si el caracter encontrado no es un punto(.) genera el mensaje de error
        setErrorNumber("El caracter introducido no es numérico ("+(result + 1)+"° caracter), intente otra vez 2","2");
        return false;
    }//Fin del condicional que verifica el punto
    return true;
}//Fin de la funcion

/********************************************************************************************************************************************************
 * Esta función se encarga de realizar la evaluación para saber si es un dato double o no. Recibe como parámetro el dato a evaluar, asi como el     *
 * resultado de eliminar los espacios en blanco de la cadena.                                                                                            *
 ********************************************************************************************************************************************************/

function getDouble(field, result){                         //Recibe la forma en la que se encuentran los campos a evaluar
    var re = /[^0-9]/g;
    if (field.substring(result, (result + 1) ) == '.'){ //Verifica si el carácter no numérico existente en la cadena es un punto
        var tmp= field.substring((result + 1),field.length).search(re); //Verifica si a partir de ese caracter no existe otro caracter no numérico
        if(tmp != -1){                                                //En caso de no existir continua con la evaluación
            setErrorNumber("El caracter introducido no es numérico ("+((result + 1) + (tmp + 1) )+"° caracter), intente otra vez","3");
            return false;
        }else if (field.length == 1){
            setErrorNumber("Caracteres insuficientes para un double","3");
            return false;
        }        
    }else{                                                            //Si el caracter encontrado no es un punto(.) genera el mensaje de error
        setErrorNumber("El caracter introducido no es numérico ("+(result + 1)+"° caracter), intente otra vez 2","3");
        return false;
    }//Fin del condicional que verifica el punto
    return true;
}//Fin de la funcion

/********************************************************************************************************************************************************
 * Esta función verifica campo dado tenga valores de solo numeros, de lo contrario genera un error. Recibe el nombre del campo.                         *
 ********************************************************************************************************************************************************/

function validateNumber(field){
    var data = new Number(field);
    if(!data.number){
        getError(data.logNumber,'',field);
        return false;
    }	
    return true;
}

/********************************************************************************************************************************************************
 * Esta función verifica campo dado tenga valores, de lo contrario genera un error. Recibe el nombre del campo.                                         *
 ********************************************************************************************************************************************************/

function validateEmptyNumber(field){
    var data = new Number(field);
    if(!data.empty){
        getError(data.logEmpty,'',field);
        return false;
    }	
    return true;
}

/********************************************************************************************************************************************************
 * Esta función verifica campo dado tenga valores de porcentaje, de lo contrario genera un error. Recibe el nombre del campo.                           *
 ********************************************************************************************************************************************************/

function validatePercent(field){
    var data = new Number(field);
    if(!data.percent){
        getError(data.logPercent,'',field);
        return false;
    }	
    return true;
}


/********************************************************************************************************************************************************
 * Esta función verifica campo dado tenga valores de porcentaje, de lo contrario genera un error. Recibe el nombre del campo.                           *
 ********************************************************************************************************************************************************/

function evaluatePrice(field, enteros, decimales, separator){
    var re = /[^0-9]/g;
    var data = getValue(field);
    var log = data.search(re);
    if( log != -1){
        if (data.substring(log, (log + 1) ) == separator){ //Verifica si el carácter no numérico existente en la cadena es un punto
            var tmp= data.substring((log + 1),data.length).search(re); //Verifica si a partir de ese caracter no existe otro caracter no numérico
            if(tmp != -1){                                                //En caso de no existir continua con la evaluación
                getError("El caracter introducido no es numérico ("+((log + 1) + (tmp + 1) )+"° caracter), intente otra vez","",field);
                return false;
            }else{
                var array = data.split(separator);
                if(array[0].length > enteros){ 
                    getError("No pueden existir mas de "+enteros+" dígitos enteros para este campo","",field);	
                }else if(array[1].length > decimales){
                    getError("No pueden existir mas de "+decimales+" dígitos decimales para este campo","",field);	
                }
            }            
        }else{
            getError("El caracter introducido no es numérico ("+(log + 1) +"° caracter), intente otra vez","",field);
            return false;
        }//Fin del condicional que evalua los demás caracteres numericos
    }else{
        if(data.length > enteros){ 
            getError("No pueden existir mas de "+enteros+" dígitos enteros para este campo","",field);
        }
    }  
    return true;    
}