jQuery.fn.extend({jcarousel:function(o){return this.each(function(){new jQuery.jcarousel(this,o)})}});jQuery.extend({jcarousel:function(e,o){var publ=this;publ.scope=function(){return priv.scope};publ.list=function(){return priv.list};publ.size=function(){return priv.size};publ.init=function(o){return priv.init(o)};publ.get=function(idx){return priv.get(idx)};publ.add=function(idx,html){return priv.add(idx,html)};publ.available=function(first,last){return last==undefined?priv.end>=first:priv.end>=last};publ.loaded=function(){priv.loaded()};publ.next=function(){priv.next()};publ.prev=function(){priv.prev()};publ.scroll=function(i){if(publ.available(i)){priv.scroll(i)}};var priv={o:{orientation:"horizontal",itemStart:1,itemVisible:3,itemScroll:null,scrollAnimation:"fast",autoScroll:0,autoScrollStopOnInteract:true,autoScrollStopOnMouseover:false,autoScrollResumeOnMouseout:false,wrap:false,wrapPrev:false,itemWidth:null,itemHeight:null,loadItemHandler:null,nextButtonStateHandler:null,prevButtonStateHandler:null,itemFirstInHandler:null,itemFirstOutHandler:null,itemLastInHandler:null,itemLastOutHandler:null,itemVisibleInHandler:null,itemVisibleOutHandler:null,noButtons:false,buttonNextHTML:'<button type="button">&gt;&gt;</button>',buttonPrevHTML:'<button type="button">&lt;&lt;</button>'},scope:null,list:null,horiz:true,top:0,left:0,size:0,end:0,first:0,prevFirst:0,last:0,prevLast:0,inAnimation:false,autoTimer:null,nextClick:function(){priv.next()},prevClick:function(){priv.prev()},itemFormat:{"float":"left","styleFloat":"left","overflow":"hidden","listStyle":"none"},options:function(o){if(o)jQuery.extend(priv.o,o);priv.o.itemStart=Math.max(1,priv.intval(priv.o.itemStart));priv.o.itemScroll=priv.o.itemScroll||priv.o.itemVisible;if(priv.o.itemWidth)priv.itemFormat.width=priv.o.itemWidth+"px";if(priv.o.itemHeight)priv.itemFormat.height=priv.o.itemHeight+"px";priv.horiz=priv.o.orientation=="vertical"?false:true},init:function(o){priv.options(o);if(priv.size==0){var dummy=priv.format(document.createElement("li"),1).get(0);priv.list.appendChild(dummy)}var i=jQuery("li",priv.list).get(0);var itemWidth=i.offsetWidth+priv.margin(i,"marginLeft")+priv.margin(i,"marginRight");var itemHeight=i.offsetHeight+priv.margin(i,"marginTop")+priv.margin(i,"marginBottom");if(priv.horiz){priv.dimension=itemWidth;var clipW=itemWidth*priv.o.itemVisible-priv.margin(i,"marginRight");var clipH=itemHeight}else{priv.dimension=itemHeight;var clipW=itemWidth;var clipH=itemHeight*priv.o.itemVisible-priv.margin(i,"marginBottom")}jQuery(".jcarousel-clip",priv.scope).css({"zIndex":"2","padding":0,"margin":0,"width":clipW+"px","height":clipH+"px","overflow":"hidden","position":"relative"});if(dummy!=undefined)priv.list.removeChild(dummy);priv.resize()},prepare:function(e,o){priv.options(o);if(e.nodeName=="UL"||e.nodeName=="OL"){priv.list=e;var scope=jQuery(priv.list).parent().get(0);if(jQuery.className.has(scope.className,"jcarousel-clip")){if(!jQuery.className.has(jQuery(scope).parent().get(0).className,"jcarousel-scope"))scope=jQuery(scope).wrap('<div class="jcarousel-scope"></div>');scope=jQuery(scope).parent().get(0)}else if(!jQuery.className.has(scope.className,"jcarousel-scope"))scope=jQuery(priv.list).wrap('<div class="jcarousel-scope"></div>').parent().get(0);priv.scope=scope}else{priv.scope=e;priv.list=jQuery("ul",priv.scope).get(0)||jQuery("ol",priv.scope).get(0)}priv.size=priv.end=jQuery("li",priv.list).size();if(priv.size>0){var idx=1;jQuery("li",priv.list).each(function(){priv.format(this,idx++)})}if(!jQuery.className.has(jQuery(priv.list).parent().get(0).className,"jcarousel-clip"))jQuery(priv.list).wrap('<div class="jcarousel-clip"></div>');if(!priv.o.noButtons){if(jQuery(".jcarousel-prev",priv.scope).size()==0){var dummy=jQuery(document.createElement("div")).html(priv.o.buttonPrevHTML).get(0);jQuery(".jcarousel-clip",priv.scope).before(jQuery(dummy.firstChild).addClass("jcarousel-prev"))}if(jQuery(".jcarousel-next",priv.scope).size()==0){var dummy=jQuery(document.createElement("div")).html(priv.o.buttonNextHTML).get(0);jQuery(".jcarousel-clip",priv.scope).before(jQuery(dummy.firstChild).addClass("jcarousel-next"))}jQuery(".jcarousel-prev",priv.scope).css({"zIndex":"3"});jQuery(".jcarousel-next",priv.scope).css({"zIndex":"3"})}if(priv.o.autoScrollStopOnMouseover){if(priv.o.autoScrollResumeOnMouseout){jQuery(".jcarousel-clip",priv.scope).bind("mouseover",function(){priv.stopAuto()}).bind("mouseout",function(){priv.startAuto()})}else{jQuery(".jcarousel-clip",priv.scope).bind("mouseover",function(){priv.disableAuto()})}}priv.top=0;priv.left=0;jQuery(priv.list).css({"zIndex":"1","position":"relative","top":priv.top+"px","left":priv.left+"px","margin":0,"padding":0}).addClass("jcarousel-list");jQuery(priv.scope).addClass("jcarousel-scope").show().find(":hidden").show()},get:function(idx){return jQuery(".jcarousel-item-"+idx,priv.list)},add:function(idx,s){var item=priv.get(idx);if(item.size()==0){var item=priv.format(document.createElement("li"),idx);jQuery(priv.list).append(item);priv.size++;if(priv.size>priv.end)priv.end=priv.size;priv.resize()}return item.html(s)},available:function(first,last){if(priv.end>=last)return true;priv.end=last;return false},load:function(first,last){if(priv.o.loadItemHandler==null)return priv.loaded();priv.buttons(false,false);priv.o.loadItemHandler(publ,first,last,priv.available(first,last))},loaded:function(){if(priv.first>1&&priv.last<priv.size){priv.buttons(true,true)}else if(priv.first==1&&priv.last<priv.size){priv.buttons(true,priv.o.wrapPrev)}else if(priv.first>1&&priv.last>=priv.size){priv.buttons(priv.o.wrap,true)}},next:function(){priv.stopAuto();if(priv.o.autoScrollStopOnInteract)priv.disableAuto();priv.doNext()},doNext:function(){priv.scroll((priv.o.wrap&&priv.last==priv.size)?1:priv.first+priv.o.itemScroll);if(priv.o.wrap||priv.last<priv.size)priv.startAuto()},prev:function(){priv.stopAuto();if(priv.o.autoScrollStopOnInteract)priv.disableAuto();priv.doPrev()},doPrev:function(){priv.scroll((priv.o.wrapPrev&&priv.first==1)?priv.size-priv.o.itemVisible+1:priv.first-priv.o.itemScroll);priv.startAuto()},scroll:function(idx){if(priv.inAnimation)return;priv.inAnimation=false;priv.prevFirst=priv.first;priv.prevLast=priv.last;idx=idx<1?1:idx;var last=idx+priv.o.itemVisible-1;last=(last>priv.size)?priv.size:last;var first=last-priv.o.itemVisible+1;first=(first<1)?1:first;last=first+priv.o.itemVisible-1;priv.first=first;priv.last=last;priv.animate()},animate:function(){var pos=priv.dimension*(priv.first-1)*-1;priv.notify(priv.prevFirst,priv.prevLast,priv.first,priv.last,"onBeforeAnimation");if(priv.o.scrollAnimation){priv.inAnimation=true;jQuery(priv.list).animate(priv.horiz?{"left":pos}:{"top":pos},priv.o.scrollAnimation,function(){priv.scrolled()})}else{jQuery(priv.list).css(priv.horiz?"left":"top",pos+"px");priv.scrolled()}},scrolled:function(){if(priv.first==1)jQuery(priv.list).css("top",priv.top+"px").css("left",priv.left+"px");priv.inAnimation=false;priv.notify(priv.prevFirst,priv.prevLast,priv.first,priv.last,"onAfterAnimation");if(priv.first==1){var imgHeight=$(".jcarousel-list li img").eq(priv.first-1).height();$(".jcarousel-next").css("top",0);$(".jcarousel-prev").css("top",0)}else{var imgHeight=$(".jcarousel-list li img").eq(priv.last-1).height();$(".jcarousel-next").css("top",0);$(".jcarousel-prev").css("top",0)}priv.load(priv.last+1,priv.last+priv.o.itemScroll)},handler:function(handler,evt,state,i1,i2,i3,i4){if(priv.o[handler]==undefined||(typeof priv.o[handler]!='object'&&evt!="onAfterAnimation"))return;var handler=typeof priv.o[handler]=='object'?priv.o[handler][evt]:priv.o[handler];if(typeof handler!='function')return;if(i2==undefined){priv.get(i1).each(function(){handler(publ,this,i1,state)});return}for(var i=i1;i<=i2;i++){if(!(i>=i3&&i<=i4))priv.get(i).each(function(){handler(publ,this,i,state)})}},notify:function(prevFirst,prevLast,first,last,evt){var state=prevFirst==0?"init":(prevFirst<first?"next":"prev");if(prevFirst!=first){priv.handler("itemFirstOutHandler",evt,state,prevFirst);priv.handler("itemFirstInHandler",evt,state,first)}if(prevLast!=last){priv.handler("itemLastOutHandler",evt,state,prevLast);priv.handler("itemLastInHandler",evt,state,last)}priv.handler("itemVisibleInHandler",evt,state,first,last,prevFirst,prevLast);priv.handler("itemVisibleOutHandler",evt,state,prevFirst,prevLast,first,last)},buttons:function(next,prev){if(priv.o.noButtons)return;jQuery(".jcarousel-next",priv.scope)[next?"bind":"unbind"]("click",priv.nextClick)[next?"removeClass":"addClass"]("jcarousel-next-disabled")[next?"removeAttr":"attr"]("disabled",true);jQuery(".jcarousel-prev",priv.scope)[prev?"bind":"unbind"]("click",priv.prevClick)[prev?"removeClass":"addClass"]("jcarousel-prev-disabled")[prev?"removeAttr":"attr"]("disabled",true);if(priv.o.nextButtonStateHandler!=null)jQuery(".jcarousel-next",priv.scope).each(function(){priv.o.nextButtonStateHandler(publ,this,next)});if(priv.o.prevButtonStateHandler!=null)jQuery(".jcarousel-prev",priv.scope).each(function(){priv.o.prevButtonStateHandler(publ,this,prev)})},startAuto:function(){if(priv.o.autoScroll>0)priv.autoTimer=setTimeout(function(){priv.doNext()},priv.o.autoScroll*1000)},stopAuto:function(){if(priv.autoTimer==null)return;clearTimeout(priv.autoTimer);priv.autoTimer=null},disableAuto:function(){priv.stopAuto();priv.o.autoScroll=0},resize:function(){if(priv.size==0)return;if(priv.horiz)jQuery(priv.list).css("width",priv.size*priv.dimension+100+"px");else jQuery(priv.list).css("height",priv.size*priv.dimension+100+"px")},format:function(item,idx){return jQuery(item).css(priv.itemFormat).addClass("jcarousel-item-"+idx)},margin:function(e,p){if(p=="marginRight"&&jQuery.browser.safari){var old={"display":"block","float":"none","width":"auto"},oWidth,oWidth2;jQuery.swap(e,old,function(){oWidth=e.offsetWidth});old["marginRight"]=0;jQuery.swap(e,old,function(){oWidth2=e.offsetWidth});return oWidth2-oWidth}return priv.intval(jQuery.css(e,p))},intval:function(v){v=parseInt(v);return isNaN(v)?0:v}};priv.prepare(e,o);priv.init();priv.buttons(false,false);priv.load(1,priv.o.itemStart+priv.o.itemVisible);priv.scroll(priv.o.itemStart);priv.startAuto()}});