var rating = {
	moving:			false,
		
	Init: function(place, cnt,  id)
	{
		$(place).each(function(i){
			var obj = $(".scale", this);
			
			// вешаем обработчики событий
			obj.bind('mousemove', {scale_object: this, cnt_value: cnt}, function(e){rating.ScaleMousemove(e);});
			obj.bind('mouseout', {scale_object: this, cnt_value: cnt}, function(e){rating.ScaleMouseout(e);});
			obj.bind('click', {scale_object: this, cnt_value: cnt, uniqueid: id}, function(e){rating.ScaleClick(e);});
			// выставляем значение по-умолчанию
			rating.SetValue(this, $(".value", this).val());
		});
	},

	ScaleMousemove: function(e)
	{
		// выходим если еще выполняется другое пермещение
		if(this.moving == true)
		{
			return false;
		}
		this.moving = true;

		var value_width = Math.ceil($(".scale", e.data.scale_object).width() / e.data.cnt_value);
		var position = Math.ceil((e.pageX - $(".scale", e.data.scale_object).offset().left) / value_width);
		// если значение за пределами допустимого значение
		if ( position < 0 || position > e.data.cnt_value )
		{
			// то выходим
			this.moving = false;
			return false;
		}
		this.SetValue(e.data.scale_object, position);
		
				
		this.moving = false;
	},
	
	ScaleMouseout: function(e)
	{
		var position = $(".value", e.data.scale_object).val();
		this.SetValue(e.data.scale_object, position);
		
	},
	
	ScaleClick: function(e)
	{
		var value_width = Math.ceil($(".scale", e.data.scale_object).width() / e.data.cnt_value);
		var position = Math.ceil((e.pageX - $(".scale", e.data.scale_object).offset().left) / value_width);
		// если значение за пределами допустимого значение
		if ( position < 0 || position > e.data.cnt_value )
		{
			return false;
		}
		
		$.ajax({
			type: 'POST',
			mode: 'abort',
			port: 'rating',
			dataType: 'json',
			data: {
				action: 'vote',
				mark: position,
				id: e.data.uniqueid
			},
			success: function (data) {
				if ( !data.success )
				{
					position = $(".value", e.data.scale_object).val();
					rating.SetValue(e.data.scale_object, position);
					alert('Ваш голос не принят');
					return;
				}
				$('#user_rating_count').html(data.count);
				$('#user_rating_td').remove();
				$('#user_rating div').attr('class', 'value_'+position);
			},
			fail: function (data) {
				position = $(".value", e.data.scale_object).val();
				rating.SetValue(e.data.scale_object, position);
				alert('Ваш голос не принят');
			}
		});
		
		this.SetValue(e.data.scale_object, position);
		$(".value", e.data.scale_object).val(position);
		$(".scale", e.data.scale_object).parent().remove();
	},
	
	SetValue: function(scale, position)
	{
		$(".scale", scale).attr('class', 'scale value_'+position);
	}
};


