(function($){
	$(document).ready(function() {
		$('div.slider').each(function() {
			var inputValue = parseInt($(this).parent().next('input.slider').val(),10);
			var startValue = inputValue ? inputValue : 1;
			$(this).slider({
				range:'min',
				min:1,
				max:10,
				step:1,
				value: startValue,
				slide: function(event, ui) {
					$(this).parent().next('input.slider').val(ui.value);
					$(this).prev('.slider-titlebar').find('span.selected').removeClass('selected');
					$(this).prev('.slider-titlebar').find('span:nth-child(' + (ui.value) + ')').addClass('selected');
					calculateAverage();
				}
			});
		});
		
		$('input.slider').keyup(function() {
			var value = parseInt($(this).val(),10) ? parseInt($(this).val(),10) : 0;
			$(this).prev().find('div.slider').slider('value', value);
			var titleBar = $(this).prev().find('.slider-titlebar');
			titleBar.find('span.selected').removeClass('selected');
			titleBar.find('span:nth-child(' + (value) + ')').addClass('selected');
			calculateAverage();
		});
		
		$('div.slider-titlebar span').click(function(){
			var value = parseInt($(this).text(),10) ? parseInt($(this).text(),10) : 0;
			$(this).parent().next('div.slider').slider('value', value);
			$(this).parent().parent().next('input.slider').val(value);
			$(this).parent().find('span.selected').removeClass('selected');
			$(this).addClass('selected');
			calculateAverage();
		});
	});
	
    function calculateAverage()
    {
        var score = 0, amount = 0;
        $('input.slider:not("#average")').each(function() {
            if (value = parseInt($(this).val(),10) ? parseInt($(this).val(),10) : 0) {
                score += value;
                amount++;
            }
        });
        if (score) {
            $('input#average').val(Math.round(score / amount * 10) / 10);
        }
    }
})(jQuery);
