// Geocaching user script
// version 0.1 BETA!
// 2005-09-27
// Copyright (C) 2005 Norman Walsh
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// --------------------------------------------------------------------
//
// This is a Greasemonkey user script.  To install it, you need
// Greasemonkey 0.3 or later: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "Geocaching", and click Uninstall.
//
// I'm indebted to Mark Pilgrim for
// http://diveintogreasemonkey.org/helloworld/divein.html
// from which I copied the skeleton of this script
//
// --------------------------------------------------------------------
//
// ==UserScript==
// @name          Geocaching
// @namespace     http://nwalsh.com/ns/greasemonkey/
// @description   Script to add decimal lat/long to geocaching pages
// @include       http://www.geocaching.com/*
// ==/UserScript==

// <span id="LatLon"><font size="3">N 42° 17.245 W 072° 24.968</STRONG><br />
// <STRONG></font></span>

var navbar, newElement;

navbar = document.getElementById('LatLon');
if (navbar) {
    // There must be a better way to do this
    var content = navbar.firstChild;
    if (content.nodeType == 1) {
	  content = content.firstChild;
    }
    var latlong = content.nodeValue;
    var declatlong = "";

    // N 42° 17.245 W 072° 24.968
    var regex = /([NS]) (\d+). ([\d\.]+) ([EW]) (\d+). ([\d\.]+)/;
    var match = regex.exec(latlong);
    if (latlong.match(regex)) {
	  var minsec = match[3];
	  var dec = minsec / 60.0;
	  var lat = parseFloat(match[2]) + dec;
	  lat = "" + lat + "000000"; // turn it back into a string, pad w/0
	  if (lat.match(/\d+\.\d\d\d\d\d+/)) {
	      lat = lat.replace(/(\d+\.\d\d\d\d\d)\d+/,"$1");
	  }
	  if (match[1] == "S") {
	      lat = "-" + lat;
	  }

	  minsec = match[6];
	  dec = minsec / 60.0;
	  var lng = parseFloat(match[5]) + dec;
	  lng = "" + lng + "00000";
	  if (lng.match(/\d+\.\d\d\d\d\d+/)) {
	      lng = lng.replace(/(\d+\.\d\d\d\d\d)\d+/,"$1");
	  }
	  if (match[4] == "W") {
	      lng = "-" + lng;
	  }

	  declatlong = "Decimal degrees: " + lat + ", " + lng;
    } else {
	  declatlong = "Decimal degrees: error, failed to match";
    }

    text = document.createTextNode(declatlong);
    br = document.createElement('br');
    navbar.parentNode.insertBefore(text, navbar.nextSibling);
    navbar.parentNode.insertBefore(br, navbar.nextSibling);
}


