/*
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */
(function(C){C.fn.jcarousel=function(D){if(typeof D=="string"){var E=C(this).data("jcarousel"),F=Array.prototype.slice.call(arguments,1);return E[D].apply(E,F)}else{return this.each(function(){C(this).data("jcarousel",new B(this,D))})}};var A={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};C.jcarousel=function(D,G){this.options=C.extend({},A,G||{});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 H="",I=D.className.split(" ");for(var F=0;F<I.length;F++){if(I[F].indexOf("jcarousel-skin")!=-1){C(D).removeClass(I[F]);H=I[F];break}}if(D.nodeName=="UL"||D.nodeName=="OL"){this.list=C(D);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=C(D);this.list=this.container.find("ul,ol").eq(0)}if(H!=""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1){this.container.wrap('<div class=" '+H+'"></div>')}this.clip=this.list.parent();if(!this.clip.length||!this.clip.hasClass("jcarousel-clip")){this.clip=this.list.wrap("<div></div>").parent()}this.buttonNext=C(".jcarousel-next",this.container);if(this.buttonNext.size()==0&&this.options.buttonNextHTML!=null){this.buttonNext=this.clip.after(this.options.buttonNextHTML).next()}this.buttonNext.addClass(this.className("jcarousel-next"));this.buttonPrev=C(".jcarousel-prev",this.container);if(this.buttonPrev.size()==0&&this.options.buttonPrevHTML!=null){this.buttonPrev=this.clip.after(this.options.buttonPrevHTML).next()}this.buttonPrev.addClass(this.className("jcarousel-prev"));this.clip.addClass(this.className("jcarousel-clip")).css({overflow:"hidden",position:"relative"});this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden",position:"relative",top:0,left:0,margin:0,padding:0});this.container.addClass(this.className("jcarousel-container")).css({position:"relative"});var K=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;var E=this.list.children("li");var J=this;if(E.size()>0){var L=0,F=this.options.offset;E.each(function(){J.format(this,F++);L+=J.dimension(this,K)});this.list.css(this.wh,L+"px");if(!G||G.size===undefined){this.options.size=E.size()}}this.container.css("display","block");this.buttonNext.css("display","block");this.buttonPrev.css("display","block");this.funcNext=function(){J.next()};this.funcPrev=function(){J.prev()};this.funcResize=function(){J.reload()};if(this.options.initCallback!=null){this.options.initCallback(this,"init")}if(C.browser.safari){this.buttons(false,false);C(window).bind("load.jcarousel",function(){J.setup()})}else{this.setup()}};var B=C.jcarousel;B.fn=B.prototype={jcarousel:"0.2.4"};B.fn.extend=B.extend=C.extend;B.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 D=this.pos(this.options.start);this.prevFirst=this.prevLast=null;this.animate(D,false)},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,B.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 D=this;var E=Math.ceil(this.clipping()/this.options.visible),F=0,G=0;C("li",this.list).each(function(H){F+=D.dimension(this,E);if(H+1<D.first){G=F}});this.list.css(this.wh,F+"px");this.list.css(this.lt,-G+"px")}this.scroll(this.first,false)},lock:function(){this.locked=true;this.buttons()},unlock:function(){this.locked=false;this.buttons()},size:function(D){if(D!=undefined){this.options.size=D;if(!this.locked){this.buttons()}}return this.options.size},has:function(D,F){if(F==undefined||!F){F=D}if(this.options.size!==null&&F>this.options.size){F=this.options.size}for(var G=D;G<=F;G++){var E=this.get(G);if(!E.length||E.hasClass("jcarousel-item-placeholder")){return false}}return true},get:function(D){return C(".jcarousel-item-"+D,this.list)},add:function(H,E){var D=this.get(H),F=0,I=0;if(D.length==0){var J,D=this.create(H),G=B.intval(H);while(J=this.get(--G)){if(G<=0||J.length){G<=0?this.list.prepend(D):J.after(D);break}}}else{F=this.dimension(D)}D.removeClass(this.className("jcarousel-item-placeholder"));typeof E=="string"?D.html(E):D.empty().append(E);var K=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;var L=this.dimension(D,K)-F;if(H>0&&H<this.first){this.list.css(this.lt,B.intval(this.list.css(this.lt))-L+"px")}this.list.css(this.wh,B.intval(this.list.css(this.wh))+L+"px");return D},remove:function(D){var E=this.get(D);if(!E.length||(D>=this.first&&D<=this.last)){return}var F=this.dimension(E);if(D<this.first){this.list.css(this.lt,B.intval(this.list.css(this.lt))+F+"px")}E.remove();this.list.css(this.wh,B.intval(this.list.css(this.wh))-F+"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(E){if(this.locked||this.animating||!this.tail){return}var D=B.intval(this.list.css(this.lt));!E?D-=this.tail:D+=this.tail;this.inTail=!E;this.prevFirst=this.first;this.prevLast=this.last;this.animate(D)},scroll:function(D,E){if(this.locked||this.animating){return}this.animate(this.pos(D),E)},pos:function(I){var U=B.intval(this.list.css(this.lt));if(this.locked||this.animating){return U}if(this.options.wrap!="circular"){I=I<1?1:(this.options.size&&I>this.options.size?this.options.size:I)}var L=this.first>I;var O=this.options.wrap!="circular"&&this.first<=1?1:this.first;var M=L?this.get(O):this.get(this.last);var H=L?O:O-1;var R=null,J=0,D=false,Q=0,P;while(L?--H>=I:++H<I){R=this.get(H);D=!R.length;if(R.length==0){R=this.create(H).addClass(this.className("jcarousel-item-placeholder"));M[L?"before":"after"](R);if(this.first!=null&&this.options.wrap=="circular"&&this.options.size!==null&&(H<=0||H>this.options.size)){P=this.get(this.index(H));if(P.length){this.add(H,P.children().clone(true))}}}M=R;Q=this.dimension(R);if(D){J+=Q}if(this.first!=null&&(this.options.wrap=="circular"||(H>=1&&(this.options.size==null||H<=this.options.size)))){U=L?U+Q:U-Q}}var V=this.clipping();var G=[];var N=0,H=I,F=0;var M=this.get(I-1);while(++N){R=this.get(H);D=!R.length;if(R.length==0){R=this.create(H).addClass(this.className("jcarousel-item-placeholder"));M.length==0?this.list.prepend(R):M[L?"before":"after"](R);if(this.first!=null&&this.options.wrap=="circular"&&this.options.size!==null&&(H<=0||H>this.options.size)){P=this.get(this.index(H));if(P.length){this.add(H,P.find(">*").clone(true))}}}M=R;var Q=this.dimension(R);if(Q==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&&H>this.options.size){G.push(R)}else{if(D){J+=Q}}F+=Q;if(F>=V){break}H++}for(var T=0;T<G.length;T++){G[T].remove()}if(J>0){this.list.css(this.wh,this.dimension(this.list)+J+"px");if(L){U-=J;this.list.css(this.lt,B.intval(this.list.css(this.lt))-J+"px")}}var S=I+N-1;if(this.options.wrap!="circular"&&this.options.size&&S>this.options.size){S=this.options.size}if(H>S){N=0,H=S,F=0;while(++N){var R=this.get(H--);if(!R.length){break}F+=this.dimension(R);if(F>=V){break}}}var E=S-N+1;if(this.options.wrap!="circular"&&E<1){E=1}if(this.inTail&&L){U+=this.tail;this.inTail=false}this.tail=null;if(this.options.wrap!="circular"&&S==this.options.size&&(S-N+1)>=1){var K=B.margin(this.get(S),!this.options.vertical?"marginRight":"marginBottom");if((F-K)>V){this.tail=F-V-K}}while(I-->E){U+=this.dimension(this.get(I))}this.prevFirst=this.first;this.prevLast=this.last;this.first=E;this.last=S;return U},animate:function(E,H){if(this.locked||this.animating){return}this.animating=true;var D=this;var G=function(){D.animating=false;if(E==0){D.list.css(D.lt,0)}if(D.options.wrap=="circular"||D.options.wrap=="both"||D.options.wrap=="last"||D.options.size==null||D.last<D.options.size){D.startAuto()}D.buttons();D.notify("onAfterAnimation")};this.notify("onBeforeAnimation");if(!this.options.animation||H==false){this.list.css(this.lt,E+"px");G()}else{var F=!this.options.vertical?{"left":E}:{"top":E};this.list.animate(F,this.options.animation,this.options.easing,G)}},startAuto:function(D){if(D!=undefined){this.options.auto=D}if(this.options.auto==0){return this.stopAuto()}if(this.timer!=null){return}var E=this;this.timer=setTimeout(function(){E.next()},this.options.auto*1000)},stopAuto:function(){if(this.timer==null){return}clearTimeout(this.timer);this.timer=null},buttons:function(D,E){if(D==undefined||D==null){var D=!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){D=this.tail!=null&&!this.inTail}}if(E==undefined||E==null){var E=!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){E=this.tail!=null&&this.inTail}}var F=this;this.buttonNext[D?"bind":"unbind"](this.options.buttonNextEvent+".jcarousel",this.funcNext)[D?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",D?false:true);this.buttonPrev[E?"bind":"unbind"](this.options.buttonPrevEvent+".jcarousel",this.funcPrev)[E?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",E?false:true);if(this.buttonNext.length>0&&(this.buttonNext[0].jcarouselstate==undefined||this.buttonNext[0].jcarouselstate!=D)&&this.options.buttonNextCallback!=null){this.buttonNext.each(function(){F.options.buttonNextCallback(F,this,D)});this.buttonNext[0].jcarouselstate=D}if(this.buttonPrev.length>0&&(this.buttonPrev[0].jcarouselstate==undefined||this.buttonPrev[0].jcarouselstate!=E)&&this.options.buttonPrevCallback!=null){this.buttonPrev.each(function(){F.options.buttonPrevCallback(F,this,E)});this.buttonPrev[0].jcarouselstate=E}},notify:function(D){var E=this.prevFirst==null?"init":(this.prevFirst<this.first?"next":"prev");this.callback("itemLoadCallback",D,E);if(this.prevFirst!==this.first){this.callback("itemFirstInCallback",D,E,this.first);this.callback("itemFirstOutCallback",D,E,this.prevFirst)}if(this.prevLast!==this.last){this.callback("itemLastInCallback",D,E,this.last);this.callback("itemLastOutCallback",D,E,this.prevLast)}this.callback("itemVisibleInCallback",D,E,this.first,this.last,this.prevFirst,this.prevLast);this.callback("itemVisibleOutCallback",D,E,this.prevFirst,this.prevLast,this.first,this.last)},callback:function(G,E,I,H,D,M,L){if(this.options[G]==undefined||(typeof this.options[G]!="object"&&E!="onAfterAnimation")){return}var F=typeof this.options[G]=="object"?this.options[G][E]:this.options[G];if(!C.isFunction(F)){return}var K=this;if(H===undefined){F(K,I,E)}else{if(D===undefined){this.get(H).each(function(){F(K,this,H,I,E)})}else{for(var J=H;J<=D;J++){if(J!==null&&!(J>=M&&J<=L)){this.get(J).each(function(){F(K,this,J,I,E)})}}}}},create:function(D){return this.format("<li></li>",D)},format:function(E,D){var F=C(E).addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+D)).css({"float":"left","list-style":"none"});F.attr("jcarouselindex",D);return F},className:function(D){return D+" "+D+(!this.options.vertical?"-horizontal":"-vertical")},dimension:function(F,E){var D=F.jquery!=undefined?F[0]:F;var G=!this.options.vertical?D.offsetWidth+B.margin(D,"marginLeft")+B.margin(D,"marginRight"):D.offsetHeight+B.margin(D,"marginTop")+B.margin(D,"marginBottom");if(E==undefined||G==E){return G}var H=!this.options.vertical?E-B.margin(D,"marginLeft")-B.margin(D,"marginRight"):E-B.margin(D,"marginTop")-B.margin(D,"marginBottom");C(D).css(this.wh,H+"px");return this.dimension(D)},clipping:function(){return !this.options.vertical?this.clip[0].offsetWidth-B.intval(this.clip.css("borderLeftWidth"))-B.intval(this.clip.css("borderRightWidth")):this.clip[0].offsetHeight-B.intval(this.clip.css("borderTopWidth"))-B.intval(this.clip.css("borderBottomWidth"))},index:function(D,E){if(E==undefined){E=this.options.size}return Math.round((((D-1)/E)-Math.floor((D-1)/E))*E)+1}});B.extend({defaults:function(D){return C.extend(A,D||{})},margin:function(E,F){if(!E){return 0}var D=E.jquery!=undefined?E[0]:E;if(F=="marginRight"&&C.browser.safari){var G={"display":"block","float":"none","width":"auto"},I,H;C.swap(D,G,function(){I=D.offsetWidth});G["marginRight"]=0;C.swap(D,G,function(){H=D.offsetWidth});return H-I}return B.intval(C.css(D,F))},intval:function(D){D=parseInt(D);return isNaN(D)?0:D}})})(jQuery);
