$(function(){
	$.extend($.fn.disableTextSelect = function() {
		return this.each(function(){
			if($.browser.mozilla){//Firefox
				$(this).css('MozUserSelect','none');
			}else if($.browser.msie){//IE
				$(this).bind('selectstart',function(){return false;});
			}else{//Opera, etc.
				$(this).mousedown(function(){return false;});
			}
		});
	});
});	

$(function(){
	$.extend($.fn.enableTextSelect = function() {
		return this.each(function(){
			if($.browser.mozilla){//Firefox
				$(this).css('MozUserSelect','auto');
			}else if($.browser.msie){//IE
				$(this).unbind('selectstart');
			}else{//Opera, etc.
				$(this).mousedown(function(){return true;});
			}
		});
	});
});	

(function( $ ){
	var methods = {
		init : function( options ) {
			var defaults = {  
				arrows: true,
				resizeScrollbar: true,
				type: 'absolute'//absolute|scrollTop TODO !
			};  
			var options = $.extend(defaults, options);
		

			return this.each(function() {
				var $this = $(this);
				$this.data({
					scroll_bg_el: null,
					scroll_content_el:null,
					scroll_scrollbar_bg_el:null,
					scroll_scrollbar_el:null,
					scroll_scrollbar_top_el:null,
					scroll_scrollbar_bot_el:null,
					scroll_total:0,
					scroll_h:0,
					scroll_ratio:0,
					scroll_pos:false,
					scroll_pospad:0,
					scroll_scrollbar_h:0,
					scroll_scrollbar_posh:0
				});
				//wrap around
				$this.addClass("scroll_content");
				$this.wrap( '<div class="scroll_bg"></div>');
				$this.data("scroll_bg_el",$this.parent(".scroll_bg"));
				$this.data("scroll_scrollbar_bg_el",$('<div class="scroll_scrollbar_bg"></div>'));
				$this.data("scroll_bg_el").append( $this.data("scroll_scrollbar_bg_el") );
				
				$this.data("scroll_scrollbar_el",$('<div class="scroll_scrollbar"></div>'));
				$this.data("scroll_scrollbar_pos_el",$('<div class="scroll_scrollbar_pos"></div>'));
				$this.data("scroll_scrollbar_el").append($this.data("scroll_scrollbar_pos_el") )
				$this.data("scroll_scrollbar_bg_el").append( $this.data("scroll_scrollbar_el") );
				$this.data("scroll_scrollbar_bg_el").hover(function() { $("body").disableTextSelect(); },function() { $("body").enableTextSelect(); });
				$this.data("scroll_scrollbar_pos_el").mousedown(function(ev) { $this.scrollContent("scrollBegin",ev); });
				$(document).mouseup(function(ev) { $this.scrollContent("scrollStop"); });
				
				$this.data("scroll_h", $this.data("scroll_bg_el").outerHeight());
				$this.data("scroll_total", $this.outerHeight());
				if($this.data("scroll_total")>$this.data("scroll_h"))
				{
					$this.data("scroll_scrollbar_bg_el").show();
				}
				
				
				$this.data("scroll_scrollbar_top_el",$('<div class="scroll_scrollbar_top"></div>'));
				$this.data("scroll_scrollbar_bg_el").append( $this.data("scroll_scrollbar_top_el") );
				
				$this.data("scroll_scrollbar_bot_el",$('<div class="scroll_scrollbar_bot"></div>'));
				$this.data("scroll_scrollbar_bg_el").append( $this.data("scroll_scrollbar_bot_el") );
				
				$this.data("scroll_scrollbar_h", $this.data("scroll_scrollbar_bg_el").outerHeight() - $this.data("scroll_scrollbar_top_el").outerHeight() - $this.data("scroll_scrollbar_bot_el").outerHeight());
				$this.data("scroll_scrollbar_el").css("top", $this.data("scroll_scrollbar_top_el").outerHeight() );
				if(options.arrows) 
				{
					$this.data("scroll_scrollbar_top_el").click(function () { $this.scrollContent('scrollUp'); return false; });
					$this.data("scroll_scrollbar_bot_el").click(function () { $this.scrollContent('scrollBot'); return false; });
				}
				/*else
				{	
					$this.data("scroll_scrollbar_h", $this.data("scroll_scrollbar_bg_el").outerHeight() );
				}*/
				$this.data("scroll_scrollbar_el").css("height", $this.data("scroll_scrollbar_h"));
				
				//tu rodzaj scrollbar posa'a skaluj czy staly !
				$this.data("scroll_scrollbar_posh", $this.data("scroll_scrollbar_pos_el").outerHeight() );
				//ratio
				$this.data("scroll_ratio", ($this.data("scroll_total")-$this.data("scroll_h"))/($this.data("scroll_scrollbar_h")-$this.data("scroll_scrollbar_posh")));
				
				$(document).mousemove(function(ev) {
				
					if($this.data("scroll_pos"))
					{
						var o=$this.data("scroll_scrollbar_el").offset();
						
						var newtop=ev.pageY-$this.data("scroll_pospad")-o.top;//-;
						if(newtop<0) { newtop=0; }
						var maxtop = $this.data("scroll_scrollbar_h")-$this.data("scroll_scrollbar_pos_el").height();
						if(newtop> maxtop) { newtop=maxtop; }
						$this.data("scroll_scrollbar_pos_el").css("top",newtop);
						
						scr=newtop*$this.data("scroll_ratio");
						$this.css("top",-1*scr);
					}
				});
				
				
			});
		},
	scrollUp : function()
		{
			var scroll_top=$(this).position().top;
			if(scroll_top<0)
			{
				new_scroll_top=scroll_top+25;
				if(new_scroll_top>0) { new_scroll_top=0; }
				$(this).stop().animate({"top":new_scroll_top});
				
				new_top = scr=new_scroll_top*1/$(this).data("scroll_ratio");
				$(this).data("scroll_scrollbar_pos_el").stop().animate({"top":-1*new_top});
			}
		},
	scrollBot : function()  
		{
			var scroll_top=$(this).position().top;
			var scroll_total = $(this).data("scroll_total");
			var scroll_h = $(this).data("scroll_h");
			if(scroll_top>-1*(scroll_total-scroll_h))
			{
				new_scroll_top=scroll_top-25;
				if(new_scroll_top<-1*(scroll_total-scroll_h)) { new_scroll_top=-1*(scroll_total-scroll_h); }
				//TU RODZAJ DO ZROBIENIA
				$(this).stop().animate({"top":new_scroll_top});
				
				new_top = scr=new_scroll_top*1/$(this).data("scroll_ratio");
				$(this).data("scroll_scrollbar_pos_el").stop().animate({"top":-1*new_top});
			}
		},
	scrollBegin : function(ev)
		{
			var el = $(this).data("scroll_scrollbar_pos_el");
			$(this).data("scroll_pospad",ev.pageY-el.offset().top);
			$(this).data("scroll_pos",true);
		},
	scrollStop : function()
		{
			$(this).data("scroll_pos",false);
		}

	}
	$.fn.scrollContent = function( method ) {
		if ( methods[method] ) {
		  return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
		  return methods.init.apply( this, arguments );
		} else {
		  $.error( 'Method ' +  method + ' does not exist on jQuery.scrollContent' );
		}    
  };

})( jQuery );
