function sliderzoom_Point(x, y){//Point constructor
	this.x = parseInt(x);
	this.y = parseInt(y);
}

function sliderzoom_getPoint(e){//Returns a point with coordinates corresponding to the containing element. 
	this.x =(e.offsetX)? e.offsetX : (e.layerX)? e.layerX : e.clientX - getParent(e).offsetLeft;
	this.y =(e.offsetY)? e.offsetY : (e.layerY)? e.layerY : e.clientY - getParent(e).offsetTop;
	var point = new sliderzoom_Point(this.x, this.y);
	return point
}

function sliderzoom_getXY(e){//Returns a coordinate with coordinates corresponding to the page. 
	var agt = navigator.userAgent.toLowerCase();
	if (agt.indexOf('safari') != -1)	{ //safari only
		this.x =e.clientX - document.body.scrollLeft;
		this.y =e.clientY - document.body.scrollTop;
	} else {
		this.x =e.clientX;
		this.y =e.clientY;
	}
	var point = new sliderzoom_Point(this.x, this.y);
	
	return point
}

function sliderzoom_getEPos(eId){
	var element = document.getElementById(eId);
	var scrOfx = 0,scrOfy = 0;
	if (document.body && document.body.scrollTop) { // all other Explorers, mozilla, opera
		scrOfx = document.body.scrollLeft;
		scrOfy = document.body.scrollTop;
	} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
		scrOfx = document.documentElement.scrollLeft;
		scrOfy = document.documentElement.scrollTop;
	} else if (typeof( self.pageYOffset ) == 'number') { // all except Explorer
		scrOfx = self.pageXOffset;
		scrOfy = self.pageYOffset;
	}
	this.x = (element.offsetLeft - scrOfx);
	this.y = (element.offsetTop - scrOfy);
	var point = new sliderzoom_Point(this.x, this.y);
	return point
}

function sliderzoom_adjustTypes(level) {
	var rbOrtho = document.getElementById('orthotypeOrtho');
	var rbCombi = document.getElementById('orthotypeCombi');
	var txtOrtho = document.getElementById('orthotypeOrthoText');
	var txtCombi = document.getElementById('orthotypeCombiText');

	if(5 > level) {
		rbOrtho.disabled = false;
		rbCombi.disabled = false;
		txtOrtho.className = 'ortholabelenabled';
		txtCombi.className = 'ortholabelenabled';
	} else {
		rbOrtho.disabled = true;
		rbCombi.disabled = true;
		txtOrtho.className = 'ortholabeldisabled';
		txtCombi.className = 'ortholabeldisabled';
		document.forms['pageform'].orthotype.value = 1;

	}
}

function sliderzoom_placeMarkerAtPixel(x) {

	if(x < g_sliderzoom_minimumMarkerX)  x = g_sliderzoom_minimumMarkerX;
	if(x > g_sliderzoom_maximumMarkerX) x = g_sliderzoom_maximumMarkerX;

	var marker = document.getElementById('markerContainer');
		
	marker.style.left = (x - 5) + 'px';
}

function sliderzoom_levelFromPixelX(x) {
	var iMarker;
	var minDistance = 9999;
	var level=0;
	
	for(iMarker=0; iMarker < g_sliderzoom_rgMarkerPositions.length; iMarker++) {
		var currentDistance = Math.abs(x - g_sliderzoom_rgMarkerPositions[iMarker]);
		if(currentDistance < minDistance) {
			minDistance = currentDistance;
			level = iMarker;
		}
	}
	return level;
}

function sliderzoom_placeMarker(level) {
	var marker = document.getElementById('markerContainer');
	
	marker.style.left = (g_sliderzoom_rgMarkerPositions[level] - 5) + 'px';
}

function sliderzoom_zoomToLevel(level) {
	var extentWidth = g_sliderzoom_rgExtentSizes[level];
	
	zoomtowidth(document.forms['pageform'], extentWidth); // function delivered by base.js in ml_simplex
}

// Functions called directly from events
function sliderzoom_trackClicked(e) {
	var p = sliderzoom_getPoint(e);

	g_sliderzoom_level = sliderzoom_levelFromPixelX(p.x);
	sliderzoom_placeMarker(g_sliderzoom_level);
	sliderzoom_adjustTypes(g_sliderzoom_level);
	sliderzoom_zoomToLevel(g_sliderzoom_level);
}

function sliderzoom_zoomInClicked() {
	if(g_sliderzoom_level > g_sliderzoom_minimumLevel) {
		g_sliderzoom_level--;
		sliderzoom_placeMarker(g_sliderzoom_level);
		sliderzoom_adjustTypes(g_sliderzoom_level);
		sliderzoom_zoomToLevel(g_sliderzoom_level);
	}
}

function sliderzoom_zoomOutClicked() {
	if(g_sliderzoom_level < g_sliderzoom_maximumLevel) {
		g_sliderzoom_level++;
		sliderzoom_placeMarker(g_sliderzoom_level);
		sliderzoom_adjustTypes(g_sliderzoom_level);
		sliderzoom_zoomToLevel(g_sliderzoom_level);
	}
}

function sliderzoom_markerDragStart(e) {
	g_sliderzoom_draggingMarker = true;
}

function sliderzoom_markerDragMove(e) {
	if(true == g_sliderzoom_draggingMarker) {

		var screenPositionOfClick = sliderzoom_getXY(e);	
		var sliderNavPosition = sliderzoom_getEPos('sliderNavigation');
		var sliderContainerPosition = sliderzoom_getEPos('sliderContainer');

		var inSliderX = screenPositionOfClick.x - sliderNavPosition.x - sliderContainerPosition.x;

		sliderzoom_placeMarkerAtPixel(inSliderX);
	}
}

function sliderzoom_markerDragEnd(e) {
	if(true == g_sliderzoom_draggingMarker) {
		g_sliderzoom_draggingMarker = false;
	
		var sliderPosition = sliderzoom_getEPos('markerContainer');

		g_sliderzoom_level = sliderzoom_levelFromPixelX(sliderPosition.x+5);
		sliderzoom_placeMarker(g_sliderzoom_level);
		sliderzoom_adjustTypes(g_sliderzoom_level);
		sliderzoom_zoomToLevel(g_sliderzoom_level);
	}
}



// Define globals
var g_sliderzoom_rgMarkerPositions = new Array(189, 166, 143, 121, 98, 76, 54, 31, 10);
var g_sliderzoom_rgExtentSizes = new Array(25000, 50000, 100000, 200000, 340000, 1000000, 3000000, 10000000, 47000000);

var g_sliderzoom_draggingMarker = false;
var g_sliderzoom_minimumLevel = 0;
var g_sliderzoom_maximumLevel = 8;
var g_sliderzoom_minimumMarkerX = 10;
var g_sliderzoom_maximumMarkerX = 189;

var g_sliderzoom_level = 0;


