| Comprehensive Income (Loss) Note [Text Block] |
| 13. | ACCUMULATED OTHER COMPREHENSIVE LOSS |
The components of accumulated other comprehensive loss at June 30, 2026 and December 31, 2025 are summarized below:
| | | June 30, | | | December 31, | |
| | | 2026 | | | 2025 | |
| | | | | | | | | |
| Foreign currency translation adjustment, net of taxes of ($312) at June 30, 2026 and ($312) at December 31, 2025 | | $ | (16,393 | ) | | $ | (19,490 | ) |
| Unrealized gains on interest rate swap cash flow hedge, net of taxes of $0 at June 30, 2026 and $0 at December 31, 2025 | | | 371 | | | | 906 | |
| Unrealized holding gains on marketable securities, net of taxes of ($7) at June 30, 2026 and ($7) at December 31, 2025 | | | 54 | | | | 21 | |
| Unfunded SERP liability, net of taxes of $998 at June 30, 2026 and $1,003 at December 31, 2025 | | | 1,371 | | | | 1,389 | |
| | | | | | | | | |
| Accumulated other comprehensive loss | | $ | (14,597 | ) | | $ | (17,174 | ) |
Changes in accumulated other comprehensive loss by component during the six months ended June 30, 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 | | | 3,337 | | | | (301 | ) | | | 33 | | | | (14 | ) | | | | 3,055 | |
| Amount reclassified from accumulated other comprehensive loss | | | (240 | ) | | | (234 | ) | | | - | | | | (4 | ) | (a) | | | (478 | ) |
| Net current period other comprehensive (loss) income | | | 3,097 | | | | (535 | ) | | | 33 | | | | (18 | ) | | | | 2,577 | |
| | | | | | | | | | | | | | | | | | | | | | |
| Balance at June 30, 2026 | | $ | (16,393 | ) | | $ | 371 | | | $ | 54 | | | $ | 1,371 | | | | $ | (14,597 | ) |
| (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 (expense) income, net on the accompanying condensed consolidated statements of operations. |
|