(function($,undefined){var _super=$.Widget.prototype,horizontal={pos:'left',pos2:'right',dim:'width'},vertical={pos:'top',pos2:'bottom',dim:'height'};$.widget('ui.carousel',{oldClass:null,options:{itemsPerPage:'auto',itemsPerTransition:'auto',orientation:'horizontal',noOfRows:1,pagination:true,insertPagination:null,nextPrevActions:true,insertNextAction:null,insertPrevAction:null,speed:'normal',easing:'swing',startAt:null,init:null,beforeAnimate:null,afterAnimate:null},_create:function(){this.itemIndex=1;this._elements();this._addClasses();this._defineOrientation();this._addMask();this._setMaskDim();this._setItemDim();this._setNoOfItems();this._setNoOfPages();this._setRunnerWidth();this._setLastPos();this._setLastItem();this._addPagination();this._addNextPrevActions();if(this.options.startAt){this.goToItem(this.options.startAt,false);}
this._updateUi();this._trigger('init',null,this._getData());},_elements:function(){var elems=this.elements={};elems.mask=this.element.find('.mask');elems.runner=this.element.find('ul');elems.items=elems.runner.children('li');elems.pagination=null;elems.nextAction=null;elems.prevAction=null;},_addClasses:function(){if(!this.oldClass){this.oldClass=this.element.attr('class');}
this._removeClasses();var baseClass=this.widgetBaseClass,classes=[];classes.push(baseClass);classes.push(baseClass+'-'+this.options.orientation);classes.push(baseClass+'-items-'+this.options.itemsPerPage);classes.push(baseClass+'-rows-'+this.options.noOfRows);this.element.addClass(classes.join(' '));},_removeClasses:function(){var uiClasses=[],current,fragments;this.element.removeClass(function(i,currentClasses){currentClasses=currentClasses.split(' ');$.each(currentClasses,function(i){current=currentClasses[i];fragments=current.split('-');if(fragments[0]==='ui'&&fragments[1]==='carousel'){uiClasses.push(current);}});return uiClasses.join(' ');});},_defineOrientation:function(){if(this.options.orientation==='horizontal'){this.isHorizontal=true;this.helperStr=horizontal;}
else{this.isHorizontal=false;this.helperStr=vertical;this.options.noOfRows=1;}},_addMask:function(){var elems=this.elements;if(elems.mask.length){return;}
elems.mask=elems.runner
.wrap('<div class="mask" />')
.parent();this.maskAdded=true;},_setMaskDim:function(){this.maskDim=this.elements.mask[this.helperStr.dim]();},_setItemDim:function(){this.itemDim=this.elements.items['outer'+this.helperStr.dim.charAt(0).toUpperCase()+this.helperStr.dim.slice(1)](true);},_getItemsPerPage:function(){if(typeof this.options.itemsPerPage==='number'){return this.options.itemsPerPage;}
return Math.floor(this.maskDim/this.itemDim);},_setNoOfItems:function(){this.noOfItems=Math.ceil(this.elements.items.length/this.options.noOfRows);if(this.options.noOfRows>1&&this.noOfItems<this._getItemsPerPage()){this.noOfItems=this._getItemsPerPage();}},_setNoOfPages:function(){this.noOfPages=Math.ceil((this.noOfItems-this._getItemsPerPage())/this._getItemsPerTransition())+1;},_getItemsPerTransition:function(){if(typeof this.options.itemsPerTransition==='number'){return this.options.itemsPerTransition;}
return this._getItemsPerPage();},_setRunnerWidth:function(noOfItems){if(!this.isHorizontal){return;}
var width=this.itemDim*(noOfItems||this.noOfItems);this.elements.runner.width(width);},_setLastPos:function(){var lastItem=this.elements.items.eq(this.noOfItems-1);if(lastItem.length){this.lastPos=lastItem.position()[this.helperStr.pos]+this.itemDim-
this.maskDim-parseInt(lastItem.css('margin-'+this.helperStr.pos2),10);}},_setLastItem:function(){this.lastItem=this.noOfItems-(this._getItemsPerPage()-1);},_addPagination:function(){if(!this.options.pagination){return;}
var self=this,elems=this.elements,opts=this.options,links=[],i;this._removePagination();for(i=1;i<=this.noOfPages;i++){links[i]='<li><a href="#page-'+i+'">'+i+'</a></li>';}
elems.pagination=$('<ol class="pagination-links" />')
.append(links.join(''))
.delegate('a','click.carousel',function(){self.goToPage(this.hash.split('-')[1]);return false;});if($.isFunction(opts.insertPagination)){opts.insertPagination.apply(elems.pagination[0]);}
else{elems.pagination.insertAfter(elems.mask);}},_removePagination:function(){if(this.elements.pagination){this.elements.pagination.remove();this.elements.pagination=null;}},goToPage:function(pageIndex,animate){var itemIndex=(pageIndex-1)*this._getItemsPerTransition()+1;this.oldItemIndex=this.itemIndex;this.itemIndex=itemIndex;this._slide(animate);},goToItem:function(itemIndex,animate){if(typeof itemIndex!=='number'){itemIndex=$(itemIndex).index()+1;}
this.oldItemIndex=this.itemIndex;this.itemIndex=itemIndex;this._slide(animate);},_addNextPrevActions:function(){if(!this.options.nextPrevActions){return;}
var self=this,elems=this.elements,opts=this.options;this._removeNextPrevActions();elems.prevAction=$('<a href="#" class="prev">Prev</a>')
.bind('click.carousel',function(){self.prev();return false;});;elems.nextAction=$('<a href="#" class="next">Next</a>')
.bind('click.carousel',function(){self.next();return false;});if($.isFunction(opts.insertPrevAction)){opts.insertPrevAction.apply(elems.prevAction[0]);}
else{elems.prevAction.appendTo(this.element);}
if($.isFunction(opts.insertNextAction)){opts.insertNextAction.apply(elems.nextAction[0]);}
else{elems.nextAction.appendTo(this.element);}},_removeNextPrevActions:function(){var elems=this.elements;if(elems.nextAction){elems.nextAction.remove();elems.nextAction=null;}
if(elems.prevAction){elems.prevAction.remove();elems.prevAction=null;}},next:function(){this.oldItemIndex=this.itemIndex;this.itemIndex+=this._getItemsPerTransition();this._slide();},prev:function(){this.oldItemIndex=this.itemIndex;this.itemIndex-=this._getItemsPerTransition();this._slide();},_updateUi:function(){var elems=this.elements,index=this.itemIndex,isVoid=this.noOfItems<=this._getItemsPerPage();if(this.options.pagination){if(isVoid){elems.pagination.addClass('void');}
else{elems.pagination
.children('li')
.removeClass('current')
.eq(this._getPage()-1)
.addClass('current');}}
if(this.options.nextPrevActions){var nextPrev=elems.nextAction.add(elems.prevAction);nextPrev.removeClass('disabled');if(isVoid){nextPrev.addClass('void');}
else{nextPrev.removeClass('void');if(index===this.lastItem){elems.nextAction.addClass('disabled');}
else if(index===1){elems.prevAction.addClass('disabled');}}}},_getPage:function(index){index=index!==undefined?index:this.itemIndex;index-=1;return Math.ceil(index/this._getItemsPerTransition())+1;},_slide:function(animate){var self=this,speed=animate===false?0:this.options.speed,animateProps={},pos;pos=this._getPos();animateProps[this.helperStr.pos]=-pos;this._trigger('beforeAnimate',null,this._getData());this.elements.runner
.stop()
.animate(animateProps,speed,this.options.easing,function(){self._trigger('afterAnimate',null,self._getData());});this._updateUi();},_getPos:function(){var pos;if(this.itemIndex>this.lastItem){this.itemIndex=this.lastItem;}
else if(this.itemIndex<1){this.itemIndex=1;}
pos=this.elements.items.eq(this.itemIndex-1).position()[this.helperStr.pos];if(pos>this.lastPos){pos=this.lastPos;}
return pos;},_getData:function(){return{index:this.itemIndex,page:this._getPage(),oldIndex:this.oldItemIndex,oldPage:this._getPage(this.oldItemIndex),noOfItems:this.noOfItems,noOfPages:this.noOfPages,elements:this.elements}},refresh:function(items){this.elements.items=items||this.elements.runner.children('li');this._addClasses();this._setMaskDim();this._setItemDim();this._setNoOfItems();this._setRunnerWidth();this._setLastPos();this._setLastItem();this._setNoOfPages();this._addPagination();this.goToItem(this.itemIndex,false);this._updateUi();},_setOption:function(option,value){var elems=this.elements,opts=this.options;_super._setOption.apply(this,arguments);switch(option){case'itemsPerPage':this.refresh();break;case'itemsPerTransition':this.refresh();break;case'noOfRows':if(this.isHorizontal){this.refresh();}
else{opts.noOfRows=1;}
break;case'orientation':elems.runner.width('');elems.runner.css(this.helperStr.pos,'');this._defineOrientation();this.refresh();break;case'pagination':if(value){this._addPagination();this._updateUi();}
else{this._removePagination();}
break;case'nextPrevActions':if(value){this._addNextPrevActions();this._updateUi();}
else{this._removeNextPrevActions();}
break;}},destroy:function(){var elems=this.elements,cssProps={};this.element.removeClass().addClass(this.oldClass);if(this.maskAdded){elems.runner
.unwrap('.mask');}
cssProps[this.helperStr.pos]='';cssProps[this.helperStr.dim]='';elems.runner.css(cssProps);this._removePagination();this._removeNextPrevActions();_super.destroy.apply(this,arguments);}});$.ui.carousel.version='0.7.4';})(jQuery);
