// http://gisweb.azdeq.gov/arcgis/epanls/
// ADEQ: Arizona Department of Environmental Quality

function DoLatLong(latitude, longitude)
{
    // may be dms
    var lat = latitude.split(" ");
    if (lat.length >= 3) latitude = DMStoDD(lat[0], lat[1], lat[2]);

    var lon = longitude.split(" ");
    if (lon.length >= 3) longitude = DMStoDD(lon[0], lon[1], lon[2]);

    // validate entries
    if (isNaN(latitude) || latitude == 0)
    {
        ShowError("Invalid latitude");
        dojo.byId("latitude").focus();
        return;
    }
    if (isNaN(longitude) || longitude == 0)
    {
        ShowError("Invalid longitude");
        dojo.byId("longitude").focus();
        return;
    }

    // allow positive longitude
    if (longitude > 0) longitude = 0 - longitude;

    // validate lat/long
    if (latitude < 31 || latitude > 37)
    {
        ShowError("Latitude limited to 31-37");
        dojo.byId("latitude").focus();
        return;
    }
    if (longitude < -115  || longitude > -109)
    {
        ShowError("Longitude limited to 109-115");
        dojo.byId("longitude").focus();
        return;
    }
    
    _latitude = latitude;
    _longitude = longitude;
    
    // convert lat/long to utm
    var point = new esri.geometry.Point(_longitude, _latitude, new esri.SpatialReference({wkid:4326}));  // WGS 1984
    var graphic = new esri.Graphic(point);
    var geometryService = new esri.tasks.GeometryService(_geometryURL);
    dojo.connect(geometryService, "onProjectComplete", DoLatLong2);
    // send request to server
    geometryService.project([graphic], _NAD_1983_UTM_Zone_12N);
}

function DoLatLong2(graphics)  // server response
{
    if (graphics.length == 0)
    {
        ShowError("Cannot find lat/long");
        dojo.byId("latitude").focus();
        return;
    }

    // stringize extent
    var perimeter = parseInt(_distance * _MetersPerMile * 1.5);
    var extent = EnvelopeFromPoint(graphics[0].geometry, perimeter);
    var ext = String(parseInt(extent.xmin));
    ext += ":" + String(parseInt(extent.ymin));
    ext += ":" + String(parseInt(extent.xmax));
    ext += ":" + String(parseInt(extent.ymax));

    // go on to results page
    document.location.href = "results.html?distance=" + _distance + "&latitude=" + _latitude + "&longitude=" + _longitude + "&extent=" + ext;
}

// convert degrees minutes seconds to decimal degrees
function DMStoDD(D, M, S)
{
    // for Arizona:
    // latitude is a positive 2 digit number, ~ 31 to 37
    // longitude is a negative 3 digit number, ~ -115 to -109

    // verify user entered something
    if (D.length == 0) return 0;
    if (M.length == 0) return 0;
    if (S.length == 0) return 0;

    // javascript is not type-safe
    D = Number(D);
    M = Number(M);
    S = Number(S);

    // verify user entered numbers
    if (isNaN(D)) return 0;
    if (isNaN(M)) return 0;
    if (isNaN(S)) return 0;

    // add numbers together
    var MS = (M / 60) + (S / 3600);

    // make number negative if degree is 3 digit
    var DD = 0;
    if (D >= 100)
    {
        DD = 0 - D - MS;
    }
    else if (D <= -100)  // may already be negative
    {
        DD = D - MS;
    }
    else
    {
        DD = D + MS;
    }

    return DD;
}

