﻿// DynamicMeasure.js
//concept taken from http://forums.esri.com/Thread.asp?c=158&f=2276&t=283724#880200 page.

var m_measureMouseDownSet = false;
var m_displayTag = false;
var lastPoint;

function addMeasureMouseEvents(displayTagId) {
    if (!m_measureMouseDownSet) {
        map.add_dblclick(MeasureCoordsDblClick);
        map.add_mouseDown(MeasureCoordsMouseDown);
        map.add_mouseMove(MeasureCoordsMouseMove);
        m_measureMouseDownSet = true;
    }
    m_displayTag = displayTagId;
    lastPoint = null;
}

function displayMeasurement(message) {
    if (m_displayTag != null) {
        var md = $get(m_displayTag);
        if (md != null) md.innerHTML = message;
    }
}

function MeasureCoordsDblClick(sender, eventArgs) {
    lastPoint = null;
    window.status = "";
}

function MeasureCoordsMouseDown(sender, eventArgs) {
    var coords = eventArgs.coordinate.coordinates;
    var point = new ESRI.ADF.Geometries.Point(coords[0], coords[1], map.get_spatialReference());
    lastPoint = point;
}

function MeasureCoordsMouseMove(sender, eventArgs) {
    if (lastPoint == null) { return; }

    if (m_currentMeasureToolbarTool == "polyline") {
        var coords = eventArgs.coordinate.coordinates;
        var thisPoint = new ESRI.ADF.Geometries.Point(coords[0], coords[1], map.get_spatialReference());
        var startX = lastPoint.get_x();
        var startY = lastPoint.get_y();
        var endX = thisPoint.get_x();
        var endY = thisPoint.get_y();
        var units = " feet";
        var hypotenuse = Math.sqrt(Math.pow(Math.abs(startX - endX), 2) + Math.pow(Math.abs(startY - endY), 2));

        if (hypotenuse > 0) {
            if (m_displayTag != "permitHelp") {
                var m2 = $get("MeasureUnits2");
                if (m2 != null) {
                    units = " " + m2.value;
                    switch (m2.value) {
                        case "Feet":
                            break;
                        case "Kilometers":
                            hypotenuse = hypotenuse / 3280.8399;
                            break;
                        case "Meters":
                            hypotenuse = hypotenuse / 3.2808399;
                            break;
                        case "Miles":
                            hypotenuse = hypotenuse / 5280;
                            break;
                    }
                    var tdsegment = $get("tdsegment");

                    if (tdsegment != null) tdsegment.innerHTML = Math.round(hypotenuse * 100) / 100;

                } else {
                    if (hypotenuse > 5280) {
                        hypotenuse = hypotenuse / 5280;
                        units = " miles";
                    }
                    displayMeasurement("Segment: " + Math.round(hypotenuse * 100) / 100 + units);
                }
            } else {
                displayMeasurement("Distance: " + Math.round(hypotenuse * 100) / 100 + units);
            }
        }
    }
}

function removeMeasureMouseEvents() {
    if (m_displayTag != "permitHelp")
        displayMeasurement("");
    else
        displayMeasurement("Click Continue when you are finished to complete the permit request.");

    map.remove_dblclick(MeasureCoordsDblClick);
    map.remove_mouseDown(MeasureCoordsMouseDown);
    map.remove_mouseMove(MeasureCoordsMouseMove);
    m_measureMouseDownSet = false;
}