var imgBox = {};

function imgBoxInit() {
  imgBox.preloadImg = new Image();
  imgBox.preloadImg.onload = imgBoxDisplayImage;

  imgBox.wrapNode   = document.getElementById('imgBoxWrap');
  imgBox.blockNode  = document.getElementById('imgBoxBlock');
  imgBox.progImage  = document.getElementById('imgBoxProgress');
  imgBox.prevImage  = document.getElementById('imgBoxPrevImg');
  imgBox.nextImage  = document.getElementById('imgBoxNextImg');
  imgBox.wrapImage  = document.getElementById('imgBoxImageWrap');
  imgBox.mainImage  = document.getElementById('imgBoxImage');
  imgBox.titleNode  = document.getElementById('imgBoxTitle');

  imgBox.wrapNode.onclick = imgBoxClose;
	
  imgBox.linkNodesArray  = new Array(); 
  imgBox.currentImgIndex = 0;           
}

function imgBoxDisplayImage() {
  var previousImgIndex = imgBox.currentImgIndex - 1;

  if (previousImgIndex >= 0) {
    imgBox.prevImage.style.display = '';
  } else { 
    imgBox.prevImage.style.display = 'none'; 
  }

  var nextImgIndex = imgBox.currentImgIndex + 1;
  
  if (nextImgIndex < imgBox.linkNodesArray.length) {
    imgBox.nextImage.style.display = '';
  } else { 
    imgBox.nextImage.style.display = 'none'; 
  } 

  if (imgBox.linkNodesArray.length > 1) {
    imgBoxDimMainImage(10);                 
    imgBox.progImage.style.display = 'none';
    imgBox.titleNode.innerHTML = '&nbsp;';
    imgBox.titleNode.style.display = 'none';
  }
}

function imgBoxDimMainImage(opacity) {
  var newOpacity;

  if (opacity) {
    newOpacity = opacity;
  } else {
    var step = 2;     
    newOpacity = imgBox.mainImage.style.opacity*10 - step; 
  }

  imgBox.mainImage.style.opacity = newOpacity/10;                          
  imgBox.mainImage.style.filter  = 'alpha(opacity=' + newOpacity*10 + ')';

  if (imgBox.mainImage.style.opacity > 0) { 
    setTimeout('imgBoxDimMainImage()', 35);
  } else {
    imgBox.mainImage.style.display = 'none';
    imgBox.mainImage.style.opacity = 0;
    imgBox.mainImage.style.filter  = 'alpha(opacity=100)';
    imgBoxResize(); 
  }
}

function imgBoxResize() {
  var leftInnerMargin   = parseInt(imgBox.wrapImage.style.marginLeft, 10) || 0; 
  var rightInnerMargin  = parseInt(imgBox.wrapImage.style.marginRight, 10) || 0;
  var leftBorder        = parseInt(imgBox.blockNode.style.borderLeftWidth, 10) || 0;
  var rightBorder       = parseInt(imgBox.blockNode.style.borderRightWidth, 10) || 0;

  var deltaWidth  = imgBox.wrapImage.offsetWidth - imgBox.preloadImg.width;
  var deltaHeight = imgBox.wrapImage.offsetHeight - imgBox.preloadImg.height; 
	
  var widthResizeStep  = deltaWidth / 4;
  var heightResizeStep = deltaHeight / 4;

  widthResizeStep  = (widthResizeStep > 0) ? Math.ceil(widthResizeStep) : Math.floor(widthResizeStep); 
  heightResizeStep = (heightResizeStep > 0) ? Math.ceil(heightResizeStep) : Math.floor(heightResizeStep);
	
  if (Math.abs(deltaWidth) > Math.abs(widthResizeStep)) {
    var newWidth = imgBox.blockNode.offsetWidth - leftBorder - rightBorder - widthResizeStep;
    imgBox.blockNode.style.width = newWidth + 'px';
    imgBox.blockNode.style.left = (document.body.clientWidth - newWidth)/2 + 'px';
  }		

  if (Math.abs(deltaHeight) > Math.abs(heightResizeStep)) {
    var newHeight = imgBox.wrapImage.offsetHeight - heightResizeStep;
    imgBox.wrapImage.style.height = newHeight + 'px'; 
  }

  if ((Math.abs(deltaHeight) > Math.abs(heightResizeStep)) || (Math.abs(deltaWidth) > Math.abs(widthResizeStep))) {
    setTimeout('imgBoxResize()', 35);
  } else {
    var finalHeight = imgBox.preloadImg.width + leftInnerMargin + rightInnerMargin;
    imgBox.blockNode.style.width   = finalHeight + 'px';
    imgBox.blockNode.style.left    = (document.body.clientWidth - finalHeight)/2 + 'px';
    imgBox.mainImage.style.width   = imgBox.preloadImg.width + 'px';
    imgBox.wrapImage.style.height  = imgBox.preloadImg.height + 'px';
    imgBox.mainImage.src           = imgBox.preloadImg.src;
    imgBox.mainImage.style.display = 'block';

    var imageTitle = (imgBox.linkNodesArray[imgBox.currentImgIndex]) ? imgBox.linkNodesArray[imgBox.currentImgIndex].title : '&nbsp;';

    if (imageTitle != '') {
      imgBox.titleNode.style.display = 'block';
      imgBox.titleNode.innerHTML     = '&nbsp;&nbsp;' + imageTitle;
    }

    imgBoxLightenMainImage();
  }  
}

