Condensed Consolidated Statements of Shareholders' Equity (Unaudited) - USD ($) | Total | Common Stock | Additional Paid-In Capital | Accumulated Other Comprehensive Income (Loss) | Treasury Stock | Retained Earnings |
Balance, beginning of period (shares) at Dec. 31, 2017 | | 48,606,425 | | | | |
Balance, beginning of period at Dec. 31, 2017 | $ 44,047,424 | $ 53,931 | $ 27,535,469 | $ (2,200,462) | $ (6,890,349) | $ 25,548,835 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | 390,585 | | 390,585 | | | |
Stock issued in exercise of stock options (shares) | | 81,229 | | | | |
Stock issued in exercise of stock options | 0 | $ 81 | (81) | | | |
Stock issued in settlement of RSUs (shares) | | 118,762 | | | | |
Stock issued in settlement of RSUs | 258,892 | $ 119 | 258,773 | | | |
Tax withholdings paid related to stock based compensation | (83,600) | | (83,600) | | | |
Foreign currency translation | (239,129) | | | (239,129) | | |
Unrealized gains on investments | (33,235) | | | (33,235) | | |
Net income | 1,876,228 | | | | | 1,876,228 |
Balance, end of period (shares) at Mar. 31, 2018 | | 48,806,416 | | | | |
Balance, end of period at Mar. 31, 2018 | 46,217,165 | $ 54,131 | 28,101,146 | (2,472,826) | (6,890,349) | 27,425,063 |
Balance, beginning of period (shares) at Dec. 31, 2017 | | 48,606,425 | | | | |
Balance, beginning of period at Dec. 31, 2017 | 44,047,424 | $ 53,931 | 27,535,469 | (2,200,462) | (6,890,349) | 25,548,835 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | 3,590,498 | | | | | |
Balance, end of period (shares) at Jun. 30, 2018 | | 48,082,423 | | | | |
Balance, end of period at Jun. 30, 2018 | 43,513,927 | $ 54,685 | 27,828,804 | (2,618,543) | (10,890,349) | 29,139,330 |
Balance, beginning of period (shares) at Mar. 31, 2018 | | 48,806,416 | | | | |
Balance, beginning of period at Mar. 31, 2018 | 46,217,165 | $ 54,131 | 28,101,146 | (2,472,826) | (6,890,349) | 27,425,063 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | 292,450 | | 292,450 | | | |
Stock issued in exercise of stock options (shares) | | 445,038 | | | | |
Stock issued in exercise of stock options | 0 | $ 445 | (445) | | | |
Stock issued in settlement of RSUs (shares) | | 108,923 | | | | |
Stock issued in settlement of RSUs | 121,834 | $ 109 | 121,725 | | | |
Tax withholdings paid related to stock based compensation | (686,072) | | (686,072) | | | |
Treasury stock repurchased (shares) | | (1,277,954) | | | | |
Treasury stock repurchased | (4,000,000) | | | | (4,000,000) | |
Foreign currency translation | (154,943) | | | (154,943) | | |
Unrealized gains on investments | 9,226 | | | 9,226 | | |
Net income | 1,714,267 | | | | | 1,714,267 |
Balance, end of period (shares) at Jun. 30, 2018 | | 48,082,423 | | | | |
Balance, end of period at Jun. 30, 2018 | 43,513,927 | $ 54,685 | 27,828,804 | (2,618,543) | (10,890,349) | 29,139,330 |
Balance, beginning of period (shares) at Dec. 31, 2018 | | 47,932,305 | | | | |
Balance, beginning of period at Dec. 31, 2018 | 45,255,859 | $ 49,708 | 28,027,742 | (2,895,683) | (2,609,485) | 22,683,577 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | 66,714 | | 66,714 | | | |
Stock issued in exercise of stock options (shares) | | 2,483 | | | | |
Stock issued in exercise of stock options | 0 | $ 2 | (2) | | | |
Stock issued in settlement of RSUs (shares) | | 148,723 | | | | |
Stock issued in settlement of RSUs | 379,861 | $ 149 | 379,712 | | | |
Tax withholdings paid related to stock based compensation | (143,022) | | (143,022) | | | |
Treasury stock repurchased (shares) | | (775,287) | | | | |
Treasury stock repurchased | (1,333,578) | | | | (1,333,578) | |
Foreign currency translation | 149,415 | | | 149,415 | | |
Unrealized gains on investments | 68,752 | | | 68,752 | | |
Net income | 1,668,618 | | | | | 1,668,618 |
Balance, end of period (shares) at Mar. 31, 2019 | | 47,308,224 | | | | |
Balance, end of period at Mar. 31, 2019 | 46,112,619 | $ 49,859 | 28,331,144 | (2,677,516) | (3,943,063) | 24,352,195 |
Balance, beginning of period (shares) at Dec. 31, 2018 | | 47,932,305 | | | | |
Balance, beginning of period at Dec. 31, 2018 | 45,255,859 | $ 49,708 | 28,027,742 | (2,895,683) | (2,609,485) | 22,683,577 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | 2,654,122 | | | | | |
Balance, end of period (shares) at Jun. 30, 2019 | | 47,466,192 | | | | |
Balance, end of period at Jun. 30, 2019 | 47,512,619 | $ 50,017 | 28,593,552 | (2,525,586) | (3,943,063) | 25,337,699 |
Balance, beginning of period (shares) at Mar. 31, 2019 | | 47,308,224 | | | | |
Balance, beginning of period at Mar. 31, 2019 | 46,112,619 | $ 49,859 | 28,331,144 | (2,677,516) | (3,943,063) | 24,352,195 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | 303,977 | | 303,977 | | | |
Stock issued in exercise of stock options (shares) | | 9,174 | | | | |
Stock issued in exercise of stock options | 0 | $ 9 | (9) | | | |
Stock issued in settlement of RSUs (shares) | | 148,794 | | | | |
Stock issued in settlement of RSUs | 0 | $ 149 | (149) | | | |
Tax withholdings paid related to stock based compensation | (41,411) | | (41,411) | | | |
Foreign currency translation | 102,435 | | | 102,435 | | |
Unrealized gains on investments | 49,495 | | | 49,495 | | |
Net income | 985,504 | | | | | 985,504 |
Balance, end of period (shares) at Jun. 30, 2019 | | 47,466,192 | | | | |
Balance, end of period at Jun. 30, 2019 | $ 47,512,619 | $ 50,017 | $ 28,593,552 | $ (2,525,586) | $ (3,943,063) | $ 25,337,699 |