var magnified = 0;
jQuery(window).load(function()
{
jQuery('.magnify').magnify();
magnified = 1;
});
var magimgold = 0;
jQuery(document).ready(function()
{
var magimg = jQuery('.magnify > img:first');
if (magimg)
{
if (jQuery(magimg).prop('complete')) jQuery(magimg).css('width', jQuery(magimg).outerWidth() + 'px'); else jQuery(magimg).load(function() { jQuery('.magnify > img:first').css('width', jQuery('.magnify > img:first').outerWidth() + 'px'); });
}
});
(function($)
{
function format(str)
{
for (var i = 1; i < arguments.length; i++)
{
str = str.replace('%' + (i - 1), arguments[i]);
}
return str;
}
function magnify(jWin, opts)
{
var sImg = $('img', jWin);
var img1;
var img2;
var $mouseTrap = null;
var zoomDiv = null;
var lens = null;
var zoomImage;
var controlTimer = 0;
var zoomedTimer = 0;
var filesLoaded = 0;
var cw, ch;
var mx, my;
var destU = 0;
var destV = 0;
var currU = 0;
var currV = 0;
var ctx = this, zw;
var zoomed = 0;
this.removeBits = function()
{
if (lens)
{
lens.remove();
lens = null;
}
};
this.destroy = function()
{
jWin.data('zoom', null);
if ($mouseTrap)
{
$mouseTrap.unbind();
$mouseTrap.remove();
$mouseTrap = null;
}
if (zoomDiv)
{
zoomDiv.remove();
zoomDiv = null;
}
this.removeBits();
};
this.fadedOut = function()
{
if (zoomDiv)
{
zoomDiv.remove();
zoomDiv = null;
}
this.removeBits();
};
this.controlLoop = function()
{
if (lens)
{
var x = (mx - sImg.offset().left - (cw * 0.5)) >> 0;
var y = (my - sImg.offset().top - (ch * 0.5)) >> 0;
if (x < 0)
{
x = 0;
}
else if (x > (sImg.outerWidth() - cw))
{
x = (sImg.outerWidth() - cw);
}
if (y < 0)
{
y = 0;
}
else if (y > (sImg.outerHeight() - ch))
{
y = (sImg.outerHeight() - ch);
}
x = Math.round(x);
y = Math.round(y);
lens.css({ left: x, top: y });
lens.css('background-position', (-x) + 'px ' + (-y) + 'px');
destU = (((x) / sImg.outerWidth()) * zoomImage.width) >> 0;
destV = (((y) / sImg.outerHeight()) * zoomImage.height) >> 0;
currU += (destU - currU) / 3;
currV += (destV - currV) / 3;
currU = Math.round(currU);
currV = Math.round(currV);
zoomDiv.css('background-position', (-(currU >> 0) + 'px ') + (-(currV >> 0) + 'px'));
}
// 60 FPS
controlTimer = setTimeout(function()
{
ctx.controlLoop();
}, 16);
};
this.init2 = function(img, id)
{
filesLoaded++;
if (id === 1) zoomImage = img;
if (filesLoaded === 2) this.init();
};
this.init = function()
{
var sImgWidth = sImg.outerWidth();
if (sImgWidth) $('#magnify-wrap').css('width', sImgWidth + 'px');
if ($.browser.msie) var mtbg = 'url(\'/images/spacer.gif\')'; else var mtbg = 'none';
$mouseTrap = jWin.parent().append(format('', sImg.outerWidth(), sImg.outerHeight(), 0, 0)).find(':last');
if (mobile())
{
$mouseTrap.bind('touchmove', this, function(event)
{
if (zoomed == 1) event.preventDefault();
var touch = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];
mx = touch.pageX;
my = touch.pageY;
});
}
else
{
$mouseTrap.bind('mousemove', this, function(event)
{
mx = event.pageX;
my = event.pageY;
});
}
var mouseleave = 'mouseleave';
if (mobile()) mouseleave = 'touchend';
$mouseTrap.bind(mouseleave, this, function(event)
{
clearTimeout(controlTimer);
clearTimeout(zoomedTimer);
zoomed = 0;
$('#magnify-wrap').css('z-index', 1);
if (lens) lens.fadeOut(199);
zoomDiv.fadeOut(200, function()
{
ctx.fadedOut();
});
return false;
});
var mouseenter = 'mouseenter';
if (mobile()) mouseenter = 'touchstart';
$mouseTrap.bind(mouseenter, this, function(event)
{
zoomed = 0;
if (mobile())
{
var touch = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];
mx = touch.pageX;
my = touch.pageY;
}
else
{
mx = event.pageX;
my = event.pageY;
}
zw = event.data;
if (zoomDiv)
{
zoomDiv.stop(true, false);
zoomDiv.remove();
}
var siw = sImg.outerWidth();
var sih = sImg.outerHeight();
var w = opts.zoomWidth;
var h = opts.zoomHeight;
if (opts.zoomWidth == 'auto') w = siw;
if (opts.zoomHeight == 'auto') h = sih;
var xPos = opts.adjustX
var yPos = opts.adjustY;
var appendTo = jWin.parent();
switch (opts.position)
{
case 'top':
yPos -= h;
break;
case 'right':
xPos += siw;
break;
case 'bottom':
yPos += sih;
break;
case 'left':
xPos -= w;
break;
case 'inside':
w = siw;
h = sih;
break;
default:
appendTo = $('#' + opts.position);
if (!appendTo.length)
{
appendTo = jWin;
xPos += siw;
yPos += sih;
}
else
{
w = appendTo.innerWidth();
h = appendTo.innerHeight();
}
}
zoomDiv = appendTo.append(format('', xPos, yPos, w, h, zoomImage.src)).find(':last');
if (opts.position === 'inside') $('#magnify-zoom').css({ 'box-shadow': 'none', '-moz-box-shadow': 'none', '-webkit-box-shadow': 'none' });
if (mobile())
{
zoomedTimer = setTimeout(function() { $('#magnify-wrap').css('z-index', 2); zoomDiv.fadeIn(200, function() { zoomed = 1; }); }, 150);
}
else
{
$('#magnify-wrap').css('z-index', 2);
zoomDiv.fadeIn(400);
}
if (lens)
{
lens.remove();
lens = null;
}
cw = (sImg.outerWidth() / zoomImage.width) * zoomDiv.width();
ch = (sImg.outerHeight() / zoomImage.height) * zoomDiv.height();
cw = Math.round(cw);
ch = Math.round(ch);
lens = jWin.append(format('', cw, ch)).find(':last');
$mouseTrap.css('cursor', lens.css('cursor'));
var noTrans = false;
if (!noTrans) lens.css('opacity', 0.5);
if (opts.position !== 'inside') lens.fadeIn(400);
zw.controlLoop();
return;
});
};
img1 = new Image();
$(img1).load(function()
{
ctx.init2(this, 0);
});
img1.src = sImg.attr('src');
img2 = new Image();
$(img2).load(function()
{
ctx.init2(this, 1);
});
img2.src = jWin.attr('href');
}
$.fn.magnify = function(options)
{
try { document.execCommand('BackgroundImageCache', false, true); } catch (e) {}
this.each(function()
{
var opts;
$(this).css({ 'position': 'relative', 'display': 'block' });
$('img', $(this)).css({ 'display': 'block' });
if ($(this).parent().attr('id') != 'magnify-wrap')
{
var mode = document.documentMode || 0;
if ($.browser.msie && (($.browser.version < 8 && !mode) || mode < 8)) $('#product_images > div.p2').css({ 'position': 'relative', 'z-index': '1', 'zoom': '1' });
var magimg = $(this).children('img:first');
var magimgw = $(magimg).outerWidth();
if ((magimgold) && ((magimgw < (magimgold + 10)) || (magimgw > (magimgold - 10)))) magimgw = magimgold;
magimgold = magimgw;
$(magimg).css('width', magimgw + 'px');
$(this).wrap('');
if (!mobile()) $(this).parent('#magnify-wrap').bind('click', function() { $(this).find('a').click(); });
}
opts = $.extend({}, $.fn.magnify.defaults, options);
$(this).data('zoom', new magnify($(this), opts));
});
return this;
};
if (mversion) $.fn.magnify.defaults = { zoomWidth: 'auto', zoomHeight: 'auto', adjustX: 0, adjustY: 0, position: 'inside' }; else $.fn.magnify.defaults = { zoomWidth: 'auto', zoomHeight: 'auto', adjustX: 0, adjustY: 0, position: 'inside' };
})(jQuery);