//////////////////////////////////////////////////////////////////////////////////
// Cloud Zoom V1.0.2
// (c) 2010 by R Cecco. <http://www.professorcloud.com>
// MIT License
//
// Please retain this copyright header in all versions of the software
//////////////////////////////////////////////////////////////////////////////////
(function($){$(document).ready(function(){$('.cloud-zoom, .cloud-zoom-gallery').CloudZoom()});

function format(str){for(var i=1;i<arguments.length;i++){str=str.replace('%'+(i-1),arguments[i])}return str}function CloudZoom(jWin,opts){var sImg=$('img',jWin);
var img1;
var img2;
var zoomDiv=null;
var $mouseTrap=null;
var lens=null;
var $tint=null;
var softFocus=null;
var $ie6Fix=null;
var zoomImage;
var controlTimer=0;
var cw,ch;
var destU=0;
var destV=0;
var currV=0;
var currU=0;
var filesLoaded=0;
var mx,my;
var ctx=this,zw;

setTimeout(function(){if($mouseTrap===null){var w=jWin.width();jWin.parent().append(format('<div style="width:%0px;position:absolute;top:75%;left:%1px;text-align:center" class="cloud-zoom-loading" >Loading...</div>',w/3,(w/2)-(w/6))).find(':last').css('opacity',0.5)}},200);

var ie6FixRemove=function(){if($ie6Fix!==null){$ie6Fix.remove();$ie6Fix=null}};
this.removeBits=function(){if(lens){lens.remove();lens=null}if($tint){$tint.remove();$tint=null}if(softFocus){softFocus.remove();

softFocus=null}ie6FixRemove();

$('.cloud-zoom-loading',jWin.parent()).remove()};
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)}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)/opts.smoothMove;currV+=(destV-currV)/opts.smoothMove;
zoomDiv.css('background-position',(-(currU>>0)+'px ')+(-(currV>>0)+'px'))}controlTimer=setTimeout(function(){ctx.controlLoop()},30)};
this.init2=function(img,id){filesLoaded++;
if(id===1){zoomImage=img}if(filesLoaded===2){this.init()}};
this.init=function(){$('.cloud-zoom-loading',jWin.parent()).remove();
$mouseTrap=jWin.parent().append(format("<div class='mousetrap' style='background-image:url(\".\");z-index:999;position:absolute;width:%0px;height:%1px;left:%2px;top:%3px;\'></div>",sImg.outerWidth(),sImg.outerHeight(),0,0)).find(':last');
$mouseTrap.bind('mousemove',this,function(event){mx=event.pageX;my=event.pageY});
$mouseTrap.bind('mouseleave',this,function(event){clearTimeout(controlTimer);
if(lens){lens.fadeOut(299)}if($tint){$tint.fadeOut(299)}if(softFocus){softFocus.fadeOut(299)}zoomDiv.fadeOut(300,function(){ctx.fadedOut()});
return false});

$mouseTrap.bind('mouseenter',this,function(event){mx=event.pageX;

my=event.pageY;zw=event.data;
if(zoomDiv){zoomDiv.stop(true,false);
zoomDiv.remove()}var xPos=opts.adjustX,yPos=opts.adjustY;
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 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('<div id="cloud-zoom-big" class="cloud-zoom-big" style="display:none;position:absolute;left:%0px;top:%1px;width:%2px;height:%3px;background-image:url(\'%4\');z-index:99;"></div>',xPos,yPos,w,h,zoomImage.src)).find(':last');
if(sImg.attr('title')&&opts.showTitle){zoomDiv.append(format('<div class="cloud-zoom-title">%0</div>',sImg.attr('title'))).find(':last').css('opacity',opts.titleOpacity)}if($.browser.msie&&$.browser.version<7){$ie6Fix=$('<iframe frameborder="0" src="#"></iframe>').css({position:"absolute",left:xPos,top:yPos,zIndex:99,width:w,height:h}).insertBefore(zoomDiv)}zoomDiv.fadeIn(500);
if(lens){lens.remove();
lens=null}cw=(sImg.outerWidth()/zoomImage.width)*zoomDiv.width();ch=(sImg.outerHeight()/zoomImage.height)*zoomDiv.height();
lens=jWin.append(format("<div class = 'cloud-zoom-lens' style='display:none;z-index:98;position:absolute;width:%0px;height:%1px;'></div>",cw,ch)).find(':last');
$mouseTrap.css('cursor',lens.css('cursor'));
var noTrans=false;if(opts.tint){lens.css('background','url("'+sImg.attr('src')+'")');
$tint=jWin.append(format('<div style="display:none;position:absolute; left:0px; top:0px; width:%0px; height:%1px; background-color:%2;" />',sImg.outerWidth(),sImg.outerHeight(),opts.tint)).find(':last');$tint.css('opacity',opts.tintOpacity);
noTrans=true;
$tint.fadeIn(500)}if(opts.softFocus){lens.css('background','url("'+sImg.attr('src')+'")');
softFocus=jWin.append(format('<div style="position:absolute;display:none;top:2px; left:2px; width:%0px; height:%1px;" />',sImg.outerWidth()-2,sImg.outerHeight()-2,opts.tint)).find(':last');
softFocus.css('background','url("'+sImg.attr('src')+'")');
softFocus.css('opacity',0.5);
noTrans=true;
softFocus.fadeIn(500)}if(!noTrans){lens.css('opacity',opts.lensOpacity)}if(opts.position!=='inside'){lens.fadeIn(500)}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.CloudZoom=function(options){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}this.each(function(){var relOpts,opts;
eval('var	a = {'+$(this).attr('rel')+'}');
relOpts=a;
if($(this).is('.cloud-zoom')){$(this).css({'position':'relative','display':'block'});
$('img',$(this)).css({'display':'block'});
if($(this).parent().attr('id')!='wrap'){$(this).wrap('<div id="wrap" style="top:0px;z-index:9999;position:relative;"></div>')}opts=$.extend({},$.fn.CloudZoom.defaults,options);
opts=$.extend({},opts,relOpts);
$(this).data('zoom',new CloudZoom($(this),opts))}else if($(this).is('.cloud-zoom-gallery')){opts=$.extend({},relOpts,options);
$(this).data('relOpts',opts);

$(this).bind('click',$(this),function(event){var data=event.data.data('relOpts');
$('#'+data.useZoom).data('zoom').destroy();
$('#'+data.useZoom).attr('href',event.data.attr('href'));
$('#'+data.useZoom+' img').attr('src',event.data.data('relOpts').smallImage);
$('#'+event.data.data('relOpts').useZoom).CloudZoom();
return false})}});

return this};

$.fn.CloudZoom.defaults={zoomWidth:'auto',zoomHeight:'auto',position:'right',tint:false,tintOpacity:0.5,lensOpacity:0.5,softFocus:false,smoothMove:3,showTitle:true,titleOpacity:0.5,adjustX:0,adjustY:0}})(jQuery);
