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 | 575,235 | | 575,235 | | | |
Stock issued in exercise of stock options (shares) | | 81,213 | | | | |
Stock issued in exercise of stock options | 74,242 | $ 81 | 74,161 | | | |
Stock issued in settlement of RSUs (shares) | | 118,778 | | | | |
Stock issued in settlement of RSUs | 0 | $ 119 | (119) | | | |
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 | 5,249,587 | | | | | |
Balance, end of period (shares) at Sep. 30, 2018 | | 48,083,063 | | | | |
Balance, end of period at Sep. 30, 2018 | 45,393,065 | $ 54,686 | 27,890,171 | (2,459,865) | (10,890,349) | 30,798,422 |
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 | 281,012 | | 281,012 | | | |
Stock issued in exercise of stock options (shares) | | 410,421 | | | | |
Stock issued in exercise of stock options | 99,760 | $ 410 | 99,350 | | | |
Stock issued in settlement of RSUs (shares) | | 143,540 | | | | |
Stock issued in settlement of RSUs | 0 | $ 144 | (144) | | | |
Tax withholdings paid related to stock based compensation | (652,560) | | (652,560) | | | |
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,270 | | | | | 1,714,270 |
Balance, end of period (shares) at Jun. 30, 2018 | | 48,082,423 | | | | |
Balance, end of period at Jun. 30, 2018 | 43,513,930 | $ 54,685 | 27,828,804 | (2,618,543) | (10,890,349) | 29,139,333 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | 62,232 | | 62,232 | | | |
Stock issued in settlement of RSUs (shares) | | 640 | | | | |
Stock issued in settlement of RSUs | 0 | $ 1 | (1) | | | |
Tax withholdings paid related to stock based compensation | (864) | | (864) | | | |
Foreign currency translation | 170,641 | | | 170,641 | | |
Unrealized gains on investments | (11,963) | | | (11,963) | | |
Net income | 1,659,089 | | | | | 1,659,089 |
Balance, end of period (shares) at Sep. 30, 2018 | | 48,083,063 | | | | |
Balance, end of period at Sep. 30, 2018 | 45,393,065 | $ 54,686 | 27,890,171 | (2,459,865) | (10,890,349) | 30,798,422 |
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 | 3,575,870 | | | | | |
Balance, end of period (shares) at Sep. 30, 2019 | | 47,618,604 | | | | |
Balance, end of period at Sep. 30, 2019 | 48,430,295 | $ 50,762 | 29,608,685 | (2,629,369) | (4,859,230) | 26,259,447 |
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 | 297,127 | | 297,127 | | | |
Stock issued in exercise of stock options (shares) | | 9,174 | | | | |
Stock issued in exercise of stock options | 6,850 | $ 9 | 6,841 | | | |
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 |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock based compensation | (5,571) | | (5,571) | | | |
Stock issued in exercise of stock options (shares) | | 4,836 | | | | |
Stock issued in exercise of stock options | 2,020 | $ 5 | 2,015 | | | |
Stock issued in settlement of RSUs (shares) | | 546 | | | | |
Stock issued in settlement of RSUs | 0 | $ 1 | (1) | | | |
Stock issued in acquisition (note 9) (shares) | | 739,130 | | | | |
Stock issued in acquisition (note 9) | 1,020,000 | $ 739 | 1,019,261 | | | |
Tax withholdings paid related to stock based compensation | (571) | | (571) | | | |
Treasury stock repurchased (shares) | | (592,100) | | | | |
Treasury stock repurchased | (916,167) | | | | (916,167) | |
Foreign currency translation | (91,397) | | | (91,397) | | |
Unrealized gains on investments | (12,386) | | | (12,386) | | |
Net income | 921,748 | | | | | 921,748 |
Balance, end of period (shares) at Sep. 30, 2019 | | 47,618,604 | | | | |
Balance, end of period at Sep. 30, 2019 | $ 48,430,295 | $ 50,762 | $ 29,608,685 | $ (2,629,369) | $ (4,859,230) | $ 26,259,447 |