(function($){
	$.fn.spin = function(params){
		
		var params = $.extend({
			max: 100
		},params);
		
		var init = function (control) {
			
			var setClasses = function () {
				var val = getValue();
				if (val >= params.max) {
					up.addClass('disabled');
				} else {
					up.removeClass('disabled');
				}
				if (val <= 0) {
					down.addClass('disabled');
				} else {
					down.removeClass('disabled');
				}
			};
			
			var getValue = function () {
				var value = parseInt(input.val());
				if (isNaN(value)) value = 0;
				return value;
			}
			
			var down = $('<a class="down" href="/"></a>');
			var up = $('<a class="up" href="/"></a>');
			var input = control.find('input.input');
			var buttonCart = control.find('input.button');
			input.attr('readonly', true);
			
			control.append(up).append(down);
			
			setClasses();
			
			control.find('form').submit(function() {
				$('body').css('cursor', 'progress');
				$.ajax({
					type: "POST",
					url: document.location.pathname,
					data: input.attr('name') + "=" + input.val(),
					success: function(resp){
						$('#cart-summary').replaceWith(resp);
						$('body').css('cursor', 'default');
						if (getValue() > 0) {
							buttonCart.removeClass('empty').addClass('notempty');
						} else {
							buttonCart.removeClass('notempty').addClass('empty');
						}
					}
				});
				return false;
			});
			
			up.click(function () {
				if (up.hasClass('disabled')) return false;
				input.val(getValue() + 1);
				setClasses();
				return false;
			});
			
			down.click(function () {
				if (down.hasClass('disabled')) return false;
				input.val(getValue() - 1);
				setClasses();
				return false;
			});
		};
		
		return this.each(function(){
			init($(this));
		});
	};
})(jQuery)