﻿/*
 * Francesc Galbany 2010-04-20
 * Licensed under the MIT license
 *
 * Requires:
 *      jSwipe http://plugins.jquery.com/project/swipe by Ryan Scherf (tested v0.1)
 *      jQuery.ScrollTo http://flesler.blogspot.com/2007/10/jqueryscrollto.html by Ariel Flesler (tested v1.4.2)
 *      jqueri.effects.core for some easing effects (the default one i.e.)
 * $Date: 2010-04-19 (Mon, 19 Apr 2010) $
 * $version: 0.1
 *
 */
(function($){$.fn.scrollC=function(options){var defaults={next_bt:'',prev_bt:'',step:3,easing:'easeOutExpo',hide_bt:true,elem_tag:'a',swipe:false,axis:'x',sfact:1,scroll_duration:800,onscroll_end:function(){},onscroll_change:function(){}};var options=$.extend(defaults,options);if(!this)return false;return this.each(function(){var me=$(this)
var current_elem=-1;var first_elem=0;var last_elem=me.find(defaults.elem_tag+':last').index()-defaults.step+1;var state_v=false;gotoElem(me.find(defaults.elem_tag+':first').index());function gotoElem(elm){if(current_elem!=elm){me.scrollTo(defaults.elem_tag+':eq('+elm+')',{axis:defaults.axis,easing:defaults.easing,duration:defaults.scroll_duration,onAfter:defaults.onscroll_end});current_elem=elm;if(defaults.hide_bt){if(current_elem==first_elem){$(defaults.prev_bt).fadeOut('slow');if(current_elem>=last_elem){$(defaults.next_bt).fadeOut('slow');}else{$(defaults.next_bt).fadeIn('slow');}
state_v=true;}else if(current_elem>=last_elem){$(defaults.next_bt).fadeOut('slow');$(defaults.prev_bt).fadeIn('slow');state_v=true;}else if(state_v){$(defaults.next_bt).fadeIn('slow');$(defaults.prev_bt).fadeIn('slow');}}
defaults.onscroll_change(current_elem/last_elem);}}
if(defaults.next_bt.length){$(defaults.next_bt).click(function(){gotoElem(Math.min(me.find(defaults.elem_tag+':last').index()-defaults.step+1,Math.floor(current_elem)+Math.floor(defaults.step)));});}
if(defaults.prev_bt.length){$(defaults.prev_bt).click(function(){gotoElem(Math.max(0,current_elem-defaults.step));});}
function swipeNextElem(speed){_step=Math.floor(1+defaults.step*speed*defaults.sfact);gotoElem(Math.min(me.find(defaults.elem_tag+':last').index()-defaults.step+1,current_elem+Math.floor(_step)));}
function swipePrevElem(speed){_step=Math.floor(1+defaults.step*speed*defaults.sfact);gotoElem(Math.max(0,current_elem-_step));}
if(defaults.swipe){if(defaults.axis=='y'){me.swipe({swipeUp:swipeNextElem,swipeDown:swipePrevElem,threshold:{x:30,y:30}});}else if(defaults.axis=='x'){me.swipe({swipeLeft:swipeNextElem,swipeRight:swipePrevElem,threshold:{x:30,y:30}});}else if(defaults.axis=='xy'){me.swipe({swipeUp:swipeNextElem,swipeDown:swipePrevElem,swipeLeft:swipeNextElem,swipeRight:swipePrevElem,threshold:{x:30,y:30}});}}});};})(jQuery);
