/**
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */
(function(b){b.fn.jcarousel=function(d){return this.each(function(){new a(this,d)})};var c={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};b.jcarousel=function(h,f){this.options=b.extend({},c,f||{});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 m="",k=h.className.split(" ");for(var g=0;g<k.length;g++){if(k[g].indexOf("jcarousel-skin")!=-1){b(h).removeClass(k[g]);var m=k[g];break}}if(h.nodeName=="UL"||h.nodeName=="OL"){this.list=b(h);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=b(h);this.list=b(h).find(">ul,>ol,div>ul,div>ol")}if(m!=""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1){this.container.wrap('<div class=" '+m+'"></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=b(".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=b(".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 j=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;var l=this.list.children("li");var n=this;if(l.size()>0){var d=0,g=this.options.offset;l.each(function(){n.format(this,g++);d+=n.dimension(this,j)});this.list.css(this.wh,d+"px");if(!f||f.size===undefined){this.options.size=l.size()}}this.container.css("display","block");this.buttonNext.css("display","block");this.buttonPrev.css("display","block");this.funcNext=function(){n.next()};this.funcPrev=function(){n.prev()};this.funcResize=function(){setTimeout(function(){n.reload()},100)};if(this.options.initCallback!=null){this.options.initCallback(this,"init")}if(b.browser.safari){this.buttons(false,false);b(window).bind("load",function(){n.setup()})}else{this.setup()}};var a=b.jcarousel;a.fn=a.prototype={jcarousel:"0.2.3"};a.fn.extend=a.extend=b.extend;a.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);b(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,a.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 f=this;var g=Math.ceil(this.clipping()/this.options.visible),e=0,d=0;b("li",this.list).each(function(h){e+=f.dimension(this,g);if(h+1<f.first){d=e}});this.list.css(this.wh,e+"px");this.list.css(this.lt,-d+"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(f,g){if(g==undefined||!g){g=f}if(this.options.size!==null&&g>this.options.size){g=this.options.size}for(var d=f;d<=g;d++){var h=this.get(d);if(!h.length||h.hasClass("jcarousel-item-placeholder")){return false}}return true},get:function(d){return b(".jcarousel-item-"+d,this.list)},add:function(h,o){var k=this.get(h),f=0,n=0;if(k.length==0){var m,k=this.create(h),g=a.intval(h);while(m=this.get(--g)){if(g<=0||m.length){g<=0?this.list.prepend(k):m.after(k);break}}}else{f=this.dimension(k)}k.removeClass(this.className("jcarousel-item-placeholder"));typeof o=="string"?k.html(o):k.empty().append(o);var l=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;var d=this.dimension(k,l)-f;if(h>0&&h<this.first){this.list.css(this.lt,a.intval(this.list.css(this.lt))-d+"px")}this.list.css(this.wh,a.intval(this.list.css(this.wh))+d+"px");return k},remove:function(f){var g=this.get(f);if(!g.length||(f>=this.first&&f<=this.last)){return}var h=this.dimension(g);if(f<this.first){this.list.css(this.lt,a.intval(this.list.css(this.lt))+h+"px")}g.remove();this.list.css(this.wh,a.intval(this.list.css(this.wh))-h+"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(d){if(this.locked||this.animating||!this.tail){return}var e=a.intval(this.list.css(this.lt));!d?e-=this.tail:e+=this.tail;this.inTail=!d;this.prevFirst=this.first;this.prevLast=this.last;this.animate(e)},scroll:function(e,d){if(this.locked||this.animating){return}this.animate(this.pos(e),d)},pos:function(A){if(this.locked||this.animating){return}A=a.intval(A);if(this.options.wrap!="circular"){A=A<1?1:(this.options.size&&A>this.options.size?this.options.size:A)}var w=this.first>A;var h=a.intval(this.list.css(this.lt));var B=this.options.wrap!="circular"&&this.first<=1?1:this.first;var E=w?this.get(B):this.get(this.last);var z=w?B:B-1;var C=null,y=0,t=false,D=0;while(w?--z>=A:++z<A){C=this.get(z);t=!C.length;if(C.length==0){C=this.create(z).addClass(this.className("jcarousel-item-placeholder"));E[w?"before":"after"](C)}E=C;D=this.dimension(C);if(t){y+=D}if(this.first!=null&&(this.options.wrap=="circular"||(z>=1&&(this.options.size==null||z<=this.options.size)))){h=w?h+D:h-D}}var q=this.clipping();var s=[];var g=0,z=A,r=0;var E=this.get(A-1);while(++g){C=this.get(z);t=!C.length;if(C.length==0){C=this.create(z).addClass(this.className("jcarousel-item-placeholder"));E.length==0?this.list.prepend(C):E[w?"before":"after"](C)}E=C;var D=this.dimension(C);if(D==0){return 0}if(this.options.wrap!="circular"&&this.options.size!==null&&z>this.options.size){s.push(C)}else{if(t){y+=D}}r+=D;if(r>=q){break}z++}for(var o=0;o<s.length;o++){s[o].remove()}if(y>0){this.list.css(this.wh,this.dimension(this.list)+y+"px");if(w){h-=y;this.list.css(this.lt,a.intval(this.list.css(this.lt))-y+"px")}}var n=A+g-1;if(this.options.wrap!="circular"&&this.options.size&&n>this.options.size){n=this.options.size}if(z>n){g=0,z=n,r=0;while(++g){var C=this.get(z--);if(!C.length){break}r+=this.dimension(C);if(r>=q){break}}}var k=n-g+1;if(this.options.wrap!="circular"&&k<1){k=1}if(this.inTail&&w){h+=this.tail;this.inTail=false}this.tail=null;if(this.options.wrap!="circular"&&n==this.options.size&&(n-g+1)>=1){var u=a.margin(this.get(n),!this.options.vertical?"marginRight":"marginBottom");if((r-u)>q){this.tail=r-q-u}}while(A-->k){h+=this.dimension(this.get(A))}this.prevFirst=this.first;this.prevLast=this.last;this.first=k;this.last=n;return h},animate:function(g,d){if(this.locked||this.animating){return}this.animating=true;var e=this;var f=function(){e.animating=false;if(g==0){e.list.css(e.lt,0)}if(e.options.wrap=="both"||e.options.wrap=="last"||e.options.size==null||e.last<e.options.size){e.startAuto()}e.buttons();e.notify("onAfterAnimation")};this.notify("onBeforeAnimation");if(!this.options.animation||d==false){this.list.css(this.lt,g+"px");f()}else{var h=!this.options.vertical?{left:g}:{top:g};this.list.animate(h,this.options.animation,this.options.easing,f)}},startAuto:function(e){if(e!=undefined){this.options.auto=e}if(this.options.auto==0){return this.stopAuto()}if(this.timer!=null){return}var d=this;this.timer=setTimeout(function(){d.next()},this.options.auto*1000)},stopAuto:function(){if(this.timer==null){return}clearTimeout(this.timer);this.timer=null},buttons:function(f,e){if(f==undefined||f==null){var f=!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){f=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 d=this;this.buttonNext[f?"bind":"unbind"](this.options.buttonNextEvent,this.funcNext)[f?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",f?false:true);this.buttonPrev[e?"bind":"unbind"](this.options.buttonPrevEvent,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!=f)&&this.options.buttonNextCallback!=null){this.buttonNext.each(function(){d.options.buttonNextCallback(d,this,f)});this.buttonNext[0].jcarouselstate=f}if(this.buttonPrev.length>0&&(this.buttonPrev[0].jcarouselstate==undefined||this.buttonPrev[0].jcarouselstate!=e)&&this.options.buttonPrevCallback!=null){this.buttonPrev.each(function(){d.options.buttonPrevCallback(d,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(h,l,d,j,g,f,e){if(this.options[h]==undefined||(typeof this.options[h]!="object"&&l!="onAfterAnimation")){return}var m=typeof this.options[h]=="object"?this.options[h][l]:this.options[h];if(!b.isFunction(m)){return}var n=this;if(j===undefined){m(n,d,l)}else{if(g===undefined){this.get(j).each(function(){m(n,this,j,d,l)})}else{for(var k=j;k<=g;k++){if(k!==null&&!(k>=f&&k<=e)){this.get(k).each(function(){m(n,this,k,d,l)})}}}}},create:function(d){return this.format("<li></li>",d)},format:function(g,f){var d=b(g).addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+f));d.attr("jcarouselindex",f);return d},className:function(d){return d+" "+d+(!this.options.vertical?"-horizontal":"-vertical")},dimension:function(i,j){var h=i.jquery!=undefined?i[0]:i;var g=!this.options.vertical?h.offsetWidth+a.margin(h,"marginLeft")+a.margin(h,"marginRight"):h.offsetHeight+a.margin(h,"marginTop")+a.margin(h,"marginBottom");if(j==undefined||g==j){return g}var f=!this.options.vertical?j-a.margin(h,"marginLeft")-a.margin(h,"marginRight"):j-a.margin(h,"marginTop")-a.margin(h,"marginBottom");b(h).css(this.wh,f+"px");return this.dimension(h)},clipping:function(){return !this.options.vertical?this.clip[0].offsetWidth-a.intval(this.clip.css("borderLeftWidth"))-a.intval(this.clip.css("borderRightWidth")):this.clip[0].offsetHeight-a.intval(this.clip.css("borderTopWidth"))-a.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}});a.extend({defaults:function(e){return b.extend(c,e||{})},margin:function(i,h){if(!i){return 0}var g=i.jquery!=undefined?i[0]:i;if(h=="marginRight"&&b.browser.safari){var f={display:"block","float":"none",width:"auto"},d,j;b.swap(g,f,function(){d=g.offsetWidth});f.marginRight=0;b.swap(g,f,function(){j=g.offsetWidth});return j-d}return a.intval(b.css(g,h))},intval:function(d){d=parseInt(d);return isNaN(d)?0:d}})})(jQuery);
