/*scrollable JQuery Tools March 2008*/
(function(a){function e(b,e){var f=this,g=b.add(f),h=b.children(),i=0,j=e.vertical;if(!d){d=f}if(h.length>1){h=a(e.items,b)}if(e.size>1){e.circular=false}a.extend(f,{getConf:function(){return e},getIndex:function(){return i},getSize:function(){return f.getItems().size()},getNaviButtons:function(){return n.add(o)},getRoot:function(){return b},getItemWrap:function(){return h},getItems:function(){return h.find(e.item).not("."+e.clonedClass)},move:function(a,b){return f.seekTo(i+a,b)},next:function(a){return f.move(e.size,a)},prev:function(a){return f.move(-e.size,a)},begin:function(a){return f.seekTo(0,a)},end:function(a){return f.seekTo(f.getSize()-1,a)},focus:function(){d=f;return f},addItem:function(b){b=a(b);if(!e.circular){h.append(b);o.removeClass("disabled")}else{h.children().last().before(b);h.children().first().replaceWith(b.clone().addClass(e.clonedClass))}g.trigger("onAddItem",[b]);return f},seekTo:function(b,c,k){if(!b.jquery){b*=1}if(e.circular&&b===0&&i==-1&&c!==0){return f}if(!e.circular&&b<0||b>f.getSize()||b<-1){return f}var l=b;if(b.jquery){b=f.getItems().index(b)}else{l=f.getItems().eq(b)}var m=a.Event("onBeforeSeek");if(!k){g.trigger(m,[b,c]);if(m.isDefaultPrevented()||!l.length){return f}}var n=j?{top:-l.position().top}:{left:-l.position().left};i=b;d=f;if(c===undefined){c=e.speed}h.animate(n,c,e.easing,k||function(){g.trigger("onSeek",[b])});return f}});a.each(["onBeforeSeek","onSeek","onAddItem"],function(b,c){if(a.isFunction(e[c])){a(f).bind(c,e[c])}f[c]=function(b){if(b){a(f).bind(c,b)}return f}});if(e.circular){var k=f.getItems().slice(-1).clone().prependTo(h),l=f.getItems().eq(1).clone().appendTo(h);f.getItems().slice(2,e.itemsPerFrame+1).clone().appendTo(h).addClass(e.clonedClass);k.add(l).addClass(e.clonedClass);f.onBeforeSeek(function(a,b,c){if(a.isDefaultPrevented()){return}if(b==-1){f.seekTo(k,c,function(){f.end(0)});return a.preventDefault()}else if(b==f.getSize()){f.seekTo(l,c,function(){f.begin(0)})}});var m=b.parents().add(b).filter(function(){if(a(this).css("display")==="none"){return true}});if(m.length){m.show();f.seekTo(0,0,function(){});m.hide()}else{f.seekTo(0,0,function(){})}}var n=c(b,e.prev).click(function(a){a.stopPropagation();f.prev()}),o=c(b,e.next).click(function(a){a.stopPropagation();f.next()});if(!e.circular){f.onBeforeSeek(function(a,b){setTimeout(function(){if(!a.isDefaultPrevented()){n.toggleClass(e.disabledClass,b<=0);o.toggleClass(e.disabledClass,b>=f.getSize()-1)}},1)});if(!e.initialIndex){n.addClass(e.disabledClass)}}if(f.getSize()<2){n.add(o).addClass(e.disabledClass)}if(e.mousewheel&&a.fn.mousewheel){b.mousewheel(function(a,b){if(e.mousewheel){f.move(b<0?1:-1,e.wheelSpeed||50);return false}})}if(e.touch){var p={};h[0].ontouchstart=function(a){var b=a.touches[0];p.x=b.clientX;p.y=b.clientY};h[0].ontouchmove=function(a){if(a.touches.length==1&&!h.is(":animated")){var b=a.touches[0],c=p.x-b.clientX,d=p.y-b.clientY;f[j&&d>0||!j&&c>0?"next":"prev"]();a.preventDefault()}}}if(e.keyboard){a(document).bind("keydown.scrollable",function(b){if(!e.keyboard||b.altKey||b.ctrlKey||b.metaKey||a(b.target).is(":input")){return}if(e.keyboard!="static"&&d!=f){return}var c=b.keyCode;if(j&&(c==38||c==40)){f.move(c==38?-1:1);return b.preventDefault()}if(!j&&(c==37||c==39)){f.move(c==37?-1:1);return b.preventDefault()}})}if(e.initialIndex){f.seekTo(e.initialIndex,0,function(){})}}function c(b,c){var d=a(c);return d.length<2?d:b.parent().find(c)}function b(a,b){var c=parseInt(a.css(b),10);if(c){return c}var d=a[0].currentStyle;return d&&d.width&&parseInt(d.width,10)}a.tools=a.tools||{version:"@VERSION"};a.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:"> *",items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",size:1,itemsPerFrame:1,speed:400,vertical:false,touch:true,wheelSpeed:0}};var d;a.fn.scrollable=function(b){var c=this.data("scrollable");if(c){return c}b=a.extend({},a.tools.scrollable.conf,b);this.each(function(){c=new e(a(this),b);a(this).data("scrollable",c)});return b.api?c:this}})(jQuery)
