;(function($){$.extend($.fn,{mzoom:function(options){if(!this.length){alert('foo!');options&&options.debug&&window.console&&console.warn("nothing selected, nothing to do!");return false;}
var mzoomer=$.data(this[0],'mzoomer');if(mzoomer){return mzoomer;}
mzoomer=new $.mzoomer(options,this);$.data(this[0],'mzoomer',mzoomer);return mzoomer;}});$.mzoomer=function(options,block){this.mzopts=$.extend({},$.mzoomer.defaults,options);this.block=block;this.fullSliderWidth=null;this.mzinit();};$.extend($.mzoomer,{defaults:{imgEl:null,sliderEl:null,sliderOpts:{'min':0,'step':1,'value':0},draggableOpts:{},smarthide:true,sliderWrapperEl:null,prevElMargin:null},prototype:{mzinit:function(){if(this.mzopts.imgEl===null){this.mzopts.imgEl=this.block.find(" img");}
if(this.mzopts.sliderEl===null){this.mzopts.sliderEl=this.block.find("#slider");}
if(this.mzopts.imgEl.length<1){alert('image element missing');return false;}
if(this.mzopts.sliderEl.length<1){alert('slider element missing');return false;}
if(this.fullSliderWidth===null){this.fullSliderWidth=this.mzopts.sliderEl.innerWidth();}
this.mzopts.sliderOpts.max=this.fullSliderWidth;var imgEl=this.mzopts.imgEl;var imgContEl=imgEl.parent(':first');var imgMeta={'w':imgEl.innerWidth(),'h':imgEl.innerHeight(),'r':imgEl.innerWidth()/imgEl.innerHeight()};var imgContMeta={'w':imgContEl.innerWidth(),'h':imgContEl.innerHeight()};var state={'floorZoom':1};if(imgMeta.w>imgMeta.h){state.ceilZoom=imgMeta.w/imgContMeta.w;}else{state.ceilZoom=imgMeta.h/imgContMeta.h;}
if(this.mzopts.smarthide&&imgMeta.w<=imgContMeta.w&&imgMeta.h<=imgContMeta.h){var tmargin=(imgContMeta.h-imgMeta.h)/2;var lmargin=(imgContMeta.w-imgMeta.w)/2;this.mzopts.imgEl.css('margin-top',tmargin);this.mzopts.imgEl.css('margin-left',lmargin);toHideEl=(this.mzopts.sliderWrapperEl!=null)?this.mzopts.sliderWrapperEl:this.mzopts.sliderEl;if(this.mzopts.prevElMargin!=null){toHideEl.prev().css('margin-bottom',this.mzopts.prevElMargin);}
toHideEl.hide();return;}else{toShowEl=(this.mzopts.sliderWrapperEl!=null)?this.mzopts.sliderWrapperEl:this.mzopts.sliderEl;if(this.mzopts.prevElMargin!=null){if((setM=toShowEl.prev().css('margin-bottom').replace('px',''))>0){setM=toShowEl.prev().css('margin-bottom').replace('px','')-this.mzopts.prevElMargin.replace('px','');}
toShowEl.prev().css('margin-bottom',setM+'px');}
toShowEl.show();}
imgMeta.x=imgMeta.y=0;imgMeta.zoom=1;var mzoomer=this;if(!this.mzopts.draggable){draggableOpts=$.extend(this.mzopts.draggablOpts,{stop:function(event,ui){mzoomer.contain(ui.position.left,ui.position.top);}});this.mzopts.draggable=this.mzopts.imgEl.draggable(draggableOpts);}
if(!this.mzopts.slider){sliderOpts=$.extend(this.mzopts.sliderOpts,{slide:function(event,ui){mzoomer.scale(ui.value/mzoomer.mzopts.sliderEl.innerWidth());},change:function(event,ui){mzoomer.scale(ui.value/mzoomer.mzopts.sliderEl.innerWidth());var left=$(this).children('a:first').css('left');left=left.replace('%','');if(left>96){$(this).children('a:first').css('left','96%');}}});this.mzopts.slider=this.mzopts.sliderEl.slider(sliderOpts);}
this.mzopts.imgMeta=imgMeta;this.mzopts.imgContMeta=imgContMeta;this.mzopts.state=state;this.scale(0);},scale:function(v){var imgMeta=this.mzopts.imgMeta;var imgContMeta=this.mzopts.imgContMeta;var state=this.mzopts.state;var cX=(imgContMeta.w*(1-imgMeta.zoom)/2-imgMeta.x)/imgMeta.zoom;var cY=(imgContMeta.h*(1-imgMeta.zoom)/2-imgMeta.y)/imgMeta.zoom;this.mzopts.imgMeta.zoom=state.floorZoom+(v*(state.ceilZoom-state.floorZoom));this.mzopts.imgEl.width(imgMeta.zoom*imgContMeta.w+'px');if(imgContMeta.r){this.mzopts.imgEl.height(imgMeta.zoom*imgContMeta.w*imgContMeta.r);}
this.mzopts.imgMeta.x=imgContMeta.w*(1-imgMeta.zoom)/2-(cX*imgMeta.zoom);this.mzopts.imgMeta.y=imgContMeta.h*(1-imgMeta.zoom)/2-(cY*imgMeta.zoom);this.contain(imgMeta.x,imgMeta.y);},contain:function(x,y){if(this.mzopts.draggable===null){return;}
var dim={'w':this.mzopts.draggable.innerWidth(),'h':this.mzopts.draggable.innerHeight()};var xMin=0,xMax=this.mzopts.imgContMeta.w-dim.w;var yMin=0,yMax=this.mzopts.imgContMeta.h-dim.h;x=x<xMax?xMax:x;x=x>xMin?xMin:x;y=y<yMax?yMax:y;y=y>yMin?yMin:y;this.mzopts.imgMeta.x=x;this.mzopts.imgMeta.y=y;this.mzopts.imgEl.css('left',x);this.mzopts.imgEl.css('top',y);},setNewImage:function(newImg){oldImg=this.mzopts.imgEl;newImg.attr('id',oldImg.attr('id'));newImg.addClass(oldImg.attr('class'));this.mzopts.imgEl.replaceWith(newImg);this.mzopts.imgEl=newImg;this.mzopts.draggable=null;this.mzopts.slider=null;this.reset()
this.mzopts.imgEl.show();},reset:function(){this.mzinit();this.mzopts.sliderEl.slider('value',1);}}});})(jQuery);
