var Carousel=function(){this.mainContainer=null;this.itemsContanier=null;this.itemsContainerInner=null;this.leftButton=null;this.rightButton=null;this.resizeElement=null;this.scrollBar={container:null,bar:null,enabled:false,dimension:null,caused:false};this.items=[];this.itemsForResize=[];this.settings={itemElement:"li",speed:50,itemsToShow:1,scrollCount:1,activeButtonClassName:"",buttonPressedClassName:{right:"",left:""},endless:false,vertical:false,scrollSupport:true,dimensionAdjustOnResize:true};this.cssProperty="left";this.dimension={item:null,itemStart:null,items:[]};this.current={left:1,right:this.settings.itemsToShow};this.moveInc={left:0,right:0};this.maxAnimationTime=1500;this.oneStepAnimationTime=25;this.itemMargins=0;this.itemsAdd=0;this.moving=false;this.movingDisabled=false;this.movingFixed=false};Carousel.prototype.init=function(d){var b=this;if(!d.elements||!d.elements.mainContainer||!(this.mainContainer=$("#"+d.elements.mainContainer))||!this.mainContainer.length||!d.elements.itemsContainer||!(this.itemsContainer=$("#"+d.elements.itemsContainer))||!this.itemsContainer.length||!d.elements.itemsContainerInner||!(this.itemsContainerInner=$("#"+d.elements.itemsContainerInner))||!this.itemsContainerInner.length||!d.elements.leftButton||!(this.leftButton=$("#"+d.elements.leftButton))||!this.leftButton.length||!d.elements.rightButton||!(this.rightButton=$("#"+d.elements.rightButton))||!this.rightButton.length){return this.onError()}this.rightButton.active=false;this.leftButton.active=false;if(d.elements.scrollBarContainer&&d.elements.scrollBarBar&&(this.scrollBar.container=$("#"+d.elements.scrollBarContainer))&&this.scrollBar.container.length&&(this.scrollBar.bar=$("#"+d.elements.scrollBarBar))&&this.scrollBar.bar.length){this.scrollBar.enabled=true}if(d.settings){this.settings.itemElement=d.settings.itemElement||this.settings.itemElement}this.itemsContainerInner.css(this.cssProperty,"0px");this.items=this.itemsContainerInner.find(this.settings.itemElement);if(d.settings){if(d.settings.speed&&d.settings.speed<=100&&d.settings.speed>0){this.settings.speed=d.settings.speed}if(d.settings.itemsToShow&&!isNaN(d.settings.itemsToShow)&&d.settings.itemsToShow>0&&this.items.length>=d.settings.itemsToShow){this.settings.itemsToShow=d.settings.itemsToShow}if(d.settings.scrollCount&&!isNaN(d.settings.scrollCount)&&(d.settings.scrollCount<this.items.length)){this.settings.scrollCount=d.settings.scrollCount}this.settings.activeButtonClassName=d.settings.activeButtonClassName||this.settings.activeButtonClassName;if(d.settings.buttonPressedClassName&&d.settings.buttonPressedClassName.left&&d.settings.buttonPressedClassName.right){this.settings.buttonPressedClassName.left=d.settings.buttonPressedClassName.left;this.settings.buttonPressedClassName.right=d.settings.buttonPressedClassName.right}if(d.settings.endless){this.settings.endless=d.settings.endless;this.itemsAdd=this.settings.itemsToShow;this.scrollBar.enabled=false}if(typeof d.settings.vertical!="undefined"){this.settings.vertical=d.settings.vertical}if(this.settings.vertical){this.cssProperty="top"}if(typeof d.settings.scrollSupport!="undefined"){this.settings.scrollSupport=d.settings.scrollSupport}if(typeof d.settings.dimensionAdjustOnResize!="undefined"){this.settings.dimensionAdjustOnResize=d.settings.dimensionAdjustOnResize}if(!this.settings.dimensionAdjustOnResize){this.settings.endless=false}}if(!this.items.length){return this.onError()}this.current.right=this.settings.itemsToShow;if(this.items.length&&this.items.length<this.settings.itemsToShow){this.current.right=this.items.length}if(this.settings.endless){var c=this.itemsContainerInner.find(this.settings.itemElement+":first");this.items.each(function(f,e){if(f<b.settings.itemsToShow){$(e).clone().insertAfter(b.itemsContainerInner.find(b.settings.itemElement+":last"))}if(f>(b.items.length-b.settings.itemsToShow-1)){$(e).clone().insertBefore(c)}})}this.itemsForResize=this.itemsContainerInner.find(this.settings.itemElement);this.resizeElement=this.itemsContainer.find(".resize");if(!this.resizeElement.length){this.resizeElement=this.itemsContainer}if(this.settings.vertical){this.itemMargins=this.items.outerHeight(true)-this.items.innerHeight();this.dimension.itemStart=this.items.innerHeight();if(this.dimensisonAdjustOnResize){this.itemsContainer.css("min-height",this.settings.itemsToShow*(this.dimension.itemStart+this.itemMargins))}}else{this.itemMargins=this.items.outerWidth(true)-this.items.innerWidth();this.dimension.itemStart=this.items.innerWidth();if(this.dimensisonAdjustOnResize){this.itemsContainer.css("min-width",this.settings.itemsToShow*(this.dimension.itemStart+this.itemMargins))}}this.itemsForResize.each(function(e){b.dimension.items[e]=b.settings.vertical?$(this).innerHeight():$(this).innerWidth()});this.recalculateOnResize();this.moveInc.left=Math.round(this.dimension.item/8*(this.settings.speed/100));this.moveInc.right=-this.moveInc.left;if(this.settings.endless){this.setButtonActive(this.rightButton);this.setButtonActive(this.leftButton)}else{this.setButtonActive(this.rightButton)}var a={rightButtonMouseDown:function(){if(b.settings.buttonPressedClassName.right){$(this).addClass(b.settings.buttonPressedClassName.right)}if(!b.moving){b.movingDisabled=false;b.scrollBar.caused=false;b.move(b.settings.scrollCount,true)}return false},leftButtonMouseDown:function(){if(b.settings.buttonPressedClassName.left){$(this).addClass(b.settings.buttonPressedClassName.left)}if(!b.moving){b.movingDisabled=false;b.scrollBar.caused=false;b.move(-b.settings.scrollCount,true)}return false},mouseWheel:function(e,f){if(!b.moving){b.movingDisabled=false;b.scrollBar.caused=false;f=-f/Math.abs(f);b.move(f)}return false},mouseUp:function(){if(!b.movingDisabled){if(b.settings.buttonPressedClassName.left){b.leftButton.removeClass(b.settings.buttonPressedClassName.left)}if(b.settings.buttonPressedClassName.right){b.rightButton.removeClass(b.settings.buttonPressedClassName.right)}b.movingDisabled=true}},windowResize:function(){b.recalculateOnResize()},scrollBarContainerClick:function(i){if($(i.target).attr("class")==b.scrollBar.bar.attr("class")){return false}var g=b.settings.vertical?(i.pageY-$(this).offset().top):(i.pageX-$(this).offset().left);var h=b.settings.vertical?($(this).height()-b.scrollBar.bar.outerHeight(true)):($(this).width()-b.scrollBar.bar.outerWidth(true));if(g>h){g=h}var f=Math.round(g/b.scrollBar.dimension);f=(f>b.items.length-1)?b.items.length-1:f;b.scrollBar.bar.css(b.cssProperty,g);if(b.current.left-1!=f){b.scrollBar.caused=true}b.moveTo(f)}};this.rightButton.mousedown(a.rightButtonMouseDown);this.leftButton.mousedown(a.leftButtonMouseDown);if(this.settings.scrollSupport){this.mainContainer.mousewheel(a.mouseWheel)}$(window).resize(a.windowResize);$(document).mouseup(a.mouseUp);if(this.scrollBar.enabled){if(this.settings.vertical){this.scrollBar.container.height(this.itemsContainer.height());this.scrollBar.dimension=Math.round(this.scrollBar.container.innerHeight()/this.items.length);this.scrollBar.bar.height(parseInt(this.settings.itemsToShow*this.scrollBar.container.innerHeight()/this.items.length))}else{this.scrollBar.container.width(this.itemsContainer.width());this.scrollBar.dimension=Math.round(this.scrollBar.container.width()/this.items.length);this.scrollBar.bar.width(parseInt(this.settings.itemsToShow*this.scrollBar.container.width()/this.items.length))}this.scrollBar.container.click(a.scrollBarContainerClick);this.scrollBar.bar.draggable({right:this.settings.vertical?-1:0,bottom:this.settings.vertical?0:-1,discreet:{dimension:{y:b.scrollBar.dimension,x:b.scrollBar.dimension},fire:function(e){if(!b.moving){b.movingDisabled=false;var f=b.settings.vertical?e.y:e.x;if(b.current.left<(f+1)){b.scrollBar.caused=true;b.move(+1)}if(b.current.right>(b.settings.itemsToShow+f)){b.scrollBar.caused=true;b.move(-1)}}}},end:function(e){b.moveTo(b.settings.vertical?e.y:e.x)}})}$(window).unload(function(){if(a){b.rightButton.unbind("click",a.rightButtonMouseDown);a.rightButtonMouseDown=null;b.leftButton.unbind("click",a.leftButtonMouseDown);a.leftButtonMouseDown=null;b.mainContainer.unbind("mousewheel",a.mouseWheel);a.mouseWheel=null;if(b.scrollBar.container){b.scrollBar.container.unbind("click",a.scrollBarContainerClick)}$(document).unbind("mouseup",a.mouseUp);a.mouseUp=null;$(window).unbind("resize",a.windowResize);a.windowResize=null;b=null}})};Carousel.prototype.move=function(b,a){if(!isNaN(b)&&(b!=0)&&!this.movingDisabled&&!this.moving){if(this.settings.endless){if(this.current.right==(this.items.length+this.settings.itemsToShow)){this.itemsContainerInner.css(this.cssProperty,-this.getItemOffset(this.settings.itemsToShow));this.current.left=1;this.current.right=this.settings.itemsToShow}if(this.current.left==1-this.settings.itemsToShow){this.itemsContainerInner.css(this.cssProperty,-this.getItemOffset(this.items.length));this.current.right=this.items.length;this.current.left=this.items.length-this.settings.itemsToShow+1}}else{if((b>0&&this.current.right==this.items.length)||(b<0&&this.current.left==1)){return false}}this.moving=true;if(!this.settings.endless){if(b>0){b=this.current.right+b>this.items.length?this.items.length-this.current.right:b}else{b=this.current.left+b<1?-(this.current.left-1):b}}if(a){this.moveMargin=-this.getItemOffset(this.current.left+this.itemsAdd+b-1);this.currentIterations=0;this.moveIntervalId=setInterval((function(c){return function(){c.moveStep(b)}})(this),this.oneStepAnimationTime)}else{this.moveMargin=-this.getItemOffset(this.current.left+this.itemsAdd+b-1);this.itemsContainerInner.css(this.cssProperty,this.moveMargin);this.moveFinishedHandler(b)}}};Carousel.prototype.moveStep=function(a){if(this.movingDisabled&&((a>0&&(parseInt(this.itemsContainerInner.css(this.cssProperty))<=this.moveMargin))||((a<0)&&(parseInt(this.itemsContainerInner.css(this.cssProperty))>=this.moveMargin)))){clearInterval(this.moveIntervalId);this.moveFinishedHandler(a/Math.abs(a));return false}if(a>0){if((parseInt(this.itemsContainerInner.css(this.cssProperty))<=-this.getItemOffset(this.current.left+this.itemsAdd))&&(parseInt(this.itemsContainerInner.css(this.cssProperty))>-this.getItemOffset(this.current.left+this.itemsAdd+1))){this.current.left++;this.current.right++;this.currentIterations++;this.handleScrollBarPosition();if(this.currentIterations==Math.abs(a)&&!this.movingFixed){this.moveMargin=-this.getItemOffset(this.current.left+this.itemsAdd+a-1);this.currentIterations=0}if(this.settings.endless){if(this.current.right==(this.items.length+this.settings.itemsToShow)){this.itemsContainerInner.css(this.cssProperty,-this.getItemOffset(this.settings.itemsToShow));this.current.left=1;this.current.right=this.itemsAdd;this.moveMargin=-this.getItemOffset(a-this.currentIterations+this.itemsAdd)}}else{if(this.current.right==this.items.length){clearInterval(this.moveIntervalId);this.moveFinishedHandler(0);return false}}}if((parseInt(this.itemsContainerInner.css(this.cssProperty))+this.moveInc.right)<=this.moveMargin){this.itemsContainerInner.css(this.cssProperty,this.moveMargin)}else{this.itemsContainerInner.css(this.cssProperty,parseInt(this.itemsContainerInner.css(this.cssProperty))+this.moveInc.right);if(this.movingFixed){this.movingDisabled=true}}}else{if((parseInt(this.itemsContainerInner.css(this.cssProperty))<-this.getItemOffset(this.current.left+this.itemsAdd-3))&&(parseInt(this.itemsContainerInner.css(this.cssProperty))>=-this.getItemOffset(this.current.left+this.itemsAdd-2))){this.current.left--;this.current.right--;this.currentIterations++;this.handleScrollBarPosition();if(this.currentIterations==Math.abs(a)&&!this.movingFixed){this.moveMargin=-this.getItemOffset(this.current.left+this.itemsAdd+a-1);this.currentIterations=0}if(this.settings.endless){if(this.current.left==1-this.settings.itemsToShow){this.itemsContainerInner.css(this.cssProperty,-this.getItemOffset(this.items.length));this.current.right=this.items.length;this.current.left=this.items.length-this.itemsAdd+1;this.moveMargin=-this.getItemOffset(this.current.right+this.currentIterations+a)}}else{if(this.current.left==1){clearInterval(this.moveIntervalId);this.moveFinishedHandler(0);return false}}}if((parseInt(this.itemsContainerInner.css(this.cssProperty))+this.moveInc.left)>=this.moveMargin){this.itemsContainerInner.css(this.cssProperty,this.moveMargin)}else{this.itemsContainerInner.css(this.cssProperty,parseInt(this.itemsContainerInner.css(this.cssProperty))+this.moveInc.left);if(this.movingFixed){this.movingDisabled=true}}}};Carousel.prototype.moveFinishedHandler=function(a){this.current.right+=a;this.current.left+=a;if(!this.settings.endless){if(this.current.left==1){this.setButtonInactive(this.leftButton)}else{this.setButtonActive(this.leftButton)}if(this.current.right==this.items.length){this.setButtonInactive(this.rightButton)}else{this.setButtonActive(this.rightButton)}}this.handleScrollBarPosition();this.scrollBar.caused=false;this.movingFixed=false;this.moving=false;return false};Carousel.prototype.recalculateOnResize=function(){var a=this;if(this.itemsContainer.is(":visible")){var b=Math.ceil((this.settings.vertical?this.itemsContainer.innerHeight(true):this.itemsContainer.innerWidth())/this.settings.itemsToShow);this.dimension.item=b;if(this.settings.dimensionAdjustOnResize){if(!this.settings.vertical){if(b<this.dimension.itemStart){this.dimension.item=this.dimension.itemStart+this.itemMargins;this.resizeElement.width(this.settings.itemsToShow*this.dimension.item)}else{this.itemsContainer.css("width","auto")}}else{this.resizeElement.height(this.settings.itemsToShow*this.dimension.item)}this.itemsForResize.each(function(c){if(a.settings.vertical){$(this).height(a.dimension.item-a.itemMargins);a.dimension.items[c]=$(this).outerHeight(true)}else{$(this).width(a.dimension.item-a.itemMargins);a.dimension.items[c]=$(this).outerWidth(true)}});this.itemsContainerInner.css(this.cssProperty,-this.getItemOffset(this.current.left+this.itemsAdd-1))}}};Carousel.prototype.setButtonInactive=function(a){if(a.active&&this.settings.activeButtonClassName){a.removeClass(this.settings.activeButtonClassName);a.active=false}};Carousel.prototype.setButtonActive=function(a){if(!a.active&&this.settings.activeButtonClassName){a.addClass(this.settings.activeButtonClassName);a.active=true}};Carousel.prototype.handleScrollBarPosition=function(){if(this.scrollBar.enabled&&!this.scrollBar.caused&&this.scrollBar.dimension){this.scrollBar.bar.css(this.cssProperty,this.current.right==this.items.length?parseInt(this.scrollBar.container.innerHeight()-this.scrollBar.bar.outerHeight(true)):(this.current.left-1)*this.scrollBar.dimension)}};Carousel.prototype.getItemOffset=function(c){var b=0;if(c>0){for(var a=0;a<c;a++){if(this.dimension.items[a]){b+=this.dimension.items[a]}}}else{for(var a=this.dimension.items.length+c;a<this.dimension.items.length;a++){if(this.dimension.items[a]){b-=this.dimension.items[a]}}}return b};Carousel.prototype.moveTo=function(b,a){if(!isNaN(b)&&this.items[b]&&!this.moving&&((this.current.left-1)!=b)){this.movingDisabled=false;this.movingFixed=true;this.move(b+1-this.current.left,a);return true}return false};Carousel.prototype.onError=function(){this.mainContainer.hide();return false};
