| Comprehensive Income (Loss) Note [Text Block] |
| 13. | ACCUMULATED OTHER COMPREHENSIVE LOSS |
The components of accumulated other comprehensive loss at March 31, 2026 and December 31, 2025 are summarized below:
| | | March 31, | | | December 31, | |
| | | 2026 | | | 2025 | |
| | | | | | | | | |
| Foreign currency translation adjustment, net of taxes of ($312) at March 31, 2026 and ($312) at December 31, 2025 | | $ | (18,347 | ) | | $ | (19,490 | ) |
| Unrealized gains on interest rate swap cash flow hedge, net of taxes of $0 at March 31, 2026 and $0 at December 31, 2025 | | | 610 | | | | 906 | |
| Unrealized holding gains on marketable securities, net of taxes of ($7) at March 31, 2026 and ($7) at December 31, 2025 | | | 20 | | | | 21 | |
| Unfunded SERP liability, net of taxes of $1,000 at March 31, 2026 and $1,003 at December 31, 2025 | | | 1,379 | | | | 1,389 | |
| | | | | | | | | |
| Accumulated other comprehensive loss | | $ | (16,338 | ) | | $ | (17,174 | ) |
Changes in accumulated other comprehensive loss by component during the three months ended March 31, 2026 are as set forth below. All amounts are net of tax:
| | | | | | | | | Unrealized | | | | | | | | | | |
| | | Foreign | | | Unrealized Gains | | | Holding | | | | | | | | | | |
| | | Currency | | | on Interest Rate | | | Gains on | | | | | | | | | | |
| | | Translation | | | Swap Cash | | | Marketable | | | Unfunded | | | | | | |
| | | Adjustment | | | Flow Hedge | | | Securities | | | SERP Liability | | | | Total | |
| | | | | | | | | | | | | | | | | | | | | | |
| Balance at December 31, 2025 | | $ | (19,490 | ) | | $ | 906 | | | $ | 21 | | | $ | 1,389 | | | | $ | (17,174 | ) |
| Other comprehensive (loss) income before reclassifications | | | 1,282 | | | | 68 | | | | (1 | ) | | | (6 | ) | | | | 1,343 | |
| Amount reclassified from accumulated other comprehensive loss | | | (139 | ) | | | (364 | ) | | | - | | | | (4 | ) | (a) | | | (507 | ) |
| Net current period other comprehensive (loss) income | | | 1,143 | | | | (296 | ) | | | (1 | ) | | | (10 | ) | | | | 836 | |
| | | | | | | | | | | | | | | | | | | | | | |
| Balance at March 31, 2026 | | $ | (18,347 | ) | | $ | 610 | | | $ | 20 | | | $ | 1,379 | | | | $ | (16,338 | ) |
| (a) This reclassification relates to the amortization of prior service costs and gains/losses associated with the Company's SERP. This expense is reflected in other income (expense), net on the accompanying condensed consolidated statements of operations. |
|