Template:North America 2013 Image Carousel

From 2013.igem.org

/*!

* Waterwheel Carousel
* Version 2.3.0
* http://www.bkosborne.com
*
* Copyright 2011-2013 Brian Osborne
* Dual licensed under GPLv3 or MIT
* Copies of the licenses have been distributed
* with this plugin.
*
* Plugin written by Brian Osborne
* for use with the jQuery JavaScript Framework
* http://www.jquery.com
*/

(function(a){a.fn.waterwheelCarousel=function(r){if(this.length>1){this.each(function(){a(this).waterwheelCarousel(r)});return this}var m=this;var c={};var t={};function j(){t={itemsContainer:a(m),totalItems:a(m).find("img").length,containerWidth:a(m).width(),containerHeight:a(m).height(),currentCenterItem:null,previousCenterItem:null,items:[],calculations:[],carouselRotationsLeft:0,currentlyMoving:false,itemsAnimating:0,currentSpeed:c.speed,intervalTimer:null,currentDirection:"forward",leftItemsCount:0,rightItemsCount:0,performingSetup:true};t.itemsContainer.find("img").removeClass(c.activeClassName)}function l(u){clearTimeout(t.autoPlayTimer);if(!u&&c.autoPlay!==0){t.autoPlayTimer=setTimeout(function(){if(c.autoPlay>0){n("forward")}else{n("backward")}},Math.abs(c.autoPlay))}}function h(x){if(c.preloadImages===false){x();return}var v=t.itemsContainer.find("img"),u=0,w=v.length;v.each(function(){a(this).bind("load",function(){u+=1;if(u===w){x();return}});a(this).attr("src",a(this).attr("src"));if(this.complete){a(this).trigger("load")}})}function d(){t.itemsContainer.find("img").each(function(){if(a(this).data("original_width")==undefined||c.forcedImageWidth>0){a(this).data("original_width",a(this).width())}if(a(this).data("original_height")==undefined||c.forcedImageHeight>0){a(this).data("original_height",a(this).height())}})}function e(){if(c.forcedImageWidth&&c.forcedImageHeight){t.itemsContainer.find("img").each(function(){a(this).width(c.forcedImageWidth);a(this).height(c.forcedImageHeight)})}}function s(){var v=t.itemsContainer.find("img:first");t.calculations[0]={distance:0,offset:0,opacity:1};var u=c.horizonOffset;var x=c.separation;for(var w=1;w<=c.flankingItems+2;w++){if(w>1){u*=c.horizonOffsetMultiplier;x*=c.separationMultiplier}t.calculations[w]={distance:t.calculations[w-1].distance+x,offset:t.calculations[w-1].offset+u,opacity:t.calculations[w-1].opacity*c.opacityMultiplier}}if(c.edgeFadeEnabled){t.calculations[c.flankingItems+1].opacity=0}else{t.calculations[c.flankingItems+1]={distance:0,offset:0,opacity:0}}}function b(){t.items=t.itemsContainer.find("img");for(var u=0;u<t.totalItems;u++){t.items[u]=a(t.items[u])}if(c.horizon===0){if(c.orientation==="horizontal"){c.horizon=t.containerHeight/2}else{c.horizon=t.containerWidth/2}}t.itemsContainer.css("position","relative").find("img").each(function(){var w,v;if(c.orientation==="horizontal"){w=(t.containerWidth/2)-(a(this).data("original_width")/2);v=c.horizon-(a(this).data("original_height")/2)}else{w=c.horizon-(a(this).data("original_width")/2);v=(t.containerHeight/2)-(a(this).data("original_height")/2)}a(this).css({left:w,top:v,visibility:"visible",position:"absolute","z-index":0,opacity:0}).data({top:v,left:w,oldPosition:0,currentPosition:0,depth:0,opacity:0}).show()})}function q(){c.startingItem=(c.startingItem===0)?Math.round(t.totalItems/2):c.startingItem;t.rightItemsCount=Math.ceil((t.totalItems-1)/2);t.leftItemsCount=Math.floor((t.totalItems-1)/2);t.carouselRotationsLeft=1;k(t.items[c.startingItem-1],0);t.items[c.startingItem-1].css("opacity",1);var u=c.startingItem-1;for(var v=1;v<=t.rightItemsCount;v++){(u<t.totalItems-1)?u+=1:u=0;t.items[u].css("opacity",1);k(t.items[u],v)}var u=c.startingItem-1;for(var v=-1;v>=t.leftItemsCount*-1;v--){(u>0)?u-=1:u=t.totalItems-1;t.items[u].css("opacity",1);k(t.items[u],v)}}function f(I,y){var z=Math.abs(y);if(z<c.flankingItems+1){var x=t.calculations[z]}else{var x=t.calculations[c.flankingItems+1]}var A=Math.pow(c.sizeMultiplier,z);var C=A*I.data("original_width");var w=A*I.data("original_height");var v=Math.abs(I.width()-C);var B=Math.abs(I.height()-w);var D=x.offset;var J=x.distance;if(y<0){J*=-1}if(c.orientation=="horizontal"){var u=t.containerWidth/2;var H=u+J-(C/2);var F=c.horizon-D-(w/2)}else{var u=t.containerHeight/2;var H=c.horizon-D-(C/2);var F=u+J-(w/2)}var E;if(y===0){E=1}else{E=x.opacity}var G=c.flankingItems+2-z;I.data("width",C);I.data("height",w);I.data("top",F);I.data("left",H);I.data("oldPosition",I.data("currentPosition"));I.data("depth",G);I.data("opacity",E)}function k(u,v){if(Math.abs(v)<=c.flankingItems+1){f(u,v);t.itemsAnimating++;u.css("z-index",u.data().depth).animate({left:u.data().left,width:u.data().width,height:u.data().height,top:u.data().top,opacity:u.data().opacity},t.currentSpeed,c.animationEasing,function(){g(u,v)})}else{u.data("currentPosition",v);if(u.data("oldPosition")===0){u.css({left:u.data().left,width:u.data().width,height:u.data().height,top:u.data().top,opacity:u.data().opacity,"z-index":u.data().depth})}}}function g(u,v){t.itemsAnimating--;u.data("currentPosition",v);if(v===0){t.currentCenterItem=u}if(t.itemsAnimating===0){t.carouselRotationsLeft-=1;t.currentlyMoving=false;if(t.carouselRotationsLeft>0){p(0)}else{t.currentSpeed=c.speed;t.currentCenterItem.addClass(c.activeClassName);if(t.performingSetup===false){c.movedToCenter(t.currentCenterItem);c.movedFromCenter(t.previousCenterItem)}t.performingSetup=false;l()}}}function p(v){if(t.currentlyMoving===false){t.currentCenterItem.removeClass(c.activeClassName);t.currentlyMoving=true;t.itemsAnimating=0;t.carouselRotationsLeft+=v;if(c.quickerForFurther===true){if(v>1){t.currentSpeed=c.speed/v}t.currentSpeed=(t.currentSpeed<100)?100:t.currentSpeed}for(var y=0;y<t.totalItems;y++){var w=a(t.items[y]);var z=w.data("currentPosition");var x;if(t.currentDirection=="forward"){x=z-1}else{x=z+1}var u=(x>0)?t.rightItemsCount:t.leftItemsCount;if(Math.abs(x)>u){x=z*-1;if(t.totalItems%2==0){x+=1}}k(w,x)}}}a(this).find("img").bind("click",function(){var v=a(this).data().currentPosition;if(c.imageNav==false){return}if(Math.abs(v)>=c.flankingItems+1){return}if(t.currentlyMoving){return}t.previousCenterItem=t.currentCenterItem;l(true);c.autoPlay=0;var u=Math.abs(v);if(v==0){c.clickedCenter(a(this))}else{c.movingFromCenter(t.currentCenterItem);c.movingToCenter(a(this));if(v<0){t.currentDirection="backward";p(u)}else{if(v>0){t.currentDirection="forward";p(u)}}}});a(this).find("a").bind("click",function(u){var v=a(this).find("img").data("currentPosition")==0;if(c.linkHandling===1||(c.linkHandling===2&&!v)){u.preventDefault();return false}});function o(){var u=t.currentCenterItem.next();if(u.length<=0){u=t.currentCenterItem.parent().children().first()}return u}function i(){var u=t.currentCenterItem.prev();if(u.length<=0){u=t.currentCenterItem.parent().children().last()}return u}function n(u){if(t.currentlyMoving===false){t.previousCenterItem=t.currentCenterItem;c.movingFromCenter(t.currentCenterItem);if(u=="backward"){c.movingToCenter(i());t.currentDirection="backward"}else{if(u=="forward"){c.movingToCenter(o());t.currentDirection="forward"}}}p(1)}a(document).keydown(function(u){if(c.keyboardNav){if((u.which===37&&c.orientation=="horizontal")||(u.which===38&&c.orientation=="vertical")){l(true);c.autoPlay=0;n("backward")}else{if((u.which===39&&c.orientation=="horizontal")||(u.which===40&&c.orientation=="vertical")){l(true);c.autoPlay=0;n("forward")}}if(c.keyboardNavOverride&&((c.orientation=="horizontal"&&(u.which===37||u.which===39))||(c.orientation=="vertical"&&(u.which===38||u.which===40)))){u.preventDefault();return false}}});this.reload=function(v){if(typeof v==="object"){var u=v}else{var u={}}c=a.extend({},a.fn.waterwheelCarousel.defaults,v);j();t.itemsContainer.find("img").hide();e();h(function(){d();s();b();q()})};this.next=function(){l(true);c.autoPlay=0;n("forward")};this.prev=function(){l(true);c.autoPlay=0;n("backward")};this.reload(r);return this};a.fn.waterwheelCarousel.defaults={startingItem:1,separation:175,separationMultiplier:0.6,horizonOffset:0,horizonOffsetMultiplier:1,sizeMultiplier:0.7,opacityMultiplier:0.8,horizon:0,flankingItems:3,speed:300,animationEasing:"linear",quickerForFurther:true,edgeFadeEnabled:false,linkHandling:2,autoPlay:0,orientation:"horizontal",activeClassName:"carousel-center",keyboardNav:false,keyboardNavOverride:true,imageNav:true,preloadImages:true,forcedImageWidth:0,forcedImageHeight:0,movingToCenter:a.noop,movedToCenter:a.noop,clickedCenter:a.noop,movingFromCenter:a.noop,movedFromCenter:a.noop}})(jQuery);