             return false;
         }
         // Make sure there's only one decimal point.
-        else if (input.indexOf(decimalSeparator) !=
-                 input.lastIndexOf(decimalSeparator))
+        else if ((decimalSeparator != negativeSymbol) &&
+                 (input.indexOf(decimalSeparator) !=
+                 input.lastIndexOf(decimalSeparator)))
         {
             results.push(new ValidationResult(
                 true, baseField, "decimalPointCount",
                 decimalPointCountError));
             return false;
         }
+        
+        var negPosLeft:Boolean = false;
+        if (negativeNumberFormat <= 2)
+            negPosLeft = true;
         // NumberValidatorBase has this method.
-        else if (!validateDecimalString(input, baseField, results))
+        else if (!validateDecimalString(input, baseField, results, negPosLeft))
         {
             return false;
         }
         // all errors are already checked. Only remaining error is
         // negativeNumberFormat.
-        else if ((input.indexOf(negativeSymbol) != -1) ||
+        else if ((inputHasNegativeSymbol(input)) ||
             ((input.charAt(0) == "(") && (input.charAt(len-1) == ")")))
 
         {

        if (!inputStr)
            return results;

        // If spark formatter is null, no-go-forward.
        if (!g11nWorkingInstance)
        {
            fallbackLastOperationStatus =
                            LastOperationStatus.LOCALE_UNDEFINED_ERROR;
            return results;
        }


        // otherwise there should be no more than specified by fractionalDigits.
        //
        if (!validateFractionPart(
                            input, dindex, baseField, results))
        {
            return results;
        }

