/*
 * 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: true,
                        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){
// 				alert(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);
                                }
                        }
                        
                        //Arrows
                        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));
                                });
                        }
                        
                        //iPad / iPhone
                        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);
