function initPreviewLoader() {
  previewLoader();
  Event.observe(window, 'scroll', previewLoader, true);
}

function previewLoader() {
  $$('img.preview').each(function(img) {
    if (!Element.hasClassName(img, 'loaded'))  {
      var offset = Position.cumulativeOffset(img)[1];
      if ((offset + Element.getHeight(img)) >= document.documentElement.scrollTop
          && offset <= (document.documentElement.scrollTop + document.documentElement.clientHeight)) {
        var matches = img.id.match(/^preview_(.*)$/);
        if (matches) {
          Element.addClassName(img, 'loaded');
          img.src = '/preview/' + matches[1] + '?height=' + previewHeight + '&preview_text=' + encodeURIComponent(previewText);
          previewLoader();
          return;
        }
      }
    }
  });
}

function resetPreviews() {
  $$('img.preview').each(function(img) {
    if (Element.hasClassName(img, 'loaded')) {
      Element.removeClassName(img, 'loaded');
      var matches = img.id.match(/^preview_(.*)$/);
      if (matches) {
        // img.src = '/preview/' + matches[1] + '?height=' + previewHeight + '&preview_text=' + encodeURIComponent(previewText);
        img.src = '/images/spinner_white.gif'
      }
    }
  });
  previewLoader();
}

function enlargeFontHeight(link) {
  var height = getFontHeight(link);
  height += STEP;
  setFontHeight(link, height);
}

function reduceFontHeight(link) {
  var height = getFontHeight(link);
  height -= STEP;
  if (height < STEP) size = STEP;
  setFontHeight(link, height);
}

function getFontHeight(link) {
  var img = getFontPreview(link);
  var size, matches;
  if (matches = img.src.match(/(\?|&)height=(\d+)/)) {
    height = matches[2];
  } else {
    height = previewHeight;
  }
  return parseInt(height);
}

function setFontHeight(link, height) {
  var img = getFontPreview(link);
  if (img.src.search(/(\?|&)height=\d+/) >= 0) {
    img.src = img.src.replace(/(\?|&)height=\d+/, "$1height=" + height);
  } else if (img.src.indexOf('?') >= 0) {
    img.src += ('&height=' + height);
  } else {
    img.src += ('?height=' + height);
  }
}

function getFontPreview(link) {
  return $A($('font_' + link).getElementsByTagName('img')).first();
}

function clearAllDownloadsBut(exc) {
  $A(document.getElementsByTagName('div')).each(
    function(elem) {
      if (elem.id && (elem.id.search(/^download_/) == 0)) {
        if (elem.id != exc) $(elem).update('');
      }
    }
  );
  $A(document.getElementsByTagName('input')).each(
    function(elem) { if (elem.id && (elem.id.search(/^btn_download_/) == 0)) elem.disabled = false; }
  );
}

var STEP = 5;
