/*
 * Div Scroller 0.9
 * federico panini - fpanini@gmail.com
 * div scroller DEMO website http://.....
 * MIT license
 * svn version 2
 * */

/**
 * 
 * @TODO
 * autoscroll
 */

(function($) {
	$.fn.divscroller = function(callerSettings) {
		var dimdiv_overflow = 0;
		var settings;
		var texttoscroll;
		var timer=0;		
		var y =0;
		var scroller_obect = this;
		var scroller,scrollup,scrolldown;
		var texttoscroll = scroller_obect.html();
		var settings = $.extend({
			img_scrollup : "images/arrow_up.gif",		
			img_scrolldown : "images/arrow_down.gif",
			height_distance : 80,
			sidescrolling : false,
			step : 10,
			eventFired : "mouseover"
		},callerSettings||{});
		
		// bind resizeAll() for 'this layout instance' to window.resize event
		$(window).resize(function () {	
			/*
			var timerID = "timerLayout_divscroller";
			if (window[timerID]) clearTimeout(window[timerID]);
			window[timerID] = null;
			window[timerID] = setTimeout(resizeScrollPane, 100);
			*/
			var timerID = "timerLayout_divscroller";
			if (window[timerID]) clearTimeout(window[timerID]);
			window[timerID] = null;
			// use a delay for IE because the resize event fires repeatly
			if ($.browser.msie) {
				window[timerID] = setTimeout(resizeScrollPane, 100);
			} else {
				// most other browsers have a built-in delay before firing the resize event
				resizeScrollPane(); // resize all layout elements NOW!
				
			} 			
		});
		
		
		//resize the scroller 4 the window
		resizeScrollPane = function() {
			w = $(window).width();
			h = $(window).height();
			
			su = $(scrollup).height();
			sd = $(scrolldown).height();
			sh = scroller.height();			
			scroller_obect.hide();
			doit = function() {				
				a = settings.height_distance-su-sd;
				if (a<0) {
					a=su+sd;
				} else {
					a = a+su+sd
				}
				scroller.css("height",(h-a)+"px");
				scroller.css("overflow","hidden");	
				if (settings.sidescrolling) $(scroller_spacer).css("height",(h-a-40)+"px");
			}			
			if ((dimdiv_overflow+settings.height_distance)>h) {
				doit();
				scrollup.show();
				scrolldown.show();				
			} else {
				scrollup.hide();
				scrolldown.hide();					
			}
			scroller_obect.show();
		};
		
		scrollto = function(){
			y=y+settings.step;	
			$(scroller).scrollTop(y);
			timer = window.setTimeout(scrollto,100);
		};		
		
		scrolltoup = function() {
			y=y+(-settings.step);
			$(scroller).scrollTop(y);
			timer = window.setTimeout(scrolltoup,100);			
		};		
		
		stopscroll = function() {
			window.clearTimeout(timer);
		};	

		scrollup = "<div id='scrollup'><a href='#'><img src='"+settings.img_scrollup+"' id='top_s' border='0'></a></div>";
		scroller_arrow = "<div id='scroller_arrow'></div>";
		scroller = "<div id='scroller'>"+texttoscroll+"</div>";		
		scrolldown =  "<div id='scrolldown'><a href='#'><img src='"+settings.img_scrolldown+"' id='down_s' border='0'></a></div>";
		scroller_spacer = "<div id='scroller_spacer'>&nbsp;</div>";			
		
		scrollup = $(scrollup);
		scroller_arrow = $(scroller_arrow);
		scroller = $(scroller);
		scrolldown = $(scrolldown);
		scroller_spacer = $(scroller_spacer);
		scroller_obect.html("");

		
		if (settings.sidescrolling) {
			if (settings.eventFired=="mouseover") {
				scroller_arrow.append(scrollup.mouseover(scrolltoup).mouseout(stopscroll));
				scroller_arrow.append(scroller_spacer);
				scroller_arrow.append(scrolldown.mouseover(scrollto).mouseout(stopscroll));			
				scroller_obect.append(scroller_arrow);		
				scroller_obect.append(scroller);
			} else {
				scroller_arrow.append(scrollup.mousedown(scrolltoup).mouseup(stopscroll));
				scroller_arrow.append(scroller_spacer);
				scroller_arrow.append(scrolldown.mousedown(scrollto).mouseup(stopscroll));			
				scroller_obect.append(scroller_arrow);		
				scroller_obect.append(scroller);
			}				
		} else {
			if (settings.eventFired=="mouseover") {
				scroller_obect.append(scrollup.mouseover(scrolltoup).mouseout(stopscroll));
				scroller_obect.append(scroller);
				scroller_obect.append(scrolldown.mouseover(scrollto).mouseout(stopscroll));
			} else {
				scroller_obect.append(scrollup.mousedown(scrolltoup).mouseup(stopscroll));	
				scroller_obect.append(scroller);
				scroller_obect.append(scrolldown.mousedown(scrollto).mouseup(stopscroll));
			}				
		}		
		dimdiv_overflow = scroller.height();
		resizeScrollPane();		
	};
})(jQuery);