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