//      }}}
 
+    /**
+     * Convert fload degrees to N/S or E/W Lat/Lon as D, D M, or D M S
+     *
+     * @param int    $d         The decimal lat lon
+     * @param string $LatLon    (Lat or Lon)
+     * @param string $type      (D, DM, or DMS)
+     * @param int    $precision Decimal Precision
+     *
+     * @return array (text, dir, deg, min, sec)
+     */
+    static public function f2LatLon($d, $LatLon, $type, $precision)
+    {
+        $sign = +1;
+        if ($d < 0) {
+            $sign = -1;
+        }
+
+        switch ($LatLon) {
+        case 'Lat':
+            // Is it N or S?
+            $dir = 'N';
+            if ($d < 0) {
+                $dir = 'S';
+            }
+
+            $deg_size = 2;
+            $dir_opts = array('1' => 'N', '-1' => 'S');
+            break;
+        case 'Lon':
+            // Is it E or W?
+            $dir      = 'E';
+            if ($d < 0) {
+                $dir = 'W';
+            }
+
+            $deg_size = 3;
+            $dir_opts = array('1'  => 'E', '-1' => 'W');
+            break;
+        }
+        $d      = abs($d);
+        $deg    = 0;
+        $min    = 0;
+        $sec    = 0;
+        $format = "%s %0" . $deg_size . "." . $precision . "f°";
+
+        if ($type == 'D') {
+            $deg = $d;
+        } elseif ($type == 'DM' || $type == 'DMS') {
+            $deg    = (int) $d;
+            $d      = ($d - $deg) * 60;
+            $min    = $d;
+            $format = "%s %02d° %02.".$precision."f'";
+            if ($type == 'DMS') {
+                $min = (int) $d;
+                $sec = ($d - $min) * 60;
+                $format = "%s %0".$deg_size."d° %02d' %02.".$precision."f\"";
+            }
+        }
+
+        // Setup possible direction selection
+        $dir_select = array(
+            array(
+                'value'   => 1,
+                'name'    => $dir_opts[1],
+                'default' => ($sign == 1)
+            ),
+            array(
+                'value'   => - 1,
+                'name'    => $dir_opts[-1],
+                'default' => ($sign == - 1)
+            )
+        );
+
+        return array(
+            'text'     => $dms = sprintf($format, $dir, $deg, $min, $sec),
+            'd_only'   => ($sign * ($deg + ($min + $sec / 60) / 60)),
+            'dir'      => $sign,
+            'dir_list' => $dir_select,
+            'deg'      => $deg,
+            'min'      => $min,
+            'sec'      => $sec,
+        );
+    }
+
+    /**
+     * Converts DMS ( Degrees / minutes / seconds )
+     * to decimal format longitude / latitude
+     *
+     * @param type $deg
+     * @param type $min
+     * @param type $sec
+     *
+     * @return array
+     */
+    public static function DMStoDEC($deg, $min, $sec)
+    {
+        return $deg + ((($min * 60) + ($sec)) / 3600);
+    }
+
+    public static function convertLatToDMSString($lat)
+    {
+        $coord = Toolkit_Common::DECtoDMS($lat);
+        if ($coord == 0) {
+            return false;
+        }
+        return sprintf("%d°%d'%d\"%s", $coord[0], $coord[1], $coord[2], $coord[3] ? 'N' : 'S');
+    }
+
+    public static function convertLonToDMSString($lon)
+    {
+        $coord = Toolkit_Common::DECtoDMS($lon);
+        if ($coord == 0) {
+            return false;
+        }
+        return sprintf("%d°%d'%d\"%s", $coord[0], $coord[1], $coord[2], $coord[3] ? 'W' : 'E');
+    }
+
+    /**
+     * Converts decimal longitude / latitude to DMS
+     * (Degrees / minutes / seconds)
+     *
+     * This is the piece of code which may appear to
+     * be inefficient, but to avoid issues with floating
+     * point math we extract the integer part and the float
+     * part by using a string function.
+     *
+     * @param float $coord lat lon to convert
+     *
+     * @return array
+     */
+    public static function DECtoDMS($coord)
+    {
+        if ($coord == 0) {
+            return false;
+        }
+        $isnorth = $coord >= 0;
+        $coord   = abs($coord);
+        $deg     = floor($coord);
+        $coord   = ($coord - $deg) * 60;
+        $min     = floor($coord);
+        $sec     = floor(($coord-$min) * 60);
+        return array($deg, $min, $sec, $isnorth);
+    }
+
        //      {{{ arrayFlatten()
 
        /**
 
     geocoder: null,
     map: null,
     setDefaultLat: function(lat) {
-      GLM_GeoMap.defaultLat = lat;
+        GLM_GeoMap.defaultLat = lat;
     },
     setDefaultLon: function(lon) {
         GLM_GeoMap.defaultLon = lon;
     },
     initialize: function() {
+        console.log('GLM_GeoMap started');
         GLM_GeoMap.createMap();
         var lat = $("#lat").val();
         var lon = $("#lon").val();
+//        console.log('Lat: ' + lat);
+//        console.log('Lon: ' + lon);
+//        console.log('Loc:' + $("#loc").length);
+        var latDeg = $("#latDeg");
+        var lonDeg = $("#lonDeg");
+        var latDir = $("#latDir");
+        var lonDir = $("#lonDir");
+        var latMin = $("#latMin");
+        var lonMin = $("#lonMin");
+        var latSec = $("#latSec");
+        var lonSec = $("#lonSec");
+//        console.log('Lat[deg]: ' + latDeg.val());
+//        console.log('Lon[deg]: ' + lonDeg.val());
+//        console.log('Lat[dir]: ' + latDir.val());
+//        console.log('Lon[dir]: ' + lonDir.val());
+//        console.log('Lat[min]: ' + latMin.val());
+//        console.log('Lon[min]: ' + lonMin.val());
+//        console.log('Lat[sec]: ' + latSec.val());
+//        console.log('Lon[sec]: ' + lonSec.val());
+        var hemiLat = (latDir.val() == '1')
+            ? LocationFormatter.NORTH
+            : LocationFormatter.SOUTH;
+        console.log(hemiLat);
+        var lat = LocationFormatter.DMSToDecimal(
+            parseInt(latDeg.val()),
+            parseInt(latMin.val()),
+            parseInt(latSec.val()),
+            hemiLat
+        );
+        var hemiLon = (lonDir.val() == '1')
+            ? LocationFormatter.EAST
+            : LocationFormatter.WEST;
+        var lon = LocationFormatter.DMSToDecimal(
+            parseInt(lonDeg.val()),
+            parseInt(lonMin.val()),
+            parseInt(lonSec.val()),
+            hemiLon
+        );
+        console.log('Lat: ' + lat);
+        console.log('Lon: ' + lon);
+
         if ($("#loc").length > 0) {
             var location = $("#loc").val();
         } else {
         }
 
         if (lat && lon) {
-            GLM_GeoMap.createWithLatLon();
+            GLM_GeoMap.createWithLatLon(lat, lon);
         } else if (location) {
+            console.log('Creating with location' + location);
             GLM_GeoMap.createWithLocation(location);
         } else if (street || city || state || zip) {
+            console.log('Creating with street,city,state,zip');
             GLM_GeoMap.createWithAddress(street, city, state, zip);
         } else {
+            console.log('Creating with client location');
             GLM_GeoMap.createWithClientLocation();
         }
     },
             mapTypeId: google.maps.MapTypeId.ROADMAP
         };
         GLM_GeoMap.map = new google.maps.Map(
-            document.getElementById("map_canvas"),
-            myOptions
-        );
+                document.getElementById("map_canvas"),
+                myOptions
+                );
     },
     addMarkerToMap: function(LatLng) {
         var marker = new google.maps.Marker({
         });
         var location = marker.getPosition();
         GLM_GeoMap.updateLatLonDiv(location);
-        google.maps.event.addListener(marker, 'dragend', function(){
+        google.maps.event.addListener(marker, 'dragend', function() {
             var location = marker.getPosition();
             GLM_GeoMap.updateLatLonDiv(location);
         });
         GLM_GeoMap.map.setZoom(15);
     },
     updateLatLonDiv: function(point) {
-        $("#lat").val(point.lat());
-        $("#lon").val(point.lng());
+        var latDegrees = point.lat();
+        var latDMS = LocationFormatter.decimalLatToDMS(latDegrees);
+        var lonDegrees = point.lng();
+        var lonDMS = LocationFormatter.decimalLongToDMS(lonDegrees);
+        var latDeg = $("#latDeg");
+        var lonDeg = $("#lonDeg");
+        var latDir = $("#latDir");
+        var lonDir = $("#lonDir");
+        var latMin = $("#latMin");
+        var lonMin = $("#lonMin");
+        var latSec = $("#latSec");
+        var lonSec = $("#lonSec");
+        var hemiLat = (latDMS.hemi == LocationFormatter.NORTH)
+            ? 1
+            : -1;
+        var hemiLon = (lonDMS.hemi == LocationFormatter.EAST)
+            ? 1
+            : -1;
+        // update lat fields
+        latDeg.val(latDMS.deg);
+        latMin.val(latDMS.min);
+        latSec.val(latDMS.sec);
+        latDir.val(hemiLat);
+        // update lon fields
+        lonDeg.val(lonDMS.deg);
+        lonMin.val(lonDMS.min);
+        lonSec.val(lonDMS.sec);
+        lonDir.val(hemiLon);
     },
     createWithClientLocation: function() {
         // Try HTML5 geolocation
         if (navigator.geolocation) {
+            console.log('Found location with HTML5');
             navigator.geolocation.getCurrentPosition(function(position) {
                 var pos = new google.maps.LatLng(
-                    position.coords.latitude,
-                    position.coords.longitude
-                );
+                        position.coords.latitude,
+                        position.coords.longitude
+                        );
                 GLM_GeoMap.addMarkerToMap(pos);
             }, function() {
                 GLM_GeoMap.handleNoGeolocation(true);
             });
+        } else {
+            console.log('Failed finding location with HTML5');
         }
     },
-    createWithLatLon: function() {
+    createWithLatLon: function(lat, lon) {
         GLM_GeoMap.addMarkerToMap(new google.maps.LatLng(
-            $("#lat").val(),
-            $("#lon").val()
+            lat,
+            lon
         ));
     },
     createWithDefaultLatLon: function() {
 
         GLM_GeoMap.addMarkerToMap(new google.maps.LatLng(
-            GLM_GeoMap.defaultLat,
-            GLM_GeoMap.defaultLon
-        ));
+                GLM_GeoMap.defaultLat,
+                GLM_GeoMap.defaultLon
+                ));
     },
     createWithLocation: function(address) {
         GLM_GeoMap.geocoder = new google.maps.Geocoder();
         GLM_GeoMap.geocoder.geocode(
-            {'address': address},
-            function(results, status) {
-                if (status == google.maps.GeocoderStatus.OK) {
-                    GLM_GeoMap.map.setCenter(results[0].geometry.location);
-                    GLM_GeoMap.addMarkerToMap(results[0].geometry.location);
-                } else {
-                    GLM_GeoMap.createWithClientLocation();
-                }
+                {'address': address},
+        function(results, status) {
+            if (status == google.maps.GeocoderStatus.OK) {
+                GLM_GeoMap.map.setCenter(results[0].geometry.location);
+                GLM_GeoMap.addMarkerToMap(results[0].geometry.location);
+            } else {
+                GLM_GeoMap.createWithClientLocation();
             }
+        }
         );
     },
     createWithAddress: function(street, city, state, zip) {
         }
         GLM_GeoMap.geocoder = new google.maps.Geocoder();
         GLM_GeoMap.geocoder.geocode(
-            {'address': location},
-            function(results, status) {
-                if (status == google.maps.GeocoderStatus.OK) {
-                    GLM_GeoMap.map.setCenter(results[0].geometry.location);
-                    GLM_GeoMap.addMarkerToMap(results[0].geometry.location);
-                } else {
-                    GLM_GeoMap.createWithClientLocation();
-                }
+                {'address': location},
+        function(results, status) {
+            if (status == google.maps.GeocoderStatus.OK) {
+                GLM_GeoMap.map.setCenter(results[0].geometry.location);
+                GLM_GeoMap.addMarkerToMap(results[0].geometry.location);
+            } else {
+                GLM_GeoMap.createWithClientLocation();
             }
+        }
         );
     },
     handleNoGeolocation: function(errorFlag) {
         var infowindow = new google.maps.InfoWindow(options);
         GLM_GeoMap.map.setCenter(options.position);
     }
-}
\ No newline at end of file
+}
+
+function LocationFormatter() {
+}
+;
+
+LocationFormatter.NORTH = 'N';
+LocationFormatter.SOUTH = 'S';
+LocationFormatter.EAST = 'E';
+LocationFormatter.WEST = 'W';
+
+LocationFormatter.roundToDecimal = function(inputNum, numPoints) {
+    var multiplier = Math.pow(10, numPoints);
+    return Math.round(inputNum * multiplier) / multiplier;
+};
+
+LocationFormatter.decimalToDMS = function(location, hemisphere) {
+    if (location < 0) {
+        location *= -1; // strip dash '-'
+    }
+    var degrees = Math.floor(location);          // strip decimal remainer for degrees
+    var minutesFromRemainder = (location - degrees) * 60;       // multiply the remainer by 60
+    var minutes = Math.floor(minutesFromRemainder);       // get minutes from integer
+    var secondsFromRemainder = (minutesFromRemainder - minutes) * 60;   // multiply the remainer by 60
+    var seconds = LocationFormatter.roundToDecimal(secondsFromRemainder, 2); // get minutes by rounding to integer
+    DMS = {"deg":degrees,"min":minutes,"sec":seconds,"hemi":hemisphere};
+    return DMS;
+};
+
+LocationFormatter.decimalLatToDMS = function(location) {
+    var hemisphere = (location < 0) ? LocationFormatter.SOUTH : LocationFormatter.NORTH; // south if negative
+    return LocationFormatter.decimalToDMS(location, hemisphere);
+};
+
+LocationFormatter.decimalLongToDMS = function(location) {
+    var hemisphere = (location < 0) ? LocationFormatter.WEST : LocationFormatter.EAST;  // west if negative
+    return LocationFormatter.decimalToDMS(location, hemisphere);
+};
+
+LocationFormatter.DMSToDecimal = function(degrees, minutes, seconds, hemisphere) {
+    console.log('DMSToDecimal: '
+            + degrees + ' '
+            + minutes + ' '
+            + seconds + ' '
+            + hemisphere);
+    var ddVal = degrees + minutes / 60 + seconds / 3600;
+    ddVal = (hemisphere == LocationFormatter.SOUTH || hemisphere == LocationFormatter.WEST) ? ddVal * -1 : ddVal;
+    return LocationFormatter.roundToDecimal(ddVal, 5);
+};
\ No newline at end of file
 
                                $stmt->execute();
                                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                                        foreach ($row as $k => $v) {
-                                               if ($k == 'logo') {
-                                                       $defaults['old_logo_rmv'] = $v;
+                        switch ($k) {
+                        case 'logo':
+                            $defaults['old_logo_rmv'] = $v;
                                                        $k = 'image_rmv';
                                                        $v = '<img src="'.MEMBER_PHOTOS.$v.'"
                                                                                alt="'.$v.'">';
-                                               }
-                                               $defaults[$k] = $v;
+                            break;
+                        case 'lat':
+                            $latDMS = Toolkit_Common::f2LatLon(
+                                $v,
+                                'Lat',
+                                'DMS',
+                                2
+                            );
+                            $sec = (float)sprintf("%01.2f", $latDMS['sec']);
+                            $defaults['lat'] = array(
+                                'dir' => $latDMS['dir'],
+                                'deg' => $latDMS['deg'],
+                                'min' => $latDMS['min'],
+                                'sec' => (float)$sec
+                            );
+                            break;
+                        case 'lon':
+                            $latDMS = Toolkit_Common::f2LatLon(
+                                $v,
+                                'Lon',
+                                'DMS',
+                                2
+                            );
+                            $sec = (float)sprintf("%01.2f", $latDMS['sec']);
+                            $defaults['lon'] = array(
+                                'dir' => $latDMS['dir'],
+                                'deg' => $latDMS['deg'],
+                                'min' => $latDMS['min'],
+                                'sec' => (float)$sec
+                            );
+                            break;
+                        default:
+                            $defaults[$k] = $v;
+                            break;
+                        }
                                        }
                                }
 
                        'name'    => 'description',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'description',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'description',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                        'name'    => 'guide',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'guide',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'guide',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                        'name'    => 'facilities',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'facilities',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'facilities',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                        'name'    => 'hours',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'hours',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'hours',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                        'name'    => 'directions',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'directions',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'directions',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                        'name'    => 'information',
                        'display' => null,
                        'opts'    => array(
-                'id' => 'information',
-                               'rows' => 8,
-                               'cols' => 43
+                'id'   => 'information',
+                'rows' => 8,
+                'cols' => 43
                        ),
             'noCharLimit' => true
                );
                 </div>
                 <a id="map-it" href="#">Map It</a>'
         );
+        // create groups for Lat and Lon
+        $lat[] = array(
+            'type'        => 'select',
+            'name'        => 'dir',
+            'req'         => false,
+            'display'     => '',
+            'opts'        => array('1'  => 'N', '-1' => 'S'),
+            'att'         => array('id' => 'latDir'),
+            'noCharLimit' => true
+        );
+        $lat[] = array(
+            'type'        => 'text',
+            'name'        => 'deg',
+            'req'         => false,
+            'display'     => 'Deg',
+            'opts'        => array(
+                'id' => 'latDeg', 'size' => 3, 'maxlength' => 3
+            ),
+            'noCharLimit' => true
+        );
+        $lat[] = array(
+            'type'        => 'text',
+            'name'        => 'min',
+            'req'         => false,
+            'display'     => 'Min',
+            'opts'        => array(
+                'id' => 'latMin', 'size' => 2, 'maxlength' => 2
+            ),
+            'noCharLimit' => true
+        );
+        $lat[] = array(
+            'type'        => 'text',
+            'name'        => 'sec',
+            'req'         => false,
+            'display'     => 'Sec',
+            'opts'        => array(
+                'id' => 'latSec', 'size' => 2, 'maxlength' => 4
+            ),
+            'noCharLimit' => true
+        );
         $e[] = array(
-            'type' => 'text',
-            'req' => false,
-            'name' => 'lat',
-            'display' => 'Latitude',
-            'opts' => array('id' => 'lat', 'class' => 'text')
+            'type'        => 'group',
+            'req'         => false,
+            'name'        => 'lat',
+            'group'       => $lat,
+            'label'       => 'Latitude',
+            'seperator'   => ' ',
+            'appendName'  => true,
+            'noCharLimit' => true
+        );
+
+        $lon[] = array(
+            'type'        => 'select',
+            'name'        => 'dir',
+            'req'         => false,
+            'display'     => '',
+            'opts'        => array('1'  => 'E', '-1' => 'W'),
+            'att'         => array('id' => 'lonDir'),
+            'noCharLimit' => true
+        );
+        $lon[] = array(
+            'type'        => 'text',
+            'name'        => 'deg',
+            'req'         => false,
+            'display'     => '',
+            'opts'        => array(
+                'id' => 'lonDeg', 'size' => 3, 'maxlength' => 3
+            ),
+            'noCharLimit' => true
+        );
+        $lon[] = array(
+            'type'        => 'text',
+            'name'        => 'min',
+            'req'         => false,
+            'display'     => '',
+            'opts'        => array(
+                'id' => 'lonMin', 'size' => 2, 'maxlength' => 2
+            ),
+            'noCharLimit' => true
+        );
+        $lon[] = array(
+            'type'        => 'text',
+            'name'        => 'sec',
+            'req'         => false,
+            'display'     => '',
+            'opts'        => array(
+                'id' => 'lonSec', 'size' => 2, 'maxlength' => 4
+            ),
+            'noCharLimit' => true
         );
         $e[] = array(
-            'type' => 'text',
-            'req' => false,
-            'name' => 'lon',
-            'display' => 'Longitude',
-            'opts' => array('id' => 'lon', 'class' => 'text')
+            'type'        => 'group',
+            'req'         => false,
+            'name'        => 'lon',
+            'group'       => $lon,
+            'label'       => 'Longitude',
+            'seperator'   => ' ',
+            'appendName'  => true,
+            'noCharLimit' => true
         );
 
                //      {{{ Main Image
                $f = array();
                $f[] = array(
                        'element' => '__ALL__',
-                       'filter' => 'trim'
+            'filter'  => 'trim'
                );
         $f[] = array(
             'element' => 'paypal',
-            'filter' => array('Toolkit_Common', 'filterURI')
+            'filter'  => array('Toolkit_Common', 'filterURI')
         );
         $f[] = array(
             'element' => 'url',
-            'filter' => array('Toolkit_Common', 'filterURI')
+            'filter'  => array('Toolkit_Common', 'filterURI')
         );
                $this->setupFilters($f);
        }
                        'reset'      => false,
                        'force'      => false
                );
-        $r[] = array(
-            'element'    => 'lat',
-            'message'    => 'ERROR: Must be a numeric!',
-            'type'       => 'numeric',
-            'format'     => null,
-            'validation' => $this->validationType,
-            'reset'      => false,
-            'force'      => false
-        );
-               $r[] = array(
-                       'element'    => 'lat',
-                       'message'    => 'ERROR: Latitude out of range!',
-                       'type'       => 'callback',
-                       'format'     => array(&$this, 'checkLatitude'),
-                       'validation' => $this->validationType,
-                       'reset'      => false,
-                       'force'      => false
-               );
-        $r[] = array(
-            'element'    => 'lon',
-            'message'    => 'ERROR: Must be a numeric!',
-            'type'       => 'numeric',
-            'format'     => null,
-            'validation' => $this->validationType,
-            'reset'      => false,
-            'force'      => false
-        );
-               $r[] = array(
-                       'element'    => 'lon',
-                       'message'    => 'ERROR: Longitude out of range!',
-                       'type'       => 'callback',
-                       'format'     => array(&$this, 'checkLongitude'),
-                       'validation' => $this->validationType,
-                       'reset'      => false,
-                       'force'      => false
-               );
+//        $r[] = array(
+//            'element'    => 'lat',
+//            'message'    => 'ERROR: Must be a numeric!',
+//            'type'       => 'numeric',
+//            'format'     => null,
+//            'validation' => $this->validationType,
+//            'reset'      => false,
+//            'force'      => false
+//        );
+//             $r[] = array(
+//                     'element'    => 'lat',
+//                     'message'    => 'ERROR: Latitude out of range!',
+//                     'type'       => 'callback',
+//                     'format'     => array(&$this, 'checkLatitude'),
+//                     'validation' => $this->validationType,
+//                     'reset'      => false,
+//                     'force'      => false
+//             );
+//        $r[] = array(
+//            'element'    => 'lon',
+//            'message'    => 'ERROR: Must be a numeric!',
+//            'type'       => 'numeric',
+//            'format'     => null,
+//            'validation' => $this->validationType,
+//            'reset'      => false,
+//            'force'      => false
+//        );
+//             $r[] = array(
+//                     'element'    => 'lon',
+//                     'message'    => 'ERROR: Longitude out of range!',
+//                     'type'       => 'callback',
+//                     'format'     => array(&$this, 'checkLongitude'),
+//                     'validation' => $this->validationType,
+//                     'reset'      => false,
+//                     'force'      => false
+//             );
                $allowDuplicateMemberNames
                        = $this->config
                                   ->getItem('section', 'conf')
             $this->dbh,
             $this->tableName
         );
-        $values['city_id'] 
+        $values['city_id']
             = ($values['city_id'])
             ? $values['city_id']
             : null;
-        $values['state_id'] 
+        $values['state_id']
             = ($values['state_id'])
             ? $values['state_id']
             : null;
-
+        // need to process the lat lon first
+        $latInput = $values['lat'];
+        $values['lat'] = $latInput['dir'] * ($latInput['deg'] + ($latInput['min'] + ($latInput['sec'] / 60)) / 60);
+        $lonInput = $values['lon'];
+        $values['lon'] = $lonInput['dir'] * ($lonInput['deg'] + ($lonInput['min'] + ($lonInput['sec'] / 60)) / 60);
+//        var_dump($values);
+//        exit;
                foreach ($values as $k => $v) {
                        switch ($k) {
                        case 'MAX_FILE_SIZE' :
        //      {{{     setLatLngCoords()
 
     /**
-     * Description for setLatLngCoords()
+     * Turning off the lookup of lat lon for this site
      *
      * @param array &$values Values array
      *
      */
        protected function setLatLngCoords(&$values)
        {
+        return $values;
                $geocoder = new GeocodeYahoo();
 
                $sql = "
                //      before we render the form. That way the
                //      template knows about any errors on the form.
                $this->validated = $this->validate();
+//        var_dump($this);
+//        exit;
                if ($this->validated) {
+//            die('here');
                        $processed = $this->process(array(&$this, 'processData'), $this->mergeFiles);
                }
 
                //      into the form.  these values ar calculated and then inserted into the forms
                //      element values.  So we need to process the data first and then render the form.
                $this->setupRenderers();
-
+//
                return $this->template->bufferedOutputObject($this->view);
        }
 
 
                        array(&$this, 'mapIcon')
                ));
 
