function listen(event, elem, func) {
    elem = getElem(elem);
    if (elem.addEventListener) 
        elem.addEventListener(event,func,false);
    else if (elem.attachEvent) 
        elem.attachEvent('on'+event, function(){ func(new W3CDOM_Event(elem)) } );
    else throw 'cannot add event listener';
}

function mlisten(event, elem_list, func) {
    map(elem_list, function(elem) { listen(event, elem, func) } );
}

function W3CDOM_Event(currentTarget) {
    this.currentTarget  = currentTarget;
    this.preventDefault = function() { window.event.returnValue = false }
    return this;
}

function isUndefined(v) {
    var undef;
    return v===undef;
}


