updated .on() and .off()

uses addEventListener/attachEvent and removeEventListener/detachEvent