// config vars
var z_loadingImg = 'assets/images/loading.gif';
var z_loadingImgWidth = 45;
var z_background = 'white';
var z_missing_message = 'Sorry but this Zoom Image is not quite ready yet';//'No Zoom Image is available';
// internal vars
var picId = null;
var alwaysVisible = true;
var popupZoom = false;
var clickable = true;
var notclickable = false;
var z_index = 2100;
//
var zoomloadlist = new Array;
var zoomersloaded = false;
//
function initZoomers() {
  zoomersloaded = true;
  for (var i = 0; i < zoomloadlist.length; i++) {
    var a = zoomloadlist[i];
    if (a.proc == makeZoomable) {
      makeZoomable(a.imgid, a.zoomid, a.zoomClass, a.largeImg, a.alwaysVisible, a.loadPrompt);
    }
    if (a.proc == jbMakeZoomable) {
      jbMakeZoomable(a.imgid, a.largeImg, a.okToClick, a.clickOn, a.clickOff, a.frigpos, a.thumbClick, a.zoomDims);
    }
    if (a.proc == btMakeZoomable) {
      btMakeZoomable(a.imgid, a.largeImg, a.boxsize);
    }
  }
}
//
function isIE() {
  if ((navigator.userAgent && navigator.userAgent.indexOf("MSIE") != -1)) {
//  && (navigator.vendor && navigator.vendor.indexOf("Apple") == -1)
//  && (navigator.userAgent && navigator.userAgent.indexOf("Firefox") == -1)) {
    return true;
  }
  return false;
}
//
function cssStyle(el, property) {
  var res = el.style[property];
  if (!res) {
    if (el.currentStyle && el.currentStyle[property]) {
      res = el.currentStyle[property];
    } else {
      // this method uses 'background-image' not the passed format of 'backgroundImage'
      prop = "";
      for (var i=0; i < property.length; i++) {
        if (property.charAt(i) == property.charAt(i).toUpperCase()) {
          prop += '-' + property.charAt(i).toLowerCase(); }
        else {
          prop += property.charAt(i); }
      }
      res = getComputedStyle(el,'').getPropertyValue(prop);
    }
  }
  if (!res) { res = ''; }
  res = res.replace('px','');
  return res;
}
//------------
function createDynamicDiv(id ) {
  var div = document.getElementById(id);
  if (!div) {
    div = document.createElement('div');
    div.setAttribute('id', id);
    div.setAttribute('name', id);
    div.style.display = 'none';
    document.body.appendChild(div);
  }
  return div;
}
//
function mouseX(evt) {
if (evt.pageX) return evt.pageX;
else if (evt.clientX)
   return evt.clientX + (document.documentElement.scrollLeft ?
   document.documentElement.scrollLeft :
   document.body.scrollLeft);
else return null;
}
//
function mouseY(evt) {
if (evt.pageY) return evt.pageY;
else if (evt.clientY)
   return evt.clientY + (document.documentElement.scrollTop ?
   document.documentElement.scrollTop :
   document.body.scrollTop);
else return null;
}
//
function bodyMouseMove(event, el) {
  if (picId) { bodyMouseOver(event, picId); }
}
//
function bodyMouseOver(event) {
  event = event || window.event;
  if (picId) {
    if (event) {
      var x = mouseX(event);
      var y = mouseY(event);
    }

//  var debug = document.getElementById('debug');
//  debug.innerHTML = x+' '+y+' '+picId.data.elL+' '+picId.data.elT+' '+(picId.data.elL + picId.data.elW)+' '+(picId.data.elT + picId.data.elH);

    if (!event || (x <= picId.data.elL) || (x >= picId.data.elL + picId.data.elW) || (y <= picId.data.elT) || (y >= picId.data.elT + picId.data.elH)) {
      if (picId.data.magbox) {
        if (!picId.data.alwaysOn) { picId.data.magbox.style.display = 'none'; }
      }
      if (picId.data.zoomdiv) {
        picId.data.zoomdiv.style.display = (picId.data.alwaysOn ? 'block' : 'none');
      }

      if (picId.data.promptDiv) {
        picId.data.promptDiv.style.display = 'none';
      }
      picId.data.over = false;
      picId = null;
    }
  }
}
//
function getPos(el1) {
  var x = el1.offsetLeft; var y = el1.offsetTop;
  while (el1=el1.offsetParent) {
    x += el1.offsetLeft+(el1.clientLeft ? el1.clientLeft : 0);
    y += el1.offsetTop+(el1.clientTop ? el1.clientTop : 0);
  }
  return { x: x, y: y }
}
//
//
//
function zoomMouseOver(event, el) {
  if (!el || !el.id) return;
  event = event || window.event;
  if (el.data && el.data.over)  return;
  el.data.over = true;
  if (picId) { bodyMouseOver(event,picId); }
  picId = el;
  pos = getPos(el);
  el.data.elT = pos.y;
  el.data.elL = pos.x;
  if (el.data.promptDiv) {
    el.data.promptDiv.style.left = (el.data.elL+10)+'px';
    el.data.promptDiv.style.top = Math.round(el.data.elT+(el.data.elH/2)-10)+'px';
    el.data.promptDiv.style.display = 'block';
  } else {
    z_index++;
    el.data.zoomdiv.style.zIndex = z_index+'';
    el.data.zoomdiv.style.display = 'block';
    if (el.data.zoomdiv.style.position == 'absolute') {
      el.data.zoomdiv.style.top = pos.y + 'px';
      el.data.zoomdiv.style.left = (pos.x + el.data.elW+20) + 'px';
    }
    if ( !el.data.loaded && !el.data.loading) {
      el.data.loading = true;
      el.data.zoomImg = null;
      el.data.zoomImg = new Image;
      el.data.zoomImg.onload = null;
      el.data.zoomImg.onerror = null;
//      el.data.zoomImg.src = '';
      el.data.zoomdiv.style.backgroundColor = z_background;
      el.data.zoomdiv.style.backgroundImage = 'url('+z_loadingImg+')';
      el.data.zoomdiv.style.backgroundPosition = (Math.round(el.data.zdW/2)-Math.round(z_loadingImgWidth/2))+'px '+(Math.round(el.data.zdH/2)-Math.round(z_loadingImgWidth/2))+'px';
//alert(el.data.zoomdiv.style.backgroundImage);
      el.data.zoomImg.onerror = function() {
        el.data.zoomImg.onload=null;
//        el.data.loaded = true;
        // loading is still true so it wont get here again
        el.data.zoomdiv.style.backgroundImage = '';
        if (z_missing_message) { alert(z_missing_message); }
      }
      el.data.zoomImg.onload = function() { zoomloadzoom(event,el); }
      el.data.zoomImg.src = el.data.largeImg;
    }
  }
  el.data.magbox.style.display = 'block';

  if (picId) { zoomMouseMove(event, picId); }
//  var debug = document.getElementById('debug');
//  debug.innerHTML = el.data.zoomdiv.style.top+' '+el.data.zoomdiv.style.left+' '+el.data.zoomdiv.style.backgroundImage;

}
//
function zoomloadzoom(event, el) {
//alert(el.data.zoomImg.complete);
  if (el.data.loaded) return;
  el.data.loaded = true;  // cos ie doesnt set complete before the onload call
  el.data.loading = false;

		el.data.ziW = el.data.zoomImg.width;
		el.data.ziH = el.data.zoomImg.height;

  el.data.zoomImg = null;

		el.data.ratioW = (el.data.ziW) / (el.data.elW);
		el.data.ratioH = (el.data.ziH) / (el.data.elH);
		el.data.mgW = Math.round(el.data.zdW / el.data.ratioW);
		el.data.mgH = Math.round(el.data.zdH / el.data.ratioH);

  el.data.magbox.style.width = (el.data.mgW-2)+'px';  // -2 for border
  el.data.magbox.style.height = (el.data.mgH-2)+'px';

  el.data.zoomdiv.style.backgroundImage = 'url('+el.data.largeImg+')';
  zoomMouseMove(event,el);
}
//
function magboxMouseMove(event, el) {
  zoomMouseMove(event, picId);
}
//
function magboxMouseOut(event, el) {
  bodyMouseOver(event);
}
//
function zoomClick(event, el) {
  event = event || window.event;
  if (picId) {
   if (picId.data.promptDiv) {
     picId.data.promptDiv.style.display = 'none';
     picId.data.promptDiv = null;
     opicId = picId;
     opicId.data.over = false;
     picId = null;
     zoomMouseOver(event,opicId);
   }
  }
}
//
function zoomMouseMove(event, el) {
  event = event || window.event;
//  if (!el || !el.id) return;
  if (!picId) { zoomMouseOver(event, el); }
  if (!picId) return;

  var ofsW = Math.round(picId.data.mgW/2)+1;
  var ofsH = Math.round(picId.data.mgH/2)+1;

  var x = mouseX(event) - ofsW
  if (x < picId.data.elL) x = picId.data.elL;
  if (x > picId.data.elL+picId.data.elW-picId.data.mgW) x = picId.data.elL+picId.data.elW-picId.data.mgW;

  var y = mouseY(event) - ofsH;
  if (y < picId.data.elT) y = picId.data.elT;
  if (y > picId.data.elT+picId.data.elH-picId.data.mgH) y = picId.data.elT+picId.data.elH-picId.data.mgH;

  picId.data.magbox.style.top = y+'px';
  picId.data.magbox.style.left = x+'px';

  if (!el.data.loaded) return

  if (picId.data.zoomdiv) {
    var x1 = Math.round((x-picId.data.elL)*picId.data.ratioW);
    var y1 = Math.round((y-picId.data.elT)*picId.data.ratioH);
    if (x1 > picId.data.ziW-picId.data.zdW) { x1 = picId.data.ziW-picId.data.zdW; }
    if (y1 > picId.data.ziH-picId.data.zdH) { y1 = picId.data.ziH-picId.data.zdH; }
    picId.data.zoomdiv.style.backgroundPosition = (-x1)+'px '+(-y1)+'px';
  }

//  var debug = document.getElementById('debug1');
//  debug.innerHTML = (x)+' '+(y)+' '+(el.data.elT)+' '+el.data.elH+' '+(el.data.mgH)+' '+el.data.ziW;

}
//
function makeZoomable2(imgid, zoomid, zoomClass, largeImg, alwaysVisible, loadPrompt) {
  zoomloadlist[zoomloadlist.length] = { 'proc':makeZoomable,
   'imgid':imgid, 'zoomid': zoomid, 'zoomClass': zoomClass,
   'largeImg': largeImg, 'alwaysVisible': alwaysVisible, 'loadPrompt': loadPrompt }
}
//
// if zoomid = '' then create a popup one
function makeZoomable(imgid, zoomid, zoomClass, largeImg, alwaysVisible, loadPrompt) {
  if (!zoomersloaded) {
    makeZoomable2(imgid, zoomid, zoomClass, largeImg, alwaysVisible, loadPrompt)
    return;
  }

  var el = document.getElementById(imgid);
  if (!el.data) { el.data = { }; }
  el.data.imgid = imgid;
  el.data.zoomid = zoomid;
  el.data.zoomClass = zoomClass;
  el.data.largeImg = largeImg;
  el.data.alwaysOn = alwaysVisible;
  el.data.prompt = loadPrompt;
  el.data.loaded = false;
  el.data.loading = false;
  el.data.over = false;
  if (el.data.zoomdiv) {
    el.data.zoomdiv.style.display = (el.data.alwaysOn ? 'block' : 'none');
    el.data.zoomdiv.style.backgroundImage = '';
  }
  el.data.zoomImg = null;

  if (el.complete) { zoomloadimg(el); }
  else {
    el.onload = function () { zoomloadimg(el); };
  }
}
//
function zoomloadimg(el) {
  if (!el.data.zoomid) {
    el.data.zoomdiv = createDynamicDiv(el.data.imgid+'_zoom');
  } else {
    el.data.zoomdiv = document.getElementById(el.data.zoomid);
  }
  if (!el.data.zoomClass) {
    el.data.zoomdiv.style.position = 'absolute';
    el.data.zoomdiv.style.width = el.width + 'px';
    el.data.zoomdiv.style.height = el.height + 'px';
  } else {
    el.data.zoomdiv.className = el.data.zoomClass;
  }

  el.data.zdW = cssStyle(el.data.zoomdiv,'width')-0;
  el.data.zdH = cssStyle(el.data.zoomdiv,'height')-0;
  el.data.zoomdiv.style.backgroundRepeat = 'no-repeat';
  el.data.zoomdiv.style.backgroundPosition = '0px 0px';
  el.data.zoomdiv.style.backgroundColor = 'white';

  el.data.elW = el.width;
  el.data.elH = el.height;
  el.data.mgW = 32;
  el.data.mgH = 32;

  var magbox = createDynamicDiv(el.data.imgid+'_mag');
  magbox.className = 'zoomMagBox';
  magbox.style.position = 'absolute';
  magbox.style.border = '1px solid #F00';
  magbox.style.cursor = 'crosshair';
  magbox.style.width = (el.data.mgW-2)+'px';  // -2 for border
  magbox.style.height = (el.data.mgH-2)+'px';
  magbox.data = { owner : el };

  el.data.magbox = magbox;
  el.style.cursor = 'crosshair';

  el.data.promptDiv = null;
  if (el.data.prompt) {
    el.data.promptDiv = createDynamicDiv(el.data.imgid+'_prompt');
    el.data.promptDiv.style.position = 'absolute';
    el.data.promptDiv.style.backgroundColor = 'black';
    el.data.promptDiv.style.border = '1px solid red';
    el.data.promptDiv.style.width = (el.data.elW-20)+'px';
    el.data.promptDiv.style.height = '20px';
    el.data.promptDiv.style.lineHeight = '20px';
    el.data.promptDiv.style.color = 'white';
    el.data.promptDiv.style.fontSize = '11px';
    el.data.promptDiv.style.textAlign = 'center';
    el.data.promptDiv.style.cursor = 'crosshair';
    el.data.promptDiv.innerHTML = el.data.prompt;
    el.data.promptDiv.onclick = function(event) { zoomClick(event, this); }
    el.data.magbox.onclick = function(event) { zoomClick(event, this); }
//    el.data.promptDiv.onmouseout = function(event) { magboxMouseOut(event, this); }
  }

//  var debug = document.getElementById('debug');
//  debug.innerHTML = el.data.elW+' '+el.data.elH+' '+el.data.mgW+' '+el.data.mgH+' '+el.data.zmW+' '+el.data.zmH;

  el.onmouseover = function(event) { zoomMouseOver(event, this); }
  el.onmouseout = function(event) { magboxMouseOut(event, this); }
  el.onmousemove = function(event) { zoomMouseMove(event, this); }
  magbox.onmouseout = function(event) { magboxMouseOut(event, this); }
  magbox.onmousemove = function(event) { magboxMouseMove(event, this); }
  document.body.onmouseover = function(event) { bodyMouseOver(event); }
//  document.body.onmousemove = function(event) { bodyMouseMove(event); }
}
//
function jbzoomMouseOver(event, el) {
  if (!el || !el.id) return;
  event = event || window.event;
  picId = el;
  el.alt = '';
  el.title = '';
  if (picId) { jbzoomMouseMove(event, picId); }
//  var debug = document.getElementById('debug');
//  debug.innerHTML = el.data.zoomdiv.style.top+' '+el.data.zoomdiv.style.left+' '+el.data.zoomdiv.style.backgroundImage;
}
//
function jbzoomMouseOut(event, el) {
  bodyMouseOver(event);
}
//
function jbzoomMouseMove(event, el) {
  event = event || window.event;
  if (!el || !el.id) return;
  if (!picId) jbzoomMouseOver(event, el);
  if (!picId) return;

  var picIdo = picId.data.owner;

  if (picIdo.data && !picIdo.data.loaded) return;

//  var wmin = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : (window.pageXOffset ? window.pageXOffset : 0));
//  if (typeof(wmin) != 'number' || wmin < 0) { wmin = 0; }
//  var hmin = (document.documentElement.scrollTop ? document.documentElement.scrollTop : (window.pageYOffset ? window.pageYOffset : 0));
//  if (typeof(hmin) != 'number' || hmin < 0) { hmin = 0; }

  var y = mouseY(event) - picIdo.data.elHb -1;
  var y1 = Math.round((y-picId.data.elT-picId.data.ohmin)*picIdo.data.ratioH);
  var x = mouseX(event) - picIdo.data.elWb -1;
  var x1 = Math.round((x-picId.data.elL-picId.data.owmin)*picIdo.data.ratioW);

  if (x1 < 0) { x1 = 0; }
  if (y1 < 0) { y1 = 0; }
  if (x1 > picIdo.data.ziW-picId.data.elW) { x1 = picIdo.data.ziW-picIdo.data.elW; }
  if (y1 > picIdo.data.ziH-picId.data.elH) { y1 = picIdo.data.ziH-picIdo.data.elH; }

//document.title = x1+' '+y1+' '+picIdo.data.elWb;
  if (picId) { picId.style.backgroundPosition = (-x1)+'px '+(-y1)+'px'; }

//  var debug = document.getElementById('debug1');
//  debug.innerHTML = (x1)+' '+(y1);
}
//
function jbMakeZoomable2(imgid, largeImg, okToClick, clickOn, clickOff, frigpos, thumbClick, zoomDims) {
  zoomloadlist[zoomloadlist.length] = { 'proc':jbMakeZoomable,
   'imgid':imgid, 'largeImg': largeImg,
   'okToClick': okToClick, 'clickOn': clickOn, 'clickOff':clickOff, 'frigpos':frigpos, 'thumbClick':thumbClick, 'zoomDims':zoomDims }
}
//
function jbMakeZoomable(imgid, largeImg, okToClick, clickOn, clickOff, frigpos, thumbClick, zoomDims) {
  if (!zoomersloaded) {
    jbMakeZoomable2(imgid, largeImg, okToClick, clickOn, clickOff, frigpos, thumbClick, zoomDims)
    return;
  }
  jbZoomStop(imgid);
  var el = document.getElementById(imgid);
  if (!el.data) { el.data = { }; }
  el.data.imgid = imgid;
//  largeImg = largeImg.replace('.jpg','_zoom.jpg');
  el.data.largeImg = largeImg;
  el.data.okToClick = okToClick;
  el.data.clickOn = clickOn;
  el.data.clickOff = clickOff;
  el.data.loaded = false;
  el.data.loading = false;
  el.data.origfrig = frigpos;
  el.data.thumbClick = thumbClick;
  el.data.zoomDims = zoomDims || '';
  if (el.data.zoomDims) { el.data.zoomDims = el.data.zoomDims.split(','); }

  el.data.frigpos = { 'l':0, 't':0, 'w':0, 'h':0 }
  if (frigpos) {
    frigpos = frigpos.split(',');
    if (frigpos[0]) { el.data.frigpos.t = frigpos[0]-0; }
    if (frigpos[1]) { el.data.frigpos.l = frigpos[1]-0; }
    if (frigpos[2]) { el.data.frigpos.w = frigpos[2]-0; }
    if (frigpos[3]) { el.data.frigpos.h = frigpos[3]-0; }
    if (isIE()) {
      if (frigpos[4]) { el.data.frigpos.t += frigpos[4]-0; }
      if (frigpos[5]) { el.data.frigpos.l += frigpos[5]-0; }
      if (frigpos[6]) { el.data.frigpos.w += frigpos[6]-0; }
      if (frigpos[7]) { el.data.frigpos.h += frigpos[7]-0; }
    }
  }

  if (el.data.zoomdiv) {
    el.data.zoomdiv.style.display = 'none';
    el.data.zoomdiv.style.backgroundImage = '';
  }
  el.data.zoomImg = null;

  if (el.complete) { jbzoomloadimg(el); }
  else {
    el.onload = function () { jbzoomloadimg(el); };
  }
}
//
function jbzoomloadimg(el) {
  if (el.data.zoomDims) {
    var ss = screenSize();
    el.data.elW = (el.data.zoomDims[0].match(/\%/) ? eval(ss.w+'/100*'+el.data.zoomDims[0].replace('%','')) : el.data.zoomDims[0]-0);
    el.data.elH = (el.data.zoomDims[1].match(/\%/) ? eval(ss.h+'/100*'+el.data.zoomDims[1].replace('%','')) : el.data.zoomDims[1]-0);
  } else {
    el.data.elW = el.width-0+(el.data.frigpos.w-0);
    el.data.elH = el.height-0+(el.data.frigpos.h-0);
  }
  var magbox = document.getElementById(el.data.imgid+'_mag');
  if (!magbox) {
    var magbox = createDynamicDiv(el.data.imgid+'_mag');
    el.data.jbmagbox = magbox;  // called jbmagbox so the bodyOver func doesnt try to hide it
    magbox.data = { };
  //  magbox.data.largeImg = largeImg;
  //  el.data.elW = el.data.elW - wborder(el.data);
  //  el.data.elH = el.data.elH - hborder(el.data);
    magbox.data.elW = el.data.elW;
    magbox.data.elH = el.data.elH;
    magbox.style.position = 'absolute';
    magbox.style.width = magbox.data.elW+'px';
    magbox.style.height = magbox.data.elH+'px';
    magbox.style.cursor = 'crosshair';
    magbox.data.owner = el;
    magbox.style.backgroundRepeat = 'no-repeat';
    magbox.style.backgroundColor = 'white';
  //  magbox.style.zIndex = '1000';
    magbox.onmouseover = function(event) { jbzoomMouseOver(event, this); }
    magbox.onmouseout = function(event) { jbzoomMouseOut(event, this); }
    magbox.onmousemove = function(event) { jbzoomMouseMove(event, this); }
    if (el.data.okToClick) {
      el.onclick = function(event) { jbZoomStart(this.id); }
      magbox.onclick = function(event) { jbZoomStop(this.data.owner.id); }
    }
  }
  
  var closebtn = document.getElementById(el.data.imgid+'_close');
  if (!closebtn) {
    var closebtn = createDynamicDiv(el.data.imgid+'_close','','',magbox);
    el.data.closebtn = closebtn;
    closebtn.style.cursor = 'pointer';
    closebtn.style.top = 0;
    closebtn.style.left = 0;
    closebtn.owner = el;
    closebtn.onclick = function(event) { jbZoomStop(this.owner.id); }
  }
  
  document.body.onmouseover = function(event) { bodyMouseOver(event); }
//  document.body.onmousemove = function(event) { bodyMouseMove(event); }

  if (!el.data.thumbs) { el.data.thumbs = new Array(); }
  var imgs = alt_thumbs.split(',')
  for (var i=0; i<imgs.length-1; i++) {
    if (!document.getElementById(el.data.imgid+'_thumb'+i)) {
      el.data.thumbs[i] = document.createElement('img');
      el.data.thumbs[i].setAttribute('id', el.data.imgid+'_thumb'+i);
      el.data.thumbs[i].setAttribute('className','img_thumb');
      el.data.thumbs[i].setAttribute('class','img_thumb');
      magbox.appendChild(el.data.thumbs[i]);
      el.data.thumbs[i].style.display = 'none';
      el.data.thumbs[i].style.cursor = 'pointer';
      el.data.thumbs[i].style.top = 0;
      el.data.thumbs[i].style.left = 0;
      el.data.thumbs[i].owner = el;
      el.data.thumbs[i].idx = i;
      el.data.thumbs[i].onclick = function(event) {
        if (this.owner.data.thumbClick) { this.owner.data.thumbClick(this.src, true); }
        if (this.owner.data.okToClick) { this.owner.data.dontclose = true; }
      }
    }
  }
}
//
function jbzoomloadzoom(el) {
  if (el.data.loaded) return;
  el.data.loaded = true;  // cos ie doesnt set complete before the onload call
  el.data.loading = false;

  z_index++;
  el.data.jbmagbox.style.zIndex = z_index+'';
  el.data.closebtn.style.zIndex = z_index+1+'';

		el.data.ziW = el.data.zoomImg.width;
		el.data.ziH = el.data.zoomImg.height;
  el.data.zoomImg = null;

  el.data.elWb = cssStyle(el.data.jbmagbox,'borderLeftWidth')-0;
  el.data.elHb = cssStyle(el.data.jbmagbox,'borderTopWidth')-0;

		el.data.ratioW = (el.data.ziW-el.data.elW) / el.data.elW;
		el.data.ratioH = (el.data.ziH-el.data.elH) / el.data.elH;

  var zz = -Math.round((el.data.ziW-el.data.elW) /2)+'px '+(-Math.round((el.data.ziH-el.data.elH) /2))+'px';
  el.data.jbmagbox.style.backgroundPosition = zz;

  el.data.jbmagbox.style.backgroundImage = 'url('+el.data.largeImg+')';
}
//
function jbZoomStart(imgid) {
  var el = document.getElementById(imgid);
  if (!el.data) { return; }

  if (!el.data.loading) {

    var wmin = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : (window.pageXOffset ? window.pageXOffset : 0));
    if (typeof(wmin) != 'number' || wmin < 0) { wmin = 0; }
    var hmin = (document.documentElement.scrollTop ? document.documentElement.scrollTop : (window.pageYOffset ? window.pageYOffset : 0));
    if (typeof(hmin) != 'number' || hmin < 0) { hmin = 0; }
    el.data.jbmagbox.data.owmin = wmin;
    el.data.jbmagbox.data.ohmin = hmin;

    var ss = screenSize();

    var cover = createDynamicDiv('modalCover');
    cover.style.zIndex = z_index-1;
    cover.imgid = el.data.imgid;
    cover.onclick = function() { jbZoomStop(this.imgid); }
    showModalCover();
    el.data.jbmagbox.style.display = 'block';
    el.data.closebtn.style.display = 'block';
    if (el.data.clickOn) { document.getElementById(el.data.clickOn).style.display = 'none'; }
    if (el.data.clickOff) { document.getElementById(el.data.clickOff).style.display = 'block'; }

    if (el.data.zoomDims) {
      var l = Math.floor((ss.w - el.data.jbmagbox.data.elW) / 2);
      el.data.jbmagbox.data.elL = l;
      var t = Math.floor((ss.h - el.data.jbmagbox.data.elH) / 2);
      if (t < 10) { t = 10; }
      el.data.jbmagbox.data.elT = t;
    } else {
      pos = getPos(el);
      el.data.jbmagbox.data.elT = pos.y-0+(el.data.frigpos.t-0);
      el.data.jbmagbox.data.elL = pos.x-0+(el.data.frigpos.l-0);
    }
//document.title = el.data.elW +' '+el.data.elH+' '+ss.h;
//document.title = el.data.jbmagbox.data.elT+' '+ss.h+ ' '+el.data.jbmagbox.data.elH
    el.data.jbmagbox.style.left = el.data.jbmagbox.data.elL+ss.x+'px';
    el.data.jbmagbox.style.top = el.data.jbmagbox.data.elT+ss.y+'px';

    el.data.closebtn.style.left = el.data.jbmagbox.data.elL+ss.x+el.data.elW+7+'px';
    el.data.closebtn.style.top = el.data.jbmagbox.data.elT+ss.y-15+'px';
//alert(el.data.jbmagbox.data.elL+' '+ss.x+' '+el.data.elW);

  }
  if (!el.data.loaded && !el.data.loading) {
    el.data.loading = true;
    el.data.zoomImg = null;
    el.data.zoomImg = new Image;
    el.data.zoomImg.onload = null;
    el.data.zoomImg.onerror = null;
//    el.data.zoomImg.src = '';
    el.data.jbmagbox.style.backgroundColor = z_background;
    el.data.jbmagbox.style.backgroundImage = 'url('+z_loadingImg+')';
    el.data.jbmagbox.style.backgroundPosition = (Math.round(el.data.elW/2)-Math.round(z_loadingImgWidth/2))+'px '+(Math.round(el.data.elH/2)-Math.round(z_loadingImgWidth/2))+'px';
    el.data.zoomImg.onerror = function() {
      el.data.zoomImg.onload=null;
      if (z_missing_message) { alert(z_missing_message); }
      jbZoomStop(imgid);
      el.data.loading = false;
    }
    el.data.zoomImg.onload = function() { jbzoomloadzoom(el); }
    el.data.zoomImg.src = el.data.largeImg;

    var imgs = alt_thumbs.split(',')
    for (var i=0; i<imgs.length-1; i++) {
      el.data.thumbs[i].onload = null;
      el.data.thumbs[i].onload = function() {
        this.style.display = 'block';
        var nr = Math.floor((this.owner.data.elH) / (this.offsetHeight + 20));
        var r = this.idx % nr;
        var c = Math.floor(this.idx / nr)+1;
        var l = this.owner.data.elW-(c*(this.offsetWidth+20));
        var t = 20+(r*(this.offsetHeight+20));
        this.style.left = l+'px';
        this.style.top = t+'px';
        this.zIndex = this.owner.data.jbmagbox.style.zIndex+1;
//alert(l+' '+t);
      }
      if (el.data.thumbs[i].src) {
        el.data.thumbs[i].onload();
      } else {
        var src = el.data.largeImg.split('/');
        src[src.length-1] = imgs[i];
        src[src.length-2] = 'basket';
        el.data.thumbs[i].src = src.join('/');// el.data.largeImg.replace(/zoom/ig,'medium');
      }
//      alert(el.data.thumbs[i].src);
    }
  }
}
//
function jbZoomStop(imgid) {
  var el = document.getElementById(imgid);
  if (el.data) {
    if (el.data.dontclose === true) {  el.data.dontclose = false; return; }
    picId = null;
    hideModalCover();
    if (el.data.jbmagbox) { el.data.jbmagbox.style.display = 'none'; }
    if (el.data.closebtn) { el.data.closebtn.style.display = 'none'; }
    if (el.data.clickOn) { document.getElementById(el.data.clickOn).style.display = 'block'; }
    if (el.data.clickOff) { document.getElementById(el.data.clickOff).style.display = 'none'; }
    el.style.cursor = 'pointer';
    el.style.cursor = 'default';
  }
}
//
//
function btzoomMouseOver(event, el) {
  if (!el || !el.id) return;
  event = event || window.event;
  picId = el;
  el.data.magbox.style.zIndex = '1000';
  el.data.magbox.style.display = 'block';
  pos = getPos(el);
  el.data.elT = pos.y;
  el.data.elL = pos.x;

  if (!el.data.loaded && !el.data.loading) {
    el.data.loading = true;
    el.data.zoomImg = null;
    el.data.zoomImg = new Image;
    el.data.zoomImg.onload = null;
    el.data.zoomImg.onerror = null;
//    el.data.zoomImg.src = '';
    el.data.magbox.style.backgroundColor = z_background;
    el.data.magbox.style.backgroundImage = 'url('+z_loadingImg+')';
    el.data.magbox.style.backgroundPosition = '0px 0px';
    btzoomMouseMove(event, el);
//alert('');
    el.data.zoomImg.onerror = function() {
      el.data.zoomImg.onload=null;
      if (z_missing_message) { alert(z_missing_message); }
      // loading is still set so cant get back here
    }
    el.data.zoomImg.onload = function() { btzoomloadzoom(event, el); }
    el.data.zoomImg.src = el.data.largeImg;
  }
}
//
function btzoomloadzoom(event, el) {
  if (el.data.loaded) return;
  el.data.loaded = true;  // cos ie doesnt set complete before the onload call
  el.data.loading = false;

		el.data.ziW = el.data.zoomImg.width;
		el.data.ziH = el.data.zoomImg.height;
  el.data.zoomImg = null;

  el.data.mgW = Math.round(el.data.elW * el.data.boxsize / 100)-2;
  el.data.mgH = Math.round(el.data.elH * el.data.boxsize / 100)-2;

		el.data.ratioW = el.data.ziW / (el.data.elW);
		el.data.ratioH = el.data.ziH / (el.data.elH);

  magbox = el.data.magbox;
  magbox.data.ziW = el.data.ziW;
		magbox.data.ziH = el.data.ziH;
  magbox.data.mgW = el.data.mgW;
  magbox.data.mgH = el.data.mgH;
  magbox.style.width = el.data.mgW+'px';   // -2 for border
  magbox.style.height = el.data.mgH+'px';

  el.data.magbox.style.backgroundImage = 'url('+el.data.largeImg+')';
  btzoomMouseMove(event, el);
//  var debug = document.getElementById('debug');
//  debug.innerHTML = el.data.magbox.style.top+' '+el.data.magbox.style.left+' '+el.data.magbox.style.backgroundImage;
}

