Ext.ns("Ext.ux");Ext.ux.Carousel=Ext.extend(Ext.util.Observable,{interval:3,transitionDuration:1,transitionType:"carousel",transitionEasing:"easeOut",itemSelector:"img",activeSlide:0,autoPlay:false,showPlayButton:false,pauseOnNavigate:false,wrap:false,freezeOnHover:false,navigationOnHover:false,hideNavigation:false,constructor:function(elId,config){config=config||{};Ext.apply(this,config);Ext.ux.Carousel.superclass.constructor.call(this,config);this.addEvents("beforeprev","prev","beforenext","next","change","play","pause","freeze","unfreeze");if("element"===Ext.type(elId)){this.el=elId}else{this.el=Ext.get(elId)}this.slides=this.els=[];if(this.autoPlay||this.showPlayButton){this.wrap=true}if(this.autoPlay&&config.showPlayButton===undefined){this.showPlayButton=true}this.initMarkup();this.initEvents();if(this.carouselSize>0){this.refresh()}},initMarkup:function(){var dh=Ext.DomHelper;this.carouselSize=0;this.els.container=dh.append(this.el,{cls:"ux-carousel-container"},true);this.els.slidesWrap=dh.append(this.els.container,{cls:"ux-carousel-slides-wrap"},true);this.els.navigation=dh.append(this.els.container,{cls:"ux-carousel-nav"},true).hide();this.els.caption=dh.append(this.els.navigation,{tag:"h2",cls:"ux-carousel-caption"},true);this.els.navNext=dh.append(this.els.navigation,{tag:"a",href:"#",cls:"ux-carousel-nav-next"},true);if(this.showPlayButton){this.els.navPlay=dh.append(this.els.navigation,{tag:"a",href:"#",cls:"ux-carousel-nav-play"},true)}this.els.navPrev=dh.append(this.els.navigation,{tag:"a",href:"#",cls:"ux-carousel-nav-prev"},true);this.slideWidth=this.el.getWidth(true);this.slideHeight=this.el.getHeight(true);this.els.container.setStyle({width:this.slideWidth+"px",height:this.slideHeight+"px"});this.els.caption.setWidth((this.slideWidth-(this.els.navNext.getWidth()*2)-(this.showPlayButton?this.els.navPlay.getWidth():0)-20)+"px");this.el.select(this.itemSelector).appendTo(this.els.slidesWrap).each(function(item){item=item.wrap({cls:"ux-carousel-slide"});this.slides.push(item);item.setWidth(this.slideWidth+"px").setHeight(this.slideHeight+"px")},this);this.carouselSize=this.slides.length;if(this.navigationOnHover){this.els.navigation.setStyle("top",(-1*this.els.navigation.getHeight())+"px")}this.el.clip()},initEvents:function(){this.els.navPrev.on("click",function(ev){ev.preventDefault();var target=ev.getTarget();target.blur();if(Ext.fly(target).hasClass("ux-carousel-nav-disabled")){return }this.prev()},this);this.els.navNext.on("click",function(ev){ev.preventDefault();var target=ev.getTarget();target.blur();if(Ext.fly(target).hasClass("ux-carousel-nav-disabled")){return }this.next()},this);if(this.showPlayButton){this.els.navPlay.on("click",function(ev){ev.preventDefault();ev.getTarget().blur();if(this.playing){this.pause()}else{this.play()}},this)}if(this.freezeOnHover){this.els.container.on("mouseenter",function(){if(this.playing){this.fireEvent("freeze",this.slides[this.activeSlide]);Ext.TaskMgr.stop(this.playTask)}},this);this.els.container.on("mouseleave",function(){if(this.playing){this.fireEvent("unfreeze",this.slides[this.activeSlide]);Ext.TaskMgr.start(this.playTask)}},this,{buffer:(this.interval/2)*1000})}if(this.navigationOnHover){this.els.container.on("mouseenter",function(){if(!this.navigationShown){this.navigationShown=true;this.els.navigation.stopFx(false).shift({y:this.els.container.getY(),duration:this.transitionDuration})}},this);this.els.container.on("mouseleave",function(){if(this.navigationShown){this.navigationShown=false;this.els.navigation.stopFx(false).shift({y:this.els.navigation.getHeight()-this.els.container.getY(),duration:this.transitionDuration})}},this)}if(this.interval&&this.autoPlay){this.play()}},prev:function(){if(this.fireEvent("beforeprev")===false){return }if(this.pauseOnNavigate){this.pause()}this.setSlide(this.activeSlide-1);this.fireEvent("prev",this.activeSlide);return this},next:function(){if(this.fireEvent("beforenext")===false){return }if(this.pauseOnNavigate){this.pause()}this.setSlide(this.activeSlide+1);this.fireEvent("next",this.activeSlide);return this},play:function(){if(!this.playing){this.playTask=this.playTask||{run:function(){this.playing=true;this.setSlide(this.activeSlide+1)},interval:this.interval*1000,scope:this};this.playTaskBuffer=this.playTaskBuffer||new Ext.util.DelayedTask(function(){Ext.TaskMgr.start(this.playTask)},this);this.playTaskBuffer.delay(this.interval*1000);this.playing=true;this.els.navPlay.addClass("ux-carousel-playing");this.fireEvent("play")}return this},pause:function(){if(this.playing){Ext.TaskMgr.stop(this.playTask);this.playTaskBuffer.cancel();this.playing=false;this.els.navPlay.removeClass("ux-carousel-playing");this.fireEvent("pause")}return this},clear:function(){this.els.slidesWrap.update("");this.slides=[];this.carouselSize=0;this.pause();return this},add:function(el,refresh){var item=Ext.fly(el).appendTo(this.els.slidesWrap).wrap({cls:"ux-carousel-slide"});item.setWidth(this.slideWidth+"px").setHeight(this.slideHeight+"px");this.slides.push(item);if(refresh){this.refresh()}return this},refresh:function(){this.carouselSize=this.slides.length;this.els.slidesWrap.setWidth((this.slideWidth*this.carouselSize)+"px");if(this.carouselSize>0){if(!this.hideNavigation){this.els.navigation.show()}this.activeSlide=0;this.setSlide(0,true)}return this},setSlide:function(index,initial){if(!this.wrap&&!this.slides[index]){return }else{if(this.wrap){if(index<0){index=this.carouselSize-1}else{if(index>this.carouselSize-1){index=0}}}}if(!this.slides[index]){return }this.els.caption.update(this.slides[index].child(":first-child",true).title||"");var offset=index*this.slideWidth;if(!initial){switch(this.transitionType){case"fade":this.slides[index].setOpacity(0);this.slides[this.activeSlide].stopFx(false).fadeOut({duration:this.transitionDuration/2,callback:function(){this.els.slidesWrap.setStyle("left",(-1*offset)+"px");this.slides[this.activeSlide].setOpacity(1);this.slides[index].fadeIn({duration:this.transitionDuration/2})},scope:this});break;default:var xNew=(-1*offset)+this.els.container.getX();this.els.slidesWrap.stopFx(false);this.els.slidesWrap.shift({duration:this.transitionDuration,x:xNew,easing:this.transitionEasing});break}}else{this.els.slidesWrap.setStyle("left","0")}this.activeSlide=index;this.updateNav();this.fireEvent("change",this.slides[index],index)},updateNav:function(){this.els.navPrev.removeClass("ux-carousel-nav-disabled");this.els.navNext.removeClass("ux-carousel-nav-disabled");if(!this.wrap){if(this.activeSlide===0){this.els.navPrev.addClass("ux-carousel-nav-disabled")}if(this.activeSlide===this.carouselSize-1){this.els.navNext.addClass("ux-carousel-nav-disabled")}}}});Ext.ns("Ext.ux");Ext.ux.CarouselViewer=Ext.extend(Ext.Window,{carouselConfig:{itemSelector:"img",interval:3,autoPlay:true,showPlayButton:true,pauseOnNavigate:true,freezeOnHover:true,transitionType:"fade"},tpl:'<div style="padding: 5px; height: {height}px; width: {width}px; background-color: #E6E6E0"><tpl for="imgs"><img src="{src}" title="{title}"></tpl></div>',initComponent:function(){if(this.tpl&&"string"===Ext.type(this.tpl)){this.tpl=new Ext.XTemplate(this.tpl);this.tpl.compile()}if(!this.html&&this.imageConfig){this.imageConfig.height=this.imageConfig.height||200;this.imageConfig.width=this.imageConfig.width||400;this.html=this.tpl.apply(this.imageConfig)}Ext.ux.CarouselViewer.superclass.initComponent.call(this);this.on("show",this._onShowFn,this,{single:true})},_onShowFn:function(win){if(this.body){var El=Ext.get(this.body.dom.firstChild);if(El&&!this.carousel){this.carousel=new Ext.ux.Carousel(El,this.carouselConfig)}}},updateContent:function(imageConfig){if(this.carousel){delete (this.carousel)}imageConfig.height=imageConfig.height||200;imageConfig.width=imageConfig.width||400;var html=this.tpl.apply(imageConfig);this.body.update(html);var El=Ext.get(this.body.dom.firstChild);if(El){this.carousel=new Ext.ux.Carousel(El,this.carouselConfig)}}});Ext.ux.onCarouselImageFn=function(e){var tel=e.getTarget();var tEl=Ext.get(tel);if(true===tEl.hasClass("carousel-image")){var ct=tEl.up(".carousel-image-ct");if(ct){var imgels=Ext.DomQuery.select("*[class*=carousel-image]",ct.dom);var imgs=[{src:tel.src}];for(var i=0,len=imgels.length;i<len;i++){var child=imgels[i];if(true===Ext.DomQuery.is(child,"img")&&child!==tel){imgs[imgs.length]={src:child.src}}}var imageConfig={width:400,height:300,imgs:imgs};if(!Ext.ux.CarouselViewerWin){Ext.ux.CarouselViewerWin=new Ext.ux.CarouselViewer({modal:true,closeAction:"hide",imageConfig:imageConfig})}else{Ext.ux.CarouselViewerWin.updateContent(imageConfig)}Ext.ux.CarouselViewerWin.show()}}};