function getElem(elem) {
    if (document.getElementById) {
        if (typeof elem == "string") {
            elem = document.getElementById(elem);
            if (elem===null) throw 'cannot get element: element does not exist';
        } else if (typeof elem != "object") {
            throw 'cannot get element: invalid datatype';
        }
    } else throw 'cannot get element: unsupported DOM';
    return elem;
}

// Cross-browser implementation of element.addEventListener()
function listen(event, elem, func) {
    elem = getElem(elem);
    if (elem.addEventListener){  // W3C DOM
//		alert('NOT IE');
		elem.addEventListener(event,func,false);
		}
    else if (elem.attachEvent){  // IE DOM
//		alert('IE');
		elem.attachEvent('on'+event, function(){ func(new W3CDOM_Event(elem)) } );
		}
        // for IE we use a wrapper function that passes in a simplified faux Event object.
    else throw 'cannot add event listener, please notify Darrow Cole in LIT: 310.206.5565';
}


function W3CDOM_Event(currentTarget) {

//	alert('currentTarget = ' + currentTarget);

    this.currentTarget  = currentTarget;
    this.preventDefault = function() { window.event.returnValue = false }
    return this;
}

function isUndefined(v) {
    var undef;
    return v===undef;
}

