var CL=CL||{};CL.Views.Gallery=CL.View.extend({initialize:function(){var view=this,slidesObj=this.slidesObj||CL.Views.GallerySlides,controlsObj=this.controlsObj||CL.Views.GalleryControls;if(this.swipeEnabled){this.options.swipeThreshold=this.options.swipeThreshold||50;this.bindSwipe();} this.state=new CL.Models.ViewState({"slideCount":$("ul.slides",this.$el).children().size(),"isAutoAdvancing":this.autoRotate,"state":"uninitialized"});this.state.on("change",function(){view.trackState();});this.goToIndex(0);this.beforeSubobjects&&this.beforeSubobjects();this.slides=new slidesObj({"el":$("ul.slides",this.$el),"state":this.state});this.controls=new controlsObj({"el":$("ul.controls",this.$el),"state":this.state});this.afterInit&&this.afterInit();},getPrevIndex:function(){return this.state.get('index')===0?this.state.get("slideCount")-1:this.state.get('index')-1;},getNextIndex:function(){return this.state.get('index')===this.state.get("slideCount")-1?0:this.state.get('index')+1;},goToPrev:function(){var prevIndex=this.getPrevIndex();this.goToIndex(this.state.get("prevIndex"),{direction:"backward"});},goToNext:function(){var nextIndex=this.getNextIndex();this.goToIndex(this.state.get("nextIndex"),{direction:"forward"});},goToIndex:function(index,options){var params={"index":index};if(options&&options.direction){_.extend(params,{"direction":options.direction});} this.state.set(params);},trackState:function(){if(this.state.hasChanged("index")){this.state.set({"prevIndex":this.getPrevIndex(),"nextIndex":this.getNextIndex()},{"silent":true});} if(this.autoRotate){if(this.state.get("state")=="ready"&&!this.rotateBound){this.bindRotate();}} this.$el.attr("data-state",this.state.get("state"));this.$el.attr("data-count",this.state.get("slideCount"));if(this.state.get("direction")){this.state.unset("direction",{"silent":true});}},tearDown:function(){this.slides.tearDown&&this.slides.tearDown();this.controls.tearDown&&this.controls.tearDown();CL.View.prototype.tearDown.call(this);},bindSwipe:function(){var view=this;this.$el.swipe({swipeStatus:function(event,phase,direction,distance,duration,fingers){if(direction=="left"||direction=="right"){view.isSwiping=true;if(phase=="end"){if(distance>view.options.swipeThreshold&&direction=="right"){view.goToPrev();}else if(distance>view.options.swipeThreshold&&direction=="left"){view.goToNext();} setTimeout(function(){view.isSwiping=false;},1);}}},allowPageScroll:"vertical",excludedElements:"button, input, select, textarea, .noSwipe",threshold:50}).on("click",function(ev){if(view.isSwiping){ev.preventDefault();ev.stopPropagation();}});},bindRotate:function(){var view=this;this.bindRotateTimeout();this.state.on("change:index",function(){view.bindRotateTimeout();});this.rotateBound=true;},bindRotateTimeout:function(){var view=this,delay=12000;if(this.state.get("isAutoAdvancing")){delay=delay/2;this.state.unset("isAutoAdvancing",{"silent":true});} if(this.timeout){clearTimeout(this.timeout);} this.timeout=setTimeout(function(){view.state.set({"isAutoAdvancing":true},{"silent":true});view.goToNext();},delay);}});CL.Views.GallerySubobject=CL.View.extend({initialize:function(){var view=this,subObj=this.subObj||CL.Views.GallerySubobjectItem;this.state=this.options.state;this.options.animationDuration=this.options.animationDuration||500;this.objects=[];$("li",this.$el).each(function(i){var obj=new subObj({"el":$(this),"index":i,"state":view.state});view.objects.push(obj);});this.goToCurrentIndex();this.state.on("change:index",function(){view.goToCurrentIndex();});if(this.waitForStateReady){this.checkState();this.state.on("change:state",function(){view.checkState();});} this.afterInit&&this.afterInit();},checkState:function(){if(this.state.get("state")=="ready"&&!this.isEntered){this.enter();}},enter:function(){this.$el.show();this.isEntered=true;},goToCurrentIndex:function(){this.goToIndex(this.state.get("index"));},goToIndex:function(index,direction){var newObj=this.objects[index];if(newObj){if(this.activeObj){this.activeObj.exit();} newObj.enter();this.activeObj=newObj;}},tearDown:function(){_.each(this.objects,function(obj){obj.tearDown&&obj.tearDown();});CL.View.prototype.tearDown.call(this);}});CL.Views.GallerySubobjectItem=CL.View.extend({initialize:function(){this.state=this.options.state;this.afterInit&&this.afterInit();},enter:function(){this.$el.addClass("active");},exit:function(){this.$el.removeClass("active");}});CL.Views.GallerySlide=CL.Views.GallerySubobjectItem.extend({afterInit:function(){this.$pictureFill=$("span.picturefill",this.$el);},loadAssets:function(success){if(!this.assetsLoaded){if(this.$el.data("has-video")&&CL.utilities.isTouch()){var $video=$("iframe",this.$el);this.ratio=16/9;setTimeout(function(){success&&success();});this.assetsLoaded=true;}else{this.$pictureFill.attr("data-picture","");window.picturefill();this.assetsLoaded=true;var $image=$("img",this.$pictureFill);if($image.get(0).complete){setTimeout(function(){success&&success();},1);}else{$image.one("load error",function(){success&&success();});}}}},exit:function(direction,success){this.$el.removeClass("active");success&&success();}});CL.Views.GallerySlides=CL.Views.GallerySubobject.extend({subObj:CL.Views.GallerySlide,goToCurrentIndex:function(){this.goToIndex(this.state.get("index"),this.state.get("direction"));},goToIndex:function(index,direction){var view=this,newSlide=this.objects[index],oldSlideDirection=direction&&(direction=="backward"?"next":"prev"),newSlideDirection=direction&&(direction=="backward"?"prev":"next");if(this.activeSlide){this.activeSlide.exit(oldSlideDirection,function(){newSlide.enter(newSlideDirection);});}else{if(this.listenForSlideHeight){newSlide.on("imageProcessed",function(){newSlide.reportSlideHeight();});} newSlide.loadAssets(function(){newSlide.enter(newSlideDirection);_.each(view.objects,function(slide){slide.loadAssets();});view.state.set("state","ready");});this.state.set("state","loading");} this.activeSlide=newSlide;}});CL.Views.GalleryControl=CL.Views.GallerySubobjectItem.extend({events:{"click a, touchend a":function(ev){ev.preventDefault();if(this.options.index!=this.state.get("index")){var direction=this.options.index>this.state.get("index")?"forward":"backward";this.state.set({"index":this.options.index,"direction":direction});}}}});CL.Views.GalleryControls=CL.Views.GallerySubobject.extend({subObj:CL.Views.GalleryControl,waitForStateReady:true});