// Thumbnail expansion and reduction animation
// Developed by Jan Goyvaerts, 2006
// Copyright (c) 2006-2008 Jan Goyvaerts. All rights reserved.

// Copying or linking to this script is prohibited without purchasing a license.
// Please see http://www.just-great-software.com/thumbscreen.html for licensing details and purchasing options.

expandingid = 0;
expandingstep = 0;
expandingwidth = 0;
expandingheight = 0;
expandingtop = 0;
expandingleft = 0;
expandingtimeout = 0;
expandingtotalsteps = 15; 

function reducethumbret(expandingid){
  reducethumb(expandingid);
  return false;
}

function expandthumbpath(fullImgPath, expandingid, fullwidth, fullheight) {
  var fullId = "screen"+expandingid;
  var img = document.getElementById(fullId);
  if (img == null){
    img = new Image();
    img.style.position = "absolute"
    img.style.display = "none";
    img.src = fullImgPath;
    img.id=fullId;
    img.onclick= function(){
    reducethumb(expandingid);
    return false;
    }
    img.onmouseout= function(){
    reducethumb(expandingid);
    return false;
    }
    var thumbId = "thumb" + expandingid;
    var thumb_img = document.getElementById(thumbId);
    thumb_img.parentNode.appendChild(img);
  }
  expandthumb(expandingid,fullwidth, fullheight);
}

function expandthumb(thumbid, fullwidth, fullheight) {
  if (expandingtimeout != 0) {
    clearTimeout(expandingtimeout);
  }
  if (expandingid > 0 && expandingid != thumbid) {
    restorethumb();
  }
  if (expandingid != thumbid) {
    img = document.getElementById("screen" + thumbid);
    img.style.display = 'block';
    expandingid = thumbid;
    expandingstep = 1;
    expandingwidth = fullwidth;
    expandingheight = fullheight;
    expandingtop = img.offsetTop;
    expandingleft = img.offsetLeft;
  } else if (expandingstep < 1) {
    expandingstep = 1;
  }
  expandstep();
}

function doexpand() {
  img = document.getElementById("screen" + expandingid);
  thumb = document.getElementById("thumb" + expandingid);
  myscroll = getScroll();
  if (expandingtop + thumb.height > myscroll.top + myscroll.height) {
    finaltop = myscroll.top + myscroll.height - expandingheight;
  } else {
    finaltop = expandingtop + thumb.height - expandingheight;
  }
  if (finaltop < myscroll.top) { finaltop = myscroll.top; }
  img.style.top = finaltop + ((expandingtop - finaltop) * (expandingtotalsteps - expandingstep) / expandingtotalsteps) + 'px';

  if (expandingleft + thumb.width > myscroll.left + myscroll.width) {
    finalleft = myscroll.left + myscroll.width - expandingwidth;
  } else {
    finalleft = expandingleft + thumb.width - expandingwidth;
  }
  if (finalleft < myscroll.left) { finalleft = myscroll.left; }
  img.style.left = finalleft + ((expandingleft - finalleft) * (expandingtotalsteps - expandingstep) / expandingtotalsteps) + 'px';

  img.width = thumb.width + ((expandingwidth - thumb.width) * expandingstep / expandingtotalsteps);
  img.height = thumb.height + ((expandingheight - thumb.height) * expandingstep / expandingtotalsteps);
}

function restorethumb() {
  img = document.getElementById("screen" + expandingid);
  img.style.top = '';
  img.style.left = '';
  img.style.display = 'none';
  expandingid = 0;
}

function expandstep() {
  expandingtimeout = 0;
  doexpand();
  if (expandingstep < expandingtotalsteps) {
    expandingstep++;
    expandingtimeout = setTimeout("expandstep()", 20);
  }
}

function reducestep() {
  expandingtimeout = 0;
  doexpand();
  if (expandingstep > 0) {
    expandingstep--;
    expandingtimeout = setTimeout("reducestep()", 20);
  } else {
    restorethumb();
  }
}

function reducethumb(thumbid) {
  if (expandingtimeout != 0) {
    clearTimeout(expandingtimeout);
  }
  if (expandingstep > 0) {
    reducestep();
  }
}

// returns the scroll position and size of the browser
function getScroll() {
  if (document.all && typeof document.body.scrollTop != "undefined") {  
    // IE model
    var ieBox = document.compatMode != "CSS1Compat";
    var cont = ieBox ? document.body : document.documentElement;
    return {
      left:   cont.scrollLeft,
      top:    cont.scrollTop,
      width:  cont.clientWidth,
      height: cont.clientHeight
    };
  } else {
    return {
      left:   window.pageXOffset,
      top:    window.pageYOffset,
      width:  window.innerWidth,
      height: window.innerHeight
    };
  }
}