- for ( var i in element.events[type] )
- delete element.events[type][i];
- else
- for ( var j in element.events )
- this.remove( element, j );
+ for ( handler in element.$events[type] )
+ delete events[type][handler];
+
+ // remove generic event handler if no more handlers exist
+ for ( ret in events[type] ) break;
+ if ( !ret ) {
+ if (element.removeEventListener)
+ element.removeEventListener(type, element.$handle, false);
+ else if (element.detachEvent)
+ element.detachEvent("on" + type, element.$handle);
+ ret = null;
+ delete events[type];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ for ( ret in events ) break;
+ if ( !ret )
+ element.$handle = element.$events = null;
+ }