function zoom(el, grow, k) {
 if (typeof(el) == 'string') el = document.getElementById(el);
 if (grow == undefined)
  grow = ('grow' in el ? (el.grow == '+' ? '-' : '+') 
                       : (el.offsetHeight > 0 ? '-' : '+'));
 el.grow = grow;
 el.zoomStep = k || 2;
 el.style.overflow = 'hidden';
 if (grow == '+') {
  if (!('zoomCurValue' in el) || el.zoomCurValue == 0) el.zoomCurValue = 1;
  el.style.display = '';
  if ('zoomMaxHeight' in el) el.zoomNewValue = el.zoomMaxHeight;
  else {
    el.style.height = '';
    el.zoomNewValue = el.offsetHeight;
  }
 } else {
  if (!('zoomCurValue' in el)) el.zoomCurValue = el.offsetHeight;
  if (!('zoomMaxHeight' in el)) el.zoomMaxHeight = el.offsetHeight;
  el.zoomNewValue = 0;
 }
 el.style.height = el.zoomCurValue+'px';
 if (!el.zoomIntervalId) el.zoomIntervalId = setInterval('stepZooming("'+el.id+'")', 15);
}

function stepZooming(id) {
 var el = document.getElementById(id);
 var d = (el.grow == '+' ? el.zoomCurValue * el.zoomStep : el.zoomCurValue / el.zoomStep);
 var finished = false;
 if (el.grow == '+' && d > el.zoomNewValue) {
  d = el.zoomNewValue;
  finished = true;
 } else if (el.grow != '+' && d < 1) {
  d = 0;
  finished = true;
 }
 el.zoomCurValue = d;
 el.style.height = d+'px';
 if (finished) {
  clearInterval(el.zoomIntervalId);
  el.zoomIntervalId = null;
  if (d == 0) el.style.display = 'none';
  else {
    el.style.overflow = '';
    el.style.height = '';
  }
  if (el.afterZoom) el.afterZoom();
 }
}

