// From http://snippets.dzone.com/posts/show/2630
// 
// ----------------------------------------------------------------------------
// hasClassName
//
// Description : returns boolean indicating whether the object has the class name
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to add
//
function hasClassName(objElement, strClass) {
    // if there is a class
    if (objElement.className) {
        // the classes are just a space separated list, so first get the list
        var arrList = objElement.className.split(' ');
        
        // get uppercase class for comparison purposes
        var strClassUpper = strClass.toUpperCase();
        
        // find all instances and remove them
        for (var i = 0; i < arrList.length; i++) {
            // if class found
            if (arrList[i].toUpperCase() == strClassUpper) {
                // we found it
                return true;
            }
        }
    }
    // if we got here then the class name is not there
    return false;
}
// 
// end hasClassName
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// addClassName
//
// Description : adds a class to the class attribute of a DOM element
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to add
//
function addClassName(objElement, strClass, blnMayAlreadyExist) {
    // if there is a class
    if (objElement.className) {
        // the classes are just a space separated list, so first get the list
        var arrList = objElement.className.split(' ');
        
        // if the new class name may already exist in list
        if (blnMayAlreadyExist) {
            // get uppercase class for comparison purposes
            var strClassUpper = strClass.toUpperCase();
            
            // find all instances and remove them
            for (var i = 0; i < arrList.length; i++) {
                // if class found
                if (arrList[i].toUpperCase() == strClassUpper) {
                    // remove array item
                    arrList.splice(i, 1);
                    
                    // decrement loop counter as we have adjusted the array's contents
                    i--;
                }
            }
        }
        
        // add the new class to end of list
        arrList[arrList.length] = strClass;
        
        // add the new class to beginning of list
        //arrList.splice(0, 0, strClass);
        
        // assign modified class name attribute
        objElement.className = arrList.join(' ');
        
    } else {
        // if there was no class
        // assign modified class name attribute      
        objElement.className = strClass;
    }
}
// 
// end addClassName
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// removeClassName
//
// Description : removes a class from the class attribute of a DOM element
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to remove
//
function removeClassName(objElement, strClass) {
    // if there is a class
    if (objElement.className) {
        
        // the classes are just a space separated list, so first get the list
        var arrList = objElement.className.split(' ');
        
        // get uppercase class for comparison purposes
        var strClassUpper = strClass.toUpperCase();
        
        // find all instances and remove them
        for (var i = 0; i < arrList.length; i++) {
            // if class found
            if (arrList[i].toUpperCase() == strClassUpper) {
                // remove array item
                arrList.splice(i, 1);
                
                // decrement loop counter as we have adjusted the array's contents
                i--;
            }
        }
        // assign modified class name attribute
        objElement.className = arrList.join(' ');
    }
    // if there was no class
    // there is nothing to remove
}
// 
// end removeClassName
// ----------------------------------------------------------------------------


// Return a list of document nodes of class className.
function getElementsByStyleClass(className) {
    var all = document.all ? document.all : document.getElementsByTagName('*');
    var elements = new Array();
    for (var e = 0; e < all.length; e++) {
        if (all[e].className == className) {
            elements[elements.length] = all[e];
        }
    }
    return elements;
}


// Remove document nodes of class 'className'.
function deleteClassNodes(className) {
    var classNameNodes = getElementsByStyleClass(className);
    for (var i = 0; i < classNameNodes.length; i++) {
        var theNode = classNameNodes[i];
        //document.writeln("node name: " + theNode.nodeName());
        theNode.parentNode.removeChild(theNode);
    }
}
