var PortfolioScrollbar = {
	el_track:  null,
	el_left:   null,
	el_right:  null,
	el_slider: null,
	
	trackWidth:0,
	
	limitLeft:0,
	limitRight:0,
	limitSum:0,
	limitDelta:0,
	
	pos: {mouse:0, slider:0},
	
	options: {
		onScroll: null,
		scrollDuration: 300,
		startEnabled: false,
		height:32
	},
	
	init: function(options) {
		// Save pointers to elements
		PSB.el_track = jQuery('#scrollbar');
		PSB.el_left  = PSB.el_track.find('.left');
		PSB.el_right = PSB.el_track.find('.right');
		PSB.el_slider= PSB.el_track.find('.slider');
		PSB.trackWidth = PSB.el_track[0].offsetWidth;
		
		// Record the limits for movement
		PSB.limitLeft = PSB.el_left[0].offsetWidth;
		PSB.limitRight= PSB.trackWidth - PSB.el_right[0].offsetWidth - PSB.el_slider[0].offsetWidth;
		PSB.limitSum  = PSB.limitRight - PSB.limitLeft;
		PSB.limitDelta= PSB.limitLeft / PSB.limitSum;
		
		// Listen for mousedown on slider
		PSB.el_slider.mousedown(PSB.dragStart);
		
		// Save options
		jQuery.extend(PSB.options, options);
		
//		PSB.setEnabled(PSB.options.startEnabled, true);
	},
	
	dragStart: function(ev) {
		// Save the starting positions of the mouse and the slider
		PSB.pos.mouse = ev.pageX;
		PSB.pos.slider = PSB.el_slider[0].offsetLeft;
		// Listen for mouse movement
		jQuery().mousemove(PSB.dragMove).mouseup(PSB.dragStop);
		return false;
	},
	
	dragMove: function(ev) {
		var nx = PSB.pos.slider + ev.pageX - PSB.pos.mouse;
		if (nx < PSB.limitLeft) nx = PSB.limitLeft;
		else if (nx > PSB.limitRight) nx = PSB.limitRight;
		PSB.el_slider.css('left', nx);
		if (PSB.options.onScroll) PSB.options.onScroll(Math.round((nx / PSB.limitSum - PSB.limitDelta) * 10000) / 10000);
		return false;
	},
	
	dragStop: function(ev) {
		jQuery().unbind('mousemove', PSB.dragMove).unbind('mouseup', PSB.dragStop);
		return false;
	},
	
	setEnabled: function(enabled, skipAnimation) {
		var sliderAnim = null;
		var trackAnim = null;
		if (enabled  &&  PSB.el_slider[0].offsetHeight == 0) {
			sliderAnim = {height:PSB.options.height, top:0};
			trackAnim  = {width:PSB.trackWidth, left:0};
		}
		else if (!enabled  &&  PSB.el_slider[0].offsetHeight > 0) {
			sliderAnim = {height:0, top:parseInt(PSB.options.height/2)};
			trackAnim  = {width:0, left:parseInt(PSB.trackWidth/2)};
		}
		
		if (sliderAnim) {
			if (skipAnimation) {
				PSB.el_slider.css(sliderAnim);
				PSB.el_track.css(trackAnim);
			}
			else {
				if (enabled) {
					PSB.el_track.animate(trackAnim, {duration:200, queue:false, complete:function() {
						PSB.el_slider.animate(sliderAnim, {duration:100, queue:false});
					}});
				}
				else {
					PSB.el_slider.animate(sliderAnim, {duration:100, queue:false, complete:function() {
						PSB.el_slider.css('left', 40);
						PSB.el_track.animate(trackAnim, {duration:200, queue:false});
					}});
				}
			}
		}
	},
	
	setPos: function(pct) {
		if (pct < 0) pct = 0; else if (pct > 1) pct = 1;
		PSB.el_slider.css('left', PSB.limitLeft + PSB.limitSum*pct);
	},
	
	scrollTo: function(pct) {
		if (pct < 0) pct = 0; else if (pct > 1) pct = 1;
		var nx = PSB.limitLeft + PSB.limitSum*pct;
		PSB.stopScroll();
		PSB.el_slider.animate({left:nx}, PSB.options.scrollDuration);
	},
	
	stopScroll: function() {
		PSB.el_slider.stop();
	}
};

var PSB = PortfolioScrollbar;
Portfolio.Scrollbar = PSB;