//---------------------------------+
//  CARPE  S l i d e r        1.3  |
//  2005 - 12 - 10                 |
//  By Tom Hermansson Snickars     |
//  Copyright CARPE Design         |
//  http://carpe.ambiprospect.com/ |
//---------------------------------+

var indexFromSlider = 0;
// carpeGetElementByID: Cross-browser version of "document.getElementById()"
function carpeGetElementById(element)
{
	if (document.getElementById) element = document.getElementById(element);
	else if (document.all) element = document.all[element];
	else element = null;
	return element;
}
// carpeLeft: Cross-browser version of "element.style.left"
function carpeLeft(elmnt, pos)
{
	if (!(elmnt = carpeGetElementById(elmnt))) return 0;
	return crossbrw_setLeft(elmnt,pos);
}
function crossbrw_setLeft(elmnt, pos)
{
	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;
}
// carpeTop: Cross-browser version of "element.style.top"
function carpeTop(elmnt, pos)
{
	if (!(elmnt = carpeGetElementById(elmnt)))return 0;
	return crossbrw_setTop(elmnt,pos);
}
function crossbrw_setTop(elmnt, pos)
{
	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;
}

// moveSlider: Handles slider and display while dragging
function moveSlider(evnt)
{
	var evnt = (!evnt) ? window.event : evnt; // The mousemove event
	if (mouseover)// Only if slider is dragged
	{
		x = pxLeft + evnt.screenX - xCoord; // Horizontal mouse position relative to allowed slider positions
		y = pxTop + evnt.screenY - yCoord; // Horizontal mouse position relative to allowed slider positions
		if (x > xMax) x = xMax // Limit horizontal movement
		if (x < 0) x = 0 // Limit horizontal movement
		if (y > yMax) y = yMax // Limit vertical movement
		if (y < 0) y = 0 // Limit vertical movement
		
		//var ele = carpeGetElementById(sliderObj.id);
		//crossbrw_setLeft(ele);
		//crossbrw_setTop(ele);
		carpeLeft(sliderObj.id, x);
		carpeTop(sliderObj.id, y);
		
		var i = Math.round(sliderObj.valCount*(x + y)/sliderObj.pxLen);
		indexFromSlider = i;
                //var i = (sliderObj.valCount*(x + y)/sliderObj.pxLen);
		var v = fromVal;
		if(i==sliderObj.valCount)
			v += sliderObj.pxLen * sliderObj.scale;
		else if(i!=0)
			v += i * (sliderObj.pxLen/sliderObj.valCount) * sliderObj.scale ;	
		//v = Math.round(v * Math.pow(10, displayObj.dec)) / Math.pow(10, displayObj.dec)
		//displayObj.value = v // put the new value in the slider display element
		onMoveSliderCallback(sliderObj,v);
		return false
	}
	return
}	

// moveSlider: Handles the start of a slider move.
function slide(evnt,orientation)
{
	//var display = "display_"+slider_id;
	if (!evnt) evnt = window.event;
	sliderObj = (evnt.target) ? evnt.target : evnt.srcElement; // Get the activated slider element.
	//sliderObj = carpeGetElementById(sliderObj.id);
	
	if (orientation == 'vertical')  // Set limits and scale for vertical sliders.
	{
		fromVal = sliderObj.fromVal+sliderObj.scale*sliderObj.pxLen;
		xMax = 0
		yMax = sliderObj.pxLen
		sliderObj.scale = -sliderObj.scale // Invert scale for vertical sliders. "Higher is more."
	}	
	else// Set limits for horizontal sliders.
	{
		fromVal = sliderObj.fromVal;
		xMax = sliderObj.pxLen
		yMax = 0
	}
	//pxLeft = crossbrw_getLeft(sliderObj); // Sliders horizontal position at start of slide.
	//pxTop  = crossbrw_getTop(sliderObj) // Sliders vertical position at start of slide.
	pxLeft = carpeLeft(sliderObj.id); // Sliders horizontal position at start of slide.
	pxTop  = carpeTop(sliderObj.id) // Sliders vertical position at start of slide.

	xCoord = evnt.screenX // Horizontal mouse position at start of slide.
	yCoord = evnt.screenY // Vertical mouse position at start of slide.
	mouseover = true
	document.onmousemove = moveSlider // Start the action if the mouse is dragged.
	document.onmouseup = sliderMouseUp // Stop sliding.
}

// sliderMouseup: Handles the mouseup event after moving a slider.
// Snaps the slider position to allowed/displayed value. 
function sliderMouseUp()
{
	mouseover = false // Stop the sliding.
	if (document.removeEventListener) { // Remove event listeners from 'document' (Moz&co).
		document.removeEventListener('mousemove', moveSlider,false)
		document.removeEventListener('mouseup', sliderMouseUp,false)
	}
	else if (document.detachEvent) { // Remove event listeners from 'document' (IE&co).
		document.detachEvent('onmousemove', moveSlider)
		document.detachEvent('onmouseup', sliderMouseUp)
	}
	onSliderMouseUpCallback(sliderObj.id);
}



//--- comments in slide() + added initSlider()
function initSlider(sliderObj,length,count,from,to)
{
	sliderObj.pxLen = length // The allowed slider movement in pixels.
	sliderObj.valCount = count ? count - 1 : length // Allowed number of values in the interval.
	sliderObj.scale = (to-from) / length // Slider-display scale [value-change per pixel of movement].
	sliderObj.fromVal = from;//horizontal slilder
}

//added
function setSliderPosFromValue(sliderObj, value) 
{
	return crossbrw_setLeft(sliderObj,getSliderPosFromValue(sliderObj,value));
}

function getSliderPosFromValue(sliderObj, value)
{
	//var sliderObj = carpeGetElementById(slider_id);
	var pos;
	if(value == sliderObj.fromVal)
		pos = 0;
	else if(value == sliderObj.fromVal+sliderObj.pxLen*sliderObj.scale)
		pos = sliderObj.pxLen;
	else
		pos =(value-sliderObj.fromVal)/sliderObj.scale;
	return pos;
}

function crossbrw_getLeft(elmnt)
{
	var pos;
	if (elmnt.style && (typeof(elmnt.style.left) == 'string')) 
		pos = parseInt(elmnt.style.left);
	else if (elmnt.style && elmnt.style.pixelLeft) 
		pos =  elmnt.style.pixelLeft;
	return pos;
}
function crossbrw_getTop(elmnt)
{
	var pos;
	if (elmnt.style && (typeof(elmnt.style.top) == 'string')) 
		pos = parseInt(elmnt.style.top);
	else if (elmnt.style && elmnt.style.pixelTop) 
		pos = elmnt.style.pixelTop;
	return pos;
}
