
var ie4 = (document.all && !document.getElementById) ? true : false;
var ie5 = (document.all && document.getElementById) ? true : false;
var ns6 = (!document.all && document.getElementById) ? true : false;
var ns4 = (document.layers) ? true : false;


var dt_points;
var dt_pointsOfLines = new Array();
var totalDist = 0, dt_lastMeasurement = 0;
var distanceDlg = null;
var dt_ds, dt_lib, dt_SG = null;
var dt_started = false;
var dt_mapWidth, at_mapHeight, dt_mapLeft = 0, dt_mapTop = 0, dt_meterPrPixel;
var distancetoolLineColor = 'black';
var distancetoolLineWidth = 1;
var offSetX, offSetY;
var jg3, DrawLineWHileMoving = false;

function DistanceTool (mapX_min, mapY_min, mapWidth, mapHeight) {
	dt_mapWidth = mapWidth;
	dt_mapHeight = mapHeight;
	dt_mapLeft = mapX_min-2;
	dt_mapTop = mapY_min-1;
	
	var	dt_bgLyr = '<img border=0  src="images/spacer.gif" vspace="0" hspace="0"' +
				' width=' + mapWidth + ' height=' + mapHeight + 
				' style="POSITION:ABSOLUTE; LEFT:0; TOP:0' + 
				'; cursor:crosshair' +
				';">';
	
	if (ie4 || ie5) {
		offSetX = Math.round(mapWidth/2) + mapX_min,
		offSetY = Math.round(mapHeight/2) + mapY_min;
		dt_addSGObj(false);
		createLayer('dt_bgLyr', null, mapX_min, mapY_min, mapWidth, mapHeight, dt_bgLyr, '', 'hidden');
		this.bgLyr = document.all['dt_bgLyr'];		
	} 

	
	
	
	this.bgLyr.onmousedown = distancetoolMouseDown;
    this.bgLyr.onmouseup = distancetoolMouseUp;
	this.init = distancetoolInit;
	this.start = distancetoolStart;
	this.stop = distancetoolStop;
	this.reset = distancetoolReset;
	this.clearLastLine = distancetoolClearLastLine;
	this.setLineColor = distancetoolSetLineColor;
	this.setLineWidth = distancetoolSetLineWidth;
	this.getXPoints = distancetoolGetXPoints;
	this.getYPoints = distancetoolGetYPoints;
	this.getPoints = distancetoolGetPoints;
	this.showHideBgLyr = distancetoolShowHideBgLyr;
}

function dt_addSGObj (remove) {

	var SG_id = "distance_SG";
	var objStr = '';
	if (remove) {
		destroyLayer('dt_lyr');
	}
	createLayer('dt_lyr', null, dt_mapLeft, dt_mapTop, dt_mapWidth, dt_mapHeight, objStr, '');
	jg3 = new jsGraphics("dt_lyr");
	
}
function distancetoolInit(newZoom) {
	distancetoolReset();
	dt_meterPrPixel = newZoom / dt_mapWidth;
}

function distancetoolStart() {
	jg3.clear(); 
	if (!dt_started) dt_started = true;
	distancetoolOpenDialog();
	this.showHideBgLyr (true);
	if (dt_points.length > 3) { showDistance(false); }
}
function distancetoolStop() {
	dt_started = false;
	distancetoolCloseDialog();
	this.showHideBgLyr (false);
}
function distancetoolReset() {
	distancetoolClearAllLines();
	dt_points = new Array();
	if (ns4||ns6) { dt_pointsOfLines = new Array(); }
	totalDist = 0;
	dt_lastMeasurement = 0;
	if (distanceDlg !=null) { showDistance(false); }
}
function distancetoolShowHideBgLyr (show) {
	if (ie4 || ie5 || ns6) {
		this.bgLyr.style.visibility = (show)? 'visible' : 'hidden';
	} else if (ns4) {
		this.bgLyr.visibility = (show)? 'show' : 'hide';	
	}
}
function distancetoolOpenDialog() {
	if (distanceDlg != null) {
		distanceDlg.focus();
		return;
	} else {
		if (ie4 || ie5 || ns6) {
			distanceDlg = window.open(maptoolURL + 'distance_dlg.htm', '', 
						'toolbar=no,status=no,menubar=no,width=180,height=40,top=40,left=100');
		} else if (ns4) {
			distanceDlg = window.open(maptoolURL + 'distance_ns4_dlg.htm', '', 
						'toolbar=no,status=no,menubar=no,width=170,height=100,top=40,left=100');		
		}
	}
}
function distancetoolCloseDialog () {
	if (distanceDlg != null) {
		distanceDlg.close();
		distanceDlg = null;
		if (dt_started) { 
			deselectTool();
		}
	}
}

