function getHeight(/* Object */ el, /* boolean */ includePadding, /* boolean */ includeBorder) {
	var height;
	el = (typeof(el) == "string") ? document.getElementById(el) : el;
	if(window.getComputedStyle) { // FF, Safari, Opera
		var style = document.defaultView.getComputedStyle(el, null);
		if(style.getPropertyValue("display") == "none")
			return 0;
		
		height = parseInt(style.getPropertyValue("height"));
		
		if(navigator.userAgent.toLowerCase().indexOf("oper a") != -1) {
			height -= parseInt(style.getPropertyValue("padding-top"));
			height -= parseInt(style.getPropertyValue("padding-bottom"));
			height -= parseInt(style.getPropertyValue("border-top-width"));
			height -= parseInt(style.getPropertyValue("border-bottom-width"));
		}
		if(includePadding) {
			height += parseInt(style.getPropertyValue("padding-top"));
			height += parseInt(style.getPropertyValue("padding-bottom"));
		}
		if(includeBorder) {
			height += parseInt(style.getPropertyValue("border-top-width"));
			height += parseInt(style.getPropertyValue("border-bottom-width"));
		}
	} else { // IE
		if(el.currentStyle["display"] == "none")
			return 0;
			
		var heightCSS = el.currentStyle["height"];
		var bRegex = /thin|medium|thick/; // regex for css border width keywords
		height = el.offsetHeight; // currently the height including padding + border
		if(!includeBorder) {
			var borderTopCSS = el.currentStyle["borderTopWidth"];
			var borderBottomCSS = el.currentStyle["borderBottomWidth"];
			var temp = document.createElement("DIV");
			if(!bRegex.test(borderTopCSS)) {
				temp.style.width = borderTopCSS;
				el.parentNode.appendChild(temp);
				height -= Math.round(temp.offsetWidth);
				el.parentNode.removeChild(temp);
			} 
			else if(bRegex.test(borderTopCSS)) {
				if(el.offsetHeight > el.clientHeight && el.currentStyle["borderTopStyle"] != "none") {
					temp.style.width = "10px";
					temp.style.border = borderTopCSS + " " + el.currentStyle["borderTopStyle"] + " #000000";
					el.parentNode.appendChild(temp);
					height -= Math.round((temp.offsetWidth-10)/2);
					el.parentNode.removeChild(temp);
				}
			}
			if(!bRegex.test(borderBottomCSS)) {
				temp.style.width = borderBottomCSS;
				el.parentNode.appendChild(temp);
				height -= Math.round(temp.offsetWidth);
				el.parentNode.removeChild(temp);
			} else if(bRegex.test(borderBottomCSS)) {
				if(el.offsetHeight > el.clientHeight && el.currentStyle["borderBottomStyle"] != "none") {
					temp.style.width = "10px";
					temp.style.border = borderBottomCSS + " " + el.currentStyle["borderBottomStyle"] + " #000000";
					el.parentNode.appendChild(temp);
					height -= Math.round((temp.offsetWidth-10)/2);
					el.parentNode.removeChild(temp);
				}
			}
		}
		if(!includePadding) {
			var paddingTopCSS = el.currentStyle["paddingTop"];
			var paddingBottomCSS = el.currentStyle["paddingBottom"];
			var temp = document.createElement("DIV");
			temp.style.width = paddingTopCSS;
			el.parentNode.appendChild(temp);
			height -= Math.round(temp.offsetWidth);
			temp.style.width = paddingBottomCSS;
			height -= Math.round(temp.offsetWidth);
			el.parentNode.removeChild(temp);
		}
	}
	return height;
}
