var DualSlider = function(id, options) {
	options = options || {};
	var $ = window.jQuery;
	var sliderID = '#'+id;
	var min = options.min || 0;
	var max = options.max || 10;
	var low = options.low || min;
	var high = options.high || max;
	var defaultLow = options.defaultLow || min;
	var defaultHigh = options.defaultHigh || max;
	var unit = options.unit || 1;
	var wasLoaded = false;

	// Render the slider bar
	document.write('<div id="'+id+'" class="slider">');
		document.write('<div class="slider_bar">');
			document.write('<div class="ui-slider-handle slider_handle_low"></div>');
			document.write('<div class="ui-slider-handle slider_handle_high"></div>');
		document.write('</div>');
		document.write('<div class="slider_fields">');
			document.write('<input type="text" class="slider_field slider_field_low" name="'+id+'_low" id="'+id+'_low" />');
			document.write('<input type="text" class="slider_field slider_field_high" name="'+id+'_high" id="'+id+'_high"/>');
			document.write('<input type="hidden" name="'+id+'_min"/>');
			document.write('<input type="hidden" name="'+id+'_max"/>');
		document.write('</div>');
	document.write('</div>');

	// Setup Actions
	$(function() {
  $(sliderID+' .slider_bar').slider({
			range: true,
			min: min,
			max: max,
			handles: [
				{start: low},
				{start: high}
			],
			steps: Math.ceil((max-min)/unit),
			slide: function(event, index) {
				var setVal = index.handle.hasClass('slider_handle_high') ? setHigh : setLow;
				setVal(index.value);
			}
		});
		$('input[name='+id+'_low]').blur(function() {setLow(this.value)});
		$('input[name='+id+'_high]').blur(function() {setHigh(this.value)});
		setMin(min);
		setMax(max);
		setLow(low);
		setHigh(high);
		wasLoaded = true;
	});

	// Set/Get Minimum Value
	var setMin = function(val) {
		if(val == undefined) return min;
		$('input[name='+id+'_min]').val(val);
		min = val;
		return this;
	};

	// Set/Get Maximum Value
	var setMax = function(val) {
		if(val == undefined) return max;
		$('input[name='+id+'_max]').val(val);
		max = val;
		return this;
	};

	// Set/Get Low Value
	var setLow = function(val) {
		if(val == undefined) return low;
		if($(sliderID+' .slider_bar').slider('value', 0) != val) {
			$(sliderID+' .slider_bar').slider('moveTo', val, 0);
			val = $(sliderID+' .slider_bar').slider('value', 0);
		}
		$('input[name='+id+'_low]').val(val);
		low = val;
		return this;
	};

	// Set/Get High Value
	var setHigh = function(val) {
		if(val == undefined) return high;
		if($(sliderID+' .slider_bar').slider('value', 1) != val) {
			$(sliderID+' .slider_bar').slider('moveTo', val, 1);
			val = $(sliderID+' .slider_bar').slider('value', 1);
		}
		$('input[name='+id+'_high]').val(val);
		high = val;
		return this;
	};

	var reset = function() {
		setLow(defaultLow);
		setHigh(defaultHigh);
		return this;
	};

	// Public functions/variables
	return {
		min: setMin,
		max: setMax,
		low: setLow,
		high: setHigh,
		reset: reset
	};
};