var carpemouseover                = false;
var carpeDefaultSliderLength      = 200;
var carpeSliderClassName          = 'carpe_slider';
var carpeSliderDisplayClassName   = 'carpe_slider_display';
var carpeSliderAffichClassName    = 'carpe_slider_affich';
var carpesliders                  = [];
var carpedisplays                 = [];
var carpeaffichs                  = [];
var carpeslider                   = {};
var carpedisplay                  = {};
var carpeaffich                   = {};

function carpeGetElementsByClass(className)
{
	var classElements = new Array();
	var els = document.getElementsByTagName("*");
	var elsLen = els.length;
	var pattern = new RegExp("\\b" + className + "\\b");
	for (var i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
function carpeLeft(elmnt, pos)
{
	if (!(elmnt = document.getElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.left) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.left = pos + 'px';
		else {
			pos = parseInt(elmnt.style.left);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelLeft) {
		if (typeof(pos) == 'number') elmnt.style.pixelLeft = pos;
		else pos = elmnt.style.pixelLeft;
	}
	return pos;
}
function carpeTop(elmnt, pos)
{
	if (!(elmnt = document.getElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.top) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.top = pos + 'px';
		else {
			pos = parseInt(elmnt.style.top);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelTop) {
		if (typeof(pos) == 'number') elmnt.style.pixelTop = pos;
		else pos = elmnt.style.pixelTop;
	}
	return pos;
}
function moveSlider(evnt)
{
	var evnt = (!evnt) ? window.event : evnt;
	if (carpemouseover) { 
		carpeslider.x = carpeslider.startOffsetX + evnt.screenX; 
		carpeslider.y = carpeslider.startOffsetY + evnt.screenY; 
		if (carpeslider.x > carpeslider.xMax) carpeslider.x = carpeslider.xMax;
		if (carpeslider.x < 0) carpeslider.x = 0;
		if (carpeslider.y > carpeslider.yMax) carpeslider.y = carpeslider.yMax;
		if (carpeslider.y < 0) carpeslider.y = 0; 
		carpeLeft(carpeslider.id, carpeslider.x);  
		carpeTop(carpeslider.id, carpeslider.y); 
		var sliderVal = carpeslider.x + carpeslider.y; 
		var sliderPos = (carpeslider.distance / carpedisplay.valuecount) * 
			Math.round(carpedisplay.valuecount * sliderVal / carpeslider.distance);
		var v = Math.round((sliderPos * carpeslider.scale + carpeslider.from) *
			Math.pow(10, carpedisplay.decimals)) / Math.pow(10, carpedisplay.decimals);
		carpedisplay.value = v;
		if (v > 1.5 && v < 1.8) carpeaffich.value = 66;
		if (v >= 1.8 && v < 2.2) carpeaffich.value = 81;
		if (v >= 2.2 && v < 2.55) carpeaffich.value = 94;
		if (v >= 2.55 && v < 2.85) carpeaffich.value = 107;
		if (v >= 2.85 && v < 3.1) carpeaffich.value = 117;
		if (v >= 3.1 && v <= 3.2) carpeaffich.value = 127;
		return false;
	}
	return
}
function slide(evnt)
{
	if (!evnt) evnt = window.event; 
	carpeslider = (evnt.target) ? evnt.target : evnt.srcElement;
	var dist = parseInt(carpeslider.getAttribute('distance')); 
	carpeslider.distance = dist ? dist : carpeDefaultSliderLength;
	var displayId = carpeslider.getAttribute('display');
	carpedisplay = document.getElementById(displayId);
	carpedisplay.sliderId = carpeslider.id; 
	var affichId = carpeslider.getAttribute('affich');
	carpeaffich = document.getElementById(affichId);
	carpeaffich.sliderId = carpeslider.id;
	var dec = parseInt(carpedisplay.getAttribute('decimals'));
	carpedisplay.decimals = dec ? dec : 0; 
	var val = parseInt(carpedisplay.getAttribute('valuecount')) 
	carpedisplay.valuecount = val ? val : carpeslider.distance + 1 
	var from = parseFloat(carpedisplay.getAttribute('from'))
	from = from ? from : 0 
	var to = parseFloat(carpedisplay.getAttribute('to')) 
	to = to ? to : carpeslider.distance 
	carpeslider.scale = (to - from) / carpeslider.distance 
	carpeslider.from = from;
	carpeslider.xMax = carpeslider.distance;
	carpeslider.yMax = 0;
	carpeslider.startOffsetX = carpeLeft(carpeslider.id) - evnt.screenX;
	carpeslider.startOffsetY = carpeTop(carpeslider.id) - evnt.screenY; 
	carpemouseover = true;
	document.onmousemove = moveSlider;
	document.onmouseup = sliderMouseUp;
	return false;
}
function sliderMouseUp()
{
	if (carpemouseover) {
		var v = (carpedisplay.value) ? carpedisplay.value : 0
		var pos = (v - carpeslider.from)/(carpeslider.scale) 
		if (carpeslider.yMax == 0) {
			pos = (pos > carpeslider.xMax) ? carpeslider.xMax : pos;
			pos = (pos < 0) ? 0 : pos;
			carpeLeft(carpeslider.id, pos); 
		}
		if (document.removeEventListener) {
			document.removeEventListener('mousemove', moveSlider, false);
			document.removeEventListener('mouseup', sliderMouseUp, false);
		}
		else if (document.detachEvent) { 
			document.detachEvent('onmousemove', moveSlider);
			document.detachEvent('onmouseup', sliderMouseUp);
			document.releaseCapture();
		}

	}
	carpemouseover = false;
}
function focusDisplay(evnt)
{
	if (!evnt) evnt = window.event; 
	var carpedisplay = (evnt.target) ? evnt.target : evnt.srcElement; 
	var lock = carpedisplay.getAttribute('typelock');
	if (lock == 'on') {
		carpedisplay.blur();
	}
	return;
}
function focusAffich(evnt)
{
	if (!evnt) evnt = window.event;
	var carpeaffich = (evnt.target) ? evnt.target : evnt.srcElement;
	var lock = carpeaffich.getAttribute('typelock');
	if (lock == 'on') {
		carpeaffich.blur();
	}
	return;
}
function carpeInit() 
{
	carpesliders = carpeGetElementsByClass(carpeSliderClassName)
	for (var i = 0; i < carpesliders.length; i++) {
		carpesliders[i].onmousedown = slide;
	}
	carpedisplays = carpeGetElementsByClass(carpeSliderDisplayClassName)
	for (var i = 0; i < carpedisplays.length; i++) {
		carpedisplays[i].value = carpedisplays[i].defaultValue; 
		carpedisplays[i].onfocus = focusDisplay;
	}
	carpeaffichs = carpeGetElementsByClass(carpeSliderAffichClassName) 
	for (var i = 0; i < carpeaffichs.length; i++) {
		carpeaffichs[i].value = carpeaffichs[i].defaultValue; 
		carpeaffichs[i].onfocus = focusAffich; 
	}
}

