function lightbox_preload() {
  if (! document.getElementById('lightbox')) {
    lb_preload = document.createElement('img');
    lb_preload.setAttribute('id', 'lightbox_preload');
    document.getElementsByTagName('body')[0].appendChild(lb_preload);
    if (lb_preload.addEventListener)
      lb_preload.addEventListener('load' , lightbox_open, false);
    else if (lb_preload.attachEvent)
      lb_preload.attachEvent('onreadystatechange', function(e) {
        srcElement = (e||event).srcElement;
        if (srcElement.id == 'lightbox_preload'
            && srcElement.readyState == 'complete') {
          function lightbox_waitUntilComplete () {
            if (srcElement.complete) {
              lightbox_open();
            } else {
              setTimeout(lightbox_waitUntilComplete, 50);
            }
          }
          lightbox_waitUntilComplete();
        }
      });

    lb = document.createElement('div');
    lb.setAttribute('id', 'lightbox');
    document.getElementsByTagName('body')[0].appendChild(lb);

    lb_frm = document.createElement('div');
    lb_frm.setAttribute('id', 'lightbox_frame');
    lb.appendChild(lb_frm);

    lb_img = document.createElement('img');
    lb_img.setAttribute('id', 'lightbox_img');
    lb_frm.appendChild(lb_img);

    lb_cls = document.createElement('a');
    lb_cls.setAttribute('id', 'lightbox_closer');
    lb_cls.onclick = lightbox_close;
    lb_frm.appendChild(lb_cls);
  }

  
  lb_preload.setAttribute('src', this.href);
  return false;
}

function lightbox_open() {
  if (window.innerHeight) {
    window_height = window.innerHeight;
  } else if (document.documentElement.clientHeight != 0) {
    window_height = document.documentElement.clientHeight;
  } else {
    window_height = document.body.clientHeight;
  }

  v_offset = 0;
  if (window.pageYOffset) {
    v_offset = window.pageYOffset;
  } else if (document.documentElement.scrollTop) {
    v_offset = document.documentElement.scrollTop;
  } else if (document.body.scrollTop) {
    v_offset = document.body.scrollTop;
  }
  
  lb = document.getElementById('lightbox');
  lb_prl = document.getElementById('lightbox_preload');
  lb_img = document.getElementById('lightbox_img');
  lb_img.setAttribute('src', lb_prl.src);
  
  lb.style.paddingTop = (v_offset + (window_height - lb_prl.height) / 2)+ 'px';
  lb.style.display = 'block';
  
  setTimeout(lightbox_frame_open, 0.1);
}

function lightbox_close() {
  document.getElementById('lightbox').style.display = 
  document.getElementById('lightbox_img').style.display = 'none';
  lb_frm = document.getElementById('lightbox_frame');
  lb_frm.style.width = lb_frm.style.height = '0px';
  lightbox_frame_opening_step = 0;
}

function lightbox_frame_open() {
  lb = document.getElementById('lightbox');
  lb_frm = document.getElementById('lightbox_frame');
  lb_prl = document.getElementById('lightbox_preload');
  lb_img = document.getElementById('lightbox_img');

  lightbox_frame_opening_step += 4;
  step = lightbox_frame_opening_step / 100;
  
  lb_frm.style.width = (lb_prl.width * step)+ 'px';
  lb_frm.style.height = (lb_prl.height * step)+ 'px';
  
  if (step >= 1) {
    lb_img.style.display = 'inline';
  } else {
    setTimeout(lightbox_frame_open, 0.1);
  }
}

function lightbox_bind () {
  if (document.getElementById('page').className.match(/iphone/))
    return;

  var a = document.getElementsByTagName('a');
  for (i = 0 ; i < a.length ; i++) {
    if (/\s*lightbox\s*/.test(a[i].className)) {
      a[i].onclick = lightbox_preload;
      if (a[i].title.length > 0)
        a[i].title += ' - ';

      a[i].title += i18n['fdr']['Click to enlarge'];

      if (document.all && !window.opera
          && navigator.appVersion.match(/MSIE 7.0/)) {
        var img = a[i].getElementsByTagName('img')[0];
        if (img) {
          if (img.alt.length > 0)
            img.alt += ' - ';
          img.alt += i18n['fdr']['Click to enlarge'];
        }
      }
    }
  }
}
if (window.addEventListener)
  window.addEventListener('load' , lightbox_bind, false);
else if (window.attachEvent)
  window.attachEvent('onload', lightbox_bind);

lightbox_frame_opening_step = 0;
