(function($){var rotationImages=[];var preloadedImages=[];$.fn.rotate360=function(options){var o=$.extend({},$.fn.rotate360.defaults,options);return this.each(function(i,el){var col=colLoaded=imagesLoaded=0;var enablePreloading=true;var rotationID=i;var $container=$(this);var $preloader=('<div class="preloader"></div>');var $img=null;var preloaded=mouseDown=false;var mouseLastDistanceX,mouseLastDistanceY,rowAmount,colAmount,containerWidth,containerHeight,imageSrc,moveXto,moveYto,newXStart,newYStart,rotationInterval;var lastXPos=lastYPos=moveXto=moveYto=0;var defaultXPos=lastXPos=(o.defaultCol)?o.defaultCol:0;var defaultYPos=lastYPos=(o.defaultRow)?o.defaultRow:0;cWidth=$(this).width();cHeight=$(this).height();var controlPercentHeight=(o.control.size.height.indexOf('%'))?o.control.size.height.replace('%','')/100:1;var controlPercentWidth=(o.control.size.width.indexOf('%'))?o.control.size.width.replace('%','')/100:1;var controlStepHeight=(o.control.stepFactor.height.indexOf('%')!=-1)?o.control.stepFactor.height.replace('%','')/100:(o.control.stepFactor.height.indexOf('px')!=-1)?o.control.stepFactor.height.replace('px','')/cHeight:1;var controlStepWidth=(o.control.stepFactor.width.indexOf('%')!=-1)?o.control.stepFactor.width.replace('%','')/100:((o.control.stepFactor.width.indexOf('px')!=-1)?o.control.stepFactor.width.replace('px','')/cWidth:1);if(o.lightbox){bindLightboxEvents()}if('img'==this.tagName.toLowerCase()){imageSrc=$(this)[0].src;createRotationContainer(this)}rowAmount=cWidth/(o.images.row.images+1);colAmount=cHeight/(o.images.col.images+1);if(!rotationImages[rotationID]){rotationImages[rotationID]=[]}preloadImages();function bindLightboxEvents(){switch(o.lightbox.replace('#','').replace('.','')){case'colorbox':$(window).bind('resize.cbox_resize',function(){setControlPosition()}).bind('cbox_cleanup',function(){disablePreloading();removeMouseEvents();$control.remove()});break;case'fancybox':case'fancybox-inner':$(window).bind('resize.fb',function(){setControlPosition();$close=$('#fancybox-close');$close.css({'position':'absolute','visibility':'visible','display':'block','top':$container.offset().top-$close.height()/2,'left':$container.offset().left+$container.width()-$close.width()/2})}).bind('fancybox-cleanup',function(){$close=$('#fancybox-close');$close.hide().css({'visibility':'hidden','top':$close.data('pos').top,'left':$close.data('pos').left});$(window).unbind('resize.fb');disablePreloading();removeMouseEvents();$control.remove()});break}}function disablePreloading(){enablePreloading=false}function setControlPosition(){switch(o.lightbox.replace('#','').replace('.','')){case'colorbox':$control.css({'margin-top':$container.parents(o.lightbox).position().top-parseInt((cHeight*controlPercentHeight)/2-cHeight/2),'margin-left':$container.parents(o.lightbox).position().left-parseInt((cWidth*controlPercentWidth)/2-cWidth/2)});break;case'fancybox':case'fancybox-inner':$control.css({'top':$container.parents('#fancybox-wrap').position().top-parseInt((cHeight*controlPercentHeight)/2-cHeight/2),'left':$container.parents('#fancybox-wrap').position().left-parseInt((cWidth*controlPercentWidth)/2-cWidth/2)});break}}function preloadRow(rowCount,_loadNext,_loadPrev){loadPrev=_loadPrev;loadNext=_loadNext;var imageName=getImageName(((rowCount-1)*o.images.row.images)+col);if(imageName&&!preloaded){$img=$('<img />').attr('src',o.images.folder+imageName).attr('alt',rowCount+'-'+(col+1));bindLoadEvent($img,rowCount,(col+1),function(src,imgRow,imgCol,preloaded){if((imgRow!=-1&&!isNaN(imgRow))||(imgCol!=-1&&!isNaN(imgCol))){colLoaded++;if(!preloaded){imagesLoaded++}col++;var prevLoaded=nextLoaded=false;if(!preloaded){if(!rotationImages[rotationID][imgRow]){rotationImages[rotationID][imgRow]=[]}rotationImages[rotationID][imgRow][imgCol]=src;if(o.preloader=='images'){$('.preloader').html(imagesLoaded+'/'+o.images.row.images*o.images.col.images)}else if(o.preloader=='percent'){$('.preloader').html(parseInt((imagesLoaded/(o.images.row.images*o.images.col.images))*100)+'%')}}}if(col!=o.images.row.images){preloadRow(rowCount)}else{col=0;if((rowCount+1)<=o.images.col.images&&(rowCount+1)>o.defaultRow){preloadRow(rowCount+1,true,false)}else if(o.defaultRow>0&&rowCount>1){if(rowCount>o.defaultRow){rowCount=o.defaultRow-1}else{rowCount-=1}preloadRow(rowCount,false,false)}else{imageloaded()}}})}else{colLoaded++;col++;checkNextRow(col,rowCount)}}function checkNextRow(col,rowCount){}function preloadImages(){imagesLoaded=preloadedImages.length;$container.prepend($preloader);$control.css('opacity',o.loadingOpacity);switch(o.images.mode){case'row':$imageContainer=$('<div id="rows" class="imageContainer"></div>').appendTo($container);$('<img />').attr('src',o.images.folder+getImageName(o.defaultRow)).attr('rel',o.defaultRow).load(function(){$(this).hide().appendTo($imageContainer);preloadNextElements(o.defaultRow,o.images.col.images-1,1);if(o.initAfterFirstElement){imageloaded()}});break;case'one':$('<img />').attr('src',o.images.folder+getImageName()).attr('rel',0).load(function(){imageloaded()});break;case'single':preloadRow(o.defaultRow,true,true);break}}function bindLoadEvent($img,row,col,callback){var imgSrc=$img[0].src;var preloadedPos=jQuery.inArray(imgSrc,preloadedImages);var imagePreloaded=false;if(rotationImages[rotationID][row]){if(rotationImages[rotationID][row][col]==imgSrc){imagePreloaded=true}}if(enablePreloading){if(preloadedPos<0){var img=$img[0];var orgSrc=img.src;preloadedImages.push(orgSrc);if(!$.browser.msie){img.src=""}$img.bind('load',function(e){if(callback){callback(this.src,row,col,false)}});if(!$.browser.msie){img.src=orgSrc}}else{if(callback){if(imagesLoaded%o.loadFromCache==0){setTimeout(function(){callback(preloadedImages[preloadedPos],row,col,true)},1)}else{callback(preloadedImages[preloadedPos],row,col,true)}}}}}function imageloaded(){if(o.initAfterFirstElement){o.axis.y=false}if(!preloaded){preloaded=true;start360()}}function start360(){if(o.images.mode=='single'){if(!$container.children('img:not(.rotate360)').length){$img=$('<img />').appendTo($container)}}setBackgroundPosition(defaultXPos-1,defaultYPos-1,o.images.mode);setTimeout(function(){$container.find('img.rotate360').remove();$('.preloader').fadeOut('fast');$control.fadeTo('fast',.5,function(){$(this).addClass('loaded').css('opacity',o.loadedOpacity);$container.addClass('loaded');$control.show();initMouseEvents()});if(o.icon){$container.children('.icon').fadeIn('fast')}if(o.autoplay.enabled){initAutoplay()}},500)}function createRotationContainer(img){$wrapper=$('<div class="rotate360_wrapper"></div>').attr('rel',rotationID);$(img).wrap($wrapper);$container=$container.parent();$container.height(cHeight).width(cWidth);if(o.icon){$icon=$('<div class="icon"></div>').hide();$container.append($icon)}$control=$('<div class="control"></div>').height(cHeight*controlPercentHeight).width(cWidth*controlPercentWidth);if(controlPercentHeight!=1||controlPercentWidth!=1){$control.addClass('customSize');if($container.parents(o.lightbox).length){$control.addClass('lightbox');setControlPosition();switch(o.lightbox.replace('#','').replace('.','')){case'fancybox':case'fancybox-inner':$container.addClass('fancybox').parents('#fancybox-wrap').after($control.addClass('fancybox'));$close=$('#fancybox-close');var closePosition=$close.position();$close.data('pos',closePosition).insertBefore($control).css({'position':'absolute','display':'block','visibility':'visible','top':closePosition.top+$container.offset().top,'left':closePosition.left+$container.offset().left});break;default:$container.parents(o.lightbox).before($control);break}}else{$container.append($control)}}else{$container.append($control)}}function initMouseEvents(){$control.mousemove(function(e){e.preventDefault();if(mouseDown){moveXto=defaultXPos;moveYto=defaultYPos;if(o.axis.x){if(o.images.row.endless){moveXto=parseInt((lastXPos+parseInt(((cWidth*controlStepWidth)-Math.round(((e.pageX-$control.offset().left)/(cWidth*controlStepWidth))*100)/100*cWidth)/rowAmount)-newXStart+o.images.row.images)%o.images.row.images)}else{}}if(o.axis.y){if(o.images.col.endless){moveYto=parseInt((lastYPos+parseInt(((cHeight*controlStepHeight)-Math.round(((e.pageX-$control.offset().top)/(cHeight*controlStepHeight))*100)/100*cHeight)/rowAmount)-newYStart+o.images.col.images)%o.images.col.images)}else{var tmpPos=Math.round((lastYPos+parseInt(((cHeight*controlStepHeight)-Math.round(((e.pageY-$control.offset().top)/(cHeight*controlStepHeight))*100)/100*cHeight)/colAmount)-newYStart));tmpPos=(tmpPos>0)?tmpPos:0;if(o.images.mode=='one'){moveYto=(tmpPos>o.images.col.images)?o.images.col.images:tmpPos}else{moveYto=(tmpPos>(o.images.col.images-1))?(o.images.col.images-1):tmpPos}}}setBackgroundPosition(moveXto,moveYto,o.images.mode)}});$control.mouseout(function(){});$control.mouseup(function(){lastXPos=moveXto;lastYPos=moveYto;mouseDown=false});$control.mouseleave(function(){mouseDown=false});$control.mousedown(function(e){newXStart=parseInt(((cWidth*controlStepWidth)-Math.round(((e.pageX-$control.offset().left)/(cWidth*controlStepWidth))*100)/100*cWidth)/rowAmount);newYStart=parseInt(((cHeight*controlStepHeight)-Math.round(((e.pageY-$control.offset().top)/(cHeight*controlStepHeight))*100)/100*cHeight)/colAmount);e.preventDefault();mouseDown=true})}function removeMouseEvents(){$control.unbind('mousemove, mouseout, mouseup, mouseleave, mousedown')}function setBackgroundPosition(x,y,mode){var xPos=(x!=0)?-parseInt(x*cWidth-cWidth):-parseInt(x*cWidth);var yPos=(y!=0)?-parseInt(y*cHeight-cHeight):-parseInt(y*cHeight);switch(mode){case'cross':$container.css({'background-position':xPos+'px 0, 0 '+yPos+'px'});break;case'row':$imageContainer.children(':not(img[rel='+y+'])').hide();$imageContainer.children('img[rel='+y+']').show();$imageContainer.css({'left':xPos+'px'});break;case'one':$container.css({'background-position':xPos+'px '+yPos+'px'});break;case'single':$img[0].src=rotationImages[rotationID][y+1][x+1];break}}function getImageName(count,axis){if(!axis){axis='x'}if(!count){count=0}switch(o.images.mode){case'cross':return(axis=='x')?o.images.imagePattern.row.replace(/Count/g,count):o.images.imagePattern.col.replace(/Count/g,count);break;case'row':return o.images.imagePattern.row.replace(/Count/g,count);break;case'col':return o.images.imagePattern.col.replace(/Count/g,count);break;case'one':return o.images.imagePattern.one;break;case'single':while(count.toString().length<4){count='0'+count}return o.images.imagePattern.single.replace(/Count/g,count);break}}function initAutoplay(){setInterval(function(){if(!mouseDown){autoplayStep()}},o.autoplay.sec*1000)}function autoplayStep(){lastXPos=(lastXPos+1==36)?36:(lastXPos+1)%36;setBackgroundPosition(lastXPos,lastYPos,o.images.mode)}function rotateAtStart(){var steps=0;rotationInterval=setInterval(function(){if(!mouseDown){autoplayStep();steps++;if(steps==o.images.row.images*2){clearInterval(rotationInterval)}}},o.autoplay.sec*1000)}})};$.fn.rotate360.defaults={axis:{x:true,y:true},images:{mode:'single',row:{images:36,endless:true},col:{images:9,endless:false},folder:'images/productimages/',imagePattern:{row:'row-Count.jpg',col:'col-Count.jpg',one:'test3.jpg',single:'SB_3000HF-MOW_Count.jpg'}},control:{size:{height:'130%',width:'130%'},stepFactor:{height:'700px',width:'700px'}},lightbox:'#colorbox',autoplay:{enabled:false,sec:.1},preloader:'percent',loadingOpacity:1,loadedOpacity:0,tickAmount:10,icon:false,defaultRow:5,defaultCol:25,initAfterFirstElement:false,loadFromCache:50}})(jQuery);