| Condensed Consolidated Statements of Changes in Redeemable Non-Controlling Interests and Stockholders' Equity - USD ($)$ in Thousands
 | Total | Adjustment | Class A Common Stock | Class B Common Stock | Common Stock  Class A Common Stock | Common Stock  Class B Common Stock | Additional Paid-in Capital | Retained Earnings | Retained Earnings  Adjustment | Accumulated Other Comprehensive Loss | Accumulated Other Comprehensive Loss  Adjustment | Treasury Stock | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2018 | $ 14,719 |  |  |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Contributions from redeemable non-controlling interests | 20,482 |  |  |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (569) |  |  |  |  |  |  |  |  |  |  |  | 
| Net (loss) income | (2,524) |  |  |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2019 | 32,108 |  |  |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Dec. 31, 2018 |  |  |  |  | 28,275,506 | 18,000,000 |  |  |  |  |  | 2,091,040 | 
| Beginning balance at Dec. 31, 2018 | 376,875 | $ 0 |  |  | $ 3 | $ 2 | $ 124,651 | $ 269,806 | $ 217 | $ (5,949) | $ (217) | $ (11,638) | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  |  | 745,484 |  |  |  |  |  |  |  | 
| Exercise of stock options | 4,960 |  |  |  |  |  | 4,960 |  |  |  |  |  | 
| Stock-based compensation expense | 1,195 |  |  |  |  |  | 1,195 |  |  |  |  |  | 
| Employee stock purchase plan (in shares) |  |  |  |  | 22,124 |  |  |  |  |  |  |  | 
| Employee stock purchase plan | 305 |  |  |  |  |  | 305 |  |  |  |  |  | 
| Open market purchase of common shares (in shares) |  |  |  |  | (10,000) |  |  |  |  |  |  | 10,000 | 
| Open market purchase of common shares | (139) |  |  |  |  |  |  |  |  |  |  | $ (139) | 
| Unrealized gain from interest rate hedges, net | (3,949) |  |  |  |  |  |  |  |  |  |  |  | 
| Unrealized loss from interest rate hedges, net | (3,732) |  |  |  |  |  |  |  |  | (3,732) |  |  | 
| Foreign currency translation adjustment | 289 |  |  |  |  |  |  |  |  | 289 |  |  | 
| Net (loss) income | 22,233 |  |  |  |  |  |  | 22,233 |  |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2019 |  |  |  |  | 29,033,114 | 18,000,000 |  |  |  |  |  | 2,101,040 | 
| Ending balance at Sep. 30, 2019 | 401,986 |  |  |  | $ 3 | $ 2 | 131,111 | 292,256 |  | (9,609) |  | $ (11,777) | 
| Redeemable non-controlling interests, beginning balance at Jun. 30, 2019 | 32,037 |  |  |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Contributions from redeemable non-controlling interests | 974 |  |  |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (364) |  |  |  |  |  |  |  |  |  |  |  | 
| Net (loss) income | (539) |  |  |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2019 | 32,108 |  |  |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Jun. 30, 2019 |  |  |  |  | 28,412,894 | 18,000,000 |  |  |  |  |  | 2,091,040 | 
| Beginning balance at Jun. 30, 2019 | 390,328 |  |  |  | $ 3 | $ 2 | 126,693 | 283,386 |  | (8,118) |  | $ (11,638) | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  |  | 630,220 |  |  |  |  |  |  |  | 
| Exercise of stock options | 4,005 |  |  |  |  |  | 4,005 |  |  |  |  |  | 
| Stock-based compensation expense | 413 |  |  |  |  |  | 413 |  |  |  |  |  | 
| Open market purchase of common shares (in shares) |  |  |  |  | (10,000) |  |  |  |  |  |  | 10,000 | 
| Open market purchase of common shares | (139) |  |  |  |  |  |  |  |  |  |  | $ (139) | 
| Unrealized gain from interest rate hedges, net | (1,135) |  |  |  |  |  |  |  |  | (1,135) |  |  | 
| Foreign currency translation adjustment | (356) |  |  |  |  |  |  |  |  | (356) |  |  | 
| Net (loss) income | 8,870 |  |  |  |  |  |  | 8,870 |  |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2019 |  |  |  |  | 29,033,114 | 18,000,000 |  |  |  |  |  | 2,101,040 | 
| Ending balance at Sep. 30, 2019 | 401,986 |  |  |  | $ 3 | $ 2 | 131,111 | 292,256 |  | (9,609) |  | $ (11,777) | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2019 | 31,616 |  |  |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Contributions from redeemable non-controlling interests | 3,353 |  |  |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (1,232) |  |  |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 91 |  |  |  |  |  |  |  |  |  |  |  | 
| Net (loss) income | 2,593 |  |  |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2020 | 36,421 |  |  |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Dec. 31, 2019 |  |  | 29,230,005 | 18,000,000 | 29,230,005 | 18,000,000 |  |  |  |  |  | 2,101,340 | 
| Beginning balance at Dec. 31, 2019 | 428,856 |  |  |  | $ 3 | $ 2 | 133,688 | 314,459 |  | (7,514) |  | $ (11,782) | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  |  | 608,063 |  |  |  |  |  |  |  | 
| Exercise of stock options | 6,088 |  |  |  |  |  | 6,088 |  |  |  |  |  | 
| Stock-based compensation expense | 1,380 |  |  |  |  |  | 1,380 |  |  |  |  |  | 
| Employee stock purchase plan (in shares) |  |  |  |  | 28,462 |  |  |  |  |  |  |  | 
| Employee stock purchase plan | 443 |  |  |  |  |  | 443 |  |  |  |  |  | 
| Open market purchase of common shares (in shares) |  |  |  |  | (455) |  |  |  |  |  |  | 455 | 
| Open market purchase of common shares | (6) |  |  |  |  |  |  |  |  |  |  | $ (6) | 
| Unrealized gain from interest rate hedges, net | (3,412) |  |  |  |  |  |  |  |  |  |  |  | 
| Unrealized loss from interest rate hedges, net |  |  |  |  |  |  |  |  |  | (3,412) |  |  | 
| Foreign currency translation adjustment | (769) |  |  |  |  |  |  |  |  | (769) |  |  | 
| Accretion of tax equity financing fees | (91) |  |  |  |  |  |  | (91) |  |  |  |  | 
| Net (loss) income | 30,568 |  |  |  |  |  |  | 30,568 |  |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2020 |  |  | 29,866,075 | 18,000,000 | 29,866,075 | 18,000,000 |  |  |  |  |  | 2,101,795 | 
| Ending balance at Sep. 30, 2020 | 463,057 |  |  |  | $ 3 | $ 2 | 141,599 | 344,936 |  | (11,695) |  | $ (11,788) | 
| Redeemable non-controlling interests, beginning balance at Jun. 30, 2020 | 36,303 |  |  |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Contributions from redeemable non-controlling interests | 2,865 |  |  |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (525) |  |  |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 91 |  |  |  |  |  |  |  |  |  |  |  | 
| Net (loss) income | (2,313) |  |  |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2020 | 36,421 |  |  |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Jun. 30, 2020 |  |  |  |  | 29,718,102 | 18,000,000 |  |  |  |  |  | 2,101,795 | 
| Beginning balance at Jun. 30, 2020 | 439,673 |  |  |  | $ 3 | $ 2 | 139,625 | 325,025 |  | (13,194) |  | $ (11,788) | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  |  | 147,813 |  |  |  |  |  |  |  | 
| Exercise of stock options | 1,450 |  |  |  |  |  | 1,450 |  |  |  |  |  | 
| Stock-based compensation expense | 522 |  |  |  |  |  | 522 |  |  |  |  |  | 
| Employee stock purchase plan (in shares) |  |  |  |  | 160 |  |  |  |  |  |  |  | 
| Employee stock purchase plan | 2 |  |  |  |  |  | 2 |  |  |  |  |  | 
| Unrealized gain from interest rate hedges, net | 638 |  |  |  |  |  |  |  |  | 638 |  |  | 
| Foreign currency translation adjustment | 861 |  |  |  |  |  |  |  |  | 861 |  |  | 
| Accretion of tax equity financing fees | (91) |  |  |  |  |  |  | (91) |  |  |  |  | 
| Net (loss) income | 20,002 |  |  |  |  |  |  | 20,002 |  |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2020 |  |  | 29,866,075 | 18,000,000 | 29,866,075 | 18,000,000 |  |  |  |  |  | 2,101,795 | 
| Ending balance at Sep. 30, 2020 | $ 463,057 |  |  |  | $ 3 | $ 2 | $ 141,599 | $ 344,936 |  | $ (11,695) |  | $ (11,788) |