function showDistance(addTotalDist) {
	var dist = getDistance(addTotalDist);
	var num1 = new Number(dist), num2 = new Number(totalDist);
	if (ie4 || ie5) {
		with (distanceDlg.document.all) {
			num1 = new String (num1);
			num2 = new String (num2);
			distance.innerText = num1.substring(0, num1.indexOf('.') + 3);
			total.innerText = num2.substring(0, num2.indexOf('.') + 3);
		}
	} else if (ns4) {
 		distanceDlg.showDistance(dist, totalDist);
	} else if (ns6) {
		with (distanceDlg.document) {
			num1 = new String (num1);
			num2 = new String (num2);
			getElementById("distance").innerHTML = num1.substring(0, num1.indexOf('.') + 3);
			getElementById("total").innerHTML = num2.substring(0, num2.indexOf('.') + 3);
		}	
	}
}

function getDistance(addTotalDist) {
	var dist = 0;
	var nPoints = dt_points.length;
	if (nPoints < 3) { 
		return 0; 
	} else {
		var dx = Math.abs(dt_points[nPoints-2] - dt_points[nPoints-4]);
		var dy = Math.abs(dt_points[nPoints-1] - dt_points[nPoints-3]);
		dist = Math.sqrt(dx*dx + dy*dy) * dt_meterPrPixel;
		if (addTotalDist) { totalDist += dist; }
		dt_lastMeasurement = dist;
		return dist;
	}
}
function distancetoolGetXPoints () {
	var nPoints = dt_points.length;
	var xpoints = new Array();
	if (nPoints > 0) {
		var n = 0;
		for (var i=0; i < nPoints - 1; i+=2) {
			xpoints[n] = dt_points[i];
			n++;
		}
	}
	return xpoints;
}
function distancetoolGetYPoints () {
	var nPoints = dt_points.length;
	var ypoints = new Array();
	if (nPoints > 0) {
		var n = 0;
		for (var i=1; i < nPoints; i+=2) {
			ypoints[n] = dt_points[i];
			n++;
		}
	}
	return ypoints;
}
function distancetoolGetPoints () {
	return dt_points;
}

function distancetoolSetLineColor (newColor) {
	distancetoolLineColor = newColor;
}
function distancetoolSetLineWidth (newWidth) {
	distancetoolLineWidth = newWidth;
}
function distancetoolDraw () {
	if (ie4 || ie5) {
		jg3.clear(); 
		jg3.setColor("#ff0000"); // red
	  	
		var tmpx = ""
		var tmpy = ""
		var nPoints = dt_points.length;
		if (nPoints > 0) {
			var n = 0;
			for (var i=0; i < nPoints - 1; i+=2) {
					if (tmpx != "")
					{
						jg3.drawLine(tmpx - dt_mapLeft , tmpy - dt_mapTop, dt_points[i] - dt_mapLeft, dt_points[i+1] - dt_mapTop); 
					}
					tmpx = dt_points[i] ;
					tmpy = dt_points[i+1] ;
					
				n++;
			}
		}
		jg3.paint();
	}
}

function distancetoolDoubleClicked () {
	alert('Double clicked');
}

function distancetoolClearAllLines () {
	if (ie4 || ie5) {
//		dt_ds.clear();
//		dt_SG.DrawSurface = dt_ds;
		dt_addSGObj(true);
	} else if (ns4 || ns6) {
		var counter = dt_pointsOfLines.length;
		if (counter > 0) {
			for (var i=0; i < counter; i++) {
				for (var j=0; j < dt_pointsOfLines[i]; j++) {
					destroyLayer('rubP' + i + (j+1));
				}
			}
		}
		dt_pointsOfLines = new Array();
	}
}
function distancetoolClearLastLine () {
	var nPoints = dt_points.length;
	if (nPoints > 3) {
		if (nPoints == 4) {
			distancetoolReset();
			return;
		}
		var newPoints = new Array(nPoints-2);
		for (var i=0; i < nPoints - 2; i++) {
			newPoints[i] = dt_points[i];
		}
		dt_points = newPoints;
		distancetoolDraw(); 
		totalDist -= dt_lastMeasurement;
		showDistance(false);
	}
}

function distancetoolMouseDown (e) {
	if ((ns4 && e.which == 1) || (ns6 && e.button == 0) || ((ie4 || ie5) && window.event.button == 1)) {
    	var x = (ns4 || ns6)? e.pageX : event.x+document.body.scrollLeft;
        var y = (ns4 || ns6)? e.pageY : event.y+document.body.scrollTop;
		var settimeout = false;
		if (dt_started) {
			if (ns4 && !distanceDlg.document) { 
				distanceDlg = null;
				distancetoolOpenDialog();
				settimeout = true;
			}
			var nPoints = dt_points.length;	
			dt_points[nPoints] = x;
			dt_points[nPoints+1] = y;
			if (nPoints > 0) {
				distancetoolDraw();
				if (settimeout) { 
					window.setTimeout('showDistance(true)', 1000);
				} else {
					showDistance(true);
				}
			}
			distanceDlg.focus();
		}
		return false;
	}
	return true;
}
function distancetoolMouseUp (e) {
	if ((ns4 && e.which == 1) || (ns6 && e.button == 0) || ((ie4 || ie5) && window.event.button == 1)) {
		if (ns4 && dt_started && distanceDlg != null) {
			distanceDlg.focus();		
		}
		return false;
	}
	return true;
}

