﻿/*
 * 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(a){var d={vertical:false,rtl:false,start:1,offset:1,size:null,scroll:3,visible:null,animation:"normal",easing:"swing",auto:0,wrap:null,initCallback:null,setupCallback:null,reloadCallback:null,itemLoadCallback:null,itemFirstInCallback:null,itemFirstOutCallback:null,itemLastInCallback:null,itemLastOutCallback:null,itemVisibleInCallback:null,itemVisibleOutCallback:null,animationStepCallback:null,buttonNextHTML:"<div></div>",buttonPrevHTML:"<div></div>",buttonNextEvent:"click",buttonPrevEvent:"click",buttonNextCallback:null,buttonPrevCallback:null,itemFallbackDimension:null},c=false;a(window).bind("load.jcarousel",function(){c=true});a.jcarousel=function(e,g){this.options=a.extend({},d,g||{});this.locked=false;this.autoStopped=false;this.container=null;this.clip=null;this.list=null;this.buttonNext=null;this.buttonPrev=null;this.buttonNextState=null;this.buttonPrevState=null;if(!g||g.rtl===undefined)this.options.rtl=(a(e).attr("dir")||a("html").attr("dir")||"").toLowerCase()=="rtl";this.wh=!this.options.vertical?"width":"height";this.lt=!this.options.vertical?this.options.rtl?"right":"left":"top";for(var i="",h=e.className.split(" "),f=0;f<h.length;f++)if(h[f].indexOf("jcarousel-skin")!=-1){a(e).removeClass(h[f]);i=h[f];break}if(e.nodeName.toUpperCase()=="UL"||e.nodeName.toUpperCase()=="OL"){this.list=a(e);this.clip=this.list.parents(".jcarousel-clip");this.container=this.list.parents(".jcarousel-container")}else{this.container=a(e);this.list=this.container.find("ul,ol").eq(0);this.clip=this.container.find(".jcarousel-clip")}if(this.clip.size()===0)this.clip=this.list.wrap("<div></div>").parent();if(this.container.size()===0)this.container=this.clip.wrap("<div></div>").parent();i!==""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1&&this.container.wrap('<div class=" '+i+'"></div>');this.buttonPrev=a(".jcarousel-prev",this.container);if(this.buttonPrev.size()===0&&this.options.buttonPrevHTML!==null)this.buttonPrev=a(this.options.buttonPrevHTML).appendTo(this.container);this.buttonPrev.addClass(this.className("jcarousel-prev"));this.buttonNext=a(".jcarousel-next",this.container);if(this.buttonNext.size()===0&&this.options.buttonNextHTML!==null)this.buttonNext=a(this.options.buttonNextHTML).appendTo(this.container);this.buttonNext.addClass(this.className("jcarousel-next"));this.clip.addClass(this.className("jcarousel-clip")).css({position:"relative"});this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden",position:"relative",top:0,margin:0,padding:0}).css(this.options.rtl?"right":"left",0);this.container.addClass(this.className("jcarousel-container")).css({position:"relative"});!this.options.vertical&&this.options.rtl&&this.container.addClass("jcarousel-direction-rtl").attr("dir","rtl");var l=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible):null,j=this.list.children("li"),b=this;if(j.size()>0){var k=0,m=this.options.offset;j.each(function(){b.format(this,m++);k+=b.dimension(this,l)});this.list.css(this.wh,k+100+"px");if(!g||g.size===undefined)this.options.size=j.size()}this.container.css("display","block");this.buttonNext.css("display","block");this.buttonPrev.css("display","block");this.funcNext=function(){b.next()};this.funcPrev=function(){b.prev()};this.funcResize=function(){b.resizeTimer&&clearTimeout(b.resizeTimer);b.resizeTimer=setTimeout(function(){b.reload()},100)};this.options.initCallback!==null&&this.options.initCallback(this,"init");if(!c&&a.browser.safari){this.buttons(false,false);a(window).bind("load.jcarousel",function(){b.setup()})}else this.setup()};var b=a.jcarousel;b.fn=b.prototype={jcarousel:"0.2.8"};b.fn.extend=b.extend=a.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.resizeTimer=null;this.tail=null;this.inTail=false;if(this.locked)return;this.list.css(this.lt,this.pos(this.options.offset)+"px");var b=this.pos(this.options.start,true);this.prevFirst=this.prevLast=null;this.animate(b,false);a(window).unbind("resize.jcarousel",this.funcResize).bind("resize.jcarousel",this.funcResize);this.options.setupCallback!==null&&this.options.setupCallback(this)},reset:function(){this.list.empty();this.list.css(this.lt,"0px");this.list.css(this.wh,"10px");this.options.initCallback!==null&&this.options.initCallback(this,"reset");this.setup()},reload:function(){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;this.options.reloadCallback!==null&&this.options.reloadCallback(this);if(this.options.visible!==null){var c=this,e=Math.ceil(this.clipping()/this.options.visible),a=0,d=0;this.list.children("li").each(function(b){a+=c.dimension(this,e);if(b+1<c.first)d=a});this.list.css(this.wh,a+"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(a){if(a!==undefined){this.options.size=a;!this.locked&&this.buttons()}return this.options.size},has:function(d,a){if(a===undefined||!a)a=d;if(this.options.size!==null&&a>this.options.size)a=this.options.size;for(var b=d;b<=a;b++){var c=this.get(b);if(!c.length||c.hasClass("jcarousel-item-placeholder"))return false}return true},"get":function(b){return a(">.jcarousel-item-"+b,this.list)},add:function(d,j){var c=this.get(d),h=0,g=a(j);if(c.length===0){var e,f=b.intval(d);c=this.create(d);while(true){e=this.get(--f);if(f<=0||e.length){if(f<=0)this.list.prepend(c);else e.after(c);break}}}else h=this.dimension(c);if(g.get(0).nodeName.toUpperCase()=="LI"){c.replaceWith(g);c=g}else c.empty().append(j);this.format(c.removeClass(this.className("jcarousel-item-placeholder")),d);var k=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible):null,i=this.dimension(c,k)-h;d>0&&d<this.first&&this.list.css(this.lt,b.intval(this.list.css(this.lt))-i+"px");this.list.css(this.wh,b.intval(this.list.css(this.wh))+i+"px");return c},remove:function(a){var c=this.get(a);if(!c.length||a>=this.first&&a<=this.last)return;var d=this.dimension(c);a<this.first&&this.list.css(this.lt,b.intval(this.list.css(this.lt))+d+"px");c.remove();this.list.css(this.wh,b.intval(this.list.css(this.wh))-d+"px")},next:function(){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(){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(c){if(this.locked||this.animating||!this.tail)return;this.pauseAuto();var a=b.intval(this.list.css(this.lt));a=!c?a-this.tail:a+this.tail;this.inTail=!c;this.prevFirst=this.first;this.prevLast=this.last;this.animate(a)},scroll:function(b,a){if(this.locked||this.animating)return;this.pauseAuto();this.animate(this.pos(b),a)},pos:function(d,u){var f=b.intval(this.list.css(this.lt));if(this.locked||this.animating)return f;if(this.options.wrap!="circular")d=d<1?1:this.options.size&&d>this.options.size?this.options.size:d;var g=this.first>d,r=this.options.wrap!="circular"&&this.first<=1?1:this.first,k=g?this.get(r):this.get(this.last),a=g?r:r-1,c=null,m=0,p=false,h=0,l;while(g?--a>=d:++a<d){c=this.get(a);p=!c.length;if(c.length===0){c=this.create(a).addClass(this.className("jcarousel-item-placeholder"));k[g?"before":"after"](c);if(this.first!==null&&this.options.wrap=="circular"&&this.options.size!==null&&(a<=0||a>this.options.size)){l=this.get(this.index(a));if(l.length)c=this.add(a,l.clone(true))}}k=c;h=this.dimension(c);if(p)m+=h;if(this.first!==null&&(this.options.wrap=="circular"||a>=1&&(this.options.size===null||a<=this.options.size)))f=g?f+h:f-h}var n=this.clipping(),q=[],j=0,i=0;k=this.get(d-1);a=d;while(++j){c=this.get(a);p=!c.length;if(c.length===0){c=this.create(a).addClass(this.className("jcarousel-item-placeholder"));if(k.length===0)this.list.prepend(c);else k[g?"before":"after"](c);if(this.first!==null&&this.options.wrap=="circular"&&this.options.size!==null&&(a<=0||a>this.options.size)){l=this.get(this.index(a));if(l.length)c=this.add(a,l.clone(true))}}k=c;h=this.dimension(c);if(h===0)throw new Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...");if(this.options.wrap!="circular"&&this.options.size!==null&&a>this.options.size)q.push(c);else if(p)m+=h;i+=h;if(i>=n)break;a++}for(var s=0;s<q.length;s++)q[s].remove();if(m>0){this.list.css(this.wh,this.dimension(this.list)+m+"px");if(g){f-=m;this.list.css(this.lt,b.intval(this.list.css(this.lt))-m+"px")}}var e=d+j-1;if(this.options.wrap!="circular"&&this.options.size&&e>this.options.size)e=this.options.size;if(a>e){j=0;a=e;i=0;while(++j){c=this.get(a--);if(!c.length)break;i+=this.dimension(c);if(i>=n)break}}var o=e-j+1;if(this.options.wrap!="circular"&&o<1)o=1;if(this.inTail&&g){f+=this.tail;this.inTail=false}this.tail=null;if(this.options.wrap!="circular"&&e==this.options.size&&e-j+1>=1){var t=b.intval(this.get(e).css(!this.options.vertical?"marginRight":"marginBottom"));if(i-t>n)this.tail=i-n-t}if(u&&d===this.options.size&&this.tail){f-=this.tail;this.inTail=true}while(d-->o)f+=this.dimension(this.get(d));this.prevFirst=this.first;this.prevLast=this.last;this.first=o;this.last=e;return f},animate:function(c,f){if(this.locked||this.animating)return;this.animating=true;var b=this,d=function(){b.animating=false;c===0&&b.list.css(b.lt,0);!b.autoStopped&&(b.options.wrap=="circular"||b.options.wrap=="both"||b.options.wrap=="last"||b.options.size===null||b.last<b.options.size||b.last==b.options.size&&b.tail!==null&&!b.inTail)&&b.startAuto();b.buttons();b.notify("onAfterAnimation");if(b.options.wrap=="circular"&&b.options.size!==null)for(var a=b.prevFirst;a<=b.prevLast;a++)a!==null&&!(a>=b.first&&a<=b.last)&&(a<1||a>b.options.size)&&b.remove(a)};this.notify("onBeforeAnimation");if(!this.options.animation||f===false){this.list.css(this.lt,c+"px");d()}else{var g=!this.options.vertical?this.options.rtl?{right:c}:{left:c}:{top:c},e={duration:this.options.animation,easing:this.options.easing,complete:d};if(a.isFunction(this.options.animationStepCallback))e.step=this.options.animationStepCallback;this.list.animate(g,e)}},startAuto:function(a){if(a!==undefined)this.options.auto=a;if(this.options.auto===0)return this.stopAuto();if(this.timer!==null)return;this.autoStopped=false;var b=this;this.timer=window.setTimeout(function(){b.next()},this.options.auto*1e3)},stopAuto:function(){this.pauseAuto();this.autoStopped=true},pauseAuto:function(){if(this.timer===null)return;window.clearTimeout(this.timer);this.timer=null},buttons:function(a,b){if(a==null){a=!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)a=this.tail!==null&&!this.inTail}if(b==null){b=!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)b=this.tail!==null&&this.inTail}var c=this;if(this.buttonNext.size()>0){this.buttonNext.unbind(this.options.buttonNextEvent+".jcarousel",this.funcNext);a&&this.buttonNext.bind(this.options.buttonNextEvent+".jcarousel",this.funcNext);this.buttonNext[a?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",a?false:true);this.options.buttonNextCallback!==null&&this.buttonNext.data("jcarouselstate")!=a&&this.buttonNext.each(function(){c.options.buttonNextCallback(c,this,a)}).data("jcarouselstate",a)}else this.options.buttonNextCallback!==null&&this.buttonNextState!=a&&this.options.buttonNextCallback(c,null,a);if(this.buttonPrev.size()>0){this.buttonPrev.unbind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev);b&&this.buttonPrev.bind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev);this.buttonPrev[b?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",b?false:true);this.options.buttonPrevCallback!==null&&this.buttonPrev.data("jcarouselstate")!=b&&this.buttonPrev.each(function(){c.options.buttonPrevCallback(c,this,b)}).data("jcarouselstate",b)}else this.options.buttonPrevCallback!==null&&this.buttonPrevState!=b&&this.options.buttonPrevCallback(c,null,b);this.buttonNextState=a;this.buttonPrevState=b},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(d,c,h,g,i,k,l){if(this.options[d]==null||typeof this.options[d]!="object"&&c!="onAfterAnimation")return;var e=typeof this.options[d]=="object"?this.options[d][c]:this.options[d];if(!a.isFunction(e))return;var f=this;if(g===undefined)e(f,h,c);else if(i===undefined)this.get(g).each(function(){e(f,this,g,h,c)});else for(var j=function(a){f.get(a).each(function(){e(f,this,a,h,c)})},b=g;b<=i;b++)b!==null&&!(b>=k&&b<=l)&&j(b)},create:function(a){return this.format("<li></li>",a)},format:function(b,e){b=a(b);for(var d=b.get(0).className.split(" "),c=0;c<d.length;c++)d[c].indexOf("jcarousel-")!=-1&&b.removeClass(d[c]);b.addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+e)).css({"float":this.options.rtl?"right":"left","list-style":"none"}).attr("jcarouselindex",e);return b},className:function(a){return a+" "+a+(!this.options.vertical?"-horizontal":"-vertical")},dimension:function(e,d){var c=a(e);if(d==null)return!this.options.vertical?c.outerWidth(true)||b.intval(this.options.itemFallbackDimension):c.outerHeight(true)||b.intval(this.options.itemFallbackDimension);else{var f=!this.options.vertical?d-b.intval(c.css("marginLeft"))-b.intval(c.css("marginRight")):d-b.intval(c.css("marginTop"))-b.intval(c.css("marginBottom"));a(c).css(this.wh,f+"px");return this.dimension(c)}},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(b,a){if(a==null)a=this.options.size;return Math.round(((b-1)/a-Math.floor((b-1)/a))*a)+1}});b.extend({defaults:function(b){return a.extend(d,b||{})},intval:function(a){a=parseInt(a,10);return isNaN(a)?0:a},windowLoaded:function(){c=true}});a.fn.jcarousel=function(c){if(typeof c=="string"){var d=a(this).data("jcarousel"),e=Array.prototype.slice.call(arguments,1);return d[c].apply(d,e)}else return this.each(function(){var d=a(this).data("jcarousel");if(d){c&&a.extend(d.options,c);d.reload()}else a(this).data("jcarousel",new b(this,c))})}})(jQuery);
