function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}
function handleCSS(action, object, class1, class2)
{
    switch (action) {
        case "swap":
            object.className=!handleCSS("check",object,class1)?object.className.replace(class2,class1):
            object.className.replace(class1,class2);
            break;
        case "add":
            if(!handleCSS("check",object,class1)){object.className+=object.className?' '+class1:class1;}
            break;
        case "remove":
            var rep=object.className.match(" "+class1)?" "+class1:class1;
            object.className=object.className.replace(rep,"");
            break;
        case "check":
            return new RegExp("\\b"+class1+"\\b").test(object.className);
            break;
    }
}

function ascendDOM(e, target) {
    while (e.nodeName.toLowerCase() != target && e.nodeName.toLowerCase() != 'html')
        e = e.parentNode;
    return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

function nextElement(obj) {
    var obj = obj.nextSibling;
    while (obj.nodeType != 1)
        obj = obj.nextSibling;
    return obj;
}

function getTarget(e)
{
    if (e.srcElement) {
        return e.srcElement;
    } else {
        return e.target;
    }
}

function stopEvent(e)
{
    if (e && e.stopPropagation && e.preventDefault) {
        e.stopPropagation();
        e.preventDefault();
    }
    if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
        return false;
    }
}

