  function GetDistPoint(lat, lon, dir, dist, units) {
    // finds point offset by "dist"
    // returns point as "lat,lon"
    var lat_pt, lon_pt;
    var A, B, C, D;
    var rad;
    var factor;
    rad = 57.29577951;
    factor = 3963.1;
    if (units == "ft" || units == "feet")
      dist = dist / 5280;
    if (dist == 0) {
      lat_pt = lat;
      lon_pt = lon;
    } else {
      dist = Math.cos(dist / factor);
      // dist = sin(A) * sin(C) + cos(A) * cos(C) * cos(B - D)
      if (dir == "S") {
        lon_pt = lon;
        A = lat / rad;
        B = lon / rad;
        D = lon_pt / rad;
        // solve for C
        // dist = sin(A) * sin(C) + cos(A) * cos(C) * cos(0)
        // dist = sin(A) * sin(C) + cos(A) * cos(C)
        // dist = cos(A - C)
        // ArcCos(dist) = A - C
        C = A - Math.acos(dist);
        lat_pt = C * rad;
      } else if (dir == "N") {
        lon_pt = lon;
        B = lon_pt / rad;
        C = lat / rad;
        D = lon / rad;
        // solve for A
        // dist = sin(A) * sin(C) + cos(A) * cos(C) * cos(0)
        // dist = sin(A) * sin(C) + cos(A) * cos(C)
        // dist = cos(A - C)
        // ArcCos(dist) = A - C
        A = C + Math.acos(dist);
        lat_pt = A * rad;
      } else if (dir == "W") {
        lat_pt = lat;
        A = lat / rad;
        B = lon / rad;
        C = lat_pt / rad;
        // solve for D
        // dist - sin(A) * sin(C) = cos(A) * cos(C) * cos(B - D)
        // cos(B - D) = (dist - sin(A) * sin(C)) / (cos(A) * cos(C))
        // B - D) = ArcCos((dist - sin(A) * sin(C)) / (cos(A) * cos(C)))
        // D = B - ArcCos((dist - sin(A) * sin(C)) / (cos(A) * cos(C)))
        D = B - Math.acos((dist - Math.sin(A) * Math.sin(C)) / (Math.cos(A) * Math.cos(C)));
        lon_pt = D * rad;
      } else if (dir == "E") {
        lat_pt = lat;
        A = lat_pt / rad;
        C = lat / rad;
        D = lon / rad;
        // solve for B
        // dist - sin(A) * sin(C) = cos(A) * cos(C) * cos(B - D)
        // cos(B - D) = (dist - sin(A) * sin(C)) / (cos(A) * cos(C))
        // B - D) = ArcCos((dist - sin(A) * sin(C)) / (cos(A) * cos(C)))
        // D = B - ArcCos((dist - sin(A) * sin(C)) / (cos(A) * cos(C)))
        B = D + Math.acos((dist - Math.sin(A) * Math.sin(C)) / (Math.cos(A) * Math.cos(C)));
        lon_pt = B * rad;
      }
    }
    return lat_pt + "," + lon_pt;
  }

