var loading_image_file = '/includes/darkbox/darkbox_loading.gif';

function darkbox_init()
{
  var anchors = document.getElementsByTagName('a');

  for (var i = 0; i < anchors.length; i++)
  {
    var anchor = anchors[i];
    if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == 'darkbox'))
    {
      anchor.onclick = function () { darkbox_show(this); return false;};
    }
  }

  var body = document.getElementsByTagName('body').item(0);

  var overlay = document.createElement('div');
  overlay.setAttribute('id','darkbox_overlay');
  overlay.onclick = function () {darkbox_close(); return false;}
  overlay.style.visibility = 'hidden';
  overlay.style.position = 'absolute';
  overlay.style.top = '0';
  overlay.style.left = '0';
  overlay.style.zIndex = '1000';
  overlay.style.width = '100%';
  body.insertBefore(overlay, body.firstChild);

  var content = document.createElement('div');
  content.setAttribute('id','darkbox_content');
  content.onclick = function () {darkbox_close(); return false;}
  content.style.visibility = 'hidden';
  content.style.position = 'absolute';
  content.style.zIndex = '1002';
  body.insertBefore(content, overlay.nextSibling);

  var image_preloader = new Image();
  image_preloader.onload=function()
  {
    var loading_image = document.createElement('img');
    loading_image.src = loading_image_file;
    loading_image.setAttribute('id', 'darkbox_loading_image');
    loading_image.style.position = 'absolute';
    loading_image.style.display = 'block';
    loading_image.style.zIndex = '1001';

    overlay.appendChild(loading_image);

    image_preloader.onload = function(){};
  }
  image_preloader.src = loading_image_file;
}

function darkbox_show(anchor)
{
  var dimensions = darkbox_get_dimensions();

  var darkbox_overlay = document.getElementById('darkbox_overlay');
  darkbox_overlay.style.width = dimensions[0] + 'px';
  darkbox_overlay.style.height = dimensions[1] + 'px';
  darkbox_overlay.style.visibility = 'visible';

  var darkbox_content = document.getElementById('darkbox_content');
  var loading_image = document.getElementById('darkbox_loading_image');

  if (loading_image)
  {
    loading_image.style.left = (((dimensions[0] - loading_image.width) / 2) + 'px');
    loading_image.style.top = (darkbox_get_yscroll() + ((dimensions[3] - loading_image.height) / 2) + 'px');        
  }

  preload_image = new Image();
  preload_image.onload = function()
  {
    var img_width = preload_image.width;
    var img_height = preload_image.height;

    darkbox_content.style.left = (dimensions[0] - img_width) / 2 + 'px';
    darkbox_content.style.top = darkbox_get_yscroll() + ((dimensions[3] - img_height) / 2) + 'px';

    darkbox_content.style.width = img_width + 'px';

    darkbox_content.innerHTML = '<img src="' + anchor.getAttribute('href') + '" alt="' + anchor.getAttribute('title') + '" style="display: block;" />';
    if (anchor.getAttribute('title')) darkbox_content.innerHTML += anchor.getAttribute('title');

    darkbox_content.style.visibility = 'visible';
    loading_image.style.visibility = 'hidden';

    preload_image.onload=function(){};

    return false;
  }

  preload_image.src = anchor.href;
}

function darkbox_close()
{
  document.getElementById('darkbox_overlay').style.visibility = 'hidden';
  document.getElementById('darkbox_content').style.visibility = 'hidden';
}

function darkbox_get_yscroll()
{
  var yScroll;

  if (self.pageYOffset)
  {
    yScroll = self.pageYOffset;
  }
  else if (document.documentElement && document.documentElement.scrollTop)
  {
    yScroll = document.documentElement.scrollTop;
  }
  else if (document.body)
  {
    yScroll = document.body.scrollTop;
  }

  return yScroll;
}

function darkbox_get_dimensions()
{
  var xScroll, yScroll;

  if (window.innerHeight && window.scrollMaxY)
  {
    xScroll = document.body.scrollWidth;
    yScroll = window.innerHeight + window.scrollMaxY;
  }
  else if (document.body.scrollHeight > document.body.offsetHeight)
  {
    xScroll = document.body.scrollWidth;
    yScroll = document.body.scrollHeight;
  }
  else
  {
    xScroll = document.body.offsetWidth;
    yScroll = document.body.offsetHeight;
  }

  var windowWidth, windowHeight;

  if (self.innerHeight)
  {
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientHeight)
  {
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  }
  else if (document.body)
  {
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  }

  pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
  pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;

  return Array(pageWidth, pageHeight, windowWidth, windowHeight);
}

var old_onload = window.onload;
if (typeof window.onload != 'function')
{
  window.onload = darkbox_init;
}
else
{
  window.onload = function(){ old_onload(); darkbox_init(); }
}