There are 16 previous versions of this script.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// ==UserScript==
// @name GCBBCode
// @namespace madd.in
// @include http://*.geocaching.com/seek/log.aspx*
// @include https://*.geocaching.com/seek/log.aspx*
// @include http://*.geocaching.com/track/log.aspx*
// @include https://*.geocaching.com/track/log.aspx*
// ==/UserScript==
//
// (C) Copyright Martin Georgi 2010.
// Chrome patch by ReuDa
// Version 1.31
var version = '1.31';
var scriptId = 'gcbbcode';
var ENVIRONMENT = (function() {
if (typeof chrome != "undefined") {
return 'chrome';
}
else if (typeof safari != "undefined") {
return 'safari';
}
else if (typeof GM_log != "undefined") {
return 'greasemonkey';
}
else {
return 'document';
}
})();
if (typeof window.uneval === "undefined") {
window.uneval = function(a){
return (JSON.stringify(a))||'';
};
}
if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
this.GM_getValue=function (key,def) {
return localStorage[key] || def;
};
this.GM_setValue=function (key,value) {
return localStorage[key]=value;
};
this.GM_deleteValue=function (key) {
return delete localStorage[key];
};
}
var textForm = document.getElementById('ctl00_ContentBody_LogBookPanel1_uxLogInfo');
if(!textForm){
textForm = document.getElementById('tbLongDesc');
}
document.getElementById('aspnetForm').addEventListener("submit",function(){
var logType = document.getElementById('ctl00_ContentBody_LogBookPanel1_ddLogType');
if(getSelectedValue(logType)==2 || getSelectedValue(logType)==10){ // increment count on "found it" or "attended"
setFounds(getFounds()+1);
}
textForm.value = textForm.value.replace(/\{FINDS\}/g, getFounds());
}, false);
// add auto resize
textForm.addEventListener('keypress', grow, true);
function grow() {
if (this.scrollHeight > this.clientHeight)
this.rows += 1;
}
var templates = eval(GM_getValue('templates',new Array()));
var templateMode = false;
var templateTable = document.createElement('table');
// --- IMAGES ---
var qmark_image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAttJREFUeNp8k91LU2Ecx7%2FnZXObujlftlxuGanbKAlMChGkS1GxBKGriAq7iLwLguom6KI%2FoLwIgsib0osgTNRMMXwhUXOapE5JNJ0693p0521np%2BcxGF71uzk%2FnufzfX6vh0F5K7KWyQBCCvbTjqoqt9PHcaxJ0zLS6tbecmx7fxX5FoBlszif9UQFtkKb796d1rttzfWN3grPOZ5nuXQ6o62sba5%2F%2FDwx8PrD1zeJaGIZZuM%2FDUsjOxvhqb3VMDoemNf%2FY%2FSecpQ%2F1sHTApv%2FhndsciFwEpwObOi9fXP6%2B08z%2BuLydvaccpSnOg6cm%2Bm83fKo42ZTG81EUVS86PqCZ68G0T3wA8NTQUxNryPXZMAFrwtn3E5nZD8qTY4HhtkSl8N7vamuRdc1yLKInVAE26EwmusrcP9aDc57rNja3Udv%2FzRi8SR5XgflqY4tK7V7ncX5nmQiCUE4gt1mxPOHzbjoL0GeWYemimQKEirLbOSbhpBIgPJUx3McY1EV2ZgUBJCxwGDgsLMbw8DIHIkYRa45Bx3ttWhvvozDI4FEZkB5quMlUUmFI1FF1618Oq2RMbJgdBVXr5wlWVSj2u%2BGroNkICMWE8HzHA6iSYXq%2BJ1wfHXt9%2FamxcT5JEmBgVwOjS3g5bshuJx2POlsQ1lpIejD1EwmIyhPdXw0IqwMjM73l5fm%2B2Q1A44BdvfCpDwJFrILsphCIs5Cy%2BhgGAaKxILyVMeh2K9vhKJb7pL8Bofd7BQlGUX2XLgcVtRdqkAx8emZqqqkHA3fAxuLb%2FtmHqtAmIPdB1VSDxaCoZ%2FOAnON3Wo8lWNg4XYVwZLDQxQl0mWNpK1ibulPoKtn6kEyKc2CY8mSFHhBHTGlbM6uhr4l4imZYzIFsqLkHaVk%2FSglKVs7sbXBiWB3z8jSU0EgQjIRHPf95F9F26pojNVm8hfmmSpJjTlkI%2BXooRRMJqRfMHK08Cz%2BV4ABAGmclqueREoBAAAAAElFTkSuQmCC';
var colorPickerImageString = 'data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00'+
'%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSoftware'+
'%00Adobe%20ImageReadyq%C9e%3C%00%00%00%18tEXtCopyright%00Stella%20Schulze%D4b%7D%BE%00%00'+
'%02%ADIDATx%DAbd%40%02%D6%9E%E1%19%40j%3A%8C%2F%23%23s~%E5%EC%5E%23%06%2C%A0%A1%A1%01L%03'+
'%04%10%13L%C0%CC%25(%E3%F7%EF%DF%D3%81%B8%F4%E8%F6%95%8CRRR%0C%0A%D2b%86%A1%C9%85%FF%19%F'+
'0%00%80%00b%811~%FE%F81%FD%E2%91m%8C%20vpb%FE%7FE%19q%86%F0%40o%86%DB%0F%1E3%7Cf%17%FE%FF'+
'ZP%3B%0C(%F5%1E%88%1F%9Fm%0D%BC%09%D3%07%10%40p%03~%7C%FF%96%A9n%EC%F0%3F%3D)%96%C1%40W%9'+
'3ATD%98!%AB%A8%8A%E1%D5%EB%B7%60%F9%97%1A%7C%AB%3E%FC%E7%3C%0Bd%BEf%88%9A%7D%8E%81%E1i5H%'+
'1C%20%80%18Q%C2%C0%3D%E4%FF%93\'%8FQ%9Cxl%DFf%06%2B\'_%06%D3%80D%86%3D%F7%7F2%7C%60%E0%3A%0'+
'B%95%BA%D9%A0%F64%1A%20%80%E0%06x%85%A7%FC%D7P%96c%08%F0qg%D0%D4Rg%10%E1%E7gx%F3%F1%23%83'+
'%AE%B1%3DCSU!%C3%85kw%18%5Eq%C80%EC%BE%F7%83%E1%23%237%D8%10cE%91N%80%00b%061%DC%83%13%C0'+
'%9A%BD%DC%9C%18t%F5%B4%C0%9A%9F%BDz%CDp%EF%EE%7D%06mu%15%86%9B7o1hk%AA2%84%B8%DB0%08%F0r3'+
'%9C%BB%FDD%E0%17%23%EB%9B7%9F%7F%88%02%04%10%93%B3%7F%CCSu%A0fo%A0f%03C%5D%B8%E6%87%0F%1F'+
'2%5C%B9r%15%A8%F9%26%83%9A%BA%1A%83%99%99)%C3%99%D3%E7%18%8E%AF%99%CB%F0%E5%2F%F3C%98%CB%'+
'01%02%88i%EF%C6%25!%17%AF%DDb%B8%F5%E0%11%C3%C7O%9F%C1%CE~%F0%F0%11%C3%E5%CB%D7%E0%9AM%CD'+
'L%18%8E%9E%3C%C7%B0r%DD%26%06%A0zG%06%16%F6o0%03%00%02%08%14%0B%C7%0FnY%E1%F8%F7%CF%DF%FD'+
'%BF%7F%FDf%D0RSf%B8%7F%EF%3E%C3%AD%5B0%CD%C6%0CGO%005%AF%DD%CCpd%C7jG%A0%FA%03%C8%81%0C%1'+
'0%40%B0h%3C%00%92%FC%F3%E7%F7~C%1D%0D%06V%A6%7F%0C%DA%DAZ%40g%1B3%1C%3Av%86a%F9%EA%8D%0C\''+
'%F6l%80kff%06%07%1D%90fb%00%08%20%26%24%C3%0E%80%14%9D%B9x%95%E1%E7_%60%CA45%06%9Az%9Aa%C'+
'9%8Au(%9AA%80%9B%9B%1B%8E%01%02%88%05-e%1E8%BD%7F%B3%E3%BF%BF%7F%F7%EF%3F%7C%92a%E9%CAu%0'+
'Cg%0Fm%C3p%B6%80%80%00%9C%0D%10%40%2CX%92%F7%01%90%A6%DF%BF%7F%CE%BAt%7Co%1A%BAft%03%00%0'+
'2%88%05G%1E9%00%D4%1C%05%A4%CF%60%93%14%17%17%87%B3%01%02%88%05%96-%B1%803%B8%24%EEIJ%C2%'+
'D9%00%01%06%00%3B%BA%00%03%9Ah%00Z%00%00%00%00IEND%AEB%60%82';
var strikeImageString = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1%2BjfqAA" +
"AABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZT" +
"wAAACfSURBVCjPY%2FjPgB8yUFNBiWDBzOy01PKEmZG7sSrIe5dVDqIjygP%2FY1GQm5b2" +
"P7kDwvbAZkK6S8L%2F6P8hM32N%2FzPYu2C1InJ36P%2FA%2Fx7%2Fbc%2BYoSooLy3%2F" +
"D4Px%2F23%2BSyC5G8kEf0EIbZSmfdfov9wZDCvc0uzLYWyZ%2F2J3MRTYppn%2F14eaIv" +
"KOvxxDgUma7ju1M%2FLlkmnC5bwdNIoL7BAAWzr8P9A5d4gAAAAASUVORK5CYII%3D";
var boldImageString = 'data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%'+
'00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSoftw'+
'are%00Adobe%20ImageReadyq%C9e%3C%00%00%00%DAIDATx%DAb%FC%FF%FF%3F%03%25%00%20%80%98%18(%'+
'04%00%01%C4%82%CCQ%D7%B1V%00R%A1X%D4%3D%00%E2%D50%CE%CD%2BG%E1%12%00%01%C4%82%A6P%05%88%'+
'BBpXv%1F%88%9D%A0%86%C1%01%40%00%E1%F3%02HC%19%10%9F%87%F2%15%81%B8%12%5D%11%40%00%E13%E'+
'0%0E%10wC%0Da%402%04%05%00%04%101%81%E8%8A%C4%DE%8D.%09%10%40%2C%044%FEG%F3%D2ltE%00%01D'+
'J4%82%9C%DF%89.%08%10%40%F8%0C%009%97%11%EA%92%F7P%B14%206%40V%04%10%40%C4%B8%60%0F%10%9'+
'FA%E2%8B%20K%02%04%101%06%80l4A%8B%1D8%00%08%20R%02%91%01%9A%C8P%12%12%40%00%B1%10%E1%82'+
'%F7Po%ACFN%CE0%00%10%40%8C%94%E6F%80%00%A287%02%04%18%00%D8%7D%22%07E%A3EN%00%00%00%00IE'+
'ND%AEB%60%82';
var italicImageString = 'data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00'+
'%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSoftw'+
'are%00Adobe%20ImageReadyq%C9e%3C%00%00%00%C2IDATx%DAb%FC%FF%FF%3F%03%25%00%20%80%18)5%00%'+
'20%80P%0CP%D7%B1%C6%A6%E6%01%10%CB%23%F1%2F%DE%BCr%D4%00%C6%01%08%20%26%22%2C%09%40b%3B%0'+
'2%B1%01%B2%24%40%00%11c%00L%C3F%20%3E%80.%09%10%40%A4%B8%60%036I%80%00%22d%80%02%10%FB%03'+
'%F1G%20%5E%80M%01%40%001Qb%3B%08%00%04%10!%03%0A%A0%F4%04%5C%0A%00%02%88%89%40%E0%81%A2%E'+
'F!%10_%C0%A5%08%20%80%98%88%B0%7D%01%3E\'%02%04%10%13%11%FE%C7k%00%40%001%E1%D1%CC%0F%C4%0'+
'7%A1)%11\'%00%08%20t%03%04%A0%01%B6%00)%1C%1C%F0%19%00%10%40%2CX%0C%F8%80%2F%D4%D1%01%40%0'+
'0Q%9C%1B%01%02%0C%00%CA%3A!%B5%FDF%2F%1D%00%00%00%00IEND%AEB%60%82';
var underLineImageString = 'data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10'+
'%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSo'+
'ftware%00Adobe%20ImageReadyq%C9e%3C%00%00%00%E7IDATx%DAb%FC%FF%FF%3F%03%25%00%20%80X%60%0'+
'Cu%1Dk%10%E5%02%C4%86%40%7C%1E%88%F7%A0%A9%85%C9%AD%06%E2%077%AF%1C%05%0B%02%04%10%13%9A%'+
'22%90%82.(%CD%80CN%05Y%10%20%80%98%18(%04%00%01%04%F7%02%C8IPo%C0%F9%C8%00%97%1C%40%00%B1'+
'%60S%80%8D%8F.%073%04%20%80(%F6%02%40%00Ql%00%40%00Ql%00%40%00%A1%1B%F0%00J%BBbQ%1B%09%A5'+
'%CF%20%0B%02%04%10%BA%01%BB%81%F8%3D%D4%80R%20%16%80%E2%99%D0t0%0B%18x%1F%905%00%04%10%8A'+
'%01PI\'%20%BE%0FM4%EF%A18%0D%A4%19%88%CB%D1c%07%20%80X%B0D%CF%05%20S%09%C8V%40Jug%606%A3%1'+
'B%00%10%40%C8%06%1C%02b%5B%5C%F1%8F%24~%18%9AW%F2A%1C%80%00b%A447%02%04%10%C5%D1%08%10%60'+
'%00%3D%D6%3B%9C%3A%B2%D8%83%00%00%00%00IEND%AEB%60%82';
var linkImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F'+
'9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAYdEVYdENvcHl'+
'yaWdodABTdGVsbGEgU2NodWx6ZdRifb4AAAQOSURBVHjaYvz%2F%2Fz8DMhANbnVjYWN3Z2FhsWJiYtIEif379%2B'+
'%2F6nz9%2Fjv359XPn67XVu5DVAwQQI8wAIc8SBQ5ByRwDFeksDxM1Th1FEQYudjaw3K%2FffxiuPHzDsOvMnW9nb'+
'z2e8fXt08nvtvc8AMkBBBDYAEG3AgUFVaFuR%2F2vIYrSSgzcHKwMQlz3GLiBBjz5qM3w%2Fis%2Fw%2BfvbAw%2F'+
'f3xgePL6GsPJa%2F9Wvnr0quL9rgkPAAKIBWSKhgZbpZfF5RBP0xcMP%2F49Yrh435Th9rOfDKwsPxm%2B%2FP3LY'+
'CB7jOHHz3cMv%2F8xMjjrXWbgYhMI3%2FdX%2BxVQax5AAABBAL7%2FBBFGcEY5OAddIhbiAAcG%2BwAQC9wA8fLz'+
'APAG8QDY6UYA5%2FMLAC0Z4gAhFuwAEw%2FmAP3%2B5AA9K%2FAA7PAJZh9RaLkCiIWNW8D9x18%2Bzu%2F%2FpBj'+
'YmI8DnfmJ4d7zJww3n3szPP1qwsAOdMWN5yIMQnxvGR7f%2B8xw9IYFAw%2FLMwZF8VvsTySNggACAEEAvv8EBQoN'+
'Og8M%2FgAZEOgA4uoCANnlEgDD1DYA8QBNAAABAwD2%2BQoA2OgoABEK7gDl7PEA9vcPAAUK%2BwD8%2FwUADg4FN'+
'wKIBRRVzEz%2FGS5c%2FMFw8Jgow%2B17UkBn%2FmfgFNzHICivycAvpcTw%2FdVVhjOPzjC8fP4WaOhZhuecvxl%'+
'2Bc7sxvPshIAcQQCz%2Ffn1juHOLieEvixlDV0kKg7aaPjjqzl%2B7wVA3YSnDh2cMDDx%2FPjHk5U9nUFcxAMtdv'+
'n6Coa6ng%2BHtu2fMAAEAQQC%2B%2FwAXS3XHG0Fj%2F8bO1f%2Fo6Oj%2FdH5V%2F3eETv%2F4%2BPf%2FusG%2B'+
'%2FyZNav%2FHz9T%2F5%2Bjo%2F1ttWP9vfUj%2F9%2Fj3%2F7m%2FuP8UMT%2FnAgBBAL7%2FAvrz7sb27ucAMys'+
'lAHOGiAARF%2FoA7PDJAD5LMgCanqgA5861AJidoQA%2BSlgAzdr4AP0H3AB6iVgAIx0kAPzz9fUCiOX3l3c7Gb5%'+
'2BzAO6jIWJVYTh8LnHDLoyXgyblrcxiItKgJ0MSmyPHj9lqGyfyPDk4W0GKWFmBiFhIWA6YXwJEABBAL7%2FAvPNr'+
'roDAv3Oy9LWAKCKegAkHjUA5%2BvvAImUngBEUFMAFSg4AE5cZwCRnaMA7vL3ABsXQgCThasAwsXI%2BAkJCMICCJ'+
'yUJfQcQtXkJadkJkaJGWqpMnBzczMcO7OfYfHWgwzcmqEMP%2B%2BeZoj2tGDQUJRk4OLiYjh%2B%2BsyvBSs3Xrz'+
'94HExQADBMxPIkB%2Ffv5X8%2BfPbSFLyKwsn%2F38GNqlgBiZBPYb3D68xvLt3ieHHu2d%2FWBn%2BPuDi4drNys'+
'q8%2FOG5Q4cBAogRPTvzGge5MTEzuTMzMVsxMjJqQsPg%2Bt9%2Ff4%2F9%2B%2FtvJ8jLyOoBAgwA0%2FOkT2jAx'+
'5cAAAAASUVORK5CYII%3D';
var rot13ImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F'+
'9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kBA'+
'wklADESinEAAAC5SURBVDjL1VGxEcMgDHz5UqTIHG5c2G69iAtP4ImYgIJFaA0FDXOkSCpSiVOIsRs3%2BTsOgfT%'+
'2FQgB%2FD%2BKg7aYk7u8x2Pceoe2mFIPNvKbIPwDAaPWqkXnfnE97As%2BSwAsA2NlohVoHX0lJYkfGOPT0I2C0w'+
'rysObkzGwDAvKxZMBduzqdx6IkTMi5dZQ3VBhWDJekuJ38KOeXN%2BSTPJZozoXlZD80OBWKwVP7K5R3cas4AUgyW'+
'am%2B%2FDB9MC2bPDPVfkgAAAABJRU5ErkJggg%3D%3D';
var deleteImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2'+
'F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kB'+
'BRMcEvj1D%2FkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB%2F0lEQVQ4y6WTvWtTYRTGf'+
'zf3hiaN9zYfQxJyEWmSK0gXJx3Empg6OKlFBW3xC9RKFbs4dRR0a1AnEULULIr%2BASVJae1gZhNbktJALZnD1cYk'+
'SF6H9iaUFNF6pnMOz%2FOc8xzeV2InPnx8LyprZf4mohGD8QsXJQDFalbWykzdmabdbneBQog%2BshCCVPpVt1aSm'+
'U8imVkGOjQaDer1eh%2FRqu12OzabDYBDZ5%2BIh1dPoCQzy8zOXGJ98SWmaVKr1fYkA8iyjCRJmKbJ7MxtHs%2B9'+
'61koVr9Tr9epVqt%2FtGBhh0d3LFjN9Z86N5%2Fm%2BsCStJeE3ruBlYwcT7Cf6Aokjvr%2BT%2BDrpvlPxCO6tm3'+
'x8qOMKBQ39jX92MhBuie6%2F%2BCeuHH9Ful0ipOjp1haWiQWi5PP5xgbO8PCQo54LEE2N09y7nmXZ7MSl8tFR3QI'+
'hIK0Wm0i4SiyrBCJGMiygqqqOAcHUVVt1xZdAb8%2FgMfjxel0Eh4O0%2FrVRNdD%2BHxevB4vAIcNA7%2Ff3y%2B'+
'Qzc4Lm00iGAjicrr4trmBotjxeLwMaRoHVBehkI7D4UTTNEqlotglUCx9YeruNG%2FepnG73Wxt%2FcAxMMCQptFs'+
'NykUPgOQfp1icuIa5fJq76FZG6ysrqDrOufPjUsAz14khaZqKHY7E1cmpe0fWxH5XJaoYRCPnZYAfgPl2qpy77DQw'+
'QAAAABJRU5ErkJggg%3D%3D';
var insertImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2'+
'F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kB'+
'BRMcIDAiXnkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB0klEQVQ4y5WTPWtTcRSHn%2F9'+
'NFA0mhki9JYNDwaCgWbTGxLgGBJ0UdCpYEG0FB5FmqEtBBAvi4qT9AA4uOugHKLaLLnFRYrNoNDahNzdpWlt6z3GI'+
'eW0D8bedt4ffOXCMqo7RJWNMYX7%2BieZyn7vTxOOnmZnJGvpkVHVs6f3CytsXWRrrDoqFO3qDZDKOZTX7RZTl5Ry'+
'HS68wCIFghKtTz0hkJozfGFN4cCXI5YTNj%2B1TfHRiWO42q6t1jGkBBMvy4TtxkzPhb4z6vvP6%2BT0A%2FAAqO%'+
'2Bz3%2B%2FhUjjH36CmO45DP53usTk4eJxKJ8HD2Ptejv9jcqHcALTW2IBQKoSqMj5%2FtX5dgMMjWDnjaOUUboKo'+
'9zYsflnridCrJXvIzQBcvpOjABRFvMED3KLQcqCoqQvL8uf9zkE4lERFEBFXBdV1GRuzhAN2DIs3hWr02vAMRrw0p'+
'%2FixSqZR3HbkX0FfzvCagVnOplMtkMpcGbYo1yIHrVin9LiEi7fyd6VtMHFscvEJgn7LmrGHbUWw7Six2Etetoip'+
'M3b3dHvYZ7QUYy0%2Fjj0ci%2FIXHc1k2vd2nSR%2F5SqFxFICwFjkQCALVf9%2F4bmHlzcssG%2BsOw%2BjgoQjX'+
'ppvf%2BBd3Adwco75UngAAAABJRU5ErkJggg%3D%3D';
var editImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9'+
'hAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kBBR'+
'MbK%2BixETYAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABm0lEQVQ4y6WTPWtUQRSGn2HXj'+
'3vdJW7U8jZRi9gJhhBYwY%2FCPxCyCSlUbEQljb2tVRorC4NVgsYfoEGr7GInBCJJF9IEkiwkEZK9l8mdeS3uknXx'+
'LhvxMM3hzHnOO%2B%2FMwH%2BGWfz0UfXG8l8Fay0Ak7Up7t65Z3oBivXGMo8fPsktJknM3Pt3NBp1Vau3cyHm2Yu'+
'nmhivsba%2BlhHPFCiXS32lDw1dZXRkzBSdcwRByMWBSkYseCYnpvsCPizOZwOttcRxi4Nf%2BwBUBgcAaLWOejaH'+
'4YWOB2madikAf1Jcbx%2FrzxgevtFtIpCrIG9z7i2cVkGpVCaKonxAHLf4%2BvOQ1WYIwOy3%2BR7zfnRl95%2FPq'+
'QgQBCGrzZA3Lx%2BQWHeqF3j%2BbIGZ2aWOBwDb%2Bwkbu0d9m53zRJfDjolBkCUCJGGMQRISeAnnRerEsfPY1JM6'+
'cal8rvsWrlVi9g4tW3sxyOAR7YUEQkhtMJAc%2Bw5gp7nLzbEqK5sH7aZsugQeIQxIJ6pGrw%2By9PkLtZErmJnXC'+
'%2Fq%2B4f%2F5G9%2BKUt6%2BemR%2BA0EnwNU8ICcwAAAAAElFTkSuQmCC';
var newImageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9h'+
'AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9kBBRM'+
'cBXsmij4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABTklEQVQ4y62TMUtDQRCEv727GDBq'+
'NIKgjZUggtqnUBBjFe0s9aek8HcIFhb%2BjZdSC0WIKdVCQQjBQpTwcu%2FWIhqT%2BIxBnGaXY2Zu9paTarWqURQ'+
'xDLlcm9nZN6bzLXa2lhmfWEHctgC4KIqoVCpDDV6ej8mYS6x5IEnuab3W0PhUZexA3Cep2WwSQgBARLrijDkna6%2'+
'FIuGvErGGdIfgaPnaov9CuwaD4sxp5wpoHxKwibhewGBVCcgd6i%2BuNOiju9PrRWWAMxIFYEAVyXwbpYiHoHEHns'+
'aGOJllA0KROCItglvsTpKUJrOPDI%2BCxegMo3i%2Fg2SRrl8QMG0FEUKaItUxb94iTMnGyz8nZPJMzh501DhN%2F'+
'1Um8biAi5PN5Go2j7qWGEdH7Nr34toW0BD%2BJ%2BxKkkQbP0jhm1Li%2FjlAoFPgLZJTfOIhSqUSxWBT%2BA%2B9'+
'CW2rE0GjCswAAAABJRU5ErkJggg%3D%3D';
var quoteImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAA'+
'BGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEvSURBVDjLY%2Fj%2'+
'F%2Fz8DJZiBagZEtO8QAuKlQPwTiP%2FjwbuAWAWbARtXHrz1%2F%2Fefv%2F%2FxgS0n74MMuQ3EbHADgBweIP7z'+
'99%2B%2F%2Fx%2B%2B%2Ffv%2F8tO%2F%2F88%2B%2Fvv%2F5P2%2F%2Fw%2Ff%2Fft%2F782%2F%2F7df%2Ff1%2'+
'F5xXE8OoFx0GGmCEbIJcz9QBY8gVQ47MP%2F%2F4%2FBmp%2B8Pbf%2F7tQzddf%2FP1%2F9RnEgM5VZ0EGeGM14C'+
'lQ86N3UM2v%2F%2F2%2F9RKi%2BQpQ88UnuA2AewHk%2FPtAW%2B%2B8%2Fvv%2FJlDzted%2F%2F18Gar7wBGTAH'+
'7ABtYtOgAywxBqIIEOQAcg1Fx7%2FBRuMFoicuKLxDyzK5u64Cjfo%2FecfYD5Q%2FDLWaMSGgQrvPH%2F3FabxOx'+
'DXEp0SgYp7Z267AtL4BYgLSUrKQA1KQHwPiFPolxcGzAAA94sPIr7iagsAAAAASUVORK5CYII%3D';
var arrowLeftImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAHCAYAAAA'+
'vZezQAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA'+
'Ad0SU1FB9kBCgsBOnh6KYEAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAL0lEQVQ'+
'I12NgQAJFRXn%2F4ZzIiLD%2FAgICEAEnR4f%2FAgICEIGAAF84B7sKrGYg2wIAdZEYxjFTpkcAAAAASUV'+
'ORK5CYII%3D';
var arrowRightImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAHCAYAAA'+
'AvZezQAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAA'+
'AAd0SU1FB9kBCgsCEf%2FrgwIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAANUlE'+
'QVQI12MoKsr7z4AMBAQE%2FkdGhP1HERAQEPjv5Ojwn4GBgYFRQEAALuvgYIupAtMMdFsAIQEVOnJbKyEA'+
'AAAASUVORK5CYII%3D';
function addCodeFunction(code){
return function(){
/* Einfügen des Codes */
var start = textForm.selectionStart;
var end = textForm.selectionEnd;
var selection = textForm.value.substring(start, end);
var insertText = "[" + code + "]"+selection+"[/" + code + "]"
var position = textForm.selectionStart;
textForm.value = textForm.value.substr(0, start) + insertText + textForm.value.substr(end, textForm.value.length);
/* Anpassen der Cursorposition */
if (selection == ''){
textForm.selectionStart = start + code.length + 2;
textForm.selectionEnd = start + code.length + 2;
} else {
textForm.selectionStart = start + (code.length + 2);// + selection.length + 1;
textForm.selectionEnd = start + (code.length + 2) + selection.length;
}
textForm.focus();
}
}
function addURL(url,caption){
/* Einfügen des Smilies */
var start = textForm.selectionStart;
var end = textForm.selectionEnd;
var insertText = "[url=" + url + "]"+caption+"[/url]"
var position = textForm.selectionStart;
textForm.value = textForm.value.substr(0, start) + insertText + textForm.value.substr(end, textForm.value.length);
/* Anpassen der Cursorposition */
textForm.selectionStart = start + code.length + caption + 12;
textForm.selectionEnd = start + code.length + caption + 12;
textForm.focus();
}
function addURLFunction(){
return function(){
var url = prompt("Please enter URL.","http://");
if( url == "" || !url) return;
var caption = prompt("Please enter caption.",url.substr(7,url.length));
if( caption == "" || !url) return;
addURL(url,caption);
}
}
function addRot13Function(){
return function(){
/* Einfügen des Textes */
var start = textForm.selectionStart;
var end = textForm.selectionEnd;
var selection = textForm.value.substring(start, end);
if (selection == ''){
alert('Please select some text.');
return;
}
var insertText = convertROTStringWithBrackets(selection);
var position = textForm.selectionStart;
textForm.value = textForm.value.substr(0, start) + insertText + textForm.value.substr(end, textForm.value.length);
/* Anpassen der Cursorposition */
textForm.selectionStart = start ;
textForm.selectionEnd = start + selection.length;
textForm.focus();
}
}
function addSmilieFunction(code){
return function(){
/* Einfügen des Smilies */
var start = textForm.selectionStart;
var end = textForm.selectionEnd;
var selection = textForm.value.substring(start, end);
var position = textForm.selectionStart;
textForm.value = textForm.value.substr(0, start) + code + textForm.value.substr(end, textForm.value.length);
/* Anpassen der Cursorposition */
textForm.selectionStart = start + code.length;
textForm.selectionEnd = start + code.length;
textForm.focus();
}
}
function createButton(image,buttonFunction,caption){
var button = document.createElement('img');
button.src = image;
if(caption) button.title = caption;
button.style.cursor = 'pointer';
button.style.padding = '3px';
button.style.border = '1px solid lightgray';
button.addEventListener('click', buttonFunction, false);
addHoverEffects(button);
return button;
}
function createSmallButton(image,buttonFunction){
var button = document.createElement('img');
button.src = image;
button.style.marginRight = '1px';
button.style.cursor = 'pointer';
button.addEventListener('click', buttonFunction, false);
return button;
}
function getDonateButton(){
var donate_div = document.createElement('div');
donate_div.style.cssFloat = "right";
donate_div.innerHTML = "<form action='https://www.paypal.com/cgi-bin/webscr' method='post'> \
<input type='hidden' name='cmd' value='_s-xclick'> \
<input type='hidden' name='hosted_button_id' value='75G3QUQL8JLAJ'> \
<input type='image' src='https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif' border='0' name='submit' alt='PayPal - The safer, easier way to pay online!'> \
<img alt='' border='0' src='https://www.paypal.com/de_DE/i/scr/pixel.gif' width='1' height='1'> \
</form>";
// <form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="75G3QUQL8JLAJ"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1"></form>
return donate_div;
}
function getButtonsTable(){
var buttonsTable = document.createElement('table');
var trElement = document.createElement('tr');
// bold button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(boldImageString,addCodeFunction('b'),'bold'));
trElement.appendChild(tdElement);
// italic button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(italicImageString,addCodeFunction('i'),'italic'));
trElement.appendChild(tdElement);
// underline button - doesn't work :-(
//~ var tdElement = document.createElement('td');
//~ tdElement.appendChild(createButton(underLineImageString,addCodeFunction('u')));
//~ trElement.appendChild(tdElement);
// strike button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(strikeImageString,addCodeFunction('s'),'strike'));
trElement.appendChild(tdElement);
// quote button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(quoteImage,addCodeFunction('quote'),'quote'));
trElement.appendChild(tdElement);
// link button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(linkImageString,addURLFunction(),'insert url'));
trElement.appendChild(tdElement)
// rot13 button
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(rot13ImageString,addRot13Function(),'encrypt marked text'));
trElement.appendChild(tdElement);
// color picker
var tdElement = document.createElement('td');
tdElement.appendChild(createButton(colorPickerImageString,function(){showColorPicker(tdElement)},'set font color'));
trElement.appendChild(tdElement);
var tdElement = document.createElement('td');
var spanElement = document.createElement('span');
spanElement.innerHTML = "Finds:";
var foundLink = document.createElement('a');
foundLink.id = "foundLink";
foundLink.style.cursor = "pointer";
foundLink.innerHTML = getFounds();
foundLink.addEventListener('click',function(){
var returnFound = prompt('Enter current finds:', getFounds());
if (returnFound == null) {return}
returnFound = returnFound.replace(/\D/g, '');
returnFound = (returnFound == '')?1:returnFound;
returnFound = (returnFound == '0')?1:returnFound;
returnFound = Math.abs(returnFound);
document.getElementById('foundLink').innerHTML = returnFound;
setFounds(returnFound);
},false);
spanElement.appendChild(foundLink);
var counter_help_image = document.createElement('img');
counter_help_image.style.marginLeft = '5px';
counter_help_image.src = qmark_image;
//counter_help_image.src = 'http://online.sagepub.com/site/img/iconHelp.gif';
//counter_help_image.src = 'http://www.geocaching.com/images/wpttypes/sm/8.gif';
counter_help_image.addEventListener('click', function(){
var help_text =
"To use the counter you have to set the value of your finds first. \n\
Then you must add the keyword:\n\
{FINDS} \n \
in your log or template! It will replaced after your submit.";
alert(help_text);
},false);
spanElement.appendChild(counter_help_image);
tdElement.appendChild(spanElement);
trElement.appendChild(tdElement);
buttonsTable.appendChild(trElement);
return buttonsTable;
}
function getFounds(){
return GM_getValue("founds",1);
}
function setFounds(founds){
return GM_setValue("founds",founds);
}
function getSelectedValue(nodeList){
for(var i = 0; nodeList.length ; i++){
if(nodeList[i].selected)
return nodeList[i].value;
}
}
function setSelectedValue(nodeList, value){
for(var i = 0; i < nodeList.length; i++){
if(nodeList[i].value == value){
nodeList[i].selected = 'selected';
} else {
nodeList[i].selected = '';
}
}
}
function setGcDate(month, day, year){
return function(){
var gcMonth = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Month');
var gcDay = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Day');
var gcYear = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Year');
setSelectedValue(gcMonth.getElementsByTagName('option'), month);
setSelectedValue(gcDay.getElementsByTagName('option'), day);
setSelectedValue(gcYear.getElementsByTagName('option'), year);
changeCalendar(new Date(year,month-1,1), 0)();
}
}
function getCalendarTable(date){
var monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var daysInMonth =[31,0,31,30,31,30,31,31,30,31,30,31];
var weekDays =['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
var logDateMonth = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Month');
var logDateDay = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Day');
var logDateYear = document.getElementById('ctl00_ContentBody_LogBookPanel1_DateTimeLogged_Year');
if(!logDateMonth)
return;
var gcMonth = getSelectedValue(logDateMonth.childNodes);
var gcDay = getSelectedValue(logDateDay.childNodes);
var gcYear = getSelectedValue(logDateYear.childNodes);
//~ alert(gcDay);
var dateFromGc = new Date(gcYear,gcMonth-1,1);
if(date){
var calendarDate = date;
}else {
var calendarDate = dateFromGc;
}
var todaydate=new Date();
// check for leap year
daysInMonth[1]=(((calendarDate.getFullYear()%100!=0)&&(calendarDate.getFullYear()%4==0))||(calendarDate.getFullYear()%400==0))?29:28;
var calendarTable = document.createElement('table');
calendarTable.id = 'calendarTable';
//~ calendarTable.border = '1';
calendarTable.style.border = '1px solid black';
calendarTable.style.borderSpacing = '1pt';
calendarTable.style.borderCollapse = 'separate';
//~ border-spacing: 5pt; border-collapse: separate;
// header ( month + year )
var trElement = document.createElement('tr');calendarTable.appendChild(trElement);
var tdElement = document.createElement('th');trElement.appendChild(tdElement);
tdElement.colSpan = '4';
var leftButton = document.createElement('img');
leftButton.style.cursor = 'pointer';
leftButton.style.padding = '2px';
leftButton.src = arrowLeftImage;
leftButton.addEventListener('click', changeCalendar(calendarDate,-1), true);
var rightButton = document.createElement('img');
rightButton.style.cursor = 'pointer';
rightButton.style.padding = '2px';
rightButton.src = arrowRightImage;
rightButton.addEventListener('click', changeCalendar(calendarDate,1), true);
tdElement.appendChild(leftButton);
tdElement.appendChild(document.createTextNode(monthNames[calendarDate.getMonth()]));
tdElement.appendChild(rightButton);
var tdElement = document.createElement('th');trElement.appendChild(tdElement);
tdElement.colSpan = '3';
leftButton = document.createElement('img');
leftButton.style.cursor = 'pointer';
leftButton.style.padding = '2px';
leftButton.src = arrowLeftImage;
leftButton.addEventListener('click', changeCalendar(calendarDate,-12), true);
rightButton = document.createElement('img');
rightButton.style.cursor = 'pointer';
rightButton.style.padding = '2px';
rightButton.src = arrowRightImage;
rightButton.addEventListener('click', changeCalendar(calendarDate,12), true);
tdElement.appendChild(leftButton);
tdElement.appendChild(document.createTextNode(calendarDate.getFullYear()));
tdElement.appendChild(rightButton);
// calendar day row
var trElement = document.createElement('tr');calendarTable.appendChild(trElement);
for(s=0;s<7;s++){
var tdElement = document.createElement('td');trElement.appendChild(tdElement);
tdElement.appendChild(document.createTextNode(weekDays[s]));
}
// create the calendar
var trElement = document.createElement('tr');calendarTable.appendChild(trElement);
for(i=1;i<=42;i++){
var link = document.createElement('a');
link.style.cursor = 'pointer';
if(i-calendarDate.getDay() <= 0){// the last days previous month
var prevMonth = calendarDate.getMonth()-1;
if(calendarDate.getMonth()-1 != -1){
link.innerHTML = daysInMonth[(calendarDate.getMonth()-1)]+i-calendarDate.getDay();
} else {
link.innerHTML = daysInMonth[11]+i-calendarDate.getDay();
}
link.style.color = '#aaaaaa';
link.addEventListener('click', changeCalendar(calendarDate,-1), true);
}else if( (i-calendarDate.getDay()) > daysInMonth[calendarDate.getMonth()]){ // the first days next month
link.innerHTML = (i-calendarDate.getDay()) - daysInMonth[calendarDate.getMonth()];
link.style.color = '#aaaaaa';
link.addEventListener('click', changeCalendar(calendarDate,1), true);
}else {
link.innerHTML = i-calendarDate.getDay();
link.addEventListener('click', setGcDate(calendarDate.getMonth()+1, (i-calendarDate.getDay()), calendarDate.getFullYear()), true);
}
var tdElement = document.createElement('td');trElement.appendChild(tdElement);
tdElement.align = 'center';
tdElement.appendChild(link);
//~ GM_log((gcDay +'=='+ (i-calendarDate.getDay()) +'&&'+ (gcMonth-1) +'=='+ calendarDate.getMonth() +'&&'+ gcYear +'=='+ calendarDate.getFullYear()));
// mark the gc date
if (gcDay == (i-calendarDate.getDay()) && (gcMonth-1) == calendarDate.getMonth() && gcYear == calendarDate.getFullYear()){
link.style.border = '1px dotted lightgray';
}
//mark today
//~ GM_log((todaydate.getDate() +'=='+ (i-calendarDate.getDay()) +' && '+ todaydate.getMonth() +'=='+ calendarDate.getMonth() +' && '+ todaydate.getFullYear() +'=='+ calendarDate.getFullYear()));
if (todaydate.getDate() == (i-calendarDate.getDay()) && (todaydate.getMonth()) == calendarDate.getMonth() && todaydate.getFullYear() == calendarDate.getFullYear()){
link.style.borderBottom = '1px solid #7C1900';
link.style.backgroundColor = '#EBEBEB';
link.style.setProperty("-moz-border-radius", "5px", "");
}
if(((i)%7==0)&&(i<36)){
trElement = document.createElement('tr');calendarTable.appendChild(trElement);
}
}
return calendarTable;
}
function setDefaultTemplate(templateId){
return function(){
GM_setValue('defaultTemplates',templateId);
}
}
function insertTemplate(templateId, atCursor, forceInsert){
return function(){
for (i = 0; i < templates.length; i++) {
if(templates[i][0] == templateId){
var templateTestString = templates[i][2].replace(/\{FINDS\}/g,"").replace(/\s*/g,'');
// insert only, if texform does not contain the template
var trimmedTextform = textForm.value.replace(/\s*/g,'');
if((trimmedTextform.indexOf(templateTestString) < 0) || forceInsert){
if (atCursor){
var start = textForm.selectionStart;
} else { var start = 0; }
textForm.value =
textForm.value.substr(0, start) +
templates[i][2] +
textForm.value.substr(start, textForm.value.length);
if (atCursor){
textForm.selectionStart = start +templates[i][2].length;
textForm.selectionEnd = start +templates[i][2].length;
}
textForm.focus();
}
return;
}
}
}
}
function removeTemplate(templateId, trElement){
return function(){
for (i = 0; i < templates.length; i++) {
if(templates[i][0] == templateId){
templates.splice(i,1);
GM_setValue('templates',uneval(templates));
if(GM_getValue('defaultTemplates',0) == templateId){
GM_setValue('defaultTemplates',0);
};
if(trElement){
trElement.parentNode.removeChild(trElement);
}
return;
}
}
}
}
function editTemplate(templateId){
return function(){
if(templateMode)
return;
var templateEditMode = false;
templateMode = true;
var templateDiv = document.createElement('div')
var templateTextForm = document.createElement('textarea');
templateTextForm.rows="10";templateTextForm.cols="60";
templateTextForm.style.background = 'lightgray';
var templateNameTextForm = document.createElement('input');
templateNameTextForm.type="text";
templateNameTextForm.size="30";
templateNameTextForm.maxLength="8";
textForm.style.display = 'none';
var textFormOld = textForm;
textForm = templateTextForm;
if(templateId != 0){
for (i = 0; i < templates.length; i++) {
if(templates[i][0] == templateId){
templateTextForm.value += templates[i][2];
templateNameTextForm.value += templates[i][1];
templateEditMode = true;
break;
}
}
}
var saveFunction = function(){
if(templateNameTextForm.value == ''){
alert('Please enter template name.');
return;
}
templateMode = false;
templateDiv.parentNode.removeChild(templateDiv);
if(templateId == 0){
var templateNumber = 1;
for (i = 0; i < templates.length; i++) {
if(templates[i][0] >= templateNumber){
templateNumber = templates[i][0] + 1;
}
}
} else {
removeTemplate(templateId)();
setDefaultTemplate(templateId)();
templateNumber = templateId;
}
var template = new Array(templateNumber, templateNameTextForm.value, textForm.value);
if(!templateEditMode){
addTemplateToTable(template);
}
templates.push(template);
GM_setValue('templates',uneval(templates));
textForm = textFormOld;
textForm.style.display = 'block';
};
var closeFunction = function(){
templateMode = false;
templateDiv.parentNode.removeChild(templateDiv);
textForm = textFormOld;
textForm.style.display = 'block';
};
var saveButton = document.createElement('input');
var cancelButton = document.createElement('input');
saveButton.type="submit";
cancelButton.type="submit";
saveButton.value = 'save';
cancelButton.value = 'cancel';
saveButton.setAttribute('onclick','return false;');
cancelButton.setAttribute('onclick','return false;');
saveButton.addEventListener('click', saveFunction, false);
cancelButton.addEventListener('click', closeFunction, false);
templateDiv.appendChild(document.createTextNode('Templatename (max. 8 chars):'));
templateDiv.appendChild(templateNameTextForm);
templateDiv.appendChild(document.createElement('br'));
templateDiv.appendChild(templateTextForm);
templateDiv.appendChild(document.createElement('br'));
templateDiv.appendChild(saveButton);
templateDiv.appendChild(cancelButton);
textFormOld.parentNode.appendChild(templateDiv);
}
}
function addTemplateToTable(template){
var trElement = document.createElement('tr');
templateTable.insertBefore(trElement,templateTable.lastChild);
var tdElement = document.createElement('td');
trElement.appendChild(tdElement);
var templateRadio = document.createElement('input');
templateRadio.type = 'radio';
templateRadio.name = 'template';
if (GM_getValue('defaultTemplates',0) == template[0]){
templateRadio.checked = 'checked';
insertTemplate(template[0],false,false)();
}
templateRadio.addEventListener('click', setDefaultTemplate(template[0]), false);
tdElement.appendChild(templateRadio);
tdElement.appendChild(document.createTextNode(template[1]));
var tdElement = document.createElement('td');
trElement.appendChild(tdElement);
var button = createSmallButton(insertImageString, insertTemplate(template[0],true,true));
button.title = 'insert';
tdElement.appendChild(button);
button = createSmallButton(editImageString, editTemplate(template[0]));
button.title = 'edit';
tdElement.appendChild(button);
button = createSmallButton(deleteImageString, removeTemplate(template[0],trElement));
button.title = 'delete';
tdElement.appendChild(button);
}
function getTemplateTable(){
templateTable.style.border = '1px solid lightgray';
templateTable.style.width = '100%';
var templateTableCaption = document.createElement('caption');
templateTableCaption.innerHTML = 'Templates';
templateTable.appendChild(templateTableCaption);
var trElement = document.createElement('tr');
templateTable.appendChild(trElement);
var tdElement = document.createElement('td');
tdElement.colSpan = '2';
trElement.appendChild(tdElement);
var templateRadio = document.createElement('input');
templateRadio.type = 'radio';
templateRadio.name = 'template';
templateRadio.checked = 'checked';
templateRadio.addEventListener('click', setDefaultTemplate(0), false);
tdElement.appendChild(templateRadio);
tdElement.appendChild(document.createTextNode('none'));
var trElement = document.createElement('tr');
templateTable.appendChild(trElement);
var tdElement = document.createElement('td');
trElement.appendChild(tdElement);
tdElement.colSpan = '2';
tdElement.vAlign = 'top';
var newTemplateButton = document.createElement('a');
newTemplateButton.addEventListener('click', editTemplate(0),false);
newTemplateButton.style.cursor = 'pointer';
newTemplateButton.innerHTML = 'new template';
tdElement.appendChild(newTemplateButton);
for (i = 0; i < templates.length; i++) {
addTemplateToTable(templates[i]);
}
return templateTable;
}
function getSmilieTable(){
var smilieArray = new Array(
new Array('http://www.geocaching.com/images/icons/icon_smile.gif', '[:)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_big.gif', '[:D]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_cool.gif', '[8D]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_blush.gif', '[:I]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_tongue.gif', '[:P]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_evil.gif', '[}:)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_wink.gif', '[;)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_clown.gif', '[:o)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_blackeye.gif', '[B)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_8ball.gif', '[8]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_sad.gif', '[:(]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_shy.gif', '[8)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_shock.gif', '[:O]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_angry.gif', '[:(!]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_dead.gif', '[xx(]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_sleepy.gif', '[|)]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_kisses.gif', '[:X]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_approve.gif', '[^]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_dissapprove.gif', '[V]'),
new Array('http://www.geocaching.com/images/icons/icon_smile_question.gif', '[?]'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/mad.gif', ':angry:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/big_smile.gif', ':grin:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/sad.gif', ':sad:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/shock.gif', ':shocked:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/smile.gif', ':smile:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/surprise.gif', ':surprise:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/tired.gif', ':tired:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/ohh.gif', ':yikes:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/tongue.gif', ':tongue:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/bad_boy_a.gif', ':bad:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/back.gif', ':back:'),
new Array('http://img.groundspeak.com/forums/emoticons/signal/cute.gif', ':cute:')
);
var smilieTable = document.createElement('table');
var trElement = document.createElement('tr');
smilieTable.style.border = '1px solid lightgray';
smilieTable.style.borderCollapse = 'separate';
smilieTable.style.borderSpacing = '3px';
smilieTable.style.width = "100%";
var smilieNameRegex = /(http:\/\/www\.geocaching\.com\/images\/icons\/icon_smile_|http:\/\/img\.groundspeak\.com\/forums\/emoticons\/signal\/)(.*)\.gif/;
//~ alert(RegExp.$2);
//~ smilieNameRegex.exec('http://img.groundspeak.com/forums/emoticons/signal/cute.gif');
//~ alert(RegExp.$2);
for (i = 0; i < smilieArray.length; i++) {
if(i % 4 == 0){
trElement = document.createElement('tr');
smilieTable.appendChild(trElement);
}
var tdElement = document.createElement('td');
tdElement.align = "center";
var smilie = document.createElement('img');
smilieNameRegex.exec(smilieArray[i][0]);
smilie.title = RegExp.$2;
smilie.src = smilieArray[i][0];
smilie.addEventListener('click',addSmilieFunction(smilieArray[i][1]),false);
smilie.hspace = '2';
smilie.style.cursor = 'pointer';
tdElement.appendChild(smilie);
trElement.appendChild(tdElement);
}
return smilieTable;
}
function addHoverEffects(element){
element.addEventListener('mouseover', addHoverEffect(element),false);
element.addEventListener('mouseout', removeHoverEffect(element),false);
element.addEventListener('mousedown', addClickEffect(element),false);
element.addEventListener('mouseup', removeClickEffect(element),false);
element.style.margin = '1px';
}
function addClickEffect(element){return function(){ element.style.background = '#a9b2bf';}}
function removeClickEffect(element){return function(){element.style.background = '#cdd8e8';}}
function addHoverEffect(element){return function(){element.style.background = '#cdd8e8';}}
function removeHoverEffect(element){return function(){element.style.background = '';}}
function update(){
//Update not supported in chrome
if (ENVIRONMENT == 'chrome' || ENVIRONMENT == 'safari') {
return;
}
var updateDate = eval(GM_getValue('updateDate'));
if(!updateDate){
updateDate = new Date();
GM_setValue('updateDate',uneval(updateDate));
}
var currentDate = new Date();
// if the last updateDate is more than 86 400 000 msec (1 day) ago - check for updates
if(currentDate.getTime() - updateDate.getTime() > 86400000){
// set the new updateDate
GM_setValue('updateDate',uneval(currentDate));
// make the version request
var details = new Object();
details.method = 'GET';
details.url = 'http://gc.madd.in/gm/updates.xml';
details.onload = function(response) {parseUpdateXMLResponse(response.responseText)};
details.onerror = function(response) { alert('An error occour - please send an EMail to geocaching@madd.in!');};
GM_xmlhttpRequest(details);
}
}
function parseUpdateXMLResponse(xmlString){
var updateNode;
var xmlDoc = (new DOMParser()).parseFromString(xmlString, "application/xml");
var string = '';
var scriptElements = xmlDoc.getElementsByTagName('script');
for(var i = 0;i< scriptElements.length;i++){
if ( scriptElements[i].getAttribute ('id') == scriptId){
var versions = scriptElements[i].getElementsByTagName('version');
var currentVersion = 0;
var currentVersionIndex;
for(var j = 0;j< versions.length;j++){
if(versions[j].getAttribute('number') > currentVersion){
currentVersion = versions[j].getAttribute('number');
currentVersionIndex = j;
}
}
if (currentVersion > version){
updateNode = versions[currentVersionIndex];
}
}
}
if(updateNode){
var confirmString = 'There is a new version of GCBBCode.\n\t'+version+' -> '+updateNode.getAttribute('number')+'\nChanges:\n';
var changes = updateNode.getElementsByTagName('change');
for(var j = 0;j< changes.length;j++){
confirmString += '\t+ '+changes[j].textContent+'\n';
}
confirmString += '\nDo you want to update?';
if (confirm(confirmString)) {
GM_openInTab('http://gc.madd.in/gm/update.php?scriptId='+scriptId+'&fromVersion='+version+'&toVersion='+updateNode.getAttribute('number'));
}
}
}
function changeCalendar(date, delta){
return function(){
var calendarDate = new Date(date.getFullYear(),date.getMonth()+delta,1);
var calendarTable = document.getElementById('calendarTable');
var parent = calendarTable.parentNode;
parent.insertBefore( getCalendarTable(calendarDate),calendarTable);
parent.removeChild(calendarTable);
}
}
function init(){
//var nextNode = textForm.nextSibling;
//if(!nextNode)
var nextNode = textForm.parentNode;
var commentsDT = textForm.parentNode.previousSibling.previousSibling;
var completeDL = commentsDT.parentNode;
var dts = completeDL.getElementsByTagName('dt');
var dds = completeDL.getElementsByTagName('dd');
completeDL.removeChild(commentsDT);
if(document.URL.search("\/track\/log\.aspx")>=0) {
completeDL.removeChild(dds[4]);
} else {
/* completeDL.removeChild(dts[3]);
completeDL.removeChild(dds[3]);
completeDL.removeChild(dds[3]);*/
}
var logTable = document.createElement('table');
logTable.style.border = '1px solid lightgray';
logTable.style.width = '100%';
logTable.style.borderSpacing = '10px';
logTable.style.borderCollapse = 'separate';
var trElement = document.createElement('tr');
var tdElement = document.createElement('td');
tdElement.colSpan = '2';
tdElement.appendChild(getDonateButton());
tdElement.appendChild(getButtonsTable());
tdElement.style.borderBottom = '1px solid lightgray';
trElement.appendChild(tdElement);
logTable.appendChild(trElement);
trElement = document.createElement('tr');
tdElement = document.createElement('td');
tdElement.vAlign = "top"
tdElement.appendChild(textForm);
trElement.appendChild(tdElement);
tdElement = document.createElement('td');
tdElement.appendChild(getSmilieTable());
tdElement.appendChild(getTemplateTable());
var logButton = document.getElementById('ctl00_ContentBody_LogBookPanel1_LogButton');
logButton.style.marginTop = "40px";
logButton.style.fontWeight = "bold";
tdElement.appendChild(logButton);
tdElement.vAlign = "top"
tdElement.align = "center"
trElement.appendChild(tdElement);
logTable.appendChild(trElement);
trElement = document.createElement('tr');
tdElement = document.createElement('td');trElement.appendChild(tdElement);
tdElement.colSpan = '2';
if(document.getElementById('tblTravelBugs'))
tdElement.appendChild(document.getElementById('tblTravelBugs'));
logTable.appendChild(trElement);
textForm.rows = "20";
// dont display the list on the sendtogpx page
if(document.URL.search("report\.aspx")>0) {
textForm.rows = "20";
nextNode.appendChild(logTable);
} else {
//add the logtable AFTER the DL block
completeDL.parentNode.insertBefore( logTable, completeDL.nextSibling );
/*
var logTypeArray = new Array();
logTypeArray["2"] = "Found it";
logTypeArray["3"] = "Didn't find it";
logTypeArray["4"] = "Write note";
logTypeArray["7"] = "Needs Archived";
logTypeArray["45"] = "Needs Maintenance";
logTypeArray["-1"] = "- Select One -";
var logType = document.getElementById('ctl00_ContentBody_LogBookPanel1_ddLogType');
logType.removeAttribute('onChange');
logType.addEventListener('change',function(){document.getElementById('setDefaultButton').innerHTML = "set <b>"+logTypeArray[getSelectedValue(logType)]+"</b> as default";},false);
*/
var calenderElement = getCalendarTable();
if(calenderElement){
var calenderDiv = document.createElement('div');
//~ calenderDiv.style.cssFloat = 'right';
//~ calenderDiv.style.position = 'relative';
//~ calenderDiv.style.right = '10px';
calenderDiv.style.position = 'absolute';
calenderDiv.style.right = '50px';
calenderDiv.style.top = '90px';
calenderDiv.appendChild(calenderElement)
//~ var logPanel = document.getElementById('ctl00_ContentBody_LogBookPanel1_EditLogPanel');
//~ logPanel.insertBefore(calenderDiv,logPanel.childNodes[5]);
//~ logPanel.appendChild(calenderDiv);
var logPanel = document.getElementById('ctl00_ContentBody_LogBookPanel1_ddLogType');
//~ logPanel.insertBefore(calenderDiv,logPanel.childNodes[5]);
logPanel.parentNode.appendChild(calenderDiv);
//~ logType.parentNode.removeAttribute('width');
//~ logType.parentNode.parentNode.appendChild(tdElement);
//~ logType.parentNode.parentNode.parentNode.border = '1';
}
//~ alert(logTypeArray[getSelectedValue(logType)]);
//~ <option selected="selected" value="-1">- Select One -</option>
//~ <option value="2">Found it</option>
//~ <option value="3">Didn't find it</option>
//~ <option value="4">Write note</option>
//~ <option value="7"></option>
//~ <option value="45">Needs Maintenance</option>
//~ <option value="-1">- Select One -</option>
/*
var currentType = getSelectedValue(logType);
var defaultType = GM_getValue("defaultLogType" , "-1");
if(document.URL.indexOf("PLogGuid") < 0 && document.URL.indexOf("LUID") < 0 && currentType == "-1"){
if(currentType != defaultType){
// set default selection
for(var i = 0;logType.childNodes.length;i++){
if(logType.childNodes[i].value){
if(defaultType == logType.childNodes[i].value){
logType.childNodes[i].setAttribute('selected','selected');
break;
}
}
}
// remove current selection
for(var i = 0;logType.childNodes.length;i++){
if(logType.childNodes[i].value){
if(currentType == logType.childNodes[i].value){
logType.childNodes[i].removeAttribute('selected');
break;
}
}
}
currentType = defaultType;
}
}
var setDefaultButton = document.createElement('a');
setDefaultButton.id = "setDefaultButton";
setDefaultButton.innerHTML = "set <b>"+logTypeArray[currentType]+"</b> as default";
setDefaultButton.style.marginLeft = "3px";
setDefaultButton.style.cursor = "pointer";
setDefaultButton.addEventListener('click',
function(){
var currentType = getSelectedValue(logType)
GM_setValue("defaultLogType" , currentType);
alert(logTypeArray[currentType] +"\nwas successfully set on default type of log!");
}
,false);
//~ setDefaultButton
//~ alert(getSelectedValue(logType));
logType.parentNode.insertBefore(setDefaultButton, logType.nextSibling );
logType.parentNode.insertBefore(document.createElement("br"), setDefaultButton);
*/
}
// textForm.selectionStart = 0;
// textForm.selectionEnd = 0;
textForm.focus();
}
// COLOR PICKER
var colorPickerDiv = document.createElement('div');
colorPickerDiv.style.position = 'absolute';
colorPickerDiv.style.display = 'none';
colorPickerDiv.style.border = '#000000 1px solid';
colorPickerDiv.style.MozBorderRadius = '2%';
colorPickerDiv.style.background = '#FFFFFF';
colorPickerDiv.appendChild( getColorTable() );
document.body.appendChild(colorPickerDiv);
function showColorPicker(underElement){
if( colorPickerDiv.style.display == 'block'){
colorPickerDiv.style.display = 'none';
}else if(underElement){
colorPickerDiv.style.display = 'block';
colorPickerDiv.style.top = (getAbsoluteOffsetTop(underElement) + 20)+'px';
colorPickerDiv.style.left = getAbsoluteOffsetLeft(underElement)+'px';
}
}
function colorClicked(color){
return function(){
showColorPicker();
addCodeFunction(color)();
}
}
function getColorTable() {
var tableElement = document.createElement('table');
tableElement.style.margin = '1px';
var tableRow = document.createElement('tr');
tableElement.appendChild(tableRow);
var colors = Array('black', 'blue', 'red', 'purple', 'pink', 'orange', 'yellow', 'green', 'white');
for (i = 0; i < colors.length; i++) {
var tableCell = document.createElement('td');
tableCell.height = '10px';
tableCell.width = '10px';
tableCell.style.border = '1px solid #000000';
tableCell.style.background = colors[i];
tableCell.style.cursor = 'pointer';
tableCell.addEventListener('click', colorClicked(colors[i]), true);
tableRow.appendChild(tableCell);
}
return tableElement;
}
function getAbsoluteOffsetTop(theObj) {
var top = theObj.offsetTop;
var parent = theObj.offsetParent;
while (parent != document.body) {
top += parent.offsetTop;
parent = parent.offsetParent;
}
return top;
}
function getAbsoluteOffsetLeft(theObj) {
var left = theObj.offsetLeft;
var parent = theObj.offsetParent;
while (parent != document.body) {
left += parent.offsetLeft;
parent = parent.offsetParent;
}
return left;
}
// rot13.js from gc.com
var rot13array;
function createROT13array() {
var A = 0, C = [], D = "abcdefghijklmnopqrstuvwxyz", B = D.length;
for (A = 0; A < B; A++) {
C[D.charAt(A)] = D.charAt((A + 13) % 26)
}
for (A = 0; A < B; A++) {
C[D.charAt(A).toUpperCase()] = D.charAt((A + 13) % 26).toUpperCase()
}
return C
}
function convertROT13String(C) {
var A = 0, B = C.length, D = "";
if (!rot13array) {
rot13array = createROT13array()
}
for (A = 0; A < B; A++) {
D += convertROT13Char(C.charAt(A))
}
return D
}
function convertROT13Char(A) {
return (A >= "A" && A <= "Z" || A >= "a" && A <= "z" ? rot13array[A] : A)
}
function convertROTStringWithBrackets(C) {
var F = "", D = "", E = true, A = 0, B = C.length;
if (!rot13array) {
rot13array = createROT13array()
}
for (A = 0; A < B; A++) {
F = C.charAt(A);
if (A < (B - 4)) {
if (C.toLowerCase().substr(A, 4) == "<br/>") {
D += "<br>";
A += 3;
continue
}
}
if (F == "[" || F == "<") {
E = false
} else {
if (F == "]" || F == ">") {
E = true
} else {
if ((F == " ") || (F == "&dhbg;")) {
} else {
if (E) {
F = convertROT13Char(F)
}
}
}
}
D += F
}
return D
};
// start the whole thing
update();
init();