/*
 * Returns CSSStyleDeclaration object for an element.
 *
 *   - elmnt  object whose styles to return
 */
function computedStyle(elmnt) {
  var computedStyle = null;
  
  if (document.defaultView && document.defaultView.getComputedStyle) {
    computedStyle = document.defaultView.getComputedStyle(elmnt, ""); 
  } else if (elmnt.currentStyle) {
    computedStyle = elmnt.currentStyle; 
  } else {
    computedStyle = element.style;
  }
  
  return computedStyle;
}

/*
 * Removes preceding and trailing whites spaces from string.
 *
 *   - str  string to be operated on
 */
function trim(str) {
  return str.replace(/^\s+|\s+$/g, '');
}

/*
 * Calculates font size value.
 *
 *   - elmnt  element whose font to calculate
 */
function parseFontSize(elmnt) {
  var fontSize = 0;
  var appliedStyles = computedStyle(elmnt);
  
  if (appliedStyles.fontSize.match('px')) {
    fontSize = appliedStyles.fontSize.replace(/px/, '');
  } else if (appliedStyles.fontSize.match('auto')) {
    fontSize = 'auto';
  } else if (appliedStyles.fontSize.match('em')) {
    fontSize = parseFloat(appliedStyles.fontSize.replace(/em/, '')) * baseFontSize();
  }
  
  return parseInt(fontSize);
}

/*
 * Returns font size of BODY element. It is assumed that font value is set in pixels.
 */
function baseFontSize() {
  return parseInt(computedStyle(document.getElementsByTagName('body')[0]).fontSize.replace(/px/, ''));
}