/* Slider */
new function ( jQuery ) {

var Slider = function ( sliderScaleSelector, sliderHeadSelector )
{
	this.onMoveCallbacks = [];
	this.onDropCallbacks = [];

	this.sliderScale = jQuery(sliderScaleSelector);
	this.head = jQuery(sliderHeadSelector);
	this.anchorPos = 0; // 0..1 - означает положение anchor (hotpoint) головы. 0 - левая, 1 - правая, 0.5 - середина

	this.headWidth = this.head.get(0).offsetWidth;
	this.scaleWidth = this.sliderScale.get(0).offsetWidth;
	this.offsetLeft = this.sliderScale.offset().left - parseInt(this.sliderScale.css("margin-left"), 10);

	this.minOffset = parseInt(this.sliderScale.css("margin-left"), 10);
	this.maxOffset = this.scaleWidth - this.headWidth;

	this.mouseHeadOffset = 0;

	this.isDragging = false;

	var _sliderInstance = this;

	this.position = 0;
	this.positionReal = 0;
	this.positionOld = Number.POSITIVE_INFINITY;

	this.ranges = [];
	this.ranges[0] = { slider: 0, real: 0 };
	this.head.mousedown( function( evt ){
		_sliderInstance.isDragging = true;
		_sliderInstance.mouseHeadOffset = evt.pageX - _sliderInstance.head.offset().left;
		_sliderInstance.offsetLeft = _sliderInstance.sliderScale.offset().left - parseInt(_sliderInstance.sliderScale.css("margin-left"), 10);
		return false;
	});

	jQuery(document.body).mousemove( function( evt ) {
		if (_sliderInstance.isDragging)
		{
			var position = evt.pageX - _sliderInstance.offsetLeft - _sliderInstance.mouseHeadOffset  - _sliderInstance.minOffset;
			_sliderInstance.positionReal = position;
			_sliderInstance.setPosition(position);
		}
		return false;
	});

	jQuery(document.body).mouseup( function() {
		_sliderInstance.isDragging = false;

		for (var i = 0; i < _sliderInstance.onDropCallbacks.length; i++)
			_sliderInstance.onDropCallbacks[i]( _sliderInstance );

		return false;
	});

	this.setPosition(this.position);
}

Slider.prototype.setHeadWidth = function ( width )
{
	this.headWidth = width;
}

Slider.prototype.setScaleWidth = function ( width )
{
	this.scaleWidth = width;
}

Slider.prototype.setPosition = function ( sliderPosition, shouldAnimate )
{
	var position = Math.max( 0, Math.min( sliderPosition, this.maxOffset ) );

	var left = position + this.minOffset - this.headWidth * this.anchorPos; 

	if ( shouldAnimate )
		this.head.animate({ "left": left + "px" }, 100);
	else
		this.head.css('left', left + 'px');

	this.position = position;

	if ( position != this.positionOld )
	{
		this.positionOld = position;
		for (var i = 0; i < this.onMoveCallbacks.length; i++)
			this.onMoveCallbacks[i]( this );
	}
}

Slider.prototype.onMove = function( callback )
{
	this.onMoveCallbacks[ this.onMoveCallbacks.length ] = callback;
}

Slider.prototype.onDrop = function( callback )
{
	this.onDropCallbacks[ this.onDropCallbacks.length ] = callback;
}


Slider.prototype.addRange = function ( slider, real )
{
	this.ranges[this.ranges.length] = { slider: slider, real: real };
}

Slider.prototype.toReal = function ( sliderOffset )
{
	var i = 1;
	var real = 0;

	while ( i < this.ranges.length && sliderOffset >= this.ranges[i].slider )
	{
		real = this.ranges[i].real;
		i++;
	}

	if ( i < this.ranges.length )
	{
		var realPartWidth = (this.ranges[i].real - this.ranges[i-1].real);
		var sliderPartWidth = (this.ranges[i].slider - this.ranges[i-1].slider);
		var coeff = realPartWidth / sliderPartWidth;
		real += (sliderOffset - this.ranges[i - 1].slider) * coeff ;
	}
	
	return real;
}

Slider.prototype.toSlider = function ( realOffset )
{
	var i = 1;
	var slider = 0;

	while ( i < this.ranges.length && realOffset >= this.ranges[i].real )
	{
		slider = this.ranges[i].slider;
		i++;
	}

	if ( i < this.ranges.length )
	{
		var realPartWidth = (this.ranges[i].real - this.ranges[i-1].real);
		var sliderPartWidth = (this.ranges[i].slider - this.ranges[i-1].slider);
		var coeff = sliderPartWidth / realPartWidth;
		slider += (realOffset - this.ranges[i - 1].real) * coeff ;
	}

	return slider;
}

/* end Slider */
slider1 = null;

jQuery(document).ready(function () {
	slider1 = new Slider("#Slider .scale", "#Slider .head");
	var periodLabels =  jQuery( "#Slider .labels li" );

//	var points = [
//		{ index: 0, position: Number.NEGATIVE_INFINITY, offset: 0, imgWidth: 32, price: "7 395"}, // Fake
//		{ index: 0, position: 0, offset: -5, imgWidth: 32, price: "7 395"},
//		{ index: 1, position: 70, offset: -43, imgWidth: 43, price: "10 175" },
//		{ index: 2, position: 132, offset: -49, imgWidth: 52, price: "24 025" },
//		{ index: 3, position: 193, offset: -60, imgWidth: 63, price: "48 590"},
//		{ index: 3, position: Number.POSITIVE_INFINITY, offset: -60, imgWidth: 63, price: "48 590"} // Fake
//	];
//
//	var points now moved to block!

	var priceLabel = jQuery( "#Slider .head .amount" );
	priceLabel.html(points[0].price);

	var sliderDiv = jQuery( "#Slider" );
	sliderDiv.attr("class", "slider range_1");

//	console.log("points:", points);

	function GetPosition( points, slider )
	{
		var posIndex = 0;
		var position = points[0].position;

		for( var i = 0; i < points.length - 1; i++ )
		{
			if ( slider.positionReal >= points[i].position && slider.positionReal < points[i+1].position)
			{
				var positionMid = (points[i].position + points[i+1].position + points[i+1].offset) / 2;
				posIndex = ( slider.positionReal < positionMid ) ? points[i].index : points[i+1].index;
				position = points[posIndex].position + points[posIndex].offset;
				break;
			}
		}

		return { posIndex: posIndex, position: position };
	}

	function GetPositionByIndex( points, slider, posIndex )
	{
		var position = position = points[posIndex].position + points[posIndex].offset;
		return { posIndex: posIndex, position: position };
	}

	var posIndexOld = Number.NEGATIVE_INFINITY;

	function SliderMove( slider ) {
		
		var position = GetPosition(points, slider);
		var posIndex = position.posIndex;
		position = position.position;
		slider.setPosition(position);
		if ( posIndexOld != posIndex )
		{
			jQuery(".slider_container .kits").css("display", "none");
			jQuery(".slider_container .kit_" + (posIndex + 1)).css("display", "block");
			slider.head.attr("class", "head cart_" + (posIndex + 1));
			priceLabel.html(points[posIndex].price);
			slider.setHeadWidth(points[posIndex].imgWidth);
			sliderDiv.attr("class", "slider range_" + (posIndex + 1));
			posIndexOld = posIndex;
		}
	}


	//  initial one-time slide
	slider1.positionReal = points[3].position + points[3].offset;
	slider1.setPosition(points[3].position + points[3].offset);
	SliderMove( slider1 );

	function SliderMoveManual(){
		var curPos = GetPosition(points, slider1).posIndex;
		var prevPos = curPos -1;
		if(curPos > 0){

			slider1.positionReal = points[prevPos].position + points[prevPos].offset;
			slider1.setPosition(points[prevPos].position + points[prevPos].offset);
			SliderMove( slider1 );
		} else {
			clearInterval(intervalID)
		}
	}
	var intervalID = setInterval(SliderMoveManual, 1000);
// end of initial one-time slide


	slider1.onMove( SliderMove );


});
	} ( dom.query );