var slider_dragged = false;
var slider = {};

function e(id) { return document.getElementById(id); }

function slider_left(el, pos) {
	if (!(el = e(el))) return 0;
	if (el.style && (typeof(el.style.left) == 'string')) {
		if (typeof(pos) == 'number') el.style.left = pos + 'px';
		else {
			pos = parseInt(el.style.left);
			if (isNaN(pos)) pos = 0;
		}
	} else if (el.style && el.style.pixelLeft) {
		if (typeof(pos) == 'number') el.style.pixelLeft = pos;
		else pos = el.style.pixelLeft;
	}
	return pos;
}

function slider_set() {
	var v = (slider.value) ? slider.value : 0;
	var x = Math.round((v - slider.v_min) / slider.scale);
	slider_left(slider.id, x);
	return v;
}

function slider_up() {
	if (slider_dragged) {
		var v = slider_set();
		if (slider.value_container) slider.value_container.value = v;

		if (document.removeEventListener) { // W3C
			document.removeEventListener('mousemove', slider_move, false);
			document.removeEventListener('mouseup', slider_up, false);
		} else if (document.detachEvent) { // IE
			document.detachEvent('onmousemove', slider_move);
			document.detachEvent('onmouseup', slider_up);
		}

	}
	slider_dragged = false;
}

function slider_move(e) {
	var e = (!e) ? window.event : e;
	if (slider_dragged) {
		var x = slider.start_x + e.screenX;
		if ( x > slider.d_max ) x = slider.d_max;
		if ( x < slider.d_min ) x = slider.d_min;
		slider_left(slider.id, x);
		var sliderValuePos = x - slider.d_min;
		var v = Math.round(sliderValuePos*slider.scale) + slider.v_min;
		slider.value = v;
		if (slider.value_container) slider.value_container.value = v;
		return false;
	}
	return
}

function slide(e) {
	if (!e) e = window.event;
	slider = (e.target) ? e.target : e.srcElement;

	slider.start_x = slider_left(slider.id) - e.screenX;

	document.onmousemove = slider_move;
	document.onmouseup = slider_up;
	slider_dragged = true;
	return false;
}

function slider_new(el, v_min, v_max, d_min, d_max, set_value_in) {

	slider = el;
	slider.onmousedown = slide;
	slider.v_min = v_min;
	slider.v_max = v_max;
	slider.d_min = d_min;
	slider.d_max = d_max;
	slider.value_container = set_value_in;
	slider.scale = (slider.v_max - slider.v_min) / (slider.d_max - slider.d_min);

	var v = {};
	if (slider.value_container) {
		v =  slider.value_container.value;
		if (typeof(v) != 'number') {
			v = parseInt(v);
			if (isNaN(v)) v = 1;
		}
	} else {
		v = v_min;
	}
	slider.value = v;
	slider_set();
}

