/*
Geocaching Cache Edit Resizer - v1.2 2007-10-12
(c) 2007, Prime Suspect Software

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

Compatible with Greasemonkey 0.6.4.

Function:
 Allows user to resize text entry boxes on cache edit pages. Also
 can auto-check the confirmation check-boxes.

Usage:
 Use the arrow icons to adjust the size of the text entry boxes. 

Features:
 Separate settings are maintained for each member profile that uses the PC.

Change Log:

* (v1.2) 2007-10-12 Update to accomodate changes on edit page.

* (v1.1) 2007-08-15 Update to accomodate changes on edit page.

* (v1.0) 2006-03-01 Initial release

// ==UserScript==
// @name                GC Cache Edit Resizer
// @description         (v1.2) GC Cache Edit Resizer
// @namespace           http://gmscripts.locusprime.net/
// @include             http://www.geocaching.com/hide/report.aspx*
// ==/UserScript==

*/


	//  Get currently signed-on geocaching.com profile.
	var e_LogInName = document.getElementById("Header1_lnkLoginName");
	if (e_LogInName) {
		SignedInAs = e_LogInName.firstChild.firstChild.data;
		SignedInAs = SignedInAs.replace(/<\&amp;>/g, '&');
	} else {
		return;
	}
	
	//  Get handle to short description.
	var e_tbShortDesc = document.getElementById("tbShortDesc");
	if (!e_tbShortDesc) { return; }

	//  Get handle to short description header.
	e_ShortDescHeader = e_tbShortDesc.parentNode.parentNode.previousSibling.previousSibling;
	e_ShortDescHeader = e_ShortDescHeader.firstChild.nextSibling.firstChild.nextSibling;

	//  Create span for short control arrows.
	var spanShortArrows = document.createElement("span");
	spanShortArrows.id = "spanShortArrows";
	spanShortArrows.style.whiteSpace = 'nowrap';
	spanShortArrows.style.fontSize = '18px';
	spanShortArrows.style.fontWeight = 'normal';
	spanShortArrows.appendChild(document.createTextNode(' \u00A0 '));
	
	var lnkShortLeftArrow = document.createElement("a");
	lnkShortLeftArrow.appendChild(document.createTextNode('\u21D0'));
	lnkShortLeftArrow.title = 'Decrease textbox width';
	lnkShortLeftArrow.style.textDecoration = 'none';
	lnkShortLeftArrow.href = 'javascript:void(0)';
	lnkShortLeftArrow.setAttribute('incCol', -1);
	lnkShortLeftArrow.setAttribute('incRow', 0);
	lnkShortLeftArrow.setAttribute('txtType', 'Short');
	lnkShortLeftArrow.addEventListener("click", ChangeSize, true);
	spanShortArrows.appendChild(lnkShortLeftArrow);

	var lnkShortUpArrow = document.createElement("a");
	lnkShortUpArrow.appendChild(document.createTextNode('\u21D1'));		
	lnkShortUpArrow.title = 'Decrease textbox height';
	lnkShortUpArrow.style.textDecoration = 'none';
	lnkShortUpArrow.href = 'javascript:void(0)';
	lnkShortUpArrow.setAttribute('incCol', 0);
	lnkShortUpArrow.setAttribute('incRow', -1);
	lnkShortUpArrow.setAttribute('txtType', 'Short');
	lnkShortUpArrow.addEventListener("click", ChangeSize, true);
	spanShortArrows.appendChild(lnkShortUpArrow);

	var lnkShortDownArrow = document.createElement("a");
	lnkShortDownArrow.appendChild(document.createTextNode('\u21D3'));		
	lnkShortDownArrow.title = 'Increase textbox height';
	lnkShortDownArrow.style.textDecoration = 'none';
	lnkShortDownArrow.href = 'javascript:void(0)';
	lnkShortDownArrow.setAttribute('incCol', 0);
	lnkShortDownArrow.setAttribute('incRow', 1);
	lnkShortDownArrow.setAttribute('txtType', 'Short');
	lnkShortDownArrow.addEventListener("click", ChangeSize, true);
	spanShortArrows.appendChild(lnkShortDownArrow);
		
	var lnkShortRightArrow = document.createElement("a");
	lnkShortRightArrow.appendChild(document.createTextNode('\u21D2'));		
	lnkShortRightArrow.title = 'Increase textbox width';
	lnkShortRightArrow.style.textDecoration = 'none';
	lnkShortRightArrow.href = 'javascript:void(0)';
	lnkShortRightArrow.setAttribute('incCol', 1);
	lnkShortRightArrow.setAttribute('incRow', 0);
	lnkShortRightArrow.setAttribute('txtType', 'Short');
	lnkShortRightArrow.addEventListener("click", ChangeSize, true);
	spanShortArrows.appendChild(lnkShortRightArrow);

	e_ShortDescHeader.parentNode.insertBefore(spanShortArrows, e_ShortDescHeader.nextSibling);



	//  Get handle to Long description.
	var e_tbLongDesc = document.getElementById("tbLongDesc");
	if (!e_tbLongDesc) { return; }

	//  Get handle to Long description header.
	e_LongDescHeader = e_tbLongDesc.parentNode.parentNode.previousSibling.previousSibling;
	e_LongDescHeader = e_LongDescHeader.firstChild.nextSibling.firstChild.nextSibling;

	//  Create span for Long control arrows.
	var spanLongArrows = document.createElement("span");
	spanLongArrows.id = "spanLongArrows";
	spanLongArrows.style.whiteSpace = 'nowrap';
	spanLongArrows.style.fontSize = '18px';
	spanLongArrows.style.fontWeight = 'normal';
	spanLongArrows.appendChild(document.createTextNode(' \u00A0 '));
	
	var lnkLongLeftArrow = document.createElement("a");
	lnkLongLeftArrow.appendChild(document.createTextNode('\u21D0'));
	lnkLongLeftArrow.title = 'Decrease textbox width';
	lnkLongLeftArrow.style.textDecoration = 'none';
	lnkLongLeftArrow.href = 'javascript:void(0)';
	lnkLongLeftArrow.setAttribute('incCol', -1);
	lnkLongLeftArrow.setAttribute('incRow', 0);
	lnkLongLeftArrow.setAttribute('txtType', 'Long');
	lnkLongLeftArrow.addEventListener("click", ChangeSize, true);
	spanLongArrows.appendChild(lnkLongLeftArrow);

	var lnkLongUpArrow = document.createElement("a");
	lnkLongUpArrow.appendChild(document.createTextNode('\u21D1'));		
	lnkLongUpArrow.title = 'Decrease textbox height';
	lnkLongUpArrow.style.textDecoration = 'none';
	lnkLongUpArrow.href = 'javascript:void(0)';
	lnkLongUpArrow.setAttribute('incCol', 0);
	lnkLongUpArrow.setAttribute('incRow', -1);
	lnkLongUpArrow.setAttribute('txtType', 'Long');
	lnkLongUpArrow.addEventListener("click", ChangeSize, true);
	spanLongArrows.appendChild(lnkLongUpArrow);

	var lnkLongDownArrow = document.createElement("a");
	lnkLongDownArrow.appendChild(document.createTextNode('\u21D3'));		
	lnkLongDownArrow.title = 'Increase textbox height';
	lnkLongDownArrow.style.textDecoration = 'none';
	lnkLongDownArrow.href = 'javascript:void(0)';
	lnkLongDownArrow.setAttribute('incCol', 0);
	lnkLongDownArrow.setAttribute('incRow', 1);
	lnkLongDownArrow.setAttribute('txtType', 'Long');
	lnkLongDownArrow.addEventListener("click", ChangeSize, true);
	spanLongArrows.appendChild(lnkLongDownArrow);
		
	var lnkLongRightArrow = document.createElement("a");
	lnkLongRightArrow.appendChild(document.createTextNode('\u21D2'));		
	lnkLongRightArrow.title = 'Increase textbox width';
	lnkLongRightArrow.style.textDecoration = 'none';
	lnkLongRightArrow.href = 'javascript:void(0)';
	lnkLongRightArrow.setAttribute('incCol', 1);
	lnkLongRightArrow.setAttribute('incRow', 0);
	lnkLongRightArrow.setAttribute('txtType', 'Long');
	lnkLongRightArrow.addEventListener("click", ChangeSize, true);
	spanLongArrows.appendChild(lnkLongRightArrow);

	e_LongDescHeader.parentNode.insertBefore(spanLongArrows, e_LongDescHeader.nextSibling);



	//  Get handle to Hint description.
	var e_tbHintDesc = document.getElementById("gsHints");
	if (!e_tbHintDesc) { return; }

	//  Get handle to Hint description header.
	e_HintDescHeader = e_tbHintDesc.parentNode.parentNode.parentNode.previousSibling.previousSibling;
	e_HintDescHeader = e_HintDescHeader.firstChild.nextSibling.firstChild.nextSibling;

	//  Create span for Hint control arrows.
	var spanHintArrows = document.createElement("span");
	spanHintArrows.id = "spanHintArrows";
	spanHintArrows.style.whiteSpace = 'nowrap';
	spanHintArrows.style.fontSize = '18px';
	spanHintArrows.style.fontWeight = 'normal';
	spanHintArrows.appendChild(document.createTextNode(' \u00A0 '));
	
	var lnkHintLeftArrow = document.createElement("a");
	lnkHintLeftArrow.appendChild(document.createTextNode('\u21D0'));
	lnkHintLeftArrow.title = 'Decrease textbox width';
	lnkHintLeftArrow.style.textDecoration = 'none';
	lnkHintLeftArrow.href = 'javascript:void(0)';
	lnkHintLeftArrow.setAttribute('incCol', -1);
	lnkHintLeftArrow.setAttribute('incRow', 0);
	lnkHintLeftArrow.setAttribute('txtType', 'Hint');
	lnkHintLeftArrow.addEventListener("click", ChangeSize, true);
	spanHintArrows.appendChild(lnkHintLeftArrow);

	var lnkHintUpArrow = document.createElement("a");
	lnkHintUpArrow.appendChild(document.createTextNode('\u21D1'));		
	lnkHintUpArrow.title = 'Decrease textbox height';
	lnkHintUpArrow.style.textDecoration = 'none';
	lnkHintUpArrow.href = 'javascript:void(0)';
	lnkHintUpArrow.setAttribute('incCol', 0);
	lnkHintUpArrow.setAttribute('incRow', -1);
	lnkHintUpArrow.setAttribute('txtType', 'Hint');
	lnkHintUpArrow.addEventListener("click", ChangeSize, true);
	spanHintArrows.appendChild(lnkHintUpArrow);

	var lnkHintDownArrow = document.createElement("a");
	lnkHintDownArrow.appendChild(document.createTextNode('\u21D3'));		
	lnkHintDownArrow.title = 'Increase textbox height';
	lnkHintDownArrow.style.textDecoration = 'none';
	lnkHintDownArrow.href = 'javascript:void(0)';
	lnkHintDownArrow.setAttribute('incCol', 0);
	lnkHintDownArrow.setAttribute('incRow', 1);
	lnkHintDownArrow.setAttribute('txtType', 'Hint');
	lnkHintDownArrow.addEventListener("click", ChangeSize, true);
	spanHintArrows.appendChild(lnkHintDownArrow);
		
	var lnkHintRightArrow = document.createElement("a");
	lnkHintRightArrow.appendChild(document.createTextNode('\u21D2'));		
	lnkHintRightArrow.title = 'Increase textbox width';
	lnkHintRightArrow.style.textDecoration = 'none';
	lnkHintRightArrow.href = 'javascript:void(0)';
	lnkHintRightArrow.setAttribute('incCol', 1);
	lnkHintRightArrow.setAttribute('incRow', 0);
	lnkHintRightArrow.setAttribute('txtType', 'Hint');
	lnkHintRightArrow.addEventListener("click", ChangeSize, true);
	spanHintArrows.appendChild(lnkHintRightArrow);

	e_HintDescHeader.parentNode.insertBefore(spanHintArrows, e_HintDescHeader.nextSibling);



	//  Get handle to Note description.
	var e_tbNoteDesc = document.getElementById("gsNoteToReviewer");
	if (e_tbNoteDesc) {

		//  Get handle to Note description header.
		e_NoteDescHeader = e_tbNoteDesc.parentNode.previousSibling.previousSibling.firstChild;
	
		//  Create span for Note control arrows.
		var spanNoteArrows = document.createElement("span");
		spanNoteArrows.id = "spanNoteArrows";
		spanNoteArrows.style.whiteSpace = 'nowrap';
		spanNoteArrows.style.fontSize = '18px';
		spanNoteArrows.style.fontWeight = 'normal';
		spanNoteArrows.appendChild(document.createTextNode(' \u00A0 '));
		
		var lnkNoteLeftArrow = document.createElement("a");
		lnkNoteLeftArrow.appendChild(document.createTextNode('\u21D0'));
		lnkNoteLeftArrow.title = 'Decrease textbox width';
		lnkNoteLeftArrow.style.textDecoration = 'none';
		lnkNoteLeftArrow.href = 'javascript:void(0)';
		lnkNoteLeftArrow.setAttribute('incCol', -1);
		lnkNoteLeftArrow.setAttribute('incRow', 0);
		lnkNoteLeftArrow.setAttribute('txtType', 'Note');
		lnkNoteLeftArrow.addEventListener("click", ChangeSize, true);
		spanNoteArrows.appendChild(lnkNoteLeftArrow);
	
		var lnkNoteUpArrow = document.createElement("a");
		lnkNoteUpArrow.appendChild(document.createTextNode('\u21D1'));		
		lnkNoteUpArrow.title = 'Decrease textbox height';
		lnkNoteUpArrow.style.textDecoration = 'none';
		lnkNoteUpArrow.href = 'javascript:void(0)';
		lnkNoteUpArrow.setAttribute('incCol', 0);
		lnkNoteUpArrow.setAttribute('incRow', -1);
		lnkNoteUpArrow.setAttribute('txtType', 'Note');
		lnkNoteUpArrow.addEventListener("click", ChangeSize, true);
		spanNoteArrows.appendChild(lnkNoteUpArrow);
	
		var lnkNoteDownArrow = document.createElement("a");
		lnkNoteDownArrow.appendChild(document.createTextNode('\u21D3'));		
		lnkNoteDownArrow.title = 'Increase textbox height';
		lnkNoteDownArrow.style.textDecoration = 'none';
		lnkNoteDownArrow.href = 'javascript:void(0)';
		lnkNoteDownArrow.setAttribute('incCol', 0);
		lnkNoteDownArrow.setAttribute('incRow', 1);
		lnkNoteDownArrow.setAttribute('txtType', 'Note');
		lnkNoteDownArrow.addEventListener("click", ChangeSize, true);
		spanNoteArrows.appendChild(lnkNoteDownArrow);
			
		var lnkNoteRightArrow = document.createElement("a");
		lnkNoteRightArrow.appendChild(document.createTextNode('\u21D2'));		
		lnkNoteRightArrow.title = 'Increase textbox width';
		lnkNoteRightArrow.style.textDecoration = 'none';
		lnkNoteRightArrow.href = 'javascript:void(0)';
		lnkNoteRightArrow.setAttribute('incCol', 1);
		lnkNoteRightArrow.setAttribute('incRow', 0);
		lnkNoteRightArrow.setAttribute('txtType', 'Note');
		lnkNoteRightArrow.addEventListener("click", ChangeSize, true);
		spanNoteArrows.appendChild(lnkNoteRightArrow);
	
		e_NoteDescHeader.parentNode.insertBefore(spanNoteArrows, e_NoteDescHeader.nextSibling);
	}


	//  Change text entry box size.
	var NewShortRowSize =  GM_getValue("ShortRowSize_" + SignedInAs, 0);
	var NewShortColSize =  GM_getValue("ShortColSize_" + SignedInAs, 0);
	if (NewShortRowSize > 0) { e_tbShortDesc.rows = NewShortRowSize; }
	if (NewShortColSize > 0) { e_tbShortDesc.cols = NewShortColSize; }

	var NewLongRowSize =  GM_getValue("LongRowSize_" + SignedInAs, 0);
	var NewLongColSize =  GM_getValue("LongColSize_" + SignedInAs, 0);
	if (NewLongRowSize > 0) { e_tbLongDesc.rows = NewLongRowSize; }
	if (NewLongColSize > 0) { e_tbLongDesc.cols = NewLongColSize; }

	var NewHintRowSize =  GM_getValue("HintRowSize_" + SignedInAs, 0);
	var NewHintColSize =  GM_getValue("HintColSize_" + SignedInAs, 0);
	if (NewHintRowSize > 0) { e_tbHintDesc.rows = NewHintRowSize; }
	if (NewHintColSize > 0) { e_tbHintDesc.cols = NewHintColSize; }

	if (e_tbNoteDesc) {
		var NewNoteRowSize =  GM_getValue("NoteRowSize_" + SignedInAs, 0);
		var NewNoteColSize =  GM_getValue("NoteColSize_" + SignedInAs, 0);
		if (NewNoteRowSize > 0) { e_tbNoteDesc.rows = NewNoteRowSize; }
		if (NewNoteColSize > 0) { e_tbNoteDesc.cols = NewNoteColSize; }
	}


	//  Add check-box to auto-set check-box values.
	var AutoCheck = GM_getValue("AutoCheck_" + SignedInAs, false);
	var e_chkDisclaimer = document.getElementById("chkDisclaimer");
	var e_chkUnderstand = document.getElementById("chkUnderstand");
	if (e_chkDisclaimer && e_chkUnderstand) {
		var par_Remember = document.createElement("p");
		var chk_Remember = document.createElement("input");
		chk_Remember.type = 'checkbox';
		chk_Remember.id = "chk_Remember";
		var lbl_Remember = document.createElement("label");
		lbl_Remember.setAttribute('for', 'chk_Remember');
		lbl_Remember.appendChild(document.createTextNode('Always automatically check the above check-boxes.'));
		par_Remember.appendChild(chk_Remember);
		par_Remember.appendChild(lbl_Remember);
		e_chkDisclaimer.parentNode.appendChild(par_Remember);
		if (AutoCheck) {			
			DoAutoCheck();
			chk_Remember.checked = true;
		}
		chk_Remember.addEventListener("click", AutoCheckClicked, true);
	}
		


