;+
; PROJECT
;           SOLARB EIS
;
; NAME
;           EIS_VALIDATE_INPUT
;
; PURPOSE
;           This function validates a text-widget number
;
; NOTES
;           The
;
; CATEGORY
;           EIS timeline planning
;
; WRITTEN
;           John A Rainne RAL
;
; VERSION
;           v0.1 JAR 6-Jul-2007
;               Replaced LONG with DOUBLE function when checking if the
;               number is the same. This will allow for fractional
;               inputs.
;          v0.2 JAR 19-Jun-2008
;               Added "allow_same" keyword
;
;-
;______________________________________________________________________________
FUNCTION eis_validate_input , name                      ,                   $
                              newValue                  ,                   $
                              oldValue                  ,                   $
                              minValue                  ,                   $
                              maxValue                  ,                   $
                              multiple   = multiple     ,                   $
                              multiplier = multiplier   ,                   $
                              allow_same = allow_same

IF (KEYWORD_SET(multiplier) NE 1) THEN multiplier = 1.

; 1:  Check newValue is a number
isNumber = is_number(newValue)
IF (isNumber NE 1) THEN BEGIN
    mText = "This is not a number!"
    RETURN , {valid:0 , mText:mText}
ENDIF
; OK, we have a number
; 2:  Check number is > minValue
IF (LONG(newValue*multiplier) LT minValue) THEN BEGIN
    minValueString = STRCOMPRESS(minValue/multiplier,/REMOVE_ALL)
    mText = "Value must be GE to " + minValueString + ". Aborting!"
    RETURN , {valid:0 , mText:mText}
ENDIF
; 3:  Check number is < maxValue
IF (LONG(newValue*multiplier) GT maxValue) THEN BEGIN
    maxValueString = STRCOMPRESS(maxValue/multiplier,/REMOVE_ALL)
    mText = "Value must be LE to " + maxValueString + ". Aborting!"
    RETURN , {valid:0 , mText:mText}
ENDIF
; 4:  Check number is the same
IF (KEYWORD_SET(allow_same) NE 1) THEN BEGIN
   IF (DOUBLE(newValue*multiplier) EQ oldValue) THEN BEGIN
       maxValueString = STRCOMPRESS(maxValue/multiplier,/REMOVE_ALL)
       mText = "Value hasn't changed! Aborting"
       RETURN , {valid:0 , mText:mText}
   ENDIF
ENDIF
; 5:  Check number is a multiple (if necessary!)
IF (KEYWORD_SET(multiple) EQ 1) THEN BEGIN
    IF ((newValue MOD multiple) NE 0) THEN BEGIN
        ; OK, calculate nearest points for the thicky user!
        LowerRem = newValue MOD multiple
        lowerVal = STRCOMPRESS(newValue-LowerRem,/REMOVE_ALL)
        UpperRem = (newValue+multiple) MOD multiple
        upperVal = STRCOMPRESS((newValue+multiple) - UpperRem,/REMOVE_ALL)
        mText1   = "Must be a multiple of 8. Aborting!"
        mText2   = "(Hint: Try " + lowerVal + " or " + upperVal + " - bozo)"
        mText    = [mText1,mText2]
        RETURN , {valid:0 , mText:mText}
    ENDIF
ENDIF

RETURN , {valid:1 , mText:''}

END













