(function($){var undefined;var nofn=function(){};var proxy=function(context,fn){return function(){if($.isFunction(fn)){return fn.apply(context,arguments);}else{return context[fn].apply(context,arguments);}};};animationqueue={};animationqueue.AnimationQueue=function(){this.sets=[];this.isRunning=false;this.current=0;this.totalTime=0;this.elapsedTime=0;this.startTime=1;this.poll=null;};animationqueue.AnimationQueue.prototype={queue:function(animationSet){this.sets.push(animationSet);},start:function(time,callback){this.totalTime=time;this.elapsedTime=0;this.isRunning=true;callback=$.isFunction(callback)?callback:nofn;var timeShare=1;var firstTimeShare=1;if(this.sets.length>0){timeShare=this.sets.length;firstTimeShare=this.sets[0].totalTime>0?Math.max(0,Math.min(1,1-(this.sets[0].elapsedTime/this.sets[0].totalTime))):1;} var startTime=(new Date()).getTime();if(this.sets.length>0){this.sets[0].start(firstTimeShare/timeShare*this.totalTime);} (function(self,totalTime,timeShare){function poll(){self.elapsedTime=(new Date()).getTime()-startTime;if(self.sets.length&&!self.sets[0].isRunning){self.sets.shift();if(self.sets.length){self.sets[0].start(totalTime/timeShare);}} if(self.elapsedTime>=self.totalTime&&self.sets.length==0){callback(self.elapsedTime);self.stop();}} self.poll=setInterval(poll,16);})(this,this.totalTime,timeShare);},stop:function(){if(this.isRunning){this.isRunning=false;var i=this.sets.length;while(i--){this.sets[i].stop();} clearInterval(this.poll);}},remove:function(animationSet){var i=this.sets.length;while(i--){if(this.sets[i]==animationSet){var newSets=this.sets.slice(0,i);this.animationSet=newSets.push(this.sets.slice(i+1));}}},get:function(){return this.sets.slice(0);}};animationqueue.AnimationSet=function(){this.steps=[];this.isStepsSorted=true;this.currentStep=-1;this.animations=[];this.isRunning=false;this.totalTime=0;this.elapsedTime=0;this.poll=null;this.data={};};animationqueue.AnimationSet.prototype={add:function(anim){if(anim instanceof animationqueue.AnimationStep){this.steps.push(anim);this.isStepsSorted=false;++this.currentStep;}else if(anim instanceof animationqueue.Animation){this.animations.push(anim);}},start:function(time){this.elapsedTime=this.totalTime==0?0:this.elapsedTime/this.totalTime*time;this.totalTime=time;if(!this.isStepsSorted){this.steps.sort(function(a,b){return b.moment-a.moment;});this.isStepsSorted=true;} this.isRunning=true;this.startTime=(new Date()).getTime()-this.elapsedTime;var i=this.animations.length;while(i--){this.animations[i].start(this.totalTime);} var self=this;var animationsIndex=this.animations.length-1;function poll(timeSince){self.elapsedTime=(new Date()).getTime()-self.startTime;while(self.currentStep>=0&&self.steps[self.currentStep].getTime(self.totalTime)<=self.elapsedTime){self.steps[self.currentStep].doIt();--self.currentStep;} if(self.elapsedTime>=self.totalTime&&self.currentStep<0){while(animationsIndex>=0&&!self.animations[animationsIndex].isRunning){--animationsIndex;} if(animationsIndex<0){self.reset(self.elapsedTime);}}} this.poll=setInterval(poll,16);},stop:function(){if(this.isRunning){this.isRunning=false;if(this.poll){clearInterval(this.poll);} var i=this.animations.length;while(i--){this.animations[i].stop();}}},setData:function(key,data){this.data[key]=data;},getData:function(key){return this.data[key];},reset:function(){this.stop();this.elapsedTime=0;this.currentStep=this.steps.length-1;}};animationqueue.AnimationStep=function($element,cssParams,moment){this.$element=$element;this.cssParams=cssParams;this.moment=Math.min(1,Math.max(0,moment));};animationqueue.AnimationStep.prototype={getTime:function(totalTime){return this.moment*totalTime;},doIt:function(){this.$element.css(this.cssParams);}};animationqueue.Animation=function($element,animateParams){this.$element=$element;this.animateParams=animateParams;this.isRunning=false;};animationqueue.Animation.prototype={start:function(time){this.$element.stop();if(time===0){this.$element.css(this.animateParams);self.isRunning=false;}else{this.isRunning=true;this.$element.animate(this.animateParams,time,proxy(this,function(){this.isRunning=false;}));}},stop:function(){this.$element.stop();this.isRunning=false;}};$.jcoverflip={animationElement:function(element,animate,steps){return{element:element,animate:animate,steps:steps};},getItemFromElement:function(element){element=$(element);var item=element.hasClass('ui-jcoverflip--item')?element:element.parents('.ui-jcoverflip--item');if(item.size()==0){return null;}else{return{element:item,index:item.data('jcoverflip__index')};}}};$.widget('ui.jcoverflip',{_init:function(){this.animationQueue=new animationqueue.AnimationQueue();this.isInit=false;this.goToPoll={id:null};this.goToQueue=[];var items=this.items();this.element.addClass('ui-jcoverflip');items.addClass('ui-jcoverflip--item');var i=items.size();while(i--){var el=items.eq(i);el.data('jcoverflip__index',i);var title=this.options.titles.create(el);title.css({display:'none'}).addClass('ui-jcoverflip--title').appendTo(this.element);el.data('jcoverflip__titleElement',title);} this.element.click(proxy(this,this._clickItem));this._goTo(this.options.current,0,true);this.options.controls.create(this.element,this.length());},_clickItem:function(event){if(this.options.disabled==true){return;} var item=$.jcoverflip.getItemFromElement(event.target);this.element.children().children().addClass('hreflink');if(item!==null&&item.index!=this.current()){this.current(item.index,event);event.preventDefault();return false;} return true;},_nextAndPrevParameters:function(by,wrapAround,callback,originalEvent){if(typeof by=='object'){originalEvent=by;}else if(typeof wrapAround=='object'){originalEvent=wrapAround;}else if(typeof callback=='object'){originalEvent=callback;}else if(typeof originalEvent=='object'){originalEvent=originalEvent;}else{originalEvent={};} if($.isFunction(by)){callback=by;}else if($.isFunction(wrapAround)){callback=wrapAround;}else if($.isFunction(callback)){callback=callback;}else{callback=nofn;} if(typeof(by)=='boolean'){wrapAround=by;}else if(typeof(wrapAround)=='boolean'){wrapAround=wrapAround;}else{wrapAround=true;} by=isNaN(parseInt(by))?1:parseInt(by);return{by:by,wrapAround:wrapAround,callback:callback,originalEvent:originalEvent};},next:function(by,wrapAround,callback,originalEvent){if(this.options.disabled==true){return;} var params=this._nextAndPrevParameters(by,wrapAround,callback,originalEvent);return this._nextAux(params.by,params.wrapAround,params.callback,params.originalEvent,'next');},_nextAux:function(by,wrapAround,callback,originalEvent,eventType){by=by===undefined&&isNaN(by)?1:parseInt(by);wrapAround=wrapAround!==false;var current=this.current();var oldCurrent=current;var length=this.length();if(wrapAround){current=(current+by)%length;current=current<0?current+length:current;}else{current=Math.min(length-1,Math.max(0,current+by));} if(current!=this.current()){this.current(current,originalEvent);} if(eventType&&oldCurrent!=current){var event=$.Event(originalEvent);event.type=this.widgetEventPrefix+eventType;callback.call(this.element,event,{from:oldCurrent,to:current});this._trigger(eventType,originalEvent,{from:oldCurrent,to:current});} return current;},previous:function(by,wrapAround,callback,originalEvent){if(this.options.disabled==true){return;} var params=this._nextAndPrevParameters(by,wrapAround,callback,originalEvent);return this._nextAux(-1*params.by,params.wrapAround,params.callback,params.originalEvent,'previous');},first:function(callback,originalEvent){if(this.options.disabled==true){return;} if(typeof callback=='object'){originalEvent=callback}else if(typeof originalEvent=='object'){originalEvent=originalEvent;}else{originalEvent={};} callback=$.isFunction(callback)?callback:nofn;var from=this.current();var to=this.current(0,originalEvent);if(from!=to){var event=$.Event(originalEvent);event.type=this.widgetEventPrefix+'first';callback.call(this.element,event,{from:from,to:to});this._trigger('first',originalEvent,{from:from,to:to});}},last:function(callback,originalEvent){if(this.options.disabled==true){return;} if(typeof callback=='object'){originalEvent=callback}else if(typeof originalEvent=='object'){originalEvent=originalEvent;}else{originalEvent={};} callback=$.isFunction(callback)?callback:nofn;var from=this.current();var to=this.current(this.length()-1,originalEvent);if(from!=to){var event=$.Event(originalEvent);event.type=this.widgetEventPrefix+'last';callback.call(this.element,event,{from:from,to:to});this._trigger('last',originalEvent,{from:from,to:to});}},current:function(newCurrent,originalEvent){if(newCurrent!==undefined&&!isNaN(newCurrent)&&!this.options.disabled&&newCurrent!=this.options.current){this._goTo(newCurrent,undefined,false,originalEvent);} return this.options.current;},destroy:function(){if(this.options.disabled==true){return;} this._trigger('destroy',{});this.element.removeClass('ui-jcoverflip');var items=this.items();var titleEl;var i=items.length;while(i--){titleEl=items.eq(i).data('jcoverflip__titleElement');this.options.titles.destroy(titleEl);} items.removeClass('ui-jcoverflip--item').find('*').add(items.get()).each(function(){this.removeAttribute('style');});this.options.controls.destroy(this.element);$.widget.prototype.destroy.apply(this,arguments);},enable:function(){$.widget.prototype.enable.apply(this,arguments);this._trigger('enable',{});},disable:function(){$.widget.prototype.disable.apply(this,arguments);this._trigger('disable',{});},option:function(name,value){if(typeof value=='undefined'){return $.widget.prototype.option.apply(this,arguments);} if(name=='current'){return this.current(value);} if(name in{'items':'','titles':'','controls':''}){return this.options.items;} if(name in{'beforeCss':'','afterCss':'','currentCss':''}){this.options[name]=value;this._goTo(this.current(),0,true);} if(name=='time'&&isNaN(parseInt(value))&&parseInt(value)<0){return this.options.time;} return $.widget.prototype.option.apply(this,arguments);},_goTo:function(index,time,force,originalEvent){if(this.options.disabled==true){return;} force=!!force;originalEvent=originalEvent==undefined?{}:originalEvent;time=time===undefined?this.options.time:parseInt(time);var oldCurrent=this.options.current;var current=Math.floor(Math.max(0,Math.min(index,this.length()-1)));this.options.current=current;this.animationQueue.stop();var animationSets=this.animationQueue.get();var i=animationSets.length;while(i--){var to=animationSets[i].getData('to');var goingToTheRight=animationSets[i].getData('goingToTheRight');var rightOfCurrent=to>current;if(rightOfCurrent!=goingToTheRight){this.animationQueue.remove(animationSets[i]);}} animationSets=this.animationQueue.get();var stepsToCurrent=animationSets.length>0?animationSets.pop().getData('to'):oldCurrent;var goingToTheRight=stepsToCurrent=current)||(force&&stepsToCurrent==current)){var animationSet=new animationqueue.AnimationSet();this.animationQueue.queue(animationSet);animationSet.setData('goingToTheRight',goingToTheRight);animationSet.setData('to',stepsToCurrent);var i=items.length;while(i--){var el=items.eq(i);if(istepsToCurrent){var css=this.options.afterCss(el,this.element,i-stepsToCurrent-1);}else{var css=this.options.currentCss(el,this.element,i-stepsToCurrent-1);} var j=css.length;while(j--){var cssI=css[j];animationSet.add(new animationqueue.Animation(cssI.element,cssI.animate));for(var step in cssI.steps){animationSet.add(new animationqueue.AnimationStep(cssI.element,cssI.steps[step],parseFloat(step)));}}} stepsToCurrent+=goingToTheRight?1:-1;} var titleElement=items.eq(current).data('jcoverflip__titleElement');if(titleElement){this.options.titleAnimateIn(titleElement,time,goingToTheRight);} if(current!=oldCurrent){var titleElement=items.eq(oldCurrent).data('jcoverflip__titleElement');if(titleElement){this.options.titleAnimateOut(titleElement,time,goingToTheRight);}} if(!force){this._trigger('start',originalEvent,{to:current,from:oldCurrent});this.animationQueue.start(time,proxy(this,function(timeElapsed){this._trigger('stop',originalEvent,{to:current,from:oldCurrent,time:timeElapsed});}));this._trigger('change',originalEvent,{to:current,from:oldCurrent});}else{this.animationQueue.start(time,nofn);} function stepFactory(el,css){return function(){el.css(css);};};},items:function(reload){if(this.itemsCache===undefined||!!reload){if(this.options.items){this.itemsCache=this.element.find(this.options.items);}else{this.itemsCache=this.element.children();}} return this.itemsCache;},length:function(){var items=this.items();return items.length;}});$.ui.jcoverflip.defaults={items:'',beforeCss:function(el,container,offset){return[$.jcoverflip.animationElement(el,{left:(container.width()/2-210-110*offset)+'px',bottom:'20px'},{}),$.jcoverflip.animationElement(el.find('img'),{opacity:0.5,width:'100px'},{})];},afterCss:function(el,container,offset){return[$.jcoverflip.animationElement(el,{left:(container.width()/2+110+110*offset)+'px',bottom:'20px'},{}),$.jcoverflip.animationElement(el.find('img'),{opacity:0.5,width:'100px'},{})];},currentCss:function(el,container){return[$.jcoverflip.animationElement(el,{left:(container.width()/2-100)+'px',bottom:0},{}),$.jcoverflip.animationElement(el.find('img'),{opacity:1,width:'200px'},{})];},time:500,titles:{create:function(el){var titleText='';var title=$([]);var titleEl=el.find('.title:first');if(titleEl.size()==1){title=titleEl.clone(true);titleEl.css('display','none');title.data('jcoverflip__origin','cloned');title.data('jcoverflip__source',titleEl);}else if(el.attr('title')){titleText=el.attr('title');}else if(el.attr('alt')){titleText=el.attr('alt');}else{titleEl=el.find('[title], [alt]').eq(0);if(titleEl.size()==1){titleText=titleEl.attr('title')||titleEl.attr('alt')||'';}} if(title.size()){title.css({'opacity':0,'display':'block'});}else{title=$(''+titleText+'');title.data('jcoverflip__origin','attribute');} return title;},destroy:function(el){if(el.data('jcoverflip__origin')=='cloned'){el.data('jcoverflip__source').css('display','');} el.remove();}},titleAnimateIn:function(titleElement,time,offset){if(titleElement.css('display')=='none'){titleElement.css({opacity:0,display:'block'});} titleElement.stop().animate({opacity:1},time);},titleAnimateOut:function(titleElement,time,offset){titleElement.stop().animate({opacity:0},time,function(){$(this).css('display','none');});},controls:{create:nofn,destroy:nofn},current:0};$.ui.jcoverflip.getter=['length','current'];})(jQuery);