/**
 *  Options : {
 *    step        : '10px', // Отместване на скрола 
 *    axis        : 'y',    // По хоризонталата или вертикалата 
 *    delay       : 30,     // Избакване при натиснат бутон
 *    direction   : '+'     // Посока на скролирането
 *  }
 *  Examples : ScrollButtons.setButtons('#up', '#down', '#container');
 *  Examples : <a href="#" id="up" onmouseover="ScrollButtons.setUp(this, '#container', { step : '30px'});">Up</a>
 */
var ScrollButtons = (function(){
    var public =  {
     
        defaults : {
            step        : '15px',
            axis        : 'y',
            delay       : 30,
            direction   : '+'
        },
       /**
        * @param DOM/selector obj
        * @param DOM/selector target
        * @param object settings
        */
        setUp : function(obj, target, settings){
            if(!settings) settings = {}; 
                          settings.direction = '-';
                          
            setButtons(obj, target, settings);
        },
       /**
        * @param DOM/selector obj
        * @param DOM/selector target
        * @param object settings
        */
        setDown : function(obj, target, settings){
            if(!settings) settings = {}; 
                          settings.direction = '+';
                          
            setButtons(obj, target, settings);
        },
       /**
        * @param DOM/selector up
        * @param DOM/selector down
        * @param DOM/selector target
        * @param object settings
        */
        setButtons : function(up, down, target, settings){
            this.setUp(up, target, settings);
            this.setDown(down, target, settings);
        }                
    }
    
    /**
     *  Private
     */
    var index = 0;
    /**
     * @param DOM/selector obj
     * @param DOM/selector target
     * @param object settings
     */
    function setButtons(obj, target, settings){
        var ev = $.data(obj, 'events');
        if(!ev || (!ev && ev.mousedown)){
        
            if(typeof settings == 'undefined') settings = {};
            for(p in public.defaults){
                if(typeof settings[p] == "undefined"){
                    settings[p] = public.defaults[p];
                }
            }
            var d = settings.direction;
            var match = settings.step.match(/[a-zA-Z]*:eq/);
            if(match){
                var length = $(target).find(settings.step.split(":")[0] || '*').length
            }
            $(obj)
                .mousedown(function(){
                    clearInterval(this.timer);
                    this.timer = setInterval(function(){
                        var dir = d+'='+settings.step;
                        if(match){
                            if(d == '+' && index < length) index++;
                            if(d == '-' && index > 0) index--;
                       
                            dir = settings.step+'('+index+')';
                        }
                    
                        $(target).scrollTo( dir, { axis: settings.axis });
                    },settings.delay);
                })
                .mouseup(function(){
                    clearInterval(this.timer);
                })
                .mouseleave(function(){
                    clearInterval(this.timer);
                });
         }
    }
    return public;
})();