+        $this->addColumn(new Structures_DataGrid_Column(
+            'Latitude',
+            'lat',
+            'lat',
+            null,
+            null,
+            array(&$this, 'lat')
+        ));
+
+        $this->addColumn(new Structures_DataGrid_Column(
+            'Longitude',
+            'lon',
+            'lon',
+            null,
+            null,
+            array(&$this, 'lon')
+        ));
+
     }
 
     //    }}}
 
        //      }}}
 
+    public function lat($data)
+    {
+        extract($data['record']);
+        if ($lat) {
+            $latitude = Toolkit_Common::f2LatLon($lat, 'Lat', 'DMS', 2);
+            return $latitude['text'];
+        } else {
+            return '';
+        }
+    }
+
+    public function lon($data)
+    {
+        extract($data['record']);
+        if ($lon) {
+            $longitude = Toolkit_Common::f2LatLon($lon, 'Lat', 'DMS', 2);
+            return $longitude['text'];
+        } else {
+            return '';
+        }
+    }
+
        //      {{{ phone()
 
        /**
 
                                                                                        {elem.label:h}
                                                                                {if:elem.error}</span>{end:}
                                                                        </td>
-                                                                       <td class="fieldcell">
+                                                                       <td class="fieldcell" nowrap>
                                         <div flexy:if="elem.error" class="req">
                                             {elem.error:h}
                                         </div>
                                                                                        <small>{gitem.label:h}</small><br>
                                                                                        {end:}
                                                                                        {gitem.html:h}
+                                            {if:gitem.isName(#lat[deg]#)}
+                                                °
+                                            {end:}
+                                            {if:gitem.isName(#lat[min]#)}
+                                                '
+                                            {end:}
+                                            {if:gitem.isName(#lat[sec]#)}
+                                                "
+                                            {end:}
+                                            {if:gitem.isName(#lon[deg]#)}
+                                                °
+                                            {end:}
+                                            {if:gitem.isName(#lon[min]#)}
+                                                '
+                                            {end:}
+                                            {if:gitem.isName(#lon[sec]#)}
+                                                "
+                                            {end:}
                                                                                        {if:elem.separator}{elem.separator:h}{end:}
                                                                                {end:}
                                                                        </td>
 
                 <div flexy:if="row[terrain]">Terrain: {row[terrain]}</div>
                 <div flexy:if="row[difficulty]">Difficulty: {row[difficulty]}</div>
                 <div flexy:if="row[dogs]">Dogs Allowed: {row[dogs]}</div>
+                <div flexy:if="row[lat]">Lat: {row[lat]:h}</div>
+                <div flexy:if="row[lon]">Lon: {row[lon]:h}</div>
                 <!--
                                <div class="street-address">{row[street]:h}</div>
                                <span class="locality" flexy:if="city">{row[city]:h},</span>