function addOnLoadHandler(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            func();
            if (oldonload) {
                oldonload();
            }
        }
    }
}

function addEventHandler(target, type, callback, context, captures) {

    var newCallback = callback;
    if (context){
        newCallback = function(){
            callback.apply(context, arguments);
        }
    }
    if (target.addEventListener) {
        // EOMB
        target.addEventListener(type, newCallback, captures);
    } else if (target.attachEvent) {
        // IE
        target.attachEvent('on'+type, newCallback, captures);
    } else {
        // IE 5 Mac and some others
        target['on'+type] = newCallback;
    }
}

function getElementsByClassName(classname, node, tag) {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    if (!tag) tag = "*";
    var els = node.getElementsByTagName(tag);
    for(var i = 0; i < els.length; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}