//
function btzoomMouseOut(event, el) {
  bodyMouseOver(event);
}
//
function btmagboxMouseOut(event, el) {
  bodyMouseOver(event);
}
//
function btmagboxMouseMove(event, el) {
  btzoomMouseMove(event, picId);
}
//
function btzoomMouseMove(event, el) {
  event = event || window.event;
  if (!el || !el.id) return;
  if (!picId) btzoomMouseOver(event, el);

  var ofsW = Math.round(picId.data.mgW/2);
  var ofsH = Math.round(picId.data.mgH/2);

  var xm = mouseX(event);
  var x = xm - ofsW
  if (x < picId.data.elL) x = picId.data.elL;
  if (x > picId.data.elL+picId.data.elW-picId.data.mgW) x = picId.data.elL+picId.data.elW-picId.data.mgW;

  var ym = mouseY(event);
  var y = ym - ofsH;
  if (y < picId.data.elT) y = picId.data.elT;
  if (y > picId.data.elT+picId.data.elH-picId.data.mgH) y = picId.data.elT+picId.data.elH-picId.data.mgH;
  picId.data.magbox.style.top = y+'px';
  picId.data.magbox.style.left = x+'px';

  if (!picId.data.loaded) return;

  var x1 = Math.round((xm-picId.data.elL-2)*picId.data.ratioW)+x-xm;
  if (x1 > picId.data.ziW-picId.data.mgW+2) { x1 = picId.data.ziW-picId.data.mgW+2; }
  var y1 = Math.round((ym-picId.data.elT-2)*picId.data.ratioH)+y-ym;
  if (y1 > picId.data.ziH-picId.data.mgH+2) { y1 = picId.data.ziH-picId.data.mgH+2; }
  picId.data.magbox.style.backgroundPosition = (-x1)+'px '+(-y1)+'px';

  var debug = document.getElementById('debug');
  debug.innerHTML = x+' '+y+' >'+(x1)+' >'+(y1)+' '+(xm-picId.data.elL);
}
//
function btMakeZoomable2(imgid, largeImg, boxsize) {
  zoomloadlist[zoomloadlist.length] = { 'proc':btMakeZoomable,
   'imgid':imgid, 'largeImg': largeImg,  'boxsize': boxsize }
}
//
function btMakeZoomable(imgid, largeImg, boxsize) {
  if (!zoomersloaded) {
    btMakeZoomable2(imgid, largeImg, boxsize)
    return;
  }

  var el = document.getElementById(imgid);
  if (!el.data) { el.data = { }; }

  el.data.imgid = imgid;
  if (!largeImg) { largeImg = el.getAttribute('src'); }
  el.data.largeImg = largeImg;
		if (!boxsize) { boxsize = 20; }
  el.data.boxsize = boxsize;
  el.data.loaded = false;
  el.data.loading = false;
  if (el.data.zoomdiv) {
    el.data.zoomdiv.style.display = 'none';
    el.data.zoomdiv.style.backgroundImage = '';
  }
  el.data.zoomImg = null;

  if (el.complete) { btzoomloadimg(el); }
  else {
    el.onload = function () { btzoomloadimg(el); };
  }
}
//
function btzoomloadimg(el) {
  el.data.elW = el.width-0;
  el.data.elH = el.height-0;
  el.data.mgW = z_loadingImgWidth;
  el.data.mgH = z_loadingImgWidth;

  var magbox = createDynamicDiv(el.data.imgid+'_mag');
  el.data.magbox = magbox;
  magbox.data = { };
  magbox.data.largeImg = el.data.largeImg;
  magbox.data.elW = el.data.elW;
  magbox.data.elH = el.data.elH;

  magbox.className = 'zoomMagBox';
  magbox.style.position = 'absolute';
  magbox.style.width = z_loadingImgWidth+'px';
  magbox.style.height = z_loadingImgWidth+'px';
  magbox.style.cursor = 'crosshair';
  magbox.data.owner = el;
  magbox.style.backgroundRepeat = 'no-repeat';
  magbox.style.backgroundColor = 'black';
  magbox.style.zIndex = '1000';
  magbox.data.mgW = el.data.mgW;
  magbox.data.mgH = el.data.mgH;

 //  var debug = document.getElementById('debug');
//  debug.innerHTML = el.data.elW+' '+el.data.elH+' '+el.data.mgW+' '+el.data.mgH+' '+el.data.zmW+' '+el.data.zmH;

  el.onmouseover = function(event) { btzoomMouseOver(event, this); }
  el.onmouseout = function(event) { btmagboxMouseOut(event, this); }
  el.onmousemove = function(event) { btzoomMouseMove(event, this); }
  magbox.onmouseout = function(event) { btmagboxMouseOut(event, this); }
  magbox.onmousemove = function(event) { btmagboxMouseMove(event, this); }
  document.body.onmouseover = function(event) { bodyMouseOver(event); }
//  document.body.onmousemove = function(event) { bodyMouseMove(event); }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
addLoadEvent(initZoomers);