// ---------------------------------- Functions ---------------------------------- //


	//  Change text entry box size.
	function ChangeSize() {		
		var txtType = this.getAttribute('txtType');
		var incRow = this.getAttribute('incRow') - 0;
		var incCol = this.getAttribute('incCol') - 0;
		if (txtType == 'Short') {
			var thisBox = e_tbShortDesc;
		} else if (txtType == 'Long') {
			thisBox = e_tbLongDesc;
		} else if (txtType == 'Hint') {
			thisBox = e_tbHintDesc;
		} else if (txtType == 'Note') {
			thisBox = e_tbNoteDesc;
		} else {
			return; 
		}
		if (incRow != 0) {
			var sizeVal = thisBox.rows + incRow;
			if (sizeVal > 0) {
				thisBox.rows = sizeVal;
				GM_setValue(txtType + "RowSize_" + SignedInAs, sizeVal);
			}
		}		
		if (incCol != 0) {
			sizeVal = thisBox.cols + incCol;
			if (sizeVal > 0) {
				thisBox.cols = sizeVal;
				GM_setValue(txtType + "ColSize_" + SignedInAs, sizeVal);
			}
		}		
	}


	//  Auto Check Clicked.
	function AutoCheckClicked() {
		AutoCheck = chk_Remember.checked;
		GM_setValue("AutoCheck_" + SignedInAs, AutoCheck);
		if (AutoCheck) {
			DoAutoCheck()
		}
	}


	//  Check the confirmation boxes.
	function DoAutoCheck() {
		e_chkDisclaimer.checked = true;
		e_chkUnderstand.checked = true;
	}

