(function($){$.fn.WikioCarousel=function(opt){if(this.length>1){this.each(function(){$(this).WikioCarousel(opt);
});return this;}opt=$.extend({fps:25,duration:500,amount:100,step:1,eventposition:4,loadfunction:false, carouselName: "carousel", carouselLeft:"carouselleft", carouselright:"carouselright",carouselNav:"carousel-nav",initX:0,selectedItem:"selected"},opt);if(this[0]){var carousel=new Carousel(this[0],opt);this[0].Carousel=carousel;return this[0];}};
function Carousel(domContainer,opt){this.domContainer=domContainer;this.opt=opt;this.moves=new Array(Math.floor(opt.duration/opt.fps));this.cList=$(this.domContainer).find("ul");this.length=$(this.cList).find("li").length;this.history=new Array();var T=this;T.x=0;if(typeof T.opt.loadfunction=="function"){$(T.domContainer).bind("endLoad",T.opt.loadfunction);}var i;for(i=0;i<this.moves.length;++i){
this.moves[i]=Math.sin(Math.PI/2*i/(this.moves.length-1));
}this.moves[this.moves.length-1]=1;var contWidth = parseInt($(this.domContainer).find("ul."+T.opt.carouselName).get(0).offsetWidth);
var cptUL=0;var hasSelection=false;$(this.domContainer).find("ul."+T.opt.carouselName+" > li").each(function(i){$(this).css("position", "absolute");var padding=parseInt($(this).css("padding-left"))+parseInt($(this).css("padding-right"));
var width=parseInt($(this).get(0).offsetWidth);$(this).css("left",i*(width));var cptWidth=(width + padding);
cptUL+=cptWidth;if($(this).hasClass(T.opt.selectedItem)){T.opt.initX=parseInt(cptUL-((width+padding)/2) -(contWidth/2));};});$(this.domContainer).find("#"+T.opt.carouselright+" > a").click(function(e){e.preventDefault();T.stepAni(opt.amount);var p=$(T.domContainer).find("ul."+T.opt.carouselName+" > li").size();if((p-T.position)<=T.opt.eventposition && typeof T.opt.loadfunction=="function"){$(T.domContainer).trigger("endLoad");}});$(this.domContainer).find("#"+T.opt.carouselright+" > a").mouseover(function(e){$(T.domContainer).find("ul > li.rtl").removeClass("rtl");});$(this.domContainer).find("#"+T.opt.carouselLeft+" > a").click(function(e){e.preventDefault();T.stepAni((-1)*opt.amount);});$(this.domContainer).find("#"+T.opt.carouselLeft+" > a").mouseover(function(e){$(T.domContainer).find("ul > li.arrow").addClass("rtl");});this.stepAni=stepAni;this.setPositioning=setPositioning;this.stopLoading=stopLoading;$(T.domContainer).bind("stopLoad",{"o":this},this.stopLoading);$(T.domContainer).bind("loadLi",{"o":this},this.setPositioning);T.stepAni(T.opt.initX);return this;}function stepAni(amount){if(this.ani){clearInterval(this.ani.timer);clearTimeout(this.arrows);}var T=this;function setAniStep(){T.ani.i++;if(T.ani.i==T.moves.length){
clearInterval(T.ani.timer);
T.ani=null;
return this;
}var x=T.ani.start+(T.opt.step*amount*T.moves[T.ani.i]);T.x=T.ani.start+(T.opt.step*amount);$(T.cList).scrollLeft(x);}function setArrow(){var carouselw=$(T.cList).attr("clientWidth")+$(T.cList).scrollLeft()+T.opt.amount;var imgw=$(T.cList).find("li").attr("clientWidth");T.position=Math.ceil(carouselw/imgw);$(T.domContainer).find("."+T.opt.carouselNav+" > a").removeClass("locked");if(T.x<=0){$(T.domContainer).find("#"+T.opt.carouselLeft+" > a").addClass("locked");}else if(Math.ceil(T.x)>=(parseInt(carouselw)-(2*amount))){$(T.domContainer).find("#"+T.opt.carouselright+" > a").addClass("locked");}}this.ani={i:0,start:$(T.cList).scrollLeft()};this.ani.timer=setInterval(setAniStep,Math.floor(this.opt.duration/this.opt.fps));this.arrows=setTimeout(setArrow,Math.floor(this.opt.duration));if(amount<=0){$(T.domContainer).find("ul > li.arrow").addClass("rtl");}else{$(T.domContainer).find("ul > li.rtl").removeClass("rtl");}return this;}
function setPositioning(event){var len=parseInt(this.length-1);if(isNaN(len))var len=0;var i=0;$("#carousel").find("ul."+event.data.o.opt.carouselName+" > li:gt("+(len)+")").each(function(i){i++;$(this).css("position","absolute");var padding=parseInt($(this).css("padding-left"))+parseInt($(this).css("padding-right"));var width=parseInt($(this).css("width"));$(this).css("left",(len+i)*(width+padding));});this.length=$("#carousel").find("ul."+event.data.o.opt.carouselName+" > li").size();}function stopLoading(event){event.data.o.opt.loadfunction=false;return false;}})(jQuery);
