(function(d){d.fn.jcarousel=function(a){return this.each(function(){new f(this,a)
})
};
var e={vertical:false,start:1,offset:1,size:null,scroll:3,visible:null,animation:"normal",easing:"swing",auto:0,wrap:null,initCallback:null,reloadCallback:null,itemLoadCallback:null,itemFirstInCallback:null,itemFirstOutCallback:null,itemLastInCallback:null,itemLastOutCallback:null,itemVisibleInCallback:null,itemVisibleOutCallback:null,buttonNextHTML:"<div></div>",buttonPrevHTML:"<div></div>",buttonNextEvent:"click",buttonPrevEvent:"click",buttonNextCallback:null,buttonPrevCallback:null};
d.jcarousel=function(m,b){this.options=d.extend({},e,b||{});
this.locked=false;
this.container=null;
this.clip=null;
this.list=null;
this.buttonNext=null;
this.buttonPrev=null;
this.wh=!this.options.vertical?"width":"height";
this.lt=!this.options.vertical?"left":"top";
var q="",o=m.className.split(" ");
for(var c=0;
c<o.length;
c++){if(o[c].indexOf("jcarousel-skin")!=-1){d(m).removeClass(o[c]);
var q=o[c];
break
}}if(m.nodeName=="UL"||m.nodeName=="OL"){this.list=d(m);
this.container=this.list.parent();
if(this.container.hasClass("jcarousel-clip")){if(!this.container.parent().hasClass("jcarousel-container")){this.container=this.container.wrap("<div></div>")
}this.container=this.container.parent()
}else{if(!this.container.hasClass("jcarousel-container")){this.container=this.list.wrap("<div></div>").parent()
}}}else{this.container=d(m);
this.list=d(m).find(">ul,>ol,div>ul,div>ol")
}if(q!=""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1){this.container.wrap('<div class=" '+q+'"></div>')
}this.clip=this.list.parent();
if(!this.clip.length||!this.clip.hasClass("jcarousel-clip")){this.clip=this.list.wrap("<div></div>").parent()
}this.buttonPrev=d(".jcarousel-prev",this.container);
if(this.buttonPrev.size()==0&&this.options.buttonPrevHTML!=null){this.buttonPrev=this.clip.before(this.options.buttonPrevHTML).prev()
}this.buttonPrev.addClass(this.className("jcarousel-prev"));
this.buttonNext=d(".jcarousel-next",this.container);
if(this.buttonNext.size()==0&&this.options.buttonNextHTML!=null){this.buttonNext=this.clip.before(this.options.buttonNextHTML).prev()
}this.buttonNext.addClass(this.className("jcarousel-next"));
this.clip.addClass(this.className("jcarousel-clip"));
this.list.addClass(this.className("jcarousel-list"));
this.container.addClass(this.className("jcarousel-container"));
var n=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;
var p=this.list.children("li");
var r=this;
if(p.size()>0){var a=0,c=this.options.offset;
p.each(function(){r.format(this,c++);
a+=r.dimension(this,n)
});
this.list.css(this.wh,a+"px");
if(!b||b.size===undefined){this.options.size=p.size()
}}this.container.css("display","block");
this.buttonNext.css("display","block");
this.buttonPrev.css("display","block");
this.funcNext=function(){r.next()
};
this.funcPrev=function(){r.prev()
};
this.funcResize=function(){r.reload()
};
if(this.options.initCallback!=null){this.options.initCallback(this,"init")
}if(d.browser.safari){this.buttons(false,false);
d(window).bind("load",function(){r.setup()
})
}else{this.setup()
}};
var f=d.jcarousel;
f.fn=f.prototype={jcarousel:"0.2.3"};
f.fn.extend=f.extend=d.extend;
f.fn.extend({setup:function(){this.first=null;
this.last=null;
this.prevFirst=null;
this.prevLast=null;
this.animating=false;
this.timer=null;
this.tail=null;
this.inTail=false;
if(this.locked){return
}this.list.css(this.lt,this.pos(this.options.offset)+"px");
var a=this.pos(this.options.start);
this.prevFirst=this.prevLast=null;
this.animate(a,false);
d(window).unbind("resize",this.funcResize).bind("resize",this.funcResize)
},reset:function(){this.list.empty();
this.list.css(this.lt,"0px");
this.list.css(this.wh,"10px");
if(this.options.initCallback!=null){this.options.initCallback(this,"reset")
}this.setup()
},reload:function(){if(this.tail!=null&&this.inTail){this.list.css(this.lt,f.intval(this.list.css(this.lt))+this.tail)
}this.tail=null;
this.inTail=false;
if(this.options.reloadCallback!=null){this.options.reloadCallback(this)
}if(this.options.visible!=null){var b=this;
var c=Math.ceil(this.clipping()/this.options.visible),a=0,h=0;
d("li",this.list).each(function(g){a+=b.dimension(this,c);
if(g+1<b.first){h=a
}});
this.list.css(this.wh,a+"px");
this.list.css(this.lt,-h+"px")
}this.scroll(this.first,false)
},lock:function(){this.locked=true;
this.buttons()
},unlock:function(){this.locked=false;
this.buttons()
},size:function(a){if(a!=undefined){this.options.size=a;
if(!this.locked){this.buttons()
}}return this.options.size
},has:function(a,b){if(b==undefined||!b){b=a
}if(this.options.size!==null&&b>this.options.size){b=this.options.size
}for(var h=a;
h<=b;
h++){var c=this.get(h);
if(!c.length||c.hasClass("jcarousel-item-placeholder")){return false
}}return true
},get:function(a){return d(".jcarousel-item-"+a,this.list)
},add:function(m,r){var n=this.get(m),b=0,q=0;
if(n.length==0){var p,n=this.create(m),c=f.intval(m);
while(p=this.get(--c)){if(c<=0||p.length){c<=0?this.list.prepend(n):p.after(n);
break
}}}else{b=this.dimension(n)
}n.removeClass(this.className("jcarousel-item-placeholder"));
typeof r=="string"?n.html(r):n.empty().append(r);
var o=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;
var a=this.dimension(n,o)-b;
if(m>0&&m<this.first){this.list.css(this.lt,f.intval(this.list.css(this.lt))-a+"px")
}this.list.css(this.wh,f.intval(this.list.css(this.wh))+a+"px");
return n
},remove:function(c){var a=this.get(c);
if(!a.length||(c>=this.first&&c<=this.last)){return
}var b=this.dimension(a);
if(c<this.first){this.list.css(this.lt,f.intval(this.list.css(this.lt))+b+"px")
}a.remove();
this.list.css(this.wh,f.intval(this.list.css(this.wh))-b+"px")
},next:function(){this.stopAuto();
if(this.tail!=null&&!this.inTail){this.scrollTail(false)
}else{this.scroll(((this.options.wrap=="both"||this.options.wrap=="last")&&this.options.size!=null&&this.last==this.options.size)?1:this.first+this.options.scroll)
}},prev:function(){this.stopAuto();
if(this.tail!=null&&this.inTail){this.scrollTail(true)
}else{this.scroll(((this.options.wrap=="both"||this.options.wrap=="first")&&this.options.size!=null&&this.first==1)?this.options.size:this.first-this.options.scroll)
}},scrollTail:function(b){if(this.locked||this.animating||!this.tail){return
}var a=f.intval(this.list.css(this.lt));
!b?a-=this.tail:a+=this.tail;
this.inTail=!b;
this.prevFirst=this.first;
this.prevLast=this.last;
this.animate(a)
},scroll:function(a,b){if(this.locked||this.animating){return
}this.animate(this.pos(a),b)
},pos:function(B){if(this.locked||this.animating){return
}if(this.options.wrap!="circular"){B=B<1?1:(this.options.size&&B>this.options.size?this.options.size:B)
}var F=this.first>B;
var v=f.intval(this.list.css(this.lt));
var a=this.options.wrap!="circular"&&this.first<=1?1:this.first;
var D=F?this.get(a):this.get(this.last);
var x=F?a:a-1;
var b=null,J=0,I=false,c=0;
while(F?--x>=B:++x<B){b=this.get(x);
I=!b.length;
if(b.length==0){b=this.create(x).addClass(this.className("jcarousel-item-placeholder"));
D[F?"before":"after"](b)
}D=b;
c=this.dimension(b);
if(I){J+=c
}if(this.first!=null&&(this.options.wrap=="circular"||(x>=1&&(this.options.size==null||x<=this.options.size)))){v=F?v+c:v-c
}}var y=this.clipping();
var E=[];
var H=0,x=B,A=0;
var D=this.get(B-1);
while(++H){b=this.get(x);
I=!b.length;
if(b.length==0){b=this.create(x).addClass(this.className("jcarousel-item-placeholder"));
D.length==0?this.list.prepend(b):D[F?"before":"after"](b)
}D=b;
var c=this.dimension(b);
if(c==0){alert("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...");
return 0
}if(this.options.wrap!="circular"&&this.options.size!==null&&x>this.options.size){E.push(b)
}else{if(I){J+=c
}}A+=c;
if(A>=y){break
}x++
}for(var w=0;
w<E.length;
w++){E[w].remove()
}if(J>0){this.list.css(this.wh,this.dimension(this.list)+J+"px");
if(F){v-=J;
this.list.css(this.lt,f.intval(this.list.css(this.lt))-J+"px")
}}var G=B+H-1;
if(this.options.wrap!="circular"&&this.options.size&&G>this.options.size){G=this.options.size
}if(x>G){H=0,x=G,A=0;
while(++H){var b=this.get(x--);
if(!b.length){break
}A+=this.dimension(b);
if(A>=y){break
}}}var z=G-H+1;
if(this.options.wrap!="circular"&&z<1){z=1
}if(this.inTail&&F){v+=this.tail;
this.inTail=false
}this.tail=null;
if(this.options.wrap!="circular"&&G==this.options.size&&(G-H+1)>=1){var C=f.margin(this.get(G),!this.options.vertical?"marginRight":"marginBottom");
if((A-C)>y){this.tail=A-y-C
}}while(B-->z){v+=this.dimension(this.get(B))
}this.prevFirst=this.first;
this.prevLast=this.last;
this.first=z;
this.last=G;
return v
},animate:function(c,j){if(this.locked||this.animating){return
}this.animating=true;
var a=this;
var b=function(){a.animating=false;
if(c==0){a.list.css(a.lt,0)
}if(a.options.wrap=="both"||a.options.wrap=="last"||a.options.size==null||a.last<a.options.size){a.startAuto()
}a.buttons();
a.notify("onAfterAnimation")
};
this.notify("onBeforeAnimation");
if(!this.options.animation||j==false){this.list.css(this.lt,c+"px");
b()
}else{var i=!this.options.vertical?{left:c}:{top:c};
this.list.animate(i,this.options.animation,this.options.easing,b)
}},startAuto:function(a){if(a!=undefined){this.options.auto=a
}if(this.options.auto==0){return this.stopAuto()
}if(this.timer!=null){return
}var b=this;
this.timer=setTimeout(function(){b.next()
},this.options.auto*1000)
},stopAuto:function(){if(this.timer==null){return
}clearTimeout(this.timer);
this.timer=null
},buttons:function(b,a){if(b==undefined||b==null){var b=!this.locked&&this.options.size!==0&&((this.options.wrap&&this.options.wrap!="first")||this.options.size==null||this.last<this.options.size);
if(!this.locked&&(!this.options.wrap||this.options.wrap=="first")&&this.options.size!=null&&this.last>=this.options.size){b=this.tail!=null&&!this.inTail
}}if(a==undefined||a==null){var a=!this.locked&&this.options.size!==0&&((this.options.wrap&&this.options.wrap!="last")||this.first>1);
if(!this.locked&&(!this.options.wrap||this.options.wrap=="last")&&this.options.size!=null&&this.first==1){a=this.tail!=null&&this.inTail
}}var c=this;
this.buttonNext[b?"bind":"unbind"](this.options.buttonNextEvent,this.funcNext)[b?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",b?false:true);
this.buttonPrev[a?"bind":"unbind"](this.options.buttonPrevEvent,this.funcPrev)[a?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",a?false:true);
if(this.buttonNext.length>0&&(this.buttonNext[0].jcarouselstate==undefined||this.buttonNext[0].jcarouselstate!=b)&&this.options.buttonNextCallback!=null){this.buttonNext.each(function(){c.options.buttonNextCallback(c,this,b)
});
this.buttonNext[0].jcarouselstate=b
}if(this.buttonPrev.length>0&&(this.buttonPrev[0].jcarouselstate==undefined||this.buttonPrev[0].jcarouselstate!=a)&&this.options.buttonPrevCallback!=null){this.buttonPrev.each(function(){c.options.buttonPrevCallback(c,this,a)
});
this.buttonPrev[0].jcarouselstate=a
}},notify:function(b){var a=this.prevFirst==null?"init":(this.prevFirst<this.first?"next":"prev");
this.callback("itemLoadCallback",b,a);
if(this.prevFirst!==this.first){this.callback("itemFirstInCallback",b,a,this.first);
this.callback("itemFirstOutCallback",b,a,this.prevFirst)
}if(this.prevLast!==this.last){this.callback("itemLastInCallback",b,a,this.last);
this.callback("itemLastOutCallback",b,a,this.prevLast)
}this.callback("itemVisibleInCallback",b,a,this.first,this.last,this.prevFirst,this.prevLast);
this.callback("itemVisibleOutCallback",b,a,this.prevFirst,this.prevLast,this.first,this.last)
},callback:function(t,c,p,a,s,r,q){if(this.options[t]==undefined||(typeof this.options[t]!="object"&&c!="onAfterAnimation")){return
}var n=typeof this.options[t]=="object"?this.options[t][c]:this.options[t];
if(!d.isFunction(n)){return
}var o=this;
if(a===undefined){n(o,p,c)
}else{if(s===undefined){this.get(a).each(function(){n(o,this,a,p,c)
})
}else{for(var b=a;
b<=s;
b++){if(b!==null&&!(b>=r&&b<=q)){this.get(b).each(function(){n(o,this,b,p,c)
})
}}}}},create:function(a){return this.format("<li></li>",a)
},format:function(b,a){var c=d(b).addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+a));
c.attr("jcarouselindex",a);
return c
},className:function(a){return a+" "+a+(!this.options.vertical?"-horizontal":"-vertical")
},dimension:function(c,i){var b=c.jquery!=undefined?c[0]:c;
var a=!this.options.vertical?b.offsetWidth+f.margin(b,"marginLeft")+f.margin(b,"marginRight"):b.offsetHeight+f.margin(b,"marginTop")+f.margin(b,"marginBottom");
if(i==undefined||a==i){return a
}var j=!this.options.vertical?i-f.margin(b,"marginLeft")-f.margin(b,"marginRight"):i-f.margin(b,"marginTop")-f.margin(b,"marginBottom");
d(b).css(this.wh,j+"px");
return this.dimension(b)
},clipping:function(){return !this.options.vertical?this.clip[0].offsetWidth-f.intval(this.clip.css("borderLeftWidth"))-f.intval(this.clip.css("borderRightWidth")):this.clip[0].offsetHeight-f.intval(this.clip.css("borderTopWidth"))-f.intval(this.clip.css("borderBottomWidth"))
},index:function(b,a){if(a==undefined){a=this.options.size
}return Math.round((((b-1)/a)-Math.floor((b-1)/a))*a)+1
}});
f.extend({defaults:function(a){return d.extend(e,a||{})
},margin:function(j,k){if(!j){return 0
}var b=j.jquery!=undefined?j[0]:j;
if(k=="marginRight"&&d.browser.safari){var c={display:"block","float":"none",width:"auto"},l,a;
d.swap(b,c,function(){l=b.offsetWidth
});
c.marginRight=0;
d.swap(b,c,function(){a=b.offsetWidth
});
return a-l
}return f.intval(d.css(b,k))
},intval:function(a){a=parseInt(a);
return isNaN(a)?0:a
}})
})(jQuery);