function imgBoxLightenMainImage() {
  var step        = 2; 
  var newOpacity  = imgBox.mainImage.style.opacity*10 + step;
	
  imgBox.mainImage.style.opacity = newOpacity/10;
  imgBox.mainImage.style.filter  = 'alpha(opacity=' + newOpacity*10 + ')';
	
  if (imgBox.mainImage.style.opacity < 1) {
    setTimeout('imgBoxLightenMainImage()', 35);
  } else {
    imgBox.mainImage.style.opacity = '';
    imgBox.mainImage.style.filter  = '';
  }
}

function imgBoxNext() {
  imgBox.progImage.style.display = 'block';
	
  var nextImgIndex = imgBox.currentImgIndex + 1;
  if (nextImgIndex < imgBox.linkNodesArray.length) {
    imgBox.currentImgIndex = nextImgIndex;
    imgBox.preloadImg.src  = imgBox.linkNodesArray[nextImgIndex].href;
  }

  return false;
}

function imgBoxPrev() {
  imgBox.progImage.style.display = 'block';
	
  var prevImgIndex = imgBox.currentImgIndex - 1;
  if (prevImgIndex >= 0) {
    imgBox.currentImgIndex = prevImgIndex;
    imgBox.preloadImg.src  = imgBox.linkNodesArray[prevImgIndex].href;
  }

  return false;
}

function imgBoxClose() {
  imgBox.wrapNode.style.display = 'none';
  imgBox.blockNode.style.display = 'none';
  return false;
}

function imgBoxOpen(domNode) {
  var docLinks = document.getElementsByTagName('a');

  imgBox.linkNodesArray = new Array(); 
  imgBox.progImage.style.display = 'block';

  if (domNode.rel != '') {
    for (var i = 0; i < docLinks.length; i++){
      if (docLinks[i].rel == domNode.rel) {
        imgBox.linkNodesArray.push(docLinks[i]); 
      }
      if (docLinks[i] == domNode) {
        imgBox.currentImgIndex = imgBox.linkNodesArray.length - 1;
      }
    }
  } else {
    imgBox.linkNodesArray.push(domNode);
    imgBox.currentImgIndex = 0;
  }

  imgBox.titleNode.innerHTML = '';

  var pagesize = getPageSizeWithScroll();

  //imgBox.wrapNode.style.display = 'block';
  //imgBox.wrapNode.style.width   = document.body.clientWidth + 'px';
  //imgBox.wrapNode.style.height  = (pagesize[3] + pagesize[1] - 10) + 'px';

  imgBox.blockNode.style.top     = (pagesize[1] + 50) + 'px';
  imgBox.mainImage.src           = 'images/blank.gif';
  imgBox.wrapImage.style.height  = '30px';
  imgBox.blockNode.style.left    = '380px';
  imgBox.blockNode.style.width   = '200px';
  imgBox.blockNode.style.display = 'block';
  imgBox.preloadImg.src          = domNode.href; 

  return false;
}

function getPageSizeWithScroll()
{
  var scrOfX = 0, scrOfY = 0;

  if(typeof(window.pageYOffset) == 'number') {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }  

  var myWidth = 0, myHeight = 0;

  if(typeof(window.innerWidth) == 'number') {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }

  arrayPageSizeWithScroll = new Array(scrOfX, scrOfY, myWidth, myHeight);
  return arrayPageSizeWithScroll;
}

imgBoxInit();
