(function($){

	function findPosX(obj) {
		var curleft = 0;
		if (obj.offsetParent) {
			while (1) {
				curleft+=obj.offsetLeft;
				if (!obj.offsetParent) {
					break;
				}
				obj=obj.offsetParent;
			}
		} else if (obj.x) {
			curleft+=obj.x;
		}
		return curleft;
	}

	function findPosY(obj) {
		var curtop = 0;
		if (obj.offsetParent) {
			while (1) {
				curtop+=obj.offsetTop;
				if (!obj.offsetParent) {
					break;
				}
				obj=obj.offsetParent;
			}
		} else if (obj.y) {
			curtop+=obj.y;
		}
		return curtop;
	}

	$(document).ready(function(){
		$('.A_double_slider').each(function(){
			var slider = $(this);
			slider.moving = false;
			slider.body_width = slider.find('.A_slider_body').width();
			slider.slider_width = slider.find('.A_right').width();
			slider.min_value = parseFloat(slider.attr('A_min_value')) || 0;
			slider.max_value = parseFloat(slider.attr('A_max_value')) || slider.body_width-slider.slider_width;

			slider.current_min = current_min = parseFloat(slider.attr('A_current_min')) || slider.min_value;
			slider.current_max = current_max = parseFloat(slider.attr('A_current_max')) || slider.max_value;

			if (slider.max_value==slider.min_value) {
				current_min_left = 0;
				current_max_left = slider.body_width - slider.slider_width;
			}
			else {
			
				var minv = Math.log(slider.min_value);
				var maxv = Math.log(slider.max_value);
 				var scale = (maxv-minv) / (slider.body_width - slider.slider_width);
				current_min_left = Math.round((Math.log(current_min)-minv) / scale);	
				current_max_left = Math.round((Math.log(current_max)-minv) / scale)
				
//				current_min_left = (current_min - slider.min_value) / (slider.max_value - slider.min_value) * (slider.body_width - slider.slider_width);
//				current_max_left = (current_max - slider.min_value) / (slider.max_value - slider.min_value) * (slider.body_width - slider.slider_width);
			}

			slider.find('.A_left').css({left: current_min_left, display:'block'});
			slider.find('.A_right').css({left: current_max_left, display:'block'});
			slider.find('.A_fill').css({left: current_min_left+slider.slider_width/2, width: current_max_left-current_min_left});

			slider.find('.A_left_label .A_label_value').text(current_min);
			slider.find('.A_right_label .A_label_value').text(current_max);

			$(this).find('.A_left').mousedown(function(event){
				event.preventDefault();
				slider.moving = 'left';
			});

			$(this).find('.A_right').mousedown(function(event){
				event.preventDefault();
				slider.moving = 'right';
			});

			$('body').mousemove(function(event){
			
//			alert ('slider.max_value = ' + slider.max_value + '<br>slider.min_value = ' + slider.min_value + '<br>slider.body_width = ' + slider.body_width + 'slider.slider_width = ' + slider.slider_width );
			
				switch (slider.moving) {
					case 'left':
						event.preventDefault();
						var x = event.pageX - findPosX(slider.find('.A_slider_body')[0]);
						if (x<0) x = 0;
						if (x>slider.body_width-slider.slider_width) x = slider.body_width-slider.slider_width;

						var right = parseFloat(slider.find('.A_right').css('left'));
						if (x>=right) x = right-1;

						slider.find('.A_left').css({left: x});
						slider.find('.A_fill').css({left: x+slider.slider_width/2, width: right-x});

						var minv = Math.log(slider.min_value);
  						var maxv = Math.log(slider.max_value);
 						var scale = (maxv-minv) / (slider.body_width - slider.slider_width);
  						var value = Math.round(Math.exp(scale*x+minv));
					
						slider.find('.A_left_label .A_label_value').text(value);
						slider.current_min = value;
						break;

					case 'right':
						event.preventDefault();
						var x = event.pageX - findPosX(slider.find('.A_slider_body')[0]);
						if (x<0) x = 0;
						if (x>slider.body_width-slider.slider_width) x = slider.body_width-slider.slider_width;

						var left = parseFloat(slider.find('.A_left').css('left'));
						if (x<=left) x = left+1;

						slider.find('.A_right').css({left: x});
						slider.find('.A_fill').css({left: left+slider.slider_width/2, width: x-left});

						var minv = Math.log(slider.min_value);
  						var maxv = Math.log(slider.max_value);
  						var scale = (maxv-minv) / (slider.body_width - slider.slider_width);
  						var value = Math.round(Math.exp(scale*x+minv));
  						
						slider.find('.A_right_label .A_label_value').text(value);
						slider.current_max = value;
						break;

					default:
				}
			}).mouseup(function(event){
				if (slider.moving) {
					event.preventDefault();
					slider.moving = false;
					eval('var min='+slider.current_min+'; var max='+slider.current_max+';'+slider.attr('onsliderchange'));
				}
			});
		});

	});

})(jQuery);
