Consolidated Statements of Stockholders' Equity - USD ($) $ in Thousands | Total | Common Stock [Member] | Treasury Stock [Member] | Additional Paid-in Capital [Member] | Accumulated Other Comprehensive (Loss) [Member] | Retained Earnings [Member] |
Beginning balance at Dec. 31, 2017 | $ 120,746 | $ 53 | $ (170,816) | $ 300,763 | $ 64 | $ (9,318) |
Beginning balance, shares at Dec. 31, 2017 | | 53,338,297 | 25,855,182 | | | |
Issuance of common stock from exercise of options | 406 | | | 406 | | |
Issuance of common stock from exercise of options, shares | | 74,375 | | | | |
Issuance of common stock from restricted stock awards, shares | | 38,180 | | | | |
Purchase of common stock through stock buyback | (1,613) | | $ (1,613) | | | |
Purchase of common stock through stock buyback, shares | | | 112,303 | | | |
Impact of net settlements | (522) | | | (522) | | |
Stock-based compensation expense | 1,501 | | | 1,501 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain on investments | 4 | | | | 4 | |
Unrealized gain (loss) on foreign currency exchange | 134 | | | | 134 | |
Net income | 2,094 | | | | | 2,094 |
Comprehensive income | 2,232 | | | | | |
Ending balance at Mar. 31, 2018 | 122,750 | $ 53 | $ (172,429) | 302,148 | 202 | (7,224) |
Ending balance, shares at Mar. 31, 2018 | | 53,450,852 | 25,967,485 | | | |
Beginning balance at Dec. 31, 2017 | 120,746 | $ 53 | $ (170,816) | 300,763 | 64 | (9,318) |
Beginning balance, shares at Dec. 31, 2017 | | 53,338,297 | 25,855,182 | | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain on investments | 13 | | | | | |
Net income | 10,283 | | | | | |
Comprehensive income | 10,047 | | | | | |
Ending balance at Sep. 30, 2018 | 130,856 | $ 54 | $ (174,780) | 304,789 | (172) | 965 |
Ending balance, shares at Sep. 30, 2018 | | 54,082,275 | 26,080,604 | | | |
Beginning balance at Mar. 31, 2018 | 122,750 | $ 53 | $ (172,429) | 302,148 | 202 | (7,224) |
Beginning balance, shares at Mar. 31, 2018 | | 53,450,852 | 25,967,485 | | | |
Issuance of common stock from exercise of options | 478 | $ 1 | | 477 | | |
Issuance of common stock from exercise of options, shares | | 81,000 | | | | |
Issuance of common stock from restricted stock awards, shares | | 13,887 | | | | |
Impact of net settlements | (213) | | | (213) | | |
Stock-based compensation expense | 1,514 | | | 1,514 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain on investments | 8 | | | | 8 | |
Unrealized gain (loss) on foreign currency exchange | (263) | | | | (263) | |
Net income | 4,420 | | | | | 4,420 |
Comprehensive income | 4,165 | | | | | |
Ending balance at Jun. 30, 2018 | 128,694 | $ 54 | $ (172,429) | 303,926 | (53) | (2,804) |
Ending balance, shares at Jun. 30, 2018 | | 53,545,739 | 25,967,485 | | | |
Issuance of common stock from exercise of options | 72 | | | 72 | | |
Issuance of common stock from exercise of options, shares | | 12,715 | | | | |
Issuance of common stock from restricted stock awards, shares | | 510,128 | | | | |
Purchase of common stock through stock buyback | (2,351) | | $ (2,351) | | | |
Purchase of common stock through stock buyback, shares | | | 99,426 | | | |
Impact of net settlements | (2,338) | | | (2,338) | | |
Impact of net settlements, shares | | 13,693 | 13,693 | | | |
Stock-based compensation expense | 3,129 | | | 3,129 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain on investments | 1 | | | | 1 | |
Unrealized gain (loss) on foreign currency exchange | (120) | | | | (120) | |
Net income | 3,769 | | | | | 3,769 |
Comprehensive income | 3,650 | | | | | |
Ending balance at Sep. 30, 2018 | 130,856 | $ 54 | $ (174,780) | 304,789 | (172) | 965 |
Ending balance, shares at Sep. 30, 2018 | | 54,082,275 | 26,080,604 | | | |
Beginning balance at Dec. 31, 2018 | 132,585 | $ 54 | $ (177,905) | 307,014 | (215) | 3,637 |
Beginning balance, shares at Dec. 31, 2018 | | 54,117,325 | 26,326,280 | | | |
Issuance of common stock from exercise of options | 23 | | | 23 | | |
Issuance of common stock from exercise of options, shares | | 10,000 | | | | |
Issuance of common stock from restricted stock awards, shares | | 112,545 | | | | |
Purchase of common stock through stock buyback | (3,125) | | $ (3,125) | | | |
Purchase of common stock through stock buyback, shares | | | 220,297 | | | |
Impact of net settlements | (868) | | | (868) | | |
Impact of net settlements, shares | | 6,391 | 6,391 | | | |
Stock-based compensation expense | 3,179 | | | 3,179 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain (loss) on foreign currency exchange | 41 | | | | 41 | |
Net income | 3,290 | | | | | 3,290 |
Comprehensive income | 3,331 | | | | | |
Ending balance at Mar. 31, 2019 | 135,125 | $ 54 | $ (181,030) | 309,348 | (174) | 6,927 |
Ending balance, shares at Mar. 31, 2019 | | 54,246,261 | 26,552,968 | | | |
Beginning balance at Dec. 31, 2018 | $ 132,585 | $ 54 | $ (177,905) | 307,014 | (215) | 3,637 |
Beginning balance, shares at Dec. 31, 2018 | | 54,117,325 | 26,326,280 | | | |
Issuance of common stock from exercise of options, shares | 26,000 | | | | | |
Comprehensive income (loss): | | | | | | |
Net income | $ 12,792 | | | | | |
Comprehensive income | 12,540 | | | | | |
Ending balance at Sep. 30, 2019 | 147,771 | $ 55 | $ (182,630) | 314,384 | (467) | 16,429 |
Ending balance, shares at Sep. 30, 2019 | | 54,666,417 | 26,664,930 | | | |
Beginning balance at Mar. 31, 2019 | 135,125 | $ 54 | $ (181,030) | 309,348 | (174) | 6,927 |
Beginning balance, shares at Mar. 31, 2019 | | 54,246,261 | 26,552,968 | | | |
Issuance of common stock from restricted stock awards, shares | | 56,207 | | | | |
Purchase of common stock through stock buyback | (1,600) | | $ (1,600) | | | |
Purchase of common stock through stock buyback, shares | | | 97,427 | | | |
Stock-based compensation expense | 3,762 | | | 3,762 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain (loss) on foreign currency exchange | (58) | | | | (58) | |
Net income | 4,151 | | | | | 4,151 |
Comprehensive income | 4,093 | | | | | |
Ending balance at Jun. 30, 2019 | 141,380 | $ 54 | $ (182,630) | 313,110 | (232) | 11,078 |
Ending balance, shares at Jun. 30, 2019 | | 54,302,468 | 26,650,395 | | | |
Issuance of common stock from exercise of options | 96 | $ 1 | | 95 | | |
Issuance of common stock from exercise of options, shares | | 16,000 | | | | |
Issuance of common stock from restricted stock awards, shares | | 333,414 | | | | |
Impact of net settlements | (1,751) | | | (1,751) | | |
Impact of net settlements, shares | | 14,535 | 14,535 | | | |
Stock-based compensation expense | 2,930 | | | 2,930 | | |
Comprehensive income (loss): | | | | | | |
Unrealized gain (loss) on foreign currency exchange | (235) | | | | (235) | |
Net income | 5,351 | | | | | 5,351 |
Comprehensive income | 5,116 | | | | | |
Ending balance at Sep. 30, 2019 | $ 147,771 | $ 55 | $ (182,630) | $ 314,384 | $ (467) | $ 16,429 |
Ending balance, shares at Sep. 30, 2019 | | 54,666,417 | 26,664,930 | | | |