function attach_event(ele, e, cb, useCapture) {
    if (typeof window.addEventListener != 'undefined') {
        ele.addEventListener(e, cb, useCapture);
    } else {
        ele.attachEvent('on' + e, cb)
    }
}

function detach_event(ele, e, cb, useCapture) {
    if (typeof window.removeEventListener != 'undefined') {
        ele.removeEventListener(e, cb, useCapture);
    } else {
        ele.detachEvent('on' + e, cb)
    }
}

function cancel_event(e) {
    if (typeof e.stopPropagation != 'undefined') {
    	e.stopPropagation(); e.preventDefault()
    } else if (typeof e.preventDefault != 'undefined')	{
        e.preventCapture(); e.preventDefault(); e.preventBubble();
    } else {
	    e.cancelBubble = true;
        e.returnValue = false;
    }
}

function event_fire(target, type, bubbles, cancelable) {
    var event = this.document.createEvent("Events");

    event.initEvent(type, bubbles, cancelable);

    target.dispatchEvent(event);
}


