CONDENSED CONSOLIDATED STATEMENTS OF CHANGES IN SHAREHOLDERS' EQUITY - USD ($) $ in Thousands |
Total |
Common Stock [Member] |
Additional Paid-in Capital [Member] |
Retained Earnings [Member] |
Accumulated Other Comprehensive Income (Loss) [Member] |
| Balances at Oct. 31, 2017 |
$ 203,085
|
$ 664
|
$ 61,344
|
$ 149,267
|
$ (8,190)
|
| Balances (in shares) at Oct. 31, 2017 |
|
6,641,197
|
|
|
|
| Net income |
6,688
|
$ 0
|
0
|
6,688
|
0
|
| Other comprehensive income (loss) |
2,210
|
0
|
0
|
0
|
2,210
|
| Exercise of common stock options |
554
|
$ 3
|
551
|
0
|
0
|
| Exercise of common stock options (in shares) |
|
30,418
|
|
|
|
| Stock-based compensation expense |
1,178
|
$ 4
|
1,174
|
0
|
0
|
| Stock-based compensation expense (in shares) |
|
40,283
|
|
|
|
| Dividends paid |
(1,410)
|
$ 0
|
0
|
(1,410)
|
0
|
| Balances at Apr. 30, 2018 |
212,305
|
$ 671
|
63,069
|
154,545
|
(5,980)
|
| Balances (in shares) at Apr. 30, 2018 |
|
6,711,898
|
|
|
|
| Balances at Jan. 31, 2018 |
210,096
|
$ 669
|
62,380
|
151,536
|
(4,489)
|
| Balances (in shares) at Jan. 31, 2018 |
|
6,692,778
|
|
|
|
| Net income |
3,751
|
$ 0
|
0
|
3,751
|
0
|
| Other comprehensive income (loss) |
(1,491)
|
0
|
0
|
0
|
(1,491)
|
| Exercise of common stock options |
62
|
$ 0
|
62
|
0
|
0
|
| Exercise of common stock options (in shares) |
|
4,200
|
|
|
|
| Stock-based compensation expense |
629
|
$ 2
|
627
|
0
|
0
|
| Stock-based compensation expense (in shares) |
|
14,920
|
|
|
|
| Dividends paid |
(742)
|
$ 0
|
0
|
(742)
|
0
|
| Balances at Apr. 30, 2018 |
212,305
|
$ 671
|
63,069
|
154,545
|
(5,980)
|
| Balances (in shares) at Apr. 30, 2018 |
|
6,711,898
|
|
|
|
| Balances at Oct. 31, 2018 |
222,853
|
$ 672
|
64,185
|
167,859
|
(9,863)
|
| Balances (in shares) at Oct. 31, 2018 |
|
6,723,160
|
|
|
|
| Net income |
11,906
|
$ 0
|
0
|
11,906
|
0
|
| Other comprehensive income (loss) |
(94)
|
0
|
0
|
0
|
(94)
|
| Stock-based compensation expense |
1,433
|
$ 5
|
1,428
|
0
|
0
|
| Stock-based compensation expense (in shares) |
|
44,077
|
|
|
|
| Taxes withheld for vested restricted shares |
(499)
|
$ 0
|
(499)
|
0
|
0
|
| Dividends paid |
(1,565)
|
0
|
0
|
(1,565)
|
0
|
| Balances at Apr. 30, 2019 |
234,034
|
$ 677
|
65,114
|
178,200
|
(9,957)
|
| Balances (in shares) at Apr. 30, 2019 |
|
6,767,237
|
|
|
|
| Balances at Jan. 31, 2019 |
230,021
|
$ 676
|
64,391
|
173,766
|
(8,812)
|
| Balances (in shares) at Jan. 31, 2019 |
|
6,758,123
|
|
|
|
| Net income |
5,252
|
$ 0
|
0
|
5,252
|
0
|
| Other comprehensive income (loss) |
(1,145)
|
0
|
0
|
0
|
(1,145)
|
| Stock-based compensation expense |
724
|
$ 1
|
723
|
0
|
0
|
| Stock-based compensation expense (in shares) |
|
9,114
|
|
|
|
| Dividends paid |
(818)
|
$ 0
|
0
|
(818)
|
0
|
| Balances at Apr. 30, 2019 |
$ 234,034
|
$ 677
|
$ 65,114
|
$ 178,200
|
$ (9,957)
|
| Balances (in shares) at Apr. 30, 2019 |
|
6,767,237
|
|
|
|