/**
 * @author fred
 */

var MatchedSlider = Class.create( Control.Slider,
{
	safeSetValue: function(sliderValue, handleIndex )
	{
		var oldDraggingValue	= this.dragging;
		var oldEventValue		= this.event;
		
		this.dragging = this.event = true;
		
		this.setValue( sliderValue, handleIndex );
		
		this.dragging	= oldDraggingValue;
		this.event		= oldEventValue;
	}
});

var MatchedSliders = Class.create(
{
	sliders: [],
	
	// TODO: convert these to events
	onSlide:	null,
	onChange:	null,
	disabled:	false,
	
	initialize: function( handles, tracks, options )
	{
		this.onSlide	= options.onSlide || null;
		this.onChange	= options.onChange || null;
		
		var recieveSlide	= this.recieveSlide.bind(this);
		var recieveChange	= this.recieveChange.bind(this);
		
		for( var i=0; i<handles.length; i++ )
		{
			newOptions			= Object.clone(options);
			newOptions.index	= i;
			
			this.sliders[i]	= this.createSlider( $(handles[i]), $(tracks[i]), newOptions );
			
			this.sliders[i].options.onSlide		= function(v){recieveSlide(this.options.index,v)}.bind(this.sliders[i]);
			this.sliders[i].options.onChange	= function(v){recieveChange(this.options.index,v)}.bind(this.sliders[i]);
			
		}
	},
	
	createSlider: function( handle, track, options )
	{
		return new MatchedSlider( handle, track, options );
	},
	
	recieveSlide: function(i,v)
	{
		for( var j=0; j<this.sliders.length; j++ )
			if(i!=j)
				this.sliders[j].safeSetValue(v);
		
		if( this.onSlide )
			this.onSlide(v);
	},
	
	recieveChange: function(i,v,obj)
	{
		for( var j=0; j<this.sliders.length; j++ )
			if(i!=j)
				this.sliders[j].safeSetValue(v);
		
		if( this.onChange )
			this.onChange(v);
	},
	
	setValue: function( v, noEvent )
	{
		if( !this.disabled )
		{
			for (var i = 0; i < this.sliders.length; i++)
				this.sliders[i].safeSetValue(v);
			
			if (!noEvent && this.onChange) 
				this.onChange(v);
		}
	},
	
	getValue: function()
	{
		return this.sliders[0].values[0];
	},
	
	setDisabled: function()
	{
		this.disabled = true;
		
		for( var i=0; i<this.sliders.length; i++ )
			this.sliders[i].setDisabled();
	},
	
	setEnabled: function()
	{
		this.disabled = false;
		
		for( var i=0; i<this.sliders.length; i++ )
			this.sliders[i].setEnabled();
	},
	
	dispose: function()
	{
		for( var i=0; i<this.sliders.length; i++ )
			this.sliders[i].dispose();
	}
});