/**
 * Scroller
 */
var Scroller = function( holder, content, isHorz )
{
	// defaults to vertical scrollbar (on the right)
	isHorz = (isHorz)?(true):(false);

	var me = this;
	me.dragObject = null;
	me.mouseOffset = 0;
					
	// the div's to be manipulated
	me.track = $(holder).append("<div class='scroll-track'></div>").find(".scroll-track");
	//me.track.css({"top":"0px","right":"8px"});
	me.track.css({"right":"8px"});
	me.thumb = me.track.append("<div class='scroll-thumb'><img width src='/images/backgrounds/spacer.gif' /></div>").find(".scroll-thumb");

	me.content = content;

	// set sizes, positions
	billboard.log("holder:"+$(holder).attr("id"));
	$(me.track).height( $(holder).height() );
	
	$(me.thumb).height( 40 );
	$(me.thumb).find("img").height( 40 );

	// assign handlers
	$("body").mousemove( function(e) { me.mousemove(e); } );
	$("body").mouseup( function(e) { me.mouseup(e); });
	me.track.click( function(e) { me.click(e) } );

	//set max/min
	me.min = 0;
	me.max = me.track.height() - me.thumb.height();

	me.click = function(event)
	{
		var top = $(me.thumb).offset().top;
		var bottom = top + $(me.thumb).height();
		var mousePos = me.getPos(event, 'Y');
		var thumbTop = top - $(me.track).offset().top;

		if(mousePos < top) me.update( thumbTop - 20);
		else if(mousePos > bottom) me.update( thumbTop + 20 );
	};
	me.mouseup = function(event)
	{
		me.dragObject = null;
	};
	me.mousemove = function(event){
		event = event || window.event;
		var mousePos = me.getPos(event,'Y');

		if(me.dragObject){
			billboard.log("scroller move,"+ mousePos + ","+me.mouseOffset );
			me.update(mousePos - me.mouseOffset);
			return false;
		}
	};
	me.makeDraggable = function (item){ 
	    item.mousedown( function(ev){ 
	        me.dragObject  = item; 
	        me.mouseOffset = $(me.track).offset().top;
			// re-set height 
			$(me.track).height( $(holder).height() );
			me.max = me.track.height() - me.thumb.height();

	        return false; 
	    } );
	} 
	me.update = function(pos)
	{
		billboard.log("update to position:"+pos+", max:"+me.max+"min:"+me.min);
		// clamp
		if ( pos > me.max ) pos = me.max;
		if ( pos < me.min ) pos = me.min;

		$(me.thumb).css( "top", pos+"px" );

		// 42
		// 55
		// 0
		
		var per = (pos - me.min) / (me.max - me.min); /*  42-0 / 55-0 */
		var range = $(me.content).height() - $(holder).height();
		var newpos = Math.round(-1*range*per);
	

		$(me.content).css( "top", newpos+"px" );
	};
	
	me.getPos = function (event, c) {
		var p = (c=='X')?'Left':'Top';
		return event['page' + c] || (event['client' + c] + (document.documentElement['scroll' + p] || document.body['scroll' + p])) || 0;	
	};
	
	me.getPosition = function (event){
		var top  = 0;
		while (event.offsetParent){
			top  += event.offsetTop;
			event = event.offsetParent;
		}
		top  += event.offsetTop;

		return top;
	};
}

