(function($) {                                          // Compliant with jquery.noConflict()
$.fn.moj_scroller = function(o) {
    o = $.extend({
        btnUp: null,
        btnDown: null,
        speed: 40,
		autostart: 10,
		move: 3
    }, o || {});
    return this.each(function() {                           // Returns the element collection. Chainable.

        var running = true;
		var allow = true;
		var parent_allow = false;
		var manualprzesuw = false;
		var kierunek = 'dol';
		var old_kierunek = 'dol';
		var old_move = o.move;
		var div = $(this);
		
		if(o.btnUp) {
            $(o.btnUp).mouseover(function() {
				parent_allow = true;
				old_kierunek = kierunek;
				kierunek = 'dol';
				old_move = o.move;
				o.move = 9;
				manualprzesuw = setInterval(function() {
					go();
				},10);
            });
            $(o.btnUp).mouseout(function() {
				clearInterval(manualprzesuw);
				manualprzesuw = false;
				kierunek = old_kierunek;
				o.move = old_move;
				parent_allow = false;
				running = true;
            });
		}

        if(o.btnDown) {
            $(o.btnDown).mouseover(function() {
				parent_allow = true;
				old_kierunek = kierunek;
				kierunek = 'gora';
				old_move = o.move;
				o.move = 9;
				manualprzesuw = setInterval(function() {
					go();
				},10);
            });
            $(o.btnDown).mouseout(function() {
				clearInterval(manualprzesuw);
				manualprzesuw = false;
				kierunek = old_kierunek;
				o.move = old_move;
				parent_allow = false;
				running = true;
            });
		}

        function go() {
            if(running) {
				if (allow==false && parent_allow==false)
					return false;
				przesun();
				sprawdz_granice();
            }
            return false;
        };
		
		function startuj(){
			autoprzesuw = setInterval(function() {
				go();
			},o.speed);
		}
		
		function przesun(){
			if (kierunek == 'dol')
				offset += o.move;
			else
				offset -= o.move;
			
			if (offset>0 && (offset+widoczne)<wysokosc)
				jQuery(div).css('top','-'+offset+'px');
		}
		
		function sprawdz_granice() {
			if (kierunek == 'dol') {
				if ((offset+widoczne)>=wysokosc) {
					if (manualprzesuw != false) {
						running = false;
					}
					kierunek = 'gora';
				}
			} else {
				if (offset<=0) {
					if (manualprzesuw != false) {
						running = false;
					}	
					kierunek = 'dol';
				}
			}
		}
		
		function licz_obramowanie() {
			widoczne = jQuery(div).parent().height();
			wysokosc = jQuery(div).height();
			if (widoczne>=wysokosc) {
				o.autostart=false;
				return false;
			}
			offset = 0;
		}
		
		function ustaw_autoprzesuw() {
			if (o.autostart!=false) {
				setTimeout(function() {
					startuj();
				}, o.autostart);
				jQuery(div).mouseover(function() {
					allow = false;
				});
				jQuery(div).mouseout(function() {
					allow = true;
				});
			}
		}
		
		licz_obramowanie();
		ustaw_autoprzesuw();
    });
};
})(jQuery);
