(function($) {
	var pub = window.sideScroll = window.sideScroll || {};
	
	
	
	/***** CONFIG *****/
	
	var scrollerSelector = '#side-scroll';
	var scrollBoxSelector = '.playlist-item';
	var leftArrowSelector = '.left-arrow';
	var rightArrowSelector = '.right-arrow';
	var disabledArrowClass = 'disabled-arrow';
	var dist = false; // The distance between two boxes (false for auto, number for fixed)
	var speed = 500;
	var boxesShown = 5;
	
	
	
	/***** CACHE *****/
	
	var $scroller;
	var $boxes;
	var $leftArrow;
	var $rightArrow;
	
	
	
	/***** ACTIONS *****/
	
	var cur = 0;
	
	// Move the wrapper a distance (dist) to the left
	pub.moveLeft = function() {
		if($(this).hasClass(disabledArrowClass)) return;
		cur += 1;
		$scroller.animate({marginLeft: '-='+dist+'px'}, speed);
		enableRightArrow();
		if(cur >= ($boxes.length - boxesShown)) disableLeftArrow();
	}
	
	// Move the wrapper a distance (dist) to the right
	pub.moveRight = function() {
		if($(this).hasClass(disabledArrowClass)) return;
		cur -= 1;
		$scroller.animate({marginLeft: '+='+dist+'px'}, speed);
		enableLeftArrow();
		if(cur <= 0) disableRightArrow();
	}
	
	// Move the wrapper back to the begining
	pub.reset = function() {
		cur = 0;
		$scroller.animate({marginLeft: 0}, speed);
	}
	
	var disableLeftArrow = function() {
		$leftArrow.addClass(disabledArrowClass);
	}
	
	var disableRightArrow = function() {
		$rightArrow.addClass(disabledArrowClass);
	}
	
	var enableLeftArrow = function() {
		$leftArrow.removeClass(disabledArrowClass);
	}
	
	var enableRightArrow = function() {
		$rightArrow.removeClass(disabledArrowClass);
	}
	
	
	
	/***** INIT *****/
	
	$(function() {
		// Get Elements
		$scroller = $(scrollerSelector);
		$boxes = $scroller.find(scrollBoxSelector);
		$leftArrow = $(leftArrowSelector);
		$rightArrow = $(rightArrowSelector);
		if(dist === false) {
			dist = $boxes.eq(1).offset().left - $boxes.eq(0).offset().left;
		}
		
		// Setup Functions
		$leftArrow.click(pub.moveLeft);
		$rightArrow.click(pub.moveRight);
		disableRightArrow();
		if($boxes.length < boxesShown) disableLeftArrow();
	})
})(jQuery);