/* slider-with-stops */
var left = 0;
var center = 0.5;
var right = 1;


var slPos = 11;
var lastPos = 0;
var slDivId = 'sliderDiv';
var slDiv = null;
var slHalfWidth = 8;
var slSnapWidth = 10;
var slStops = new Array();
var slStopsRegions = new Array();

function stop( elemPtr, x ) {
	this.elemPtr = elemPtr;
	this.x = x;
	return this;
}

// it calculates the exact positions of slider stops (in pixels)
function getStops( stopsTableId, stopsPosition ) {
	slStops.length = 0;
	slStopsRegions.length = 0;
	if (document.getElementById) {
		var stopsTable = document.getElementById(stopsTableId);
//		alert(stopsTable.offsetWidth)
		if ( stopsTable ) {
			var stopsRowNodes = stopsTable.getElementsByTagName('tr')[0].childNodes;
			var overallCellWidth = 0;
			for ( var i = 0; i < stopsRowNodes.length; i++ ) {
				if ( stopsRowNodes.item(i).nodeType == 1 ) {
					var thisCellWidth = stopsRowNodes.item(i).offsetWidth;
					if ( stopsRowNodes.item(i).className.indexOf('stop') > -1 ) {
						slStops[slStops.length] = new stop( stopsRowNodes.item(i), Math.floor(overallCellWidth + ( thisCellWidth * stopsPosition )) );
						slStopsRegions[slStopsRegions.length] = overallCellWidth + thisCellWidth;
					}
					overallCellWidth += thisCellWidth;
				}
			}
		}
	}
}

// it moves the slider to the specified stop
function moveSliderToStop( stopNumber ) {
	if ( slStops[stopNumber] ) {
		slPos = stopNumber;
		hiliteMarks( lastPos, slPos );
		lastPos = slPos;
		slDiv.style.backgroundPosition = ( slStops[slPos].x - slHalfWidth ) + 'px 0px';
	}
}


function hiliteMarks( lastP, currP ) {
	if ( lastP != currP ) {
		slStops[lastP].elemPtr.style.fontWeight = 'normal';
		slStops[currP].elemPtr.style.fontWeight = 'bold';
		if ( document.getElementById('hostingPeriod') ) document.getElementById('hostingPeriod').value = slPos + 1;
		var lastFor = slStops[lastP].elemPtr.getAttribute('for');
		var currFor = slStops[currP].elemPtr.getAttribute('for');
		calcHosting( true )
		if ( lastFor != currFor ) {
			if ( document.getElementById(lastFor) ) document.getElementById(lastFor).className = 'sl-discount';
			if ( document.getElementById(currFor) ) document.getElementById(currFor).className = 'sl-discount-active';
		}
	}
}

/* slider event capture */

function smartMoveSliderTo(sliderX) {
	lastPos = slPos;
	var realMoveX = sliderX;
	if ( sliderX < slStops[0].x ) {
		// if before start position
		slPos = 0;
		realMoveX = slStops[0].x;
	} else if( sliderX > slStops[slStops.length - 1].x ) {
		// if after last stop
		slPos = slStops.length - 1;
		realMoveX = slStops[slStops.length - 1].x;
	} else {
		slPos = 0;
		for ( var i = 0; i < slStopsRegions.length; i++ ) {
			if ( i > 0) if ( sliderX > slStopsRegions[i - 1] ) slPos = i;
				else break;
		}
		if ( Math.abs( slStops[slPos].x - sliderX ) < slSnapWidth ) realMoveX = slStops[slPos].x;
	}
	hiliteMarks( lastPos, slPos );
	slDiv.style.backgroundPosition = ( realMoveX - slHalfWidth ) + 'px 0px';
}

var sliderX = null;
var windowX = null;

function sliderClick(evt) {
	sliderX = (window.event)? event.offsetX : evt.layerX;
	windowX = (window.event)? event.clientX : evt.pageX;
//			alert(sliderX + ' : ' + windowX)
	smartMoveSliderTo(sliderX);
	if (evt) {
		if (evt.cancelBubble) evt.cancelBubble = true;
		if (evt.stopPropagation) evt.stopPropagation();
	} else if (event) {
		event.cancelBubble = true;
	}
	return false;
}

function trackSlider(evt) {
	if (windowX) {
		currentWindowX = (window.event)? event.clientX : evt.pageX;
		smartMoveSliderTo( sliderX + (currentWindowX - windowX) );
		return false;
	}
}

function sliderRelease(evt) {
	moveSliderToStop( slPos );
	sliderX = null;
	windowX = null;
}


/* init functions */

function onResizeSlider() {
	if ( slDiv ) {
		getStops('stopsTable', center);
		moveSliderToStop( slPos );
	}
}

function initStopsSlider() {
	if (document.getElementById) {
		slDiv = document.getElementById( slDivId );
		if ( slDiv ) {
			onResizeSlider();
			window.onresize = onResizeSlider;
			slDiv.onmousedown = sliderClick;
			document.onmousemove = trackSlider;
			document.onmouseup = sliderRelease;
		}
	}
}

