// versionCode 20050110_2317

function switchDisplay(elem) {  
	var displayType = _getComputedStyle(elem, "display");
	var isOn;
	if (elem.style) {
		// if hidden
		if (displayType == 'none' || displayType == '') {
			showElement(elem);
			isOn = true;
		} else {
			hideElement(elem);
			isOn = false;
		}
	}
	return isOn;
}

function switchDisplayById(id) {
	elem = document.getElementById(id);
	return switchDisplay(elem);
}

function hideElement(elem) {
	if (elem && elem.style) {
  		elem.style.display = "none";
	}
}

function showElement(elem, displayType) { // displayType = ['block'|'inline']
	if (elem && elem.style) {
		if (displayType == null) {
			elem.style.display = getDefaultDisplayType(elem);
		} else {
			elem.style.display = displayType;
		}
	} 
}

function hideElementById(id) {
	elem = document.getElementById(id);
	hideElement(elem);
}

function showElementById(id, displayType) {
	elem = document.getElementById(id);
	showElement(elem, displayType);
}


<!--- some tag's default display is "block", some "inline" --->
function getDefaultDisplayType(elem) {
	// reference: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/display.asp
	displayType = 'inline';
	blockList = 'ADDRESS,BLOCKQUOTE,BODY,CENTER,COL,COLGROUP,DD,DIR,DIV,DL,DT,FIELDSET,FORM,FRAME,HN,HR,LEGEND,LISTING,MARQUEE,MENU,OL,P,PLAINTEXT,PRE,TABLE,TD,TH,THEAD,TR,UL,XMP,';
	nodeName = elem.nodeName.toUpperCase();
	nodeNameEx = new RegExp(nodeName + ',', '');
	if (nodeName == 'LI') {
		displayType = 'list-item';
	} else if (nodeName == 'TBODY' || nodeName == 'TFOOT') {
		displayType = 'none';
	} else if (blockList.match(nodeNameEx)) {
		displayType = 'block';
	}
	return displayType;
}

// "_" to avoid overwriting (overloading) firefox built-in js function
function _getComputedStyle(elem, styleName) {

	var style;
	if (document.defaultView && document.defaultView.getComputedStyle) {
		var view = document.defaultView;
		var styleElem = view.getComputedStyle(elem, "");
		if (styleElem) {
			style = styleElem.getPropertyValue(styleName);
		} else {
			style = eval('elem.style.'+styleName);
		}
	} else if (elem.currentStyle) {
		style = elem.currentStyle[styleName];
	} else {
		style = elem.style.display;
	}
	return style;
}

// width & height are numeric
function resizeElement(elem, width, height, widthUnit, heightUnit) {
	if (widthUnit == null) {
		widthUnit = 'px';
	}
	if (heightUnit == null) {
		heightUnit = 'px';
	}
	if (elem.style) {
  		elem.style.width = width.toString() + widthUnit;	
  		elem.style.height = height.toString() + heightUnit;
	}
}

/*
verion:

20050404_1526:
mod: showElement & hideElement: proceed with elem is not null

200501113_1303:
fix for firefox

20050110_2317:
first version

*/