function removeFromSet(set,item) {
    var newSet = new Array();
    for (var i = 0; i < set.length; i++) {
        if (set[i] != item)
            newSet.push(set[i]);
    }
    return newSet;
}

function addToSet(set,item) {
    set = removeFromSet(set,item);
    set.push(item);
    return set;
}

function getElementClasses(element) {
	if (!element.className)
		return new Array();
    return element.className.split(/\s+/);
}

function elementHasClass(element,className) {
	var classes = getElementClasses(element);
	for (var i = 0; i < classes.length; i++) {
		if (classes[i] == className)
			return true;
	}
	return false;
}

function addElementClass(element,className) {
    var classes = getElementClasses(element);
    element.className = addToSet(classes,className).join(' ');
}

function removeElementClass(element,className) {
    var classes = getElementClasses(element);
    element.className = removeFromSet(classes,className).join(' ');
}

function addChildrenClass(parent,className,childType,depth) {
    if (depth != undefined)
        depth --;

    for (var i = 0; i < parent.childNodes.length; i++) {
        var child = parent.childNodes[i];
        if (childType == undefined || child.nodeName == childType.toUpperCase())
            addElementClass(child,className);
        if (depth == undefined || depth > 0)
            addChildrenClass(child,className,childType,depth);
    }
}

function removeChildrenClass(parent,className,childType,depth) {
    if (depth != undefined)
        depth --;

    for (var i = 0; i < parent.childNodes.length; i++) {
        var child = parent.childNodes[i];
        if (childType == undefined || child.nodeName == childType.toUpperCase())
            removeElementClass(child,className);
        if (depth == undefined || depth > 0)
            removeChildrenClass(child,className,childType,depth);
    }
}
