function shoh(id) { // flips display attribute of element
    if (document.getElementById) { // DOM3 = IE5, NS6
        if (document.getElementById(id).style.display == "none"){
	    document.getElementById(id).style.display = 'block';
        } else {
            document.getElementById(id).style.display = 'none';
        }	
    } else { 
        if (document.layers) {	
            if (document.id.display == "none"){
                document.id.display = 'block';
            } else {
                document.id.display = 'none';
            }
        } else {
            if (document.all.id.style.visibility == "none") {
                document.all.id.style.display = 'block';
            } else {
                document.all.id.style.display = 'none';
            }
        }
    }
}

function getElementsByClass(searchClass, node, tag) {
    var classElements = new Array();
    if (node == null)
        node = document;
    if (tag == null)
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
    for (i = 0, j = 0; i < elsLen; i++) {
        if (pattern.test(els[i].className)) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

function shohByClass(id) {
    var item = document.getElementById(id);
    if (item) {
        item.className = (item.className == 'hiddenElem') ? 'unhiddenElem' : 'hiddenElem';
    }
    var more = document.getElementById('more_' + id);
    if (more) {
        more.innerHTML = (item.className == 'hiddenElem') ? '(more...)' : '(less...)';            }
}

function shohByClassAll(desiredState) {
    var nowClass = (desiredState == 'open') ? 'hiddenElem' : 'unhiddenElem';
    var items = getElementsByClass(nowClass);
    var itemsLen = items.length;
    for (i = 0; i < itemsLen; i++) {
        shohByClass(items[i].id);
    }
}