(function(jQuery) {

jQuery.fn.customScroller = function(user_options) {
	var options = {
		prev: null,
		next: null
	};
	for (var propertyName in user_options) {
		options[propertyName] = user_options[propertyName];
	}
	
	jQuery(this).each(function() {
		var wrap = jQuery('<div class="cs-wrapper"></div>');
		jQuery(wrap).css({
			'display': 'block',
			'float': 'none',
			'position': 'relative',
			'overflow': 'hidden',
			'height': jQuery(this).height().toString() + 'px'
		});
		jQuery(this).wrap(wrap);
		jQuery(this).css({
			'position': 'absolute',
			'left': '0px',
			'top': '0px',
			'width': '100000px'
		});
		
		this.cs_li_is_visible = function (li) {
			var viewframe_left = -jQuery(this).position().left;
			var viewframe = jQuery(this).parent().width();
			if (jQuery(li).position().left >= viewframe_left && jQuery(li).position().left + jQuery(li).width() < viewframe_left + viewframe) {
				return true;
			}
			return false;
		}
		
		this.cs_scroll = function (slide_to) {
			if (jQuery(this).is(':animated')) {
				return false;
			}
			
			var current = jQuery(this).find('li.current');
			if (current.length == 0) {
				current = jQuery(this).find('li:first');
			}
			if (slide_to == 'prev') {
			    
				var target = jQuery(current).prev();
				if (target.length == 0) {
					return false;
				}
			}
			else {
				var target = jQuery(current).next();
				if (target.length == 0) {
					return false;
				}
			}
			
			
			var min_left = jQuery(this).parent().width() - jQuery(this).find('li:last').position().left - jQuery(this).find('li:last').width();
			var max_left = 0;
			var new_left = -jQuery(target).position().left;
			
			if (new_left < min_left) {
				return false;
			} else if (new_left > max_left) {
				return false;
			}

			jQuery(current).removeClass('current');
			jQuery(target).addClass('current');
			
			jQuery(this).animate({
				'left': (new_left).toString() + 'px'
			}, 400);
		}
		
		var me = this;
		jQuery(options['prev']).click(function() {
			me.cs_scroll('prev');
			return false;
		});
		
		jQuery(options['next']).click(function() {
			me.cs_scroll('next');
			return false;
		});
	});
};

})(jQuery)
