# src/event.js

    /**
     * DOM event utilities
     */

    export default {
        add(obj, type, func, capture){
            if(obj.addEventListener){
                obj.addEventListener(type, func, capture);
            }
            else if(obj.attachEvent){
                obj.attachEvent('on'+type, func);
            } else {
                obj['on'+type] = func;
            }
        },
        remove(obj, type, func, capture){
            if(obj.detachEvent){
                obj.detachEvent('on'+type,func);
            }
            else if(obj.removeEventListener){
                obj.removeEventListener(type, func, capture);
            } else {
                obj['on'+type] = null;
            }
        },
        stop(evt){
            if(!evt){
                evt = window.event;
            }
            if(evt.stopPropagation){
                evt.stopPropagation();
            } else {
                evt.cancelBubble = true;
            }
        },
        cancel(evt){
            if(!evt){
                evt = window.event;
            }
            if(evt.preventDefault) {
                evt.preventDefault();
            } else {
                evt.returnValue = false;
            }
        },
        target(evt){
            return (evt && evt.target) || (window.event && window.event.srcElement);
        },
        keyCode(evt){
            return evt.charCode ? evt.charCode :
                (evt.keyCode ? evt.keyCode: (evt.which ? evt.which : 0));
        }
    };