/*
Geocaching Waypoint Finder - v1.6 2010-06-02
(c) 2010, Prime Suspect Software

Greasemonkey user script: see http://greasemonkey.mozdev.org

Compatible with Greasemonkey 0.6.4.

This script adds a waypoint/travel bug ID search box to the left 
hand menu on every page of the geocaching.com website. Home page 
and search pages are excluded, as they already have a search box.

Change Log:

* (v1.6) 2010-06-02 Update for site changes. Added auto update 
	notification.

* (v1.5) 2010-01-15 Update for site changes.

* (v1.4) 2009-01-26 Travel bug owners no longer need to enter the
	tracking number when posting to their own bugs.

* (v1.3) 2008-12-02 Added support for Tracking ID entry. When a
	tracking ID is entered, it will automatically be passed to the
	logging page, removing the need to enter it twice.

* (v1.2) 2008-08-14 Minor fix to accomodate website changes.

* (v1.1) 2007-10-10 Minor fix to accomodate website changes.

* (v1.0) Initial release.


// ==UserScript==
// @name           GC Add Waypoint Finder
// @description    (v01.60) Adds Waypoint Finder box to GC pages
// @namespace      http://gmscripts.locusprime.net/
// @include        http://*.geocaching.com/*
// @require        VrChk.js
// ==/UserScript==

*/

// ------------------------Version Checking------------------------ //
fCheckScriptVersion('e1950af6-8b94-4c8b-ac1d-0be5cf384cac', '01.60');
// ------------------------Version Checking------------------------ //

	
	var e_menu = document.getElementById("Navigation");
	if (e_menu) {
		e_menu = e_menu.childNodes[3];
		if (e_menu.nodeName != 'UL') { return; }
	} else { return; }


	//  Get current URL.
	var UrlHere = document.URL;

	//  If tracking item by tracking ID, or owns tracking item, then add to log link.
	if (UrlHere.match(/\/track\/details\.aspx/i)) {
		//  Check for owned item.
		var e_lblTBID = document.getElementById("ctl00_ContentBody_lblTBID");
		if (e_lblTBID) {
			var tracker = e_lblTBID.childNodes[1].firstChild.data;
		} else {
			var tracker = UrlParm('tracker');
		}
		if (tracker && (!tracker.match(/^TB.*/i))) {
			var e_LogLink = document.getElementById("ctl00_ContentBody_LogLink");
			if (e_LogLink) {
				e_LogLink.href += '&tracker=' + tracker;
			}
		}

	//  If tracking log entry, and tracker number in URL, insert into entry box.
	} else if (UrlHere.match(/\/track\/log\.aspx\?wid=.*?&tracker=/i)) {
		var tracker = UrlParm('tracker');
		var e_tbCode = document.getElementById("ctl00_ContentBody_LogBookPanel1_tbCode");
		if (e_tbCode) {
			e_tbCode.value = tracker;
		}
	}
	
	
	//  Create new list entry.
	var liFinder = document.createElement('li');	

	//  Create form.
	var form_wpFinder = document.createElement('form');
	form_wpFinder.id = 'form_wpFinder';
	form_wpFinder.name = 'form_wpFinder';
	liFinder.appendChild(form_wpFinder);
	form_wpFinder.action = 'javascript:func_wpFinder()';
	
	//  Create script.
	var script_wpFinder = document.createElement('script');
	script_wpFinder.language = "javascript";
	script_wpFinder.type = "text/javascript";
	script_wpFinder.appendChild(document.createTextNode(
			"function func_wpFinder() { \n" +
			"	xinput_wpFinder = document.getElementById('input_wpFinder'); \n" +
			"	xwp = xinput_wpFinder.value.toUpperCase(); \n" +
			"	for (var j = 0; j < xwp.length; j++) { \n" +
			"		if (xwp.charCodeAt(j) != 32) { \n" +
			"			xwp = xwp.substring(j); \n" +
			"			j = xwp.length; \n" +
			"		} \n" +
			"	} \n" +
			"	if (xwp.match(/^GC.*/)) { \n" +
			"		xwpurl = '../seek/cache_details.aspx?wp=' + xwp; \n" +
			"	} else { \n" +
			"		xwpurl = '../track/details.aspx?tracker=' + xwp; \n" +
			"	} \n" +
			"	window.location.assign(xwpurl); \n" +
			"} \n"
	));
	form_wpFinder.appendChild(script_wpFinder);
	
	//  Create input box.
	var input_wpFinder = document.createElement('input');
	input_wpFinder.type = 'text';
	input_wpFinder.id = 'input_wpFinder';
	input_wpFinder.style.borderWidth = '1px';
	input_wpFinder.style.borderStyle = 'solid';
	input_wpFinder.style.borderColor = 'rgb(176, 197, 209)';
	input_wpFinder.title = 'Enter waypoint or travel bug ID to find';
	input_wpFinder.size = 10;
	input_wpFinder.maxLength = 8;
	input_wpFinder.defaultValue = 'GCXXXX';
	input_wpFinder.style.marginLeft = '8px';
	input_wpFinder.style.marginBottom = '8px';
	form_wpFinder.appendChild(input_wpFinder);
	input_wpFinder.addEventListener('focus', rmvxxxx, false);	
	
	//  Add image trigger.
	var img_wpFinder = document.createElement('input');
	img_wpFinder.type = 'image';
	img_wpFinder.id = 'img_wpFinder';
	img_wpFinder.src = '../images/stockholm/16x16/search.gif';
	img_wpFinder.title = 'Click to go to cache or travel bug page';
	img_wpFinder.border = 0;
	img_wpFinder.align = 'top';
	img_wpFinder.width = 16;
	img_wpFinder.height = 16;
	img_wpFinder.style.marginTop = '3px';
	img_wpFinder.style.marginLeft = '4px';
	form_wpFinder.appendChild(img_wpFinder);

	//  Add form to list.
	liFinder.appendChild(form_wpFinder);
	e_menu.appendChild(liFinder);
	


	
	// ----------------------------- FUNCTIONS ------------------------------//	
	

	
	
	//  Remove XXXX when entry box gets focus.
	function rmvxxxx() {
		if (input_wpFinder.value == input_wpFinder.defaultValue) {
			input_wpFinder.value = 'GC';
		}
	}
	

	//  Returns a URL parameter.
	//    ParmName - Parameter name to look for.
	//    IgnoreCase - (optional) *false, true. Ignore parmeter name case.
	//    UrlString - (optional) String to search. If omitted, document URL is used.
	function UrlParm(ParmName, IgnoreCase, UrlString) {
		var RegRslt, sc = '', RtnVal = '';
		if (IgnoreCase) {sc = 'i'}
		if(UrlString) {
			var PageUrl = UrlString;
		} else {
			PageUrl = document.location + '';
		}
		var ParmString = PageUrl.substring(PageUrl.indexOf('?') + 1);
		var RegEx1 = new RegExp('(^|&)' + ParmName + '=(.*?)(&|#|$)', sc);
		RegRslt = RegEx1.exec(ParmString);
		if (RegRslt) {RtnVal = RegRslt[2]}
		return RtnVal;
	}
