/*
 * jQuery.SerialScroll
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 06/14/2009
 *
 * @projectDescription Animated scrolling of series.
 * @author Ariel Flesler
 * @version 1.2.2
 *
 * @id jQuery.serialScroll
 * @id jQuery.fn.serialScroll
 * @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required.
 * @return {jQuery} Returns the same jQuery object, for chaining.
 *
 * @link {http://flesler.blogspot.com/2008/02/jqueryserialscroll.html Homepage}
 *
 * Notes:
 *	- The plugin requires jQuery.ScrollTo.
 *	- The hash of settings, is passed to jQuery.ScrollTo, so its settings can be used as well.
 */
(function(B){var A=B.serialScroll=function(C){return B(window).serialScroll(C)};A.defaults={duration:1000,axis:"x",event:"click",start:0,step:1,lock:true,cycle:true,constant:true};B.fn.serialScroll=function(C){return this.each(function(){var O=B.extend({},A.defaults,C),G=O.event,N=O.step,R=O.lazy,T=O.target?this:document,H=B(O.target||this,T),M=H[0],L=O.items,J=O.start,P=O.interval,Q=O.navigation,S;if(!R){L=E()}if(O.force){U({},J)}B(O.prev||[],T).bind(G,-N,K);B(O.next||[],T).bind(G,N,K);if(!M.ssbound){H.bind("prev.serialScroll",-N,K).bind("next.serialScroll",N,K).bind("goto.serialScroll",U)}if(P){H.bind("start.serialScroll",function(V){if(!P){D();P=true;I()}}).bind("stop.serialScroll",function(){D();P=false})}H.bind("notify.serialScroll",function(X,V){var W=F(V);if(W>-1){J=W}});M.ssbound=true;if(O.jump){(R?H:E()).bind(G,function(V){U(V,F(V.target))})}if(Q){Q=B(Q,T).bind(G,function(V){V.data=Math.round(E().length/Q.length)*Q.index(this);U(V,this)})}function K(V){V.data+=J;U(V,this)}function U(Y,W){if(!isNaN(W)){Y.data=W;W=M}var b=Y.data,X,Z=Y.type,V=O.exclude?E().slice(0,-O.exclude):E(),a=V.length,c=V[b],d=O.duration;if(Z){Y.preventDefault()}if(P){D();S=setTimeout(I,O.interval)}if(!c){X=b<0?0:a-1;if(J!=X){b=X}else{if(!O.cycle){return}else{b=a-X-1}}c=V[b]}if(!c||O.lock&&H.is(":animated")||Z&&O.onBefore&&O.onBefore(Y,c,H,E(),b)===false){return}if(O.stop){H.queue("fx",[]).stop()}if(O.constant){d=Math.abs(d/N*(J-b))}H.scrollTo(c,d,O).trigger("notify.serialScroll",[b])}function I(){H.trigger("next.serialScroll")}function D(){clearTimeout(S)}function E(){return B(L,M)}function F(V){if(!isNaN(V)){return V}var X=E(),W;while((W=X.index(V))==-1&&V!=M){V=V.parentNode}return W}})}})(jQuery);