function addClass(elem, className) {
    if (!hasClass(elem, className))
        elem.className = (elem.className + " " + className);
}

function replaceClass(elem, rexp, className) {
    elem.className = elem.className.replace(rexp, className);
}

function replaceClasses(elem, classNames, newClassName) {
    var hasReplaced = false;
    for (var i = 0; i < classNames.length; i++) {
        removeClass(elem, classNames[i]);
    }
    addClass(elem, newClassName);
}

function hasClass(elem, rexp) {
    return elem.className.search(rexp) >= 0;
}

function removeClass(elem, rexp) {
    elem.className = elem.className.replace(rexp, "");
}

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/, ""); 
}

function getElementsByClassName(cName) {
    var allElems = document.all || document.getElementsByTagName("*");
    var matchingElems = new Array();
    for (i=0; i<allElems.length; i++) {
        if (hasClass(allElems[i], cName))
            matchingElems[matchingElems.length] = allElems[i];
    }
    return matchingElems;
}