Consolidated Statements of Stockholders' Equity - USD ($) shares in Thousands, $ in Thousands | Common Stock | Additional Paid-in Capital | Accumulated Deficit | Accumulated Other Comprehensive Income (Loss) | Total |
Balance (in shares) at Dec. 31, 2018 | 32,558 | | | | |
Balance at Dec. 31, 2018 | $ 33 | $ 565,116 | $ (157,260) | $ 448 | $ 408,337 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 6,062 | | 6,062 |
Foreign currency translation adjustments | | | | (495) | (495) |
Change in pension obligation | | | | 30 | 30 |
Exercise of stock options (in shares) | 288 | | | | |
Exercise of stock options | | 1,828 | | | 1,828 |
Issuance of restricted common shares, net of shares withheld (in shares) | 35 | | | | |
Issuance of restricted common shares, net of shares withheld | | (281) | | | (281) |
Stock-based compensation expense | | 1,672 | | | 1,672 |
Balance (in shares) at Mar. 31, 2019 | 32,881 | | | | |
Balance at Mar. 31, 2019 | $ 33 | 568,335 | (151,198) | (17) | 417,153 |
Balance (in shares) at Dec. 31, 2018 | 32,558 | | | | |
Balance at Dec. 31, 2018 | $ 33 | 565,116 | (157,260) | 448 | 408,337 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | | | 7,322 |
Foreign currency translation adjustments | | | | | (1,847) |
Change in pension obligation | | | | | 89 |
Balance (in shares) at Sep. 30, 2019 | 32,397 | | | | |
Balance at Sep. 30, 2019 | $ 32 | 559,063 | (149,938) | (1,310) | 407,847 |
Balance (in shares) at Mar. 31, 2019 | 32,881 | | | | |
Balance at Mar. 31, 2019 | $ 33 | 568,335 | (151,198) | (17) | 417,153 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 556 | | 556 |
Foreign currency translation adjustments | | | | (219) | (219) |
Change in pension obligation | | | | 29 | 29 |
Exercise of stock options (in shares) | 104 | | | | |
Exercise of stock options | | 567 | | | 567 |
Issuance of shares under Employee Stock Purchase Plan (in shares) | 32 | | | | |
Issuance of shares under Employee Stock Purchase Plan | | 479 | | | 479 |
Issuance of restricted common shares, net of shares withheld (in shares) | 165 | | | | |
Issuance of restricted common shares, net of shares withheld | | (1,310) | | | (1,310) |
Stock-based compensation expense | | 2,246 | | | 2,246 |
Repurchase of common stock (in shares) | (885) | | | | |
Repurchase of common stock | $ (1) | (14,034) | | | (14,035) |
Balance (in shares) at Jun. 30, 2019 | 32,297 | | | | |
Balance at Jun. 30, 2019 | $ 32 | 556,283 | (150,642) | (207) | 405,466 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 704 | | 704 |
Foreign currency translation adjustments | | | | (1,132) | (1,132) |
Change in pension obligation | | | | 29 | 29 |
Exercise of stock options (in shares) | 97 | | | | |
Exercise of stock options | | 642 | | | 642 |
Issuance of restricted common shares, net of shares withheld (in shares) | 3 | | | | |
Issuance of restricted common shares, net of shares withheld | | (11) | | | (11) |
Stock-based compensation expense | | 2,149 | | | 2,149 |
Balance (in shares) at Sep. 30, 2019 | 32,397 | | | | |
Balance at Sep. 30, 2019 | $ 32 | 559,063 | (149,938) | (1,310) | 407,847 |
Balance (in shares) at Dec. 31, 2019 | 32,585 | | | | |
Balance at Dec. 31, 2019 | $ 33 | 559,878 | (140,226) | (258) | 419,427 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 11,221 | | 11,221 |
Foreign currency translation adjustments | | | | (1,112) | (1,112) |
Change in pension obligation | | | | 57 | 57 |
Exercise of stock options (in shares) | 1 | | | | |
Exercise of stock options | $ 540 | 4,498 | | | 4,499 |
Issuance of shares under Employee Stock Purchase Plan (in shares) | 1 | | | | |
Issuance of shares under Employee Stock Purchase Plan | | 19 | | | 19 |
Issuance of restricted common shares, net of shares withheld (in shares) | 69 | | | | |
Issuance of restricted common shares, net of shares withheld | | (1,162) | | | (1,162) |
Stock-based compensation expense | | 1,724 | | | 1,724 |
Repurchase of common stock (in shares) | (358) | | | | |
Repurchase of common stock | $ (1) | (5,775) | (1,725) | | (7,501) |
Balance (in shares) at Mar. 31, 2020 | 33 | | | | |
Balance at Mar. 31, 2020 | $ 32,837 | 559,182 | (130,730) | (1,313) | 427,172 |
Balance (in shares) at Dec. 31, 2019 | 32,585 | | | | |
Balance at Dec. 31, 2019 | $ 33 | 559,878 | (140,226) | (258) | 419,427 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | | | 35,308 |
Foreign currency translation adjustments | | | | | 1,161 |
Change in pension obligation | | | | | 175 |
Balance (in shares) at Sep. 30, 2020 | 33,491 | | | | |
Balance at Sep. 30, 2020 | $ 33 | 566,195 | (106,643) | 1,078 | 460,663 |
Balance (in shares) at Mar. 31, 2020 | 33 | | | | |
Balance at Mar. 31, 2020 | $ 32,837 | 559,182 | (130,730) | (1,313) | 427,172 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 13,302 | | 13,302 |
Foreign currency translation adjustments | | | | 836 | 836 |
Change in pension obligation | | | | 57 | 57 |
Exercise of stock options (in shares) | 343 | | | | |
Exercise of stock options | | 2,783 | | | 2,783 |
Issuance of shares under Employee Stock Purchase Plan (in shares) | 21 | | | | |
Issuance of shares under Employee Stock Purchase Plan | | 490 | | | 490 |
Issuance of restricted common shares, net of shares withheld (in shares) | 232 | | | | |
Issuance of restricted common shares, net of shares withheld | | (2,698) | | | (2,698) |
Stock-based compensation expense | | 3,082 | | | 3,082 |
Balance (in shares) at Jun. 30, 2020 | 33,433 | | | | |
Balance at Jun. 30, 2020 | $ 33 | 562,839 | (117,428) | (420) | 445,024 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 10,785 | | 10,785 |
Foreign currency translation adjustments | | | | 1,437 | 1,437 |
Change in pension obligation | | | | 61 | 61 |
Exercise of stock options (in shares) | 53 | | | | |
Exercise of stock options | | 458 | | | 458 |
Issuance of restricted common shares, net of shares withheld (in shares) | 5 | | | | |
Issuance of restricted common shares, net of shares withheld | | (28) | | | (28) |
Stock-based compensation expense | | 2,926 | | | 2,926 |
Balance (in shares) at Sep. 30, 2020 | 33,491 | | | | |
Balance at Sep. 30, 2020 | $ 33 | $ 566,195 | $ (106,643) | $ 1,078 | $ 460,663 |