Consolidated Statements of Shareholders' Equity (Unaudited) - USD ($) shares in Thousands, $ in Thousands | Common Class A [Member]Common Stock [Member] | Common Class A [Member]Additional Paid-in Capital [Member] | Common Class A [Member]Treasury Stock [Member] | Common Class A [Member]Retained Earnings [Member] | Common Class A [Member]AOCI Attributable to Parent [Member] | Common Class A [Member] | Common Class B [Member]Common Stock [Member] | Common Class B [Member]Additional Paid-in Capital [Member] | Common Class B [Member]Treasury Stock [Member] | Common Class B [Member]Retained Earnings [Member] | Common Class B [Member]AOCI Attributable to Parent [Member] | Common Class B [Member] | Common Stock [Member] | Additional Paid-in Capital [Member] | Treasury Stock [Member] | Retained Earnings [Member] | AOCI Attributable to Parent [Member] | Total |
Balance (in shares) at Dec. 31, 2018 | 43,064 | | | | | | 12,435 | | | | | | | | | | | |
Balance at Dec. 31, 2018 | | | | | | | | | | | | | $ 458 | $ 370,025 | $ (245,842) | $ 942,287 | $ 0 | $ 1,066,928 |
Stock options exercised and stock awards (in shares) | 88 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 1 | 1,230 | 0 | 0 | 0 | 1,231 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 8,836 | 0 | 0 | 0 | 8,836 |
Vesting of restricted share awards (in shares) | 1 | | | | | | 339 | | | | | | | | | | | |
Vesting of restricted share awards | | | | | | | | | | | | | 2 | (2,317) | 0 | 0 | 0 | (2,315) |
Issuance of common stock under employee stock purchase plan (in shares) | 86 | | | | | | 0 | | | | | | | | | | | |
Issuance of common stock under employee stock purchase plan | | | | | | | | | | | | | 1 | 1,680 | 0 | 0 | 0 | 1,681 |
Common stock repurchases (in shares) | (959) | | | | | | (80) | | | | | | | | | | | |
Common stock repurchases | | | | | | | | | | | | | 0 | 0 | (26,048) | 0 | 0 | (26,048) |
Dividends | | | | $ (3,389) | | $ (3,389) | | | | $ (991) | | $ (991) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | 384 | 384 |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 37,104 | 0 | 37,104 |
Balance (in shares) at Mar. 31, 2019 | 42,280 | | | | | | 12,694 | | | | | | | | | | | |
Balance at Mar. 31, 2019 | | | | | | | | | | | | | 462 | 379,454 | (271,890) | 975,011 | 384 | 1,083,421 |
Balance (in shares) at Dec. 31, 2018 | 43,064 | | | | | | 12,435 | | | | | | | | | | | |
Balance at Dec. 31, 2018 | | | | | | | | | | | | | 458 | 370,025 | (245,842) | 942,287 | 0 | 1,066,928 |
Net income | | | | | | | | | | | | | | | | | | 117,829 |
Balance (in shares) at Sep. 30, 2019 | 41,710 | | | | | | 12,426 | | | | | | | | | | | |
Balance at Sep. 30, 2019 | | | | | | | | | | | | | 463 | 390,359 | (300,041) | 1,046,538 | (66) | 1,137,253 |
Balance (in shares) at Mar. 31, 2019 | 42,280 | | | | | | 12,694 | | | | | | | | | | | |
Balance at Mar. 31, 2019 | | | | | | | | | | | | | 462 | 379,454 | (271,890) | 975,011 | 384 | 1,083,421 |
Stock options exercised and stock awards (in shares) | 131 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 0 | 1,745 | 0 | 0 | 0 | 1,745 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 4,258 | 0 | 0 | 0 | 4,258 |
Vesting of restricted share awards | | | | | | | | | | | | | 0 | (517) | 0 | 0 | 0 | (517) |
Common stock repurchases (in shares) | (377) | | | | | | (100) | | | | | | | | | | | |
Common stock repurchases | | | | | | | | | | | | | 0 | 0 | (12,062) | 0 | 0 | (12,062) |
Dividends | | | | (3,387) | | (3,387) | | | | (1,050) | | (1,050) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | (505) | (505) |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 41,621 | 0 | 41,621 |
Balance (in shares) at Jun. 30, 2019 | 42,034 | | | | | | 12,594 | | | | | | | | | | | |
Balance at Jun. 30, 2019 | | | | | | | | | | | | | 462 | 384,940 | (283,952) | 1,012,195 | (121) | 1,113,524 |
Stock options exercised and stock awards (in shares) | 55 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 0 | 904 | 0 | 0 | 0 | 904 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 2,709 | 0 | 0 | 0 | 2,709 |
Vesting of restricted share awards | | | | | | | | | | | | | 0 | 0 | 0 | 0 | 0 | 0 |
Issuance of common stock under employee stock purchase plan (in shares) | 90 | | | | | | 0 | | | | | | | | | | | |
Issuance of common stock under employee stock purchase plan | | | | | | | | | | | | | 1 | 1,806 | 0 | 0 | 0 | 1,807 |
Common stock repurchases (in shares) | (469) | | | | | | (168) | | | | | | | | | | | |
Common stock repurchases | | | | | | | | | | | | | 0 | 0 | (16,089) | 0 | 0 | (16,089) |
Dividends | $ 0 | $ 0 | $ 0 | (3,637) | $ 0 | (3,637) | $ 0 | $ 0 | $ 0 | (1,124) | $ 0 | (1,124) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | 55 | 55 |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 39,104 | 0 | 39,104 |
Balance (in shares) at Sep. 30, 2019 | 41,710 | | | | | | 12,426 | | | | | | | | | | | |
Balance at Sep. 30, 2019 | | | | | | | | | | | | | 463 | 390,359 | (300,041) | 1,046,538 | (66) | 1,137,253 |
Balance (in shares) at Dec. 31, 2019 | 41,930 | | | | | | 12,361 | | | | | | | | | | | |
Balance at Dec. 31, 2019 | | | | | | | | | | | | | 465 | 397,267 | (304,129) | 1,065,553 | 337 | 1,159,493 |
Stock options exercised and stock awards (in shares) | 110 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 1 | 1,421 | 0 | 0 | 0 | 1,422 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 8,553 | 0 | 0 | 0 | 8,553 |
Vesting of restricted share awards (in shares) | 0 | | | | | | 337 | | | | | | | | | | | |
Vesting of restricted share awards | | | | | | | | | | | | | 2 | (2,416) | 0 | 0 | 0 | (2,414) |
Issuance of common stock under employee stock purchase plan (in shares) | 92 | | | | | | 0 | | | | | | | | | | | |
Issuance of common stock under employee stock purchase plan | | | | | | | | | | | | | 1 | 1,900 | 0 | 0 | 0 | 1,901 |
Common stock repurchases (in shares) | (833) | | | | | | (82) | | | | | | | | | | | |
Common stock repurchases | | | | | | | | | | | | | 0 | 0 | (19,902) | 0 | 0 | (19,902) |
Dividends | | | | (3,646) | | (3,646) | | | | (1,108) | | (1,108) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | (1,930) | (1,930) |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 23,107 | 0 | 23,107 |
Balance (in shares) at Mar. 31, 2020 | 41,299 | | | | | | 12,616 | | | | | | | | | | | |
Balance at Mar. 31, 2020 | | | | | | | | | | | | | 469 | 406,725 | (324,031) | 1,083,906 | (1,593) | 1,165,476 |
Balance (in shares) at Dec. 31, 2019 | 41,930 | | | | | | 12,361 | | | | | | | | | | | |
Balance at Dec. 31, 2019 | | | | | | | | | | | | | 465 | 397,267 | (304,129) | 1,065,553 | 337 | 1,159,493 |
Net income | | | | | | | | | | | | | | | | | | 73,862 |
Balance (in shares) at Sep. 30, 2020 | 42,208 | | | | | | 12,519 | | | | | | | | | | | |
Balance at Sep. 30, 2020 | | | | | | | | | | | | | 547 | 428,823 | (723) | 798,606 | (180) | 1,227,073 |
Balance (in shares) at Mar. 31, 2020 | 41,299 | | | | | | 12,616 | | | | | | | | | | | |
Balance at Mar. 31, 2020 | | | | | | | | | | | | | 469 | 406,725 | (324,031) | 1,083,906 | (1,593) | 1,165,476 |
Stock options exercised and stock awards (in shares) | 294 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 2 | 4,529 | 0 | 0 | 0 | 4,531 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 3,586 | 0 | 0 | 0 | 3,586 |
Vesting of restricted share awards | | | | | | | | | | | | | 0 | (28) | 0 | 0 | 0 | (28) |
Dividends | | | | (3,581) | | (3,581) | | | | (1,165) | | (1,165) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | 925 | 925 |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 16,816 | 0 | 16,816 |
Balance (in shares) at Jun. 30, 2020 | 41,593 | | | | | | 12,616 | | | | | | | | | | | |
Balance at Jun. 30, 2020 | | | | | | | | | | | | | 471 | 414,812 | (324,031) | 1,095,976 | (668) | 1,186,560 |
Stock options exercised and stock awards (in shares) | 537 | | | | | | 0 | | | | | | | | | | | |
Stock options exercised and stock awards | | | | | | | | | | | | | 3 | 8,701 | 0 | 0 | 0 | 8,704 |
Stock-based compensation related to stock options, restricted shares and employee stock purchase plan | | | | | | | | | | | | | 0 | 3,324 | 0 | 0 | 0 | 3,324 |
Vesting of restricted share awards (in shares) | 0 | | | | | | 2 | | | | | | | | | | | |
Vesting of restricted share awards | | | | | | | | | | | | | 0 | (14) | 0 | 0 | 0 | (14) |
Issuance of common stock under employee stock purchase plan (in shares) | 85 | | | | | | 0 | | | | | | | | | | | |
Issuance of common stock under employee stock purchase plan | | | | | | | | | | | | | 1 | 2,000 | | | | 2,001 |
Common stock repurchases (in shares) | | | | | | | (95) | | | | | | | | | | | |
Common stock repurchases | | | | | | | | | | | | | | | (2,749) | | | (2,749) |
Dividends | $ 0 | $ 0 | $ 0 | $ (3,922) | $ 0 | $ (3,922) | $ 0 | $ 0 | $ 0 | $ (1,258) | $ 0 | $ (1,258) | | | | | | |
Other comprehensive income (loss) | | | | | | | | | | | | | 0 | 0 | 0 | 0 | 488 | 488 |
Net income | | | | | | | | | | | | | 0 | 0 | 0 | 33,939 | 0 | 33,939 |
Cancellation of treasury stock (in shares) | (7) | | | | | | (4) | | | | | | | | | | | |
Cancellation of treasury stock | | | | | | | | | | | | | 72 | | 326,057 | (326,129) | | 0 |
Balance (in shares) at Sep. 30, 2020 | 42,208 | | | | | | 12,519 | | | | | | | | | | | |
Balance at Sep. 30, 2020 | | | | | | | | | | | | | $ 547 | $ 428,823 | $ (723) | $ 798,606 | $ (180) | $ 1,227,073 |